From 34bc3108fc9265880e203e7aff625f958f266d54 Mon Sep 17 00:00:00 2001 From: Travis Tidwell Date: Tue, 22 Jan 2019 09:05:29 +0300 Subject: [PATCH] Major upgrade and refactor to the osmplayer --- OSMPlayer.php | 554 -- OSMTemplate.php | 426 - README.txt | 25 - assets/screenshot.png | Bin 174976 -> 0 bytes bin/osmplayer.compressed.js | 29 + bin/osmplayer.js | 1199 +++ css/README.txt | 1 - doc/files.html | 336 + doc/index.html | 258 + doc/symbols/_global_.html | 488 ++ doc/symbols/jQuery.fn.osmplayer.html | 329 + doc/symbols/osmplayer.html | 952 +++ doc/symbols/osmplayer.pager.html | 449 ++ doc/symbols/osmplayer.playlist.html | 820 ++ doc/symbols/osmplayer.scroll.html | 673 ++ doc/symbols/osmplayer.teaser.html | 530 ++ doc/symbols/src/src_osmplayer.js.html | 247 + doc/symbols/src/src_osmplayer.pager.js.html | 55 + .../src/src_osmplayer.parser.asx.js.html | 52 + .../src/src_osmplayer.parser.default.js.html | 47 + .../src/src_osmplayer.parser.rss.js.html | 73 + .../src/src_osmplayer.parser.xspf.js.html | 52 + .../src/src_osmplayer.parser.youtube.js.html | 79 + .../src/src_osmplayer.playlist.js.html | 368 + doc/symbols/src/src_osmplayer.scroll.js.html | 232 + doc/symbols/src/src_osmplayer.teaser.js.html | 74 + getplaylist.php | 12 - index.html | 219 +- index.php | 17 - .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin 167 -> 0 bytes .../images/ui-icons_a83300_256x240.png | Bin 5355 -> 0 bytes jquery-ui/js/jquery.js | 154 - js/compressed/jquery.media.auto.js | 26 - js/compressed/jquery.media.control.js | 26 - js/compressed/jquery.media.dailymotion.js | 26 - js/compressed/jquery.media.display.js | 26 - js/compressed/jquery.media.drupal.js | 26 - js/compressed/jquery.media.file.js | 26 - js/compressed/jquery.media.flash.js | 26 - js/compressed/jquery.media.html5.js | 26 - js/compressed/jquery.media.image.js | 26 - js/compressed/jquery.media.json.js | 26 - js/compressed/jquery.media.link.js | 26 - js/compressed/jquery.media.links.js | 26 - js/compressed/jquery.media.menu.js | 26 - js/compressed/jquery.media.minplayer.js | 26 - js/compressed/jquery.media.mousewheel.js | 37 - js/compressed/jquery.media.node.js | 26 - js/compressed/jquery.media.pager.js | 26 - js/compressed/jquery.media.parser.js | 26 - js/compressed/jquery.media.player.js | 26 - js/compressed/jquery.media.playlist.js | 26 - js/compressed/jquery.media.playlistlink.js | 26 - js/compressed/jquery.media.rotator.js | 26 - js/compressed/jquery.media.rpc.js | 26 - js/compressed/jquery.media.scroll.js | 26 - js/compressed/jquery.media.sha256.js | 26 - js/compressed/jquery.media.slider.js | 26 - js/compressed/jquery.media.teaser.js | 26 - js/compressed/jquery.media.titlebar.js | 26 - js/compressed/jquery.media.utils.js | 26 - js/compressed/jquery.media.vimeo.js | 26 - js/compressed/jquery.media.voter.js | 26 - js/compressed/jquery.media.youtube.js | 26 - js/createJS.inc | 114 - js/createJS.php | 4 - js/createJS.sh | 3 - js/jquery.minplayer.compressed.js | 26 - js/jquery.minplayer.js | 2499 ------ js/jquery.osmplayer.compressed.js | 38 - js/jquery.osmplayer.js | 6912 ----------------- js/myfunctions.inc | 253 - js/source/jquery.media.auto.js | 48 - js/source/jquery.media.control.js | 263 - js/source/jquery.media.dailymotion.js | 270 - js/source/jquery.media.display.js | 390 - js/source/jquery.media.drupal.js | 166 - js/source/jquery.media.file.js | 207 - js/source/jquery.media.flash.js | 248 - js/source/jquery.media.html5.js | 343 - js/source/jquery.media.image.js | 126 - js/source/jquery.media.json.js | 166 - js/source/jquery.media.link.js | 48 - js/source/jquery.media.links.js | 94 - js/source/jquery.media.menu.js | 124 - js/source/jquery.media.minplayer.js | 442 -- js/source/jquery.media.mousewheel.js | 88 - js/source/jquery.media.node.js | 288 - js/source/jquery.media.pager.js | 359 - js/source/jquery.media.parser.js | 196 - js/source/jquery.media.player.js | 588 -- js/source/jquery.media.playlist.js | 390 - js/source/jquery.media.playlistlink.js | 56 - js/source/jquery.media.rotator.js | 182 - js/source/jquery.media.rpc.js | 208 - js/source/jquery.media.scroll.js | 355 - js/source/jquery.media.sha256.js | 48 - js/source/jquery.media.slider.js | 123 - js/source/jquery.media.teaser.js | 100 - js/source/jquery.media.titlebar.js | 54 - js/source/jquery.media.utils.js | 280 - js/source/jquery.media.vimeo.js | 258 - js/source/jquery.media.voter.js | 132 - js/source/jquery.media.youtube.js | 292 - js/yuicompressor/build/yuicompressor.jar | Bin 851219 -> 0 bytes makefile | 61 + minplayer/LICENSE.txt | 674 -- minplayer/README.md | 122 + minplayer/bin/minplayer.compressed.js | 103 + minplayer/bin/minplayer.js | 4167 ++++++++++ minplayer/com/mediafront/display/Image.as | 111 - minplayer/com/mediafront/display/Menu.as | 54 - minplayer/com/mediafront/display/Resizable.as | 51 - minplayer/com/mediafront/display/Skinable.as | 123 - minplayer/com/mediafront/display/Slider.as | 126 - .../mediafront/display/media/AudioPlayer.as | 229 - .../com/mediafront/display/media/IMedia.as | 38 - .../mediafront/display/media/MediaEvent.as | 49 - .../com/mediafront/display/media/MediaFile.as | 73 - .../mediafront/display/media/MediaPlayer.as | 301 - .../com/mediafront/display/media/SWFPlayer.as | 160 - .../mediafront/display/media/VideoPlayer.as | 312 - .../display/media/controls/ControlBar.as | 256 - .../display/media/controls/ControlEvent.as | 50 - .../display/media/controls/PlayLoader.as | 98 - minplayer/com/mediafront/plugin/Plugin.as | 60 - .../com/mediafront/plugin/PluginEvent.as | 27 - .../com/mediafront/plugin/PluginLoader.as | 173 - .../com/mediafront/plugin/PluginManager.as | 318 - .../com/mediafront/plugin/SkinablePlugin.as | 78 - .../com/mediafront/utils/ControlSettings.as | 31 - .../com/mediafront/utils/MediaSettings.as | 35 - .../com/mediafront/utils/MenuSettings.as | 29 - .../mediafront/utils/PlayLoaderSettings.as | 31 - minplayer/com/mediafront/utils/Settings.as | 124 - minplayer/com/mediafront/utils/Utils.as | 82 - minplayer/doc/files.html | 424 + minplayer/doc/index.html | 329 + minplayer/doc/symbols/_global_.html | 412 + .../doc/symbols/jQuery.fn.minplayer.html | 345 + minplayer/doc/symbols/minplayer.async.html | 535 ++ .../doc/symbols/minplayer.compatibility.html | 572 ++ .../symbols/minplayer.controller.base.html | 674 ++ .../symbols/minplayer.controllers.base.html | 674 ++ minplayer/doc/symbols/minplayer.display.html | 881 +++ minplayer/doc/symbols/minplayer.file.html | 611 ++ minplayer/doc/symbols/minplayer.flags.html | 550 ++ minplayer/doc/symbols/minplayer.image.html | 677 ++ .../symbols/minplayer.playLoader.base.html | 574 ++ .../doc/symbols/minplayer.players.base.html | 1913 +++++ .../doc/symbols/minplayer.players.flash.html | 693 ++ .../doc/symbols/minplayer.players.html5.html | 1269 +++ .../symbols/minplayer.players.minplayer.html | 1177 +++ .../doc/symbols/minplayer.players.vimeo.html | 1110 +++ .../symbols/minplayer.players.youtube.html | 1566 ++++ minplayer/doc/symbols/minplayer.plugin.html | 1170 +++ .../doc/symbols/minplayer.templates.base.html | 572 ++ .../symbols/src/src_minplayer.async.js.html | 69 + .../src/src_minplayer.compatibility.js.html | 109 + .../src/src_minplayer.controller.base.js.html | 302 + .../src/src_minplayer.controller.js.html | 320 + .../src_minplayer.controllers.base.js.html | 299 + .../symbols/src/src_minplayer.display.js.html | 304 + .../symbols/src/src_minplayer.file.js.html | 175 + .../symbols/src/src_minplayer.flags.js.html | 79 + .../symbols/src/src_minplayer.image.js.html | 152 + .../doc/symbols/src/src_minplayer.js.html | 360 + .../src/src_minplayer.playLoader.base.js.html | 190 + .../src/src_minplayer.playLoader.js.html | 197 + .../src/src_minplayer.players.base.js.html | 599 ++ .../src/src_minplayer.players.flash.js.html | 116 + .../src/src_minplayer.players.html5.js.html | 351 + .../src_minplayer.players.minplayer.js.html | 283 + .../src/src_minplayer.players.vimeo.js.html | 270 + .../src/src_minplayer.players.youtube.js.html | 354 + .../symbols/src/src_minplayer.plugin.js.html | 557 ++ .../src/src_minplayer.templates.base.js.html | 66 + minplayer/{ => flash}/README.txt | 2 +- minplayer/{ => flash}/config/config.xml | 0 minplayer/{ => flash}/config/nocontrols.xml | 0 minplayer/{ => flash}/minplayer.swf | Bin minplayer/flash/skins/default/controlBar.swf | Bin 0 -> 13678 bytes minplayer/flash/skins/default/mediaPlayer.swf | Bin 0 -> 2995 bytes minplayer/flash/skins/default/playLoader.swf | Bin 0 -> 2723 bytes minplayer/index.html | 63 + minplayer/makefile | 67 + minplayer/minplayer.fla | Bin 73728 -> 0 bytes minplayer/skins/default/controlBar.as | 168 - minplayer/skins/default/controlBar.fla | Bin 2148864 -> 0 bytes minplayer/skins/default/controlBar.swf | Bin 13678 -> 0 bytes minplayer/skins/default/mediaPlayer.as | 14 - minplayer/skins/default/mediaPlayer.fla | Bin 77824 -> 0 bytes minplayer/skins/default/mediaPlayer.swf | Bin 2982 -> 0 bytes minplayer/skins/default/playLoader.as | 24 - minplayer/skins/default/playLoader.fla | Bin 97280 -> 0 bytes minplayer/skins/default/playLoader.swf | Bin 2716 -> 0 bytes minplayer/skins/goldstandard/controlBar.as | 78 - minplayer/skins/goldstandard/controlBar.fla | Bin 769536 -> 0 bytes minplayer/skins/goldstandard/controlBar.swf | Bin 11242 -> 0 bytes minplayer/skins/goldstandard/mediaPlayer.as | 14 - minplayer/skins/goldstandard/mediaPlayer.fla | Bin 77824 -> 0 bytes minplayer/skins/goldstandard/mediaPlayer.swf | Bin 2984 -> 0 bytes minplayer/skins/goldstandard/playLoader.as | 24 - minplayer/skins/goldstandard/playLoader.fla | Bin 97280 -> 0 bytes minplayer/skins/goldstandard/playLoader.swf | Bin 2718 -> 0 bytes minplayer/skins/shockblack/controlBar.as | 216 - minplayer/skins/shockblack/controlBar.fla | Bin 2302464 -> 0 bytes minplayer/skins/shockblack/controlBar.swf | Bin 16727 -> 0 bytes minplayer/skins/shockblack/mediaPlayer.as | 14 - minplayer/skins/shockblack/mediaPlayer.fla | Bin 77824 -> 0 bytes minplayer/skins/shockblack/mediaPlayer.swf | Bin 2986 -> 0 bytes minplayer/skins/shockblack/playLoader.as | 24 - minplayer/skins/shockblack/playLoader.fla | Bin 97280 -> 0 bytes minplayer/skins/shockblack/playLoader.swf | Bin 2718 -> 0 bytes minplayer/src/minplayer.async.js | 61 + minplayer/src/minplayer.compatibility.js | 101 + minplayer/src/minplayer.controller.js | 312 + minplayer/src/minplayer.display.js | 296 + minplayer/src/minplayer.file.js | 167 + minplayer/src/minplayer.flags.js | 71 + minplayer/src/minplayer.image.js | 144 + minplayer/src/minplayer.js | 352 + minplayer/src/minplayer.playLoader.js | 189 + minplayer/src/minplayer.players.base.js | 591 ++ minplayer/src/minplayer.players.flash.js | 108 + minplayer/src/minplayer.players.html5.js | 343 + minplayer/src/minplayer.players.minplayer.js | 275 + minplayer/src/minplayer.players.vimeo.js | 262 + minplayer/src/minplayer.players.youtube.js | 346 + minplayer/src/minplayer.plugin.js | 549 ++ .../templates/default/css/images/loader.gif | Bin 0 -> 404 bytes .../default/css/images/pause-icon.png | Bin 0 -> 201 bytes .../default/css/images/play-icon.png | Bin 0 -> 375 bytes .../default/css/images/volume-full-icon.png | Bin 0 -> 666 bytes .../default/css/images/volume-mute-icon.png | Bin 0 -> 331 bytes .../default/css/media_player_default.css | 481 ++ .../js/minplayer.controller.default.js | 114 + .../templates/default/js/minplayer.default.js | 60 + .../js/minplayer.playLoader.default.js | 46 + .../default/media_player_default.tpl.php | 32 + minplayer/tools/README.md | 5 + playlist.xml | 104 +- playlist/Playlist.php | 501 -- playlist/cache/README.txt | 3 - playlist/playlists/default/track1/README.txt | 2 - playlist/playlists/default/track2/README.txt | 2 - playlist/playlists/default/track3/README.txt | 2 - src/osmplayer.js | 239 + src/osmplayer.pager.js | 47 + src/osmplayer.parser.asx.js | 44 + src/osmplayer.parser.default.js | 39 + src/osmplayer.parser.rss.js | 65 + src/osmplayer.parser.xspf.js | 44 + src/osmplayer.parser.youtube.js | 71 + src/osmplayer.playlist.js | 360 + src/osmplayer.scroll.js | 224 + src/osmplayer.teaser.js | 66 + templates/default/createIndex.bat | 6 - templates/default/createIndex.sh | 5 - templates/default/css/images/loader.gif | Bin 0 -> 404 bytes templates/default/css/images/pause-icon.png | Bin 0 -> 201 bytes templates/default/css/images/play-icon.png | Bin 0 -> 375 bytes templates/default/css/images/prev.png | Bin 0 -> 1238 bytes .../default/css/images/volume-full-icon.png | Bin 0 -> 666 bytes .../default/css/images/volume-mute-icon.png | Bin 0 -> 331 bytes .../images/ui-bg_flat_30_cccccc_40x100.png | Bin .../images/ui-bg_flat_50_5c5c5c_40x100.png | Bin .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin .../ui-bg_highlight-hard_20_0972a5_1x100.png | Bin .../ui-bg_highlight-soft_33_003147_1x100.png | Bin .../ui-bg_highlight-soft_35_222222_1x100.png | Bin .../ui-bg_highlight-soft_44_444444_1x100.png | Bin .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin .../images/ui-bg_loop_25_000000_21x21.png | Bin .../images/ui-icons_222222_256x240.png | Bin 4369 -> 4369 bytes .../images/ui-icons_4b8e0b_256x240.png | Bin 4369 -> 4369 bytes .../images/ui-icons_a83300_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cccccc_256x240.png | Bin 4369 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 4369 -> 4369 bytes .../dark-hive/jquery-ui-1.8.18.custom.css | 326 +- .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_0_eeeeee_40x100.png | Bin .../images/ui-bg_flat_55_994d53_40x100.png | Bin .../images/ui-bg_flat_55_fafafa_40x100.png | Bin .../ui-bg_gloss-wave_30_3d3644_500x100.png | Bin .../ui-bg_highlight-soft_100_dcd9de_1x100.png | Bin .../ui-bg_highlight-soft_100_eae6ea_1x100.png | Bin .../ui-bg_highlight-soft_25_30273a_1x100.png | Bin .../ui-bg_highlight-soft_45_5f5964_1x100.png | Bin .../images/ui-icons_454545_256x240.png | Bin .../images/ui-icons_734d99_256x240.png | Bin .../images/ui-icons_8d78a5_256x240.png | Bin .../images/ui-icons_a8a3ae_256x240.png | Bin .../images/ui-icons_ebccce_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../eggplant/jquery-ui-1.8rc1.custom.css | 0 .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_glass_15_5f391b_1x400.png | Bin .../ui-bg_gloss-wave_20_1c160d_500x100.png | Bin .../ui-bg_gloss-wave_25_453326_500x100.png | Bin .../ui-bg_gloss-wave_30_44372c_500x100.png | Bin .../ui-bg_highlight-soft_20_201913_1x100.png | Bin .../ui-bg_highlight-soft_20_619226_1x100.png | Bin .../ui-bg_inset-soft_10_201913_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_9bcc60_256x240.png | Bin .../images/ui-icons_add978_256x240.png | Bin .../images/ui-icons_e3ddc9_256x240.png | Bin .../images/ui-icons_f1fd86_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../mint-choc/jquery-ui-1.8rc1.custom.css | 0 .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin .../images/ui-bg_glass_65_ffffff_1x400.png | Bin .../images/ui-bg_glass_75_dadada_1x400.png | Bin .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_454545_256x240.png | Bin .../images/ui-icons_888888_256x240.png | Bin .../images/ui-icons_cd0a0a_256x240.png | Bin .../smoothness/jquery-ui-1.8rc1.custom.css | 0 .../images/ui-bg_diamond_10_4f4221_10x8.png | Bin .../images/ui-bg_diamond_20_372806_10x8.png | Bin .../images/ui-bg_diamond_25_675423_10x8.png | Bin .../images/ui-bg_diamond_25_d5ac5d_10x8.png | Bin .../images/ui-bg_diamond_8_261803_10x8.png | Bin .../images/ui-bg_diamond_8_443113_10x8.png | Bin .../images/ui-bg_flat_75_ddd4b0_40x100.png | Bin .../ui-bg_highlight-hard_65_fee4bd_1x100.png | Bin ..._highlight-hard_65_fee4bd_1x100.png0000664 | Bin .../images/ui-icons_070603_256x240.png | Bin .../images/ui-icons_e8e2b5_256x240.png | Bin .../images/ui-icons_e9cd86_256x240.png | Bin .../images/ui-icons_efec9f_256x240.png | Bin .../images/ui-icons_f2ec64_256x240.png | Bin .../images/ui-icons_f9f2bd_256x240.png | Bin .../images/ui-icons_ff7519_256x240.png | Bin .../swanky-purse/jquery-ui-1.8rc1.custom.css | 0 .../images/ui-bg_flat_30_cccccc_40x100.png | Bin .../images/ui-bg_flat_50_5c5c5c_40x100.png | Bin .../images/ui-bg_glass_20_555555_1x400.png | Bin .../images/ui-bg_glass_40_0078a3_1x400.png | Bin .../images/ui-bg_glass_40_ffc73d_1x400.png | Bin 0 -> 131 bytes .../ui-bg_gloss-wave_25_333333_500x100.png | Bin .../ui-bg_highlight-soft_80_eeeeee_1x100.png | Bin .../ui-bg_inset-soft_25_000000_1x100.png | Bin .../ui-bg_inset-soft_30_f58400_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_4b8e0b_256x240.png | Bin .../images/ui-icons_a83300_256x240.png | Bin .../images/ui-icons_cccccc_256x240.png | Bin .../images/ui-icons_ffffff_256x240.png | Bin .../ui-darkness/jquery-ui-1.8rc1.custom.css | 0 templates/default/css/osmplayer_default.css | 621 ++ templates/default/images/busy.gif | Bin 3208 -> 0 bytes templates/default/images/mask.png | Bin 151 -> 0 bytes templates/default/images/play.png | Bin 956 -> 0 bytes templates/default/index.php | 22 - .../default/jquery.media.template.api.js.js | 250 - ...query.media.template.default.compressed.js | 26 - .../default/jquery.media.template.default.js | 329 - .../js/osmplayer.controller.default.js | 79 + templates/default/js/osmplayer.default.js | 65 + .../default/js/osmplayer.pager.default.js | 47 + .../js/osmplayer.playLoader.default.js | 46 + .../default/js/osmplayer.playlist.default.js | 77 + .../default/js/osmplayer.scroll.default.js | 49 + .../default/js/osmplayer.teaser.default.js | 76 + templates/default/osmplayer_default.css | 577 -- templates/default/osmplayer_default.tpl.php | 80 +- .../osmplayer_default_controlbar.tpl.php | 43 - .../osmplayer_default_hscrollbar.tpl.php | 13 - templates/default/osmplayer_default_ie.css | 0 .../default/osmplayer_default_links.tpl.php | 9 - .../default/osmplayer_default_menu.tpl.php | 27 - .../default/osmplayer_default_node.tpl.php | 10 - .../osmplayer_default_nodevoter.tpl.php | 42 - .../default/osmplayer_default_pager.tpl.php | 12 - .../osmplayer_default_playlist.tpl.php | 14 - .../osmplayer_default_scrollbar.tpl.php | 13 - .../default/osmplayer_default_teaser.tpl.php | 5 - .../osmplayer_default_teaservoter.tpl.php | 7 - .../osmplayer_default_titlebar.tpl.php | 13 - templates/default/playlist.xml | 56 - templates/default/template.php | 149 - version.txt | 2 +- 390 files changed, 41331 insertions(+), 25591 deletions(-) delete mode 100755 OSMPlayer.php delete mode 100755 OSMTemplate.php delete mode 100644 README.txt delete mode 100755 assets/screenshot.png create mode 100644 bin/osmplayer.compressed.js create mode 100644 bin/osmplayer.js delete mode 100755 css/README.txt create mode 100644 doc/files.html create mode 100644 doc/index.html create mode 100644 doc/symbols/_global_.html create mode 100644 doc/symbols/jQuery.fn.osmplayer.html create mode 100644 doc/symbols/osmplayer.html create mode 100644 doc/symbols/osmplayer.pager.html create mode 100644 doc/symbols/osmplayer.playlist.html create mode 100644 doc/symbols/osmplayer.scroll.html create mode 100644 doc/symbols/osmplayer.teaser.html create mode 100644 doc/symbols/src/src_osmplayer.js.html create mode 100644 doc/symbols/src/src_osmplayer.pager.js.html create mode 100644 doc/symbols/src/src_osmplayer.parser.asx.js.html create mode 100644 doc/symbols/src/src_osmplayer.parser.default.js.html create mode 100644 doc/symbols/src/src_osmplayer.parser.rss.js.html create mode 100644 doc/symbols/src/src_osmplayer.parser.xspf.js.html create mode 100644 doc/symbols/src/src_osmplayer.parser.youtube.js.html create mode 100644 doc/symbols/src/src_osmplayer.playlist.js.html create mode 100644 doc/symbols/src/src_osmplayer.scroll.js.html create mode 100644 doc/symbols/src/src_osmplayer.teaser.js.html delete mode 100755 getplaylist.php delete mode 100755 index.php delete mode 100644 jquery-ui/css/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png delete mode 100644 jquery-ui/css/dark-hive/images/ui-icons_a83300_256x240.png delete mode 100644 jquery-ui/js/jquery.js delete mode 100644 js/compressed/jquery.media.auto.js delete mode 100644 js/compressed/jquery.media.control.js delete mode 100644 js/compressed/jquery.media.dailymotion.js delete mode 100644 js/compressed/jquery.media.display.js delete mode 100644 js/compressed/jquery.media.drupal.js delete mode 100644 js/compressed/jquery.media.file.js delete mode 100644 js/compressed/jquery.media.flash.js delete mode 100644 js/compressed/jquery.media.html5.js delete mode 100644 js/compressed/jquery.media.image.js delete mode 100644 js/compressed/jquery.media.json.js delete mode 100644 js/compressed/jquery.media.link.js delete mode 100644 js/compressed/jquery.media.links.js delete mode 100644 js/compressed/jquery.media.menu.js delete mode 100644 js/compressed/jquery.media.minplayer.js delete mode 100644 js/compressed/jquery.media.mousewheel.js delete mode 100644 js/compressed/jquery.media.node.js delete mode 100644 js/compressed/jquery.media.pager.js delete mode 100644 js/compressed/jquery.media.parser.js delete mode 100644 js/compressed/jquery.media.player.js delete mode 100644 js/compressed/jquery.media.playlist.js delete mode 100644 js/compressed/jquery.media.playlistlink.js delete mode 100644 js/compressed/jquery.media.rotator.js delete mode 100644 js/compressed/jquery.media.rpc.js delete mode 100644 js/compressed/jquery.media.scroll.js delete mode 100644 js/compressed/jquery.media.sha256.js delete mode 100644 js/compressed/jquery.media.slider.js delete mode 100644 js/compressed/jquery.media.teaser.js delete mode 100644 js/compressed/jquery.media.titlebar.js delete mode 100644 js/compressed/jquery.media.utils.js delete mode 100644 js/compressed/jquery.media.vimeo.js delete mode 100644 js/compressed/jquery.media.voter.js delete mode 100644 js/compressed/jquery.media.youtube.js delete mode 100755 js/createJS.inc delete mode 100755 js/createJS.php delete mode 100755 js/createJS.sh delete mode 100644 js/jquery.minplayer.compressed.js delete mode 100644 js/jquery.minplayer.js delete mode 100644 js/jquery.osmplayer.compressed.js delete mode 100644 js/jquery.osmplayer.js delete mode 100755 js/myfunctions.inc delete mode 100644 js/source/jquery.media.auto.js delete mode 100755 js/source/jquery.media.control.js delete mode 100644 js/source/jquery.media.dailymotion.js delete mode 100755 js/source/jquery.media.display.js delete mode 100644 js/source/jquery.media.drupal.js delete mode 100755 js/source/jquery.media.file.js delete mode 100755 js/source/jquery.media.flash.js delete mode 100755 js/source/jquery.media.html5.js delete mode 100644 js/source/jquery.media.image.js delete mode 100755 js/source/jquery.media.json.js delete mode 100644 js/source/jquery.media.link.js delete mode 100644 js/source/jquery.media.links.js delete mode 100644 js/source/jquery.media.menu.js delete mode 100755 js/source/jquery.media.minplayer.js delete mode 100644 js/source/jquery.media.mousewheel.js delete mode 100644 js/source/jquery.media.node.js delete mode 100644 js/source/jquery.media.pager.js delete mode 100755 js/source/jquery.media.parser.js delete mode 100755 js/source/jquery.media.player.js delete mode 100755 js/source/jquery.media.playlist.js delete mode 100644 js/source/jquery.media.playlistlink.js delete mode 100644 js/source/jquery.media.rotator.js delete mode 100755 js/source/jquery.media.rpc.js delete mode 100755 js/source/jquery.media.scroll.js delete mode 100644 js/source/jquery.media.sha256.js delete mode 100644 js/source/jquery.media.slider.js delete mode 100755 js/source/jquery.media.teaser.js delete mode 100644 js/source/jquery.media.titlebar.js delete mode 100644 js/source/jquery.media.utils.js delete mode 100644 js/source/jquery.media.vimeo.js delete mode 100644 js/source/jquery.media.voter.js delete mode 100755 js/source/jquery.media.youtube.js delete mode 100755 js/yuicompressor/build/yuicompressor.jar create mode 100644 makefile delete mode 100755 minplayer/LICENSE.txt create mode 100644 minplayer/README.md create mode 100644 minplayer/bin/minplayer.compressed.js create mode 100644 minplayer/bin/minplayer.js delete mode 100755 minplayer/com/mediafront/display/Image.as delete mode 100755 minplayer/com/mediafront/display/Menu.as delete mode 100755 minplayer/com/mediafront/display/Resizable.as delete mode 100755 minplayer/com/mediafront/display/Skinable.as delete mode 100755 minplayer/com/mediafront/display/Slider.as delete mode 100755 minplayer/com/mediafront/display/media/AudioPlayer.as delete mode 100755 minplayer/com/mediafront/display/media/IMedia.as delete mode 100755 minplayer/com/mediafront/display/media/MediaEvent.as delete mode 100755 minplayer/com/mediafront/display/media/MediaFile.as delete mode 100755 minplayer/com/mediafront/display/media/MediaPlayer.as delete mode 100755 minplayer/com/mediafront/display/media/SWFPlayer.as delete mode 100755 minplayer/com/mediafront/display/media/VideoPlayer.as delete mode 100755 minplayer/com/mediafront/display/media/controls/ControlBar.as delete mode 100755 minplayer/com/mediafront/display/media/controls/ControlEvent.as delete mode 100755 minplayer/com/mediafront/display/media/controls/PlayLoader.as delete mode 100755 minplayer/com/mediafront/plugin/Plugin.as delete mode 100755 minplayer/com/mediafront/plugin/PluginEvent.as delete mode 100755 minplayer/com/mediafront/plugin/PluginLoader.as delete mode 100755 minplayer/com/mediafront/plugin/PluginManager.as delete mode 100755 minplayer/com/mediafront/plugin/SkinablePlugin.as delete mode 100755 minplayer/com/mediafront/utils/ControlSettings.as delete mode 100755 minplayer/com/mediafront/utils/MediaSettings.as delete mode 100755 minplayer/com/mediafront/utils/MenuSettings.as delete mode 100755 minplayer/com/mediafront/utils/PlayLoaderSettings.as delete mode 100755 minplayer/com/mediafront/utils/Settings.as delete mode 100755 minplayer/com/mediafront/utils/Utils.as create mode 100644 minplayer/doc/files.html create mode 100644 minplayer/doc/index.html create mode 100644 minplayer/doc/symbols/_global_.html create mode 100644 minplayer/doc/symbols/jQuery.fn.minplayer.html create mode 100644 minplayer/doc/symbols/minplayer.async.html create mode 100644 minplayer/doc/symbols/minplayer.compatibility.html create mode 100644 minplayer/doc/symbols/minplayer.controller.base.html create mode 100644 minplayer/doc/symbols/minplayer.controllers.base.html create mode 100644 minplayer/doc/symbols/minplayer.display.html create mode 100644 minplayer/doc/symbols/minplayer.file.html create mode 100644 minplayer/doc/symbols/minplayer.flags.html create mode 100644 minplayer/doc/symbols/minplayer.image.html create mode 100644 minplayer/doc/symbols/minplayer.playLoader.base.html create mode 100644 minplayer/doc/symbols/minplayer.players.base.html create mode 100644 minplayer/doc/symbols/minplayer.players.flash.html create mode 100644 minplayer/doc/symbols/minplayer.players.html5.html create mode 100644 minplayer/doc/symbols/minplayer.players.minplayer.html create mode 100644 minplayer/doc/symbols/minplayer.players.vimeo.html create mode 100644 minplayer/doc/symbols/minplayer.players.youtube.html create mode 100644 minplayer/doc/symbols/minplayer.plugin.html create mode 100644 minplayer/doc/symbols/minplayer.templates.base.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.async.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.compatibility.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.controller.base.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.controller.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.controllers.base.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.display.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.file.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.flags.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.image.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.playLoader.base.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.playLoader.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.players.base.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.players.flash.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.players.html5.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.players.minplayer.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.players.vimeo.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.players.youtube.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.plugin.js.html create mode 100644 minplayer/doc/symbols/src/src_minplayer.templates.base.js.html rename minplayer/{ => flash}/README.txt (95%) rename minplayer/{ => flash}/config/config.xml (100%) rename minplayer/{ => flash}/config/nocontrols.xml (100%) rename minplayer/{ => flash}/minplayer.swf (100%) create mode 100644 minplayer/flash/skins/default/controlBar.swf create mode 100644 minplayer/flash/skins/default/mediaPlayer.swf create mode 100644 minplayer/flash/skins/default/playLoader.swf create mode 100644 minplayer/index.html create mode 100644 minplayer/makefile delete mode 100755 minplayer/minplayer.fla delete mode 100644 minplayer/skins/default/controlBar.as delete mode 100644 minplayer/skins/default/controlBar.fla delete mode 100644 minplayer/skins/default/controlBar.swf delete mode 100644 minplayer/skins/default/mediaPlayer.as delete mode 100644 minplayer/skins/default/mediaPlayer.fla delete mode 100644 minplayer/skins/default/mediaPlayer.swf delete mode 100644 minplayer/skins/default/playLoader.as delete mode 100644 minplayer/skins/default/playLoader.fla delete mode 100644 minplayer/skins/default/playLoader.swf delete mode 100644 minplayer/skins/goldstandard/controlBar.as delete mode 100644 minplayer/skins/goldstandard/controlBar.fla delete mode 100644 minplayer/skins/goldstandard/controlBar.swf delete mode 100644 minplayer/skins/goldstandard/mediaPlayer.as delete mode 100644 minplayer/skins/goldstandard/mediaPlayer.fla delete mode 100644 minplayer/skins/goldstandard/mediaPlayer.swf delete mode 100644 minplayer/skins/goldstandard/playLoader.as delete mode 100644 minplayer/skins/goldstandard/playLoader.fla delete mode 100644 minplayer/skins/goldstandard/playLoader.swf delete mode 100644 minplayer/skins/shockblack/controlBar.as delete mode 100644 minplayer/skins/shockblack/controlBar.fla delete mode 100644 minplayer/skins/shockblack/controlBar.swf delete mode 100644 minplayer/skins/shockblack/mediaPlayer.as delete mode 100644 minplayer/skins/shockblack/mediaPlayer.fla delete mode 100644 minplayer/skins/shockblack/mediaPlayer.swf delete mode 100644 minplayer/skins/shockblack/playLoader.as delete mode 100644 minplayer/skins/shockblack/playLoader.fla delete mode 100644 minplayer/skins/shockblack/playLoader.swf create mode 100644 minplayer/src/minplayer.async.js create mode 100644 minplayer/src/minplayer.compatibility.js create mode 100644 minplayer/src/minplayer.controller.js create mode 100644 minplayer/src/minplayer.display.js create mode 100644 minplayer/src/minplayer.file.js create mode 100644 minplayer/src/minplayer.flags.js create mode 100644 minplayer/src/minplayer.image.js create mode 100644 minplayer/src/minplayer.js create mode 100644 minplayer/src/minplayer.playLoader.js create mode 100644 minplayer/src/minplayer.players.base.js create mode 100644 minplayer/src/minplayer.players.flash.js create mode 100644 minplayer/src/minplayer.players.html5.js create mode 100644 minplayer/src/minplayer.players.minplayer.js create mode 100644 minplayer/src/minplayer.players.vimeo.js create mode 100644 minplayer/src/minplayer.players.youtube.js create mode 100644 minplayer/src/minplayer.plugin.js create mode 100644 minplayer/templates/default/css/images/loader.gif create mode 100644 minplayer/templates/default/css/images/pause-icon.png create mode 100644 minplayer/templates/default/css/images/play-icon.png create mode 100644 minplayer/templates/default/css/images/volume-full-icon.png create mode 100644 minplayer/templates/default/css/images/volume-mute-icon.png create mode 100644 minplayer/templates/default/css/media_player_default.css create mode 100644 minplayer/templates/default/js/minplayer.controller.default.js create mode 100644 minplayer/templates/default/js/minplayer.default.js create mode 100644 minplayer/templates/default/js/minplayer.playLoader.default.js create mode 100644 minplayer/templates/default/media_player_default.tpl.php create mode 100644 minplayer/tools/README.md delete mode 100755 playlist/Playlist.php delete mode 100755 playlist/cache/README.txt delete mode 100755 playlist/playlists/default/track1/README.txt delete mode 100755 playlist/playlists/default/track2/README.txt delete mode 100755 playlist/playlists/default/track3/README.txt create mode 100644 src/osmplayer.js create mode 100644 src/osmplayer.pager.js create mode 100644 src/osmplayer.parser.asx.js create mode 100644 src/osmplayer.parser.default.js create mode 100644 src/osmplayer.parser.rss.js create mode 100644 src/osmplayer.parser.xspf.js create mode 100644 src/osmplayer.parser.youtube.js create mode 100644 src/osmplayer.playlist.js create mode 100644 src/osmplayer.scroll.js create mode 100644 src/osmplayer.teaser.js delete mode 100755 templates/default/createIndex.bat delete mode 100755 templates/default/createIndex.sh create mode 100644 templates/default/css/images/loader.gif create mode 100644 templates/default/css/images/pause-icon.png create mode 100644 templates/default/css/images/play-icon.png create mode 100644 templates/default/css/images/prev.png create mode 100644 templates/default/css/images/volume-full-icon.png create mode 100644 templates/default/css/images/volume-mute-icon.png rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png (100%) rename {jquery-ui/css/ui-darkness => templates/default/css/jquery-ui/dark-hive}/images/ui-bg_glass_40_ffc73d_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-bg_loop_25_000000_21x21.png (100%) rename {jquery-ui/css/ui-darkness => templates/default/css/jquery-ui/dark-hive}/images/ui-icons_222222_256x240.png (92%) rename {jquery-ui/css => templates/default/css/jquery-ui}/dark-hive/images/ui-icons_4b8e0b_256x240.png (92%) create mode 100644 templates/default/css/jquery-ui/dark-hive/images/ui-icons_a83300_256x240.png rename {jquery-ui/css/ui-darkness => templates/default/css/jquery-ui/dark-hive}/images/ui-icons_cccccc_256x240.png (92%) rename {jquery-ui/css/ui-darkness => templates/default/css/jquery-ui/dark-hive}/images/ui-icons_ffffff_256x240.png (92%) rename jquery-ui/css/dark-hive/jquery-ui-1.8rc1.custom.css => templates/default/css/jquery-ui/dark-hive/jquery-ui-1.8.18.custom.css (69%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_flat_55_994d53_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_flat_55_fafafa_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-icons_454545_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-icons_734d99_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-icons_8d78a5_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-icons_a8a3ae_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/images/ui-icons_ebccce_256x240.png (100%) rename {jquery-ui/css/dark-hive => templates/default/css/jquery-ui/eggplant}/images/ui-icons_ffffff_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/eggplant/jquery-ui-1.8rc1.custom.css (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png (100%) rename {jquery-ui/css/dark-hive => templates/default/css/jquery-ui/mint-choc}/images/ui-icons_222222_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-icons_9bcc60_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-icons_add978_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-icons_e3ddc9_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/images/ui-icons_f1fd86_256x240.png (100%) rename {jquery-ui/css/eggplant => templates/default/css/jquery-ui/mint-choc}/images/ui-icons_ffffff_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/mint-choc/jquery-ui-1.8rc1.custom.css (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_glass_65_ffffff_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_glass_75_dadada_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png (100%) rename {jquery-ui/css/mint-choc => templates/default/css/jquery-ui/smoothness}/images/ui-icons_222222_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-icons_2e83ff_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-icons_454545_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-icons_888888_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/images/ui-icons_cd0a0a_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/smoothness/jquery-ui-1.8rc1.custom.css (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png0000664 (100%) mode change 100755 => 100644 rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-icons_070603_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-icons_e8e2b5_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-icons_e9cd86_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-icons_efec9f_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-icons_f2ec64_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-icons_f9f2bd_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/images/ui-icons_ff7519_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/swanky-purse/jquery-ui-1.8rc1.custom.css (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_glass_20_555555_1x400.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png (100%) create mode 100644 templates/default/css/jquery-ui/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png (100%) rename {jquery-ui/css/smoothness => templates/default/css/jquery-ui/ui-darkness}/images/ui-icons_222222_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-icons_4b8e0b_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/images/ui-icons_a83300_256x240.png (100%) rename {jquery-ui/css/dark-hive => templates/default/css/jquery-ui/ui-darkness}/images/ui-icons_cccccc_256x240.png (100%) rename {jquery-ui/css/mint-choc => templates/default/css/jquery-ui/ui-darkness}/images/ui-icons_ffffff_256x240.png (100%) rename {jquery-ui/css => templates/default/css/jquery-ui}/ui-darkness/jquery-ui-1.8rc1.custom.css (100%) create mode 100644 templates/default/css/osmplayer_default.css delete mode 100644 templates/default/images/busy.gif delete mode 100644 templates/default/images/mask.png delete mode 100644 templates/default/images/play.png delete mode 100755 templates/default/index.php delete mode 100755 templates/default/jquery.media.template.api.js.js delete mode 100644 templates/default/jquery.media.template.default.compressed.js delete mode 100755 templates/default/jquery.media.template.default.js create mode 100644 templates/default/js/osmplayer.controller.default.js create mode 100644 templates/default/js/osmplayer.default.js create mode 100644 templates/default/js/osmplayer.pager.default.js create mode 100644 templates/default/js/osmplayer.playLoader.default.js create mode 100644 templates/default/js/osmplayer.playlist.default.js create mode 100644 templates/default/js/osmplayer.scroll.default.js create mode 100644 templates/default/js/osmplayer.teaser.default.js delete mode 100644 templates/default/osmplayer_default.css mode change 100755 => 100644 templates/default/osmplayer_default.tpl.php delete mode 100644 templates/default/osmplayer_default_controlbar.tpl.php delete mode 100644 templates/default/osmplayer_default_hscrollbar.tpl.php delete mode 100644 templates/default/osmplayer_default_ie.css delete mode 100644 templates/default/osmplayer_default_links.tpl.php delete mode 100644 templates/default/osmplayer_default_menu.tpl.php delete mode 100644 templates/default/osmplayer_default_node.tpl.php delete mode 100644 templates/default/osmplayer_default_nodevoter.tpl.php delete mode 100644 templates/default/osmplayer_default_pager.tpl.php delete mode 100644 templates/default/osmplayer_default_playlist.tpl.php delete mode 100644 templates/default/osmplayer_default_scrollbar.tpl.php delete mode 100644 templates/default/osmplayer_default_teaser.tpl.php delete mode 100644 templates/default/osmplayer_default_teaservoter.tpl.php delete mode 100644 templates/default/osmplayer_default_titlebar.tpl.php delete mode 100755 templates/default/playlist.xml delete mode 100755 templates/default/template.php diff --git a/OSMPlayer.php b/OSMPlayer.php deleted file mode 100755 index f7c96798..00000000 --- a/OSMPlayer.php +++ /dev/null @@ -1,554 +0,0 @@ - 640, - * 'height' => 480, - * 'playlist' => 'http://www.mysite.com/playlist.xml' - * )); - */ - public function __construct( $_params = array() ) { - // First set the defaults. - $this->playerParams = OSMPlayer::getPlayerParams(); - $this->defaults = array_merge( $this->playerParams, OSMPlayer::getPlayerSettings() ); - $this->settings = $this->defaults; - if( $_params ) { - // Set the parameters ( which will override the defaults ). - $this->settings = array_merge( $this->settings, $_params ); - } - - // Create our template. - $templateClass = ucfirst( $this->settings['template'] ) . 'Template'; - require_once( "OSMTemplate.php" ); - require_once( "templates/" . $this->settings['template'] . "/template.php" ); - $this->template = new $templateClass( $this->settings ); - - // Make sure we set the Prefix. - $this->setPrefix( isset($_params['prefix']) ? $_params['prefix'] : ($this->settings['id'] . '_') ); - } - - /** - * Returns the paths to this player library. - */ - public static function getPlayerPath() { - static $playerPath; - - // Get the player path. - if( !$playerPath ) { - // Set the base path and url of this class. - $base_root = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; - $base_url = $base_root .= '://'. check_plain($_SERVER['HTTP_HOST']); - if ($dir = trim(dirname(check_plain($_SERVER['SCRIPT_NAME'])), '\,/')) { - $base_url .= "/$dir"; - } - - $path = parse_url($base_url); - $path = isset($path['path']) ? $path['path'] : ''; - $playerPath = trim( str_replace( realpath('.'), '', dirname(__FILE__) ), '/' ); - $playerPath = trim( str_replace('\\', '/', $playerPath), '/' ); - $playerPath = $playerPath ? $path . '/' . $playerPath . '/' : $playerPath; - } - - // Return the player path. - return $playerPath; - } - - /** - * Returns the player settings. - */ - public static function getPlayerSettings() { - return array( - 'width' => OSMPLAYER_DEFAULT_WIDTH, - 'height' => OSMPLAYER_DEFAULT_HEIGHT, - 'theme' => 'dark-hive', - 'version' => '0.01', - 'showController' => true, - 'disablePlaylist' => false, - 'playlistOnly' => false, - 'showNodeVoter' => false, - 'showTeaserVoter' => false, - 'showTitleBar' => true, - 'showWhenEmpty' => true, - 'playerPath' => self::getPlayerPath() - ); - } - - /** - * Returns the player parameters. - */ - public static function getPlayerParams() { - return array( - 'id' => 'player', - 'showPlaylist' => true, - 'file' => '', - 'flashPlayer' => 'minplayer/minplayer.swf', - 'image' => '', - 'volume' => 80, - 'autostart' => false, - 'autoLoad' => true, - 'streamer' => "", - 'apiKey' => "", - 'sessid' => "", - 'api' => 2, - 'drupalVersion' => 6, - 'links' => array(), - 'linksvertical' => false, - 'logo' => 'logo.png', - 'link' => "http://www.mediafront.org", - 'logopos' => 'sw', - 'logoWidth' => 49, - 'logoHeight' => 15, - 'logox' => 5, - 'logoy' => 5, - 'node' => "", - 'shuffle' => false, - 'loop' => false, - 'repeat' => false, - 'pageLimit' => 10, - 'protocol' => "auto", - 'server' => "drupal", - 'template' => "default", - 'baseURL' => "", - 'draggable' => false, - 'resizable' => false, - 'playlist' => "", - 'args' => array(), - 'wildcard' => "*", - 'gateway' => "", - 'vertical' => true, - 'scrollSpeed' => 15, - 'updateTimeout' => 20, - 'hysteresis' => 40, - 'dynamic' => false, - 'scrollMode' => "auto", - 'pageLink' => false, - 'debug' => false, - 'embedWidth' => 450, - 'embedHeight' => 337, - 'skin' => 'default', - 'autoNext' => true, - 'prefix' => '', - 'showScrollbar' => true, - 'controllerOnly' => false, - 'wmode' => 'transparent', - 'forceOverflow' => false, - 'volumeVertical' => false, - 'incrementTime' => 5, - 'quality' => 'default', - 'zIndex' => 400, - 'timeout' => 4, - 'fluidWidth' => false, - 'fluidHeight' => false, - 'fullscreen' => false - ); - } - - /** - * Set's the current session id for this player. - */ - public function setSessionId( $sessid ) { - $this->settings['sessid'] = $sessid; - } - - /** - * Get's the current template. - */ - public function getTemplate() { - return $this->settings['template']; - } - - /** - * Get's the current theme. - */ - public function getTheme() { - return $this->settings['theme']; - } - - /** - * Connect the playlist of this media player to another media player. - * - * Usage: - * - * $playlist = new OSMPlayer(array( - * 'width' => 150, - * 'height' => 400, - * 'playlistOnly' => true, - * 'playlist' => 'http://www.mysite.com/playlist.xml' - * )); - * - * $player = new OSMPlayer(array( - * 'width' => 450, - * 'height' => 400, - * 'disablePlaylist' => true - * )); - * - * $playlist->addPlaylistTo( $player ); - */ - public function addPlaylistTo( $player ) { - $this->playlists[] = is_string($player) ? $player : $player->getId(); - } - - /** - * Connect the controlbar of this media player to another media player. - * - * Usage: - * - * $controller = new OSMPlayer(array( - * 'width' => 400, - * 'height' => 26, - * 'controllerOnly' => true, - * )); - * - * $player = new OSMPlayer(array( - * 'playlist' => 'http://www.mysite.com/myplaylist.xml - * )); - * - * $controller->addControllerTo( $player ); - */ - public function addControllerTo( $player ) { - $this->controllers[] = is_string($player) ? $player : $player->getId(); - } - - /** - * Returns the current id of the player. - */ - public function getId() { - return $this->settings['id']; - } - - /** - * Set the id for this media player. - */ - public function setId( $newId ) { - // Set the id of this player. - $this->settings['id'] = $newId; - } - - /** - * Returns the current prefix of the player. - */ - public function getPrefix() { - return $this->settings['prefix']; - } - - /** - * Set the prefix for the CSS of this media player. - */ - public function setPrefix( $newPrefix ) { - // We only need to set the prefix if we generate the CSS. - if( $this->template->settings['generateCSS'] ) { - // Set the prefix. - $this->settings['prefix'] = $newPrefix; - - // Set the template prefix. - $this->template->setPrefix( $newPrefix ); - } - else { - $this->settings['prefix'] = ''; - $this->template->setPrefix( '' ); - } - } - - /** - * Get the JS header for this player. - */ - public function getJSHeader() { - $header = ''; - - // Add all of the javascript files. - $jsfiles = $this->getJSFiles(); - foreach( $jsfiles as $file ) { - $header .= ''; - $header .= "\n"; - } - - // Return the header. - return $header; - } - - /** - * Get the header for this media player. - */ - public function getHeader() { - // Add the JS files to the header. - $header = $this->getJSHeader(); - - // Add the CSS files. - $header .= $this->template->getCSSHeader(); - - // Return the header. - return $header; - } - - /** - * Get the javascript files for this media player. - */ - public function getJSFiles() { - $template = $this->settings['template']; - if( $this->settings['debug'] ) { - return array_merge( array( - "js/source/jquery.media.drupal.js", - "js/source/jquery.media.parser.js", - "js/source/jquery.media.auto.js", - "js/source/jquery.media.rpc.js", - "js/source/jquery.media.json.js", - "js/source/jquery.media.sha256.js", - "js/source/jquery.media.utils.js", - "js/source/jquery.media.control.js", - "js/source/jquery.media.flash.js", - "js/source/jquery.media.html5.js", - "js/source/jquery.media.image.js", - "js/source/jquery.media.link.js", - "js/source/jquery.media.links.js", - "js/source/jquery.media.display.js", - "js/source/jquery.media.minplayer.js", - "js/source/jquery.media.menu.js", - "js/source/jquery.media.mousewheel.js", - "js/source/jquery.media.node.js", - "js/source/jquery.media.pager.js", - "js/source/jquery.media.player.js", - "js/source/jquery.media.playlist.js", - "js/source/jquery.media.playlistlink.js", - "js/source/jquery.media.rotator.js", - "js/source/jquery.media.slider.js", - "js/source/jquery.media.teaser.js", - "js/source/jquery.media.titlebar.js", - "js/source/jquery.media.scroll.js", - "js/source/jquery.media.voter.js", - "js/source/jquery.media.youtube.js", - "js/source/jquery.media.vimeo.js", - "js/source/jquery.media.dailymotion.js", - "js/source/jquery.media.file.js" - ), $this->template->settings['jsFiles']['debug'] ); - } - else { - return array_merge( array( - "js/jquery.osmplayer.compressed.js", - ), $this->template->settings['jsFiles']['release'] ); - } - } - - /** - * Converts a PHP variable into its Javascript equivalent. - */ - public function osm_json_encode($var) { - switch (gettype($var)) { - case 'boolean': - return $var ? 'true' : 'false'; // Lowercase necessary! - case 'integer': - case 'double': - return $var; - case 'resource': - case 'string': - return '"'. str_replace(array("\r", "\n", "<", ">", "&", "\'"), - array('\r', '\n', '\x3c', '\x3e', '\x26', "'"), - addslashes($var)) .'"'; - case 'array': - // Arrays in JSON can't be associative. If the array is empty or if it - // has sequential whole number keys starting with 0, it's not associative - // so we can go ahead and convert it as an array. - if (empty ($var) || array_keys($var) === range(0, sizeof($var) - 1)) { - $output = array(); - foreach ($var as $v) { - $output[] = $this->osm_json_encode($v); - } - return '['. implode(',', $output) .']'; - } - // Otherwise, fall through to convert the array as an object. - case 'object': - $output = array(); - foreach ($var as $k => $v) { - $output[] = $this->osm_json_encode(strval($k)) .': '. $this->osm_json_encode($v); - } - return '{'. implode(',', $output) .'}'; - default: - return 'null'; - } - } - - /** - * Get the player parameters. This will only return the parameters that are included in - * the playerParams array. - */ - public function getParams() { - $params = array(); - foreach( $this->settings as $param => $value ) { - if( array_key_exists( $param, $this->playerParams ) && - ($this->playerParams[$param] != $value) ) { - switch( gettype($this->defaults[$param]) ) { - case 'array': - case 'object': - $params[] = $param . ':' . $this->osm_json_encode($value); - break; - case 'string': - // Make sure we are not dealing with a JSON string here. If so, then don't include the quotes. - $params[] = (substr($value, 0, 1) == '{') ? ($param . ':' . $value) : ($param . ':"' . str_replace( '"', "'", $value ) . '"'); - break; - case 'boolean': - $params[] = $param . ':' . ($value ? 'true' : 'false'); - break; - default: - $params[] = $param . ':' . ($value ? $value : 0); - break; - } - } - } - - $ids = array(); - - // Iterate through all of our template Ids. - foreach( $this->template->getIds() as $id => $value ) { - - // Only set this if it is different from the default. - if( $this->template->defaultIds[$id] != $value ) { - $ids[] = $id . ':"' . $value . '"'; - } - } - - // If we have some id's different from the default, then add then to our params. - if( count( $ids ) ) { - // Now add all the Id's to the settings. - $params[] = 'ids:{' . implode(',', $ids) . '}'; - } - - return $params; - } - - /** - * Returns the JavaScript code to add and instantiate the player on the page. - */ - public function getJS() { - // Return the script. - return ''; - } - - /** - * Returns the javascript to add the player to the page. - */ - public function getPlayerJS() { - $playerId = $this->getId(); - $params = $this->getParams(); - - // Create the player in javascript. - $js = 'var ' . $playerId . ' = jQuery("#' . $playerId . '").mediaplayer({' . implode(',', $params) . '});'; - - // Now that the player has made it's way through the loading process... hide the busy cursor. - $js .= 'jQuery("#'. $playerId .'_loading").hide();'; - - // Now add our playlist connections to the javascript. - foreach( $this->playlists as $playlist ) { - $js .= 'jQuery.media.addPlaylist("' . $playlist . '",' . $playerId . ');'; - } - - // Now add our controller connections to the javascript. - foreach( $this->controllers as $controller ) { - $js .= 'jQuery.media.addController("' . $controller . '",' . $playerId . ');'; - } - - // Return the script. - // We need to use setTimeout since some browsers jump the gun on when they are really ready. - return 'jQuery(function() { setTimeout( function() {' . $js . '}, 10 ); });'; - } - - /** - * The main API call for this player. This will return the HTML and JavaScript for the - * media player that you wish to add to your page. - * - * This function allows for dynamic theming of the player by passing parameters to the media - * player ( i.e. playlistOnly, horizontal, etc ). - */ - public function getPlayer() { - $output = $this->getJS(); - $output .= "\n"; - - // Determine the width and height of the player. - $width = ($this->settings['playlistOnly'] && $this->settings['vertical']) ? '' : ('width:' . $this->settings['width'] . 'px;'); - $width = $this->settings['fluidWidth'] ? 'width:100%;' : $width; - $height = (($this->settings['playlistOnly'] && !$this->settings['vertical']) || $this->settings['controllerOnly']) ? '' : ('height:' . $this->settings['height'] . 'px;'); - $height = $this->settings['fluidHeight'] ? 'height:100%;' : $height; - - // Set the version. - $this->settings['version'] = $this->template->getVersion(); - - // Get the output from the template. - $output .= $this->template->theme( array( - 'params' => $this->settings, - 'width' => $width, - 'height' => $height - ) - ); - - return $output; - } -} -?> \ No newline at end of file diff --git a/OSMTemplate.php b/OSMTemplate.php deleted file mode 100755 index 337f4108..00000000 --- a/OSMTemplate.php +++ /dev/null @@ -1,426 +0,0 @@ - '#mediaplayerloading', - 'player' => '#mediaplayer', - 'menu' => '#mediamenu', - 'titleBar' => '#mediatitlebar', - 'node' => '#medianode', - 'playlist' => '#mediaplaylist', - 'currentTime' => '#mediacurrenttime', - 'totalTime' => '#mediatotaltime', - 'playPause' => '#mediaplaypause', - 'seekUpdate' => '#mediaseekupdate', - 'seekProgress' => '#mediaseekprogress', - 'seekBar' => '#mediaseekbar', - 'seekHandle' => '#mediaseekhandle', - 'volumeUpdate' => '#mediavolumeupdate', - 'volumeBar' => '#mediavolumebar', - 'volumeHandle' => '#mediavolumehandle', - 'mute' => '#mediamute', - 'linkText' => '#medialinktext', - 'linkScroll' => '#medialinkscroll', - 'close' => '#mediamenuclose', - 'embed' => '#mediaembed', - 'elink' => '#mediaelink', - 'email' => '#mediaemail', - 'busy' => '#mediabusy', - 'preview' => '#mediapreview', - 'play' => '#mediaplay', - 'media' => '#mediadisplay', - 'control' => '#mediacontrol', - 'voter' => '#mediavoter', - 'uservoter' => '#mediauservoter', - 'mediaRegion' => '#mediaregion', - 'field' => '.mediafield', - 'prev' => '#mediaprev', - 'next' => '#medianext', - 'loadPrev' => '#medialoadprev', - 'loadNext' => '#medialoadnext', - 'prevPage' => '#mediaprevpage', - 'nextPage' => '#medianextpage', - 'pager' => '#mediapager', - 'scroll' => '#mediascroll', - 'busy' => '#mediabusy', - 'links' => '#medialinks', - 'listMask' => '#medialistmask', - 'list' => '#medialist', - 'scrollWrapper' => '#mediascrollbarwrapper', - 'scrollBar' => '#mediascrollbar', - 'scrollTrack' => '#mediascrolltrack', - 'scrollHandle' => '#mediascrollhandle', - 'scrollUp' => '#mediascrollup', - 'scrollDown' => '#mediascrolldown', - 'titleLinks' => '#mediatitlelinks' - ); - - /** - * Constructor for the OSMTempalate class. - */ - public function __construct( $playerSettings ) { - // Set the player settings, which can be used in this template. - $this->playerSettings = $playerSettings; - - // Get the settings for our template - $this->settings = $this->getSettings(); - } - - /** - * Get's the player version number. - */ - public function getVersion() { - $this->version = $this->version ? $this->version : file_get_contents( dirname(__FILE__) . '/version.txt' ); - return $this->version; - } - - /** - * Return's this templates settings. This function is used to tell the Open Standard Media Player class - * about your template. - */ - public function getSettings() { - // We must have a template derive from this class... set all settings to null. - return array(); - } - - /** - * Returns the CSS file that is located within the current theme. - */ - public function getThemeRollerCSS() { - $theme_css = ''; - if( $this->playerSettings['theme'] ) { - $theme_folder = 'jquery-ui/css/' . $this->playerSettings['theme']; - - // Now search this folder for the CSS file... - $theme_path = dirname(__FILE__) . '/' . $theme_folder; - if (is_dir($theme_path)) { - if ($contents = opendir($theme_path)) { - while(($node = readdir($contents)) !== false) { - if( preg_match('/\.css$/', $node) ) { - $theme_css = $node; - break; - } - } - } - } - } - - // Add the theme. - return $theme_css ? ($theme_folder . '/' . $theme_css) : ''; - } - - /** - * Set the CSS directory for this media player. - */ - public function setCSSDir( $dir ) { - // We only want to set this if we are using themeroller since - // this directory can change to a cached directory when the - // themeroller file is created. - if( $this->settings['generateCSS'] ) { - $this->css_dir = $dir; - } - } - - /** - * Resets all generated CSS files. - */ - public function resetCSS() { - $this->deleteCSS(); - $this->createCSS(); - } - - /** - * Get the CSS header for this player. - */ - public function getCSSHeader() { - $playerPath = $this->playerSettings['playerPath']; - - // Add the CSS files. - $css_files = $this->getCSSFiles(); - $header = ''; - $header .= "\n"; - if( isset($css_files['template_ie']) ) { - $header .= ''; - $header .= "\n"; - } - - // Return the header. - return $header; - } - - /** - * Get an array of the CSS files for this player. - */ - public function getCSSFiles() { - $files = array(); - - // If they are using theme roller, then we will use the cached CSS files. - if( $this->settings['generateCSS'] ) { - // Get the CSS path. - $css_path = $this->css_dir ? $this->css_dir : dirname(__FILE__); - $css_local_path = $this->css_dir ? '' : 'css/'; - - // Cache the prefix name. - $id = $this->playerSettings['id']; - - // The CSS files for this id. - $files['template'] = $css_local_path . "{$id}.css"; - $files['template_ie'] = $css_local_path . "{$id}_ie.css"; - - // If the CSS files do not exist, then create them. - if( !is_file( $css_path . '/' . $files['template'] ) ) { - $this->createCSS(); - } - } - else { - $files = $this->settings['cssFiles']; - } - - // Return the CSS files. - return $files; - } - - /** - * Writes the contents of one CSS file to another, but also replaces all the id's and - * class names to take into account the prefix ( id ) of the media player. - */ - private function writeCSS( $css, $handle ) { - // Get the file contents and length. - $contents = file_get_contents( dirname(__FILE__) . '/' . $css); - - // Change all of the images to the correct path... - $playerPath = $this->playerSettings['playerPath'] ? $this->playerSettings['playerPath'] : '../'; - $contents = str_replace( 'images/', $playerPath . str_replace( basename($css), '', $css ) . 'images/', $contents ); - - // Locate all of the z-index elements. - $contents = preg_replace_callback('/z-index\s*:\s*([0-9]+)/', create_function( - '$match', - '$zIndex = intval($match[1]); - return $zIndex ? "z-index:" . (' . $this->playerSettings['zIndex'] . ' + $zIndex) : $zIndex;' - ), $contents); - - // Get the length of the contents. - $len = strlen( $contents ); - - // Make sure we don't overwrite anything within brackets... - $match = 0; - $matches = array(); - preg_match_all('/\{.*\}/sU', $contents, $matches, PREG_OFFSET_CAPTURE); - - if( count($matches[0]) > 0 ) { - $match_len = strlen( $matches[0][$match][0] ); - } - - // Iterate through all the characters. - for( $i=0; $i<$len; $i++ ) { - - // See if we need to increment the current match. - if( isset( $matches[0][$match+1] ) && ($i > $matches[0][$match+1][1]) ) { - $match++; - $match_len = strlen( $matches[0][$match][0] ); - } - - // Get the char at this index. - $char = $contents[$i]; - - // If this is a class or an id, and is not within brackets... - if( (($char == '#') || ($char == '.')) && - !(($i > $matches[0][$match][1]) && ($i <= ($matches[0][$match][1]+$match_len))) ) { - fwrite( $handle, $char . $this->playerSettings['id'] . '_' ); - } - else { - fwrite( $handle, $char ); - } - } - } - - /** - * Create the CSS files for this media player. This will dynamically rename all the - * id's and class names within the master CSS files ( theme and template ), and then create - * a cached version of them within the css folder. - */ - public function createCSS() { - // This is only necessary if they are using Theme Roller. - if( $this->settings['generateCSS'] ) { - // Store the CSS directory for later usage. - $dir = $this->css_dir ? $this->css_dir : dirname(__FILE__) . '/css'; - - // Make sure this directory exists. - if( !is_dir( $dir ) ) { - // Create the directory. - mkdir( $dir, 0777, true ); - } - - // Now make sure the directory has the right permissions. - @chmod( $dir, 0777 ); - - // Store the to path and to css. - $to_path = $dir . '/' . $this->playerSettings['id']; - $to_css = $to_path . '.css'; - - // Setup the files array. - $files = array(); - $files[$to_css] = array(); - if( $this->settings['cssFiles']['theme'] ) { - $files[$to_css][] = $this->settings['cssFiles']['theme']; - } - if( $this->settings['cssFiles']['template'] ) { - $files[$to_css][] = $this->settings['cssFiles']['template']; - } - if( $this->settings['cssFiles']['template_ie'] ) { - $files[$to_path . '_ie.css'] = array( $this->settings['cssFiles']['template_ie'] ); - } - - // Iterate through all of our css files we need to create. - foreach( $files as $file => $contents ) { - // Now open up the new css file. - $handle = fopen( $file, 'a+' ); - if( $handle ) { - // Iterate through all the files that will be combined to - // create this css file. - foreach( $contents as $content ) { - if( $content ) { - // Write to the css file. - $this->writeCSS( $content, $handle ); - } - } - - // Close the file. - fclose( $handle ); - } - - // Now set the file permissions to 775. - @chmod( $file, 0777 ); - } - } - } - - /** - * Delete the current cached CSS files. - */ - public function deleteCSS() { - // This is only necessary if they user Theme Roller. - if( $this->settings['generateCSS'] ) { - $css_path = $this->css_dir ? $this->css_dir : dirname(__FILE__) . '/css'; - $css_path .= '/' . $this->playerSettings['id']; - $css = $css_path . '.css'; - - if( is_file( $css ) ) { - @chmod( $css, 0775 ); - unlink( $css ); - } - - $css = $css_path . '_ie.css'; - if( is_file( $css ) ) { - @chmod( $css, 0775 ); - unlink( $css ); - } - } - } - - /** - * Returns the id's for this template. - */ - public function getIds() { - $ids = array(); - - // Only add the prefix if the template is using themeroller. - if( $this->settings['generateCSS'] ) { - // Iterate through all the id's and add the id. - foreach( $this->settings['ids'] as $index => $id ) { - $ids[$index] = $id[0] . $this->prefix . substr( $id, 1 ); - } - } - else { - $ids = $this->settings['ids']; - } - - // Return the id's with the prefix's in place. - return $ids; - } - - /** - * Set's the prefix of the template. - */ - public function setPrefix( $newPrefix ) { - // Set the prefix for this template. - $this->prefix = $newPrefix; - } - - /** - * Theme function for the base template class. - * - * @param array $variables - The variables used within this particular theme. - * @param string $subtemplate - The subtemplate to include. - * @return string The HTML markup of this theme. - */ - public function theme( $variables, $subtemplate = '' ) - { - $template = $variables['params']['template']; - $preprocess = 'theme_preprocess' . $subtemplate; - if( method_exists( $this, $preprocess ) ) { - $this->{$preprocess}( $variables ); - } - - // Extract the variables to a local namespace - extract($variables, EXTR_SKIP); - - // Start output buffering - ob_start(); - - // Include the template. - include "templates/{$template}/osmplayer_{$template}{$subtemplate}.tpl.php"; - - // Get the contents of the buffer - $contents = ob_get_contents(); - - // End buffering and discard - ob_end_clean(); - - // Return the contents - return $contents; - } -} -?> diff --git a/README.txt b/README.txt deleted file mode 100644 index b9735178..00000000 --- a/README.txt +++ /dev/null @@ -1,25 +0,0 @@ -Open Standard Media Player - Build by Alethia Inc. (c) 2011. - -http://www.mediafront.org - For documentaion, implementations, and examples... -http://www.alethia-inc.com - For customization inquiries and business prospects. - -ABOUT: - The open standard media player is an open source GPL - license free - full featured media player written in jQuery. - It was designed to dynamically play any media thrown it's way, whether it be HTML5 video - Flash video - Audio, etc. - - Although this media player was designed to be used within a Content Management environment, such as Drupal, you can - use this player for other applications outside of a CMS. - -USAGE: - For usage in Drupal Content Management System: - Simply download and install the MediaFront module http://www.drupal.org/project/mediafront. - - For usage outside of Drupal. - Open up the index.html page and observe how this player is created and used. - - -NEED HELP OR CUSTOMIZATIONS? - If you require any assistance, please visit Alethia Design's website at http://www.alethia-inc.com and inquire - using our Contact Form. We will get back with you shortly. - -ENJOY! diff --git a/assets/screenshot.png b/assets/screenshot.png deleted file mode 100755 index dace8fb82d50843302a91c346e72a6c251d844a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174976 zcmZU)WmFtpur7=Q2oNMdAUJ^l!3pkeL4&&m3k>e=8r&U%I|Lb=!QFMR!F_OdF3Ee& z_uaMbkNz`jy4UX7RgYBd4*M=IiH1Ue0s{ks_DxDm2?hrC;q@|o3-|iV_WS&gFfbVE z=AxqCzln;HeYdwUHMcZ@fpLYcNO9wu(O>N!w?s6;2RIucn~W|N4}h2!C~8>ojUpIu za*b)UX~k+NHARqfRA>{vf61{lVMxIIdgD^O>IE5hfPgQ?9V!8!U8j}Zi@S^q{$0=U zrZJcfsx=8J>~$CzA0_7AAtAzD+nM(v&oBls2onaR2DTS($pM;LX(CiFlojuU=Dxer z$%LzF06PlwN>F#axpCHIkl ztg|q){WXGr7!|;uF@$P*Iyd_D9rG^BZ+^!hO*`>`*_;2C^#%)O&n=Xlug#zDw}nB1YL!wZEMUk{cb3bx6Qh;p*?CB{QU0-&a{+=4FeNI8jPwM#*6? zyJ70E_(i_tEY(khcl-{0QFq(Td~qfFJ(wfMO!ysX{Wmt%yNdw+AepXO%;iv){P*@~ zvtr4i*EtQQ%%*jnF)33iPz}UtDGn27(kQsG_txvWVp$Rb@7mLa%3^-ovK@yPXK7qm zw~AFHJZ34GXUG;3X$hzpicHFuXa$KU{=UW>uRQkteZHoE)@r)3ZfJ#{i3!2wFYPq! zew)X$X|Bx3%HW_M{&{#wQcojN+h);zVQ>-3#YKYV7~$0HUOv(^S+IG_3;xzXdaRvw zsYkTJmE8s^eG`f8?)^(legoshdn&+}aO+lxrI&JmT!U5Ys|t(k-e+|#nKz=JS?r-R z=lj*gm3v5EDb19Ox;J#j(=wEQ?FvS72_{b@&u6H_W!QhZ+&IHonwh9Odsiznn_R6P zs-9lM;V@Hmw`;mRt9vrw<71R>P-ok?XJuzLIGyfQaAD%u5HvhXJ3qARUDh z8)ZH*@#@VwQ?@xDsU7D)-Bz{FgCDPjNSmvw1buvO<)8RBAEE<*q*%er!QvrH5)qPm z-hAhFr`YS$_dokm4mEZgU*7bKUF6@GMU7YJhbr?aj~70frkJ9bshTbAX6%4Qsl5`P z7hf2hIt>*~zCE|xMIUDK(b2VIaaOC)vb}sHgQXYd`x#=_)oM_2%76MJkS`Y%Kdfu| z(|+G1EZnje9d2?x@*32`~Z2`Oo`aN;!oCY6#(RN;D*@aee zDHFiJ$Gq!_XV2F$a@kxI{-H!yEX%_s0STVNZweKo_wH@*sekH#HL|o z(ee+-CLb0bb}LqEfM>bahqvW{C)9|KX`$lJH2KP~Z_X!$uz#7xD4nigPJRb5*T)yf z53g^&Z;QoHfCyybfA}C5QO%q8p6-1=!433qzA5T<@q!ztjmk7N&pCsTL{bpUBPRfv!1!F?!gDHc3A|1U) zp2a?@l6FU+MXSq;$!U4wKDC~2Z>w}V&PUvp_s~04`aIvOC)>2H^5AvhQR1yK_Ijy5 zfG+dA@4Ci+e;Be@Ti1!@9ToU~6;0x1fLQ*^IeG>z&=;||%a392@$mFRR`K=dpTil#4Hg3gk z5#G2WECi+mDt5KohLaoR^8aAiC}^4fEJB%?&vyOx$RsxS8`EIK5GbxJd0ahoRZ^u+ zB~IN`ElbTUH!V+M!NwP_i>XAAKgMkW8dHiWZ6tKDvyREYZzX?(oT&x*$gk|B_e2xW z5hz`^&(N?U;Uec)pR%6#aSnBU%+F!;{ES^;; zcYcklZAKj`xVd#w7v%ilvi3YgF+2^CnFEYIgpDKUBl$BMZuH0rl5Xg2wE7?nathHK zq-4A=CTmZy^n!u($3DkI1XnB5ZfuLQWlX#c8c5s+Bx0vdY;gojs?dlHg z2_q%#GTlg>`1c@!FVysbCPdGm06z3OJh`Gup0 zJ@;XM()D_GUlSBmK5Mx6c#`2&$Lc5l!MFS;%wY)3AHT77Hq*UgUUZmbI+!HPr8QVf zuXi0(E3hfw;cq>>2LhNU-f02tQIU(te}3WA6?8xvX8Q` zvg0WTDWa(!np>Jm8n~JjnuLG4=HDE$q!Vg0wIF(MBQZ&0_2W_pIV25-0}_@JAEp_j zbshL}T5VU}2_S<^y|tey{cwc2JN0rf4Pnxwd9T){xyqVm&_ltB0QlY3a9RUh?^hMfmfhtLMJ zN5|>^&|%SLwJ*4rtvQQ`8zdS54J)Sjb9gMC#5OkzmqYxc(U$1-zc|vjHZQgnHRLK- z{5JS*T)dYznKG4sfa9HH^!yA5j$6d2+%EiZH#-eTY?lT*aFqM7zJP!Pc=n>nLW z==HN93}XNWvt9}VJ=z@X5%Ga7$|Hv-mY*mWMdc>}vb)&+7`Fk%1g;?@)hMl8d2GkHfB;U1BU-)?Z4f-~|ao=2H#n$r|}XNmqJE|v@_ zRCo@Ho{)o}WnicCItmi{1RFvmiCjcxhKt7u{$Qv#zK zMdg@Im0qnmCnGN|$6fL0@tO5j>S_YscyEOKCnnoqh*6zVoz33N{`KA{;RL=kK`Mc= zY>ixY8iUqbO)a9Z+R~cJy0GADVtkK?r#jKyNrHaQBANcUjCkFt=-rkT7Y`_ChvwMi z$g8s`)0d}ueB9S{W;Gdy*fvZDe_l8h)fA&Mq&Y;F=Z?>lPU%QxZ@;-X@nah z!b7|Q%Q~>vy5E|Jq5MEMk7$kjArkxDX774hS2Aw`c29VZw<-v9e(_H5BR@V8vuO$k zm0V%S2*HRIy(vAZ#?v2|^xncQjt=<^AqO0X1G_O>6I+0-4@9+NvuC)Qw?}>8gvnMa zM*K8<0(%`!Cu0D4lHv!!21`rOXRgm*mEL*m-LOa-nY=MJ**@ID#v!K8rk6%Uq}YEPB7;c>KsD1I&h*GQa!v_Z4M!;&glas0aY45ZUo zWu#zNbX*%}0bWD;Z;aeKA}%QUw4aWI5%1%?O!v2E%Yrr4Yl|w^9hkNvw*f1S+Fz7a zv}ztq&lpN-4(xk>-P0EEva_=Q-EQU&$WIj5K60vYeC5E_ZYCM5qvFrT*dYJr~4HlJVwwd<4eTmbNa|6t>Sj$!x0k@~paV+|LIe zNSycW*(9zO`K&(hH_$Y@IkI}ydc`*v)QhjsE)f)+D_a%gm5iHTv^(hMW|I0UQu}@s z>P$V@v&MUQA$jh>+>@`*oX?@g9)v8z4Vm-Fq1Wd_5SnsU-M<$DNfL~5pqO*%zilo< z?6RzzsW4H6nnePuqPTlxG1J|ZFDuA`H#&&q8}YS8M&Qnnnc^z0NS{8ZHhT3JEPRd) z0GeO(VeYyk>^}jU@YVrFFa0;%ls!YZKkNny$C)|;O%(uu(P^0*h1E4FtjT4ZsT_fB zZsbmhx@QNGR=hoUP9a!<4%7iS<=^m*FMM_}Q2|4+-z)Im`X5p?96f6-SS2IBbj#qn z+VrDBuFv50$w*%|12s@^0MzbCr@m~QLic4~66i+0JU(kLTE{j*4)igwi!ZZ>)FPVqZtpiR)+0*7s_1y4 z=0&Pgk2=SLABG2Z%NC`xpYvl8!jr=~WdJL=+rZ!&&WCFnUmw_l5cALA0Pgu$r;ThY zrRe|zgNpt4f`v)Tc=g?6FyF+4Ra{{Y+mJJe`|alWchg;tmOQFE7=007{gGUi^S{KB zGla1?P0tt(*A&b@)5IAq{L1XEe(W6_x5J_dGof?N7?*#HH~w~=tWk(Aog@~vL8;Vg zgY{Wx8O-?Srll(N?wKFB#OvCE3dh{pozeHZp|H8Mxw){Yxu~!xThr=3*syNth}YY3 zN#VF{_cSLUQUYE!4h!`&t`vQY#+s@X?D&O*1i1Yy4Y2Z<1SRgzVTdyS$jZvcR|cuKb7V`(Yd;IInv>KOhi^7~9=&Tos&5KJ{SxA#ZsM>BfBPf^N3?BVix zQ8h8D!fv>44U-T=Cc$R!r=Ff$h|9_u)AMZmJ``HJ=uPPIvg|MpaoWv%xIX^iqFF3NanIdW*^FuB($LFA0fYbVI}2 z9a#mrrzaN>_HJrM#+HhGq(V%XaNOAMlkj}j&zbA0Gx(>cw{ER%7x5m)pHf)4xW0hL z>yIwR1z##`yZ}`3)$}s@GjIL|fvj5Sho3qK!Jn*Htt3GU+7PtkaOpef zCeF_6?3ek`z1(`zL#61XBTxX~%EW@0u1EVbC0@p-jc}&EO(<#!A4v9=(|S3j(ZeeF ze_q{J!xx|D7^GJf9K4CUPPyS;IO&JD`GY;Vkhtqlx>_*xAT`pvo&bXJ`pvuQc0 z*#F|y16Re4njlSCctX8TVp20M+g?_ND%uv>x|`*3Oqr}>-}^!R=Y!zoglM$jGZ!6G zr{heSdCCra?Ogn<$tk0l6W2GY+eHcF|H2Pz=fc$mq$wt{cb=txV81(eY$8S z#jJQw(|yc@466T1gR}wRG(Rqh^CCX`@iUZA@TO^85ht5Xl!?SC_No!cZ)>jD;d5=~ zgKMTgHoT-RM_M!^^)}1<-dvu&iV@5A>gKb-_L<50n5w$&tnmLnm8=>DH&h|?<#GH) z$MU?a{l0AD*yn=N=i(y!#WMpDjvvNxZCwPe>FxUzKKZ%MVG-$1NjegtT!{WmK6k_Z zldWk&e0)WLzPPzO8K;*yG+6($8DR)@2t3Ps{esVSzie-~?iIWal<7Cu>jES^X1Me| z4!(e2?)7;>)K8n6Ke#!SU{VMh!8kIcaq5+>7ZjsM!xN;#{BJt{X88S7Vz70o@Vuqq z{RH;WU4H5pxc(|f?|WTL+^R%-Iou>4>>}<*Py&sF=HdN(-OEsDe>TlVK61u?wFGW_ zT}xiZ^EuPYIr2!ZCL1R8^9Ek~+m>0@_Y|<`e5hhA1Fk@UR8)B zrDoPw5!>Tk)DUtL0u&iRRa&F-5CA+ z-jYYBA}}6ERh4iCL9?k^?OeM5-$JZm`DnDUq*_UoAG??yyTZ`A2z52;kfJY8C>Zrn z@1X6^0AZA;U#$xKR|&2Ay48BW$bNqrBP=qmK=;cWn@#oXBBYjH`&*uWA)*7W@gyrN zi$XFgBcGitSUd}v$JOU~*9Rmjg=EUU!h75p(B`F~cQ@t&QkJ2~mYjEPxMaA``RYA4FCqJZ^XlTp?r`KGMQLkbhrHs`{ z6Yf7=Agk`MM_n5Y2?K9a-7%qTLBTu44qD+Ene_ev|%(>8~#^z!*_3@|EP_`F!flg_2fB>*bNk4aSSS zGfin8DVF|_>1QX(*UUSWuJ?@!Y>i9wjNI!3a+WzkNxN?vpWQl$dV$o*TDzAa}rH$A5kL>p6tHa;R_oSfe`AhX4 z{liwf&Aw@6O3h3+cW0SKEY#LudLb3bssrfH`ZZo@bx~8@vIWcgoNcXOlR&Q~$3=%F z(7J{-N2X1B<$68?leX0xxo&d}weEWD!q_AEC4>f&`(nk?*^vaJ{EUQTi<|8VN9*o1 zw6*}K^RXZwuP$1oyHDr9ZY|)xrEq9;@W&`e_exGqUO}G)?PNy0A}DW`>4C=Kaa!uE zkE)DS|2jP7%d6Z-1o+KnJtM3tHWSqFLJM_@R7whnsnhLi)&7`2-A8*ps)v9hJWoYQ z$DD5TUn&XPx;i9Z_63KXFTV%dL-SWgf29U9ug$)l6e4?K&* z=RW;Vmc#j={umt*o;5o%OjIR#_Nm&mN)xBAwJtjSZ;?=&JQ*LBD|KrV53Nc{nc)Nf^tuigvk=?AN7PFJA7&BNV{;%vNh2`9}ZskiCbJwJcZhOZk z%gtsdIpu()$NMqs`kq^h47xW@>|fb%k9w2^vS0E9@AFztKrNF$d(P}Mf_8GD>?|xbnEgIy zS2CafmhCBR1B{&~k^6GNSEe~X4+vK(J@)6xm27fiC{mNv@SpWskCyk1rUnasMhhVQ z44R;l!$Z%(;T^M`;RTVKN1e$5H|&DA5A{XES31dpsy0ar#q$@BvZWvE9+d7n%+YmS z&yIDGNS_{)%d^UNn-z{1CSAt3(>nlc~h^4i)c@#zuAP0cXxU!NS zDcGKBBl~HJ?8nWNS%U$xBqhPOONENo?89>HQykGa+Cbli+N4$M1uDib zb;uJ%I&_=C_2z-W!{5{^O%^|~UdztOyZOb}Uj+0u17}gk7p|LSBpWOTZFG0tBwSVq z7weu|YlAU}v(f-b73JLD2U?mA{U{{M{J8b`$KbQF&gnQN+K-s<((2!qOI_zuXl9mR z*FL197Q?7R>KNJD>yT-F@Y+L&oubC~4wQzW8W@;V-IhzfaIT^~l4 zpn5QQcAJ=exW6$judVcof4Phg;OBpWa#;G9D&)!X^;;ye%>H=T8(GehFn3w}w3eru z`=O}R^Ko4wV(p}nsrBTfP8i45(&j9N*a zO+t7J(TR~oJ@$T$n%Y_PSMmc>r<&65sf&taQ~~bxrK(v)_2%s>tW!l-GZ;j42TkNk z4KB!Esz8Fz$iI?qUxYE8L8o1)z)5qyrHr3+3 zcf<|v)6l5SbafXj3)KL1aMZRnImu>;rUh)gKCUiK&r%g!W^*!Lx{wN<*x$LkfyW&& zZ6zMI(6lSj?huP!YIIUthFT`*{ngZZfVk<6x_&ifqJ1Hi%tiS|Ic~ro)4(gGf~#8x z$(~xL+lF{aXC1GHa~J$w{Utw@qFw#6Ut^xX`Yq&1B$%xHjGcB;+oivuy@C-CcTc0M zc3Vba|pt4+2_yecT%Q3W)r)m*BN^Yc4 zxJ7_dCU5}5-?@yqe$lk0Elrwj%QyjiH0$fI9Z4|P@k>hgo*a()WP3B=%WuLKoPKaX zM|iP5Iqg4J1w?RU{=9q4gs-JvDbzb&4>6ExVytX4jeW&;4G$?r&So#56ucWtRb3Y@`W3{~*0T&Xv2xtE@ z9xm#L65iZB72y&8Az<`uv*?q6xA|-478!N~QdV~Wy5NY*SbOcHjEOYTg?6H4@p)q! zwK^jz^{21BY8OVFTte!#ZGdSN&Xp6YXT!qPQ^kq&(u2?so$}w-Mw@RTuyQIAk@4mqou1Ve8ffSXtu6+OEU2(THbYC!T{toIe zc8Nu-iwCo++N+=dulMVq2dR4+GvUu)op~BP4mT3M8QBGn-;jDl{Ft-f0We--W^JNh zotq<+tL>`fR>KT*aG1vLr)wZ6U)|?{qLnW+Xk8`k-y(SQIcoEgq~5J}-W8poJ&bVb zoEPeDmr$b<&(A4qoH%-&AgxxNxYjfpDOA8QmEGKx58oViyz@7$T`5&39(Fvcv%1Z& zNECbJ7!c>mxjKxjwmeg5!0{sb!6-xhMBW+QZ{0AIzXHCMoSv+V6-c`X@a;4TU7e7E ziHxZAwbYEV;dSPjwhrF5&)aIyC{m{3AYh<~-$yMcCqE{}N~DY2Tpq3Jh9GfQ4_UVTw&*S;7cgrqZN~p znQTiHb^BSX)m0I54l%+y3zEG2G&E=yAS(7iQNE8M#JN z8(9I}EVJF#6VeY`BoE^p^kS9u&Su%|5r%mxGOlJSX{1F0g(CWxd&?qu%F&O=% z0nq#Bfj(~)4a0_dDjq2L*gWpd1=44a=F`Tn4QO>cst>PfJS-wGw0$^S&KtM9DU6ms zW-F6)mZJ6yg^@AQ_RjJb9q%r%p zg00iW!vWVJ!+qT6)Ow}{&qw>8!+DCWM`?7LnRjtIW%+Thof#2S$MUg!1Qu0e=Z`n^ zuGqgeQqYIkQ!6W=7O+oT#++vyoEaLtaP7DfmN0B3J`R(-~hC>Zx5J&6rJY&vlVYj&0ta?`-R>SxW4mMG zb$sSE^>`r8?EXh=H6y9he`w%LPj=w~(L2)FaJ3^QPT?|PV3tPfN1?}6NaNZN$xhxc ziChI3cdO`gE|qC=_m68k`|z}xA5EO59eaf|tUe1(EU~v4ets(f^+0#LyE>nF52*jC zR>n^uYMQ4?Sp+^#@Za)x z7+%5bDn!Z^^Nb1xOEw0^zdl~V`Fo*6h(=PpbhK91Y9(&jxPURHi(LSfVQP6YK0XUQ z9R!^D^#F1M0lT025hteZ_7`1Xq*{D}e zLx0)|??s2z^I_+;XhQ?5TLa&$<8+~-3rf^9TbC)bQy0HLDtfk%n=TI0yhu^o$Ywj+ z!$D|^zP0hpv=k&a3h?>O;7aP5OzJ;jMr7uP2RM-xWXq^*733pmHg6~zKN!+N0Pmet zd)#MuHn95wND0}xpCw5>)fJ$3q$^D>CnFtewr$&o%MQ13#|yyJu$(r-*foangW5S&Mg{wd21Ry{#OBJ}*!+d3sBAQjw z(S8}kQv;N*s~WQ(Vh!YWdsRJ)aDxXUtd6=^)nN$FUo{MXMLwM_36;OtMh(2@vKGwW ze7LT2bbtgWS2x=?jT-ICK|LO(N+e0LK%14OqpeSVUcL3KHh0(;4%iO0NG^h#3WD(h zHV*u&5PC3ya{Tswo;lOI42hrk#|G_7f@BAAej=J97z1P~X6r-iI z44|MnJachr-BQ?BI9nAo3`0lqUA*_X|4qd;-SNvEM5gq1!ipxU3dxVP!j4?J!pXuRXJ1B9Duxw?UvTOJqlB zqh}BMJgt0)16tW^-O~iyh(%tk{d`T%B%gOs?i}ruZm)xUd23-bJkutK2aAs4v^Ri|znrZ_kD3Au4Jd~)FK`dEn4h35k zIFb1kzPXLwqQLgF+EG-^=QeKhvMH#UIe+}jE%(}lG8lv#RyW)D>W0)PR?YJUzXyx^ zv~P}Mrwn8>&#!C3IZ~;gE>|D|#{Wq2@o>~ikM%U{PK z9!->Hon1&Z>ito$@)Jok4|*@rWxkYBbr(Y70pb!^+U81^XdbIQf_I2~;=OK|(&I29 z9OY;a-k9sM0G4=b-rT;zFzNV{G@o|0xZN<5x;srNHYrciG-b*^-57vt&{eFBR^Ara z7cdFCj{e!TQ^i8As0d7W=z`enpJQD%Vf3NZPlPdBKGNw%XDweYNeQ%Rg{SXGvTDpu z*GnCp1Q@k2ukW$>-7s_{`(gksA&&OBc&Yi^TdclAbr?w)!ql{3U#t6adS`|PxokGe z&c5HMh~{tHd>ajG&9hlY7&&2%WK|CV(@y?UR`tGPN(U&zv|c_OOyH*3vM@{~;RS8# zyxMv<#_$GezrX&{HB$SxkyBwkqP(Qq!#ZaVnqnO}7GFXhA;;`=RCOVkz_>`ZdzgnJ zfS(Wr0@c~gRawWUXf(SSyOSo>ReZ+)-<;Si;s zo^vO;RLUXkUc1=5`z60d%yW>@ve5F!=Q&&7;kr7UbGZpR&_KeiaZL=iRy`1Ifz&ae z-cV0sO!|oPtBW06Ga?!56aQcR3W_Lg?JQ)_OikK(ni4j>xYOkqFDe{4<9}Tji@J_* zpo^)`_bMX3r1Z0?bzGb7(+Q~;H!pZI-WB)Z2k$oLehLi1m#P;laFUZ=v(JUmjoz6y z=@YbM`MJASr8=!P>Rv4eTznf6wbjxRjIyBb_P~zRAKm6Q)3V(eLMMMSmgQ-_3@nNw zo(Juwg>yVzO4*dEy|hsGmyMETpA!VT-R^x(>TfrH`BFq3rgK!ovjINI0elaSoE7!X~(Z9ghW)#6ayAKK!GLOk&v-is7$pRN7tdNMtlkv5$Qo!r6qZOIWzz7$%R)JKlVv!_YA6iI}5P1DMcflg|i zNSjS>WBDQ4!L6u>HG)Jon$8cBEl(jn=Z`sFNQ`dYl}u3Grjnb|$zvMFqtICX8!tF1mDHb<&4125dh4LS6APnILSXdaNFkJ7E( zwzaM%){WvN(c7E=&n01Z9@is!tsI%0k)$W-Rdc14`@79ZVn_*ms@o5%kDtub#=4&r zh7?i(5r`uzhPc)T(|DvBEd@|ey97OlApWq64tkRw1qB7F-6NiUyV#Gvpjc)9SMWvj z#{%<;!dNs-=a&6G$B?HiH)*GP)2X6*b-y~5d3ngy%_{K_9xeYaZ^4g`^G|{oIVDRr zPa}Asvz_7kI>MEefC8tb<}7}`>doqsX9n#CJ+J+l1*4L>n~@%!Pl=F*mpKg3^Kzb{ z>FQ*jGIswEYwhkkcYZgU@`mr0b6GrEJPm>^mBahcF{Go#?r?Z4_XAt!kSv^v;>Yu{ zoAcu`Y;|o%?a}jL?a!?;c8}XuGR*%ZNgu->PbVrS__NL1e!RMO#+axJ!0bDho2PdD z(!-VH4RMR1F->pQ%%v8uF8q=E*8CJadtS2M$P1XnKg+}N z)x~n-R1dJ4<1qK3aOjBigmk=!VVPLDqC~<-xr$q_JbN{n z-^I#$)zPGIDirEgIs`=v+7Qv}^K#m-$l%B*ALFx{ri^%H_cLu@H@nu@TX!X*!L9cZ z6OL=_HBhIjmh}rWV)r#aifBR6k>Cp4$4<$vs##QSm!I@U zTvY7@=0b`@#gjH`s2KwaGIV3 zEsulSa_dY@?zXz9g&wd9UCf<;EVO6bO`-nMt}u2f938j~$}ymzhUSWM>LU4&M)9xw>L(2;VT z)Hp0Vf}9NO@7K+0bKDk^oK)G-XBai6fmSJ`jVyPWj`fVzBlz1AfS+>XNs~EGtcl#z z+YwfWdM)0?ywgj0S*$#ld~VxLbQ>MRjaBGqZo=E@twi@z9iTsIlF?IV^^~^%Qr!f# zRilg*u<%$7&$=n-{@d|{A~k8f9%?!VNCrfG;8fxxu3Q(?lnTE;ui z1Pt)Rhkj_T<*!t(-@sS5WIp)oNQ|p|7=pVV~7$6fKBX)YD>+^H^|T z)dGmoC20#p&5Vi}&Yt(y11ewp8pGZ+*nitFA`HLP&CY4!i@zv~n}*np`*Y^7MXj^R zFR;6JIP(_`cY+BezNcr7r6Tg~sB5FebIC3af2c_UjFG05lW-ZUraQzd)AtN+9UW(> zw9TC_FW;ke)2crkjhG3nUIBJk82O-Xxp`xqE%;}NV^Oagc-}eSW*%Y| z!u_yz{l_v$V#y$UEVZQGC=k+S-o8Od4V>H^isTh8TTt(JzjvO0L|r+bIxGw5*Ux%A zC2$jU`tIZDa2P`E|Ko6#4Fuoj4=y&n)r;BS;bFELvIviy(J3R&KRut7UIZRZRDnz7 zD5Q2_daP5O#`kFCA0q2&O=Q4Z)z@2=R^Fv4!=>5mF1pHqpg6n4%MW~h=c&DFfFEe{ zg7-3hqohv-KHXL3kE!s>8Y+?&v9A^vA`yxA8=h&v*r{;-)8JoB``cB@9JEXp^}vK_ zJNP=57fYOws`3*Ftw?p4741fQq0TD!i1y;U^EdgT^zEs~D1Naue6%5D)<}!5>ZdIa z8PYA)KCRCKQ2~!s)}1vGNvql8d`_0j3P?@DV21g4$$*J(M*>O^uX4M&AYFdIGKigK zZpZ9A>S*D}S&IHuao8pkW3O)~OdYtA9Jj9C9oRUe#6RS(!}#ZXk-y9BRtXui8wOA) z=O^M-3~VN(!Mu)sO5_s$4XcREVB2`&`3Jvf*y6qq8%Z7v`}8wwHb$G%Mh)sfaFxdz zpOrk8GRG(QZQdFic*bXQ+ySaH(xSOmraJ7lG59dt>w6oqz>!woz}bb=K#KPG+ag#Q z2>%4VfV%6jekkM*{|-u)M~g=Ea8~iTgdE)AU8>Omn>1IQ;fBA$54#Wp&gb{5#uC(^ zbFlLTski1t=rXLs`@X znyjxa22{Q)AdJ?Tm+LohWPelL3Ge+eDBo0{oW|?yXg|I(aT7KJPG=bY(bTpMep2g2 zSv0I19&*yQW~@VsVAw4n+&AznT|9?$yknpi_ZFOlRcKGWM3Q4Y5b<7tZ0m)10lXpUcq*S8lRy<_NEV0EuW> z4I7@9^D~OgsC4^zLbKt4y#Y;$n1w%f5QqyzkW+9M@oAj@;k)@9DSFW*&7&8mOCjBac5>`-ERNXd$HcrE% zT^b=`87p2c4>7`^`F}m?%L7@@>_)+5uYT0=+45IEtTeRyr@)?jm#6;y=@M|%UHK^S zdzCy9cUS2h=s0V=^R?4()ZB91Xl4H+ccC0inCP@1_WMs~)(JV2a3i2lOtdT}9bie}r!&ffEQcUZ)iy=(-vIrBD(>M_}yE zaDx<Yd|71i4zaP3gxu+Y!406wnj^PzD-jq2V$M$5J>e;LimClmQ>L%u zaoPH?liPcoqHZy)2LDw|PBA)lG5-*j?LSDMMZDDPC5p8T?qD;*M0eJAUYwa$>VzRK zM|XLGkMt)xR>Mz^*-z$8I^Nd1wI@C=<16<8+AEK9fWH1{(0Zwi^NE-BQ!p^H?-B#_ z5_xy$g&}wwklCWqZ;l?F7Hq@$Xls#HRTYt%8f=A)#-b?jmOxA4siQhKi;kRE>#0Wn zo82hS{SxTwNwFhoI;G<& z0VAUWwm|wY6;U(lbm=qzU=9!+qf^B1F zw4=AWd(G359}pib$_TXI=dE?x(u#DDO|zjzJN3o}hyIv}u;8qvD(i#m^2G7W4-F7Q z$796F&Oc=c${Bl?`tV)d4`0sVgX#QJwY*c&(C7VaQjFkA$&#lQklu`;U7^L zcFp`yD4+>YFiLVcRGaALR7P}@MjDYKWs>FT> z^W_^l8ut`gfDkI|;HQYV@Qk-bzqV9hauUb~V<~b2)nl|^OXEMY#bJ|=<-L`sRnm^} zrk$QfL}s+yoEXUS7AJ-I{prV-U);0j!d>zV&EzHWWei=y{_myD1w?o>>ay$$$fnW2 z6;WVHDF!i%K%tN9dOZYU-DmGCvD=q##7Q>AhGFr<#AFaT%L#iX@dzWye!5&xR(wdy z$p)4unSX_wNjoxl{LX5bF8qA}&%MPX+v9klmNVPI@yAAaadg*Sd zv0?!!PJYkThKr16!L&RcF&nS!An}ENZ7UtV2@@B2DxS#0fHB4zKDE%}+&$QO3dmi+uvxA`yq-xl+#x{7gB z^jS33pA{8izQCZ_^PFZVAr!DYi@VcGqsum*qSJ0nIej7`{)o<-j|__?mCGz51Q%c| zB|$1*F#A5S)Wi*r=3Y4;*5DHr9vpX&FZ|usPfDJce*6NI9PsSEGMdx}`(JO~7wq>Q zicm;>VP}GgwXBRXTTp|kP?Ff6D<5T5XI3V89&*0$E;A1NNmm#EBT+%iPRrdqWWw`3 zH;g^epa;%QPtI4Pl%gmB-WRo+oH94zAp9WgjS3beJB%LlFN3pv(h<9FZV~YhcD7&a zGRxa6fnMXlW){ZE)UP!<^y^g>TF_vZ*6_Rb_#t_s)V<>&pQ|d+0J+yN^39Rp_X@Ug zejDZbvZu!}NTmCNcEj?N#T|s-O!qXn)?B<=4L#u62tyDn82HqZ-pf6Ay2SOQ7G8}0 zK>rbF0Zq8nnadqh>z9l1*+I%kYIt%ay2I*tbt~&4{M+oVxu3E#=*1!8o-x*?FmYA$ zkp{Cg@?^|YQd59l3frMfc#>>5J=19z`}ps%5^$mc>T&Y#{I03~Z2sU9H*NJ%E~!Ld zY(mRV9;OkweAEpUAK%OBG$~uOi~76;;}EkZj?Wy5#a-cho7dHY9bF+Mw5wL!CvPBz z41-ssq@ICbvX_=19jh`#gUqcWN%-yUI;O8qU7WM{UJ&^tTGIB1&L|dpyUD;n*n-?W zOPT;IKGi*?5?y0y`Pp0y6bdwr*V2v1d4t z>ck?{$~dXk_$EoIG!(B_ldMoN$9%_<7y95RQ%T%2QK#wobH0^(i#JziFBuO_szgUv zs|S{MN5rRENyki=24!G2R!KgV$v*$ij*;0P$GJ2HeXxWv4i#1+=52^Xj1-kH4e>Xz z-fcP!1=mdkEWH?VVrjkiG+0_rE0CI)KB-iybiMk!jM7QOM1>Z3{FA+Beh9qR^|EZ% z@S^pRphmeGfi}lBI;p_S>oGjHC5#1&{!;c))9EjlEVWgFEe?3ouDDL**~zW)414=K zcn%QzpoZesTK1+7gL1=S-zJrz?SEmMeHcZkZ1U!&#aM!RM+pIS3E3lj)A9o zn^)^i)x5A%thl^CNg3rn+7w=aI&y&{yMa65H+kOU_~Na`a#4coTvY$SSQ#lsudl~x z+f>3J6&$<}fv(~Yn2L4;G$Nr=a|u$LLa=FwzF%Co8Mnvsn;Tz8MQ{UR_$4Zf{z9iC z3vTjPUCdUefGqU(oxypDOglPr1eI?Ir>$h-W?#6u#0ijno281WKMYca+R_=H=JJJ9 zzR$hA%6-dC>IOg5!+&|Sn2QYM{7a`8d*l6aCL88f)J@M;!d1d?n2 z!l?*B0#yh-u6mjST8S;@#?Eoa1BnqQ)e3sz`YVxaF z1i%3cG=kK*09qetL}w^%11}I-L>48~>$7cCrT{_MsIr%cVMfkDRfKv{JD&w|CJLjQ z2p5?GqaBnw2LP{~KB9DzVFTiL+oe?MB1dfz4vm;Xvv&YWtr$v(MFI+lZk&>U883M{ za3&6KZVdeT_h zhykT)+OV6W}`!=4WYm$?=P6EUUUJ!;Q zE|V%aNRoH3L&-rAGjNn-Sumj7Kh&=8iVm*TPNSR03{5v}G8acjuHNol-YadQ!q@VGuJ5{M9rq%9iI!u@Fe&NX&T zH_KIIZ3(Y)LZ0mi!Sf(rq$Mf z6p50WOao%2<#IFujB=+aB{gQOfGxfsNbxUbEzv5lgJ=y^)YFaM;ICT?CNtZ4bwkeXNBeh}%=c(DgyH)XoTQ_)b60!x3QZ(&w_zX?*v;>5u5M5P)N z@15ZBfb>NG>5*}+6Tl)(YE&(XlCEMAvG5lqIjD#^vdc4gR2^JQ6ja0@^1dt9E{xK~ z4wpVmNSr__q7@`cMF(L4mcAi0LO>240?|Q=z-T}ua4K~zmZ-nNBF0>iKoe_T4WNk} z(4cKQ2&;Z;K5Uoyd5@soKq;of(N~^gA84Rw6i@+%2#@O`zQ3BgKe0a2K$OvdsHz*j zoLy@U4RHJvj4L+1Yv#R=%G@rUM|j*XC~(N?`>wnsiXVbc4N)vHT_%9>Rvw(<_a4xztHLq&$)6_ z-t9t;aBsziW z#}TXn&KAkkv=mC!R~7+bj5t=#gjZr6@bMZG4}u($<^>SU$|4qTX2>|C_SGoCQ=`zR z=WjKy$MG@~XV&3l{C15wMdZSy#(2Fjinb7RqzG>|*&zgzsyIF=#d1&6sMXD!YlM#B zrmeQakF%*y0R!ggj4Ti{#-tbtf}p7;Gs;7Nq!58bfv8>Tl6G;zkA6UdH+EXTy@Pac*Al2d!z2<>)@SGa88SWxi;+hy*luARDYO!FmC zH8hxx1Xny3Cj{iW`5LnvK#n90&_>-%4J=YE$P|T<4*`sv0+5rqY657C=A}s0!Z3zs zV0Gs5B=dT5;v~9sHRQ-}H~qTp8-2NMo4xVFki1f18b8A_o34ES{QNY(glM^Gdye>i zkYBgK>+i|6Qax_N%T0E5=brrW_?oTf7gAxdRAJFnzB^kj8!aBD8Bc@2=9M|`)4i^I zKHY4!^7(>cPVj_RJ$R z{2yw^k1s~&+rEnPdU$^`;HMc_-N!5^n<41fuGd2z2nhMRF6)$8bfBJUc_2j-B_HpA zSt3wH3YfMm)Dwjia2Xf@lsJ*&RaiJfPo1>IH0D$RE~_N20p7ET9L{NUBiz)rh?-wc`KBZsd?lw>vt5mlA` zkutPP#I-;nGBuf{_G( zd^KB-yqg$ADgr5Ts4G6Dr896umu5kTs3)S3Aih9O;YAMg)WU%r2*^Q7Yy>2=NOOR7 zyAUmKye;rbf|3*`2E!qhl5@ zayWSH!CT*s1c6jRPLe7F)|C2G>n4gpfHHAL2q+RELPIV9lq86S002x}V4Ofv#%IA2 zRR9Zs(}))-sj&?jJ18r~3jLCsO~|5Lbzu?;@I4mmHMt3~RH@OnCguz4djrS!%&;`q zW+7Cz%W*uTUi3ZBNu?YH)MnGnce!(Of#ZhRY^qq|KBHA3EB#f|BJU-2p`_^9p^_kD z`Yi1(sVU>78g}Q7p!NJE3-4)pm)rgLEg+jin>EcD0H)Os)q9U55ieZa?Ws&;Up`QVdaw-`>)VU?D*!JxOwrAaGiJ zry7m+5hYyQ5>g}*fT^0h3jha)Yc41Ut&kjkq(Ve5i(yzW!_6jZV@&FW3XdcJBLytd z9U>N1RXCZDUV{5n9nV!BKR^Mhj{F$pM1F#ZSXGA{qV(!XGSZRuQbbQf4Q&>axt%(A zaP?Sy;IW*~_i+cd<78N$h6EO<(FBWy!z!kPd*^FILL&?b{N@`7UiU^}oq%=yR2nrA zh#6$$6AAs;c7`3q)x(36RuN?Nst}#k6+w_pFwr$s7DEC>7?4uA9ALDzh!Wn>}+a}W;{`5S0YXl&gNRgBZjKvTrx``TVwGq1j03ZNKL_t)7 zN0gijBQ$bIDM-;@PUAUbnneM`@!Rd%)^FDi-tqM~T>`)K7Fhr0_w9U7Jn*hm7+YL# z8rO&EJib2e`gJMZK7K=Ty*rY06mAK6m2?zx=@!z@bl(!j_>BRVPH@R-94Vy@8Rw%D zQGok_yBbl%L!jr-_aW6WVUHdKOdbwe(VA}jTQsqy5~XJ3i}AlIN-nVx3P>#3QqEL0 zL~)$MWd3Rc4g1$7HQefG20qKz4Vkw;LtLwNw1oPsa1x7GDOkxBy~aASf5ly98GG@z|gSK;k!n zsTS>60iW+HtqI^O>CtuIeL>A~JoOEV&5#+WFMyPxQkIzt)NqLM>Xl&x$YdW2fJarX zI4uVzmjrUPBs54N)3y>oC}EG|H8Lh+iJ$|i8RPgB;N`0`S0GAI zFP{Z?AB%I>F?vx14EWWQQnw-l1-V+Csd}???#Q#?@93}cE^+CGr@L_I6o)l(MPO0# zarca-q-yPY(x{U?AX24TBIqq|EdUV(Jlt;;2nZJO&>4jJLQlC=QbPs%EZ8X@bE!>2 z)Eew4kV4pB$oS5g;`XAevIP161Po$zNQ>xfT+ik$Qmf^`wq#q-XaXc;Qlg0tz)IEOqze6*p6+ z#nVJK@@P!J=?!wwtMD2U*#PF?ab6DIRtXLFgFa*ur}n;3E(wpOSjce}_z36$I7rCE z=~KiF7kPNuYYa9E7mV}6o2i#$cv5~J)3nm2?J+pz+C zDv(no#2_gGMhIeod338r#KJ-@1X3d~K%}YSk^}~s^a?bTPNIt-5D5Y-FdY9!G@+#c zamF|mcxqvh7+rw)9*d?h2&zhrq9Hj#bW%O@_=MUVkdecP(=WEGQ&=OamFGFO-yum| zutP?!<-~QPh$M{_m{TOj6Q^P{Y1;Bq7?H^VAf;Lqa)eh1;yIL%aiACq_>QAiH^wWD z;M^U5@Zp({pS=u!#t~PIjeL4+c}#41y}3_cIeb-wzTwiV{_`iUc>i*e)iB=R9l!IT z+dqBdH$HviTn39R$GJH*PF zRx6Q&O?>vnVtO9%aUZVPY~lP(4qQIcZGMT9-S<+=<~dOS@fXGpHDIajx0N&%t4}MW z(LxN0s2Uh8ES?W&(E^eI#<7C5>v}0O&1y{3H{1MBGn@0&Y@=pdO@743Hkwwz-XpAB zZmY4z4!a8(mYqf6ea9s^PCAoDAqPmEF(#=Y4Q-URs$Ed?{=h|X4o0rXbTpObu%k)j z{nf0K#66FB$vL=%#3_sW0Hatei!mM=4oNhpV>vlw+L_Xk@DcDzlDM3RlJQ%5n!w~R z#t*^hx|Rcrf=~G`N-lKr7^{{qIJ%!4G-1KnMa_wEC=faEqob6H;$jh13;lWD$75m# zZ5g47Q^w^`JBK6$a!6W@UP?u0VT6)H>q))B8&~hd(iZE)DADT7rSnCI+v~Uya1noo z|K|StZ(R4`jdYtANLO8b)$je>HYVv&YVlU@@C$J0V(&Y@^S0Ly)^Gmm_iy^#55IKh zGY_5Qvq9nPKmWyRWQ@_W&JZBJdck8a*71T!O}}8iXzdPPh)BYpM!^9&Q@u_)Q`CDF zdW+me;5pYFNXVcEBVAl~S?Rrs3+akZ^}skinn+Z=u3m&froN$w1{>9Tp^RJ`i?!6u zJ>Z>^k`YaN)vg9Ab^|pS1_k8+mBUp#qfv|EP#d4h$bnoHt;c0YGhZg%?1;h}0mV*K zg%A3OhI1kcwp3tVods$xuihA_z>$iqU=t!b91Inn)ov3J;_)JM_z*wz8G5?19<%pm zv&nM<+byOUN30;_rr9=xiaalLd8O;Q>Mg9r8{?qS=9LD+77qw1g8#K}E^JnEJi{=W z7;ej8*Kai_ajUVui2Y@8>MTTKl@Bf9V{~2?P&e-tOqYe81aufHQACA#80wxWMII9*rBVcjfdpx4 z991u<7udlA!=f&6gp|&sxgxY;6g+??gGeb?_YRl?fy0f49 zXIE@yc40Jr{Jnd>p1J6cudILM_wK&gFy4Rto4;~h^QPas_tvQ18?L_mLV)+)SbcB# zPk#TFZw_z!>c=i#N8=jvfAgi=KDLu5GfBD6ynPMOH$L~_*=O$ml^twyH~OtV_)u5Y zDjnMKYk&O6&4%;Y55MJ8mk&Twn%Mi9zqs%7i*Eg@OD}s%!TA0czVnf1m;o5K9*O3` z%jloI@aivLUnn`f>#{U_?{9wgzVknH5%j^wb(S61#c^Qu{anfOupSh0}R5* zL%^TuIv*FR=a4pw`%x*yD*|FJnG9b^s)j+SqC#pAQX`pKtqe7)s%EPT7lnNmuAYLi zF;|m27prH8nnfO*$1GKFeBv2_$x{a&E+*;6rHDdZ?ueL+$e}!7bR0(+JAp|{md+-5 zjO3(1Ed*+*S|rEiYnpf!q8>S_a*!ay8afHA$uwRI(Ey&5G0#hgpTw6}HWC7y2E`7l&kQtYwVO3w0z#NC1# zfBY#NvfX8S1s*01qma*b@w+EryzG|T#P9y;?f>DHqq#zMV{ZC)KllBc_ZhE$*9A8i zgHQd-D~86OxaoKQ_7Coyd(%7KbncS}>eL)JlJNVR1zx$n=$Fm>)#C4xo(ysD<9%L_sssHw;-}%%n2O@N^{jNKI z_5be3jGpsbSLZ(Z4%~g$-+bX)m!NjY#G>I;})+cNKaM-gWy& zzPjBQ-1Nz-b6>a<)q-z-_4^Q#(K5fdO+(s6-GDDiLgNfR~lQZ$P86Jf^_A{wzSp&&Eo z<*L;hK^q#VtjjD=S5!F}gpCe1Ez*b~dFFht-0GHf{23pOd}U+7Cfe^TCKF^ z(3D(GV4X+cLPmAbRZ=}u=%oNWDV}pGI%qtnLLdNgghm4qVgV_zmLU3YDoI!{Pb#$1 zA&Y&N^rs4%1|>AY1q(=FAxCp=7BE~DyH;323L@y8mkb-m_@}>p_9Hx9*URGUdCciYz={ro<3%l(RDJaxyzpFh&L>Vc{EkJ-7cBb#|X7~K44|9Xt6 z4#bzNIr#UJm%aa|HW}OfYqQ4pZrdBlh_Xg$-Z!!{(>EWfY~6bHIwSbfUp;ke!?^Y4 z=idJ>w_VJXo%beD+BZ|@68&Ufkg+k4*n zHpA#;_mlN&uQK+~geYN$mf8?+DLKpO2cJRap-ATJZ~grFS;yWvQK8BsyJv1L8lQO2 zTDV6qzWj%m8%{5+AAECuJZ6L?(WeTDqh4^=5i>J)TzMP=dTepYW(S_4O7ZpWZi@z-X7cid+CRMme?BFH1{lJ%gytcZ`ua6+v`uxK}xp?qSHgR=G$jkK8>m zdclAoNi7TpY=BH!B35UxtS~c>lGSo8Tmzais$r>iPUAEh7Jyvn(U7Eh1<*3%fUpQV zWCX<;{N9;*8BWhv#u2X_XX$`-)!-RKm5B+wMXtGn7fRL7qXYrManQoPh+g_DItv*v zWaI(>Q;W1way?Eg@h?J}7laT?iHr@D9>=@N>P$X&rQ6#XZimH`Q&Y!<)S!bHMiHeJ z%3J#qIQ-Hl%ia3~7pd?NoWApRW>tlm&YFG!7Nurd&JYI_d*%=4`gfo7SvrXH&MvI{B1}v4A8jqJk}s zBEYfox;9JDJ;ek)AY#KS(u~JKdbYiXlIgjM*wE`TF49!sCGCW{6!!pJR@Sws3)r*x zd8E)Y{2tHhwvC~j-Rrd1WSq76)VjR4E|(d~rbe@wkxXi|kQpgt#(H{&v+1>6xxQ4Y zKb7fqcp|oYGEO1wu}ff2DxGC;pq1?w!6u#u(zcx=fW%kGj>)gVsql@jepoJ_rG08R zBbucKO@=<`8F;u&dEmh9vz>$bNKMTX6#*?!k4ti$xD=R~3#Z1+C@FZ+v%^BETs(4$ z77m#gM7=_HjEH~Xi9wK>F)9-AFJ>;akS|uJW)D$+TkwxmCOY8S^g*LY!bRyKZ}bGJ ze)>x7dV~w$#kEi(6C(%<7-1yvm{SjlO1@5%!poZv4k42wT^Gb+z=gXYVwX~KokVAi z(LlTjI7eJD2bF>+7eEv1szsU>4gjSfJB!A~#un+kum8>mcYXM*8`h1i_l(2)j@|sk z1pe_it}Ynf;3wbEYfR2Q#jipb?)euMwhoNEXUt_I9Z6mk=UJ4q^mp>Hy~H>!IH!N# z_QQ`FJs0O1%-QdM@TsR7**9&=?|n?ChpV>aQadZFFK8P1mRJHM@ zU%dV=w-v5hH+<{wy!Y0tofFV6^6^5TS~9FRTsd;pK;e;RFiZCp8|<4OJ8G;Q>Ma*{ zMs%wgVM)jfL2@m~bz&ATo?T;*0S3Ir0DzQJ0M&6R?syLnO@X5r%EHI}bQ*#Ok*B5O zsv$tS8r<<@%HXhof}X^jTe_U;OWb?>Q~2n07S4!{uFja(iK}xjVhk6mf{m3VR}q`YPOF+^}?5^4kL-G z5-Cjcl?sd;k#b5l3vO8UVymtAnAEE{J~V0t4*IZthl=H>M*$w|h^?z9iAW>$@SpM6 z0t9MS6Xz%mwZs@T7lp(0iy7=hX zgS|?s{1lLi{HRb3-kL}biBEu_!jQC_%O@9wZ^YD~skWKL6zZy~M432!IghTRl&I-s z+}}Y7jSxr?7!Gx%`4c6%?}dgO_JwK|8HHtm`c(eJ6@zcFLM1|7P&Fx3O+qnjL&L$u zX{0KR(WL;AXaWr(b|*r}QJzw%ms8;dpd0Z#L@7mjMU$pP8k9`;An1x-|8tIO#s!hX zP7-Ol>IkPYsbV=^2v);uc7P5VPGz`~R$v?wuqXgPjZ&$K>M&tkbk~hrpP704PhItm z%MD|8|F3>~W~cGspFGk3srS9R`aYuHNB`UZe0*oo``)2#?|I+5ACH8VM0NyACT(6o zsD3f=$*=DC@-JTejsJWxC$l>q{j~>qi(35VbL9&!cEA5)d2zZx&Yb>>_aA!8JI?va zzdz@>TfXxzzP|U1@4KpsGDhS3U%mS;G?iiOd}h}J#Vv3D#dp8mAOAPsiiWeORBHeH z-~Q+gYu^6hU%Bza3R&%XcGt}+;v}i~`aino(SLr;hkxbWs??vqxoRw@|C%aVU|48T zu!I2>r0>c+8;d7^?TR9Eshq7grr7S7Cy0jL(tgclh-TH^xEW4X3+g`=0rdBURvhkCvJjS|1xA50ItrQl?9aUXRJre1+^`ll(Z1V z5A%JdTU*?xL#RvevHRb>7fn>Qh83ghkPA(B!(5O$4X>d)ff{jQ%=`iKy{R*WDv9{@ z7U(q(pl6~xYhya1B|EV+NdYy;v;r{VNf_P$V2%bcsy09!fpz8%i9^AX8S;b6*S;?yQl z6htXv<;>yWQ2nLyG0O(fa}E&l0M!UJ3$}w;(!Ak`8_&jz&s8HLAz)=K>kdqW1(q9x zkJN>}lrK|!^UPgMCfKr*f$>mC`T)&sdjbx61u4)ItiVRm=Ptq%2G4na%27TNz=BTc zW5e4pyt=`q&zpMVyKA5!4L(|$g|>|2|N$wi9*`mC4J>#@C|03=?9B)W}aQj&ZAi>zn) z3Wu!_d*_j2*znfDomZ5cyY=BMKSS*9#U*!p*?f6R$a!~mm6Zk8eSO#Y@D?kc{p%W^ zv%U6GJiTWw$bQi4{jI-rrG`nJ{V49Q{rIV%o~TdNf2f!-v0_yEst(pw*ZIadP6U3 zWdZCi0ljpW4iYHcrDNXnij@T>2U$`RV%uziM@)SIoOBlv_38%(bItOWM{0_0QT8N! zM3kG@HVONd0OBH7lmcWpqe2r1n&X^hz+pzY>5gE7f?yX<_9Z2FB@SSP{tLoeN6Lp3 z2g_j+d*U^VbJCSo4SaR+*K-7}03GaenC?}RNUf-OAnt6Y9ar#qM8c8~d>*mchp_L8 znJ>B-%}GkG)6|gAriodJR%>wCjcOz2Eg|P6fk1FdaoG7qsn}Hu2M4oGFjCOe#Gf*E z*+fezoNA}huU8_+b=%cutLF4-wIj>bm%Q}(XTNF1c^)NYdz$Ywrp+^*qi0@bU;?;T zrBoaY)4~*LyzE(L>bDl@rO8WfS;k1$3s-L&C-wWcCV%|J$EQp;MXlXvcCgFVa>A^L z3ukA7r7Ep*f++D@e!wx(Q3U*$DGdQF9}nAyg%PVE<`t4a>`>#_P}o3dB;^vZpp>bp z!8EHK^H%P{f`nO+ZorR=7PJ>(Xi4sBQ{%-);KL6e4=IC;Ld)RK{LqI9%O`@OCN-r& zTnoN7DU0v6ciD_g-Rz}oeJrqAw=J0UAq9T;5S?N};4^tAl+J7QYSkvZzo?k*TRKxY zOcJ)tHX@H2Zg7x=MSO?|+_^c^*p}SBB?Z34M&}Pn;lo84sPMg%Apr86 zgT3vkVYcwRvKPg+(QSPa-9DBM{B4;{vPyqGfX&X{@wacu!luR@pYj7qfx_d1KVfVI zma%LidV6s7AB*vF)pd=}1EVW^lB+^q_aVDyi*L7A`!9asO?TGf54`8o`#x9y1yZkg z0Lo>=E56os&*(rwuL|(M^(OW-8x$^37<`PyvHN&6tA+4L7 z)!Ud2xNmM@Ins0>wL855WMRb88|2jeN_Q-~o$*$`A&T)7b#Io!>f&6Q20$`Ki6C8< zQIFxTMnVBD<01lo(3IR`!T{0GRz}kXg-He&69XK1z(M+xXsI*_53{0x+BS(ZKxOKf zpfbe?v^(&28rqVC(LL-~)+@jA@80~YKmYzWzU37cH@AN8PrkV8EDYHQpQA^gR$Um5 zdAsR?+;Q%NNzA6IG@W52g)&GOD@u-h1?%wttyMjFd0stBE3dPzd!sKLOLEaLO= zaBzA7HhwMhP&{JI;w4+Vol1PRSM={%|GoRqUl>OL4Eu^Roy}U>UQjJsJ{7^?(Qe0` z#Gywl*Grf{fv#qQwSXEBfrdd^Et^;kAnwMIGfl*L(#$hJJB zZ$FmDYaL~oZ7>4NhcDk+2XE)=&?abGiUOA(bs!f0_N(zHacT7(2=RCPIQ@lR`@IVf z?99RX-*JZjaFSnNU#GCNh;5XT*vG-E8+(=kG-&r?vWBgIzBIY*NsN}VW0jqc;I@Mj z%yb&C*KiAjUs^tk&8<60(POw=Y?oeY22HH#9UWI{=z4b`7+3D@S4#A z>F=_S6$3I!3{el?9;OPSR1a2*<_!+ALQq@O^Fo#?#iSSUzSwq8-*ocP^B360dd92w zp6&hg|NcYGb^qDz%1!^V`y223V$eGA&yP&zQ^u6e|amSHnJ#A@+|4pksbIb@r0~C@+8)gLolnbKf#oi`F@LyVB#X= zoZA7-%Ya9LNcbmJpISW*N75<*6WxwDL$d$HS5pPXTo3TAUZJKlb3aXH9=XehD&uZ@ z1$VxSyWq0kXu}*6`YT5+J43*I0*+g`}=%(NkMnmZum<3OVD!ev%=BnVleXcWl z&qZ5%SG_v);R6q#v-6c*?%ST#`}F5Gzg}mHJ)oYe8@mFtqT15?P){58fOe*BZ`vIP zy@AX2KkL|kyVq~Z&H-@=rA=o6yk(EfjD842c?lA*U@dA6Z`~M$Vyp}NrHBZwm~jI3 z!)1Up71xF_3Lw>*@NfVGU>42_uVf(y?HU*Y@N!UE_Zja>2g#!}7u}`{+=KN_60bI! zzxe;Wvw3#$-`xFEPQCp@-}B8*r_nskA++@V4l z1p#daIf(rN)(jLrVQ$e110a&Nk6R=!y5smaJoo0)FFN_F|L(UR+fAoQ)LH0a;lAU! z{YK@xf8uq2`H|oM%x{NBmf-+wB+~%H2-O-?l0MJrE{LC_AK=aa04$gcm=&f{0dz2} zz6nEqVGV9jB?%^8wv_vgY!LY?ea`)iqn%Et-Hb=CKD%`L>6JhHBnQ9^a^F4bHZSf3 z=p(T!H=hLErsvihAPsV6=8j+*!obP3j9~Jmc9G&Dkf^wBGmDv1nKiXI0(+55V47_f z(^xcxnZ~a&qQ}C3H247!ruB&kKr^qfn7|6OVBNI8?kK2uOhxJxS_56_Np!7ZHZ2Nf zF|^cSaLr#P*?Etv+=slCWToOc1?i|K?O%K+pW-8aXJ0d2kY)^m$nC*OtowdDO|5w! zf|qHQ4*PXff<;Wi;IN6~AO>@i#mW*W%Z|EKlmM| z%aGZ*Pxan?HhI2P`5`t=gcqt$n)R#uJ_$Dr?*ok^|Zs*fGCvp^>yy&9=o*P z*&wxSFT~sSQQJ{?84VzLM@2m!2@@J|=#i5R2<_W@BZ2@sHi27#8`Z zAO49K{HI^}#H4o#vWv-Z3f-2U+oe$44q7H@9fvXCzY*G8?cZAg@YVm~^lrJgn9`N_dZX!sip$rl8g!BlE*S=i##S zI1c;?#>HJC>1w@4QB45rsdu%ei!o|uS%?kRo9MKr(O@$kNFX7+CQVYNNH!_baih|eOJb?4mM8#~q9fA+f{{m3@j(oQtkzHw-o(D@GMQ=hn`U-0L%7Le^w_x4-MSJ(3_185u)$Swp-WHqy)=H{!-jt6|y9>RKrR|h&L1B;%_02dJt zeJm;;Xciin7>1lDj`#&IUZ6Bdl#Va>785zG%+hAH4gVZWH`L<{t#(nM1(MUuuQgoG z5R}#qGSr-%qy4(tw=wUzeW|LYs0pZ&e0)9kpcUOgz|FwF+jAWKufR{X@T{?qDB?)Sa;t^e;2 z{vXZ76PGRz{31W``rDlLJQ+e7Epvx_hMH{V+9I-NiM6I6DN-F}n* z+(9B$_eQnlnstxHd4+k#=~YDF1NxCRlsQ8)sFqP`HWNUOpw~GXH&5RgeEQ*f;CWF| z@%*Bd`pFP^Lwk8S4TG57QXSV>au=HU>rUPp#nX1vk9IazZd-nQI{W1L;bc1IfL#ne z>;_mUs=6-r8YH~NCIl9HYsd%c%_Kv&hhx}T6-d4!?wJ4_GZHe~8F4l*%PSe^SMv$b zMf0oWEi%$}db9u{f1U_}9Z>L#4;P<@_@V|N5*1Y4%*3@IMNF1YXiow8xOq#z!eIlO zu)6JKX?be)!KY7oc?<3gKhu-n3SD%y^|FKVh>WAO^B~j>CuJpb? zJO3^%4|KilTVC-lW4Z?$HShVq{=aveb3gpfH{3EDFRib5!TC=*M+jq0=$!Zs*l>*> zf9H3<9b*Z>*8lb^zyC8|U&KB@y?&S?=2P*snwnR*I+`oAI;QscPm|N$v^t#`CK#&yH)4(sopF8 zhkxXpU2w9o>;a6@J6`qd#Wz0FX|teSFlY-w&8QFlAwt%p z&p%fERC3#k?ogVG*{N^4gN2FfuKCYTD-V(5Dkxy8fu#5`-@x86A1d7E0;=$Vvk$$W zIPsS%!LGBy1kmxGc~gFFvocJwapI0M4r^v*0?f7%DYHmnry}gFnVX1^Z&i~7#n7d+ z=r7b)+~q%gFnx54YAHfu*JCSIwVt+HNrrw1N5s`3w-y%KqX|fv57010I?a+xc83~} z^$`0r_HY#`t0v9sYUY{OYKI|fEyy&Qh&hZ+0LD#4a*0uf15t55LLR_dBEscK1LkPk z=vwV)5ui@6k6iQ%S(GysfHd?~y?W{Lzk1i7eetF{{`2=g|5v{8 z@t1szu~1%(xBvY2y=oX$BC5 zugI`m@R9N{tP)5@1tEfX_yT(LE5(#&tiY;=1Vd#Xdy`q(spPLcv2^#5V;8gW5B&Ep z|LOnfH#X5JLHnaJTlG0S*2h?Z->iP~tDgIkfBmg5sl1V)H2lJs`p>@Esika^ly*KP zTkWpA`9)b}Sa(5K(1&sX*^D}LIO+PC|E%6~fB5xIM~3^@i*fdicMk90nocgAzWa8= zB|sAGtgf#%Z#n6<>SykLhDiYm9l|tYzFN9vY4Y%vcN&ZqrFQ09p2s-H@MPYrcq`CB zB8ALFrevY7+^4-)LCj*7Z!`PqT)xh-Dx}tz2!x=TzPF@ z9F}S=MKScqLZ#gtKXSoCvp)}!VbntQ(9Vwewb$Ko{LjzroEwMKbsS7O3oF~IShjB= z?SP7JK*FQ28O5k?R(#*(gccgrT9K2A&P-<7m`i9G_H02yvm6uh3fXBUWF?+Rd;lB9 zG&L&np1-p=X2~Kr)3QL|4rvYg8%&Xao{nU@km*_`fFiS_0p6V^527fRg6$z1vGB1J z29ENY4{W2D9#_71oFm6hY+T;Zf%W1+u^*0!uaYKVCV?th*q@DHQ=5zYl$_*ii$qd3 zcN&)_w&f=Y^?!5WDBU!A`61SyJ5_{d8K#V7L*idX;gzX98{|g!G763|ip`>YW#iko zc$ROi1Al$X-0HvndMps1yY~k^4^VveH!t1!*7fCk{_Eq|x=Alw{=mFq`i5CVZ>OQ6uCj$sQm9LtzO` zcN9vR?uwKD&^Nv8RL7~T_i}H1>q;jaBS&>kb-kbZp4TVGJD>UZ!w=qf{|oPaG4!Lp zqA}_}_ZBjv4^cV{<4Cy%-oD?c<)AG;x-WRd=db`+K&QW`Ffim)UicGlmDaXdlB=|h zqID`=h~`r;{LP`v{FQ&ugKxpX3tewh$!*Bk;c3z;ZHw zW2&vuK-}7h!$3k0%syidj!LUwmItL)KF3rq{2$weBxhm9&ydH{1=PS)CqMNobqihU z6lO2CnKDg9@k&5rE<)0;s4*_wR5=&TZTuC5OBHAmwEoOqu*uQgzhG)6{Ov39#eomuam6?UYZOF%7HcXj_ z^~cltlnw%y?x*6gWjGLvi1R+?X)jru9l6`@;$FTj9rBzbB&pE7O5Y1>{?NZox1aY@ zr{6PxW4#&mTr#CeuW!=bH$V6JU%V$+YUfZm;m!f(OMKrw7k+t5}X>ymnr`1a*}ZavLDZ$gJm=y#~i;=k8n^!W900o0bUGuJ5kvUyM3<;N1t zhMW(eirEWP0TyXvJCNuQj8crz1IhF~h;$(u6ebTK0{_^dgoX^54od*gmL*66XhJ|` z$8252B|fcG?lD4xIy4}RN(g3Z+Mai!zqB<82zadRkAi8E=cjtDe}31U=eBo$^Wi5> zRI{ae1>RF*tBRQM&fCsB{+aW$hPT$K_ul+G=d}NfyqZ70*?IYk3^C3a18$VF!3ef- zp;nViv%F~;DRebE2ZajfwXYJJDWsD#+=x%&UT6f(3%hqQP4Ex6x zofd)h`P`Y(>Qqc@T{0wbg*H+0|y4M%w|dB$dc1)G76D~#YyZPU8@9n zxD&dbb|@?@9ogC0MXR+NrME7)$GR(%boRugI!xR!93Efl41+8%dx=+;SGIPCSdp4W zQ#K#);gl>*BG>hy%%Qkb&g4er)o5X<>VR=}^GbaedLEodtCE(jx?T_EA_}vQxfGKs zGB`p=5d|z0)LE2+tT)?Dyaa#-;EqldvjEY#OqaVdN-2?kXyN8k#i63q5zWs8zjCww zJoAvOsc-vOK)U54Xj#qomV}JO$U*2*)ywsSRaA-AM z#)QtTn9#Yr>pc1uYjxVRzUJ>1sQ2L7ly-fetv~MxISMrI%)Vg*$aTgPZA)-Bp41RdUdZC_<`Ul=((VKyetrjtPtbkthzuUm_4bY#vb*EeR z|H*4#zLFLH;okd#eD;ISe$MZH`cvnF;dkHl+*>PYe|h1a$1l9;1utN=pF~+JZzMrw zd2!)LXFJK`HpGIo0Nta{ymNftIk@{6I540O;O_Ttih<$DL_GAF7&!EI`Z2J=$h6nI zgILT8Ks;Tu4fnTqd}WUq5f-qUJFXVN+AS-_?wFE9m54b@44HnLpR8n}ZZC?STu5YA zU&LLXp{!4xh-FVKUU3nU*@Z`f!2@BQV9Y?1@Cn8r{t}y_P97cJdw&zfB~ ze8d*0JfK3;xczJ~38G7vQQLuY1>Xj?%i`(^8<<_cIZI=x^&qcCqangs6l3c}j_>JS zYi(uWGmmZ7z1Cnn+`N2=^|Wi2K;8c8=JuwC_=LU7Ddc}8j4%m=A}pe2wxJ=7l>$#* ziQ)Vhz?8a+z6X9kd>IfGYp52u=QX=URC%5+L^!nzK?#(sn@*yr{4;bef-21{+aZ1+Kelz_3G;?1315b z^*gHQJN{4EuKD?&ee2KjYV^dP{_chMUJ0YGe)+e5)60!d^zgm!{^ahzc(>6A7Fg~WUn{_crVi@b}xPW-dn!=h0G$@kb(Ci z{QShExzMUSbIru1N0K-IeY$YEMt{^Yp%*L8!;W*AG-qj^Y>pc3wOa3(Q|TLF9l1lr z1N5DW?w5=kkr?G+@@Qdft>Q3#E~2WQJib$Xc(dv?XHC}$BN=UU>TbUsqwE-j&Z#5K z^%L>u9&p#!oP}O+VXN`jFnZ)7w$|F64qJ`F(P-=Pcw-!091p_GxiFdC^T_rss~&2M zpS?Im60+QPFYbgpEIF8S+E|`j{=&l#Fe$>Lr{$LW74(6IVWrcmXX#`ZAXaIxCpX8q z8#|a33$h&C##{t+db8H(RN?BRvDl(wa4H5GUcUP>Pv7ISD6kUg$dJM8FKJAP_=XIo5Uwx6Z2 zbVwiCgHB>2a_46+QZDh%LLS8~vCo3I{gC|_ii?lEY&y35#Iofq6DN#Ktqe~{f|ZZ^ z$?W|lI&sT%tm9fALYHBPVl%a#_?K^O*5%vM-xiOM1TZyoczI^)>&Kh#{^H|*{F^3C z-7uST#)+?Ik){lWm616EI9I$&*GpyBGQMYC08qZW+HoaE*F75_VyWiFCUmY&>>uhA zc6E}UyaQ4ly54?6NyV2wH}>c49*s{-76LZ3?$GHn9S?6t+Ig}uqr*U0o5Lm1i6rP+ zBez3`TMBmg8YZ2%tUT^0;w#G;Zx54IQqyy6c{O?eryb~NH+AMLl=P7g4_MkJyJwzquj)Jwks1c6my zcrreUo3+(y1y;`td#EH1xWI=5{ZI0hjx(q@EGCbcjZ{M?iVN|yD_*6YKe6E)FPufJ zU_#5^WTuu!Oh&{4o9ONokBbB;H<0I}98_g<(DtytypT<%4x6Xa84NMTYdo3OJS;Rc zoQ+-1X{@iUAW8+x3MR##@2@OX;yj#;TAgkH^DA&+Fm=*uEh@T=`eMgl>UiULdZeo+ zTxb?at2Q2Cp`lo5%yz?3*Ke^I%6BV4GV4^U9KXwnyUiJ@jI$`jh*6B?XO8HdhS)Qb zL|k&-8b{1yC)y3M;i+BFI?6?-(P+mLlzR(9J?x~j6>Hd8`cxEf=`L*6lAB&e7OpLPz6AZ!(=zV)KHkoITK5&M zj@AWr7}c~rwrwO>1+z`RKAS>dTn<1$kHVC99cE6YYK`QRY8s!RuH<*9wWaRPzW3_6#l{C1A;-lPu{qw2nngx)%H*Y`vi}gdsl=U;8!G zdTJ~#0+5b%;G-A&7xl>_cW4xyRE$6(V@;Xm2)+HzVjNCpQq-}RjYv{9HS4Jo8W(r# zuq7|c&r2J{hQ!}K;!k+W!y}gsZ=CY9N!iEJZ9m7RV_%g4$~0|i_~WpNTOSg!jxvBv zmM~@3IBXX4Rb;cU{x(_bQ>J4dOV5Mane(roc7L^M!18dom*7rG{#s8PfRGjkrGvGz z3l4+zf^IlB5cRxfzzWXg1d7$wxWl`rkFYui=Z&|e{~^jy&M8o(=j^>41HNpshX}0J zZ$5g|;}ypNvdan+z!)D+rKu^sIj>zy@}upAI11rHLr}xbxMSrcrfrIb6HljAm z7AD=b_H27At0c9>p40Yg-YxY72zh!oeHz9GB?3NB$&mRPCXcGy!9*@4)~qB%22<4g z&6X&|5(z0EFh8^(DPjmgmv zts3UIBAPl8M>DfYHAM?b$K!H-OT$ecztmh_gg4&m_ku?+wJP;!I4&YIQ{m*Ny-u5b zWF60&_{s8Yw%Xw^MnZOH8Jw%xIN?-YDl5U%99%n~m#L!byR%t{1`pQafOzBvaNg+( zoT!CSQY3gx416~A!hu;>tHD1^BF<`LUPpv)2y&sI>Q2 zeFoO(Kz>ftoy*7z-1KN_D2|7Hk&4oHjKU7MM)WwY00|z zkogNwdzFrT4<*j83{SFUb~dohs0@#z^eG+ot$pNP{z&RTBJ}FL>#EiNzUR|_zlt?L zivZsT+U2kHv;io#5PyAro%?Vk(^Cu>2BWz0#xyZvK<%@K#UUSoyzLw25%UL7X&{0K zd@z;gWxsQ3p@S(I1dk7HY>wgtqx-k5trf6RD^2t^qBM<+2`vr=Z*t-kqB-F)=aE4k z!t3A+zqHaq%cYp^qV}8C-8OsiC%ftDG3+VC?3jeg&XcL*dG(_}EdmO#6}lT^mT=Y4 z#oNio;S7T|?YP!oo^hlJ>kdSQ8X=4{7B0X9fJ=FC0Kq^H69XTXaWj@-VT*ZRTpSsR)Vw|p2y_s>x}xI|!-g~Q zDzjxQ$YF9#P+oA#tt)9alRf(Q3EAq{bWTV_f=d^`2!&>CY*2=7!wVz6i)8?aPXm&* zk?3+94a+%n{^6MOWz-UeR7(((ijHV^nuCN)9a8<~rv@_bs0AiqI7x0V4##vor2a-Q zp!ahZiIb2@yMNIUnJ8P_C+T2eVUa3BF5TuNnQ+2>v`7*y+MOtTjQJjQj6>4dPw?8m zHZZY>ZZG?7*1!Bt>#%c@Eu`u~U$$4~GCGNi>);iaz1slS z-U(?_xUpj|;yfXFZCX$J{C(B{Ky4X2woyu!4rRc{dY0vx4>=z|h;L&yJ#71d^+G?> zBj6zPI1MC}G!Pc$%su!vX!8#S|NIAOC? ztBtPmxUtYlvq=$T4e&Q*uR;v?QBTdh6C?w-y}(pZPipCS!fplXu8=_-hX%+4c5Fei zPpY%<=yE>>_^8vElM$)3wak?s`bnn|_QmQPgj?ASuvR3zMST-4TYl)C^NgIA}~B ziPEQWP{c}-2%;Nf1qr7%iZ74+mULJfF!fWx-5D7&IagS&F^faqV`GT(4h(Kf^bO=0 zxS@kdgOdq;AKW1S!Fk!k z_bwto2q%yuDJhe8p7+|FF>((*g1kheFu1wfL=>PT+oFW5{YAW($K~Hf9U#55ram`ZM@1liV3hCLH+0 z6yP_i(`457IDVrUjq{bIP7SheR&6&q3ozzDaqP3O{}u+i=iphNBE?IwR>sCC#(l>6 zoT1F2;aE6?u8;F#1YBX{YnCi_yTAaX>Q0(&z)c1-@-QEo_D2{;Ue zWxm-Zuv2C4lA)eJmYNtfP7#db!EPIIGYsi2W|eD=-En#;D3+T4- zMlCNg_Ol*YP9NV)!`y9kk#8g4U=@;c-WBzM)ghKgut_k0@Wd86Jgfb*S(*+WPG@&8gaL>YnNn|0!B~qszlKgRRb0-oOd=J4_R!a z(i%edOms}Q+lBVeW#Wy_Px<+Ak-q(byj=E98Hi|#ya%;5B%TDe{`jb<`#$BP@zYIj z>7Tv+@mw9Wh737MP!GeObeNZH7@G)po3ioVyV+MZ7;kTU*}!EY*E((-y?nbD(Sk$i z`?TY$SOc^LWcz%JlvI4_i4R!MRr*li`B*}Ho>?6%aJ*BK-Tz`6Kun6g&3ax&(O9hm z1Z-q1I4BAQXV|K+4LWT%4#pj~?hAbo>*sZ^4uVAVYe@tdr?Zu1Xj_MUp0J@E8Ro6Q z|6w+OUw~D5&MM5X6;@<1r*Jq~1M}>tg;bi;m{Xe~w17Y;HeGN&atE?`IPrJbQ3&O3lq6Wt9}k|yXfW?76`%~NYmr;TcGJ{#3$9vqYEG?Gx*1AoD$ z*lBd!Q~hjvv%b_Tq9~^z%w1_(V0km2z};?i3CS#qaT>V%C`#Uh=Dy+igtN(Z`q)-u zvuIZQgl$U&lU!DHLwBi#q#?U_an|lQ{Z?g_Qc*&<|CB8-_(f8KCfu6s$gRi4#(*_O za$&2wJ8@4RbFr>Na?DC`1d9tXHAZ|e7Txq(2^JN?q?T}Yd5EcL&M8mENG9_sb{MpB zVg{^Jr{gG^#hLFmSqcHf;2kQEh|_l`!)~WD#Q+Y>7Y+c!iav`hboe3ZQTAju0HGzR zr+w=Y>2XSol$`*7x&xDuHnm~lhaMp2Ue5Vhb#)n5SWFzMZ`gZ&L1red#r!rr$)X+SVC0G__S7HYr(x8>MaevT~_;9h#-CYbe~_q6USTpi|w zqYEb(d<13ubz5)-*b^_-ExoW}lz32)^jaRmR=ha*kMYU4hy2GPE@Ke;EhuJSZ5KH% zzys766D|cDWY*Tig5b_LQi%hJ$fQ<>{7l(BUq$H0F(zW?MraDA85Um1kBLSg2d)4m z+PDuph@G2gC$`}JWNQ6QFw3E5|va;8?425PB2!dmmcMq^VTtB2hjK$lST}H z0po2>mDTaNu$a(Zuff$xTD|tn+^g*=Ukp+JLI7F2NxOJ{VH$w1Ta5F*vvF zrJUr5o=)H-R6+woUscr8J3%xWcwQ6kP3PpXbcdZ>oR~-*Ykvds@KnRC>naFtOQf6j z*CPd_2neT<8Sw>Z29q9^SS6O=_0DLpytstM6Kfi!u$LyKAq8e5Q($^13zUKsY~m)z zy}%|5xrt&gjhgFR_LaSd7cYKxYjfe`i8H<4a=X*s-g7#|-bx5TdI@OHw+tOb4D$eWE;mvgl$ z4OE6MyY0B%JVU+JEB&h9%c_^MS=7+}Bh21FXT#5O3w9+9l1}f4Go4m;!?cpQon?+1 zZ#p_i1hd4$M>ZCmW-^#+#9{D$l8B0S*|QL#OAkdD4Ir$l(G!b!27Z!WTLP z92ZSUY=8rqs5P_kl|2pxA_8`+jiwtc~#tR)d5nl?=PDwtlWTN*Oo{N-jnv^d~xeQj-(Lnz@K(NS5#us|ITh6r*8 z!{JRQPo8`15iLIiwM3))B5Bqs#QGB0WSXuF+g)!7X0yZ1uLN0}FR!?40DHIo<=uic zO&i7O=ELX4t7|tm8=ci7w~U4(W+H7=(5jbp8w#KJ?mK*oWekE%4Sgp2N)sv1(bDXOly#VM~p$pMEEZ3$`MP1g*+i4-XY)A#n|=4 z@}2}lbn{b}l(r8}$pV2XrAE?Z!o&b=E|L?1ye^o5B@d4i6PTEAhxle)52GgqQp7SK zF|2rbO~36yhmtRt&ml+k{^I1qc6FLoTkT4>7f;3r6cPK0K-9pkRu&f>pIt-95gAZ1 z2jAs81GL!*RA~zWptj@P2;MFe7vPQ^O(~jIs_8JwhH=6EA~u_19(ZA`Xoh*T<8hV} zxHzK9X-w zvJ1PdW;fkMJ0@?q?ey{h+}Cmn5&70g+;L21PLkQyINBJ1t%$jcL6D55QmbUME0j1* zk{2s0E7KqtrBRgT%~l6p6wJRz90yG0acE4ViCmRw0rVdP0f@~8tB~`20W;QLu$kg$ z7{Fg*uQWz=(8MgIi|hzL9dvdrirDAaN2O$x7zNB#IudS)7s zo3|!_*(+i?nld)QY%~J1DyeW@u;;eMqj8;6B$HH~VkU_=d9gHEURp|Gran8(u&6`= zL`|?OnS(H8dRo2j3XGDny16Nkz3-PwdGg9WmSK3bzx{973!ua<(^I86HeMWi;a z*Jj{A0BIAlCR`$Nm3JH@%VqDSKc8tY>to;U``zeonZkT@+@-%wSqZMKt(07X!CzoN#wiLo;A|7gr{TjeMSy(_P~L(F zZ0qtk$3#{d;Gi=O@c`RvI%_FU`yBMd-lAI3;RMo_*Z1p7EuWz;?G7i$s27rhcFkQ~ z=&T%DtRZ$??x&FN#9!$})7S;lj&`f3S7*a<9tDklTf*fUf>xFmL};M_CZ&5ewNf=076sYSy6JTMelH#c;V6O; z!{>sNa7IXXVP*M=irwjFGtrz^g>m+|OC? zMKPXoo-Et1u(}370;x@mvKi`JoF`~!@l)tYEG4vng6T)^paBt+Q{8$4hfiQ*iFm4k zmKO(~Of|I#iDonnKIXDP@ifP_@Lm;HUiN`7Cbv#!k<}Ib6)pW>8bIJ<8X8ohC;Ofc z+_O{AoI(yo?}7R(HR&l3+}i)8gqaU)iU2odu$Og|*_N2T|Nh`#TXJAjMaLLXy|Ku= zN?};F^}36gFQslTTzDkQ*nLq zYtxzc$yvj5%>8R#^BOx9+sIGfzbZArIQgSL`lAC`L%HKqa%}9|Lp|*)(0-4r!!yR@ zQS@LK3&O>|7u5whiM>Osq(wJ@{DIDAK!D~3Ea2qQy8sRCrqM~{Fa}adeF+9DS#%+x zn}8eY8YzHCa6p(2#ByGySd6X)1U_tXJZI9Xa|Q?}nK>}gj71d4AuP5x;oj%bBxyN~ zv_6G-EX9#&i1jXY^r@R&+QIN+K8hO6uJ}tjWJT610UoGI81x+F2Tzu{OlL_=r^P71 zx@Q54BEYO;(daE<*1++QGwbjcFcEyK_c65)&!P$9S$B+WuAsKkErQzY(Z@)sbNuM& zv5m&YB#ctW$NoYq8V|wQDvPCbl0coN8~nkjmPrjJ(lvQM4omHp#m1w1T1E>Ox7!`3c_xt(h8t z`c}Iq?tXz$geHH&%&_=_q+5-#X`w|EDzK3K8O(Gjdg=Fv?2E{<7N_IF=ApI&V>Cg% zL)!FA2~;oeO-b_%6ZurF+LpEvKSah9*tmrl1M=Ar31a=Dwng!PZjdIY#T)`#1XDV^hQX-6*Ioy`iLRU#klsr1u%L;c z1+&Re_nNGjYH(y&2dPb?Xm$0-rAto`7I0@Zs1IOLLi}89A|B@(O^zgIi)D%5LrY-; z*y5D#G8PW|%E9JC7)%kJb8fTKYz1LucgRUKUVm|Qcbl$YXBzUoGB(W|K&IqgmIntT zvMiXLRBU#HEdA#lWwC8Z$|7CQpI{wZ6X29Wa1i zhtC4%1lk-TUp#J+V902p!C_cPq{aXS5?PQFg~5S9%n}T|LI!}2APWSh4A24ckuW&u zUvPyOJJ5lU{qXG>K5*z|Q5mgm4JIj)2dILJ6O1&r%Awn&13xKD00;-oi-4`V5oU@x zZIG0Nan-hqLVVq8B$u{}5nHG@>LYhrp*T6Zl4=&BoG#>;vhxU3VwaVR#h>KzHX0|5 zqerUkPUZ4WrRO`;Cb1xAi5G{}aR?kRC)IW)$%S1vXrP2rL|F420+KamG_?Dcjy2eg zB)!QBCJ?a1F6kyJFDRN)fsML*^U-*B;6$@z8pG0Qc3TKXYb_+DSZ_zJ9dKL+GGK#ZF!%2Wkrzae#MdNPad< z)EjK0#veg{c0k5b#mgD+6;q5&+Z8HXPEuV%S&(f&%@u=@Z(z32JrFeWs8 z7vl=9$40+d#Bnjw$eaxZXc)jml5~D;?bvY08S4!gXC`0vB~TQ|7pKX_5H$|nuPo0Y zS?rg}^kP%`eINdo;jM!(3=K5gz;w*ap#@ZD`#HRvPNz>bwz}P!(JeNX0nOM^TGl}s zaFq80DVKSwzV@%uT{`yP9Q;da2NJvzWqp19VDP7(ze+W5pe^9ll+=Cs>Uy4K03kks zSO~NlZF~3}v^TW5(WRgZi`-|RvkVu{8teKdyLGb4%ouM05GpY|3rKauW;1vovfl$T zAu$v+TwoSHgl7QP8U_fQp$bfJILkqRl72Bocbx?aR%0gBlZ$NB!axk$z}TKeurv%Q zF2>?vWVoH)$c+%+001BWNkl8iKN*fqvCIbL^Qq(wU#ABW)X0S)#PwxaE03`@v z?+oEMusJJh!h7b4H^MFt1fN5yWCgE{|K%HbQ_} z>9)KH*|MU7?d#;DVA3jT$bB(TM-^cjpH}j`#sH1W8H_7lY9fXn=b$UeBGI5#eTrkk zJk5d~?i`a1YYQ4(a7|zoOsn-tI%RDJ?z1P3DE)Q|eOV?4%w)0*ql_$=gwxDFnmLff z&_%#&W_O8AVTYsXqAAmIgp4%EtPGhDL`6Vycga`EG*AZO_|OlPz#i1_$j?4-*W0VE zD~QAtVnF}OYtC)45B$-lfn*ZE(qV#Xw|p(8pyaXNnXzjkWW^%NA|ibtCh__aA@L8hUAH&^0>V%BsK6?k*iWwQ%I<%F=49wM5JK{Z;l1#>r?h-G2DKd$%t= zvb*`@V3dpoQ8;0p?F0;Gw#-l=%+DAPY1TWgU-4PJ*0Nz#*9ptXcEq4W0fJ>*qqWpN zvFILITKKtNzt_q+zXDP7o8SEA^4q@_98~^%&EvkdIj-kiFQ89IiPY$Rl3Na*{uLI)qj@t0yB@BkstSkdSa#fK*&mW*qpmF=SsDN=2L|)!2=y zekVs8ZMkKIHM{gFOuUdVh?fvJzRrB((7Pdfc;}^4yaNPj0UkPfkTa+ zB@B7K9y@64K?4DqAW_kPK?W|SSumcq#5YHK1*LV)oN8bjXIu@#m;=O-G@wqy<^gv) z#Yh=7in&S`#(t3{yW11^^62_NfU|IEd0rZ_=L*TfbQA=@65v5md>2tcEbC_Cw&yi= zSV&Pu{1Zm6baGgP!9bT%m4R8RmvxpT>}pZ9pfoWd#tBR7&7wHR!X1r>fJe=P+&D}~ z5}h7R%V@eoonywwXOkM#u_lRR8qjup2+T3`tw>X9|5_Rvv{dKeNA655;vlLonM?gj zeFOVzQnxj8$Nsyg{+AhNkKry!Fvt1cbo|8jVApl2aA_GWE-ns6L!g$bqmtV2#Tsr1 znrI%>H>-!krff9)PCH4a$e8ytx0t*Cbfdo(Os@@5_q{HS>!2B>3u**TBj9*V&R27?xTxN3nKjCrsE?h!wXH>52g$BM#cA7+8_;tz6UGC)LO}c5Vk{pmy$dymr6aTUuRSX*XKPUb%a@~xQGOfkl(?N~HDQ$6~)SW9J2 zg!w}gbE&26T(3VYcqGoD!!QHU+iB|Ii7@`8(}a@?XHHg zuEghlhZR76l-d5~-ST1Q1ExLA-Y(`=q)-WV-_RHm?O&NKF7k@8Vp&OiCT^|+Iob-b zDVz6#`vY}SK3WGUP?Owktg?7G4uqT!fV;3_K*hWIvi=9&UeA-^6LWq;n8MK-4W{hb z9`9_8H@40{^!T|)9u3&IKMOZDpV+y4e&eCf4K6<5v^w=J!fn*WPzrF)Z3ig3u|qQo z^B~S9L5x*!65QAsPNEP)07FJLn<>$%TVOz9ez(5V_pwancKX*V5?}LF3V-!Se@#4n zWnWZ&>=iyfOki4{L1&n}1|9%k7VOdp1W{99AC(M-rbv59dNsVc0B|kwA$^(08Ps-+ z;!Dp>63BSa1|>KS*(0#bIB_8O&)PYC<;ekj@$%t79Kubb-G4f;RWl@}@gYF=# zYfw6F`p~D4@f17P?p3m_CRL1}K`nq3~ z+)R&fO8`pFtAgVpFr*HdC(y{iawyC9fE5GF39QUPZ02#1GV!D+2>NtrEJ7;*P6vXgN&_J(2`GTdmafzWOD0CzO* zQ37ENfMgO{9CaOV96V(<2lTMbgAXeSr0_BJ^cx=1VkyoLQiF`QY^S39aH`}OV!D~; zR*}WQhhxJMzybvfA2yBA(5xA0G~~F%(lU?k1M*ljOn0h)W4WJe?(27@Oj!IX2ckfbzQeleKF!EATRphCT)f-NsbImt4L z(|pWA7;0)b0gqTI%^0ezuWKCU#u)Ih#16MY<+nvD%SrTWJr6Cs{nG2*U-`;c^6DcW z`N;JG{H^;_y@!@_-V=A3@BC+$O|!?xC(!BRXN1^hMK7gfIz9G_-73OZfIuU3mbo=# zdSdLDVQHaX+?NW{KPChCH5{!&ndL031wXeAEHK1hn}02m63jAr4U4Xa0$1^o*d+*b|muGnj+E$pR7yjemAh6~h>f z&jxT&XRJ2Z*P~Lx5TAw(_Bz2%K|5%gBpf<|2ThgB-=-oki_k|$02d1!4wN=z&ld`vn8ZA(r$p3hQJRrMPv*9LHcUf zPeCFq0^X=1!#^UCt*2)ZZVgHBKxFwSt?=B{!Da)V8HJhGT4hF_anyV~O)F3w+0M=sT~hin*7%GOCzGl^l^W;qeAarr9U3{myZO)t?_Oy%3}uPUUXh@+3=+UvaAY%+#&h|_H&?3urOP8$o53`J)WQ5VTP@vs(26IsaEEI5JHT{h%p?%z!`*<_ z>DV=CoWU?e)v1U$fDesumfmz34&tB%SvbavT{h9sF`;gxnl)df zFSqde;Okt_yLaDxH!nZ-v5zrlUnkVxvbX(~`7fHUQ)(yl@>1REe8{xi*$?nhOB+YTajE zk`1&<2Bis8f&EH4&cmr8RwWHYmh4@cvOft$A7%nHBQ=Qu`y_yw0&R0uSFdTw5Td^y z!XQFHACRoV!@yh)`*#8~4%wM6Y!Jf%GzACZMAjq$OQ4Mv4<ZAbm z*%QVAVURGj2+6{9%qO$aiXlv2gQY{e`1RT#il>)17W)0c?hZA{XBh!1>={Z8z)JH9 zng~fijx?R4&J05abrf2G_GPr#ZeSVcv=kF52(R|i+K@Ba1oQGidKgjj+nW?m>iO9V%dx87A3K=)C;BvGkh()h$CLu9vg?uNykJeF>Wq) znG6o(GGr}4R~LmTzq)p$+h_p{V>ZQw0i`;+y0)>k1+fpQ0so8DCCiQ^if+B_Hg>&| zhIAHmmM4Ubb{eaL8pTsB4pourrtG_z16*aye{)&K{Jku*MN&fHP$y%L-RAcB<(2hn zt;1HZ6gx@LkZuFdS{v4|HO0D)<>yrwDO;q50mwz-B*kUZv~J^}n|-u*BHEG=vMh-W zi9bHJMQl3wA9Mh(HgtIh?!oc$@dgfp5!kYik1j5M?%_?;5un*R?Isl1?l5gIYCS3> z4RRe0(d5t?#27(39kMwjjwY->>1W89WOrK&P#QwZdJ!BVIYAQsi8d8c$f}^t%9dAI z(ra@@g>;CKyv>*J%PstT+yn0K{oe1jJ~-a{-uE7O`}g)ZU&&>rH~viZr1kZ6?y?n3 zN7r&*wWwW`a8!hFnhXGJMuWJ(z>Ze#a7Ac8N$?o^BD4x7U5P8{WCf&9o?$s;GG&iD z|Cka`xm0J=4C49lcHk0VtQ;jxxWhX<`GWn0Tj2nx zI`f1W;xs<$7i^T|^ghG=5vC1em=|mnB}<26p8zaKRL;fP8BfPhi-26sZ@Iudry`AD zXf%E89WvTOPOF`4@6<+PEh{KQmb1-DvIw+G5XQoirhFL8(PzMWsuvL72uQK6-1T7W z2&~|G!Hoy$RDcSGGa)P`<8As8TL#ET)CssxfFuAxp z@;L+s%DrA&?)EU&(@30-*FtND0We9D$G5kS^cS`$DqIt6P$QU-P5fCf9MQWCC0k(; zObWCh`=_X2svjGgj1VSo;GJ@4nyz6*v@>L*vh4n_AW-8#(`g&DI8|c87)(clh03nb zlt43l9^tu!(hNCPL1J+rR@d0m0Hd`y%Md;8lp6p-86g{JOMh7`w|NBuDP_h0xJytOH3&pUt8VX-OX!~^D`A{6D_au z6czy%zP)C%b7Ym4od8^uDZP9`i;GhLfw?i&=cOmjcI!~R-uuy1ge1ZL@vPbn2V;EBKWdF97ryvDb$b< zhmi%T)vPY9Hb&cUMQO5{??Gl%u<*EkWPu|tyJ+mR{IW>o{^b__dCz;^fhxJ{uDibN z+rDky^VF$R?|kPw@%f$K`JMajyKny0-@2P`;SIgo7hBk-?T+1XF3w_xNX7d#C zaz+ju9PQ)V5Dqy>(hN10++q`k}qqwmCnF$bnQWDT2k|i&4gY68|VOngmGsf@>gfNB_QB-GbFYA)Vid!99 zk1Y)EG#nk`DjH0d-^>yny*UV09;Cz}y(5fsQUpzDIaci93NiOFwbZ4}!K?sxL0rVD zR9A5XI|H}q>U@{QeuTkZS*iz!rBp*@ieJPb1LLU&TgmUjredP?IPcH_{efEt`lg*{ zPY#9%pgc53r{s*eHbfe;VGyB&GY&Ao4+{m8KVsd0s6ag2o3*7Hl0X^&FSbyDc#uDQ z2ts-AT3Am}VG!`YQg1gsHc$~JVQT<)O%n`1E~;N?LUnS-i_=sZP0uRY*3q-0hDo5x z?mXgvjI$ubgpQ#V*sCQ3V&j~v)ei+jaL!btZnO_g3c;KKVSvDyT$Gj4Gdy%DYjGIY z9(_vCt1pG*V&K#3M3TU`Ln_4i>{!&N`Ia#d+UjAYN%(N zzfH~FZ2<0NrUx8lBG%vDsY9ETjXoddiVt1lP>LSV!5^#vH*i~sInIl&2{jIL zkI}a~U=^!#F-5g&eJSoM{SDK0LJ9i+7}62q9{VHR_7aM9P%YKzDBRrG4!3uh17H-0 zky8^5cKK4&(usS>YSc=s;i_(HH;lWz&gzNfrPYTo9fDx%Nh}jP-X(39H6jG=m z6-O5GhD9SWD`BOYL7!uUs~ZAoj1&1ty^>yzkWi``+KHdBor=i-j*LQ*2y9=dP(qN9 z1T$zcLYi~XHmxrnE#Be>i-0AxEa5_+wi-?G{ftdVhAABci73#-qy)ljnzCDZ}}8kb3pxd!nO zQwh@s$`u$;lWHAvPw2E8R0Ao~hhZjB1Tkm`!}@a)#!`9WTWS#3+V*OXcPHg0ocCzF zGdjA)%!R?C8mb2=6f^S7S_P|Y)4YChcY8T^K(OI>Tu0r69aZeuN+LKVAwqHF0it%q z+aU{dt-v@8Enql+J-#sJsrM<0pJK>V5Yz&)OlSHOW+W}zX1!J`1d0ikMIjRfq!m;= z(=dudOtT8u$SVLJ~BN8dvzm}Z>y z*u+jvcXgTBW>@E~C5!z&)78et248q&<;as;Se+QsiC31Eu{Q#J!iVt#>*@0d5q7t? z(Q2*NeF=4$_{7{mG@>51x3<_T6=k5`P#QZ4@o0;6brH+5?m74@iaKExIvau+(tMA-juaTw1qjIaxKSYl!^uOY-_r z_0IPF`h4d*--*u~&wCop*nfk^^2OTBrO@NiW5#+BPM3vPAJ|}}l}HYRI9NxFRCjxz zmAHp-M2(6YQE^P6vid}M8z1Z2UUgC{co`DkW;>A+(yw|(q#Vjyn{n3GH!hqzySTh! zXXxhk4(3LP`4wBqMn=)w&=D3t+YS=`XOu3YB@z)FX1WN@AeEyGu*4hk1N6VM+Ugq^ zaby`Eovf<>mTXvEeb05F$*U(85sYQ0ed^SiJ(hz#=g|`(;uA#x2-VjC9*!0&)Hn<- z7t*bbOc9y#te|Z+2IxM$iVXOr$B-*?C#p5lkn!a*lsTi{bGVHu7OXGuBDo*zx|1h- z0x}-d=fd^Sq{n)!6w}I$kb)!DJ`;{G5zs8tRBeVED7dk-g=fbR4p{Zg&gN4mXUY%Dr;dSZNYW258D zOBKtREhH7~NZZRtC4AJ)N20&(b-h);-M#-pqC$5!wpNLtvr}jG`)0Q`R=1t%u-TfK znO=87P^TN0KmAhr)`d<^ZSv0F;Zw7Du=L*1Bef>o`uq+>)S5$v2j-IwMDDr!u*3`J zW>**2#4Fj!z-6CyR+jlQWO2pM%_L|v8>b(co4RnaF*#!&N^@d-tT{e5F*O`lg^|Y8 zndXTLm)`TiZ~LzA+i$O5e)a2r_pkqrtFOL+fY^l2t>5l&pffhIfBxLW$jphUlc&a} z&!4zB_pmB`gO$I(?Z5h~zj{C7OT0hlyOi>+wWvOoKKK9J+??<2_KxFDTtrbz1K<=r za7+_ADq0pK+^1-^6k|RCYd$1`oGcfSoSlTW9SC5TIm80%Q8FB^G8@*pv}c_F4L+KR zfEf72=xh4KRAFJ2zRL$6&|7tQHhQJ-+7>yLNwyJXuNFFE#zU4kz$<||8qqj#!a2w4 z0rtecb}_P1`G;AIM#90S-0oXD{>7X}vw;tw(uwM#Sbfd2W`iRjdm%z{h-}1|;5Yh` zy`W^9M3dJYT0|d>S5*od9B z4n#b#L09YTUFDb@e;dcHIFXf1Am;Gs*gRW<+Hzmx7doLQW?$9d?*5K&zJzi4C*nPP@Z6+M3}QTR}+|?#xe2*)6qhelyslrcqw`R511J^A6}KL%n+2Y+?*bn8}AeEU2sv3s}oA`kX*!QB^D z^+LT>RXT1xFj2Z}v(u9u2l1@2IuX3hAiytpAkC$X`uM?v6DLoceeBV#p`odv=GerH zJ<<&-o$1+r=rcA!aa&l#fvpWDDyGEo=RW*H|Md&s{|@WpZ|=&C)+u{>&t00Decao9x;1}TJs(#2-UsWo8B#Bo^U;Yybct07*naRPk$zx;^iWrIinDW^aZ-e0_3u=0c+}WtBs8V32@<7%g590Y_3f z_jY>T!?8w_Q+9L-u|CRndrmctw(Wg;lhe~G>r{feLN`OjjdCLl3H=U22nSnuYb_??5h&NC8!k!gs_3`P-X zWzTTjEjITK#EguaPIx+8F}^VBY-COOP;6vq%7p2IfX@6H9NJ@MAiu*tn+tfRYj7-` z=nKVqv`^%lLH=N)!ds$VgP8ihyiOd3zMXX^E{*ICkUe%lyxwC@SiZ9~F+I(^Y|E~= z5u?qi!<9A=r=}cd2sQ6__7_@PUbwZ{X@!60KE&;8KoWPSjjf&8saXbFpsRD8|CoqF z9FzC=>_=-b!B>TT5rU= zApK=(?as^q*)7wIqHlX=`^Jr%*c*H0W~XPC))KHzC8B4fqw+fMt*`DD*nMNIOnqbb z)!mosF1=LmcJp|)R>pUjwzn7Ft#&rY0f(oadaAz6HPERl;|dxz9slS8*L+VR7^*3w zqwlxYA%p3PeIqN|TSHeV_y=+K-1)PQKK0~ib8PCw3}e>BA{f*<(;xEx* z8YUjU1UY=CW;kthv%T@d|LR8_a`D+uelkA9ScIXWJGWPxQ+I~PPLdv2YQ~#qd#m)# zR=&3Gp6?46E?`zZ_OXvuJ1tx8M?d;eiM=nn=aJv7pY;{JFVgefPVT#SP9cuVlX&vXPBuytXM?$R(J- zU7LUS7@nP(cFI+}N;I40G(F~^f>C7yU7R>9isVuZ&+$`K+hI(7j%c zR;Ht=R_0=6YgB8&|ELoO4fE>e=4^BP@{Q|HKK8hy5MI4~NBowxwWYa7&QFU#)Y-LP z0ZGQqJbCfbR=e}&?c0khOLRv$KVWq=f+ojU9hL$I2n6=&a_C|6ajuJL>y-i>yIU$; z`Y6z^2KRi*k~m6B+e!;1x~{is7uWBBjjj2Ot)=OS_n(-ZX|*=bo_=I;X^DPvbaaBl zetD$!k!PcK@4!e zC;k4PvdLW2+xU)l;Z014^dL@Yzi*>Wa6fha?3qU%wcX_W#Yd-SXPiPjHG7I*wJ;=8 z(n(RS9iH&@qNYtKCQ%+&bsr+)QQ*f=M1FDZ!pNNg{I8W$T7Nl%Yp@cYC%#|hU2&k7_2fONc}L;T63z z)hFgYyo{dMykKD6rsft4x7bNDO+ql>cQL#2n~!&wIz#Eswll59G%a`uAUACN0B#h6 zID8N!t1Si04<+!5X9mYRoW7X)4%bC-LwZoN5{}Dd%5cmU)sD!EJo&UA6#N^vICCUq<^Q~+0yCR04(%~W1{#IF5kU`!7egffHF%u3k`Mh z;)o8$*<8SZQIrMcWk42GGZRGn33+kyG3K7tFP%}_&{$K{11;GhMinrk2}rTFUzti_ zN;oPN6pq%Ays|mCLk@lF{Dnmpl7XT5jSViYkDWfXetTtVd}4cd1>?Bd+R`7t_FJER z=BZ~iz>z7sj1QFFpw)3S5d9>2?~RBkl0P{ywYaztSwl@t2{WuzA{Ea^Ewm_gslUs& z>+Vm_)kkV#X~xFUDrC)S9I&(xth}ZR4uGhubN)-OFx{Oo2$3$H>~&RO@x3_>fL+NyNL@6t2P+& z$7gFR`rzmcX#l3Dr!G8p5i1Wy^zq5l=T4qJJ27)chb&yX`svSoVQFO%N%-ME{AW&_ zzG%{HZLGD|=R56H%hvkRGh!t*Cng_%{E5r2zn0Y>88JIcgznkjZSC#e>Q<@N^P8=F zZ`*(0ueC)hx-C*4KWnYJiBd8`_l;3ELqtNE3N=2|Q2RVd4zW(Ijiue)~^2cq`Y7nQ|Up}0oM2lApFGlR>sh>he#{|U>x&I8*81B z@wVx7%<=;!QF~);Nj&f;o>H4*eL|fv%G!j-(mS}hbFeO?%-+HJ&Tf?T_@cuBsv!y* z11?0dP(1M@S2v6tMDZtM}8gGcmlz z&osMQW%HymC~Z8M38@z$}GhmUDSV4gmfp;i-zsMV9u^KVp7owR?)n< zytKUD(v51gYV+-Y5D~j$B8wtU{rz8m>kTH}sj2Y`XV0+GWTuwsIyEWSQS1#D&Yshr zOXn|~KXsbD1nErE%KOT&S zXACk@B!qIO-I|)56y||!Q6BN7@NR+TiEEYZ{i`Xy>z{Y^USw(=mr$!w5{|y)d|RC@ z=s%R=NDTmOhz$gS-A;Bf>`r}c;wQf;NG!xv!_o^%ubFp z8YfOae(J)rc$3$^`~^|2pLynyfxWdGm%sFzANw1>^^1Sg+GsYX7;j6m%3Hz*7F;$e76<|L~_WD3TEHTc@6RZ)afa z#FaN@x0i+*LgDbrX@DpS>cA@dGX>coH~dw*zHq)ff;-qJf;6x*^9qI6{4>F*ZK5NM zc59PXoC0BWYmJIOWT1bywY>o)^|;PwP*7`ufT*6i?J#o;Oq`y2?%CbOaObmM*;rek z@!i1KgePQiK*ZuOV<*|z2y1jyBS6jA=rwS!dZ7{nv5IG_e-Yuli-)rU`lGr*5MgvY zSPY|yphkvQ08m;bC5u`G)md^XwGeaPaHCR!Ud+Pxg`sl=o z^UKTEzx3NJjDnW6))u&7t*+dL_i@%;Jo_uqO~Q@*tp z)u&YK2=Q3}w%Yt4;UI_^C~!}c8v`^46I`SVTMU8+djf3nq3j6!#9CMm7_xlgXhXdm zaE?=5I8dxTX`0Vpr3CQDgMtdc3aW`n|1dxp2GAP_;tU!%2_6ca25HTUqDz1pIf-%L za5M})@s@FZKTOP$vH>bNQdte-y58JP>CicytVyH zht3*pWCJM*wYBT`K5|5qrAp3v=0UtYJpRc?pICX}ePb(|zwom^f9i$jPB=LIJDDNf1ywzIan*4f7UH$|-EqbYiXIK`Zp`Uf{VI}RbDbI}4@Psk0UBSUANd-mc_ z{K(S6^2%3U?`si>(68_~@H@(v=+dDQ*hRBTTL$d3^70W}Gn=Q*Lwkkhcdz)&MoKYi zI?wQcat?y(petdu2hnU&9y$Q^40rTpk%dA4d_!%V*MQ)*dS4kCJA+Ulop=y|DfA~o zK>h>zz(qCX32`g-_!Qy+J2w;`xG#=6p#_CL1llvHidG3xQo0#r+G&R31gs${ID6(` zlhnGHcxF-+(M$x;17x7jy!6EnKL5fCPd)Sc zmCL)?HIlGv*&ArQ0DW`(sVAQN)aO1M%Y=zUBbCR~XDU!Ge5b&YQZLG#qZHTmRw`UR z-Ji9D`qQ1m)m8pEcmUC+?W|}{PF-{)j-3U~@#ezqTQs1hs9KH*R?*oT>!-JTDP8P# z;jf#mo4K3+==q2JQ?0W1-<1wT?z#K0L=jT#85v~!q5&*E0(im4pO|w7#fdYgFFo<( z^wiYE^z6w~PmeSwKl|~YfAJIl=+&=%?dtVAs{%=P_U`Pio|u|>{{8PCnVmj!@r;gJ zU0YsXUtgG?H@C4$*_}JEcXIaJTW`G{8z5C(r?auNvN<{Vuqu6nmA}8?HN{k}7-~O< zx%#kd??(E!)}s29`rJL)d}Fhdy|FB8!rk=S?lT_fw0IftV#*SYipMu|AJr!XuT!l@ zkoT{QI&+L`GS_%Xl_cTkA&#zZswsE60Hm7kW@P8@3~S`-V*u!wHRR}s7fgP?2R zz^ulek|zdt4#e719&4djI|j=qg|K;2VP{4Mx?u$WA0h!VlMS;}7Eo<-FAN0)#Oz`s zVs?ZK@QaC}Zy;WH+)Pq&j-WPXk1?}uFK_M%ye*i4YVuLiY<9Ju7%YyDTQul?0|7Z(?E+sWS{ww$MGo9mw#tXkv{t!r1P~?%U6;p(+sl6rsPnePN*M*q+mRi*P z--`9A73kirC3I`jO|Lm?f%2$Ta-KQk1o#tR!R^m{<})=nL-#jzB=_#-k_|DbeKFrt zB#t(QpL*uWljqKzJAckrDb1ZZasK>cPk-%m|MVCC&%gA_tFJDt>UTsh znLqdEKKiGA;^c+1)Rp#0v{skz+`hHGy1Ko!Eiw}EZjFgXczj-qYJVz1MHP`6j+Z3T=u0>Am$XT}Pc>csOJ64lSbFsTJrQBZ=LU z&BFuNOyd)$qT3DywivAFm|ro1s3-^&;K>grOAdeZGwmExWln_8!g-Okg&;Rs_-Nzy zu$iJMSbMbdmLuzBM?Bt8!f=1^kf9YDWgjmFPr#%pXK>qwg@vU2P3*-e2U3ABkDkCq zM(?-lRowP*vinX%iFc4`>2M?HMjjUl2Zjoktp!ZB+em>=YM1~ojKP!|hyZ1U7X%MW zNQKtcwi78RZ$$I3;Mjwx9oR>M-z=F2od&F(7=M0r=KG)A7+n1Pj%d3#Z%?0odWv|| zzdJnHT))XY8 znt2y4UO;O4Hm8PGg$mzWxPF}mJg6F6q&uUgQlIF`ASIwICm3);A}8tY__k$>LD?zg ze$;G&?Kp&X#0g&%DM+Th7rHN7nwb@KAW6^@L_URhftkR_pLfA#pbV2qD%t5Als1tJ zr<@_WE_nlaKHiAA_8y8QzE-L!$^Yhnc2v-JSsw|0502B(cQ%0h=DM>#4_fQ%Ym3Wm z1VI$Kwe?++x*pORf1Ks+ze`I?H*Vax z`y`EaD)e=ojkVF)InGPPNAe z1S$zd1DI$Y)QikeLYYNP9AJknz$N;eY$LXMW8IM&Eki7jTYFoS`z*Z>HZ_M_F$UOT z08DJow@GX4!iBSg&SUxf7xr5lQ?{OBly`PFmRDES*66004Zt}h@FJvwCB#x?&5bJ) zt(Blof&$VYB&dF3e1a<+td`oMMezkx#bRi%lunKR_Lb{bmX{rGs}s0~w?uPJO`R6N zybzW+c2`@64i8>=^UCerjssE~Gt>3~?+o=ZyQ4r0*RHn`Lp0dSk_)>nus|wfNQkI^ z83t6%LF&4|kyv6>I4tInqAW04czsWeP#ehD*_We&s(j$lwizYTZZ;v%qh{0Xa#eqfrA?M$QS=7m)BVlNG_!#ngd5<~%h zFF1PERFM{?OT-QuwQRbe!20^lTQdzCHkwT3_?;&&Ua+6JX~P;_&Dg*JTQ4y$bx2jb z?b9!RX==1F_vqtGE32mc%*=`9rBw`&ou60dZ$0<;Glu*0!>_R5sFLSu!FT@D3`ecI zFKhSl-{GR_1MhqMn@+%3c!pqxmo#wxXOYI5Ko8%IaZZ`Dx2|0NTmQ%Z{*{-${OIGC zKKOwTJo?1kGta*;d+MwSyEuQ%*#!F?&TH!{woPwsFE6g5I;)GDw{I;v8-=mz?CFV% zkDdGKm)G9BwtQV!W>IPfhqpGmWb&J?^8+6Mj}J_j_zt%o_Q>x`dU&q6xjEm9%UeV) zQ`{~IyUwjoRM+z3iOHoe&V(fvIyrN4a@wXIEE0}b=wvB4NdIE-Y?g}yZC`(**)(@4 z?SLK)O2L|NV#4B?!qhLOwYyot@svSbsByxz2j@Hq!NVv<34=THiQ+x6V4Q537-=#= zRe@tDga^2_$ie+1Os(~WMJj5C*a*WE~r9xgl}F3Dey-u)euHKGwj@3)g;ob@|PuB?s$fV_}>R z56U6!dNkHon-2w_(4Vwjwq31Vy~Fhf(Vdw*-P+$>Tx)sJ;;ozOOUugF#&kj^VkC|H zgfH1ir#Hg3BRo3Gs4=IKw-RkX*doYD0rLUTheo(*@qsm!se3*ss)FlaS0Wu?%;a9hC!3mA12Dy}|!#LL{Ca(jp zXs^Uf0b?5GKLf26z6-+1!e`BRfqga;>|{hNRMqkrrF z`DaUX!;W00C5b$d&QZFbwx>*`LOCztgnZz>-*hN}PfU#7ymjryo!hpBw|t>40nQjLHDOEXHE=)}2> zSTzu4#KGk(n;2dT&k@_y=++s)GAXTN{fawdS_B_9THwcRbb@qZxZBV#Ksf}nmgx>~ zV8YcJDu8cQMjubCE+#;LV$yl3Rc)bT_5;#b=4gzf0El8e8;|Hxz!vOE05njQ0I6a9 zf^I+{?#os`n_kS6tOoJCC^ZHBh)Aw2N`-qC-73-o=Sz_{6N=5I5I#askzhb^VYVHf zeq`v$CpWjYZhY~@;hWcO8er30rS|4dd}DreWv$bofLxU`bQUqeXGy9fR!l1{XQAmh2tEgDK^|Wk0W=bH#W88eJ3IG5g07*na zR0_!Sa6>HW@-h|XRa5S#%Y)En1jd?9C4MiS@+t^bUg}#!PA^E#l$j?h1qcgq_Y<~X zugVn)k(_xVnZ31K8$Yv4igwW(J~BJ~eJ?yWGd3{EZD62(bECbqxw*EZ+q@Ju^AQ?7nfTbep(k33|jnX_jZ<6TRa+U7NsK7v_emfb7)wpU9F^VKYJ^j z&M7JN!gZ;0zUxIEALyGcB&4HGr9bsp>9jmsKQ%MzQZIbh_tu~C)Rf*=OO&UZ;i#aV zf4aBszsQ4S`Sek?N602gi{reSNX~P`5tH^&|F~5XDVHg=Ya*?2Z%*g*fE0gWUdq@# z{p7{77tTNO=wpvQ{)BMJzx~onSKhk$)|)qP-Ml{16h?jQ{KZG7rl(9^iyO!J|9$fF zpZ?^hceggDnjlEkXoI8OSzcVadgTUj_mx+!&fi(JJkow$iE|C5*uTEI`@kxFBb9%k z9)D_T>dqa}?%wu!`st_N_WNDAJ9hB#RVNhw*`nBaMvrDi6Q$Csj3^%#N4YfrR5QUspOWWh6wqltc2i*I- z9py>7X*GB-JbCri#jiZMwYc2>)mOHtq2f>6H*)9l%EFC7ZmQbQKfSfT%Ylv}23F@4 z6ge$ezO|7pkt&N_T-aLEq+R*OTUwd~xRywKh>S?ZQdk&|+fic?`H7y2 z+@nvj1uRM%Iv$W41rhk>FfI#EPxEK5BQ$AL9)hhB%Z4O5vuDL2djr02gG=@5$%kD~T( zzxh_@!ykD6Q;%Q1eq(f``N+iBTg}mx&9pS#oYL6nnFfSj8vfjiFa7BEeuTjmd#M#5 zzD0>(dvT{@sgo7XojZH&`gP<1DaVWj3xH&5+^`t8--k31glzWS)Ij&JuCa-4SbZyvFKV_|_^ z;Q^n@F9$ci0q@My=O-0G8K5%pj*MP>^ip$t;&Y#Q@iU+N%$sk%e&Q7W%oBg% zKm8A%e*W3%nG^J>tbND{QDA#_>&Yk1ZMGi&^2@JWzTUPcneoqj#+jhnqeB8#5xf#E zdzw@}fF-kOksTzi919DJUi}T$^ZuOow>dyR{%(JNQ$4RTwe9sO zKaXlj+3yf*qhKVk40^X42YJF`5G4Rngab*S8MYFjT@?1{9wZy$57G#%} z3`FBtFn#tcKkJo$`mpt{%!2sg5v@l+k^`na6Bxj1L5J|yYQ}lc_Ne$qW1q3?BP@YI zvS=hS*|QbPA8^cOO{{A?vIP@PluR0_Q66pz4GctklX)MPL>eGla^iKALY$};Un9^> z^HKuVdqoh5MA^^Be?lmm`Nfq_|JuRY#$ad7@wkm(QD0|sqmT_nVkZGjAE)-Q#Egg| zPPkyf%Z3L76^HxH=`sDt!9ZOYc!?%9H>nl{4VHwB4zb{j!Mz9^v+J(&O)RH}>pb)$ zmEGUlXld38-ZwlqHo3XhUPE8(p0y1joUX>|+9+EzM}>o) zu1OVWh+B5(>hipK$1!8f=%Sa$C5vW1A7i0i2PmX9Wtd1p!iv$*v6$)Ylo`NJSLoYP zaCC6q%gc)dm}5g~pWlVT9nWSPzZ;wFo zJAZ0x<&#+hE0;n_YM3x(KP_>=MORbYEwf&9AMbsW#BR0+rq>Mh*$3vVPj$=bUL2KH z&49f{*K6rOO zqUG%Kjh5Xq>+7A{Hy19y_13Lh^Bw2Jm03JJGqtj^Xp*7V&;pxcF<}myBaNBK@u%lb zO`n)rxU+Qa*6Q}64J!K&tI{`E`THC0U=MA%c=2Mj)6(!em7FSwHDQ< z)F+5PH#g_Igc3COL1!dxVzDI*r_N6C8yw}g2y=mm?}@4DmG#!e^JlMKzup*XI&uT< zLvy>-McoAwv}|mukPv^GO-6J+&LB0Hx&nh$80hdexP7HvyD3^k1@yp3N)CxQA?H+;=3PvZqCER!RE~OCs zwa`w$8cB*Lpe?)hBUrj7B!e>7AEgJ(S+lQQ!Nn6LRY0suZ^pUP94N<80pjbgmncJd z8Pz?}LE8=-yMbwpX>bjzzq>awKKAs~%xzm;sVo~#cs|^8#>k+Jv<+B&XKk6U23ylw zds$DYd=yqr9`|%)p2Z!kkLjTg%2|!qD)};J$z`S>ITE z-JyS7mz5rjiED}=R-zA(9vmQ`{TMHMqTpl>x7v&EXdF3Vb6V#lM-)0yPI;k$&>Z(# zh&bXJti?m6w<-OjptqbO;ZWY_8hgABc)H&G$f<9+Ooa(AaEZ=G3Mg>tu0T4@Wl`4( zIwd_LROUuV7Rl0(`|@UlS2nzY-!4rUB-T(;6$(_45l{2|H#EY}>GJB*Z+`u?z4qqr z{0c7NaTo@+bKlVqz_}PCxJhC^wy*)L8AsxPP=g#cx z3|su|_VVJ!T7mak&rmLv0D@LY54+>`y zs&LQ8i!|S-UPPyQoI|?A+B5YPzI#7@x|=E0kf! zwJSIAH)YEpKt~=rHs20R>Mwrm&hnOtP^y_GbnEH*{=^4XzT1l43&{R~4}74T0{1KQcT?WI z3*Gy`diEx|?pC0;ncblY;@3=LQ)j~!BA%8(aghve4fG>lcx{RF(Rfz*dA-`LzOuT` zJj<6Qp=pMO1bZJD8^ahzciW#?80aXwIhA8Ok31}awKj#7%*-llH*8rDBoqMqnQ4c5 zqZTyC3Ua6xl8$c!f?1RS79W(w)~U=-x(T=1gRw+PX*#5{6R6o1pjkt~0$?gT& zyAwJQR-Yx9Qq~_xgRrWd!XQ54<5ZIo{ybu)cUThXsYa+tkf;%k>UR8!zeCGItRPT0 z(S;{}46=Mx)H5E0__v|KB>`S^gqIeYLfl+&j4d614h3>FdP0T?14|F47g#OAw4k2| zlux2iB+`o=TUIHwU0A%M3ey6CAM87J3dZH4vrQC36e+mEr`tc4zD)Qah^fy*^)e_K z8(42JVRQl+@)i|N1EsVbX}^yv>cGgD^S+~x*KrXqG9IB^NkSf&utm$Thb+gPlu>Xm zonOqko-ruQqBLs!dRgb=Z5#VQR5uz5aYE4*S!co#{*=nWg9101JjcM4SCn5zJVBbH zEtxMUhv|}5DOLmNAtjO~h1xYybz~B4Dd;$*xNm7|`@%Ge%UOSOrL{FUHvWSj`p%Dk z@>7H`)^FuSu3^|XJp9sEzBYT}#A`3VG(I+Rc6x?h@{O&n@!6U8J^94dg@qeS^SY&i zet!vmklKV_(Y%PMrSiVY)IR=E{w>wcRX0zrDT_Ew6quFnul7tg&jX(-<=tCUO|0*& zk9P~{UdYoeuwL}u>K1!+Va)=Er;cN1O2sO|kzQD-iN0~oz3Fp3Q8xd;<1=OkM$WXD zoEjIto_Egk?|tFyr3+%|=+3S6wbf30XrO7A=ET_k%+zFSb7N_-b?y3+13tI5#EK0( z*z{s5PmVP{{2lLq;+e|t;0ETkDcVoVymU1u?PT3wx{;+Ky!4s!5bAf&3xiW ziPp{*k5q=o{eyNW6BnQ@%JE^1LswLxF*4rS75F#YdeN*PqPjxuc~a^?(RBne*dE;5 zNrX>Wg&yyB>>Acf+v;|(4)`?BXcI2dIv%9}KBQQ5Gn?Z;zOseV&jDDb1AT~F1|p(@ zfruCuii#p;i*GdZNC(jbDssWJkI6JEz#SexJ>zrqPw*~QqJn*)>jpw$_}@^AqIro% zMF!)}C8{r>J3&j67YMz=Q>gl6WkN*Mp zY=FnV-sxZ2WJU&L8gKBbGYW@~UpoC0fAS|Ded4KK{iR=Nwbq}VeSsd2KR#w?PvDf{ zoj>x&fAkZ-{+s{XPyICeR$+G#Zap1F$V{+BPNci%-uw7>e(#4`+buoz=%w>d&OPER z`>C1Jt>x8)tFM0i@BF2e#r2y@9C~c2)Ju0i-)!aYKKU=}Rc|ME>-f&iysOo@wbZu! zEwaj0vAmeTcq+ZXzHW{ zI_Skai=ZT>3nCv6A9xf{VDf|NR&!vYOhP(Y`+e{i#u`Y2>FuJf#S#~(9^A(bd>iPb z0w|SGIzDWB*gA08?q?*%36~1TpM=+7-1%7>%SS0CyfX%NFQ@tm)B`7ItF;1I0dtPg z?cW{ZHJ^Eo6TuD1Xe*ww3xhMBbLz6 zOs)eX8(VE&Y0E1s)cP#F_DpOR@r!t)0<>QmnD9MlT7(}XV_n!z4OQU0!0O<DW$N z+fu*N)ZX6(murIb3f#FcCAPNM04suP&ixN|3q0zqBXS&85bX(+F4|hAcTeth0*}diBu6HKWHhqSLnkh`-P}VzU+8@9n*#)`!oN2H( zGkbzzmN|E6X_*7$dW%M4M%dDJ)Y$`Vv3+?*Q7sG&Mb8_byfGWxx7rDH1HX91dxb@V zZ3_+H{!%<-TxZeIg*&pmgyV4%LKHe^h;;^rtPhKl0UsjcNL8^cIDDq*qI%?y#M-g` zi|btG3Kq63e$Pk89OZ)dQUpa(p>I%Ldsh&6e)0sG4!@Le1*DCrhT>rkHM!6b_7nTT zjd;V@{fqzQUP*k+(r4VD1qadDavSY`=!&}9;j2AyBk-KM^45>$AYswkwuW|goPKoW z)~&V;mYtoE=FCcKxx==K>ZCNL0#?$3VUB9aKDF@hiC?{!qndaqFrS3+-aAA;;GbUL z_vsA`BFe~Lc(fcVV@<0G@OSDWKHQ)2Ax5aK{>|oR{vyMPqZuz38m^e#$Kn%t-ezldsQIz4 zeg(xVwMvc4ClxC7LEY+Ky;U1hZ~3mZt%tzdh$|pbVxucCctd`B;OSlyp*S&ed5F4{cRul-aqhzKlHut|KR&Xzqoewn)=40ps#Owdg9FaOZ@tO`S1VV zue|idtGDOxEVme|#MZU7Q}nG`PfO;Tt^5PMGi$Hm3;-)f9ml0vr#10i{l@U|&II?U z-90_u>$3U4W=gD2z0EswaN>;d4OAI?s#vzHs0FOpaM1?4u2*Z^md^Qwg-6eyw!TH& z9gVmCcA*gX&}{A}d@Dp}LumnzXormqAg7>U15i3>s1q#sA7(a?6h0ev*aI+P*`x$r znOK;DY5}JFCK3?7@%IU^0}bJshcTo9K4?X#h>Ib`GL%ty7=R%hpstB0O7LAN*zU;w zToozPoxA|`LIC(~N0S0F;tm)VI9vAnX!iG_=&ve&EC;q;@x`S_9SD}9Yf|Qb7QE!) zP}GPhW{|@cuCSTji4Zg#+oG+}oaH31b~`6)>ryGhV~JH4{yz5wu^9$b@e*M;#jb`b za@JQWyKB_Vy366^I~&_4XHQr+XeZ7UPkvNdVYGXCn7W2n(1?u&+9wah)(Lu2!xQI3 z7dd>xR-+gL_&$QjIN{4kp70%-H8#wETu4_`{t9O=VN_t@K!bGy>Mm9f;U+)#2Y4JM zUIjU)9DJr~ahol0OxQ941!Pns_*`%b1{FYemohJ(R5G7r@GEOOpCs2?Wh~uIx1y|s z43eI)WnR|R2F5JPq>^f5vvUD%%-?p_(qxm?$VBNMZZsVx?C#3qf+$ir6`>cybVMo| zraOM=%Ju*9|N7~F{6GJtPrvftJbLcbCqMnm&prMEvSB;y5qUv^!@8Kv6{%}oQ_Tl` zN`>#g(Ld1M;@_QVa{tZa#=6s6ch0%f)B-M)G`=Sl24PA(y*#)N8_nrco@6R}U8 zJ^f>U?8iU)i_{1hl~X5oP*0x5lb22BI+9(s)|Y{@Wuy-*JYgUO>78i zLkz6vI{|0GW>`CWgfq*`^!3 zl273yyqbWT@$T=dNA9N*9F9H`f_pR1kw3);MQ{ z#|9zASc7w|*Ck*JDcoqI?(t{}K^z>-sle`%w8%G%#$nENL>#Bio_}OzMSRD0CmJmQ zmNE#2kOGiUp*>OMQyYc12Jc*N6O<#gZ%=LXY8gl>Gc~~$#gU&hW|Xpd%@~*J=_P+^ zSA-S@0>c?Z^(<@xSpE#UPXQ?nEI?T(f;_hE_C z=f?Ni4ToLuD`3NOVEpbn(R%$WU;1iua^l>%Q;zAOSUcOCICXvw!)GT&VGD(t5{cb0 z5gU~LH?Ch@Us*9T*H@XEqV=`BAwr`u{*V8`&-~2K{JouWUK{WVO9DD zE8p8>*T27Ub!uh4wHDQE`RhQt@sY_yT3mAOOQW`+DVxrV+)lNfw}Ao|V!Ghi)}*cgAOCkT#uT3jie%L=~ldX>HA`OT&V}e3?`d z)Z(D&WOQk0l?8jqicZwYt_Yp5y3z`3?$~!Cl+(WYVwJsp>$dKNwfcaA3LhZ@!ooT< zIz_dWz_u6|HmKKMl1{gj)fG2_>rVKn_IIdW`~yBTMNrO ztmy0OED(m0P^A)?BGnlz0vk$4i`Ms#e)*UGS=sWj}k?kPdGG~u{}?!`TMr2BN=(pz}Vnc4Gp zps(q^d#id+34Yd;{>s9qr9B@Cjk#k-%&yk>fr%bc!lP#=J9`6;q8!*_^xB&m9$Fh3 z+~y_FxAW@DU;BX{{?FK@b~|eq9)EVUIf0A9zgv6`hB4DRo2`Z0^gyrQzJ3P-x3RTp zq<|82LV^#%%p@1@?mzbn`J{DJjUxHi5+GkY@x@s;AcIZ=tZId3{=nIMuBc{vv!^y^gOKhqPl;9x2LQLxl`Ys?ulxw2f&c~8zpOrQB94$B?}T%$adDrcI_Uk{SR2AOJ~3K~!2<-2y*& zTqkv=z4{`!84nn*fz(1$Z?@LaKr>jiZQphLFx`oOj)b82&xlCmc&rXe(0}&qh1&~@ zo1JVUo1*85{d|PYIf@xE(;Q(qHHFj?j2LgVRfn>HM47)ou(sYpNJOAjj_z>?EIBJ{ z4Mh@FsejM`L*txoLkXpdb1_P%2gp%9LJL=1$bj6sugqv}Qces%x$glau)t`zejZuu zs)?z}B%p8957jNyWx(z{^g!z~&S+~H=kiq)COCk*X=O_EWN=wzhFF8tvp`iSpStjx z9m=-s!(EhbVQF#b*(X}9JDsf-L}<6fR2P=6tqs+SHSY~w-&b+fD6fcf?aOao`DdT` z{M3n4Hy0LS^A8(=tg4dZnmc7KCv%8E1da-_wI;qF_L0p5kBnOozjEL8+4^b^-ha_8 z&8_3ccGKQ=(S5dy?A?@_ul{_88e0BG-kBB4D%{WrV~{Io)PnGjF78i+K{eZ{+3z*@ zTZe;Ni=7cW!}*hqjPI#K`v zOLyLS{q^PLCEg$5Dgl##CF`rUfjTJT@@toWIkXE{k>XyfmBq_;5y#`dmn=^ zi2-|Fgc7ou-qiDBW8>mo36z0(iQJ|Fjq!-t%NzT{10+I3+Ab^M>kNgF%ua~x;@#11 zyC7X_M0{OiOvxVt5Tgb{s0(#ZcHvpP>aLCSdPX)R8wHFeD%Y8aKIx6B9?4{4OFzEh zo|Dspn1ngZmq9Q*CWl@#w7{7zrzT=Vc3-=G^RutKIx#wO{_LrN$*J}27+*jPxeLmd z`HpgsG6}2+h40{Fo6s0Io__E9zxc+LmtJ}K&UOw^HgJe;mWR>JM(Yf|S4%E6GuNbG z392Tiv>{(T)y_{fXYiO3-1j(tQcDx+#XEc}%HQz|k1qUt;HSR#9q!hm9`LN0QBzHu zdI9c13@CU&?zbn&CUZ@jJpaDFt?MKE8zZM+#8_iu=p@;3VRdC`jVbNg)vy1>|KY#= zbN}&w^#{NIeft9=?TwY~t(Da~H7m6W^d~&k+o@bu=Q-AVL^dkN@TlsFQdt1hieLvz$d|>9@2j7kB z-cIh8|IW?4tJRrbOn`{HpEAUB$k~3y{lbRJogIOWI08Cz*;FXD_3RR|mZE{ll+UaJ zQeYd3F~?(K=yoVWL}&r5*1gqg@<4|yeQXl>p0XZ^Rsz;F{4#Dmx*c2?ZjdW@&>>}G zBf|&jS?e;YgYw1#C!jX1K&0`^`3V*hPyc`_Hy6NDA3}j63|Jd1)-=xjKj4V9vB)%J200a z(a(`;A_(~sSEI>G34U+!#gaZa+-L~$KWek1;8h)jj5`(l9zX- z<85;-V16k6hQ_+aHG7qL1dr80*a^WKqKp;k(78w+%rGbTj~13O)`3U$4<)FdnwFQi zQWBEr!uV#~%Y~et_c2UpM|5{l1m)2GwPJ{BxpZL^wKlkjP{;`j~_}6}V%`P`086G9`18w3bnr3T2;nwRO zL!62#Wg?YZ_3H>dds1v_p-dyD$n zZXOOdtii=QOF#3!{zVhvJAdp?jn15W+(K^|ei> z0WYs?EHAHOJJ`&|!q{ZWWT;H#Ad6A#TU%Ov=?gD*t5oaxO;x_z>e`U{9p)f~ zG@{`rAYn~^_rA47E4nT6B0uZvx`|RULidePH^Y%ur-(LX;1Bn?GO)(!zQQcUgh&NI z6`~urw{48ruwrc#3`;*WWY00g+1cK5&EXLY)vgcYrv%-TXqtBVSkd{FyX5)N(WnJ@ zby)KTi28`4+QcH|GTaC@CRJ0S%MopW$mY2Ws}N_fKSFqA^rGs(1jkpzbHsz1T%S}P zG85|#{xQ;`RmzhD>XqVT%~pW8=)hLs7ch+`C$?hb31-4<^$e7uR>$H+G#0S}r!Dwb zV1`Sk1sOPGrL;>ocSeQh9%4SS3^U0S}h_*ri_Z&tl%`4T$XjHLut_I zj0PI}R7VFpd}CM$c#e{h&|MKk4(*U-c^US`3Vsh%r_3H;i z=rpT9@RiPIUkRh51v;_JA69UhJ$l%jmtwGXN1WMZM#1~y1Cvfu@}M2d zgQ|i2Xuk~{L;>w3h?x$_3~eLhWIoFou_ix(X2$Rc>EhKBGk6jWUAj>n{H$xzz#G0~ z&Uib{{cv!lHUH1ks2Cl+J9|-zu(Nxmv7xT zaiaNef7iF4ZZ=m}H_VgNIy>v)`0u((Cgtr=0NJ2(Q_CYnRzvh(kO8 zH-6#o{FOIf|B4B4<*hev-df-xz-NJ%SG1IS9f}?2mGiM%bHHu(R3A3Rh}?!&=)409 zM8{iu@Si>1$rWGt;>&MczS*r(x1K6?f8qlx|3JhC@m@)X!zWTvJU-{==Oxy_YPHqx z(znikU_E;iT|aP)YLoA3bqwC<5LLws zSH%3|k6}=_N_irMNAQd(APbG4;KV508Qw8Ga`qxA+Uug6vJlA<@&G`uj$b^IKodh4 z1TQfQma3sFsack>2ji9l0i*cNg42$;@yKX_r9_9nx2oXEH|c%E#5)KE_P3g@QZLfz#~BOK)BI^|#&>p~%7adOmfMsmvvvWXO5Ma^^N~ zOkvxeY3n!@jZe-Hp?n55oLlUumN1e4JEodGY8jP)_3!A^i0p^-iG(wy8rT?%zobg(!9c~%RnC^es4iF-FFw<-F;Z% z_UiTa777m$<-Py6h>Bhm*dYm0BiW8F~jS-^i0e>^w;-eh3g0LAO$GeLwYb)y;535qG z?K@ZgfrwA8t?rohZsr7kiU)O3Z+HDJUVm#Xs!yp#czhqUdM%2Cd@MISN?AomGsBVz z1rtQD*|dByc&5VE<|e>{)tThs;p}DyAQ8;5p@lOBuvwaAK4t#9n*~DA3xA3%7Ig$J zIr@3voDTpZHfMe3f73454?yV$%4Jf$P3|B_B=!KkQAcOOBZqKsw+FSQ?7}csYl3Vl zjEsPHdfs@u9CB<2zp*NqL_jKpO3ln0{{oS44H5Gr6dc(#}&6$8q>ONOW~ zO355@DDtUgRE%Y!Kq0*nVCm<2@72$c}N?rB9-Zm7%l>XzW9=!&Ct`^L7&g4i7jX^3$LC^rP>4&s(4Sl5>N=ojKs#xQXqF#@P7!W@{uTgp3M5`^2+P z-n@1NJHOT1YK%6UWBvFt9mQA>>nK{MF2#cFbs4n4D6@n(88NLm=nTYWPj-Pz9qYny zQRHN3vR)Imfg=F9E*&q>X2@R%MJ6I~y^`FJ0qK&;WbkkO1lXncaWt!w!2~k#h=RfA zzJ=Az-@JNroj>d3)Z|8MbDP;#$-0Vq0Hc$)s8`+@vxEXP0Sh$v(%0VH|KkYn{zS9M zQ%XBU3n3m9uS)eXTkM%AZ!ff`(6;)1rK)X;F4gQ_nA|y~pnTNA-Q!_0`58HOT;^PNRtad;a)Gl&#ID0S?ZymHDA_vt#c6!y}z=CDk@WK z1!A0yi(@&jaod5EDspFOIV!K1I-_GDmKlyb9m8@4S3jp?V^aa)y#Av`&sG2pv-qM{ zPt*$a_iXg7CS0~RDv91WyB3;hQaMj1btdR$NwJx zR02AXsp9P^#kme+qjTfUM^8Pn-rl*nv}|st09wUbo>!u&lauj0!yXKc9S)qLI9hCP z{mozb#KN{Ni3wzXdlLuD%u>o$RefwihnQ(XNzD9C{ks)AzC23l8)!C9Z)`bDiFc+h ziZZn)RPu4I2mBi#E)?Pc_j;1LebK$>x%uErRqSRyx~N=mdZ|ZiT-6J`400_`N=@u4 z7HZDb`D?A#iW6v^pW0sCpkcrH#uXqkzqoei_7X46wf5ec1Lj4-5yHY4?-$KpPLCL9 zZP|pL5!98L{YeO!+L(AT@Y&QP`gt zg3;*&)uGfI!M#$!M0o;(1KK#f#31I&f)W&77=By#S-N~UaOV)CaAeRYD?faDKNd0} z^Jx+IT43JkmExG24P{PxVq@z^#)=kA+S|2pCDD!-61z{IXRE_ig;st%ZqDS5#v-C$+$S zL?*JI{24;?4zW49&TwY-af^ET*{6s1_x{B9|IknU+~2#^LXqtqaWhQ}s^oEAe`9ta zD?37)n+d{v*xWn(xi7vr+CMxxq_^8Bn3)N4%KJR3GPw-Gmsym56q{GqlyV(T#gvvq zX6MCKGp{vBt3w*|?S(R!Wu@Re-22IDEuYHexKvbHSN@Lf9sg7F)N*QuTDkg2_gNXF zL?6}jQImYwj(`IthM8DXDpQYh?81%oxw$#ty(xb7=3H67wZ73>Tihae4oozzU0E1u zteY$wn|t%~Ym4h!)G}iE;mQ$v>E!0=(V_DvhcDmS-poSMCA!iHKWZBXIHzz}4!7=X z{L(LeEJu^>>|<@F#)rEXk3eyS}=&-s*h(?|)Hc>Zi9#$7%0W`EIMbnR_p~ zVI+DJ-_`4Tdf2-j*rEp})@SeP@jV>&mAqfpOqu&I#m}rU3k%)#U9-s<-m9!AI2@V` zL2c!X9|(k%D|!a&fPiJK#^`HJ8LUkE#FfWTVc2}~n_}AYxLZ>_%&zeT8R6f!$5daF zjCt5!lpp8C0mg5$Aisi)7Mi`ORwj7Dg~AV_o!DO~H7Ar{D4ALvAceL>OG}qMFhb8x zjjNuJS2eP>nJc{~kgt@uVCDrp{M3p=B@> z+ulJd@xIs)z>QGjuu&2MlOHzp@*Sd9p;mJCI=ogNZB0Qria2IqeWWKH7rnW@0iQ>0 ze;v(U3V@s8)B*+uZ$e*LS)*{zJ~CbAJT9EQT2X^1{K9bm@MPWu;~k=~za5PSYEJD+ zV9UTjbj(8NeQ8G4>OM;2MXWv;_%HxL^DJt>>%AesSUB`Pb1CeAtT98VWO#^-Rpv*4 zz~Fn1G6{8{$yH9C&P)qgD21f!WInV>^)>Ta724~P%@MX#WM<0c#Q~gd-UV415{9Ep4Ac-*j6ZwcY!ENJHj&#J)x|k6N|Lx;ajl7`b@l|2 z+T*285$qo08vyasK$R^e2z3~wm{SSoOo3qRd$kvF^Z>5b2S@R; zY^~LRYGmguqQaxW@8ElVCb;01T0+dCGB{)>qz5OKs|=6|=p#KE6I>38OHU*PUUI8{2gH zF=!4o9I{NAo|DpZc4I;f!)`Pt?Je7QwKy_Rc9o~Qy?MZygdvkEn)b4sXKPusAc5fh zcAr?J%~8a}Zzwo23_u%0W3fwQDWKDl5Uc@{vc0p**h&^_HX1h26&-p%D_K0yam^M@ zr!zX-Yzf!gw?_%q86HqEfg0ktxwGF8Ou`_6qCy*SJUK;0qHKYfp(Aul8w3W$ zvj`CjQxOY<#|OD=Ya^fxhmsjvOw#VlA7Ue`UaqqwOR@B;SvR!X-}uV4Tkk)A{>!&- zH~I!vS}n%F&<*d+xCC}n`@)_CTkzXj;UI)zdZz(W%>Hy|YI3sGZVxwRgo=$q#zX3X zF^_Xjm5^}-cw{w9eezu{%Y{6_cmAIP1DqY~VLr|o#P^pv9RIoY*ZZj%YGVCPU-#xX zzV4>Guw-PuTZ!XGYM%PK`dshpvUt^GZf?%KF81N>Yu1`xuPgs}PfBmjYp<{Gw`1{M z5W^~B=i$volImV-2Vc)Nw!2Pl+T*m%o!0{1|M4H6Ft;49_smXgv%mc7yC3~g;qb&b z8Tbc3w@JNch_xtA-R(fa#K6JS@WJ?W)5$82Jn{UK&;R)9($_XNesOYqxLYfg?5$F* zx$k$Ve6`SabM{^=FE7`h;x33Q+v5HbGgA80n4CH`PAtE zpkp%UKn?w{=KV)^EuiGGJS@^2&KF+Q00f=^ZPsDX%KCv?pdH2Vr!Wrz1q1?@sWd4i zPuMYU_ZPO(n4>&yz}(323XAqU^U-@@cXm`|Wdch>FP}RwLx6su3}8jUq>fNA)E}Uv zBqckiahq2QsH2~W7p5wr7P&4z1D5I(?vg$u&50s{yiK!H^w6piRWn=&SF>U;y`pL@KC% zI^Qi+fyfeYG$4KbGgDKd?CL#xpifQDj`a`Dj5Z(*Q=|-h#j-^Xc*Z*guRj1ki#PrQ!{Ev0?<~r;`zlT!)TJ|;o-)FChK3@ zV2~O5?o?xps$Wg1v&#^9xL`krpZYtZ)t*>vj`>21@&1N3{|TXt0%cH$bc!R{=)sWW zL`|`s%_v3JSBL?TC=)bPLA&x7ICCp_=8gCVJ((SNkq-(%aH~vHcy1@!*7Hw1{`l!x z{exnSjcLkw8E#{cEqDG1e)NWBI%%d>l1Q<;&0b}D^WLBRqd%@}1W}pd0)`{WLIC1a ziv9|+hI07Sm0~=PIeiUto%9h>?Cw5COmKe$;sojP)H{E9wiesXcF)h=^qN_*HBUEZ z?}hq2@KbA*DQ?i^z&-fP&CS)^E~Ho7=zYGMcu&r)z&=T&E4fzXK{V|>e9yb zwVjpC{dEy_a4}olbr`>>T0>mh8_o#ozj9^x#V_x^d3A4X#h#e{mGy(Kyd;VpiaunT zP>HoR9c#f|GtL+Giu(*TCK?knd)q53H(yy@T5>+e!>aU+RKB*l_giTqiTRkewc##m zid(%of7h?QPMv+fbBpfj`P$6xczHaC=7ai;Or8nc=fCjhrh60wTxn#AP>+`4zr*!_ zyC9%bUk7&036~~_=#ph}i4(HVUKsxoOjy{T@UW5HP4|KVN+t?ma-^^mnDkZWZ!8PA zm!z^dEC{RHb2J8)y_$px&lI*Q2^3-H!eDwqZWU-KN+i|9I0(A|U4R2HKzQJ+-`V;@ zJD^2nzczMVkQ_PC11Mlssvf*92TY@8CKh(r^5?{BLUJN{iC`N$VO_c^eib<6+&AOJ~3K~$NV{G<|SuQ=A|S8pxdn^7qE zsRoKo(Ul6J7yZBX+0S11&HqdF6|foyi)cCLM$l$83W_9*#=awS7Y0 zj5zFPocEJcJaZCXxZa%hrgTo0$iGDsm0#YM37MC=G&w^L!j&YYuQN7&W}85Dn5b<@ zPh!43lLzx>3V6h){;V15&ss>inY-N!MY-jZ9ytD%p+4)Prq^t}1=d@>-SX*{Z`G>< zMdfZi*}Ti+mu&f}{Ic(A53K1AOWb<=y#39aZL|~Pbx1$PK84NFFZ`U>w)_6VzdQ8) z=ZD_7Ht;up_Taz!PX>PSFYo>be|GR6e!TyK&yN1sA3FSrKfL$f|Hb`(|4$G8(eLkn z?dr(S{QThm_@86ihJN8=hyU~wyAvt!aILkou)4mqu=dp#f9v&$&uuQYuDo$`>CW22 zs#Kfs&XvEv)m@;k?d|<`i(uWG@-AI}Yb~lzsZyN^)dCRYMPtW?9adZXTukB^-WpL7 zI3UG5wjex|uS`&!I6jXd*9TlDHM2eY8-b(P)a-S@UQ*^GwhL#JJXwlGoUqh`4L}gM zWN}+>)=l}#?8_(iJM0#c6Mx18LI@3E6UA-^B~-&j4rz*NMKGUsVLS;IQA(#)&_*cV zu#FHgY8>w`>==0>FEzX4xo^cPysY7(E3o<_c|uI0XyMRR!;%Y1;)oj7G)fx`BP8*`rILZ*;c#{}AI8O# zGRkJ9lQXlU6z9Tl?rh_T1`hY2V?r-%Z8pcoOgK!E7U>Yp^hRaFdc6hQ-O*;@dNf$1 z1Ou8d3U=*M&@{)jz1e6!^Za}MfA;PK+Oq4c5Bz=eo!)(84XRQ}r3rbKV~4?D2M9Rv zYRCknW5{ZE6Wk6RR#=JCX}7~-8LxEO%}SQj2~k66z~DGu5aM(aY%qg?7=w@zvSitk z>~cv}s=4ab8}GaCzPW$@eX5?HN|J2}10jo3x9&UloPGA$AbVV_VB1VRtyi8v5lWsSnbRW7B{8Y&xvdt6;A!;;i3MrT` zS|b7;?SERyXrT8?xnr#M%R{QH1=IxS1WU`<2$F`C!!2MuBEgh%z>#sMA5l@`4QWjm zXRJAlBMCx!q(MR-U0C$GwRO7Vp4i>GqdLmpAas!x@+V!D2S+HixThUHc$r^;h1yJ2O#x^_@GN;h{^Xh8n}QI}Qw8KD++k|HaI%>;`AU=k=Y1rT*ie zdg6hPKJba(dib$N9y@>b%GE0?&s8L4{-T9{CZBGd?X$wVi-`&Uhk1O_M*hMz+N*3> z_~XZq`(EMDRQOIa&VeWMw;If*DOzASVE&kP3=#Kqluvq_U|+l+vyzLykyPIwT!; z{DXPwp$rj9P_J?*kH<&7El1dA}N;;Xrvx2Y_^?EcI{oP zX(lH-%WM6$e((5^!%v<)V{C{^*b!4=gtt$emT={z72#vBwwNm*SZpET3__Cwi=+x9 z85~D^1i@4=&>WSu#SJl$A`G<~t!H>B0YNTI_n6m}o>q|1iO>Vpu<4;7Dl}^&_BO#m zh6HQbh)Zm$n!_(0f33koRFvoLJMa7}uYAStfA&+Kdi-3gRktVchByZ)TFO(pT?TR} z3}_jWs5;VeaAta_KKz@XeCXDjj}12(pMByqdTiZKVTDZ_0#7Ur=~_<_-@>HJ; z5S+Y9_B~`hTq#mD{`GA2$++^r962way)+q1to22dj;OoC)_h0>jAz=eMI{_iE(s{%Y=ZO%T6I)R;V$If_dvJCK-TF%A-ijbCAh19QQ2_)umw&OP!p zM$+(%RTDr)Cy^~p%*^0+<_=({oi*&Zyx?LZLztME7;*9uGmK&J62dbx{x-6D8C3_GqK&v4y2Y{io@L<*_K`*1PVy za{gR9-M%xwxU96q0!zA{I(xP~TwfQKnZ7H~n(c_uKj6nUQg5~o9y|WXBM+ZFf37|> zJUw%8Y3b_5mQ8pYd_X~+URF6vl02@%ZB-GC7QBtfG9cETYK1UJP&zuEI<#d`Y=MF_ zPWqL7JN$cjElti?b1f2{Z3{eTm}K}FIrw@XI~#-om&Y^Ak^=@ zBfAaH?rh)t3;*#I$8R0lSbgaox14zDJVmdO9a^p!1C6j7(4Wr0D`Pz#iiotkdHc-= zKl8*%+jdNhPo6t{MsD;H1~Zz)6fHnrbc{RJtb{2+X;6K^w2P)bBTJscLsJ`qTI{m- zIt*Q=db z?XL4{??Tdn0|RC{s~lKGIIdV~Gfk6#bE;Nsl}C#b-EP9+tp^_+oN8>m=vIdG zoyFyWANr}SGna?&I%-+T0DY@9(Anj1ZIGNhwvteQ=6BbYdz(9_&Yh}CUX}BC6@IVQ zdpS5UTdSX$99k;i786w1lt1L7YToB+*(D z7!nCa!T#C~Q!RNTkf16go;Y@j`A2fek_EuTu_MIBps@xjXojExO|OexL@dAr6>ioW zHe^HtMu*1`9NK@JHDCDt;%Yz3k#HOQ?$_3`wu}-+?~PexYb`9slY&c}smN^UiUf~c zUqxkho_gXmfopvXz@!E+*SjXCCbpMGFP=Fo%E5>=4MWVit9I}T2W7Rv&er1m)z!tN zhWPSK;=2QvFP_u*i&?HbcuT7t4u7a7YIc#-L$%E4;IY=#l%Q;9%Nk(q)$OktOldgQ zm5^_v#O@XFHu4ap{ZfURanNL1(c6oXAO!ujY7J+eKz1Jr##&lenki1mMW#AzX8c42>4o$Y2V>?V8 z_5RNG=?mu%-gNl%ne!sONMsR&kz;8a6SUVE1Db+DQ!z?OGi1s~wVJhU>ighq@fZrA3M=MxmRN_-RwZEffHt#^*i)PCd1-Iw1p^vIPi#$}~H_WyoV)pifx zHu{?r_QsqNppFmmqfncqFJF*bs(Vk-vM>_(LBfHpC8k?sl`iUZhR)aP6H zy;|?j1Q}3#%$CD-+Ej;z!r|>t_D6HRzmfOe_=T&Pp?3WEao?AhbpXZ_H*83a#ko){s@5;OjZ*`tCS#`1&WCDOTCTpR$KXdc09^f-MrxGiV>VVMlcb3Mae16n`3nWldRz)u7KnS z9CsoYmAu?y;g~$HkN#KLtuJ-9CSzP3MuI1vfah_Vv?DN6gX-;FB|Em zO}7Gbfh5|G$Or~l)H0AP)OUEKUmRI1>sLPBHx|&Y;-=Sk?CrF$y3C>9wh>IG^(Mnh zo3@1g0xGo{%@rXYLJjR!m7Te0N{$`Bt@p&E8?|lpgi?aZb-Ul^Ob^=*PD~m%3zyFC zZ1vG88aJKWX-yHhd%YD_dBxf2cL&=YAiBfywzZAN=I)XuRGX_yD8K0_ zz@i3X*iM8xz>&?Zvf|f}U_B*R$SmQ25O&?@NZuOP=3hbKa>ayqZsY*Znj(l_!JrdV24zp54pAt?I5M)kW((k0zJG00N3V2Ge=T zr{>C@Rq%$3u2)yO3ztn2gFlR-;W{irRMGz0eA_HSJBU_0c)QfgT-B?3{ola{ zE^XJ_q-b`v>a`}?pYqFot}d#uS0m?Ic(0N7UiZvu?%i?{#Fv5~Ff=q?8=~7Hl5y^1jv`O-6)_F#QyryYwXy$jFt-PH}wV+Cx89ENCN{LBek z`%+}&muxkI_6Umc%gl?A0c{vfktZ}79S)kKHO;zktwoijw4s{dF1&8Z$=a^mVn5M< zb@Hk;y~PTuZ5y>FMM&^{#72sPyd5_2-fO*4!KOYvdc&c%4ff)gGzy zIBOPK7;y!XX9t^M(QEBHY7ynwaLdYo-dY!B4@=HaD_!cGZj0JoZ9^q>Ue>{(g)y-( z{AQ}cc?vV+EgBegBq1?>DK?V>Zou1ED6$(;>Vgj-7#RXG$p|q*4Nb|cMZjc*6X8az z$FVIj!UVYrdizRK`>FAlS67#wJke@`lO58V$ge^{Us+fj9Tg$27c)v>&yCoOB$cXS zYj5wa^t#qn$fLiy-e~ga9AWgfYYka*d3h=9US6njNGhKtZp!QoNQiyq+$bx1(+c|! z*Z1UrQpl7Sh^MiNG>nDZBLH4)s+I|uryS1n%6&(5y-F!7rB8uNG8syoNmP!iB+@wK zQ@!zq+;Wd3S8?osu6*ex*b3$G-J`ILk1_ugY9t`X* zUA;*5vxc@lHe@$qEGI7#Q^)!&d&TW+@R?#Ri@n^OjP%MeKV3zujCeS*Oou9Rwiu8r6S#kZ^;qzJ@KRSmJ0glZNGmO(T zH=|MrCzXBp+{wf;O(=+Nb`O#dKuO-G0)b%8NkBj&AWNeIcDg2; zg!LoWgnB?k8l}`FQz+X6iag^<4TUOteRLWLa~2JbmsqJ9m4~|GIh0!wL+WC=3gvW! zQgQYRAf^pK7{(S1CJcf-&uucpdE6UD8FuM~G>%#V$8azu#EoF?oG*8}OQO|?W?(lm zuVa7JVmxyE;^CR)p%nD1%bMn?lPBbR^G!!Ot>(sRcWb=0c4;*$p?JPy;MKP_c-P&x zoxgNp{>uC~UmV`?NNRm3dg-xYqIs{oprh+KqD-(>yi2z-dFYW&$!( zba1bZuO`>&9^t4p(Tb)oo|Q3Z%eLw-h-pk|LvoC1rq?(^$%(Wa#55Fw4v1^`4^8PP z8Xibtkd)&07NJU^S2%zn?FI=hZbXS-ABO@y?e!1HopV{oK*T)(h zM?9|kv~Co*)LAKJ^Jrwldc7tQX?I zWUyp=%`B;~u_c;X0()3tYX(dCD5`o9$})Sd!*n&kssz$IsnFkvpJCL>NrmYy zIy~Y;CKAY}%FUH1AFeO%E$=G7OD696$fPQgbBAxqa$@Pol`C0U`b_MD7_R$KB^=*0HI?;$uhtPk*5g4|-Y;?ZGtVOj&(#!=SRhx;-Q@k1s@P&vF| z#)_Uxn&4W7Nal*z>*%>|K(B#S&E7QQ&1SpT4cX_{$psPLh&`5d%$+DdvVj?nS5M^~ zUu7P$;j2*V<(8dDod zK}|wC?wcz2i%eRgIBvd~i~SQ)p96nf@|HCAvC;HpI= zF`L6(U5Srnq?|-p6ZeQhe`IUO-jfT9i^GEg4u+;_x-DxtYML>b5DNGq8Bw4cOpbMzLHp1W1}YM9d&%+>GWgbR)xEuM*MUfN z_lsT}8x}VfOM&^aoG^r2+ZeoBEM6M6&cgL(^hdz6NZ{q<2pGT}W+mn-&x z=JP1$4K;dZt@mo`q#AgJ<^GF*1n1AI<@ah-J*9XRFlly4JEe};BPzpp>VH#Y0!X26@SVSkJJd9SxVJv}+r z9HYQ@AJ}=k8cjo(5m&;d1*y%OYLJ>cFg`v&@qr6R5G`$a*3S&j=-!i6oOUvvGRrf9 z!aw9Ufx*9`;bAq7Kd4+xF%jGNHDYAE2<8B^te+a$ZMK?OM?6qMwx*HP0{@%av@I5b zrfCpGyf?<#wx~2Pc4}qy4E&4roY`Jf3&oKi&}MuD1GGe$KGYqOrQD%K&;0k5_!WVl!(@~!OO6#5 zve)_k69uGNv$v53vDmBZdj&M1d9%@>B(Z8N0lB?(v`#}+c0q!LA^+j_t?Sk_=}>K~ z&#h3?vA7UTlVfx&Rsj%P6gy!ia{w4jbg@50K2sp0ZhQC0k;CUNTv9tZWNk0)5T^y> zEd)EPf{*b#F+26i)2EgA(8RPDa2kDeYkSo$m4b4IoygqZP@}jUk|}A(R9W}wY9ni8 zU~~%Lqj}0v&{nB@3<^s8YK&u(&5+9E=!(xCj+lKJGv%V|o~km*z%R*sS68ZUwXJA? zr%){4o^q?YUY)pDomAQSc1X7OQv#$Y86G?+h`_X<0^rY4g%9&xZ3zM>DwU4spYe9J9IugqP=gdRF@Q?ogC?&8I4u5IDpz~;dNlXu;5Yh zsZP5#-ku~e@)V#iRCR)q#;^0H;fKz%Io-1xR7LJO|JV z5lRIZ4qRu=gb>lzFsnvR^tPf@63kW+dHZ3|Y8Ga4+|D}DW`JHae2KlHUT>f%@WP{> z%tmNsC{!FMrHcTtA%&HO2NGd|A%tMC11ic~1&xR7yI5FQsT5sJ3*X9&tSRE6&mNn7 zMW~NNU!W87UiG29L9X=C(rVYrDr!wUwMh7Oe@5IKjH`(4SlwRa%Q{p8#^*>dm)`1u zn~yHe&m(p#-7dIS+OucRHd^f?cii#NCm#OPL!W92f8Q9PvLNe-*f4eM=(!Uowcp7n zPFdG(i|~jF0Iq0bQOvnZS177TZ_-4+V|8xUk!ft$CvfSQ!k|(hl;;vEM0j9;Ma*=j zaYC6QkdO)zsgMXGsy;SO7O`}IYR(`q$|88N+}WNaBO-k)Fa+!msW;M!-cQ>alhxt| z34)@*@4Urplr1No^|~TnScIi^0Xt$xqFR90ZI+Lkp3k10NRM!(wXxlSZ+hjcpE`T) z?8@TT-Ezz_-MQ^W`D9mT!!dlhac9Rgd=d$cjsY&C8T2rmZ>JMgV+XjGx95-U^N5NV z@KTNriLnz~cZf$ym_uoO9IkjU1uKf3a_!l_%D7KrC)IZ*)b*pfc>UKG|C`bpGr)m& zW|iFe@#`A=3N)(g6{nA#yx}5+Pj%%0&&t}60BYtREQpBCdw8@*$|pXNqn@~M>XRqu z2R3RS`S=MF4a+mxI@4@2Lygu4uTD&~R+iWA`|Ss(j^1|m;!|_BxLw{}?+fUw$(D{D z9lCOLKt#6PiyM7&bVy*^I3VafP4-lYOi-2c`4+x<>RG?d$Ljjt$+IT=@?NYO^SK&% z?_JMY&Fb#w_4s~+cT<708Fq~Nl{yv|WX?jcu;>v{p%E68OQNyJiFs5?xMwP5mWG)w zNAwXHuWn{4ZezQGvkd92F)M(=YcDLV96fYkNjyBU)`xA3-a|2+#g91%j&Y39)l1=p z5v=14Ud8Z3a4xs7R{$}Aj0bf903ZNKL_t(#R_HS4!WYxpx|HFr@bo#x7TpsS(H1uk z%dP;YnI8$?Yb1n-h+JRzCNze+2JA=8qb6}A3xqX!7g{o34=Ou9!t?QC6xw+Oz5UI1!RKo!u{>+S4AMr zLf<5&TsH?dO08>jD{+8PP^85cSk|+xU?p2 ze*CqxWWwv)Vic#Viuh{+dIPx?2cn_s-VDbC$FeUPu+EXJdG(=%v34-YiW|yN3YoHdcIqUM>rJo#aPMC>y4vN2=NGv3Y{|bo*PhnM*R%Y>)ePf&{P=O-X4kf8@ASpdQX6}) z69Pt+Zw5->LU{jj)vqX#16~+>E9u5pWZuYuk!;O{I)h0oAM5wg} zg#)BiwwK=XvPU0%6rH?s@uJ@7OirFVca{jPRAM9`6+oIifym$YkzeOUX}vLKoXSWi zdTq;!GCSuiu8)s5*84CkWCwbPZ&MjNf&EQA@#qxIn4b%R1AiH-I3 zXy0gWGTkeT%Mi@78G7L+eEaPYiWfs@X?dBNJfN&Hg~*N>~XNo3ru7s908ADeF+9HHit`p}03Ya_D;} zKH8@`aj`W}6VwP%Od4Y~W9wSt{CS}Vxm-3Srx%(nSE@8O zT;IDmzi`Enrnl!dmQjr8RRX;gxV3@)mA>vX3VYcTI#Zq7RTirYO1@!i4eqY?x3^bX zmVm6SKXqY=!!fNT^<%{8@GApr3&p$~#E1nA17nUva^F|}s+`ZO@Xtj2{Y~*lf3A7e z;<*~RD$jFObML9l7KuWQ0WkbX2(JVK*3j4#lY@#G%(+F!ZT>-eaD(H6`7|>$+uRtV zV1<3AbTCdB#o(s)4ynj|k7CG_l8MkRg_sQ4Y=kQcxP)A=6|_QB4}^C%D57tN;R+M* z^ww~2Yy-wZCTA87NgobcnvoHG6Ab{a)4MX)A*rWJF|39%G*~9E6>y=DpKPNsJYq{J ztYRofUW0gqJ67tz)0jM4GZU1IK!cbzZ4{tO3A>rmNEenwV7_4Z|^P_m|^R!l5On5RA084q%TTMp*edL17ol+ zu7@H}GGcFbS67lb*(iZ9b%I2r%w%krZ8bPFe{O6v4gZM%Wb{h*6(T*5uTV#dx8QVF^T`+9mY3k%DwE-vi2RSvm z$|wod4MI~%(N{qd?lv56)|Qvn*H#ZqPKc#*W$w~oeeChGPYpC0TM6;Fy|J??6K&-% zW(sJhtm6|icJeDLxeRF#PrU=$u=W+d?~38B4adW}ga=n(C9_1_$4_Of@Vev~BH^UE zQdMdHx9ifEy640J@vBU#pZgPk>E|hfk^6Z*y;j>p4Y{~p;l|!YCwmw7UQ=CM?b@=9 z(4V2w=_H;#nVNQhl@QM-6bf$yeAW8K&}}od7u{OBb!v2Kw07G~wZk(Te8gtPw~kH{ zg>4IQ_3-5Gi;oUrOSzEH5~9mYTloDfok=g$4$O289_Sdtdc?6;q`h)}>4o2`#omdb zB+tE{dnYcswfFN6=|qE9?RgEcufJyhMd#NqKdq0dc5o{^z60r-K5{o$gtr8*>Y{mJ z7y|hCoS61uevJVxkLqloM;QS68Avn&qhfd~M3w_QY&GbxbNHsHYfN@7940Z$HQk~< zlGsd7!~=>qqA%tgp9@jsh2%sXQA#mLSMH$sK?}l8<`dbOvLXm>Iv^vNSPAW0rhHM# zLkByAM5E{BJ2v%5%!a6nh~bGzIkF0#@tGJsDjF|N1WiU!Z>PGaS{)*Hus?>Z46Xy> ziB4;k4kyfGjZr4HaX8+?8O&nzaoG$OTFh*PAUZ zDaa*^5xQVwdti0F*KXB?^S!M=T0ft)zhaYgwG75GBqlh zq75(gR>?J3Gp%f4*FskmEUxzh7cXAYy`u5h3r!iIcCX*>w8nIdx5YJAJ7`-n2+@au zWJsI_)g=(1I2&~19yc1ci0`(?+T5fFW+86XTQ*Di4s z`*vCLvsJS*p9WyjHfXo)nax9X#kK^am#!{Sx5tvMp>(s=f0-GAgJy6UIkFdzdS!mW zpeOnjHd6s1zC(vqhbvkDy@@y_Jtpg1X9q=^IMw@lBA zOINfhPBf~rSb>5SIWu$PkVd@Q{fgTUQ5IaCx7$pr`CLV+Zhg_h?^SK@vmGi*drJ@!pFYzAOv-N0t~<0xW7DZ)?q$fCt!53x3NQ zg1jkutQ{(mcC&Ds2?)t5M0IZUM=zo#10purG*enpZty0S>KMe1V2;Vo(KB?O9FU7q zEVw;nYfreJ@Wsli&XrnbaKJjRTRM|%4lP5&7grbQCB1-77r_iWZ#MAc&&EHR9S^iU z!gqd?)?H*4jxKQqS0uo!S%D~2i^uGM<^F<~WYUs4WU;VDWk1#JuTIPy8koO2J~Q22 zTfcPq>XDDYl*OboAe(_lq zW+W(vrb5M(E=XOZ2;NS$(I&+l8*X9k!9CcmkkoW@;+0-UWoKxYn1dnOKG6%71ajSf zcv+zh*C@ySTYKjjjpa}zBxLW9At>KF6u>9Cl)Xz&Kau`vM`e|L+NJWtbs%!X-RHWv zu(0GIBU48_{=`Mim0r_8JAanU_FP5!5)1##if3}?T~9ln_2Sb~eEEL7uo_iQ zDMb+f`0?YuGmHE|8H-`Da1iMsp8^6#QpI7LEoNZ2OW>S|6o$o!&ARfiTA7Vz9E0Cj z@f?rd!(nPif$xtMiHUbIJUP_?!Gc@!!Na;|6)VJmaGUf+iH9STaF966%)xMl@P+yU z4H;%tM%Y~rR7c!=WG1s(3yA(^CgR_SwH-+8V9pY%ey0UU{ zenHzP1tLlBLkSgAbC1i9ZQyII@%Bx(96NF1r2Y=|Lg~|2Vprl})tQ!maA167wHJLA z#1KqVm)Q0&24{l=eHLZ``L$%8GZHGLKARg1X`6`GHZDO)tWa+VnH$7UD@C9pIAX5N zcG?_vdM-dPB(RD6>Ln3Yr(}2H6JP-qb5xe=M+i0qu!TRQ|;<4)Ik+ zV#W6>_@D&{h@sJG3YZ?rL=UL3~H$X5++&u4b5$$8h7yHsK&e8bd&&EFPTL zSLdPr<#F~B_9qu3t)*1CE-Qy*jtETUo70gK7gO1CI6-fGdrGn@WySSZWxJj*e`Q;} zasS1^{ai3*LUpfFFYLcnU3aCrctgqx@l7(~YVqGTV-WGYZ*h5NfyEnYL?2+jt6C=f z+Va}kQm?us^K`U^BEptpnuwXuxmL=2Z5-rTYa~kgV3(8UDpFNW3HFX>rrf)A!%6kh z3iq!S;D!``I6o_(er7rMcgGDaUsZE|f*^jC=tcJ&qqomcN>g1^Oja#ft`;g9y)>?# zh;71ZYqQl1OGDfCI+(Y`+r-e1btXo?94<%Ks!KylEalzUdZ7J zTBqhNL0KHHS1S@NJcb*W7~gr)yVr|`CN^UD497sp8wjSI4W! zIW~?S?(!P}|^3-KujV-8g?CQS-r%mf>BOnr33AEomjJK;GUOvt`RJ zhq$ogaW0lB*+-cd4vGA5Wh1PwyiLjoSxn6t zKl-0H6lt#j&%FN3D|?BZn807)=l)w?_VWs;_h*Z9_mjM`|JJi!tP(uUI}^KZP{bD{ z>f=%?6AoO{5L;@?Pubas?GJM;OcY4q42R*5Zk-!AXEh_Z>2h=q?hn(0C*%OgGm|j7 zEC5iR8rMj2rMua0p!4)ara$K#Og^1YnW!d8k<^1w;#*rJ+BrClS?tVq78d4dPSHJ%^A9;B3D%Gmq5<((= zf$QrnqX4FU%jD zVc}FrvP8eTwz9mkmStQ3(Q}w-dyYTcsNqVF+#eR{K7Wa`64`^PcyVPB{XTNb;Y*jVv>KhQ z{+e$7ihEvm;xnJ&;nePQxZVT(PO~x9?tJ#jIdD6BV0M1)YNfklj57`rd=mDL>~z;w zTUi#cVF4E>3kYmqt?Niuc!;|le*b#$?TOn0tv9mLMoWCxw7`)?|=H! zODm5pEdTl=pZnF%UH;EM|4V=QWw#xeyy;AT<(l%ZPzf_Wk#jOD6TVofVYwx!OsO$7 zV?R@iaHc{o&&<+*JI(T12%oYAMqpM{9okCbqUTpSlrBzADeAyr->xO1bZ0InkY~No z9B(v!|GwYl^H-*y7Rp3T2%yoC>6x}=RDfG^5+lM~2k8W*>GES?VeqcZ(R_vO(jaRv zrR8nIcFIx;c&2BjZ#i~zB0TSG)?4k7G3$pd!s^b<%-H>EaivR>cE^!h><1#;CT2VS zsWoKPqS^lPN>?);JT&{%Q%~syyzsh3Eo*$^wi=V|PO~|`xS-9+XQT>_HPV3ksPK%2 z)UIBBx)9GC#RcgEHybNzTgAvy1HB#`u#bL2o1J&z2 zZg_jJ-L{Fgc0hmA7a=1VPN6A=J;Yc4tKFrEPG@($e|UEG(n?oOEJF&f5p={bdoRX6 z>=7;mk&Am$1}=d$xL%Fo{FXnnNQQ>_W z{`|h4eDcZT$B#d4%`HJ-X?=IGcX{^6G}UQ5S|R~QRbWgQ3t+_rGF3%6219rxgCpu+ z8sRK?h=!DxkHkTxJQW{j%nUb2vm?SX)+!B5&21%Vg4ghd$&9evM!d;HAs&v4oP1)i z;Q|C#EnMW2D~t?f@n)j?T1Iab9<%Z2i1ngmg2?S=I|i>d*c=%8#OIzmePOOMJ+mX= zjMYOMmmVJ+{D<%PkN^BT{>sF7r$4-@WD<5)mrUj?$l4lew%WZ_-eal|EaJkV{u04V zrcjKXpfgd-Tff?9C?71QxPlS(zXLyJ8gRwPQ$)0yL&c7Yo>ivW#L?tc#>IRTFlY-l z@Mvzeo>%yogjywyV{tCm)umpKc%rGxO!E`bIS*9ZP#M3CA}+!PB+l8mbu-E!!^Djw(cDb` ziOrui6IxF`6O%1YwLPw)0sV5&*@f^Ajx{GPEzV6MoHa}Q4_uvFz>KiEFD@@Gv6RFs zDK_(TWlXs`RA)v>W&4Ay3~(p^edO#eGg88#ZfCu5q>ngy#oCPTmO!&u07-4SA@GrD zlJZCN!SWj<)qpX6!FrWp#fdwYKt&v-07>ldU7eI)r6~KZdtIi&^()s;ul=p^3FD7hz`Nh@hWF3i^IhM4=l$>bz{&j&d`ahb z{LsJunQuK_uWg-p+eg0hBju5MzW2v}^3AW>dwT1{&wkB!{jM# zdG1Q)d-i5Bi?^=~4Lx*W?at};!?iUVOJUF3odyS$m=>c7kFo{t$qW(44A8l?MO%ba znUF`19Xt8dlT3}V=u zx4w3GX0|@lICb`1SaKsdTm>T&_Z%AotWVBNlV)TQA;HeTZDXgNK+~5l_j@crx^CS_ zvvW#q(00BV$>H(yWq>FMY)vDkukGW2Euz>d{#?-xc}ENyAw0w$os#rnJuJa>_^O`G zkLyR3A>0Sqs$Ze=^_ySP-!#U)gfe{gL%%|X&)=K=xzVXG& z54(5YFa7f2&i!+>JHGdSf9soT-}9aid_Mh`csBd`Z$4iC<+uIWANa`r2SQcu|Ji$g z`+VFl)-OM}|K5$~wyxaTynN%;{|0}XGB2!Fd;M4u>qN-2l+C)3@y^7_Cr^)Cg)i^T znuYJ2SeR9b>BROjLg@euP|8^NhI#L-+wNI;{SP`G4il%-0+ znru+4;06=`03ZNKL_t)}6yTC(@UbqlG2L0E4`AnuUR5;{6ydHH-?6eqheM|`I=>YC zhtOmkCizp!ue2(o_gZR}=0+*E!7?=g0YlIq2I4~pW_v3uV?%;Aj4b!otQfO!(L!2F znd)PMOPA;F|M&wNtJxwYNMYoVT=?4W)J}i)%qzeC)k;X6lICjCNMe4vg1Z7N3%# z7FXA^UQYzg-7VxHdObs-LA^utX{MbrvV?-iOE30c|W9kOk z6TMSa?Ne_yx7Sy{;Z?7G; z+1kZ-ee>Tcp#JcEAF9>v`2G+7C@;_x=4>%yLHRKlmTs^_HJI_Tish|6hE^k$(NKM;A|h@=E(F?wYM{EuQ$-|KK|xG>?W~ z@pBJ6AlclBUw+$n{(xLw^S%G~yWad-k)CSZQ$PDp-}cWQfBgr4<~vr-Y~6L&?Bav> ze)C)2lT81l9R)34NTDHo1^Vgo<7GeMEV&sSv4J&xE8QtMe`ST|_tyIArkIes%d5MV z#YcJHv`C9Aj(dmhIq16~Th=gIHz}N&eJw;lqzBnIQy-%EO`D8@Sda>-1EXZr%NoyKAhd ziIrGF&JB-F-*mXUxiPoAvaqtULZ9C6FVe+qh%yW~C^WQtf(Us9|28~tSboFv%A)TJ4_-PJ8i!E`+GVX-F*Rb-Vjw`(b_Tu}XNI{N&8Jfi7ez$tmO^1&ec0U|N;vkaEritF}@; zn1bqYlT=ocfqr_hJ@%X`(I|2qIeET^4COC&zmFWQaemLtrE>49t`lx*-O~^4PjvGA z@BNLl?ZY#*+Qa|pH_!6>yZ3E>_XqF&SNA=+^@_jzH)g^6cYWK7>st@qw}<1i|Kz9N z{)+aQcYn{{c=rd-yz1ND`9sJ5{Xf0;H>|Px*iZc9AO3~CWYs(BZ~pKDj$iw!?=QcH z+mo{=-}kn+{lxu~$6qmi@_pa)w)ZYh-u3N&?OTdndhTc6@ps?x6TeZv>o5L`pZea~ zH~r9$y!o|f{=>W8@P_aC;Dy6){J|f%r#9NIPu@2E_`BZru77^-FYK?xpOkYz4e?*V zK^>$YJ+7wdX}^7sAAYGgw#A>`63T4jK=Uv+Z(r=O)yr#Gp%=C82wIw=P|l<>P)ww7 zD`risyOGdAe~zfVxxgfF3O@asU>&}NYX@|GCRSXA4F^Zss*4)Qh;uzPZ5vcSY{bFyQ3h|SkH-l%2f zE>tkFcUboLI&NAhi?yc&R;m-7drZrG2EAb*> z(i|Fk-Ru55(ntKTQA%p0&MN2B`hzU#DiG(TK+Hl+)QODrre z*)ZY7FMZkPo_G>htkaoUp)7hTPgIAKt(sQkZER>Tgn6S+2g1mmz6sb4ul3j4T61(- znB@?B>*>;IQCdMcD^!gduxC(BO>_(w!R8TMae*XAWKlzAEbGGXp_(0;$s!D+J}Ur% zmFeh$ri!8EP;{>@9KE3z@e*TF5gQc^=(`sQlln;sIdbM{CTo;Q`%|W6fw%ZCn`=i7 z9((-MXrMy?I;#TrjP3HXV$wYY zz8!u#$Gj)!axP^?)Ahr}y`y@z`ssR=-mCZ0#DfDk+kK|u}&*9pM_x@k+fB0nW;h*@n zZ~fuB|IA%K^#7fC=l5+r@v9#?d7Yh4cICMLz3=|@xv|=%N~I&<)T8hIv5%a*qQaAN#(SeBJlF4r#32^tIppzCTwRjy!Su zYYsf5Zol=T|HlVD@{HG9d)t5QfAqznLx)~iDJzht$Nzk%-wmWv`HF#%|O0<>C#hAJn`5gk6pZQF^CQZz%2z(hBVg( z!S2I1?t4}0zHEGkWDnE&VH9=qqH%=iEqisAV#KXS&?R- zx8gObGSLRWxZzf-2@_q`KuYTs8bc+N5Uz?0O2si-r%lf;-oV|9RI{{0z=C#|SYS8p zhaP&wPPE&@4Zid?-`lA-FUI9`cYN}II3ZNR!LX>yygI~Gp_Rc)H8Ct+m!On#46pNa|1^hTwXZ(?E+{-6W& zcOY6sIH;P0d?#KZ1+O(b;84%4jIY1K{e#16up`MbJcI&jqbCQrd32c{8rek%@OUlZK zg1dN(A`dEADI5zyn2)s9HGN{h-`nyh3P#r}5J+{FB4)Hl? z+1}RT;Jz(3`U#FLggQ)L6-_@o`55)1oP6YJEMrG5U%pI~4EcfP9I>LE*S1=#I;s;5 zQy`d-i*}|F{4|Vp4VU~L@@?Sc0qq&e;SA6NtV#n@Ws=&YLSffR;_`FfIZ?pJgB1Zt ze$P0n2lp;Z=@lNimU)#M8F4R#ll85BZT97V3G2S^h}xt&WH8*gcJm`Yb$@sG&;QW9 z-+I^ZV;}r?*Hhs6#}qn4<{8K6=QG;7*L~#u@BhI2-}8ZwT&Ea}TDj>>IQE=fT%qsU zC>Qc`?`TcBeeplP=SScB-uM6LJKpiGcl_gjAA3aq%;R%=Y5pXh>}T-rz4u<6`*VHo zPr1LQ+P`-E_;KG?IC_*-MTRY9hxnx?6Ap@m4$lnhxvN*Fj~ogRno;59vue?tG4|Xw z%}gG{KdvSbpUt{VKWE{|tTnWBxJF zaj&Vj#_Fq5o1`YJcd=Vew;L7#nA4cGD6A5OClQTF(K}*GY>x2eqjfIyh8hIu+lHe? zxif$E{K4tjt@;4h6SH%r;;>ZN7BZAbIU^R*i`Pfi4hA_ueIuas!*geq6mvN{&+!EC%y8__! zF~d7o7neBWv!Ou3>!6^eD?F+Y!J7Y(s39!WYP1nh-4p>X{SgP7jim)w*h47mLj-ng zT~eQ0S{k)GBa*yRTifm#D)cR25Pwi_jB#@c%yM1lxUF;J=EL?7u+9Rv z;<^)(l#&;8kE{pj17n&pugpI~5z)r!W4Sd{PAuwO7oR!y8$yYsQ_WU)X%YN;N>&(u z8@K5U^TJ|_`Gp1b#W?WOLg9?+*@LrJo;s6ZYwb!RfTE98^XBE(8D|4b0)*0PTVbFi z&?)4!EUYbSba6cuw;mZ!AZl#O-~cxQvxCo!UaJld`e6Ahq9XrHBQ=Z z8^5c&rLDdYVYmhk)zj~J&xgO~Rd4*h_x7vK8YZ~gAq{Mg@{{zw1Q@mlSd zA3IU2edYB$Zur}N`FDNSx13w2KV5qA{>`(`#S*%De0T+yD71U;q7Y>HOZ0&(&Tk;j__|lEa^bFF=ja+$-r@-trdb&-J~R z%!vp0ei|P&3_sr;@^-+6NMBq^a8=qhbe0Lo$Xl%(HaVaXp0T z?#GMKRlnlNZ=zvVN37N6(n2L;qYcb8_L|NX569}bj`cUHy_>FEhSQ0HNhV2lzP>uRvdAZ>Hf$5?a%+phc8~}ZdhTp zy11|i5aUdPuk3IB&c{D-<=mBnn;IVbnfTFRMk79qZ0>H}eCy2sgb?DhCbF8qz{m(i zFh-E(y&j4}n;avjU{yzN>P(JXEh;V!Kn(M1zscF@VDOEHra)bUw;vU@{>t1umn3ZW z=vb@U#n^9fONl;eb9;4X_v(sh!2oV+K<9PF*J5~$svHw9@(gBvUF#+ihGhz>kinw6 zEV%O4#l?B19c`l3Cpyz4AKF3t++lU-X zUEe^cae1vye$*+VVleRz5ur&bQMFK&70q6Q{;+VCNN1ls-Z$hj6m>9 zOO=JxRuOKk&&|(m=#!o8+i$*gskj{8CZ}(gxNw4{HOiuRTt!z|+&9xBJ`z_aQUZG2Wun!+z_0xKywV2B zWBDZ}4LJAlEV#$g#?`e}n=H6r<*9$FyS{HYBq;B?_KjXv<=lHjo)KT3=AC)pKl{FW zf1^A5s<-~gPyWc;-*|Xye!0rEP~o``{KA8awQqFqpZuM>qS*O$>~!~&zsA11@0k00 zKlt9Wv#w7Pm6Lr;(9(OYE*Z=xo|M{Q)d1n(xUcFgA#NE+6i3^;ORj<>k zulBRn#$#-ix8Hu-u&w6Vslr1=xntTm3n5@(!?OA98sd@3g`Y`S1)NxWvSXBo$B#0^ z^xC%7B5R=#T7Z=goFPe*U1Za;AP9*GbW9Hxt=8b>(Do>!=Ap563vR!4!cW7$ro)^F9w=bL*k9eiO(_P;rCybq4{qf(ve|6bjRDI~u?{&H4pa)w8ge+(h z|7)24qHyU(@94l+-FoNp(DuUG0DVA$zapr@>T3a2(ij`P+A5tx)Yuz}4(vdub`m{8 z0`d@z`1E9FYHEVGx472p&M(kW^{q=796EgP(1+ghGhnJr^@_(Q`>V*%k=yRN{Z%h( z&rCo5=%X8}l(-$P0beJwjU0R(<<)1>wp#<+Yo$+BS#D&7DY}bt zUP%BR@u0g^o0JT$W#UhHVW>j&sWSJSHYpE!@A@}?^EW^7#1rL8^)-9XJx6QZa}PgL z?_R6jamO7?Cv)SDZ}~?*^UiO(?;UUWhtG!TcieMN?b$Qf_nt5PboP$fxs!9Vcic0v z^t4jBa`emjo-e&bU-p!@-+ueA{o1d+{N*oy0Xc)y3htr3!IT3dBYGBvHncW*!u6Q& zIOXD-465*2y`^Q^SOPy?JjISRE(RUUhwWkJF-g}bK?TZ~2o9R{@pe0Up~Bc;x5NrC zoie;}>fHVkKaZqO;Z4=U&yYQB$BHe{##Xys`U)9SwVM}SWPtiMav{F!^B1p#7mCOs z=<@cM*U~du@tFLh$#vJqG!m8Ft|JefIC1+OUv+kCZFggxqM8>zFF_LyXpUw*(MD&i z$qO8J4<^8c;?XGx{}o&Cmd%o=i4si4TF9|BYk{o6#yfEa^U~M;T#A)MMuua1y7G_rKY=|;r8x%SH z-r3U=jpo$scyF7}Yz%17e0eF{I-+EQyaCLt4Xwt6K~|3uDgsTypN01y?w8Bp(W6JH zpT}F{{k3c&&y#YbUAfkj{=W8AP+)lE^1}SAz*Rf*qs?~g<~!RnQ!`iR<~8`0W!w7& zC_z8JE!qt5x?m-Rbr`#~iDqklX`a)4V)LW@y8}m#-Sqh5C-e!vnoS-V0Ml!0F-Tip z%aFmBAH^nDrNG6of%0*3r$&P__2yV_)mpGIBG=@&&7pQJ6&^W%cC^9M6f=>qxdbf) zk1CM>N}I?wPfQ<&fl-%`LDb(0-g{r)aoEz8_kmMDEoX{s7-+x|U z`gL%nM!)nspZNXPz4V^*D@((RE5_R1tvrnfO{=Jp1JY`k!$)zosF*p$!yhfD^ z2qdh`P-V?2t!&;Pc$O>Tj*1}4%QRT5;07wqUREa*^@MLzgy^9}CAweYg2oCFi6>$ozZHEBLoA~o%0$!M z#<|yNVPV3`((;Tj^szW(WQ*ah#6T_UjFR`xM5hfGNH&xP_Ry;{*9K-yag~b)jm;a| zbXg7S2DSxf8M6PyMh|$m8Y2kQ`3q+|b64g?2ZadikLn)Qa!XKz zb^0Dbm#r>>acrB^FC_%?E*iPAw8&isrnM&8P(~;>=ou!JeVXhvoK>vkB^0{TnY2oa zq!9*DG`G!d?p2em#@xcZH=%(L4H+dMw007=vbRPMub@HIbC4}w^oo~5y_JQfg~bJa z^ptkC5=Ho%?At`Bk)BS&z6u!t^i$*Gou#Ga z*m1JZjCN0`pN*O6NsK>b9fglp`1WLTSfW(zly-VxZ9=TP(L%sL?fO)Vclv)NmwWO)&f3l6DFmVE?Y zQuKun+1R}8mSd+*pGKq?y1n7m)iHtEd+Uv<*>FPewHKpB8R5pF?9Ct&qamuWMFEp< z)6y%DokaEqvm8G2Y7Y#R06x345mhnWRAz`z?5G|z2sLw^M35!!AJ zjV_gqeOVhg(!^x3(O0Z&G#kGIfirsx-KC|u#qP$|i*CCE9$&n8MuZ#E$}fHF<7elr zh3apvts*M@-hyv5g(+goHdGc2S!J-6jnrWdb^d5swAo#p+Yl+?_S^Y5Hl`=3u{Zh~ z2-HLgqqexT6d42srs}6jqkN0AP!_;~Bo3yKN5Gu<3zwUdwpbdRnx3%2XsR==m;dZ* zzviRA`YUB_ThbXgZck26-*iN0uJ3GSV=Qhzy=?6y{#$A~G(sM<00EE5g=V5Ha)Tf| z+tx`fE^i>WE9-sxiqNXlh{wkk*U9v}v&~eamty#i(Pdy$$bp@~V>iuoCZ?Zw>YVib^MvA)CC>DFmir61A0g?%a9H5#BgL4DnBR z^33_!BS#jO8Ekblg2ROuK8uyjvC;q+`X)w-IDpG$8ZY{B`ATj)PnCo~tE zk$58gkj1}63N{;a(##Mr}84Mj$+Xh=mH=&B|52;!mO92ZtO5|rL7)FO5Q z@-S*dsxa4lD!SstQ>KgWQqGjsPalW7-V5d3+Dlp8B|_~QHh1p#&MeP-@voEjedy#D zPxYrMo>vR#i@Wc>`*}T5C9V+O`O~~J<33oo)eZ>L)6@ty+p|aO7B>oG#iG&)_B6X) zwAk4|Z&uQqQQ?kFo6IP~JwrY0&vntm!1XicQh&_XoSSqJe?7ukFZ3dLB$^8PK`HEM z&T#Nc_J*&}3l`ra2|QIYPPi!6Yiz?tEbPMW}v(@cX@qf^~~9eLV<1edldg6 zgJ6z{l;RBfP-rC1vX|Mbb~wrkVc?KAfe{uKC&ni@EKx2iq#!eFn^TjMx7>1!01|LW z?95a#R$q2hRTU*7AYzTQz4YQz$t)-m5v|4Q5@J(ZxO&B!;mz*uc<1J!=D|kmZ!8+W z001BWNkl<-nP16DlKwyffa>mfjwvPdQ?f z)$c`_ljhQ`cxzW3#WyV1==CkY%9x6CrZgcEyR}C?{i(C(&K*8!hq;T2>0+oSa!9xLYnp)n4kIi{@6*<1_ifaaYn&pTLbAtad-x;oD=L;#9-oSS7JvTyFLtSmK~Z4o!2J@k#;ws1*U zRByyn`=;vvOz}lCqPOX+1+1qfNGyAxjq@Vi^9JEAQjBuN?;OmV#s%+pH-;X3@Uhc# z%e>ReFy^^v5(>(Oi{0K??~abN7cX7(vIj1ny70TJuUlHY>m|p|4)&=MEL&<@Y>UMd z_c60R>VL2fw=5ItFE5!2{gu^2?bgE1@G3Qn{W;ggR-@+FXzn%^E?(rOKD50)J#&cd zuiIN^N4)8#nSs%f*5ykd|Mck~2LD{b^vmMJQ z=Am5?;x@8{WOgbhnuvKYHQt%6H*Y(;_1Hs?-?y~X-C+#aT-)X`GPt$ed*t^XB3BL6 z$0m*(Zca}0*87w&8pQMm3Egg2uVgPrp>o2FqX@!f?{Glc84sGkVXfwfnQ<98-n(eH(iMiyCQ z?S0s6+PrshwY!#a!g9-oq0tgYXmop|J;tweaIw1x$)lu!-%L?;6tS@R0FfLJ&wa(n zMPp1MeK6fTpbF`7G1_&v6zKTzThE*m5jr?M*{N@?%zxdhzUt1|>0kQo`;p9`aAZr0 zPaq%0B{-=il529XCTn$IIZm^F78KVPH$D@Lj3w@oif1=RwC4%p`>8T9Ag6u-vUObe?Hg z61b9Tly~`dUV;8Ka45I_^y`ng1psw5hF?HADv#SSwh-Jm&V7+6^Etqcu)>g1E(^zv7-_cc)xr70#^aMKzd zu?x7k5Licg3fZjm?9sQjc=~+*;-v$v@fyEAE}lXz?+z}mtcESkZkvNMupHkV@=m=XM9+Re<#gc~*EAhn4%qknE=1GAQ9F%N@ z%Z|h8x`M8-okZV(#%ym+OinVH5|r3fd8Ww9npiqD0q+o8ho*}LMH|W^EnQn*-+a|A zxBR)@NawLDAAR_f_n*0Rg1#(RqH8oW?pwFem()jUBZJ!m>q{$(=g(VMJ2f>;wo40( zbjAU9*m;SoW{<-yk%$tlcy)C}@9Rs_o>$wfB~}Goc0!mXqEV|esZ^vhnie5BIlv$i zXaWaNnj-6}RBd)@5|PD?QwbfInLRKyb&S6hk5YxiNRST_$eQS~u_%!D&h~o1F{>l+ z`zi`xJFV7{n{K*1H^%~0_+=w!Co8!!CV9{&2u7q6FH@aJ5^>nUQbd+3?UpO35r9*T z?HvvT=g*v3UR^ad(TPOo-x+w>T`&IhCqI38;VMa0(d5W?H#&Qab}lHC|D_`{+!bEg zikJ)HG1~b^Ss^kc%>%YTF>+9^Vt_$NbiAQmfo$rS^>;X^v_nI;vj-HU_V^waS0`GF ztY9{HT+Y57zFp@oVHi7PZlL;hxMkM(Tm$rSG4rTgsftmhOr@gO8>$^XeE5cF$tC@t ze*KZQfH=tyKKP)B$C=;H^Pqv?oq7KJd1!BB6f4)0ClkWd_6)8t;~qv)6%LGdw=>WlRAd(yQ|1ztOo}TVJErSfjupRcE+GVnqNT zp<`2&FN6a;nPa}eghVigF9>`olb0GOJ}pt~WS2vmzIq#)!jUo%^TZPuHWqsW8!J{2 z?e0#(A3J&1>(hOnF`LUKG7oZr2-cQWYIvhJKUnWPwXkxqJprdw5+HEG=N)j*r^LKmfaBN&tCx1w)x9`f}x!U^fMw{Er z;-U$PWazE$Jn-UQ{NP7_X=|g8Yh(iqxWL623`~1^8Z0D|n@wR$&(V;H8MLv`J9Fis z*}HCQ&Cc>k(!wRq0TmzdM1*A0UVWvzJX&vNbr*Nr9kS8r_!z};wl+hwF$4$-K;_6q zojz_ymGRCvGAC5pP@UE)tEqRlZkm~~zBO@}0hQr2z=a>WK(8!$^Z1m_5jXm_A6V=z zWU21x=wxS-FYlHHun>b1@Z^YdnO@Q3iNCeeoca?%(v% zmwxP1pIXb#Gl|FqS$Q7`z37C|2wflKoyBRbK5}_}Wvjpbq2Kw~^5wa&ef3v<^udP^ zR;wP^nFjuU_U=4JvO7NvdskO=on6&;_uSJ%4$mdIB=_WMvpUv_q)4*0QQ}|?$46rS zk^JL-3?xVlB!B@U31B1+5Fj>^AT}ZkD_K?q9jj}#hxWd>CYE=T@UdC*>eV}b@Av!Or_ykYGteMNu%}TVLf?rfPv1!BL1A@E54UZw z1mBz+b4?Z@zoX#zZ*m~C23PqhHK8Odn@$jPxtGnIO3ZC}k!@qgEI%hi88w%a6~vnD zlZr?sOOC*3e{OEcoo`Dg#0e%l{d5q^i6Hi5u6(BFq}1T9y5JyKI;pvsoczwm|66C^ zWF7BP{K&;;7Rer!N;TX7{Ur#|(1rR*lp%D^&(EUx2vP`j5d?x-j$gU*?Wf-T6!|pF z;zZ5_)&dLe+ni4RflCrxAYlmS!mS4boK6jjF_jO)KiuyO#1V0Q`ZRY>UR%-`A9q&u>ZH-S)_VpxB@hvcTIlqOWB~0hqilyq@h*A|+yWtQ^ zP*z90RPFc+B`d`Fgw6*(jDg`}IBZ$Kqoes*X+)#3UF9nKa@e?800a>N z$We&61o!}yU2U~Bx{eTGLf?%3Cv?$B>@dLMVdod0eEN4j z`Fn-4XQSXL$yTUt_$@?#9&PUK;!hmG#;icI*I|3d;VQLC@32?Sjpe5ngfmcaV%3oF zfH3z+;ERffyKByoIoHd3o}f{Oo2#1 zh+pMNrr>P5)e#LcJ1z5^J_{6Kb>QfgD=!Q9o1Cfw`!G=4+Y-x;-asx2ydWv2ztC;_ zy|&=?p?Uz~3|Qjh!lX?26Rdvm`IjWH z21cobOc^hfr9noA6rR8lK}?`UB2}UL2uMVQ4rhy%4?Oiqv)|&jBYsXzu<+=fdKkH; zq5Y3IFa&Hs$Y!s*r&{swxHCAacL#f|{*@c+FI`*JBVcW_-s~L-gJC2Q?a^$s*cNas zW%tKOEb2jVM-~wcZD+}@GlCjQFc(A$(dv@06aO=Gq!^E~+-e_TDrz2ZHN{}Cm!vVerw5dvYB*Ig zPAf`tq9%gmzx&t!YV+0`FKu1Bd3#N!T6io#grZIuyg*wM$Wbo^#B2_Z_V;(WZPbl; z*Mko{cj4Tb(`WH)p|tAim`JQI5sf_yy!#7LCqUkWhy5%u=7iDTB!@VX%(H!bRc(y$ zbR^Mh$wH({5U7CQMk)jD=A3&M(tCp6k=m(G$yH7bl1)~LhKP|29?KUO#=Vq{9ua^WG8B;Y6oMa-les7jPj;b#vMrIC zBHDqnxE}O(e|z`rM6KRYCkqjYq%dWnc?ESS6t~WYxKu06SNKtLYxTyhy%zGy7B8{> z`P&<74Av~g$X$UVeNBILf|G6ZuAs|_Aa5uA)lWgh zNixX+`!Ur_YsXaDf%}%&2EAQ+2c(}=U_#<{;v77f7R%f}3TmEYdpVNc*{z%wH%~TD zkq*NVOzY${KiW@!O3x%@j3W-0FJDf-zw`OSoq-b)e=-b`yM4m@{Xf0!!Ssah^uThN zmU6k`I5Hxb`najqRn!$bsPBu+en3k+ z%tTa%bi{B7M|T_zOOxk1VHg2zMEesU2K_;?Mn^23apxFfCbK_&^v}QYxdq|n^R=DB zelr>#$vHd9cbQGJtka0D(Cl?QR6fGO%q(SJWZ}lvu9{tr;5vKl@v=CRsfBO7wxVLN zIB=om5~ZePPbml8t#9tNTFp9^#HJFVdhNEtz{*x&EYucb3IzpavS(n4%Qj|J4?INM z^kHcDA2)9{v$M7H#N&^WiK`Vx5`MfX1-?w)u)#EPg#A$bg#ZQlHm!m@Mq``pJ-cCi z%SK%w&qydjB6Y?BB`f7MlE=rdh)a-3D6f~hF&&MmmeB2pN`mzJ2L~Lsu_)tNnZwgF zGh!rZ7<+sBMqp>q>tLItVoW}=JTl@MtL<*zRp-x~qND7t-3X&O6M6E!m2m$S7(tLN z;}-(NO2b|3Z~)h_Y>)AyD7SnpCbBaa8U{u{q9;DM0H5pk+d1Xz(Pef&ZDHghgwaNr zJ|Q5B(-;i!3r&>4U)<49Dst{L`^WCi=U%wdGfTM=ukfp{yz;^KzPGKUN2HJCE?hWu z`^M@UH?Bum7?vw9S`)?b!Y_RE-}=+ff9dAh>Nbx$39C9eUamw=vL}E~^9B`C<761* z**wYbU=N-3!s(xBwwdKTC{LCnT?b(4Pe_7!cOz5ipEv?^SUN+r_cbzvDN|T;8i)xa zEi2v<-fViWb@$2a6c)@B&O?xQZ8`=w^fmc0PJkf(QtXKD_qJG``?jKx+WWq~v-|&r z8L;YO%gf6?8>0eqZ?k)-m8tlKLPi~e@au&ldE7&xD&iN!DQHE#@fsv7ynOEMFo>hnHm`5B*V(Bpq&m+AibnH7+%s>*b_6g7_+i;Nz&&I>% zP-tnB-R~Z(wndQ~HyLmw))$VC2c^OBL_yb6wq1h1xbe}rl4YZu1f{XO^!lzAF5cQW z2f4xYbgfjGT-)46Y94y<^3ieQ&iaPxZLP!J>pRD{``;t^)^buUnm;@wh|XX%6-aW4g@Dp?OI7!fa{3u76DSXfU4i zm_^$%Oe1LL{?6X;py_3kUKuzqu=doiD;VSg2BWQ#aRQi%E&M~9VBxj$%3m4#Xr ztEF;N%5Rj(3?U&3T7yt^2*%ZUm5n8y;8={NSD|B>JvA`B5#FgRvV`X+9=OOn`GIq1 z{^_s%`YSt4KIGwqT;`r6p7?wS!fo$<{PTwk@I5>F(W6)2nbR1qF|fNl%yo!W|rg z`|2LJCRfL=?umf``NXCl_(3F3$+VlNwAc~Q9||tsb95{|$L%7J&5kW%C*nTEF#g0- zQy!4+pznTlqJ#HuzWOOWc$^Z4`+t6C|A#dLZ&?ds`-wmH$o3y7=%9+zktfb^G&`MbidQD^u z(tj+_;;yMj@v^YXLnPXEbchWr5P;@Xjc9#B(nwuHahPi05Z^@Bq0SLl=TvYRf=)u@ zr3(L$hGN;g^g|laG zZ|>k?w+=}Bd=ltpgIq@b!yjctg;Z#Qur)#%+m{>yfqIgyy6x~VGe$XwA~WoZPA8&Q z%k13~mmj{wA8A^YnUfhS?TVW*yt>CDax{q-T}Nuw!>0}1c=5`iife(iK}v$G2OSS{ zLn23}$72N(UYJn%IMa@4^ck~<)@W5Ycj5fP+|0t_ytQUCQBxr;pD;Hgv~q@;#g0$R zXXW=fH$Ttfzp%KdAd=UenVMm!ao){0t}@NfPF57zXSuPib5pgmi%VyhPE|{#nd;<1 zSnvxoQ(P(|(OH(98W)tyB!>ko;sOqu?G`sZS)P4em}##oTZ8dkmKP{hf&#b(v_yJt z6u$#h5mDxakA{z2e(3V4nNy{S>f!L4*Ke=$(sWzyWa_;_uh+KvQXFpGSY=T$$04E< zbGS_q+01AvGyFTh@RL9G_+wvqbRIDta1q;i9%s7-y2nBxgI4%yu%L?h?}; z`!S_9v2MY5!>R@ZAd+KVG+hy-JjAbLQ;s6!4_5%r1mEIe{9Y_M$@!dE3^*Qb02r?H zE)OD~d2gtcOkOgY?G-k+zz@RY>cPsbUTCnuN#!pHGD(V6M0{BS={ zqBGMtOQer!o(12iQ1gG~!SsYTMQ5H};7!t-yC6n{0bNOBbRS|+r$hQu5kUAOh!zPh zkzQfQCbT*3wp%QW0ydJ8lvHTY6Al2;FGbRACWll$iu5b8{K0;9tjavVjNfkWy|Jo;c2SRYuGEJ54o;?{pgpiu!HJ}Zm>T+p zNsi|6NsQt!f<2-JOD=ok=DOgW*{RyWUbDNu7ZjXtR*@`b>uOcgLE%o~T!J>R;zuWq zgUHdRfsp&cj6u}H5?O$%eQg8ljpNB#nw7c>rTny#^ouid%1ld1jwIfgA^FLQ7W09J zV^;wNibc1n0vhzTrPRlrQyfkSll4gv+h;0ZI@y`&C!!Gah}hUY*p*#fZ*fj{X%A8X zrf1Y!?w>s^c7Bd|XX(_%wXL1mh1oE&bX(|TTsw;9z>hxuc(*QSwJ-MxPvTp>aB2yc zBH*7pd-mMIyl_qxEhZ`z+?ye%z}PV^)SVBO@!}BMM-ZhR5ZLh&laHXY>S#Ksly#+? z+1>7YU(-%jh?NPg1c_%z%rI{meQ;!=?J%=2U7jk8-CDh~gzjbYmzFPHtIOxzSJOj! z5(jOo+1VM}QN@!dL5U&!gY_|}G8OG;P|D^$^4J6U_F=zt$c_I%@xn`Yu3KMI#8*$M z56=haiXoV1;WrTjo9IavIo2SK$DfURqbhkJPR{CfoH$g1>LcP#uww%4_zdMbsk9^i zqAfX{N*EXv&KS>%-@>Im#+x#&!ZQUeS+yiWA#NYP-M8UQ2TW9><7y%pc~I(ecGca- z-2)hSF~ z7&@x5F#M#uG}L1Dfz63v0;(gvBrLH0Pkfl(2w}qlQn4$=bEtzeRiYcxq$Bsxi&YA$}O-eEKJQ@JbSTRD2o#(Z)%LkaKT@3_4fLxSXjJpF+Vj+0Q2$! zP=WzKTrjsRMU~kp8P7=n%8iX2Thn2G z<>swcS2?pW1RjSlQwXA&p-Zt*;FAnV3G%0JYu=&v-M`e7a1WoYSGckhREPQLpR3Y& z@>OS!!7*RTiw~^Tn|uAi zw_knj=IssO8AX@J3Z+7o__DKeK$up%sN3#nf#O;klt#U^s*Yy4rygAX{A({ahy6z{ z2#uFMas2S|#r2&n3&~Xyky@y5^wNSfZj0WUJu?ppOtLL7BL3BvxUarK!ezs^!=9i1 zni6_1&hR1@^H2?GVnL#oDG}z7>G#*dMQ+4khPtSCJJN}$0NZ()FGl7cZ)D0Npe`ovAn1OUf z-m)(L%7Z88TjsIl<>h!6*`cM1TIyO%6UW4;Rmvqc9=)K5@N6J*dD=S%AV;wg;D|o} zL9y2SMK`bCsFfdKtPTMupg&A75w{olDihjhAQkMk3JQ==ATt~NUD^_rZ{@CNDGgf~ zk5T&ABBmr025oXZPp84qz>Sbt2OL9^l$MxSsPjzf1Y{VLNTvy}g4YDEJOeO?7=`IL zfkdWO#9?1uGuZ*E*z`LG?XIpSO5Er3`VG11P{3exx)>hv7AmSXP*xzEk(og!+N&}X zxFK(~`jl+X2YZ`J8gwP8sdqfe$tleoMgaIkd2;L4t+AfUZk((9kjlMftMhX-o)AI9 z`sFXWTI8l?6f_>Tx~18r!}gx&zg}w_?qR7%Z5HdQ8lLMLf?~R2^fUP^kz3@64l`Vu z{o;@*iA9`x5C*HxaA$iz!POME&5IXLMMxCFT%^Rsqf=rO%l_ugyxEeu8Xa$~t(|%F zk?QR9WUb7i6UtRTUq3+jk5&34TMDd~`DJ;vLKi7AH8ay_9@HjSfU45Ar;4M)PJ2E= z+&N#%)pBtC$xN2dw8R->QwE-7j!cJwFjCJ{`CkykjKiA{R4jD4keRv1*$GJoO8B^G zzE){=+B62Gd7J@Clz77D#C;6g<~b<+mj`rrE4FRrazUEA3?(`}!v*0k@Psg!Q6 zuIj;}r7y>mu`|8_cf$y|BFKIEXAaH0&m_?)Q;E4pnveOn!`7d8ogM4t@HRw&|(7?+y&+*+#p#;H?fEiC0(%S_Jv`L#!JBrg6?CW&hb>I1?f*vAdZvj zk~;`zu(^2(41Nl1Nk(GFTlmc0FGwcmzw_}!n*oHHncnAH7Ulkf_D{y=wDipTPY8;i zo^wFIlTH~Q!E-84qIL=l6W`__xE);QRfOs z6UQ(EW(SZRkvx*u%ae@E?ZFZIy!=;?#9-p8M3d;1l+Q)p$!y?@c~V42)fOHxaqK|NZNO&%`IXUP!)2EOdP@5u;BM`u=q_1y3-NRNC#61kx@_=b)yi}TG zH3$+Dcz`D<{mWWA6p{h|k%JgVX6#`9U~6O3S=dbI@d?JXI&J3us6`WT{CRbpLKJ&FK25iF)QQ3l+7a}mLMno$f%jh|xPOV?PcJEE&#S`mo?EIix zLLEk{H*Y@slRt$BT8XLJ%-(K2Q=HuI4GIJSO%^5DCcXqs1;W1=COA3_*_uH;7&$L% zC}Cq`XQt-Zood_asK=nP9iah#y>#vZ)5gl$E#Z_x(_=^uf#7wT&y+R`f2P z85{nk=RWkSfA}ep$}zjlY7FZkj=Mw^Kco|(w1E(CC|*H+lTxR;8H>6xas#JY`Q4c* zK$Kr{a5K?$@c z@8?}osR!PKnP`+!`M~ZsZxF}RQ><}$x=}+jh{NS~qBHN!$Pf45lu)Oi=}1t226`5o z`wtT55&HX&I63|Lrszxrv_DYdQ30!{_CMQl8g zzC{3j(A$VEmgGsIWJs5Y%WdVH@K!MeOwLvsdtGJE3YF;yDjjlKLK_&BVo`FxlMh3S zzAIgQP8mT_C6JDjAmrFoo3}NRsD$PX*`2~#j{YhZzqhYxA2S0=#&!>NM1i*ZI;LdB z>4z`R6V(nF^hKVi$}%@Iv$?lQm+3bQWA!D^4dS>j;V_&<_o^|%Bv4P^$3-Ue^l+ta6k;lI8jx6Fh2-Srz@^89N+DB zPnic+dn^$3*CPcDi6#Of>nCzgJ@g<$iC&ECcDiBda~`()Y9$h-qHc^jKN0K|0x09p zqHlAX^IMilh#V-V2(`#DLGy!;Mm3R%x#_77KKb}R{KT*R z%)8z-UzwR+T3Vc%QW$7;(EQWS{pl(X7NCp`5$8_Pr6(zyOdSEkVZbL8SPAZ~GW8L% zWOI=in1CeUOyhf8ZdJnsnk-ftc8T^!A<}}@IuU=V+(Wd6)?rJh$+3ZkKWM(h;;0Qr zOc4}7;WH0Wv^in|q6llE&_df7MxaTc0}@ZYmP~6t5p}z2f=ekou{n*l0{H455@@3XB5yVoPkEVSXT(bJiXK z(8M|!!UYTp>Q0CWv7Hi{eho7ZG7w0V2>39{#+XYUCt|uuxCIH=mH8*0eD_N)ztq}` ztn|bp34A^M&6_eRnLM)+60UY5ivoMTVW9^2R``L#yiT8>IWU!I#~87Iq<&l2nVgr* z4-zM`ez(~=w-CuhM$Z<_tg%p=x_;wMC0E=GiU8xxT;|Nu+}c*XRGY@I!Z`@V{1!NvMW06rYbrmg(Am8y4PZ`(P#-Jy0j=l zDBtMy*H`x?1|w)0nQKS9tSR|O-yMbVPtbLRzze-@KKWFk%Bsm@xdOW z>gh!GNP!_(r?s;h4d=?mGn17EmzK`VRx=Y*Ve1?8j`>W*WtGcg1&kKA z)rWxVRqao!ny6(4n-?LLB~65Xb~KzW<@fVB2FK%!Jg0@0p zt@zWAJ^WKoKl$6A`J67b*7TKYE8DHs1B;j5xV5n`Qt_T0}&KE$%FFgL#*`>Mv;kQ3|b$$EP+4D!+8{E|> zq$x_&!>~{h5P%ZhCLx!KXx6mz881#A_a#j1fhpdpb^7Fp4Z6mj3 zdg4J7EmwhMvQtR$AUXL7vN)M9nI)$iP4^gL(NEbrfEC$}3JGXILfYIgC2&6d5y}~h z84^5qa(3~oq#%s(ub{rkOapMLDKV@G$!&|xiY4iwf6BsGe^UBJ^ARnvJZUfkG>3n4;y>ciQ>gmWt0eU zd+6NE_U>?Jcdw!Spt6@os0Ck3rf^&sb(n#W52$Npy*ms~><@v}CMTUApXqjY=94cj zu{q73&E@#ecsXBcc3L^ETI%^Xo}tfE}v;fUM%Xn&|z?d)_;UTz^~y+XdN2~9S?Fu7pfR&L&AGn|_>r@AbRuWqih4l(I3&ChM^Y(M(o17gG2)n31T zOB~K;KmWO>pLm3x)!EtB&INDwn!FChY{95syLv6?Wzy3aPYMb<&WAMoy)S&3PvODS zOTYNsbGxnf|Ng};ZQ+pab=(oL zH0qmeuo||V#Juimcc8{m5lP=RHS*F)2#uvstMr?@S$#$+qWv~2U+^^#3F%&Kk9?*$ zMFI)XFBT5lJ8IF59k#O*GwgsNLwFIe9E>D+NuzZ3Im?*t3}5NoNqj! zNccc>#7@Tc&c_db1`ujQJT>E>*!CSshjnt0%P1xrN0AR&pfXvsrb3 zuZZ`A;wu*{JvRx#^dwb!0ln`L-V?+K(MM4N_(lqog~!;Bz&uqud?oWH3A}dQHAMJ` z`J@RjMX`#ojey!v)e|_z3}6?@lo6CZ0iVWmN?l%_or4R05Vl68@Lob)px zwZ+Ay`Ree(1E>G^^IscjFfU*+KhfCUlPtkT?A1Q|ho4Sdb}5FNoDzS)A?@S`+gxrb z$lJrQPUFfKzwzFge`~%J!8v$ssA~}m{|skb@;ikka78fmSp zTzllgxw5)=*H@0Ye1@4@w{BHS#nrV{kmII2x5)q!fb@z)0h5r+-`gEN^;2eV6xc&N0-9}a*A4W62Odbzd*}0qH3L>5eKcBa z$L9%gPrrWugXvYy2^rrO#{MYVlB$`|kXa)H0cJ!s#q0>r?c`gD-xoRVK-$pq3^pGwu1KAWp2>%t}j+sHQl7B%wHJ0sD50I$Y z*)P&O_O^9jG7|hu*%tKcki8}hHc?b4ZWdvthX;Fm{0{Plpi7v05&Z}u;d5s8p=_v( zIXY-4l+UmZ*&iV43hs-* z#5SZ&gR%(1^5RLXU}!|i5R%yru(07N{wpwCEAf=k46VQ49Tke}yL<5?LNJGa)rGPO^qND+WN{NpO>+tH$hZL~N}j-8(0cPpL{SOO zD+)Ao#!xPRK+8n7=ApLep}!`wb^=^Mk-afw^jq{>*2aEfUYLXW91R5_{G1du62lrY z5a^6Chb3wdUL=p3$f>QwbBm?}V}>h9>@kq2%3xq7y~JFa%xM%uOvt@&M(ZGcgT%W} zT#$UaDtSi<-U|!Yu3bxI$>sY5OyuUBga3vnBw4Q3aJmScVG3$=nvCmzZz zv|kMqcNMas(1BQR9%xmDdIKr7$@my$#nH@ae(a-9@)xL7}^?`aH>EA@sg(XFm! zgQ6iMiacGd^b^1I??3cuUK#igp@$D$P3+&B>|TYe%lRVu1Jec{}k?l1kJM7CabAWiRhB3EvAqGFCq zxW1KRqAg66a!eJ>V7YQil42ymF%!pq#z?72KrPo0n2)XOHI!vza1dkQoUrMWA?Bu{ zH>Tcg1k-Q7asAfqTitd;9B$??Q(KtBrY4Jpzx2~TvwCaoH~-|bO@mCby1UH|g*Hl= zk`<6(J#Qiy6am#(+(BVH;>`w|jb_Y;2?4v{kfuYVV3(&j3R}ufa86irlNvVtAezJg zFoJOsh%B)WU>m~?YfRh%;SP;9SqPsN!i6c>wV$ch%FsdY2KmKu6+)es(nx7gb(~>e zM`5+q6zT{Gq@Pq+V;q~-c0J;P!WJ3^rI^BD=-DqC9g;TdOOqE=M?aNypc#{hXC=1>ZO{{RLb~`MQMo5v^5I$O znW^@Rj3TZ^6+Sv(2pbZ00sG+4jDfKg5YNND0m@~uCXyp^?HM5ixdt9GAasWP4oDZ? zKxl&Seib_s%!zs)<*C?}kE2><=q*vK2WK%hk4MzKA4wmn(^=4%L!x(E5&mKFmq`mv z0@c+E?jFQ5Ie78OwT<;`ZJMHj{bZ+44Lj||{;om^VY~NujZGF7>pOe;#0W(h(`lV; zsz2D>+dp@4#!5W;u1hbx_}V%*?q1Jr*rtU=MI!5{-K(-K_s-iA#gv$>!A* z1O~hrDh=tAQ;N1FY6pk&TK%NsrVuH{{qRJFLECVxK@yxoJe?@#k5FDVx~RB^N`o9E zGt*_|7#`Q_2R##e(BPY`@9kIuO=`#$+aCD z$sH5D|A>PaaB9|n%W*$_$BysIRIOUyJs^rkemP{0s0&ms%a#Gq84wXayGWcr6b|{1 zB57y>5M=fr7dI%9IB?V8nukYws~fjAcV?$+^R>ydr+LX_`>FlKFawl{$Oueqs66Zr z*^vz-xz;XGnz))+S|TPSJiZXZDPbrjegzvsk`ZR*CNLqU{1;w$8CZrQp2%83z5+~B za_{os9if09HizSddZV?t2oZ4(1P9`UnZg%H8-nV1P75va8WiI%Ah|PK&}KX_idK4O zeSU*GqL^r($9PcG$-#+eDCUjpmRfLbdVX6i(#q7)asIf=RH~{%-K-&Yg{hhRsng1q zbXu+Y{=O=n5>|(eW<*WPsG1nx+}t`IJ>2Sy)n>f5P}k0%eERbr`^!Hj&L@*A-r1?Q z2Zsj={`2^jClj;C;M}E)tJiOiv73yKEE1(Gg_D;u2KAY)OvNp^+tLG9T?J zMHC4uQs|6DNW#P1bRC7N!MgSgvKCg?K{8q_);F|8PYQ8ch+_#e=aN4TJ=98YDO)w9Jk^|> z!-Qz|u)c~cJ!F=kqb+mriU^z(o6q5)$pMIn8cN~L1zPzsu{yvc^d@vU$tw$*Yuep2 z;3wcaRwVh?T5#V>qK@$0T({E`9Wa!1km-1Ce!A4&2Ihki(-S;p?(et74F>@8FG-p? z+$Zz2RAHmIMA>lTOk5Q4L<}@)h6hRo^$)jGvT-TfyjrmNdknzr20w6T9U77o-ud{U z&48xU-~DXl{<~f4jyQf|xPQx4AzUmkFZ(1b2{|ALilXjramP%a%14P|W0j$nVs3yt1={9Z?lD<0Z zp^?P92w@7N7W!u6Er!6+RcdtY_Kke4`WN2+!B2hWtAbs+!(MTIrng_uXmYsI?Qcb> zwb7H8n;ZJuMM#qg(M}JWDNN2%Ne%~l-KM0lLw5h&=)NK|*hWr=LWwkeJ!&X$I(4r)xbhca9T7H;p>iD66c~uj;Cl4=;5nFiP55zrQ#$ z8+jCzD78-y%^1MIdoWNzp7M%0+?m!r$J!!Bq1TyDuaDsZLCpuTf0gRBVn1L>9386_ zs??8A{N5mn`MBaEAA0Yv{K~HYlh1wbv%X>t2ZOe7{cIsWS)Cp94&3*dC!hTKSHIR# z5nJr!q4crnx(+_iUpV*rYp;RXu-92aE~|hUkf&i`s27%$1S4c2F^PngCgwAfQ$aR} zJb=Ut5`rDqp`nqJP~RqAk#EdAxW>|?e`dj7%9vy3iR$9; zonx-dQ?^jf74vL9$gew&C3bNw-Mu?w;Ivp2NTaUcUL^N^49gU3m;$FdW zJl~@GgD+T4D&vC$zu&JB8cakGEia$;`OfyEFayhPj?Ofs6Di(L=?EP`>uo1T($h}9 z2DUkgc5o(Nl>H;QTu_NF7NW4Z2Iij+-*2_z*t<6%)bP z?E+;&>b3>9h$o^8A|+*YN#Sobx)N%f7I2@a)}cO!P?{o7#7jV7zT1(U6yn)YpY0uu z_OKw+^J!K2^%lTWkuM%GL|-PyA07*naR5Vx?GA^|~It;UT zj8D$!ZeA=*BH%OmN*EKOsc&Yc&}Kn9!h=+F80FCO@oITr_bpY7GEr?NdHWdF($d_y z(=&UIKk%i`Vk`%N&eW2iDMrUA=Z*CzF(qQ}QYz!paaIxJtDG;7P0eH^&3VT@BYv5P z9l6j+Yg}tz48xW17}Yos9@XeFXua}tx&zEisdbiX^jf1)ksD+Dpo`JvhU1f@ex>i& zKvd;G4Drj6LKj$->fCyWNBS$%1X>ILx)I=o%c9%DY6SBRdxyu$AGHR(y@n9WzM{!3 zZ4blrHu#7C=zr87=IrUE?d?s83v`H$?ad44FYFdSbkYtlj|^1A5}9J+~jB!H9Xp;==@Oj2#JBnuvP z6Qmyv<)8NnVif2LlRpT7L?Ab-BqyH@1|P0eAnG;!CEy;9^k}E03k3M7Pv%G=Rfbcf zTzm6Ee`L1Cb@c4ID(O^V!rZUd-3_i%n0IqfjpYSh2f2Ju+0uAnGP3tZQq@8ZO90MQ z#zyk8?jD*t52z`G08nBx7-Mrh#GU&^$Zvh?TPcY_K2p2E{Z@tVbFlgFFJG9MBoqV= zdhJA`vJ+a5K_rMz&T}~a%vlVC!O{@99bi$+5BotNE945C^fs9y%#?ISz8vd?Qh1y@ z9QK&Hyp_$-?9phw(d~TkAO9K0iBR5u<}dxyFC};SQTZ_WZ<*wDWcMGmpRSRgPS)t; zgzs2&yz0BfDetyIVMm_Su5~4J&xTiCMj)#DBPq~du-Q?Q%NeYr= zU|4~H#7a9A1~TdBoq=>~|2;k3-flz~Vg#SX6Ys&U9jout|My8xM9IEhzTSeJ-3#l& zsuX*NH=1B?NP;C0;drsIBOMFhr^b7)#E386G?WHEnE|4%n+K(5lcHH;d)U~BH8>mk zwAv`mCN19NkuAYzLJ<;cZz6dGfIA6DyE3+zbb@>Y-VI5q>Nn@wa%;;I{kpPZqph9s znbO4a`SW{w^>Xp(#@d!T&Xki}QCY<7{Nh{?4OO{R?z%dU}%ER zqvNhzIeBBbtcbmY5RBk_80=QwSXp@B!S_7(p>KZj59JoqU+ziY>d-{bljv1RA|4Ja zl}KUp>cvQfr2)n(gg}}ZH3$9tgg{0%{KMH2m#P8~$QVMVs17T-b&RF?%Z0$?%5EI<%ba4I~*KdR| zFj}-_045ax2=Y2q3#Embg=;tOTz=@`uUvU)X71Fj^-XoBBXc!~U@bevuY|;G>HIK+F`3JcmS&|P0#k)%cuF&~*IR8%S= zfh;0T6Um*?(bQ`AJP}5zfYDG}z?+lfBL-y2V!D#?7^lHFp5Sr__`G+$?QNx4-)2KG z9Q8@jJo)*19em`2)&J@5{`@O1z9h!M$sU|+cL{$?Ov3amNkZ|BHij5QU2>VFx!JZ{ zmSSmpuaV=3H$Luaje$yq?RHP6g(XE_vNH0DGfSst&R;H;jOXqX)Y$&sAkc3;Gx|I+Tk=VKl-&AZ6Y7F zgGgS*V!QP2dnGUph;2Z{1}6((>S7YCyOZNA7x6xA*@J`DxG=aux*%kJ2+l_$wd(*l+*tpO&gB$RAHu%DauN zQl)xxgB!De@`g$0sH5`}KY5gh8I8_eyodk`)YPOz2+-K5g>;4DG*-4ef#VdNgmcTN zidl(aNU-c`N~ZrJP41y*-t~QwS zA+Tr6UNRj4BgV=ql29Wc5L7zOb3!FiGwl#BFl#>i&{h#>hRxTo= zZVpm479zN*a2j=%l6{aFY!Y9%XF&HY!T}=QGlG(ZIE#s3C?!o1VB73fc0vaY2Z#1t zY)Gs(<{svSauRSpt{4XX3#$Z7cY`_QDx(3y?djepjDRdc3H47{7spECWlpfekU&hB zGnG8&&zhZiQxu@_r5lQYi1@sBApZSc2eak;w_mvO_y7KXEnNA3j*CeRKcdL#G#h<^xYk zb{RkHJoM~S@A<{QS)HA-BFU)2<|r^W9awVY?#K5U=Xbx+{a5{n?El#ZfB%{3zE=p! zxV*gVlm3{`O-INfBp}2cAGTVO94GGF*{)7a?d$9jG6D-v5K!cv^bz5}&Wma!v2wr; zF#*D?9?%H*$;brvfK!YO^5%cU@wz^|-R^)kJs7|ek{^GQs5oX9SdZS=+GKIMC!RRLKIDvnIQh++Qn8>)>f&&3ck8i7pV&Ou zQF~nxh2xQm&EYwih(L|_FI<$sFC&$vh@d+Zww(xIP)v3lZ1V&?r?mcuc zOem&ndTL6-!MDEgQl*mp$&bEgN*&1Ql9B^AH+E5CvHs;@UL6~AMGQQ3dYO@lNO$J^ zISX_9*6pqtGtc8wA{nj7(QzkK%x$-0ARP>%IyKvFba4f(WJaYZzQhG?h6!s? zb6zwm`GKK8E1UU}u^g}GCk>j(Xo5_Ij4edMYC z^Y?B`gyQB9P)0N{n26|=1#x`bY={bq7~;cbdrE}Z@#x3i_dza%rJ4DIwqU5er!GJ6 zz~bpnyZ`!zk`38jk8vnMeu1rEg|K}m>wXuI%tfeiYJ8Ayg5D=UoHPBtFwE z8GEQECkO2~?Ja}9clz7^`x8I$6Mp#2XFl`xKmR!#O<&~u5B_c6=>E40il3hJv8R9b zpivxFtAt$BRX^BA%{Tz-dt0X`Cp&>20#U3?7-OKf6>3ZJzbh8S`(@(S=s*O5fvgf@ zAsnG#A*BnEATcpCjt;s6l)?e{|t~V!-S!UXdYK6i~n0B-}JRFQ2CNU~8W#i1R8PpSQ_v+YU5MQh& zQ@nF~YvGa8YCE%K|A&A1=gyu!#X+}Fo874&?CdM$u6#9bg{v99Go7Q+@BH?s6dOhS zR&TF8^}+W}&&=s8-Xp<9L=O_;&MA7wLlY8D+b~5jS8P6}li00}fB&E{d1~(B6OUZ` z%8Me?wW%u4P9hYl7Z8fch9N*69V$+Vd({}k`ZOf2Z;sDqi-ktI^5OK_`kpLenS0$5 z$xU=QX0IiEn3gb3IaA6QAVGd3=>Zv%{{G%BPEbE+zIJV8@yt2lsIt)3ZmmozN0#Ng z9z1{b=C$4WrKQvQk=l2exwd3&)zb`W&s>g8P-9mBzpQw>A{3Jekq`A2n3ouJ4vb|83l;@zm zhRhL3$dRJKc#;r(lNsgSx`dl(9w)gtP7luxW`MIrOk{wK!?C`>YuyO}bX!XhK<=hL z{=T1V^@cCqyf$jrgX~*83*Af1m56!(Z)rSVK8j96Y;<@P@mM0R1q~@V3N|RNnRuT< z`G{_4=9x@oaxi#HkEl}7piIPNKvZwX9iTI!T7+7?jUBaXQ*+H$cXGCTYO#3r<(KY{ zk0dIhI45Mq_-qdPBp}~^9C=FZ$PT{ieSxniM%YPXS`rB{CMdSx0rBhI@9`SPW5PVv zx7N;0)m~V=^~V0eLuXIlSY5wd%U80)rRmat@^}8zhabB5)NlRTfA@*c{MOfA{VP9J zJAdiyw_jS>y8h~g$Dg&B-qV(To{Z`T9ei?+xBs9Ze)z*5_S+Y}@CA~`+n@BW`{>Dw zoZR?rXZ~#urq_PQj_($11Bk4eIn$G+sVT(=D?m|D^O*&?lbHukpL^rxb?~O30(ecxkGObx4BojOM> zfgLVD4#J@ILVieqfRYqugBOWyPlhMZaqoZ}28{rn@G!#}LxZ3Gi~{th+ll;wuBAjj zfqs@1f*V`2dR1e?$|PI15X?xS#Gk~Ukg29>Q_)Q?;$oniFd$~--u(PDDPB`AJ!uu! z7jYQ=3^J9_54~`EP$+uTDI!$Pk1jm;08`D&S6*%n)0*|}K(mI#DID_Lg7Fxte?|o1 z7(DKU-*{PJDfx|!t>U{cO-)s4*6Q=;#{1I?6-h>ScDLJ+LOiDTNUPP=WTn3seG3TR zCLI&lS-rz5e&gniguJ9P<8+TsXU23<+f9@sJh!ohDjjneJhD7lL5e>7k&j&a@(WZr zR;*y)qhsy2Br5QmGTNJXY8aE2>6!>zzjMNo&M980DUfMXl!&Cb^DF#0bKT$%*qmq=U7#Z(C`|`qqs`}CxUf#U(S3mTTQ%j4#f9=j^fBo0< z<*G73M#2fh2Ww>k(s;4JXAu^4bBF^)oK;Dy$Rn@6`t4)h+F;%mD{(c)28&XErpQ2WGK0|w$y%19Ct;#b5!$!_%+U;#PV z06V)VsXO=!!g3Fy?D*=SonTIZ29*2|sUQy|i3(>klj^B;IThssG1O#fiDJmbu`_E7 zvTX9Ca*k05T%J_6Fh_Qj3Aw(pA^($!+YAMt3hRX1N}*LaNEUnc!r97pJ+Eg-z6dR$ z4Fc_ibdVlxKLvZADGy7(IyvrRY_x0kkV3Us$_%H<mvDt}HHX#BW5Ys z07v=juf8&Od3n%jlSuUt{>In7b@p8siO~`6YHc#=s%lMgJY5<#TL%nBj91~nEJlYM z26|2Jl{x@FrhGz!g~`%>w>26sA9Yk)o8?0BUic_}Ue1+tSNYXn|IOKj)3v$9VBX`o z&7JLPwTcYW=;(FVZ>_Ix?$lb_qR)ka( z`$YLY&wSwa&i-Dre!4dG(1Q;?|MF|O$=ddvjSM|Pqe>@7Ku*Xa@mfKkN!T%fkm%#_ z^hj!DVq*`9*jx!En!@Z0<=X!44od|TA=bqCKr#ID)V|=vk>X@NndwBDxYke3i6k~~ zm?eP25`5GHgUtu*@LqU@{0E-?P-T?8y}enUEG?Wqy;tA6xN!Q(%a45X^=~gN&VBR6 z7jC}s+UTf325%fNwz!)RgBf=j9XFD%AtfbCnTkHfV%Q-`Fz5rnLh;NXN?C^kpJO{= z3|$JyM6Pyz`4Z2TVoi)D{ccAkL-p}=rB8`NfaKVi{Sz_s=&;+5_@&Mz4OpHmPVK^ek5j{l>O1BrcSXyzi;^ z|H(J@_xD=O$?Z;`Q?A!oEky4*k`wX~+sPPy(7`|b^wa4GPd=Y{=9!=W`JX@eYUjd* z3xDtL{XILs`@6sU{PVEy&v83>k@OkgXXeurPR@7c$v$i!^BqGjCLSX4nnLgg%?4Wv zq}s1@cXx<8%J8=O-JSa0!NER!SXx}v+d9dZ4RJf@F$@aifh7JT(VJ~*CGsAdxPl_o zFO^7r$TrH=?)GKNL*onQA7I2!Krk`mr&vs44E7P=aaVaTP#Ua@g{F}Q{2y2t&nr|T zQYE3M>6@mXDG<4{zm%e3KX&}x-HhV-D_5ACqG{7qZGKKW!6poj*P|c=d4YO7>VWpWZ=zhmj!sH{^WPIfRaPd#}Ix z>a}Zcpv9Z5*3GT$%|`3moi&V5fX?RbzRc3Sdb3iiU3uk|uYcnkpnyoe<+QC$WfB^V z{R5%*z5deDk|SP%k6WK*LfI#WhfpfK{79#IDvGygD{2EFO*`AN?o zp+-UsFnU8GEPFZA7@|oKbXic*)ftt?eiT@xfMU#82<6h@B(MkdCvcExV+1n!)J0%G z&s7SO(}nV57nha)ys&uc-09QHi)Y^Z@S_`dZa)3+WmP*$1zmTvy)85u49AdoM1P`I zn~FMs>VHO0?NnFFW$JZ_To!#Y}KX9 z1)Ju`x3bB-<0BpC$=A0X=i44Ux#VPr@#AFwEj!=mr?;H>fBUN!ajp6Mv&{Tk-YC7w z4@8= z_au`$7T6a&1)c}t2IC2j8GH7F@BQK@|1hZ5+iWQ530$3=foHG}O+?`PRE-&dYkGdV zhH`{dX9Uu__^}Il*vlashmM8^jk6^$|N8t}N8SXVW zZ=<28z=@cf2#2s4KuUIFB;qB0>6d^0w}0z*1o|XM=$Ky(IQ?~eZ)bOXeQj&l-MF*1 zNEw-(yY#@rS2gX!4Jb^boCi_FJ`M{-geiD&|mvZ6uojaJNX!=t# zbFGbS9TuNoxmvq(TlCNN?j|O5N<;b8*Typ(DuoLdpIBSF>R_^#md|*CEycpcqPx2r z-#;)1jg~)b3KF51xrv1b9(eH9+O1}D50Clcm%sSf6YtvFWi@h#Hox!o_IEtD@m}|~ zRIc|)48M0Q$cX*#KDd~kk-(sLj&Cs+@tue|cehd&yjQc28f za_ji`?jijd51!m1-QlMt9z6Hlb8k8Rr7wNy-(0(Drj6<)RG1LMrcJO6(cAh# zD#HHMbfu?)8T&}4AeV;~lRi#sUBZ@9y|ywG0y}oh0xmt5Qp`F`oM$RASzgmBg@vh?EJdKM%_ppiUz5Q&0p_Qp zvhUHtITFjoP#wz5tyixqVla$^%u)NG#Xo__5n9a>@pk?8YcFlAed~>*zwxn$9xWet zre{9)<=0zB*;a4x(o0t~L(3{~d|3Fg=YHymC!bUa{}cc6*O64R|Cyz!{e!DFzx3ka z@j8`F^gUGfV*{&O3fySzgmc;=~p z{42jY`^e?#+4-%5{pkHZo~<_c{1l5Wo%qh$?Z-loo&W$K07*naR8DI@n?1j$bW_Ul`X_OqAg*IN74(xL#K_w-x!Km7KMPUloHx3{r= z+-_$VA}Z|u?aw&Q?|!5EZ<6kR>QkTkZi?^Vcc1y^bmV(Y@^=sZ{xj2kLkgTl73@De0G z>~hQk1PO2t@XY4f(@)40nojn5OpmJIi;a!cyi>etNZ;kQ? zIS7Zd|9$qv$Vu~U2Sg1g{h>LoMut-3Z|StyEK{0 zh&mSt*ix4Hc%*c5HZ#ywrO`R0X^Dl2;>B@0NN(1HIL56q*^hnvZ~o>d{zXJN$GoM} z;!N`pGnzau{VA?K*~XE8vDWI!jfMgSF;1g8Zf)-zHM(&1Xw;gJve zp~c>{{lTf<`})_1*7nf>}U%EU#JwLp$^6JK&-BVM!$!baE&C#&G zvD)IR%&K+KAMYFucLqDG@uwE2`~CXsD{En`Qo?AIIXGzb+6r5GB{^RL`^wt#kQG`x z2S5Aq50LD>eS7Wp?*4JxAc+CY@gZJZI(Ke$eOsL(2k`(Z!dJikt+j5?0^tD`G=K}7 zp|#=ar6h5Rf^^p5@I_P6ge)))C92+7LDlbe2aJZ5Ac!&nltCXGD0DT~6x-u56gyyV za)R=r=cYH2+yg?Qz(mlqm~(&W(wI`Gg!n%enjcpe22gtDiT50Ix-VXPy-+S5Uj6pD z#~!(M{l-`!d%8MxY3a<|!tAg9)~~6sx-dW6Z0%8ZrzX$jCT4c-pw20+Po5jko+KtQ z>)l)Qc-p-!9Ru54K!VIUS#s5>QyS~!OOvy+3++}@5ccfC!tQ2|=54ZAJ5@cuclmez zWmP~lQt3W5HTdmq4?2EV3Gluq!E_sBe886Af$`NJ(JfXYLsI(sYgdJEt{(Ki`SR6{ zDpHiM(b&^-YV+lud~#ttzs%6^#CzVqvwnMaVW~VdE!=l~zxhu;cbyQ#k{UX<2Uw|i z%}^o?H6C+sd)slo?ZJCjyy@S_Y)`gZw{H2D9p9&eNswXs%b(Y$7rB3&Cy%-Rp#78M zWEnRu_g{Pi;PMvM&VYUPvcUfWDDmiwae)Lfur=9(}usQ;JklLsz zmXXuQ5yp~1J7z1fIJD-(Jj3Cctq+Cg6&u+OnMaUcxYXEWDwARqo0)b*EWov*Q1s#I z_SX9ze)!Jj9X_UHsf-H@h)IVvsSzgVk4Afx0P~9|1ge7u?qCrhGgEDiVI$&=5bX{@ z&hoVy_t#j|kg*Y0ZQ#Hdd1_0~eDEV0M-Pts6DoX#i#ZGb=@p(Uz|k4c&Nb#sC!q^!2>hOa z%;BYaD-l4=UxFQ>BPIkFhdk0vXQo?w&2WeEVtKVBV<;Jh0oXh-eWzUIjxcZB9$dNcjn2_H-^cPp z%WG?EruIT1^W1|IclOsm_06y5C#ugq^~Czd&C%h`xihuB{r!$!3A*?l9xK%VaMbk| zx{K}&Is@IQ7G|c^^FZxM3KB_gUB7{FLSFu!65)D0Gj*m`>NNiDFaI=p{Ga{z|K$4a z#NI^npkrp_501U>(MPwhuc;*`T)wP&Yd*hP-wPczg1rDWN*l%U>77B}6RQyS3?VD9xVr4k{K7{4qfR5n^TVmnVevWJSU2NM~-f`$fm!vaQ4#Dx%It0wW|t+%1*tr-8i_@-anI{ zp)yN0zO}P5%*Z+#smYWZFRFc1s!raxvyvF)4Z{ki0EXxRPKBv~S-QS4h6Dn`rJTUO z5dsDotI*PkBQsj5?@O-qo4LBR z*ZJ9ZUpn*nBdf1ooy+IMgXzOso|;z)wY7PLukmm!yHpuJdwOnEC;J-7v`}WS9IYVmrP^v^5wOT++N{qmUD~bJtpNH)6bdpvmK7pBH#ftq;TB#P&M<3$-%htfe3Ai#%A@pQ z!$yE3`!IK;63XEb1&v0|XhNM+;sS>d661_QKHmz7HQPHJa+l3dPcvUe-z$kGi8((2 zgc#ue0F;w0l0cI$5z9r0N`IivpPZ5IpcB)Jr-YM_sqLj%%3HVa2cX!nJa`pTRlAG- z7!{wLaho#r0>u~hy9JVUv63H*I{bn*FPP6oAELye0Iws)Cx|TjPNa`Uk$N$R4jgmh zB_4?T9)5Sg6x)TRSrLLn_yieFPBGgFlxL4GE>>pqNA*ho;fuwcMvu9Gh3b`++YDm! zvkNQN-+1ELr#g)2cN$0z$&>eSad~W81Y*lcbVMw8!q z_4Z+@CfZ|lud}kLzruK>5C-Niy|J>svwb+G)9vw>zw&aiGFA?myIF7a4tp4VDUxz~ z$NSCBuKLEk{xeTLRW7u1*?GaiA9()#kpS6*7(ZvFmezNoG3ORrv8+u8Ig0!$fwSiK^>$_t~x`d(q$ zOl(JLGKUMqs)1u9fWrou0d+u2CAIp#Xcv(w>cdO!;XSlm%=ZLFCgq^<3FnR<`G6Rf z7?hHAb%KAR%309cOkUt>XuQY8iAbUkD&W2og?LOtd{u>@BG;Kw+}L3d2RE@ z7GAvb+UnxD2l&@$-ueEfJ|3Gde`{-t)G_wpxq0=fI;}=!0YhUoJ-Pqgo&QIJzjrgF z^B??!e{k>H7`mU5{*xpBCU@TUjoxPF?;BIB=<@Qi&(3gmYd4DHSIgyGrl795+Aicq zm?{iK*_o}qJs1*EHxqfbS^^p*p(7qg$p6dyi);r9BP)=0vFR4)%9h43u$Aynkpqo$FpA!Zb@@*A{? za0mX|fbz07*`aaUO*iKh=NA^K0`sTN?c4zI_Y-}<7Vu__!vQ1f;qX8xhe$_qL6&oZ z2qq+4{l+|DUwyMM3Pgx0lOl3}ib+NAc6cPfN_(`(xZ$nlf9N0S0a-ZiF)n8-xx$Bk z>LZ{3y-y_te+}XY6AN#+!d(U7=vh2REyvg$J*?y*dPxsgzvtxE<-C$O;;4TnB09342gv3t_ zh+m`#N{WDjq7($FKqx{KKZp<*1i2KUSdc&n3xI1eYsT%^p7!o}U*2U^WtPb*{m#Ap zs^7fs8TABr7YOCNsm{tubMxMF&pq~khSj#qYc|@b(eS~!naoR{dwTiS)mEomX#!pm zb4c2=2H`Zi&fvywX<=dE*3u5^D@nCtN}(PWnPF7#8U;Zzok~wu>WyOEe)rvd7vxBEF5(0TP=E8n^~TAg3_`EnI68Y|r_h+qP5pPj@$xr*@R!$% z)y#BmRIOENl~gG7tyf;r#(TwQWDI#ptVV!hAm8JtXPpciB0w-|L>Smza_i^~>Zx@I z@I)3@(P&~YV$k{HK2kJXqhS(2X{`JibRup9y(yW{}W20GoWg8E!9$9@*5r7+DJ`kl6jysgf*h-$>PJ1eoFH9)_d-iR_}f;q4E2J)7nj`VbtDBYOYP@eduOAtJ!h5^0Q> zp7!nd{2;AlPCK5ba={q208mNM-X)S_L?Keb6im1C&TjXSmHbA_{o@~B0dOKZiP3JV z-6=E&p52y}06>ZwMif8mb#Y^0>{XP{!g8Cx>2`k7#_L!3Yw}6=@)qMxzULd!RF3Ng zkIy{VexVG`V67-_EfKV9Hp=L&eXE^L#0`qsdAvv`DFnHXH<5ai=@bKh{NxEh zA;v$*jyAlqs89@u^@ui+t`8_oZ&+`&^W`!K&)CPS4byB>ZK;PS+AuA$bx4I#aggL? zkuo)CwQT~=Ef$KQU`^xDZt-O}1j(8L9sF0SRd3zAr5XlF!+8^Tm3hYS&l;h`j1K(Wvjm&ptjs6WiTcf(8ne&R*GCSMul>5t61IL1psII`qf*Xe)3t$ zN&e{dH*c-3@A1Ocpj4?rUL>P!7YZLNufKI|X}508pLp>2%=COZ{NVh=1G7_KeC8R% z69fptWRuZ28CpQEVJ^Z_Am;QTrXE4aKup2j7>z_oE+Nns_Jo zyhVs%oj|}xqLB_%IU*980I%m{Z2m-bwY=e&*T~tfNVC=<3g3q7Q>tvx1t3WZC~|5z zLJk8iaaXSeXOh_bt_802Z@m2SVm7n6u|W_p9c993^lS-w4 zos)2i+}tU8qh}Em)W*ce=pK~Q4{{KWYrZi)$j+AJ__0ipo`c& z{UV-8+`i0RhyfCi%Y0I>g^(JM%ap{hzp%T)jCIIp(}Bb0I+heh)h|8w$alZ<7s-J4`6uSS`@+12SSv7WXSLZb|^zeysyt^w@tV&ISgjAS8G*p#y|bg>CZfVhBf}z zzVi8o+56#}=j)Bl7oU6Vv(G*CkN)ZJZSDZ0N;wd3({Y=<(dnbdi>6&|b^rWFKYs4P zhi4*@7altM|GfInnbW7P-de_iivf^S0n{j5Ie5_ld`4K2^_Fo$I~0C^f(on0s4pS5 zcn+jGgj9S($`pzt;iBv6kaz47z%nkC5H2dxj4Tv2j)VizEMBEH{g3i8>QmlXLfX1Q zxwub}RuE_q>%kpW0DnM$zbp<)O_ID{dB__Bd(KEi${Q>D*!?8=&2{Z-l8O7$5(r zgSVqI2`N*-9Vktb(gu^zWT=qT*oCd%s16N3XdFyW(c_VyYBm;B45-8AVDwJKm8tg5 zWn=zow|w!IX8|~?xn6#m%JsHs&m4bv?#!o+iCLWT`i1rFY2JOd^X@apuXgv&=RWs2 z4*tS|GRF=0s7~gDk9kdf73bXM__$d*U6fN)(dMvKue8={o5@&adi`c8dt@OP=%&-4 z*3}TDOXU*s2p;OSjdfH2r9Da26loBga(`WAM_95P5W5Ugv}MCI#ahaGfZ!Ag8&T$< zdz4P5YSmiZT;lE+MxQP&VFa&18)MZVV)4#e!v)vgDw`bBSX+H&=RC99DL3e*WpxlgX~%UH!F#h=g90VOCY}_^BEQ2y(|-TVC>pyoEB8i-+DGU$xHh74E=96C@e&_ui2N zrDs@62ctT`8pFQl=+RR82{q``cAXaJ~b2jH-B-ZW_c@h8+*ssfBl!1 zR<6Hw{tA%Ja5f|4j~TH@I0^~^0|YK@C9xtTu{Q{iFK7nda;$SIDeE7lcAUHL3;@`h|J{?bAy0&$4@i+?9BPY*n?d&8-5wDw|_FJ6>3(sD; zLLfpIsCvwmq+u^};KuE{MG7n9{aRg$IARM7FtTFh*MgO6O1h^nR z-!!oI_&gDcCDK?ba}Lmn3DQOL@`ii>JmODBco0wuk`O_AC92IYSfaf3$s<#xO8I-6 zt22{RB-E{L;K5%ybk?#v(S zgm2h~*Z1KJTyyuPqx}y3`cVh>FPCYFoW{IRZDW0s87-Oi1Rr2JL;7|G+jVlX-4gK@ zieN6rOGuU@aDfCb>{|VEQ_{nI;lWAyBIj~+Z2qhcY0lLKQPYNtu|^diZb~=NJ%wJR2Uh+A<`sWqF_6v)eCf+ySzfxXScVpcSc-TkOB4BGLBNm$iTIy=?#L>W^`$j{YlH0$tAwOMAu7X2Th@>?f%V<$dzY8D zOJ=h}ZmNqMH=-F;bb!YQMFs!IJtVa|o`}Z7#&l+qte-?8a_ZR8TD?P^$aHS*n?HHy z^6FZn*1o*F`^tq|&pq|dI0vU+;D>Mo=|{ z=&wQ7p3bH0R%1F9dEtSxv$;&fH;NgdhJ_u5a3@Go{4O|hXgFPg)IwiK=P9!YWDH5; zvckeCu5Xl4WEBb#2gq+iZZV`P3E}+6?-nc)P~Ki7+>L^$xt+(V+7+!$CotQ`_35Js6 zeC1Pr)t{IhIKrmS49q_KeRQE>gza=>Mu`r?0P=9|CvU;Wp|9)1MRyAU+@k`Fv{ z&hP#450m{o?L5?^`)T|c0u(=D`})_vu9Iw$eJ@_T_z`FQEDsZa1f}v8a-;Y|ytgnfMB1h}>bi}nS)z2EnMfq-g#t`}(6=J#^zmcI3VH0DHJZfwA_m89FK8IJ z@F-rT$y6RHgYCv=K=nXMJ2q+4x4L`@m)HoPWQ%c>3JziK8qoVwoZ+&=E9$ zeJ;6A$hgdXW-o3%RvBUSh=@Z#=SFZIVpSVWz=4Co0KtkD!DNC;gD0i60CSYUFN@L4LmOJ-~RT0 z^WAU%DJBM$H7bIi5(YT|xQIZ#TKc1Z_icQQv5C=p7q9mu;~wLktC(*Rk3?qUOTY5y z#@_1M9>FAjm(}W9qHQqQpvYpmJVaK-jA5ga6SX9G!YE}Ot3T{X5V{fYRBPZM`5T=k zNlZashyv*Ot@XLtX|xuzWk;ehfb+lk{a33*+zH}K6qV`yt84%H|NPG%Ik9-=$jsNC zeEJXn{4dOC)a*HzS2ki{qujb-58S(jvZ!XB4pFo$goI16Xp=)uP2-Y;npa+a?9*>t zyi^tR4o_d4Mg)o?>))C zl4iw1dWoN;QW)7 ziuXVaV08mM$AwWqV&B9JL`bbS6^|w3?sB!Z+8g}g)oQ?74|;dw0r!i~&-mUxPcWd= zFj7z8<_D)b$Hoo&q>WcM{Lsf=Ev}A!k@4%$GTsQ?`QQ-_G8{N64vmq1jSod-7T`JvH!)Js2R78EH#mqE8=?M=mvYrjzM`?la7aq#A&WL6ORPHL ze9LaM5H1MiaV(E7JUK@Z>l#)Z#vBP(*)*#q;67j~47#XxZWEYE(w98-&2@-`8A`H} zS+8Dt^QQs9*cw^&`q>9h70c9xvd$ep{??CPnLN5ssFgG!abLz<7>CH=Bc8Rpye7mZ z+deUnC&|PHf2ucJzji*GiFgr0CGHbweu>3FkV+;}fCDohQ2D`Ga|J2>*TL?Lg<3-H z#6ZOdR$VH-+E%L@2^bq2J5v)AqKx!=#cCZ9(t_jP&VGa`umRE%K#FnUg<}#ESsabF z$r$oPTr!#IMrHwL!X_mE)Cgfmvau|2rIa7>dP<|_)^ zsd$rFlJ6>=ZYGtk)M`}LmLVc}t=ayAfAi}6Vj>;~ECUY;b}c`E$^u<2?sOL_8ZQwD zL|D@YzF<6=M$TW`DuWCG4N!LA*wOi@tfj#118bbLaAu%>e|XwGXC1d_bIcm5KZiE7eLuoTpFGalSPmu!$WNDQgcCMN_;bfqd9~G zzz(r=(@WeRIRT|nWF5}&@%jvkZ-7GxZMX|(iXhxW(KvEkeaQy|m+$1_g%ntBGy z73#O__+U3HJz3nw1O&4q-OI{*nU9|uR=4pR%e&O?vKULpa zzp=ZHQMT13E}sx;FF~V;s4*Fh)CuXvXn@(k?e2w)3s<+7*1vspVeb9!eFu1~srgyu zw9~iUf6UMB-;V*$`Iw)6cF#Y2C)hpA{m@a4a2$?*=(zqWGCpeppX=)tm~?9LSiMvn z4Uxha4X|)xPTw9%HB_j_Lr#3R*TBk&^A!<84ITNVkQb8>U?a(2kuyQ16pHJ?1(d|W zBvFfmGq83$E+0z$5R*mMqRI*cz#LO}28chnb|6i7v6L<6`6}mSIBXV5;{Rl>H#>m2 zQVHbpn-vk#J?@Q_2w-}J%^fi#-6kfQDhZR=+{t6yy|v`B$5bmn31yE)zx49UZ@>O} zlNTBGKY0CzU-;seD^NZ8TyR?g^RaCBf=!T-72vOA)}S~bIs5!5DPAvCjS%$_^jY(q zT-2CI%zXblKL8l4u)Oxg|Kz2ctLvDX5&eb7N#`I((<*gvC(WY zcU4v}LJHj_0v&B+hPPWxRD6iY`XfrAuf zd}_hfB-hlld+QeMFE$$tynSnRJLnJlB8gC91Qr;GbVsHpvZ*-GpeYbBiG)Zwt{bvivX1D?*J#CkhI{HS3s3&+8)?pMq@FsomRscB;%1T$Lt=}cgfPkf|N-mW0B~!8#k(zIw5`SF3$?ZlPT77G2f$= zV)_~2h9MLzz!U<%C^s=huFbpeo@W)D&LlGNL<0c1dLuQP*p*r1wVO?5zSZw$vMCm! zY&3Q<6!`X=KMrMPN|id0p%}oLjXKUMmZuE_8g^W1)m}`u(=?x|8Doo z>tHo)PkIxw&8K0?-j6do@(1AF$5J$zDs#2i9`oP+#wvjuYo5Z0Dp@*Uo7`>}!dyF_4k5Gdkhm4$7 zqr=U_N+VZ|nZDm^BpdBky;O1l29lp>1{+O+$k4f?rx#C#L+Ri88(*zc=&w@jw(Bp< zPR~uv)F^r)hF3IlkY$Jt#WE!oXB zH&ttac!>qbgE4B@V5QaF!bO_U2?RvO4`QXQ7Ir(e5}|0K6y3>;=QJ3#4$CgUj3 ztlLCfE=*4x$)yOVz}vx8qdZHg84U+Oe>^soN=;>^iNu{q$G`CGlTk31BQYZwCaW1F z)#>SJ+?d63l{lZBa%+GG*b79WAgT%mG3imY2HDz{*^U^oU?N5E6>*e<4mFBJ%%`c) zEessX8}9{dCSfpEt0M_cgse+p76)kMbUc=#2+GLGmx`XCzW~rNzF8xJ*Zb=AYn1)~ z%M6v2+*cxtO)|pFcAvaLBG7PRWHRIcIo$yT8nNCq>x~@(;Q@cGSFq1CTQ;>FtIcMy zQfU!y(*vxZ#lpmqOGO0+kE%8AFE5w6!`))3fvN`nC?*=5UIMm*^M*1(WDWvQNTi94 zW>&40P{(^+#3_t{yd(5XQDr6<`?Ok5F~*en#ZMg6qb8m45u3~iG%o5adT%4Fg)v7# zP~EOc3w+*)*eH7-af*RR-Bzg7?T))Wv0k?UeB#v9l(yH?PHiKGn;=M%Vom?^lRk)< zczh6B^T9JCi;q8fH2(VQuR))xoxBLsfj`-pPN-A!b4UN>zxadFZt;Kp-G6dr^#*D+ zKf@X%jA7(Zn=F3^j`>ndWcX}#U z-Q4LCT?Zi9enwB4?bvg0ek2UWb;v10(tH4(29 z@o+Mg3S!dlTb^K8&@cJ}Qdld!b|{#n6yEIOf{##9vX*fgy8DH_ZI%)GX#crLYAkzn zzAKuH`Gz82JN=>>L187>2NdQa9f)5hf?K~wp4Qrx*dBu8ZT1h0;&qRvxyib zx{BMoK+<7IDU>T9!lOJjTAilN8sj$c*qYcz1|4#Sz5W)Fi$YaCj62Fo1|#EbdO`nG zIFu!t9{n#g@&>8lV~kGBE_7|{u~SE5zEQ2&%oEBwa%#Qd25fn|EIHDY7AUt=q`a_Q z77`L-0Z?`ieP_;`u2(6MSP(}#v9#2Ub@9P;JCN=O zBq>tz!U=%(F!A(Xc=(K2tG{>QZI`Pt>d>pq0-*slz5ydZ@x|KY)KO9vI^?%dHxcVR zMk1zT7v{?}5gOR19AUxmVn}>{V_5ZU+CT82e>Jh`J8(yqeeTI*gQr6Vy-en8rMSZ# z@BkyxD8k?;Htxw)a-oc`*9FOy3Rl!mhd&g@__%Pu@dcbYp>8Pa@a;{Lg7eBuK;&F9! z8$MCba|!1kH1gc$_;>)wiWhzW5U*J7h)j-Put1u`B#z2YpAH;^0;nOXBnzktzEAz= z6thy%C=&z9W_ZMe;&xH&4oq*j3}PV`ZyqG)GGY>xT^y0by>Hq#e)QBoxCVSq# z)#&!p_zdB6NZt+bc)rI`^GF|I^ZLS(GiBA_5@i(4{Sq)X0LM28>zjkl^kO1qYakv32XE zgK?q@1v(7I1^7ExdnI28|)Tl|cO4{5k!q8{d%i{6~0g`kxC{MsEC5m9bu$atG?UQqjVV~ zp_V9d(3!5x9bL~axp zAVIi4;la~Kjy22{rnS#M^mNJ>zP`PI!F&G5;^yu~G@dxMFu%RALq1(39sy6-9&|wz zuU4B|J0&ACO~184s7A=4@R^@w*XfinJ)tK#uf6s|6|$^E9C?%R#t@*Ttk8Fr(tti9 z2)b5YrD82ZpagAZ6PvKz{ZAP_HR9D+ zm;hva%Wd6;XGC}cQE+Ph$~~ESiO;CpZ!Aa)B|t+;qON#a?gG3H{l7;50AOecHaF)ceUJwSr6&wuLM^| zH|C={`R>LaJX7y;2jTdOi;H}gN^K)D(`gq2(aAyA#3&z%X6%*;TOk$zb{~l3dN$VE zfNM}z!~x^R00K?3(XD)iYS~~Pn7#E^(_tKY9rl~GLsuL3HPVj z%pYbEZ%wcS0oxgWX6pSbmt3X@g`C!R_TD>6AE|@vWx=0Od?du;~VEbJY7#?dQf-`^XR1) zf2nQdYj9cdG0?Fb*Udv1?1mE)U4mo?NWzxYk_HQE7;B`A0$q*ujOCb2G(clWC*U;s z&4rWRh%tZ?!oznaW+Xxg*5usW-WDYohak@dL*5J5E|;ox;OCe&TRYn~me=cTiy}LC zhKa#OmbW{Y;1CRmPNHqH31fx?Av1+y2e($dwYA}08UR%U)x%Td@#Yc zTFqe@y~LA_M#v)R;J)w<6X8%MKC`p7T4*%Fh5?3Mr_rE?;PsRy03^Gbs>0MnY^N zJ?nA#YtVHUSx6lnJ@p%-L?NMnaEC^o!DF3YPW%)@DIBE z!i^h8AAa)juYT>#|M2H$U;MJi07=wMt9b6Xo$TLd<2m#0jr;uLzam^6{URUV`0;D9 zGainE`;e4NpXBk*VD^f{r`pXemxn}}BoZzZLuwMn)^4}fYqvs)3A=$_oF*p@EedNi z{8#Z=tdbdp%Y?|hTWSPf`UvmQF#c_h)ky&n^4-v|S@CY%YJBz#z&tnNe z&%ihxlBI?689uOyLAK#M`A==Ad@K@N&m`kh;1NZPhjR$KN2^mH8w1c^VH2DH4FIQO z<3Ix#jkBrO1lpQeucvdFK{`qPYNbL+wGa+J#2iw;eFg=qBUY=G-`euVB9z=(-P+jh8 zohFCXeMZIILUJalLIVl0A-aRGP)DKynEhg9V7WsA25AzrMxUZC2DM)!!E_S+gqv_T zsnJl`CGAy^dMe~KB)vSbb2`Z`xvLo*z5iNAJ+(g&} zVlsv;tRmsy#Ow^|LX~QD(6ZbHrg`v?kQvcC0M#*w5-k(u;&zeX^Yvf;8|UVZT)c7P z`yag5BFU$e?DA@A-+(SK(1jSr$ZP+)e~}rSE2j}5wzlwgEwg_ z1a0c05K!!Pb>kYIjQ6izCY?%@N#JgRL8yob(Ly0l$jzu+A<&C;IpXo>a>;iuen8Y_ zZfc516~rGDlC7N`3xKGB#QTy7QVNcWTrWN1mW_ zh+L5D5Jkg0QFkC*8}im0<1X{-|7(+XliW9XNpCQmfGv+4)(`RlVY_~CZ>ar8cF3?7 z!my4;12lyo?92K5>216Nyw3@T5cE1J2$T+CUX-5FE8&h?UTZq=l;sXqbiq1`}em11v1)r+m3**Abn zgk0j8xkfGTb7TBP>4%6E-OJbs`&D@&7)OxYp+9X*&@)6+t)3W68zww#Uo>18i(tu8 zGYH!?PXM4eNEn=C7`cT-I_RBza%<)D)c2u5=y4!~AbZNKpbO%f#RM&z%tm1+N;AP? zZs0*~NtzSU5DqKjD2pE;6D%TrBT6Ph{>BYqeB@RDEhaDn1PaNhVVb8pod}YOYm<@i z`+xLJ%-{ZK473eu@EYly)#;2xeFT#l*Q~f&i9r?MXj!32Sf%u*8|JRGsF$$XEX8#)F$0VmZKZy^nmrzMHHlC2n(1bRmKj z$Yrr8N)rskNcXjEB3LMWQzsBk-4-31;nRp_Fk2*mgmnPt+X4RG$Tru9!Xf~1aNpu(O$CFJF%Nj1%>!?&vwQ*$Ru>njnIKO(#c6C-cN>Ob<#3;u8vgDw=QAH?S;ZT$Gc|3B>rt6f}N!aYfX3c2h@Yn$0$W?kou~ zXl6+HI0G$y*|}jCUl+PmE5mBtQ_Il05egy=k(+4B(oWn4^;G(1L@wMiB#- zNjN=Y(Z@xWAGot(XPCI)cTTsmwi-Tn3hOiMPBaosJjAy8r4yRutSP_=ysO1V>p%S9 zC(iRvPCWHs8UZ|)bh)=+_xlp4ETXiW+QQd2_lBP00ND4D)_Z6MJ;l_681x@aK*nN` zk+o5Hw;TXR8CNJ`n#$m-{MIp?F$G~(9gUA(aqKD(M#;|I!I+G|Q3j>-^AEz(0#8=YyaA7N3 zzjP`H!g?}?cs8@u^Zwc4e8aX4Hlw6Q0^i_V=`{QmbSP6<<19det|%d_ueJ4^u| zeF`00Kr2cC_0=;C$OUkMhvGxz>K_}2wgifJ0Fdv zw)1;_VyOwe2Y^W;_qi{kyl;SOgh-|V1&+eR$w*aE4`Ph4cyW43khMf!A!y9cE~=Ku z2aIAYW@@IvL5_^s`k{jyzkP%U-?hmx2GkiQqA?*AnZZmcQ6~xIz>I~cM@lzH>%Jja z+BUSdy;m?Uy!YaN@n4?EeI}fYo&WY<)XTL8pL*o%i8Jl|YA_LRG|T}t@0c~^%G~2% zP)j!+Y?W@s!6P5j_`55cAAAYyfqW(2?BKzl>;Aae`Y9jN^ZJDG`J6f4KMN*s!FUAy zn(Ri{5Pn@Il9-rf=3vcggJw=g5&Q>KvSUe6a+HRlIGGXIG(Q!-X{3+$+D@xpRnAZ9 zfm={Es|$*Zo7E8{9D!SqGueEsX^BkVm!Y^}1;8*0^8z*88SE8Jie^;mgn;r8oLW9$ zNQv)ToIBF9&BeuODtLWxZRP5%HRYNUKBX8st5x#M(X)@7dN`h%q9S9jv$d~+&Mwk1h|R3oIb5#}u3R5zZEk=itD z=u2X@LW<`PvkYsY%w{CzTG!(`( z!-g!Ah)*4vS)eR@vsUReD`G#CrAnV15a6_buVk5&5*p*H=dgAoyjg75d9fJe1 zmst4~t3~ucl@<_rg#A!zf;HN%77?~ddL4|~ZZI2=hy#9B42kx{6DS~GumG@m(dfP0 zjIV^|0~juHF`@-AC`>9ip@{12Xto6tz;75seq_Qzmx!GrDS~AvF`zOB#I7pfVwj`Y z!OV(eq>~Bx6+Ctx!~}ssFtv~!F-f5iVAfG;JztPDFcw4lENn>J0mDJY2u8^GvG;c5 zT3p9)I<*+^AXXF{iU=XW>2$AYqewedfa9g4z_5?N4v*l8Y|J+r09vOJND%wv?pKQB zYx?JB`qc)ZIF1yVLqv;`xx7Ey(N)lwOn-8s->wsTT-&R<(#b}nF>Lbg0P|3Sv1X+w z2c2eQGL=qJ(&+Ioz3}8rs(3agvNDlxd6b@m>_*4f7_+TB$2*T^-y|^2_%H>dk+CU9sX_Nth zRCrxZkx`M}=2Xmb1JGQkaz#(|TogS;Es$P zt2Ij!?I&yu!q7b|&FGsYTu_nJbh}c_%`OlQgirY9CQ&z$NH*PUG?sR@3K0+~y5M%^ zQVFaGOx<#gs<|}^9Cko9M$sg|Ea0R3llZ7fKkRl&^*WjbQm?%7?TsCI7q#hw{7NJB zad~0&)7?9qz?p30pEy(hafFS1eFFOjpQ3)04^HDaudg4W58-&5CbyYE&dxrDzxnFY zjlM;$JE25LfLw3iN_p84>G^#ct#!zK)t_NMnPs2rQ2| zu<7G`qBD&Tf7HQ=@finqWagpXjdt^U1koGhxdr@0=h8SFJG>oHx^-p}dY;pVT&B|# zCmuR?WO3FAyNeg!-hTV1jm_0GNrbUTfO3g>Gccb@ES&Hf;jSeWvrAh$iMd5tIQAnH z#}EIgcHVvF_>x0AMCI!v>>TuS96Igi@%8>2fACDbPkXc|Ccc+aWAx6u=fUsZzK|EA zIWg@~FdB!JY5KsUGa{rVEiEl0>baD&tF(HZK~a>%lw;r^MRa7hT`$ApU7?JRiXT`` zEPK?GX^HsmbOWr1& zmPDwOdQZ{ROtVrDd4%UGNrx8rFyga>NJcE&Rwf~iKE?QGAAd|0CX8bDvTh*Ka|Ff% zE2lTaY$$(Za|oBgk|5zo7&>tVcrz)i)kCx4jsV#m;DxAPVWd({057d==NrDb!Tmgm zINTX`n5)DJAr07nuJBWe$Kx5HSG^I#O)Zr&Se0PK^9xNeXxdu3j=?4}AH5KGnX_ykvVf)cOc@Ks$v^~`57Bz!%QFK22g#9Jx>q#smH(+5^ z61O;7xfb^f)0f0uZpsR*Zi*qE0YoR@4AAtjcgbP?h?eyKt*`zn$z|o;!lREpy}4Vu zym{;9_C}>yb5lD3%>oc@bSv9NWKhlIQVw%1_B}{~+n_h_Ra&U-Nk6l%o=o+T%0_Zx z9%B-aM6!j1MxNmBJFw&;0OpsOp(NK`I270LH1cJnUg{{z<+x^+Bc}5eehE_#{EZULK5<) z8@zuTzEPnVfyqTh;v{Jt?XKihiabG^F#kDD)H_IqeYtS>@#7Oy^QT_^yT5h)2Y*@H z+^v4_!PMEw6HlI?M8m?VV-}vJsb^dvFH0U&SX#a)C~Eaut4c|2dEBA5xc|oQxApeF zl}cr2hk1QxL(IQ)=@Q=oDZ^28=ZBx$-u*ZJ;F)@#MhUSlE-v!f@fcPwIP4PhPTq~% zA5AdDfG!Cp6D0Zr;c8U@Bp7({Ace7)HC;y1HHZL7Eb-bN6|2|9$Rjhs>rXh|Ko2w+ zAz+-2uy~>>RhWe!pdw7@DJsrMMi%*xphEH`y%2yfDI+>D-D*~d45ym*5V1=p1JZxc z?M)0R>IV1^StT`cHT{#PPPc(rC#=|TdX#uPPQqHX>!4Il=9OmhS zAVKVKE0~oKg&2$BcuGBxxI;3J@Q$XEQmcz-9)L~q+XVMf@dzH>t2GgIQA+3&v7DfA z1QYZTx1$cEi)wj-Iv@g!G(tB0XzV5E)M6who7HKWtT`mq!tP;?81u! ziGG9G1B<_rPEi;H@5KP5Iom|;K`-Gil}y)|Dn!c=GZ_NhMp7skjd}xJp4a4$P1?n{ zNOEs5=Ev($!;~aUTs2HTOMS|EF7ZH8oz=l{+GFC-R4!qi0=G^UX}VeP@j-t<5?8#K z7nN@0ez-^l7%r5_5v+-YWGWlqT-(Mz$gBoWl7JJ!I-h;+GxfbfIGviAo_gh-H&=E` z&0eckEO~>T7oT`~X>U7UED+}|>YW}P={$Lc@JSlRSkrRpTHcF|w~*iX%KvJo-zaW) zf{hU{ZMj^_9t3e3gU`$z`Ia#RCYs49;7#|Ukvihoc zSx$pL6N7{q5lRq}A@2`tjhUI*?VUZ4$r;8$w}W(oNdy=M?!ib3Ql6MV<*oH7lSo4Z zEM!G-FB;VAVq&#M6iNhjfUzEp9(wSRCr>@_$3OltZYRdnEJ^Uvz%sEz_B!A#Q>?42 zRybFyvdt?5l9RaVBN8mii;gK--b>qswRF$E9QufZ96zW8s1px=NNWLxq?oANGnbpp z#1bpJTS3ooF%g{%j?SK%OeL~-YTVty`jrcnt@XHO7eiK!f7zyRfF11%h(S)rXCW^zF1F zWd5YmnHr3bX^MHd+wsPds&taKLxE7lszE=Ih&C!!azs@$2$YZGH-Ph2w0hhHZYoov z*Td@|M-+Kv0Jvlr11~0&mVk$Z2GO{SkZ{?U{IJKi3d;$i0z!t=l4H)~msUgxL^lwj z(r!}N7LMu*Gr?e&GO0$?N9A-ThMtGeF8dxFQ*s1Hf?O|QrZRsB>#^IIos_T-Loc%g z=s@XUFafp}QZJJX`#VySL^mOez-wa}s;KvxQmZ|YNjLWLO8L<(=b>_i-pKa{A`~a& z(C(8rB(`e|uYH>`=zxELHEibTWX{)@z>1W79SBI-89Ioyp^4Q9WF0FIod9j7w7iV) z?K7wkjCw&fT%S6D152V#sbQp6O8wUI^04En6DL?8z%Q$AZSJ>=4!QkA#zndSi@6u& zM}|bgF+F}kfhMSi(^#QB!q!|H@zfI0UjO0hE5iPULCfNZ|O<#ozqZulU;C#Y~ofte;%GxVpC~ zO9kY?I5L+c<`RCYHW@qG%vTPIhNr%&KrC4bcvm<&{oHHT$RjflOMuA0`$FIcA@(x3 zn3ISlmD|c&ayplY)rhwu^4o|Kn;QtF!$zFMXJ3RsP3qrL$1OB{^kkt#S{c?Lpd#pO z%1s8FRU%<*@lt>s5{^=iSen2R98Vb$uw4g4>yL0dDc^*wTQnO;OIf-^Z-D5SVBj`0 z5ilWkZAneo&ew=e9(lt3Rvv<7fx(HQB2xv~Poxx~5#1-FfZv#!Ic~Pv%@%0TnB)0v z7*9_S+||YxMYvkex_s@*dTnR z*UN3J7Mho7#(_l`>0UDpJsQZ5?A(12cB4-__k~|_+=nxzpcfTV+FOANgI}EHV0yv}%S$B}5F?NJgr#d2IA?6UAgCI%pACs13 zCOPUjlCrCmkDix+7f28_+>;i*3@!GVOI#{43jyj_8y(E$unoZ-hFHN6B(R$ZA_~ch zdajlV?k3>clGZ42Rm6QzfC&;OHCIb#tR=h@lN5E5r9~u3o`yL9la7)tr9E9qf9E6> zJA~XM)$9f%Y|sdCofc{RE`J0oeWP53`y(56NhOw^)C&w(lAe_!Yjz+`QS#}5{z5rm z2_eAI51tiHSCHeCNe7O=#`NP_$IIfyI>RDrnGOZ9FfoOUVStogAK-P|fkj(9$fafqk(WK6JE*bB%o1RFV5;5g6?w|%zC!*0F zt8^}dVF70$<7fkP>hpE*bjRY^iA-U8v$eDSzwB%Rb4C%wY%&9v0Vm#q09s87O+AsK*1P+L&9S$n*CK^(goZB{rX1`RK=UoW%i$`q>onwUH zkDrNl9z+y*vS6_aSVzpY^N_Q!`D+h(*`emWYRuXi);aaKI>x zQ;HZEF^XFS1w(b%q&$K&$>Xg*) z?Pi(^*)C6WZ6i9p5Q>Gpp-A$?(P%14u4OC~1ZP|`!Rnbr2TO z4s9{}^kAf&dJ*G30|Q?c#@Z<%vr9CXQ>Frh*jU9JM8sqUV(EgnEarI3^?9Ki;Vzih zu)g4r^|h-TDmzz?1a=Gr7NjNARjd@0AK|ht_D+G>BTA3rEU-lp!3YN=0-c0F;e+}F z>M;z(Nr13VJB5`9xev*r1qP1M;wu{~3g}Vn3peKk#F?%GTx|mB9Zuo(fr#PhDQ7Wtz| zTr5=7wMP~p#eLRXqFve@@@B}e;c~=UffEks#YR7R|CR{YfXzm!*_EwquBe7dhp3-v zAtw_t!TYMKK>neHtkGmPU?(77Af2?xEM*! z+oHZ;ARcv4XRMk;QV~Pw_S@Z_-$?XG{uo_l?)K%f)`Z!(z^5R=FhjErWps_F!s+*S5ef<4)2QLJ#0+0JcC$zv7(m zql!c-fN~S`O zdJw%}m;g%T5>r|{3Lu7{jY-iSUXBnc8E~l?MD=>Xh93y-G@fW`^I-Jg6+@(kbjXFU zs0~rxZ7@mT@=%b>i4nY>*Fr8~X%Q;ri{ju2Own2mOJosL2=Sw_e0YpYmoKRdGH8a2 z`Qvn^lCx^eIfhtLy7)&9ZkCG#&r)2j?IB+%xePp7VtgexSCK69LR#2{0Cc3PB39OFwzv z1y-1s=zMEx@mQN~bq2asx}Be>@#D9?(^OcG%re=aa6UoK;}gk2!k2%}8!y6J=-1&< z_k1ILTsLHV=D~JB8FD2eOuucoyaq+vqS1t9=Tw|!2R9iJ*NSeSYaIH->{9)*ijF^Y z5MrT{7`3uQXdU8m1Omg|6+wot5M^4W6!C<>^unp#y***0{NzV2CXo&*fx|h zw<7)$6M`26d?G~YM?|GwI5pD+v6Eyx1X%9riAc}~JW{9>Low?Ld%{me$|Itl{P55u zppX>S0~Uza0Yy;)PCUMzsazD&W-dX5rR)N{+s9L6RU3g(5O?ezEzk*#{y<8=kYzHV zATSTXUu5B+VT6PR+yN?e*i6A8^AsB@1{yy>{eWr>xFa?NwdU(3hh+o*$2{ozfVl$< z!qk;thh2X>%S=}W@jgBSS1{nVjZXQpntr#3DVj)_RV$L6q+|?2I(56db}+iI zEsOW0f(p=V71%uzEm#oIc&}anVuSX3xF@CLu?>M+6o*6S!;e#K8ek zy%=$)>2(fU}pOo^%{$ik%$vw z#CuV~m{w5q3Xle>9So=zCj}(%*<)g%#CeJFCFl&^ZI%lZ(u!wucyXdJqYm~CaYw+n zrn6SNNjMh$E=EOxAe8r~zr_|0nM-f8QV?d!7)gh8q(g*9(@|)mY62n#gqed%tzkM# zc8lsCj__It7bralD=5Y+lbFk)d15gsC%}@xiX(SZ_hj7J;SR`bsNqxI+=ios2~Nq-*aMkg1HxM0;z~7fDfY zri>RPo56Xg`P;aiG-BM&@j=~A{YK-)-;?9R;+eeIa0ry-R>VgZDPd+=KrP<;^?r6o zd69$d95?>p8;u)(@JucB^LBTvI(!MlP62a+$EUcp63$F^%w_=R8}?aP`G^P#2ncb; z>Dqh9@`{~7f>002vU2FbCaAd#B|2E5AsXx|d7=oQDz4huT$e1t5kHYuGsKNHa%C}m zFqxPbeX#|pbpkVygk5q8_5VbpwrXezP&Nk4RYa$*7IZcp_<&7u-O6WbM zc*%JeOFJk(wH6BjZ%yt1bV>fZw1mRh62I($i;>HN5yBr&^qX}A&k@>(C=g5`Hf{kj z;-moQ*ans>DiHw#JLpIHa1G`i=<`8?a!aFD4F`y{VSia-2cAV_VcRr~RKil}=G{~R zJ|(sml7#`-8T8^a(>PLzMxjt}zuxd0WQ5UUZ1kjTYHo{Bt*~2kM-npsLWCR1fGX}l zJLODtF%oJiF$vQbEsJg!h-$ciPs~;<@40Luoi>c{@wsWIV_sZZl41#6yOJ*;48$`T z9Iz4`Qz%D){)s2hwg|D_E0;;m0_YgcD4B{^NeY#Coc56TQA~oYe{gS}2w%YcK=i#h zjnR3OZYN?ol*S^&8>{RGX%9!7r=EV{?YG~=oP}}&n`OsG1>gZyyn>Z{z8hjR66BiZ zGMRU;T>8@IKEJ%VS+l8_ND=cPtQecc=N|r46JRC3@9M_-Ud>FTl8sVHs(ypXLBcb= z5+I!`PEMjlj22eJkr$Z&QC;c|;FjYnkl%Zf&{kD^geiim5J{t%I<(NebL4bfUCYLxCWIa)@tVdH=Ki4RB&k+pT z$QzWU(<6>zlVibE!eupyCw9)Pm5X{$*tk%79`ELJBn8D%%S z-*z5q{5?57^o+@oGxe`=wT-{tlhdxoy^Kd;z`YOIMd1Pa)CN0I~7{bC3CF%$l zS_*`-GC?T1NR|FCB02GT^hMkGO<(w1(;I3yv9c^3(1W=tlzU~rO>9v73&h@>qp zj0tCPIz1EWgwF6TatU*T4I<`G;9wNx)!~xDGZk^WTnWrL7=6(D>1f&m^Ch>d+d*97 zR@?!?W#bWeA7qvB1-!(40YXNW4RaD@U)>4;PT_xXs)Ied4fh2#7q$*#!xql31d@vx z7ON0=^b#(Hv519UP$5-}4B z6L^PT6j^r)^mex=gsG;(AI51kUny`h{fg(`X=xv#tSxz5*($pU~X=@va?HC zwEkK3n{X5S?E~M?9ZXElO&8bKLy43H7KITadJ%?n^1-u3GG%%;()ruxFV!j)UPLOI z6-tt6>*_VTRm=|Q$%(!7t$;UB1!@?r4%3`Cexa37D3k6`>jR@dakt>jK^{c+dkwnu z(PtlDT3u_Fh=M0PT#)%y+ZYH%5kjbxQ;dhg@eVS+kc|87w_X)eAyvpN)zT5e+k2a- z=~)Wf5b*)J>B8jnp4XkuW~U~m-@Sg7`nHo(lR%BmW+!t-bZKwrjY}6G_a?qgXGr*F zd0i^N&{SZhXaE!o@OsbJA=Hrpm12h;KR`VMD@)EQi!of2kkx=erA)dv90zJpln^F^ zm%6gBR5(8EuLSbZ4+6i;~*sBeU%zt{Bu03ZNK zL_t)YlP1VoE5eGxq|z!QL%Bb0ir{77q|O>QrS04YuNA5-zAmXW!mqf@u&Z+x%jo_( z0d4U(Jt_E9D+HwJ!M+yg_1nAKD_n@Il}n3P_HN!M9OM3@Gv!_%xk(eT3R9~R?a|}O z1cI&Io$us#N_~t90iy2`Vc$YBM$kP|Aou8Fpd>NN0t8IM?ui{Bi_eHaW){H<7V+OL z;Db=bu;|!ri|Rkzp4J|G{Czh5?zcX8lV9+@(m&;y_u2SEXX>jsDBZERxX5RzLBJU~ z7X&OrFo98<^3afxPy-5}WmTzN<@RJSWxyZddje=I(ecb%=n`GhK%5>})b?!mk@&Fl z2$x|r$?M}j&>Z_bP7AO+5TOH_gVgwB@!(g^;c@IGF#4-~EzW>=iuX8(V(${va+nV> z`Uwm0LQFI6BZL0Bx>j9E5Dvyl9|5L8m(BVFVPiD%t7%9(F`4T-^A4nXM!aFep{!vr zN!=r^XTzo=v64uO*qC8B7;FS4$Z=XV3=YGv;f=&tBzV9UyP;@|G?hxJL~3uJ`lxt;-INTRsZ|f&uJM45|B=`fUX^E0Xj43uFdd_Y%c1g<|dC1_CZs#CtAq z@Kn+unuzo%ot&JUyzs$!))mRQl@L!%HN~8(Iq%Au;+YuvDZ?~>oyf{BI z`{>Ejm)2Hm9Sb{L%_PKS7)&IA)x>i=JCV-)NkT$df2rdUB=FIKY$WWRSRFVxY9h(l_^1%WMY@9K*`&5D zBDcIJ2MIHyt>l(S0H}moLO=2$6AIZM2eoiU{2Gv@nkLK|`IFw}2y3L2cjl8h$RpIR zN@-G37weR4;#l}Kc zgJ&K*K{&p?(raKtJJPI^9P9B#KnepS09(AcrjX!Jb*c60BVq?E7tyi_5P&AcdLzV% z^~N1SS{q@b7tn3+WiehD1Vm7vqfaCKB@4vi5;g@(ru ziVFGU2tk<*mzeD1E?<(=PZ*1Zc~KJdiCpGd+M~^v>U=7$45*IV#^*rZZy)iUyg4xXD417cP6 zL?Vz8%>b;;FxA(Xoh?=lFvxBLXEKpEO;0h@g`VBO^NF_*Nei_A(Tj``u{DF3PUr}j zMEDk1Z*<(zXhhHvGmU=6a|^neiz^FslcV?y^w)gn*p}4m#|WnuNzOBGK9xHuMOB-0=zO0c?3&JYw~4!quGp%@1C z)*d#@y3YbgA8!S(3x9)y!Fg%9>R}u{;Si<5akv%+W+sOV7msE6555aF9`SCml>3xqP2NRBt!RKO&}hz`L74`&xnrjASe30;T z&8$_&^C3gdeR&Z+p=V|t6sliM>ZGGBsGpGii6a8NoO49%Q&Gj5s-+{;Mq}hxxsz<% zlV+eZ(FY8)EC@VLnNm1oe3hmFrh&MV)rEwC4Pg!#G1RIf$F#7Fbg!9)I?Z*6rRswR z&wTJn)eS82v{+{N_@Vk-`Gj@z<7O#u;_pI0z}_d?$}kf0XChKPyW0g1JWM9JnXkKj zu|#r;9unz+cq!B%XDGfQfEIm$_V&&o9v)F+UR0(#(U}LEG=A{MH2$9L9ABsr4zx9Y zeDLSGqx<||&+|qw`h!Pk0B@un6^D-V(;YiLUz|>*W-m!Fj6-Q_q7NNvP7$Zjllb&J ziW4~<_{T&rfm?a{Om7Tu(kYT!A_*xVY)Mj~KZ^zm#t!l3!1MOH)QG51_sTtrkA$-e zp^APff*0PNu{Yoj#z-B(m@#x4{X|$ID=ae*qdW*EppeIv0t!M|S814f zDIjP-Zj7cvnFJ+9DduVwi!LJ6VIl-7wA$rD$s1;2gHuaysP59eK}8hgHh(ylAeL|# z7Ha^EXJmFvEX&_LkWVVcWrC zBnGPwZSrVVu)XEAiIb-jMqqP!H5xV$xyqZ{*%QZ6rnk$xR2#44%S4*D2`;jGb#KQX zk0R+SXNj83kbz7#50?GrULGj{hVE|FFn{507Z)x%Tf`W&fzL$w=G_8ZE-yuv15ix4 zv{h?vFKrVY98SdC;egdBr)Fl&Hl+tUZmMpwl(WWB_8P(vyF45XueKTXh9z+UWutE| zZ>)3Ya}S($Y=%wl?x4&pdEuZF$wKVQuRTEkdWjrlw=b2WI7Efom#04FxJ8wNKa% zi;~!7U~n`|z(kRFWEJEO#tu0_+fX2XY$9B%Klb%O21WCCbx*#Cd50(JjTxsHx=cO} z@^JpRQ1!f=g7`wPke)t#GNx>zU#N39qQB~=kFVmOCI;@wpPV+1∈PyYe!Co}yHd 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 diff --git a/bin/osmplayer.compressed.js b/bin/osmplayer.compressed.js new file mode 100644 index 00000000..efbc09be --- /dev/null +++ b/bin/osmplayer.compressed.js @@ -0,0 +1,29 @@ +jQuery.fn.osmplayer||(jQuery.fn.osmplayer=function(a){return jQuery(this).each(function(){a=a||{};a.id=a.id||$(this).attr("id")||Math.random();minplayer.plugins[a.id]||(a.template=a.template||"default",osmplayer[a.template]?new osmplayer[a.template](jQuery(this),a):new osmplayer(jQuery(this),a))})});osmplayer=function(a,b){minplayer.call(this,a,b)};osmplayer.prototype=new minplayer;osmplayer.prototype.constructor=osmplayer; +osmplayer.prototype.create=function(a,b,c){return minplayer.prototype.create.call(this,a,"osmplayer",c)};osmplayer.prototype.construct=function(){this.options=jQuery.extend({playlist:"",swfplayer:"minplayer/flash/minplayer.swf"},this.options);minplayer.prototype.construct.call(this);this.playQueue=[];this.playIndex=0;this.playlist=this.create("playlist","osmplayer");this.playlist.bind("nodeLoad",function(a){return function(b,c){a.loadNode(c)}}(this))};osmplayer.prototype.fullScreenElement=function(){return this.elements.minplayer}; +osmplayer.prototype.loadNode=function(a){if(a.mediafiles){var b=a.mediafiles.media;if(b){this.playQueue.length=0;this.playQueue=[];this.playIndex=0;this.addToQueue(b.intro);this.addToQueue(b.commercial);this.addToQueue(b.prereel);this.addToQueue(b.media);this.addToQueue(b.postreel)}this.options.preview=osmplayer.getImage(a.mediafiles.image,"preview");this.playLoader.loadPreview();this.playNext()}};osmplayer.prototype.addToQueue=function(a){a&&this.playQueue.push(this.getFile(a))}; +osmplayer.prototype.getFile=function(a){if(a){var b=typeof a;if((b==="object"||b==="array")&&a[0])a=this.getBestMedia(a)}return a};osmplayer.prototype.getBestMedia=function(a){for(var b=null,c=a.length;c--;){var d=new minplayer.file(a[c]);if(!b||d.priority>b.priority)b=d}return b};osmplayer.prototype.playNext=function(){if(this.playQueue.length>this.playIndex){this.load(this.playQueue[this.playIndex]);this.playIndex++}else{if(!this.options.repeat)this.options.autostart=false;this.playIndex=0;this.playNext()}}; +osmplayer.getImage=function(a,b){var c="";if(a)if(a[b])c=a[b];else for(b in a)if(a.hasOwnProperty(b)){c=a[b];break}return typeof c==="string"?c:c.path};var osmplayer=osmplayer||{};osmplayer.parser=osmplayer.parser||{};osmplayer.parser["default"]={priority:1,valid:function(){return true},getType:function(){return"json"},getFeed:function(a,b,c){a=a.replace(/(.*)\??(.*)/i,"$1");return a+("?start-index="+b)+("&max-results="+c)},parse:function(a){return a}};osmplayer=osmplayer||{}; +osmplayer.parser=osmplayer.parser||{}; +osmplayer.parser.youtube={priority:10,valid:function(a){return a.search(/^http(s)?\:\/\/gdata\.youtube\.com/i)===0},getType:function(){return"jsonp"},getFeed:function(a,b,c){a=a.replace(/(.*)\??(.*)/i,"$1");return a+("?start-index="+(b+1))+("&max-results="+c)+"&v=2&alt=jsonc"},parse:function(a){var a=a.data,b={total_rows:a.totalItems,nodes:[]},c;for(c in a.items){var d=a.items[c];b.nodes.push({title:d.title,description:d.description,mediafiles:{image:{thumbnail:{path:d.thumbnail.sqDefault},image:{path:d.thumbnail.hqDefault}}, +media:{media:{player:"youtube",id:d.id}}}})}return b}};osmplayer=osmplayer||{};osmplayer.parser=osmplayer.parser||{}; +osmplayer.parser.rss={priority:8,valid:function(a){a=a.replace(/(.*)\??(.*)/i,"$1");return a.match(/\.rss$/i)!==null},getType:function(){return"xml"},getFeed:function(a){return a},parse:function(a){var b={total_rows:0,nodes:[]};jQuery("rss channel",a).find("item").each(function(){osmplayer.parser.rss.addRSSItem(b,$(this))});return b},addRSSItem:function(a,b){a.total_rows++;a.nodes.push({title:b.find("title").text(),description:b.find("annotation").text(),mediafiles:{image:{image:{path:b.find("image").text()}}, +media:{media:{path:b.find("location").text()}}}})}};osmplayer=osmplayer||{};osmplayer.parser=osmplayer.parser||{};osmplayer.parser.asx={priority:8,valid:function(a){a=a.replace(/(.*)\??(.*)/i,"$1");return a.match(/\.asx$/i)!==null},getType:function(){return"xml"},getFeed:function(a){return a},parse:function(a){var b={total_rows:0,nodes:[]};jQuery("asx entry",a).each(function(){osmplayer.parser.rss.addRSSItem(b,$(this))});return b}};osmplayer=osmplayer||{};osmplayer.parser=osmplayer.parser||{}; +osmplayer.parser.xsfp={priority:8,valid:function(a){a=a.replace(/(.*)\??(.*)/i,"$1");return a.match(/\.xml$/i)!==null},getType:function(){return"xml"},getFeed:function(a){return a},parse:function(a){var b={total_rows:0,nodes:[]};jQuery("playlist trackList track",a).each(function(){osmplayer.parser.rss.addRSSItem(b,$(this))});return b}};osmplayer=osmplayer||{};osmplayer.playlist=function(a,b){minplayer.display.call(this,"playlist",a,b)};osmplayer.playlist.prototype=new minplayer.display; +osmplayer.playlist.prototype.constructor=osmplayer.playlist; +osmplayer.playlist.prototype.construct=function(){this.options=jQuery.extend({vertical:true,playlist:"",pageLimit:10,shuffle:false},this.options);minplayer.display.prototype.construct.call(this);this.nodes=[];this.page=-1;this.currentItem=this.totalItems=0;this.queue=[];this.queuepos=0;this.playlist=this.options.playlist;this.scroll=this.create("scroll","osmplayer");this.pager=this.create("pager","osmplayer");this.pager.bind("nextPage",function(a){return function(){a.nextPage()}}(this));this.pager.bind("prevPage", +function(a){return function(){a.prevPage()}}(this));this.get("media",function(a){a.bind("ended",function(a){return function(){a.next()}}(this))});this.load(0,0)}; +osmplayer.playlist.prototype.set=function(a,b){if(typeof a!=="object")this.trigger("error","Playlist must be an object to set");else if(a.hasOwnProperty("total_rows")){if(a.total_rows&&a.nodes.length){this.totalItems=a.total_rows;this.currentItem=0;(this.page+1)*this.options.pageLimit>=this.totalItems?this.pager.nextPage.hide():this.pager.nextPage.show();var c=null,d=a.nodes.length;this.scroll.elements.list.empty();this.nodes=[];for(var f=0;f=this.queue.length)if(this.options.shuffle){a=Math.floor(Math.random()*this.totalItems);b=Math.floor(a/this.options.pageLimit);a=a%this.options.pageLimit;this.load(b,a)}else{a=this.currentItem+1;a>=this.nodes.length?this.load(b+1,0):this.loadItem(a)}else{this.queuepos=this.queuepos+1;a=this.queue[this.queuepos];this.load(a.page,a.item)}}; +osmplayer.playlist.prototype.prev=function(){this.queuepos=this.queuepos-1;this.queuepos=this.queuepos<0?0:this.queuepos;var a=this.queue[this.queuepos];a&&this.load(a.page,a.item)};osmplayer.playlist.prototype.loadItem=function(a){if(ac.priority&&(c=osmplayer.parser[d]);d={type:"GET",url:c.getFeed(this.playlist,this.page*this.options.pageLimit,this.options.pageLimit),success:function(a){return function(d){a.scroll.elements.playlist_busy&&a.scroll.elements.playlist_busy.hide();a.set(c.parse(d),b)}}(this),error:function(a){return function(b,c){a.scroll.elements.playlist_busy&&a.scroll.elements.playlist_busy.hide();a.trigger("error",c)}}(this)};var f="";if(f=c.getType())d.dataType=f;jQuery.ajax(d)}}; +osmplayer=osmplayer||{};osmplayer.scroll=function(a,b){minplayer.display.call(this,"scroll",a,b)};osmplayer.scroll.prototype=new minplayer.display;osmplayer.scroll.prototype.constructor=osmplayer.scroll; +osmplayer.scroll.prototype.construct=function(){this.options=jQuery.extend({vertical:true,hysteresis:40,scrollSpeed:20,scrollMode:"auto"},this.options);minplayer.display.prototype.construct.call(this);this.getMousePos=function(a){return a.pageY-this.display.offset().top};this.getPos=function(a){return this.ratio*(this.scrollSize-(a+this.handleSize))};this.getHandlePos=function(a){return this.scrollSize-(this.handleSize+a/this.ratio)};if(this.elements.scroll){this.scrollSize=this.elements.scroll.height(); +this.handleSize=17;this.scrollTop=this.scrollSize-this.handleSize;this.scrollMid=this.scrollSize/2;this.mousePos=0;this.refresh();this.scroll=this.elements.scroll.slider({orientation:"vertical",max:this.scrollSize,value:this.scrollTop,slide:function(a){return function(b,c){var d=a.getPos(c.value);if(d<0){d=0;a.scroll.slider("option","value",a.scrollTop)}a.elements.list.css("marginTop",-d+"px");return d>0}}(this)});this.options.scrollMode=="auto"&&this.elements.list.bind("mousemove",function(a){return function(b){b.preventDefault(); +a.mousePos=b.pageY-a.display.offset().top}}(this)).bind("mouseenter",function(a){return function(b){b.preventDefault();a.scrolling=true;setTimeout(function d(){if(a.scrolling){var b=a.mousePos-a.scrollMid;if(Math.abs(b)>a.options.hysteresis){var e=a.options.hysteresis,b=a.options.scrollSpeed*(b+e*(b>0?-1:0)),b=b/a.scrollMid,e=a.elements.list.css("marginTop"),e=parseFloat(e)-b,e=e>0?0:e,b=-a.listSize+a.scrollSize,e=eUsage: + *

+ *
+ *   // Create a media player.
+ *   var player = jQuery("#player").osmplayer({
+ *
+ *   });
+ *
+ * 
+ *

+ * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer = function(context, options) { + + // Derive from minplayer + minplayer.call(this, context, options); +}; + +/** Derive from minplayer. */ +osmplayer.prototype = new minplayer(); + +/** Reset the constructor. */ +osmplayer.prototype.constructor = osmplayer; + +/** + * Creates a new plugin within this context. + * + * @param {string} name The name of the plugin you wish to create. + * @param {object} base The base object for this plugin. + * @param {object} context The context which you would like to create. + * @return {object} The new plugin object. + */ +osmplayer.prototype.create = function(name, base, context) { + return minplayer.prototype.create.call(this, name, 'osmplayer', context); +}; + +/** + * @see minplayer.plugin.construct + */ +osmplayer.prototype.construct = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + playlist: '', + swfplayer: 'minplayer/flash/minplayer.swf' + }, this.options); + + // Call the minplayer display constructor. + minplayer.prototype.construct.call(this); + + /** The play queue and index. */ + this.playQueue = []; + this.playIndex = 0; + + /** The playlist for this media player. */ + this.playlist = this.create('playlist', 'osmplayer'); + + // Bind when the playlists loads a node. + this.playlist.bind('nodeLoad', (function(player) { + return function(event, data) { + + // Load this node. + player.loadNode(data); + }; + })(this)); +}; + +/** + * Gets the full screen element. + * + * @return {object} The element that will go into fullscreen. + */ +osmplayer.prototype.fullScreenElement = function() { + return this.elements.minplayer; +}; + +/** + * The load node function. + * + * @param {object} node A media node object. + */ +osmplayer.prototype.loadNode = function(node) { + if (node.mediafiles) { + + // Load the media files. + var media = node.mediafiles.media; + if (media) { + this.playQueue.length = 0; + this.playQueue = []; + this.playIndex = 0; + this.addToQueue(media.intro); + this.addToQueue(media.commercial); + this.addToQueue(media.prereel); + this.addToQueue(media.media); + this.addToQueue(media.postreel); + } + + // Load the preview image. + this.options.preview = osmplayer.getImage(node.mediafiles.image, 'preview'); + this.playLoader.loadPreview(); + + // Play the next media + this.playNext(); + } +}; + +/** + * Adds a file to the play queue. + * + * @param {object} file The file to add to the queue. + */ +osmplayer.prototype.addToQueue = function(file) { + if (file) { + this.playQueue.push(this.getFile(file)); + } +}; + +/** + * Returns a valid media file for this browser. + * + * @param {object} file The file object. + * @return {object} The best media file. + */ +osmplayer.prototype.getFile = function(file) { + if (file) { + var type = typeof file; + if (((type === 'object') || (type === 'array')) && file[0]) { + file = this.getBestMedia(file); + } + } + return file; +}; + +/** + * Returns the media file with the lowest weight value provided an array of + * media files. + * + * @param {object} files The media files to play. + * @return {object} The best media file. + */ +osmplayer.prototype.getBestMedia = function(files) { + var mFile = null; + var i = files.length; + while (i--) { + var tempFile = new minplayer.file(files[i]); + if (!mFile || (tempFile.priority > mFile.priority)) { + mFile = tempFile; + } + } + return mFile; +}; + +/** + * Plays the next media file in the queue. + */ +osmplayer.prototype.playNext = function() { + if (this.playQueue.length > this.playIndex) { + this.load(this.playQueue[this.playIndex]); + this.playIndex++; + } + else if (this.options.repeat) { + this.playIndex = 0; + this.playNext(); + } + else { + // If there is no playlist, and no repeat, we will + // just seek to the beginning and pause. + this.options.autostart = false; + this.playIndex = 0; + this.playNext(); + } +}; + +/** + * Returns an image provided image array. + * + * @param {object} images The images to search for. + * @param {string} type The type of image to look for. + * @return {object} The best image match. + */ +osmplayer.getImage = function(images, type) { + var image = ''; + + if (images) { + + // If the image type exists, then just use that one. + if (images[type]) { + image = images[type]; + } + else { + + // Or, just pick the first one available. + for (type in images) { + if (images.hasOwnProperty(type)) { + image = images[type]; + break; + } + } + } + } + + // Return the image path. + return (typeof image === 'string') ? image : image.path; +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The default parser object. + * + * @return {object} The default parser. + **/ +osmplayer.parser['default'] = { + + // The priority for this parser. + priority: 1, + + // This parser is always valid. + valid: function(feed) { + return true; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'json'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + feed += '?start-index=' + start; + feed += '&max-results=' + numItems; + return feed; + }, + + // Parse the feed. + parse: function(data) { + return data; + } +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The youtube parser object. + * + * @return {object} The youtube parser. + **/ +osmplayer.parser.youtube = { + + // The priority for this parser. + priority: 10, + + // Return if this is a valid youtube feed. + valid: function(feed) { + return (feed.search(/^http(s)?\:\/\/gdata\.youtube\.com/i) === 0); + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'jsonp'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + feed += '?start-index=' + (start + 1); + feed += '&max-results=' + (numItems); + feed += '&v=2&alt=jsonc'; + return feed; + }, + + // Parse the feed. + parse: function(data) { + data = data.data; + var playlist = { + total_rows: data.totalItems, + nodes: [] + }; + + // Iterate through the items and parse it. + for (var index in data.items) { + var item = data.items[index]; + playlist.nodes.push({ + title: item.title, + description: item.description, + mediafiles: { + image: { + 'thumbnail': { + path: item.thumbnail.sqDefault + }, + 'image': { + path: item.thumbnail.hqDefault + } + }, + media: { + 'media': { + player: 'youtube', + id: item.id + } + } + } + }); + } + + return playlist; + } +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The rss parser object. + * + * @return {object} The rss parser. + **/ +osmplayer.parser.rss = { + + // The priority for this parser. + priority: 8, + + // Return if this is a valid youtube feed. + valid: function(feed) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + return feed.match(/\.rss$/i) !== null; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'xml'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + return feed; + }, + + // Parse the feed. + parse: function(data) { + var playlist = { + total_rows: 0, + nodes: [] + }; + jQuery('rss channel', data).find('item').each(function(index) { + osmplayer.parser.rss.addRSSItem(playlist, $(this)); + }); + return playlist; + }, + + // Parse an RSS item. + addRSSItem: function(playlist, item) { + playlist.total_rows++; + playlist.nodes.push({ + title: item.find('title').text(), + description: item.find('annotation').text(), + mediafiles: { + image: { + 'image': { + path: item.find('image').text() + } + }, + media: { + 'media': { + path: item.find('location').text() + } + } + } + }); + } +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The asx parser object. + * + * @return {object} The asx parser. + **/ +osmplayer.parser.asx = { + + // The priority for this parser. + priority: 8, + + // Return if this is a valid youtube feed. + valid: function(feed) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + return feed.match(/\.asx$/i) !== null; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'xml'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + return feed; + }, + + // Parse the feed. + parse: function(data) { + var playlist = { + total_rows: 0, + nodes: [] + }; + jQuery('asx entry', data).each(function(index) { + osmplayer.parser.rss.addRSSItem(playlist, $(this)); + }); + return playlist; + } +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The xsfp parser object. + * + * @return {object} The xsfp parser. + **/ +osmplayer.parser.xsfp = { + + // The priority for this parser. + priority: 8, + + // Return if this is a valid youtube feed. + valid: function(feed) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + return feed.match(/\.xml$/i) !== null; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'xml'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + return feed; + }, + + // Parse the feed. + parse: function(data) { + var playlist = { + total_rows: 0, + nodes: [] + }; + jQuery('playlist trackList track', data).each(function(index) { + osmplayer.parser.rss.addRSSItem(playlist, $(this)); + }); + return playlist; + } +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class creates the playlist functionality for the minplayer. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.playlist = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'playlist', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.playlist.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.playlist.prototype.constructor = osmplayer.playlist; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.playlist.prototype.construct = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + vertical: true, + playlist: '', + pageLimit: 10, + shuffle: false + }, this.options); + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + /** The nodes within this playlist. */ + this.nodes = []; + + // Current page. + this.page = -1; + + // The total amount of nodes. + this.totalItems = 0; + + // The current loaded item index. + this.currentItem = 0; + + // The play queue. + this.queue = []; + + // The queue position. + this.queuepos = 0; + + // The current playlist. + this.playlist = this.options.playlist; + + // Create the scroll bar. + this.scroll = this.create('scroll', 'osmplayer'); + + // Create the pager. + this.pager = this.create('pager', 'osmplayer'); + this.pager.bind('nextPage', (function(playlist) { + return function(event) { + playlist.nextPage(); + }; + })(this)); + this.pager.bind('prevPage', (function(playlist) { + return function(event) { + playlist.prevPage(); + }; + })(this)); + + // Get the media. + this.get('media', function(media) { + media.bind('ended', (function(playlist) { + return function(event) { + playlist.next(); + }; + })(this)); + }); + + // Load the playlist. + this.load(0, 0); +}; + +/** + * Sets the playlist. + * + * @param {object} playlist The playlist object. + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.set = function(playlist, loadIndex) { + + // Check to make sure the playlist is an object. + if (typeof playlist !== 'object') { + this.trigger('error', 'Playlist must be an object to set'); + return; + } + + // Check to make sure the playlist has correct format. + if (!playlist.hasOwnProperty('total_rows')) { + this.trigger('error', 'Unknown playlist format.'); + return; + } + + // Make sure the playlist has some rows. + if (playlist.total_rows && playlist.nodes.length) { + + // Set the total rows. + this.totalItems = playlist.total_rows; + this.currentItem = 0; + + // Show or hide the next page if there is or is not a next page. + if (((this.page + 1) * this.options.pageLimit) >= this.totalItems) { + this.pager.nextPage.hide(); + } + else { + this.pager.nextPage.show(); + } + + var teaser = null; + var numNodes = playlist.nodes.length; + this.scroll.elements.list.empty(); + this.nodes = []; + + // Iterate through all the nodes. + for (var index = 0; index < numNodes; index++) { + + // Create the teaser object. + teaser = this.create('teaser', 'osmplayer', this.scroll.elements.list); + teaser.setNode(playlist.nodes[index]); + teaser.bind('nodeLoad', (function(playlist, index) { + return function(event, data) { + playlist.loadItem(index); + }; + })(this, index)); + + // Add this to our nodes array. + this.nodes.push(teaser); + + // If the index is equal to the loadIndex. + if (loadIndex === index) { + this.loadItem(index); + } + } + + // Refresh the sizes. + this.scroll.refresh(); + + // Trigger that the playlist has loaded. + this.trigger('playlistLoad', playlist); + } +}; + +/** + * Stores the current playlist state in the queue. + */ +osmplayer.playlist.prototype.setQueue = function() { + + // Add this item to the queue. + this.queue.push({ + page: this.page, + item: this.currentItem + }); + + // Store the current queue position. + this.queuepos = this.queue.length; +}; + +/** + * Loads the next item. + */ +osmplayer.playlist.prototype.next = function() { + var item = 0, page = this.page; + + // See if we are at the front of the queue. + if (this.queuepos >= this.queue.length) { + + // If this is shuffle, then load a random item. + if (this.options.shuffle) { + item = Math.floor(Math.random() * this.totalItems); + page = Math.floor(item / this.options.pageLimit); + item = item % this.options.pageLimit; + this.load(page, item); + } + else { + + // Otherwise, increment the current item by one. + item = (this.currentItem + 1); + if (item >= this.nodes.length) { + this.load(page + 1, 0); + } + else { + this.loadItem(item); + } + } + } + else { + + // Load the next item in the queue. + this.queuepos = this.queuepos + 1; + var currentQueue = this.queue[this.queuepos]; + this.load(currentQueue.page, currentQueue.item); + } +}; + +/** + * Loads the previous item. + */ +osmplayer.playlist.prototype.prev = function() { + + // Move back into the queue. + this.queuepos = this.queuepos - 1; + this.queuepos = (this.queuepos < 0) ? 0 : this.queuepos; + var currentQueue = this.queue[this.queuepos]; + if (currentQueue) { + this.load(currentQueue.page, currentQueue.item); + } +}; + +/** + * Loads a playlist node. + * + * @param {number} index The index of the item you would like to load. + */ +osmplayer.playlist.prototype.loadItem = function(index) { + if (index < this.nodes.length) { + this.setQueue(); + + // Get the teaser at the current index and deselect it. + var teaser = this.nodes[this.currentItem]; + teaser.select(false); + this.currentItem = index; + + // Get the new teaser and select it. + teaser = this.nodes[index]; + teaser.select(true); + this.trigger('nodeLoad', teaser.node); + } +}; + +/** + * Loads the next page. + * + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.nextPage = function(loadIndex) { + this.load(this.page + 1, loadIndex); +}; + +/** + * Loads the previous page. + * + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.prevPage = function(loadIndex) { + this.load(this.page - 1, loadIndex); +}; + +/** + * Loads a playlist. + * + * @param {integer} page The page to load. + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.load = function(page, loadIndex) { + + // If the playlist and pages are the same, then no need to load. + if ((this.playlist == this.options.playlist) && (page == this.page)) { + this.loadItem(loadIndex); + } + + // Set the new playlist. + this.playlist = this.options.playlist; + + // If the playlist is an object, then go ahead and set it. + if (typeof this.playlist == 'object') { + this.set(this.playlist); + this.playlist = this.playlist.endpoint; + return; + } + + // Say that we are busy. + if (this.scroll.elements.playlist_busy) { + this.scroll.elements.playlist_busy.show(); + } + + // Normalize the page. + page = page || 0; + page = (page < 0) ? 0 : page; + + // Set the queue. + this.setQueue(); + + // Set the new page. + this.page = page; + + // Hide or show the page based on if we are on the first page. + if (this.page == 0) { + this.pager.prevPage.hide(); + } + else { + this.pager.prevPage.show(); + } + + // Get the highest priority parser. + var parser = osmplayer.parser['default']; + for (var name in osmplayer.parser) { + if (osmplayer.parser[name].valid(this.playlist)) { + if (osmplayer.parser[name].priority > parser.priority) { + parser = osmplayer.parser[name]; + } + } + } + + // The start index. + var start = this.page * this.options.pageLimit; + + // Get the feed from the parser. + var feed = parser.getFeed( + this.playlist, + start, + this.options.pageLimit + ); + + // Build our request. + var request = { + type: 'GET', + url: feed, + success: (function(playlist) { + return function(data) { + if (playlist.scroll.elements.playlist_busy) { + playlist.scroll.elements.playlist_busy.hide(); + } + playlist.set(parser.parse(data), loadIndex); + }; + })(this), + error: (function(playlist) { + return function(XMLHttpRequest, textStatus, errorThrown) { + if (playlist.scroll.elements.playlist_busy) { + playlist.scroll.elements.playlist_busy.hide(); + } + playlist.trigger('error', textStatus); + } + })(this) + }; + + // Set the data if applicable. + var dataType = ''; + if (dataType = parser.getType()) { + request.dataType = dataType; + } + + // Perform an ajax callback. + jQuery.ajax(request); +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class provides the scroll functionality for the playlists. + * + * We can calculate how the scrollbar controls the playlist using the + * following diagram / equations. + * ___ ____________ + * | | |\ + * | | list | \ + * | | |y \ + * | | | \ + * | |____________| \ _ _____ + * | | |\ | | | + * | | | \ | | | + * | | | \ | |x | + * | | | \ | | | + * | | | \|_|_ | + * | | | | | | | + * l | window | | | h w + * | | | |_|_| | + * | | | /| | | + * | | | / | | | + * | | | / v| | | + * | | | / | | | + * | |____________|/ |_|____| + * | | | / + * | | | / + * | | | / + * | | | / + * |__|____________|/ + * + * l - The list height. + * h - Handle Bar height. + * w - Window height. + * x - The distance from top of window to the top of the handle. + * y - The disatnce from the top of the list to the top of the window. + * v - The distance from bottom of window to the bottom of the handle. + * + * jQuery UI provides "v". We already know "l", "h", "w". We can then + * calculate the relationship between the scroll bar handle position to the + * list position using the following equations. + * + * x = (w - (v + h)) + * y = ((l - w)/(w - h)) * x + * + * -- or -- + * + * y = ((l - w)/(w - h)) * (w - (v + h)) + * + * We can statically calculate the ((l - w)/(w - h)) as a ratio and use + * that to speed up calculations as follows. + * + * ratio = ((l - w)/(w - h)); + * + * So, our translation equations are as follows... + * + * y = ratio * (w - (v + h)) + * v = w - (h + (y / ratio)) + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.scroll = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'scroll', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.scroll.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.scroll.prototype.constructor = osmplayer.scroll; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.scroll.prototype.construct = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + vertical: true, + hysteresis: 40, + scrollSpeed: 20, + scrollMode: 'auto' + }, this.options); + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + this.getMousePos = function(event) { + return (event.pageY - this.display.offset().top); + }; + this.getPos = function(handlePos) { + return this.ratio * (this.scrollSize - (handlePos + this.handleSize)); + }; + this.getHandlePos = function(pos) { + return this.scrollSize - (this.handleSize + (pos / this.ratio)); + }; + + // If they have a scroll bar. + if (this.elements.scroll) { + + // Get the values of our variables. + this.scrollSize = this.elements.scroll.height(); + this.handleSize = 17; + this.scrollTop = (this.scrollSize - this.handleSize); + this.scrollMid = this.scrollSize / 2; + this.mousePos = 0; + + // Refresh the scroll. + this.refresh(); + + // Create the scroll bar slider control. + this.scroll = this.elements.scroll.slider({ + orientation: 'vertical', + max: this.scrollSize, + value: this.scrollTop, + slide: (function(scroll) { + return function(event, ui) { + + // Get the new position. + var pos = scroll.getPos(ui.value); + + // Ensure it doesn't go over the limits. + if (pos < 0) { + pos = 0; + scroll.scroll.slider('option', 'value', scroll.scrollTop); + } + + // Set our list position. + scroll.elements.list.css('marginTop', -pos + 'px'); + + // Return false to stop the scrolling. + return (pos > 0); + }; + })(this) + }); + + // If they wish to have auto scroll mode. + if (this.options.scrollMode == 'auto') { + + // Bind to the mouse events. + this.elements.list.bind('mousemove', (function(scroll) { + + // Return our event function. + return function(event) { + event.preventDefault(); + scroll.mousePos = (event.pageY - scroll.display.offset().top); + }; + + })(this)).bind('mouseenter', (function(scroll) { + + // Return our event function. + return function(event) { + event.preventDefault(); + scroll.scrolling = true; + setTimeout(function setScroll() { + if (scroll.scrolling) { + + // Get the delta. + var delta = scroll.mousePos - scroll.scrollMid; + + // Determine if we are within our hysteresis. + if (Math.abs(delta) > scroll.options.hysteresis) { + + // Get the hysteresis and delta. + var hyst = scroll.options.hysteresis; + hyst *= (delta > 0) ? -1 : 0; + delta = (scroll.options.scrollSpeed * (delta + hyst)); + delta /= scroll.scrollMid; + + // Get the scroll position. + var pos = scroll.elements.list.css('marginTop'); + pos = parseFloat(pos) - delta; + pos = (pos > 0) ? 0 : pos; + + // Get the maximum top position. + var top = -scroll.listSize + scroll.scrollSize; + pos = (pos < top) ? top : pos; + + // Set the new scroll position. + scroll.elements.list.css('marginTop', pos + 'px'); + + // Set the scroll position. + pos = scroll.getHandlePos(-pos); + scroll.scroll.slider('option', 'value', pos); + } + + // Set timeout to try again. + setTimeout(setScroll, 20); + } + }, 20); + }; + + })(this)).bind('mouseleave', (function(scroll) { + + // Return our event function. + return function(event) { + event.preventDefault(); + scroll.scrolling = false; + }; + + })(this)); + } + } +}; + +/** + * Refresh all the variables that may change. + */ +osmplayer.scroll.prototype.refresh = function() { + this.listSize = this.elements.list.height(); + this.ratio = (this.listSize - this.scrollSize); + this.ratio /= (this.scrollSize - this.handleSize); + if (this.scroll) { + this.elements.list.css('marginTop', '0px'); + this.scroll.slider('option', 'value', this.getHandlePos(0)); + } +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class provides pager functionality. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.pager = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'pager', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.pager.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.pager.prototype.constructor = osmplayer.pager; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.pager.prototype.construct = function() { + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + // Setup the prev button. + this.prevPage = this.elements.prevPage.click((function(pager) { + return function(event) { + event.preventDefault(); + pager.trigger('prevPage'); + }; + })(this)); + + // Setup the next button. + this.nextPage = this.elements.nextPage.click((function(pager) { + return function(event) { + event.preventDefault(); + pager.trigger('nextPage'); + }; + })(this)); +}; +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class provides teaser functionality. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.teaser = function(context, options) { + + /** The preview image. */ + this.preview = null; + + // Derive from display + minplayer.display.call(this, 'teaser', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.teaser.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.teaser.prototype.constructor = osmplayer.teaser; + +/** + * Selects the teaser. + * + * @param {boolean} selected TRUE if selected, FALSE otherwise. + */ +osmplayer.teaser.prototype.select = function(selected) { +}; + +/** + * Sets the node. + * + * @param {object} node The node object to set. + */ +osmplayer.teaser.prototype.setNode = function(node) { + + // Add this to the node info for this teaser. + this.node = node; + + // Set the title of the teaser. + if (this.elements.title) { + this.elements.title.text(node.title); + } + + // Load the thumbnail image if it exists. + var image = osmplayer.getImage(node.mediafiles.image, 'thumbnail'); + if (image) { + if (this.elements.image) { + this.preview = new minplayer.image(this.elements.image); + this.preview.load(image); + } + } + + // Bind when they click on this teaser. + this.display.unbind('click').click((function(teaser) { + return function(event) { + event.preventDefault(); + teaser.trigger('nodeLoad', teaser.node); + }; + })(this)); +}; diff --git a/css/README.txt b/css/README.txt deleted file mode 100755 index 01b3bb02..00000000 --- a/css/README.txt +++ /dev/null @@ -1 +0,0 @@ -This is the folder to contain all of the cached CSS files. Do not place anything in this directory. \ No newline at end of file diff --git a/doc/files.html b/doc/files.html new file mode 100644 index 00000000..73c59bf0 --- /dev/null +++ b/doc/files.html @@ -0,0 +1,336 @@ + + + + + + JsDoc Reference - File Index + + + + + + + + + + +
+

File Index

+ + +
+

src/osmplayer.js

+ +
+ + + + +
+
+
+ +
+

src/osmplayer.pager.js

+ +
+ + + + +
+
+
+ +
+

src/osmplayer.parser.asx.js

+ +
+ + + + +
+
+
+ + +
+ +
+

src/osmplayer.parser.rss.js

+ +
+ + + + +
+
+
+ +
+

src/osmplayer.parser.xspf.js

+ +
+ + + + +
+
+
+ + +
+ +
+

src/osmplayer.playlist.js

+ +
+ + + + +
+
+
+ +
+

src/osmplayer.scroll.js

+ +
+ + + + +
+
+
+ +
+

src/osmplayer.teaser.js

+ +
+ + + + +
+
+
+ + +
+
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + \ No newline at end of file diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 00000000..3e48fd21 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,258 @@ + + + + + + JsDoc Reference - Index + + + + + + + + + + +
+

Class Index

+ + +
+

_global_

+ +
+
+ + +
+ +
+

osmplayer

+ The main osmplayer class. +
+
+ +
+

osmplayer.pager

+ This class provides pager functionality. +
+
+ +
+

osmplayer.playlist

+ This class creates the playlist functionality for the minplayer. +
+
+ +
+

osmplayer.scroll

+ This class provides the scroll functionality for the playlists. +
+
+ +
+

osmplayer.teaser

+ This class provides teaser functionality. +
+
+ + +
+
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + \ No newline at end of file diff --git a/doc/symbols/_global_.html b/doc/symbols/_global_.html new file mode 100644 index 00000000..d2580e2a --- /dev/null +++ b/doc/symbols/_global_.html @@ -0,0 +1,488 @@ + + + + + + + JsDoc Reference - _global_ + + + + + + + + + + + + + +
+ +

+ + Built-In Namespace _global_ +

+ + +

+ + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
getFeed(feed, start, numItems) +
+
+
  +
getType(feed) +
+
+
  +
parse(data) +
+
+
  +
valid(feed) +
+
+
+ + + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + getFeed(feed, start, numItems) + +
+
+ + +
+ Defined in: osmplayer.parser.default.js. + + +
+ + + + +
+
Parameters:
+ +
+ feed + +
+
+ +
+ start + +
+
+ +
+ numItems + +
+
+ +
+ + + + + + + + +
+ + +
+ + + getType(feed) + +
+
+ + +
+ Defined in: osmplayer.parser.default.js. + + +
+ + + + +
+
Parameters:
+ +
+ feed + +
+
+ +
+ + + + + + + + +
+ + +
+ + + parse(data) + +
+
+ + +
+ Defined in: osmplayer.parser.default.js. + + +
+ + + + +
+
Parameters:
+ +
+ data + +
+
+ +
+ + + + + + + + +
+ + +
+ + + valid(feed) + +
+
+ + +
+ Defined in: osmplayer.parser.default.js. + + +
+ + + + +
+
Parameters:
+ +
+ feed + +
+
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + diff --git a/doc/symbols/jQuery.fn.osmplayer.html b/doc/symbols/jQuery.fn.osmplayer.html new file mode 100644 index 00000000..69658a84 --- /dev/null +++ b/doc/symbols/jQuery.fn.osmplayer.html @@ -0,0 +1,329 @@ + + + + + + + JsDoc Reference - jQuery.fn.osmplayer + + + + + + + + + + + + + +
+ +

+ + Class jQuery.fn.osmplayer +

+ + +

+ + + + + + +
Defined in: osmplayer.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ jQuery.fn.osmplayer(options) +
+
+
+ + + + + + + + + + + + +
+
+ Class Detail +
+ +
+ jQuery.fn.osmplayer(options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} options + +
+
The options for this jQuery prototype.
+ +
+ + + + + +
+
Returns:
+ +
{Array} jQuery object.
+ +
+ + + + +
+ + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + diff --git a/doc/symbols/osmplayer.html b/doc/symbols/osmplayer.html new file mode 100644 index 00000000..36066ac5 --- /dev/null +++ b/doc/symbols/osmplayer.html @@ -0,0 +1,952 @@ + + + + + + + JsDoc Reference - osmplayer + + + + + + + + + + + + + +
+ +

+ + Class osmplayer +

+ + +

+ +
Extends + minplayer.
+ + + The main osmplayer class. + +

Usage: +


+
+  // Create a media player.
+  var player = jQuery("#player").osmplayer({
+
+  });
+
+
+

+ + +
Defined in: osmplayer.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ osmplayer(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
<static>   +
+ osmplayer.parser +
+
The parser object.
+
  +
+ playlist +
+
The playlist for this media player.
+
  +
+ playQueue +
+
The play queue and index.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
addToQueue(file) +
+
Adds a file to the play queue.
+
  + +
+
  +
create(name, base, context) +
+
Creates a new plugin within this context.
+
  + +
Gets the full screen element.
+
  +
getBestMedia(files) +
+
Returns the media file with the lowest weight value provided an array of +media files.
+
  +
getFile(file) +
+
Returns a valid media file for this browser.
+
<static>   +
osmplayer.getImage(images, type) +
+
Returns an image provided image array.
+
  +
loadNode(node) +
+
The load node function.
+
  + +
Plays the next media file in the queue.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ osmplayer(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + +
+ + +
<static> + + + osmplayer.parser + +
+
+ The parser object. + +
+ Defined in: osmplayer.parser.default.js. + + +
+ + + + + + + + +
+ + +
+ + + playlist + +
+
+ The playlist for this media player. + + +
+ + + + + + + + +
+ + +
+ + + playQueue + +
+
+ The play queue and index. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + addToQueue(file) + +
+
+ Adds a file to the play queue. + + +
+ + + + +
+
Parameters:
+ +
+ {object} file + +
+
The file to add to the queue.
+ +
+ + + + + + + + +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin.construct
+ +
+ + +
+ + +
+ + {object} + create(name, base, context) + +
+
+ Creates a new plugin within this context. + + +
+ + + + +
+
Parameters:
+ +
+ {string} name + +
+
The name of the plugin you wish to create.
+ +
+ {object} base + +
+
The base object for this plugin.
+ +
+ {object} context + +
+
The context which you would like to create.
+ +
+ + + + + +
+
Returns:
+ +
{object} The new plugin object.
+ +
+ + + + +
+ + +
+ + {object} + fullScreenElement() + +
+
+ Gets the full screen element. + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The element that will go into fullscreen.
+ +
+ + + + +
+ + +
+ + {object} + getBestMedia(files) + +
+
+ Returns the media file with the lowest weight value provided an array of +media files. + + +
+ + + + +
+
Parameters:
+ +
+ {object} files + +
+
The media files to play.
+ +
+ + + + + +
+
Returns:
+ +
{object} The best media file.
+ +
+ + + + +
+ + +
+ + {object} + getFile(file) + +
+
+ Returns a valid media file for this browser. + + +
+ + + + +
+
Parameters:
+ +
+ {object} file + +
+
The file object.
+ +
+ + + + + +
+
Returns:
+ +
{object} The best media file.
+ +
+ + + + +
+ + +
<static> + + {object} + osmplayer.getImage(images, type) + +
+
+ Returns an image provided image array. + + +
+ + + + +
+
Parameters:
+ +
+ {object} images + +
+
The images to search for.
+ +
+ {string} type + +
+
The type of image to look for.
+ +
+ + + + + +
+
Returns:
+ +
{object} The best image match.
+ +
+ + + + +
+ + +
+ + + loadNode(node) + +
+
+ The load node function. + + +
+ + + + +
+
Parameters:
+ +
+ {object} node + +
+
A media node object.
+ +
+ + + + + + + + +
+ + +
+ + + playNext() + +
+
+ Plays the next media file in the queue. + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + diff --git a/doc/symbols/osmplayer.pager.html b/doc/symbols/osmplayer.pager.html new file mode 100644 index 00000000..9ac902d7 --- /dev/null +++ b/doc/symbols/osmplayer.pager.html @@ -0,0 +1,449 @@ + + + + + + + JsDoc Reference - osmplayer.pager + + + + + + + + + + + + + +
+ +

+ + Class osmplayer.pager +

+ + +

+ +
Extends + minplayer.display.
+ + + This class provides pager functionality. + + +
Defined in: osmplayer.pager.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ osmplayer.pager(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ osmplayer.pager(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin#construct
+ +
+ + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + diff --git a/doc/symbols/osmplayer.playlist.html b/doc/symbols/osmplayer.playlist.html new file mode 100644 index 00000000..68cbad2a --- /dev/null +++ b/doc/symbols/osmplayer.playlist.html @@ -0,0 +1,820 @@ + + + + + + + JsDoc Reference - osmplayer.playlist + + + + + + + + + + + + + +
+ +

+ + Class osmplayer.playlist +

+ + +

+ +
Extends + minplayer.display.
+ + + This class creates the playlist functionality for the minplayer. + + +
Defined in: osmplayer.playlist.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ osmplayer.playlist(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
  +
+ nodes +
+
The nodes within this playlist.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
+
  +
load(page, loadIndex) +
+
Loads a playlist.
+
  +
loadItem(index) +
+
Loads a playlist node.
+
  +
next() +
+
Loads the next item.
+
  +
nextPage(loadIndex) +
+
Loads the next page.
+
  +
prev() +
+
Loads the previous item.
+
  +
prevPage(loadIndex) +
+
Loads the previous page.
+
  +
set(playlist, loadIndex) +
+
Sets the playlist.
+
  + +
Stores the current playlist state in the queue.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ osmplayer.playlist(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + +
+ + +
+ + + nodes + +
+
+ The nodes within this playlist. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin#construct
+ +
+ + +
+ + +
+ + + load(page, loadIndex) + +
+
+ Loads a playlist. + + +
+ + + + +
+
Parameters:
+ +
+ {integer} page + +
+
The page to load.
+ +
+ {integer} loadIndex + +
+
The index of the item to load.
+ +
+ + + + + + + + +
+ + +
+ + + loadItem(index) + +
+
+ Loads a playlist node. + + +
+ + + + +
+
Parameters:
+ +
+ {number} index + +
+
The index of the item you would like to load.
+ +
+ + + + + + + + +
+ + +
+ + + next() + +
+
+ Loads the next item. + + +
+ + + + + + + + + + + +
+ + +
+ + + nextPage(loadIndex) + +
+
+ Loads the next page. + + +
+ + + + +
+
Parameters:
+ +
+ {integer} loadIndex + +
+
The index of the item to load.
+ +
+ + + + + + + + +
+ + +
+ + + prev() + +
+
+ Loads the previous item. + + +
+ + + + + + + + + + + +
+ + +
+ + + prevPage(loadIndex) + +
+
+ Loads the previous page. + + +
+ + + + +
+
Parameters:
+ +
+ {integer} loadIndex + +
+
The index of the item to load.
+ +
+ + + + + + + + +
+ + +
+ + + set(playlist, loadIndex) + +
+
+ Sets the playlist. + + +
+ + + + +
+
Parameters:
+ +
+ {object} playlist + +
+
The playlist object.
+ +
+ {integer} loadIndex + +
+
The index of the item to load.
+ +
+ + + + + + + + +
+ + +
+ + + setQueue() + +
+
+ Stores the current playlist state in the queue. + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + diff --git a/doc/symbols/osmplayer.scroll.html b/doc/symbols/osmplayer.scroll.html new file mode 100644 index 00000000..afa3321a --- /dev/null +++ b/doc/symbols/osmplayer.scroll.html @@ -0,0 +1,673 @@ + + + + + + + JsDoc Reference - osmplayer.scroll + + + + + + + + + + + + + +
+ +

+ + Class osmplayer.scroll +

+ + +

+ +
Extends + minplayer.display.
+ + + This class provides the scroll functionality for the playlists. + +We can calculate how the scrollbar controls the playlist using the +following diagram / equations. + ___ ____________ + | | |\ + | | list | \ + | | |y \ + | | | \ + | |____________| \ _ _____ + | | |\ | | | + | | | \ | | | + | | | \ | |x | + | | | \ | | | + | | | \|_|_ | + | | | | | | | + l | window | | | h w + | | | |_|_| | + | | | /| | | + | | | / | | | + | | | / v| | | + | | | / | | | + | |____________|/ |_|____| + | | | / + | | | / + | | | / + | | | / + |__|____________|/ + + l - The list height. + h - Handle Bar height. + w - Window height. + x - The distance from top of window to the top of the handle. + y - The disatnce from the top of the list to the top of the window. + v - The distance from bottom of window to the bottom of the handle. + + jQuery UI provides "v". We already know "l", "h", "w". We can then + calculate the relationship between the scroll bar handle position to the + list position using the following equations. + + x = (w - (v + h)) + y = ((l - w)/(w - h)) * x + + -- or -- + + y = ((l - w)/(w - h)) * (w - (v + h)) + + We can statically calculate the ((l - w)/(w - h)) as a ratio and use + that to speed up calculations as follows. + + ratio = ((l - w)/(w - h)); + + So, our translation equations are as follows... + + y = ratio * (w - (v + h)) + v = w - (h + (y / ratio)) + + +
Defined in: osmplayer.scroll.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ osmplayer.scroll(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
+
  +
getHandlePos(pos) +
+
+
  +
getMousePos(event) +
+
+
  +
getPos(handlePos) +
+
+
  +
refresh() +
+
Refresh all the variables that may change.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ osmplayer.scroll(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin#construct
+ +
+ + +
+ + +
+ + + getHandlePos(pos) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ pos + +
+
+ +
+ + + + + + + + +
+ + +
+ + + getMousePos(event) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ event + +
+
+ +
+ + + + + + + + +
+ + +
+ + + getPos(handlePos) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ handlePos + +
+
+ +
+ + + + + + + + +
+ + +
+ + + refresh() + +
+
+ Refresh all the variables that may change. + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + diff --git a/doc/symbols/osmplayer.teaser.html b/doc/symbols/osmplayer.teaser.html new file mode 100644 index 00000000..ec3ec649 --- /dev/null +++ b/doc/symbols/osmplayer.teaser.html @@ -0,0 +1,530 @@ + + + + + + + JsDoc Reference - osmplayer.teaser + + + + + + + + + + + + + +
+ +

+ + Class osmplayer.teaser +

+ + +

+ +
Extends + minplayer.display.
+ + + This class provides teaser functionality. + + +
Defined in: osmplayer.teaser.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ osmplayer.teaser(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
  +
+ preview +
+
The preview image.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
select(selected) +
+
Selects the teaser.
+
  +
setNode(node) +
+
Sets the node.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ osmplayer.teaser(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + +
+ + +
+ + + preview + +
+
+ The preview image. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + select(selected) + +
+
+ Selects the teaser. + + +
+ + + + +
+
Parameters:
+ +
+ {boolean} selected + +
+
TRUE if selected, FALSE otherwise.
+ +
+ + + + + + + + +
+ + +
+ + + setNode(node) + +
+
+ Sets the node. + + +
+ + + + +
+
Parameters:
+ +
+ {object} node + +
+
The node object to set.
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 23:04:33 GMT-0700 (PDT) +
+ + diff --git a/doc/symbols/src/src_osmplayer.js.html b/doc/symbols/src/src_osmplayer.js.html new file mode 100644 index 00000000..fe1ce547 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.js.html @@ -0,0 +1,247 @@ +
  1 // Add a way to instanciate using jQuery prototype.
+  2 if (!jQuery.fn.osmplayer) {
+  3 
+  4   /**
+  5    * @constructor
+  6    *
+  7    * Define a jQuery osmplayer prototype.
+  8    *
+  9    * @param {object} options The options for this jQuery prototype.
+ 10    * @return {Array} jQuery object.
+ 11    */
+ 12   jQuery.fn.osmplayer = function(options) {
+ 13     return jQuery(this).each(function() {
+ 14       options = options || {};
+ 15       options.id = options.id || $(this).attr('id') || Math.random();
+ 16       if (!minplayer.plugins[options.id]) {
+ 17         options.template = options.template || 'default';
+ 18         if (osmplayer[options.template]) {
+ 19           new osmplayer[options.template](jQuery(this), options);
+ 20         }
+ 21         else {
+ 22           new osmplayer(jQuery(this), options);
+ 23         }
+ 24       }
+ 25     });
+ 26   };
+ 27 }
+ 28 
+ 29 /**
+ 30  * @constructor
+ 31  * @extends minplayer
+ 32  * @class The main osmplayer class.
+ 33  *
+ 34  * <p><strong>Usage:</strong>
+ 35  * <pre><code>
+ 36  *
+ 37  *   // Create a media player.
+ 38  *   var player = jQuery("#player").osmplayer({
+ 39  *
+ 40  *   });
+ 41  *
+ 42  * </code></pre>
+ 43  * </p>
+ 44  *
+ 45  * @param {object} context The jQuery context.
+ 46  * @param {object} options This components options.
+ 47  */
+ 48 osmplayer = function(context, options) {
+ 49 
+ 50   // Derive from minplayer
+ 51   minplayer.call(this, context, options);
+ 52 };
+ 53 
+ 54 /** Derive from minplayer. */
+ 55 osmplayer.prototype = new minplayer();
+ 56 
+ 57 /** Reset the constructor. */
+ 58 osmplayer.prototype.constructor = osmplayer;
+ 59 
+ 60 /**
+ 61  * Creates a new plugin within this context.
+ 62  *
+ 63  * @param {string} name The name of the plugin you wish to create.
+ 64  * @param {object} base The base object for this plugin.
+ 65  * @param {object} context The context which you would like to create.
+ 66  * @return {object} The new plugin object.
+ 67  */
+ 68 osmplayer.prototype.create = function(name, base, context) {
+ 69   return minplayer.prototype.create.call(this, name, 'osmplayer', context);
+ 70 };
+ 71 
+ 72 /**
+ 73  * @see minplayer.plugin.construct
+ 74  */
+ 75 osmplayer.prototype.construct = function() {
+ 76 
+ 77   // Make sure we provide default options...
+ 78   this.options = jQuery.extend({
+ 79     playlist: '',
+ 80     swfplayer: 'minplayer/flash/minplayer.swf'
+ 81   }, this.options);
+ 82 
+ 83   // Call the minplayer display constructor.
+ 84   minplayer.prototype.construct.call(this);
+ 85 
+ 86   /** The play queue and index. */
+ 87   this.playQueue = [];
+ 88   this.playIndex = 0;
+ 89 
+ 90   /** The playlist for this media player. */
+ 91   this.playlist = this.create('playlist', 'osmplayer');
+ 92 
+ 93   // Bind when the playlists loads a node.
+ 94   this.playlist.bind('nodeLoad', (function(player) {
+ 95     return function(event, data) {
+ 96 
+ 97       // Load this node.
+ 98       player.loadNode(data);
+ 99     };
+100   })(this));
+101 };
+102 
+103 /**
+104  * Gets the full screen element.
+105  *
+106  * @return {object} The element that will go into fullscreen.
+107  */
+108 osmplayer.prototype.fullScreenElement = function() {
+109   return this.elements.minplayer;
+110 };
+111 
+112 /**
+113  * The load node function.
+114  *
+115  * @param {object} node A media node object.
+116  */
+117 osmplayer.prototype.loadNode = function(node) {
+118   if (node.mediafiles) {
+119 
+120     // Load the media files.
+121     var media = node.mediafiles.media;
+122     if (media) {
+123       this.playQueue.length = 0;
+124       this.playQueue = [];
+125       this.playIndex = 0;
+126       this.addToQueue(media.intro);
+127       this.addToQueue(media.commercial);
+128       this.addToQueue(media.prereel);
+129       this.addToQueue(media.media);
+130       this.addToQueue(media.postreel);
+131     }
+132 
+133     // Load the preview image.
+134     this.options.preview = osmplayer.getImage(node.mediafiles.image, 'preview');
+135     this.playLoader.loadPreview();
+136 
+137     // Play the next media
+138     this.playNext();
+139   }
+140 };
+141 
+142 /**
+143  * Adds a file to the play queue.
+144  *
+145  * @param {object} file The file to add to the queue.
+146  */
+147 osmplayer.prototype.addToQueue = function(file) {
+148   if (file) {
+149     this.playQueue.push(this.getFile(file));
+150   }
+151 };
+152 
+153 /**
+154  * Returns a valid media file for this browser.
+155  *
+156  * @param {object} file The file object.
+157  * @return {object} The best media file.
+158  */
+159 osmplayer.prototype.getFile = function(file) {
+160   if (file) {
+161     var type = typeof file;
+162     if (((type === 'object') || (type === 'array')) && file[0]) {
+163       file = this.getBestMedia(file);
+164     }
+165   }
+166   return file;
+167 };
+168 
+169 /**
+170  * Returns the media file with the lowest weight value provided an array of
+171  * media files.
+172  *
+173  * @param {object} files The media files to play.
+174  * @return {object} The best media file.
+175  */
+176 osmplayer.prototype.getBestMedia = function(files) {
+177   var mFile = null;
+178   var i = files.length;
+179   while (i--) {
+180     var tempFile = new minplayer.file(files[i]);
+181     if (!mFile || (tempFile.priority > mFile.priority)) {
+182       mFile = tempFile;
+183     }
+184   }
+185   return mFile;
+186 };
+187 
+188 /**
+189  * Plays the next media file in the queue.
+190  */
+191 osmplayer.prototype.playNext = function() {
+192   if (this.playQueue.length > this.playIndex) {
+193     this.load(this.playQueue[this.playIndex]);
+194     this.playIndex++;
+195   }
+196   else if (this.options.repeat) {
+197     this.playIndex = 0;
+198     this.playNext();
+199   }
+200   else {
+201     // If there is no playlist, and no repeat, we will
+202     // just seek to the beginning and pause.
+203     this.options.autostart = false;
+204     this.playIndex = 0;
+205     this.playNext();
+206   }
+207 };
+208 
+209 /**
+210  * Returns an image provided image array.
+211  *
+212  * @param {object} images The images to search for.
+213  * @param {string} type The type of image to look for.
+214  * @return {object} The best image match.
+215  */
+216 osmplayer.getImage = function(images, type) {
+217   var image = '';
+218 
+219   if (images) {
+220 
+221     // If the image type exists, then just use that one.
+222     if (images[type]) {
+223       image = images[type];
+224     }
+225     else {
+226 
+227       // Or, just pick the first one available.
+228       for (type in images) {
+229         if (images.hasOwnProperty(type)) {
+230           image = images[type];
+231           break;
+232         }
+233       }
+234     }
+235   }
+236 
+237   // Return the image path.
+238   return (typeof image === 'string') ? image : image.path;
+239 };
+240 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.pager.js.html b/doc/symbols/src/src_osmplayer.pager.js.html new file mode 100644 index 00000000..835d5643 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.pager.js.html @@ -0,0 +1,55 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @extends minplayer.display
+  7  * @class This class provides pager functionality.
+  8  *
+  9  * @param {object} context The jQuery context.
+ 10  * @param {object} options This components options.
+ 11  */
+ 12 osmplayer.pager = function(context, options) {
+ 13 
+ 14   // Derive from display
+ 15   minplayer.display.call(this, 'pager', context, options);
+ 16 };
+ 17 
+ 18 /** Derive from minplayer.display. */
+ 19 osmplayer.pager.prototype = new minplayer.display();
+ 20 
+ 21 /** Reset the constructor. */
+ 22 osmplayer.pager.prototype.constructor = osmplayer.pager;
+ 23 
+ 24 /**
+ 25  * @see minplayer.plugin#construct
+ 26  */
+ 27 osmplayer.pager.prototype.construct = function() {
+ 28 
+ 29   // Call the minplayer plugin constructor.
+ 30   minplayer.display.prototype.construct.call(this);
+ 31 
+ 32   // Setup the prev button.
+ 33   this.prevPage = this.elements.prevPage.click((function(pager) {
+ 34     return function(event) {
+ 35       event.preventDefault();
+ 36       pager.trigger('prevPage');
+ 37     };
+ 38   })(this));
+ 39 
+ 40   // Setup the next button.
+ 41   this.nextPage = this.elements.nextPage.click((function(pager) {
+ 42     return function(event) {
+ 43       event.preventDefault();
+ 44       pager.trigger('nextPage');
+ 45     };
+ 46   })(this));
+ 47 };
+ 48 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.parser.asx.js.html b/doc/symbols/src/src_osmplayer.parser.asx.js.html new file mode 100644 index 00000000..2d3f99e3 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.parser.asx.js.html @@ -0,0 +1,52 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /** The parser object. */
+  5 osmplayer.parser = osmplayer.parser || {};
+  6 
+  7 /**
+  8  * The asx parser object.
+  9  *
+ 10  * @return {object} The asx parser.
+ 11  **/
+ 12 osmplayer.parser.asx = {
+ 13 
+ 14   // The priority for this parser.
+ 15   priority: 8,
+ 16 
+ 17   // Return if this is a valid youtube feed.
+ 18   valid: function(feed) {
+ 19     feed = feed.replace(/(.*)\??(.*)/i, '$1');
+ 20     return feed.match(/\.asx$/i) !== null;
+ 21   },
+ 22 
+ 23   // Returns the type of request to make.
+ 24   getType: function(feed) {
+ 25     return 'xml';
+ 26   },
+ 27 
+ 28   // Returns the feed provided the start and numItems.
+ 29   getFeed: function(feed, start, numItems) {
+ 30     return feed;
+ 31   },
+ 32 
+ 33   // Parse the feed.
+ 34   parse: function(data) {
+ 35     var playlist = {
+ 36       total_rows: 0,
+ 37       nodes: []
+ 38     };
+ 39     jQuery('asx entry', data).each(function(index) {
+ 40       osmplayer.parser.rss.addRSSItem(playlist, $(this));
+ 41     });
+ 42     return playlist;
+ 43   }
+ 44 };
+ 45 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.parser.default.js.html b/doc/symbols/src/src_osmplayer.parser.default.js.html new file mode 100644 index 00000000..9bbc9567 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.parser.default.js.html @@ -0,0 +1,47 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /** The parser object. */
+  5 osmplayer.parser = osmplayer.parser || {};
+  6 
+  7 /**
+  8  * The default parser object.
+  9  *
+ 10  * @return {object} The default parser.
+ 11  **/
+ 12 osmplayer.parser['default'] = {
+ 13 
+ 14   // The priority for this parser.
+ 15   priority: 1,
+ 16 
+ 17   // This parser is always valid.
+ 18   valid: function(feed) {
+ 19     return true;
+ 20   },
+ 21 
+ 22   // Returns the type of request to make.
+ 23   getType: function(feed) {
+ 24     return 'json';
+ 25   },
+ 26 
+ 27   // Returns the feed provided the start and numItems.
+ 28   getFeed: function(feed, start, numItems) {
+ 29     feed = feed.replace(/(.*)\??(.*)/i, '$1');
+ 30     feed += '?start-index=' + start;
+ 31     feed += '&max-results=' + numItems;
+ 32     return feed;
+ 33   },
+ 34 
+ 35   // Parse the feed.
+ 36   parse: function(data) {
+ 37     return data;
+ 38   }
+ 39 };
+ 40 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.parser.rss.js.html b/doc/symbols/src/src_osmplayer.parser.rss.js.html new file mode 100644 index 00000000..49f03538 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.parser.rss.js.html @@ -0,0 +1,73 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /** The parser object. */
+  5 osmplayer.parser = osmplayer.parser || {};
+  6 
+  7 /**
+  8  * The rss parser object.
+  9  *
+ 10  * @return {object} The rss parser.
+ 11  **/
+ 12 osmplayer.parser.rss = {
+ 13 
+ 14   // The priority for this parser.
+ 15   priority: 8,
+ 16 
+ 17   // Return if this is a valid youtube feed.
+ 18   valid: function(feed) {
+ 19     feed = feed.replace(/(.*)\??(.*)/i, '$1');
+ 20     return feed.match(/\.rss$/i) !== null;
+ 21   },
+ 22 
+ 23   // Returns the type of request to make.
+ 24   getType: function(feed) {
+ 25     return 'xml';
+ 26   },
+ 27 
+ 28   // Returns the feed provided the start and numItems.
+ 29   getFeed: function(feed, start, numItems) {
+ 30     return feed;
+ 31   },
+ 32 
+ 33   // Parse the feed.
+ 34   parse: function(data) {
+ 35     var playlist = {
+ 36       total_rows: 0,
+ 37       nodes: []
+ 38     };
+ 39     jQuery('rss channel', data).find('item').each(function(index) {
+ 40       osmplayer.parser.rss.addRSSItem(playlist, $(this));
+ 41     });
+ 42     return playlist;
+ 43   },
+ 44 
+ 45   // Parse an RSS item.
+ 46   addRSSItem: function(playlist, item) {
+ 47     playlist.total_rows++;
+ 48     playlist.nodes.push({
+ 49       title: item.find('title').text(),
+ 50       description: item.find('annotation').text(),
+ 51       mediafiles: {
+ 52         image: {
+ 53           'image': {
+ 54             path: item.find('image').text()
+ 55           }
+ 56         },
+ 57         media: {
+ 58           'media': {
+ 59             path: item.find('location').text()
+ 60           }
+ 61         }
+ 62       }
+ 63     });
+ 64   }
+ 65 };
+ 66 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.parser.xspf.js.html b/doc/symbols/src/src_osmplayer.parser.xspf.js.html new file mode 100644 index 00000000..3d191504 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.parser.xspf.js.html @@ -0,0 +1,52 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /** The parser object. */
+  5 osmplayer.parser = osmplayer.parser || {};
+  6 
+  7 /**
+  8  * The xsfp parser object.
+  9  *
+ 10  * @return {object} The xsfp parser.
+ 11  **/
+ 12 osmplayer.parser.xsfp = {
+ 13 
+ 14   // The priority for this parser.
+ 15   priority: 8,
+ 16 
+ 17   // Return if this is a valid youtube feed.
+ 18   valid: function(feed) {
+ 19     feed = feed.replace(/(.*)\??(.*)/i, '$1');
+ 20     return feed.match(/\.xml$/i) !== null;
+ 21   },
+ 22 
+ 23   // Returns the type of request to make.
+ 24   getType: function(feed) {
+ 25     return 'xml';
+ 26   },
+ 27 
+ 28   // Returns the feed provided the start and numItems.
+ 29   getFeed: function(feed, start, numItems) {
+ 30     return feed;
+ 31   },
+ 32 
+ 33   // Parse the feed.
+ 34   parse: function(data) {
+ 35     var playlist = {
+ 36       total_rows: 0,
+ 37       nodes: []
+ 38     };
+ 39     jQuery('playlist trackList track', data).each(function(index) {
+ 40       osmplayer.parser.rss.addRSSItem(playlist, $(this));
+ 41     });
+ 42     return playlist;
+ 43   }
+ 44 };
+ 45 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.parser.youtube.js.html b/doc/symbols/src/src_osmplayer.parser.youtube.js.html new file mode 100644 index 00000000..a8e984d2 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.parser.youtube.js.html @@ -0,0 +1,79 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /** The parser object. */
+  5 osmplayer.parser = osmplayer.parser || {};
+  6 
+  7 /**
+  8  * The youtube parser object.
+  9  *
+ 10  * @return {object} The youtube parser.
+ 11  **/
+ 12 osmplayer.parser.youtube = {
+ 13 
+ 14   // The priority for this parser.
+ 15   priority: 10,
+ 16 
+ 17   // Return if this is a valid youtube feed.
+ 18   valid: function(feed) {
+ 19     return (feed.search(/^http(s)?\:\/\/gdata\.youtube\.com/i) === 0);
+ 20   },
+ 21 
+ 22   // Returns the type of request to make.
+ 23   getType: function(feed) {
+ 24     return 'jsonp';
+ 25   },
+ 26 
+ 27   // Returns the feed provided the start and numItems.
+ 28   getFeed: function(feed, start, numItems) {
+ 29     feed = feed.replace(/(.*)\??(.*)/i, '$1');
+ 30     feed += '?start-index=' + (start + 1);
+ 31     feed += '&max-results=' + (numItems);
+ 32     feed += '&v=2&alt=jsonc';
+ 33     return feed;
+ 34   },
+ 35 
+ 36   // Parse the feed.
+ 37   parse: function(data) {
+ 38     data = data.data;
+ 39     var playlist = {
+ 40       total_rows: data.totalItems,
+ 41       nodes: []
+ 42     };
+ 43 
+ 44     // Iterate through the items and parse it.
+ 45     for (var index in data.items) {
+ 46       var item = data.items[index];
+ 47       playlist.nodes.push({
+ 48         title: item.title,
+ 49         description: item.description,
+ 50         mediafiles: {
+ 51           image: {
+ 52             'thumbnail': {
+ 53               path: item.thumbnail.sqDefault
+ 54             },
+ 55             'image': {
+ 56               path: item.thumbnail.hqDefault
+ 57             }
+ 58           },
+ 59           media: {
+ 60             'media': {
+ 61               player: 'youtube',
+ 62               id: item.id
+ 63             }
+ 64           }
+ 65         }
+ 66       });
+ 67     }
+ 68 
+ 69     return playlist;
+ 70   }
+ 71 };
+ 72 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.playlist.js.html b/doc/symbols/src/src_osmplayer.playlist.js.html new file mode 100644 index 00000000..217027d3 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.playlist.js.html @@ -0,0 +1,368 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @extends minplayer.display
+  7  * @class This class creates the playlist functionality for the minplayer.
+  8  *
+  9  * @param {object} context The jQuery context.
+ 10  * @param {object} options This components options.
+ 11  */
+ 12 osmplayer.playlist = function(context, options) {
+ 13 
+ 14   // Derive from display
+ 15   minplayer.display.call(this, 'playlist', context, options);
+ 16 };
+ 17 
+ 18 /** Derive from minplayer.display. */
+ 19 osmplayer.playlist.prototype = new minplayer.display();
+ 20 
+ 21 /** Reset the constructor. */
+ 22 osmplayer.playlist.prototype.constructor = osmplayer.playlist;
+ 23 
+ 24 /**
+ 25  * @see minplayer.plugin#construct
+ 26  */
+ 27 osmplayer.playlist.prototype.construct = function() {
+ 28 
+ 29   // Make sure we provide default options...
+ 30   this.options = jQuery.extend({
+ 31     vertical: true,
+ 32     playlist: '',
+ 33     pageLimit: 10,
+ 34     shuffle: false
+ 35   }, this.options);
+ 36 
+ 37   // Call the minplayer plugin constructor.
+ 38   minplayer.display.prototype.construct.call(this);
+ 39 
+ 40   /** The nodes within this playlist. */
+ 41   this.nodes = [];
+ 42 
+ 43   // Current page.
+ 44   this.page = -1;
+ 45 
+ 46   // The total amount of nodes.
+ 47   this.totalItems = 0;
+ 48 
+ 49   // The current loaded item index.
+ 50   this.currentItem = 0;
+ 51 
+ 52   // The play queue.
+ 53   this.queue = [];
+ 54 
+ 55   // The queue position.
+ 56   this.queuepos = 0;
+ 57 
+ 58   // The current playlist.
+ 59   this.playlist = this.options.playlist;
+ 60 
+ 61   // Create the scroll bar.
+ 62   this.scroll = this.create('scroll', 'osmplayer');
+ 63 
+ 64   // Create the pager.
+ 65   this.pager = this.create('pager', 'osmplayer');
+ 66   this.pager.bind('nextPage', (function(playlist) {
+ 67     return function(event) {
+ 68       playlist.nextPage();
+ 69     };
+ 70   })(this));
+ 71   this.pager.bind('prevPage', (function(playlist) {
+ 72     return function(event) {
+ 73       playlist.prevPage();
+ 74     };
+ 75   })(this));
+ 76 
+ 77   // Get the media.
+ 78   this.get('media', function(media) {
+ 79     media.bind('ended', (function(playlist) {
+ 80       return function(event) {
+ 81         playlist.next();
+ 82       };
+ 83     })(this));
+ 84   });
+ 85 
+ 86   // Load the playlist.
+ 87   this.load(0, 0);
+ 88 };
+ 89 
+ 90 /**
+ 91  * Sets the playlist.
+ 92  *
+ 93  * @param {object} playlist The playlist object.
+ 94  * @param {integer} loadIndex The index of the item to load.
+ 95  */
+ 96 osmplayer.playlist.prototype.set = function(playlist, loadIndex) {
+ 97 
+ 98   // Check to make sure the playlist is an object.
+ 99   if (typeof playlist !== 'object') {
+100     this.trigger('error', 'Playlist must be an object to set');
+101     return;
+102   }
+103 
+104   // Check to make sure the playlist has correct format.
+105   if (!playlist.hasOwnProperty('total_rows')) {
+106     this.trigger('error', 'Unknown playlist format.');
+107     return;
+108   }
+109 
+110   // Make sure the playlist has some rows.
+111   if (playlist.total_rows && playlist.nodes.length) {
+112 
+113     // Set the total rows.
+114     this.totalItems = playlist.total_rows;
+115     this.currentItem = 0;
+116 
+117     // Show or hide the next page if there is or is not a next page.
+118     if (((this.page + 1) * this.options.pageLimit) >= this.totalItems) {
+119       this.pager.nextPage.hide();
+120     }
+121     else {
+122       this.pager.nextPage.show();
+123     }
+124 
+125     var teaser = null;
+126     var numNodes = playlist.nodes.length;
+127     this.scroll.elements.list.empty();
+128     this.nodes = [];
+129 
+130     // Iterate through all the nodes.
+131     for (var index = 0; index < numNodes; index++) {
+132 
+133       // Create the teaser object.
+134       teaser = this.create('teaser', 'osmplayer', this.scroll.elements.list);
+135       teaser.setNode(playlist.nodes[index]);
+136       teaser.bind('nodeLoad', (function(playlist, index) {
+137         return function(event, data) {
+138           playlist.loadItem(index);
+139         };
+140       })(this, index));
+141 
+142       // Add this to our nodes array.
+143       this.nodes.push(teaser);
+144 
+145       // If the index is equal to the loadIndex.
+146       if (loadIndex === index) {
+147         this.loadItem(index);
+148       }
+149     }
+150 
+151     // Refresh the sizes.
+152     this.scroll.refresh();
+153 
+154     // Trigger that the playlist has loaded.
+155     this.trigger('playlistLoad', playlist);
+156   }
+157 };
+158 
+159 /**
+160  * Stores the current playlist state in the queue.
+161  */
+162 osmplayer.playlist.prototype.setQueue = function() {
+163 
+164   // Add this item to the queue.
+165   this.queue.push({
+166     page: this.page,
+167     item: this.currentItem
+168   });
+169 
+170   // Store the current queue position.
+171   this.queuepos = this.queue.length;
+172 };
+173 
+174 /**
+175  * Loads the next item.
+176  */
+177 osmplayer.playlist.prototype.next = function() {
+178   var item = 0, page = this.page;
+179 
+180   // See if we are at the front of the queue.
+181   if (this.queuepos >= this.queue.length) {
+182 
+183     // If this is shuffle, then load a random item.
+184     if (this.options.shuffle) {
+185       item = Math.floor(Math.random() * this.totalItems);
+186       page = Math.floor(item / this.options.pageLimit);
+187       item = item % this.options.pageLimit;
+188       this.load(page, item);
+189     }
+190     else {
+191 
+192       // Otherwise, increment the current item by one.
+193       item = (this.currentItem + 1);
+194       if (item >= this.nodes.length) {
+195         this.load(page + 1, 0);
+196       }
+197       else {
+198         this.loadItem(item);
+199       }
+200     }
+201   }
+202   else {
+203 
+204     // Load the next item in the queue.
+205     this.queuepos = this.queuepos + 1;
+206     var currentQueue = this.queue[this.queuepos];
+207     this.load(currentQueue.page, currentQueue.item);
+208   }
+209 };
+210 
+211 /**
+212  * Loads the previous item.
+213  */
+214 osmplayer.playlist.prototype.prev = function() {
+215 
+216   // Move back into the queue.
+217   this.queuepos = this.queuepos - 1;
+218   this.queuepos = (this.queuepos < 0) ? 0 : this.queuepos;
+219   var currentQueue = this.queue[this.queuepos];
+220   if (currentQueue) {
+221     this.load(currentQueue.page, currentQueue.item);
+222   }
+223 };
+224 
+225 /**
+226  * Loads a playlist node.
+227  *
+228  * @param {number} index The index of the item you would like to load.
+229  */
+230 osmplayer.playlist.prototype.loadItem = function(index) {
+231   if (index < this.nodes.length) {
+232     this.setQueue();
+233 
+234     // Get the teaser at the current index and deselect it.
+235     var teaser = this.nodes[this.currentItem];
+236     teaser.select(false);
+237     this.currentItem = index;
+238 
+239     // Get the new teaser and select it.
+240     teaser = this.nodes[index];
+241     teaser.select(true);
+242     this.trigger('nodeLoad', teaser.node);
+243   }
+244 };
+245 
+246 /**
+247  * Loads the next page.
+248  *
+249  * @param {integer} loadIndex The index of the item to load.
+250  */
+251 osmplayer.playlist.prototype.nextPage = function(loadIndex) {
+252   this.load(this.page + 1, loadIndex);
+253 };
+254 
+255 /**
+256  * Loads the previous page.
+257  *
+258  * @param {integer} loadIndex The index of the item to load.
+259  */
+260 osmplayer.playlist.prototype.prevPage = function(loadIndex) {
+261   this.load(this.page - 1, loadIndex);
+262 };
+263 
+264 /**
+265  * Loads a playlist.
+266  *
+267  * @param {integer} page The page to load.
+268  * @param {integer} loadIndex The index of the item to load.
+269  */
+270 osmplayer.playlist.prototype.load = function(page, loadIndex) {
+271 
+272   // If the playlist and pages are the same, then no need to load.
+273   if ((this.playlist == this.options.playlist) && (page == this.page)) {
+274     this.loadItem(loadIndex);
+275   }
+276 
+277   // Set the new playlist.
+278   this.playlist = this.options.playlist;
+279 
+280   // If the playlist is an object, then go ahead and set it.
+281   if (typeof this.playlist == 'object') {
+282     this.set(this.playlist);
+283     this.playlist = this.playlist.endpoint;
+284     return;
+285   }
+286 
+287   // Say that we are busy.
+288   if (this.scroll.elements.playlist_busy) {
+289     this.scroll.elements.playlist_busy.show();
+290   }
+291 
+292   // Normalize the page.
+293   page = page || 0;
+294   page = (page < 0) ? 0 : page;
+295 
+296   // Set the queue.
+297   this.setQueue();
+298 
+299   // Set the new page.
+300   this.page = page;
+301 
+302   // Hide or show the page based on if we are on the first page.
+303   if (this.page == 0) {
+304     this.pager.prevPage.hide();
+305   }
+306   else {
+307     this.pager.prevPage.show();
+308   }
+309 
+310   // Get the highest priority parser.
+311   var parser = osmplayer.parser['default'];
+312    for (var name in osmplayer.parser) {
+313     if (osmplayer.parser[name].valid(this.playlist)) {
+314       if (osmplayer.parser[name].priority > parser.priority) {
+315         parser = osmplayer.parser[name];
+316       }
+317     }
+318   }
+319 
+320   // The start index.
+321   var start = this.page * this.options.pageLimit;
+322 
+323   // Get the feed from the parser.
+324   var feed = parser.getFeed(
+325     this.playlist,
+326     start,
+327     this.options.pageLimit
+328   );
+329 
+330   // Build our request.
+331   var request = {
+332     type: 'GET',
+333     url: feed,
+334     success: (function(playlist) {
+335       return function(data) {
+336         if (playlist.scroll.elements.playlist_busy) {
+337           playlist.scroll.elements.playlist_busy.hide();
+338         }
+339         playlist.set(parser.parse(data), loadIndex);
+340       };
+341     })(this),
+342     error: (function(playlist) {
+343       return function(XMLHttpRequest, textStatus, errorThrown) {
+344         if (playlist.scroll.elements.playlist_busy) {
+345           playlist.scroll.elements.playlist_busy.hide();
+346         }
+347         playlist.trigger('error', textStatus);
+348       }
+349     })(this)
+350   };
+351 
+352   // Set the data if applicable.
+353   var dataType = '';
+354   if (dataType = parser.getType()) {
+355     request.dataType = dataType;
+356   }
+357 
+358   // Perform an ajax callback.
+359   jQuery.ajax(request);
+360 };
+361 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.scroll.js.html b/doc/symbols/src/src_osmplayer.scroll.js.html new file mode 100644 index 00000000..381f6140 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.scroll.js.html @@ -0,0 +1,232 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @extends minplayer.display
+  7  * @class This class provides the scroll functionality for the playlists.
+  8  *
+  9  * We can calculate how the scrollbar controls the playlist using the
+ 10  * following diagram / equations.
+ 11  *  ___ ____________
+ 12  *  |  |            |\
+ 13  *  |  |    list    | \
+ 14  *  |  |            |y \
+ 15  *  |  |            |   \
+ 16  *  |  |____________|    \ _ _____
+ 17  *  |  |            |\    | |    |
+ 18  *  |  |            | \   | |    |
+ 19  *  |  |            |  \  | |x   |
+ 20  *  |  |            |   \ | |    |
+ 21  *  |  |            |    \|_|_   |
+ 22  *  |  |            |     | | |  |
+ 23  *  l  |   window   |     | | h  w
+ 24  *  |  |            |     |_|_|  |
+ 25  *  |  |            |    /| |    |
+ 26  *  |  |            |   / | |    |
+ 27  *  |  |            |  / v| |    |
+ 28  *  |  |            | /   | |    |
+ 29  *  |  |____________|/    |_|____|
+ 30  *  |  |            |    /
+ 31  *  |  |            |   /
+ 32  *  |  |            |  /
+ 33  *  |  |            | /
+ 34  *  |__|____________|/
+ 35  *
+ 36  *  l - The list height.
+ 37  *  h - Handle Bar height.
+ 38  *  w - Window height.
+ 39  *  x - The distance from top of window to the top of the handle.
+ 40  *  y - The disatnce from the top of the list to the top of the window.
+ 41  *  v - The distance from bottom of window to the bottom of the handle.
+ 42  *
+ 43  *  jQuery UI provides "v".  We already know "l", "h", "w".  We can then
+ 44  *  calculate the relationship between the scroll bar handle position to the
+ 45  *  list position using the following equations.
+ 46  *
+ 47  *  x = (w - (v + h))
+ 48  *  y = ((l - w)/(w - h)) * x
+ 49  *
+ 50  *   -- or --
+ 51  *
+ 52  *  y = ((l - w)/(w - h)) * (w - (v + h))
+ 53  *
+ 54  *  We can statically calculate the ((l - w)/(w - h)) as a ratio and use
+ 55  *  that to speed up calculations as follows.
+ 56  *
+ 57  *  ratio = ((l - w)/(w - h));
+ 58  *
+ 59  *  So, our translation equations are as follows...
+ 60  *
+ 61  *    y = ratio * (w - (v + h))
+ 62  *    v = w - (h + (y / ratio))
+ 63  *
+ 64  * @param {object} context The jQuery context.
+ 65  * @param {object} options This components options.
+ 66  */
+ 67 osmplayer.scroll = function(context, options) {
+ 68 
+ 69   // Derive from display
+ 70   minplayer.display.call(this, 'scroll', context, options);
+ 71 };
+ 72 
+ 73 /** Derive from minplayer.display. */
+ 74 osmplayer.scroll.prototype = new minplayer.display();
+ 75 
+ 76 /** Reset the constructor. */
+ 77 osmplayer.scroll.prototype.constructor = osmplayer.scroll;
+ 78 
+ 79 /**
+ 80  * @see minplayer.plugin#construct
+ 81  */
+ 82 osmplayer.scroll.prototype.construct = function() {
+ 83 
+ 84   // Make sure we provide default options...
+ 85   this.options = jQuery.extend({
+ 86     vertical: true,
+ 87     hysteresis: 40,
+ 88     scrollSpeed: 20,
+ 89     scrollMode: 'auto'
+ 90   }, this.options);
+ 91 
+ 92   // Call the minplayer plugin constructor.
+ 93   minplayer.display.prototype.construct.call(this);
+ 94 
+ 95   this.getMousePos = function(event) {
+ 96     return (event.pageY - this.display.offset().top);
+ 97   };
+ 98   this.getPos = function(handlePos) {
+ 99     return this.ratio * (this.scrollSize - (handlePos + this.handleSize));
+100   };
+101   this.getHandlePos = function(pos) {
+102     return this.scrollSize - (this.handleSize + (pos / this.ratio));
+103   };
+104 
+105   // If they have a scroll bar.
+106   if (this.elements.scroll) {
+107 
+108     // Get the values of our variables.
+109     this.scrollSize = this.elements.scroll.height();
+110     this.handleSize = 17;
+111     this.scrollTop = (this.scrollSize - this.handleSize);
+112     this.scrollMid = this.scrollSize / 2;
+113     this.mousePos = 0;
+114 
+115     // Refresh the scroll.
+116     this.refresh();
+117 
+118     // Create the scroll bar slider control.
+119     this.scroll = this.elements.scroll.slider({
+120       orientation: 'vertical',
+121       max: this.scrollSize,
+122       value: this.scrollTop,
+123       slide: (function(scroll) {
+124         return function(event, ui) {
+125 
+126           // Get the new position.
+127           var pos = scroll.getPos(ui.value);
+128 
+129           // Ensure it doesn't go over the limits.
+130           if (pos < 0) {
+131             pos = 0;
+132             scroll.scroll.slider('option', 'value', scroll.scrollTop);
+133           }
+134 
+135           // Set our list position.
+136           scroll.elements.list.css('marginTop', -pos + 'px');
+137 
+138           // Return false to stop the scrolling.
+139           return (pos > 0);
+140         };
+141       })(this)
+142     });
+143 
+144     // If they wish to have auto scroll mode.
+145     if (this.options.scrollMode == 'auto') {
+146 
+147       // Bind to the mouse events.
+148       this.elements.list.bind('mousemove', (function(scroll) {
+149 
+150         // Return our event function.
+151         return function(event) {
+152           event.preventDefault();
+153           scroll.mousePos = (event.pageY - scroll.display.offset().top);
+154         };
+155 
+156       })(this)).bind('mouseenter', (function(scroll) {
+157 
+158         // Return our event function.
+159         return function(event) {
+160           event.preventDefault();
+161           scroll.scrolling = true;
+162           setTimeout(function setScroll() {
+163             if (scroll.scrolling) {
+164 
+165               // Get the delta.
+166               var delta = scroll.mousePos - scroll.scrollMid;
+167 
+168               // Determine if we are within our hysteresis.
+169               if (Math.abs(delta) > scroll.options.hysteresis) {
+170 
+171                 // Get the hysteresis and delta.
+172                 var hyst = scroll.options.hysteresis;
+173                 hyst *= (delta > 0) ? -1 : 0;
+174                 delta = (scroll.options.scrollSpeed * (delta + hyst));
+175                 delta /= scroll.scrollMid;
+176 
+177                 // Get the scroll position.
+178                 var pos = scroll.elements.list.css('marginTop');
+179                 pos = parseFloat(pos) - delta;
+180                 pos = (pos > 0) ? 0 : pos;
+181 
+182                 // Get the maximum top position.
+183                 var top = -scroll.listSize + scroll.scrollSize;
+184                 pos = (pos < top) ? top : pos;
+185 
+186                 // Set the new scroll position.
+187                 scroll.elements.list.css('marginTop', pos + 'px');
+188 
+189                 // Set the scroll position.
+190                 pos = scroll.getHandlePos(-pos);
+191                 scroll.scroll.slider('option', 'value', pos);
+192               }
+193 
+194               // Set timeout to try again.
+195               setTimeout(setScroll, 20);
+196             }
+197           }, 20);
+198         };
+199 
+200       })(this)).bind('mouseleave', (function(scroll) {
+201 
+202         // Return our event function.
+203         return function(event) {
+204           event.preventDefault();
+205           scroll.scrolling = false;
+206         };
+207 
+208       })(this));
+209     }
+210   }
+211 };
+212 
+213 /**
+214  * Refresh all the variables that may change.
+215  */
+216 osmplayer.scroll.prototype.refresh = function() {
+217   this.listSize = this.elements.list.height();
+218   this.ratio = (this.listSize - this.scrollSize);
+219   this.ratio /= (this.scrollSize - this.handleSize);
+220   if (this.scroll) {
+221     this.elements.list.css('marginTop', '0px');
+222     this.scroll.slider('option', 'value', this.getHandlePos(0));
+223   }
+224 };
+225 
\ No newline at end of file diff --git a/doc/symbols/src/src_osmplayer.teaser.js.html b/doc/symbols/src/src_osmplayer.teaser.js.html new file mode 100644 index 00000000..e7fca7b5 --- /dev/null +++ b/doc/symbols/src/src_osmplayer.teaser.js.html @@ -0,0 +1,74 @@ +
  1 /** The osmplayer namespace. */
+  2 var osmplayer = osmplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @extends minplayer.display
+  7  * @class This class provides teaser functionality.
+  8  *
+  9  * @param {object} context The jQuery context.
+ 10  * @param {object} options This components options.
+ 11  */
+ 12 osmplayer.teaser = function(context, options) {
+ 13 
+ 14   /** The preview image. */
+ 15   this.preview = null;
+ 16 
+ 17   // Derive from display
+ 18   minplayer.display.call(this, 'teaser', context, options);
+ 19 };
+ 20 
+ 21 /** Derive from minplayer.display. */
+ 22 osmplayer.teaser.prototype = new minplayer.display();
+ 23 
+ 24 /** Reset the constructor. */
+ 25 osmplayer.teaser.prototype.constructor = osmplayer.teaser;
+ 26 
+ 27 /**
+ 28  * Selects the teaser.
+ 29  *
+ 30  * @param {boolean} selected TRUE if selected, FALSE otherwise.
+ 31  */
+ 32 osmplayer.teaser.prototype.select = function(selected) {
+ 33 };
+ 34 
+ 35 /**
+ 36  * Sets the node.
+ 37  *
+ 38  * @param {object} node The node object to set.
+ 39  */
+ 40 osmplayer.teaser.prototype.setNode = function(node) {
+ 41 
+ 42   // Add this to the node info for this teaser.
+ 43   this.node = node;
+ 44 
+ 45   // Set the title of the teaser.
+ 46   if (this.elements.title) {
+ 47     this.elements.title.text(node.title);
+ 48   }
+ 49 
+ 50   // Load the thumbnail image if it exists.
+ 51   var image = osmplayer.getImage(node.mediafiles.image, 'thumbnail');
+ 52   if (image) {
+ 53     if (this.elements.image) {
+ 54       this.preview = new minplayer.image(this.elements.image);
+ 55       this.preview.load(image);
+ 56     }
+ 57   }
+ 58 
+ 59   // Bind when they click on this teaser.
+ 60   this.display.unbind('click').click((function(teaser) {
+ 61     return function(event) {
+ 62       event.preventDefault();
+ 63       teaser.trigger('nodeLoad', teaser.node);
+ 64     };
+ 65   })(this));
+ 66 };
+ 67 
\ No newline at end of file diff --git a/getplaylist.php b/getplaylist.php deleted file mode 100755 index d3719929..00000000 --- a/getplaylist.php +++ /dev/null @@ -1,12 +0,0 @@ -getPlaylist(); -?> \ No newline at end of file diff --git a/index.html b/index.html index 825b5763..a937216e 100644 --- a/index.html +++ b/index.html @@ -1,184 +1,59 @@ - + Open Standard Media (OSM) Player: PHP Demo - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - -

Open Standard Media (OSM) Player


-
- -
-
-
- -
-
-
- -
- - - - -
-
-
-
-
-
-
-
-
-
-
- -
- -
-
00:00
-
-
-
00:00
-
- -
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Sample Title
-
-
-
-
-
-
- - - -
-
- - - -
-
+
+ +
\ No newline at end of file diff --git a/index.php b/index.php deleted file mode 100755 index 3b3569b2..00000000 --- a/index.php +++ /dev/null @@ -1,17 +0,0 @@ - 'playlist.xml' - )); -?> - - - Open Standard Media (OSM) Player: PHP Demo - - getHeader(); ?> - - -

Open Standard Media (OSM) Player


- getPlayer(); ?> - - \ No newline at end of file diff --git a/jquery-ui/css/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png b/jquery-ui/css/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png deleted file mode 100644 index d683a41030777b87fe72db1ec938fc5472bf8fcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAGVZ#9R3S1@b&y978O6-(EE2YjO~2d05XT zHvNc;us0XqvxPgETh1}(=)^?xCsZ80R5SD4*(V<(=UrtGT(M@x=@v;jc6s#@%lG1G zb2iSo6(#3&bK@o6>;L+$#xLfUbvbRHKYdf;lnuLjR)5ZSVxA@w`{_x44Wr={XX zn6>%!`8%F-ofn_`-MQ~q_jO(x>T8mdvXBA*0P-hVYQ_Kn!9N5X5QF|voqnkIKk>&< z7olD$3HblBZp<)_f5!C#jP*?bOjHtt#D<-*Z$!BeK5#b&78)#+Q-MK6OZ%P`pSZDb zyi{Uz_w&KAei=2kj+XG6#`4svPhSOYih1y)5MX+lQ}(+$&*dTwC9lX#clSxH8vuaT z{)w70BDnC6EtxZ}i5fDfZB?09dY#Am6gee4|Aj9MCMRMo*|sxTyL)q2EV<^3Sp{VL zn9@!$$a&X&>_fN@pdyTCA`B>2xnV47BSA$x1_jH$Z1jhkyvR`;7_$UUH5p5e{a0rO~0TjuH=UR`R9^oHgVqO9&SGYH49n`9fk^{ zSlzF7+65pwLFNXXYywOVICbcAC?fBRa#urr(@x}Fh>Hk!AD5U!NQ5{k3o)VS0NZUuN zN*NUvt?>o6l;pWwA)ZJ)U3Gs=D^SSwed@tSrVCj?*}gkwZ5F{zGqua&Rqx~M(e?fT z-&}aBXza}Sv%Ap|QcU%{cTM*ivcfphBrh4PRsJ|=*&f+N?#ymF9P=nABo`jZd}cgb z&5?@bo`7h}?(K0!-BRBForb>99tO*ex@7Ytijwz8!oAE~gNinI-vq5Iant4!j3Y6d z)LWyJCVgATV<=?xed7n{5Jy`Sx3DYCX_GC2%=boYa3v?a(|H-Uah8Xgu5xgMCK zyZp*Y>mg7Bkc%B$$-(8Jx*29udW!Vv9yW8v!Ve;EF0rbe3?~Cf>C)~% zL>RANXM^m;B-hwxr&-+IROs!hL61gZqG<~;9av^{BINOTZsU$a zhm0FQXWjf+^_GXDshvkf++Xf%F+-SOU@cEyWIFMevGp@8OSYKJrr)m~NyMhk6o31* zLX2WxwhRBYz{(bL0UAGW!i9x9b_v5g&?t2=WG^N*-UFoDGyXL?@4?Z-Rc4>43nDwBhxD7U>_>PGfeouLvz^1mZ`^*TNP&aF& zDd|K<=MJ{0`Tu~1)y&-b3EI+@PK>Vo(rLmVEo;VY7LCd%i6%lRSIg?Q9TPwc74BvD zI~6|KMq8bID&yT(!{szly-iSMMoPqq$vXBiEPvlUY!`Ub)gb$|A9}{sWmAhsHlra! z7(ZFlFpfCiKgeni_Rr|bRB9kQ{*@S7oGr$D<+~89YbqO z*Su4CeYI_COXHUamde3#YPSa9T4P(}#Wl|K#z{}bw%teQQTb9QK~&)lxn!ZHtx0#9 z=tGdDV{p~*gTtlnSfZq9>+8)ng;Ml;p>3t3elq_Toz%ZDWLv*!*Rt}DyzAU{j=cUEcuv( z`;H#-?acU^7ISKdrZQ|z9oCl>SXR*qEYa0#m^Xg`e!)3S8(oz+tVBJkrT z0QDHv1_QM3`kU+|*iZoQU1S$mW(M8Oo#nK(2S{^N3jxtl7uRcpALC`@&6427!1wKc zZo9^N=(G5CEJELd&-Xvf1|uPoL{OU`7$yj&2$28|n%PWKrp%u8zIf>Ki-- z9N%Lt#_e!M_yj4|<2`{{D+<%gwqFpQ#VGj?72>~7(LYgKd2VHx z9&_r?uWW`o6d7jTBS2iUeiB{`YbgE?F8-ffL($lJayrLHd2sjoiEq4o>*eao^w%w9 z9qH$TffZ31VsAIzP<9hyV}tzxiUeAqMy|$0aLWDxpUpT#W-XO7=*|Fg#3t}-)qYWP z1T=E5k#w#@q!KoDi(;h$`)-v4RVVkSPg@dBYJ#Ow7Z5`FEY=xHgk&dfmM(y}rEAE_ zM&xhH_a*KVT0Q*@@NcPaWEXH4* z$113K3~=l?%QA{hXTWKgCTnribY4!AxN;I}{`mFq+KMTtbkR&&DaXrk%D@_j6&ga( zcMak@rPz|SG-#>|>{ubStr|@ zH~BMWYZA3MmRb`O+==kQEksjRTWPLy6YJk{%|kGqSVvp`=*Hyf!tJKN7Sg1{4t+Oe z6f=jHnqkPj^Y0DuJ213a?M{QaeOKzJh9$P@nb43af9CO$6q(uAHRyY~ap^VIao!M0 zgu`xPwck3ypLeMi7j9Jspkm14sQ2c3c)BvHx03l48S8qK7eu05CrWUU(XGEi@9bCV zpu1d+bOxa0QLo;m(0Dp~b4Z;2-#uo9?qov}U2m_sK_w70!(EP}{|$197$_j6TKN$P0!cL}7kYx`5hO9~W6$$oSrsSbk-rrvcX zT^-{MV2;-XdBBJMz^xdz;C=}S@WHubXp)2v_nHB2JsfU|X#G~yUvzlqaBZ^Bt~X{w zfF_f6Tk1j`6YNJyuT)Huw=gr`Ke%;R`C^G*VlgtLlHk0)QND6sLGxy0QgbfOP@Etv zF@T(~$`1=r(E0cabFb)qWnL7Nt^Hb!RUo;Qw^My$5l zzC-DzviOkzXK?d>@uAes_f`kHfiVNhFT>)5lZyuzgiv{?P$4GLl7B^>%z^MP4jfFY z5X?C6Z?^lFvR7`Z6_hA^tP7|!i4|JC`EN++9gz`kjfOgfiLXiE0UO<=!EVocWJ;(a zfv|A*IUhrU6b%0oSVBVLo?Me1a#1-ZG` z-<7SrmY#^xQKF%G`O~|5m+M;zZbrm?B<%3zcW`6d_G0gda1q~G~uNs8}f zP@^7w`~d?+;&l{(hN%_1#gjk>yku?AnxKSsvX-6vE(Af;;n*B3y=16X+$ z2EvjlNr_{+ubHB*Ni}H1)55@18l&r|l$3Oqus>bVZ=9?i2-{Q$D74Wypw=?;v&N~XIuUyMQosWB zvH`${s*m6MS$hF`<52W=k%`%&pTp{inI-6ivfy8oX%wq%GfIMLPZ`i_4`NAJi|-D% z#1rWkKmVkTpA-Dz9jGm!_;q7mZzso&f>Y)R*o-qm_>)^4Am;oQ7_an6=sp0g6rByr zhj1pe!W%kXpSxZ^SJ}u_lR3I2^f4H7eCiU;X4sFY^*tJWdc-p^_P0NsQs!Cyg9-n? z;=+uok&HHEa;7t8`HvH~Oq)qHswXLO=S2b-UwQe_Fc!0{B zaIBd?C>=|$zgry^3yakW;j3cDj=jf*85tCfhWvPt*~?wiUD{FScRQ9!6PdQ-c)yF! z9L-*{8%l09_G9l|M=D~Y{LgH;0@7W1mfsH8elnl^lDc``}r z<}<0{!AtlB+J+a@(N`2SGUN8kE)qjrIQ$}j80EciBh-R4iH zVu~%;1FHTrvv0q>Qc3DvwrBm4ZQkj9X?GUKE;1ua-tgi$bD8-p?E!m=jtFEnV&beV z#iH9&E`qE9f9B1~s)E}zmDd9w$sEwnb~EZfxHVa`*C(s1u!VdosO=r`a~aGY#aFH7 zi0Nl0*5Qr>o-{Zb4_7FJ>xJ@0gL zpS!z1jB{%wGEr~8Eo@`EK3GhINP8uA-|Og(h&A>>SDuk);d2i~UXH^RsY*tM=Gn(5 zOp6gEZMTyF=rhu@5R3ZPscqYmIs?hlYTt6tEW258umfIqb0fOGE5riJTqe^!e-s1ZYsgF_iOD55zwEa;YQe2Nv=COCPy z*Qba^=JtB*c^5(V6pwcL#6HPx2*85lZy;- z#)hLNFp&;k-Itif;=-3z|+a^y4eh@ zll=+CXs^S5jrP)Sugw{qel08WzN&tG{N(KEY}G2;=+5_!_gx?Ok0fP{v39@D^o$9% z%|0K^yn6{i&tOdF19!?)$q#<_3N8Ga7B6`=p!i|H(uA3rxtRDo0(JkAVF!oZ4jjhi z+yiz}9uNp;n2D*hJvu2$uKSJ`CNE?dJfIZ4R{auA(6Q=wkrjW{F#3IQb{mw@)`n7m9T&#NG_;6`Z9X=j zLfvoD+CBqU&Il5=g*5G7sMJ|6HJuP2Tme*1roa7n`}es?=;BdRxuk>y#37(>X}c`3 zux4sU?)>T~?(J9@J>3nE>ZAp;uE~H=#RLBtxq{z?si%>~Gs&@iVzHUpoW7~FD_kQ1 zkX}>41Of86QdyK3N~J^D+x~i=4Mz&^XUw`yvW7!%Y&nf?(i_2^WPyMW7jA6wx0IL3 W{%j@Nkj?-5Wj;~YSF2TVi1{DB#sf0| diff --git a/jquery-ui/js/jquery.js b/jquery-ui/js/jquery.js deleted file mode 100644 index 7c243080..00000000 --- a/jquery-ui/js/jquery.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/js/compressed/jquery.media.auto.js b/js/compressed/jquery.media.auto.js deleted file mode 100644 index 8770ce01..00000000 --- a/js/compressed/jquery.media.auto.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media=jQuery.extend({},{auto:function(b){return new (function(c){this.json=jQuery.media.json(c);this.rpc=jQuery.media.rpc(c);this.call=function(h,g,d,f,e){if(e=="json"){this.json.call(h,g,d,f,e);}else{this.rpc.call(h,g,d,f,e);}};})(b);}},jQuery.media);})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.control.js b/js/compressed/jquery.media.control.js deleted file mode 100644 index cf416664..00000000 --- a/js/compressed/jquery.media.control.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{volumeVertical:false});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{currentTime:"#mediacurrenttime",totalTime:"#mediatotaltime",playPause:"#mediaplaypause",seekUpdate:"#mediaseekupdate",seekProgress:"#mediaseekprogress",seekBar:"#mediaseekbar",seekHandle:"#mediaseekhandle",volumeUpdate:"#mediavolumeupdate",volumeBar:"#mediavolumebar",volumeHandle:"#mediavolumehandle",mute:"#mediamute"});jQuery.fn.mediacontrol=function(b){if(this.length===0){return null;}return new (function(e,c){c=jQuery.media.utils.getSettings(c);this.display=e;var f=this;this.formatTime=(c.template&&c.template.formatTime)?c.template.formatTime:function(j){j=j?j:0;var k=0;var h=0;var g=0;g=Math.floor(j/3600);j-=(g*3600);h=Math.floor(j/60);j-=(h*60);k=Math.floor(j%60);var i="";if(g){i+=String(g);i+=":";}i+=(h>=10)?String(h):("0"+String(h));i+=":";i+=(k>=10)?String(k):("0"+String(k));return{time:i,units:""};};this.setToggle=function(h,i){var g=i?".on":".off";var j=i?".off":".on";if(h){h.find(g).show();h.find(j).hide();}};var d=this.formatTime(0);this.duration=0;this.volume=-1;this.prevVolume=0;this.percentLoaded=0;this.playState=false;this.muteState=false;this.currentTime=e.find(c.ids.currentTime).text(d.time);this.totalTime=e.find(c.ids.totalTime).text(d.time);this.display.find("a.mediaplayerlink").each(function(){var g=a(this).attr("href");a(this).medialink(c,function(h){h.preventDefault();f.display.trigger(h.data.id);},{id:g.substr(1),obj:a(this)});});this.playPauseButton=e.find(c.ids.playPause).medialink(c,function(g,h){f.playState=!f.playState;f.setToggle(h,f.playState);f.display.trigger("controlupdate",{type:(f.playState?"pause":"play")});});this.seekUpdate=e.find(c.ids.seekUpdate).css("width",0);this.seekProgress=e.find(c.ids.seekProgress).css("width",0);this.seekBar=e.find(c.ids.seekBar).mediaslider(c.ids.seekHandle,false);if(this.seekBar){this.seekBar.display.unbind("setvalue").bind("setvalue",function(g,h){f.seekUpdate.css("width",(h*f.seekBar.trackSize)+"px");f.display.trigger("controlupdate",{type:"seek",value:(h*f.duration)});});this.seekBar.display.unbind("updatevalue").bind("updatevalue",function(g,h){f.seekUpdate.css("width",(h*f.seekBar.trackSize)+"px");});}this.setVolume=function(g){if(this.volumeBar){if(c.volumeVertical){this.volumeUpdate.css({marginTop:(this.volumeBar.handlePos+this.volumeBar.handleMid),height:(this.volumeBar.trackSize-this.volumeBar.handlePos)});}else{this.volumeUpdate.css("width",(g*this.volumeBar.trackSize));}}};this.volumeUpdate=e.find(c.ids.volumeUpdate);this.volumeBar=e.find(c.ids.volumeBar).mediaslider(c.ids.volumeHandle,c.volumeVertical,c.volumeVertical);if(this.volumeBar){this.volumeBar.display.unbind("setvalue").bind("setvalue",function(g,h){f.setVolume(h);f.display.trigger("controlupdate",{type:"volume",value:h});});this.volumeBar.display.unbind("updatevalue").bind("updatevalue",function(g,h){f.setVolume(h);f.volume=h;});}this.mute=e.find(c.ids.mute).medialink(c,function(g,h){f.muteState=!f.muteState;f.setToggle(h,f.muteState);f.setMute(f.muteState);});this.setMute=function(g){this.prevVolume=(this.volumeBar.value>0)?this.volumeBar.value:this.prevVolume;this.volumeBar.updateValue(g?0:this.prevVolume);this.display.trigger("controlupdate",{type:"mute",value:g});};this.setProgress=function(g){if(this.seekProgress&&this.seekBar){this.seekProgress.css("width",(g*(this.seekBar.trackSize+this.seekBar.handleSize)));}};this.onResize=function(){if(this.seekBar){this.seekBar.onResize();}this.setProgress(this.percentLoaded);};this.onMediaUpdate=function(g){switch(g.type){case"reset":this.reset();break;case"paused":this.playState=true;this.setToggle(this.playPauseButton.display,this.playState);break;case"playing":this.playState=false;this.setToggle(this.playPauseButton.display,this.playState);break;case"stopped":this.playState=true;this.setToggle(this.playPauseButton.display,this.playState);break;case"progress":this.percentLoaded=g.percentLoaded;this.setProgress(this.percentLoaded);break;case"meta":case"update":this.timeUpdate(g.currentTime,g.totalTime);if(this.volumeBar){this.volumeBar.updateValue(g.volume);}break;default:break;}};this.reset=function(){this.totalTime.text(this.formatTime(0).time);this.currentTime.text(this.formatTime(0).time);if(this.seekBar){this.seekBar.updateValue(0);}this.seekUpdate.css("width","0px");this.seekProgress.css("width","0px");};this.timeUpdate=function(g,h){this.duration=h;this.totalTime.text(this.formatTime(h).time);this.currentTime.text(this.formatTime(g).time);if(h&&this.seekBar&&!this.seekBar.dragging){this.seekBar.updateValue(g/h);}};this.timeUpdate(0,0);})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.dailymotion.js b/js/compressed/jquery.media.dailymotion.js deleted file mode 100644 index 71e1fef5..00000000 --- a/js/compressed/jquery.media.dailymotion.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};window.onDailymotionPlayerReady=function(b){b=b.replace("_media","");jQuery.media.players[b].node.player.media.player.onReady();};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{dailymotion:function(b){return(b.search(/^http(s)?\:\/\/(www\.)?dailymotion\.com/i)===0);}});jQuery.fn.mediadailymotion=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.videoFile=null;this.meta=false;this.loaded=false;this.ready=false;this.createMedia=function(i,k){this.videoFile=i;this.ready=false;var h=(e.id+"_media");var j=Math.floor(Math.random()*1000000);var l="http://www.dailymotion.com/swf/"+i.path+"?rand="+j+"&enablejsapi=1&playerapiid="+h;jQuery.media.utils.insertFlash(this.display,l,h,"100%","100%",{},e.wmode,function(m){g.player=m;g.loadPlayer();});};this.loadMedia=function(h){if(this.player){this.loaded=false;this.meta=false;this.videoFile=h;d({type:"playerready"});this.player.loadVideoById(this.videoFile.path,0);}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){window[e.id+"StateChange"]=function(h){g.onStateChange(h);};window[e.id+"PlayerError"]=function(h){g.onError(h);};this.player.addEventListener("onStateChange",e.id+"StateChange");this.player.addEventListener("onError",e.id+"PlayerError");d({type:"playerready"});this.player.loadVideoById(this.videoFile.path,0);}};this.onStateChange=function(i){var h=this.getPlayerState(i);if(!(!this.meta&&h.state=="stopped")){d({type:h.state,busy:h.busy});}if(!this.loaded&&h.state=="buffering"){this.loaded=true;d({type:"paused",busy:"hide"});if(e.autostart){this.playMedia();}}if(!this.meta&&h.state=="playing"){this.meta=true;d({type:"meta"});}};this.onError=function(i){var h="An unknown error has occured: "+i;if(i==100){h="The requested video was not found. ";h+="This occurs when a video has been removed (for any reason), ";h+="or it has been marked as private.";}else{if((i==101)||(i==150)){h="The video requested does not allow playback in an embedded player.";}}d({type:"error",data:h});};this.getPlayerState=function(h){switch(h){case 5:return{state:"ready",busy:false};case 3:return{state:"buffering",busy:"show"};case 2:return{state:"paused",busy:"hide"};case 1:return{state:"playing",busy:"hide"};case 0:return{state:"complete",busy:false};case -1:return{state:"stopped",busy:false};default:return{state:"unknown",busy:false};}return"unknown";};this.playMedia=function(){d({type:"buffering",busy:"show"});this.player.playVideo();};this.pauseMedia=function(){this.player.pauseVideo();};this.stopMedia=function(){this.player.stopVideo();};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){d({type:"buffering",busy:"show"});this.player.seekTo(h,true);};this.setVolume=function(h){this.player.setVolume(h*100);};this.getVolume=function(){return(this.player.getVolume()/100);};this.getDuration=function(){return this.player.getDuration();};this.getCurrentTime=function(){return this.player.getCurrentTime();};this.getBytesLoaded=function(){return this.player.getVideoBytesLoaded();};this.getBytesTotal=function(){return this.player.getVideoBytesTotal();};this.getEmbedCode=function(){return this.player.getVideoEmbedCode();};this.getMediaLink=function(){return this.player.getVideoUrl();};this.hasControls=function(){return true;};this.showControls=function(h){};this.setQuality=function(h){};this.getQuality=function(){return"";};})(this,c,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.display.js b/js/compressed/jquery.media.display.js deleted file mode 100644 index 4a78983f..00000000 --- a/js/compressed/jquery.media.display.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{volume:80,autostart:false,streamer:"",embedWidth:450,embedHeight:337,wmode:"transparent",forceOverflow:false,quality:"default",repeat:false});jQuery.fn.mediadisplay=function(b){if(this.length===0){return null;}return new (function(d,c){this.settings=jQuery.media.utils.getSettings(c);this.display=d;var e=this;this.volume=-1;this.player=null;this.preview="";this.updateInterval=null;this.progressInterval=null;this.playQueue=[];this.playIndex=0;this.playerReady=false;this.loaded=false;this.mediaFile=null;this.hasPlaylist=false;if(this.settings.forceOverflow){this.display.parents().css("overflow","visible");}this.reset=function(){this.loaded=false;this.stopMedia();clearInterval(this.progressInterval);clearInterval(this.updateInterval);this.playQueue.length=0;this.playQueue=[];this.playIndex=0;this.playerReady=false;this.mediaFile=null;this.display.empty().trigger("mediaupdate",{type:"reset"});};this.getPlayableMedia=function(j){var h=null;var f=j.length;while(f--){var g=new jQuery.media.file(j[f],this.settings);if(!h||(g.weight0);if(!f){if(this.player){this.player.destroy();this.player=null;}this.display.trigger("mediaupdate",{type:"nomedia"});}return f;};this.playNext=function(){if(this.playQueue.length>this.playIndex){this.loadMedia(this.playQueue[this.playIndex]);this.playIndex++;}else{if(this.settings.repeat){this.playIndex=0;this.playNext();}else{if(this.hasPlaylist){this.reset();}else{this.loaded=false;this.settings.autostart=false;this.playIndex=0;this.playNext();}}}};this.loadMedia=function(g,f){if(g){g=new jQuery.media.file(this.getMediaFile(g),this.settings);g.player=f?f:g.player;this.stopMedia();if(!this.mediaFile||(this.mediaFile.player!=g.player)){this.player=null;this.playerReady=false;if(g.player){this.player=this.display["media"+g.player](this.settings,function(h){e.onMediaUpdate(h);});}if(this.player){this.player.createMedia(g,this.preview);}}else{if(this.player){this.player.loadMedia(g);}}this.mediaFile=g;this.onMediaUpdate({type:"initialize"});}};this.onMediaUpdate=function(g){switch(g.type){case"playerready":this.playerReady=true;this.player.setVolume(0);this.player.setQuality(this.settings.quality);this.startProgress();break;case"buffering":this.startProgress();break;case"stopped":clearInterval(this.progressInterval);clearInterval(this.updateInterval);break;case"error":if(g.code==4){this.loadMedia(this.mediaFile,"flash");}else{clearInterval(this.progressInterval);clearInterval(this.updateInterval);}break;case"paused":clearInterval(this.updateInterval);break;case"playing":this.startUpdate();break;case"progress":var f=this.getPercentLoaded();jQuery.extend(g,{percentLoaded:f});if(f>=1){clearInterval(this.progressInterval);}break;case"meta":jQuery.extend(g,{currentTime:this.player.getCurrentTime(),totalTime:this.getDuration(),volume:this.player.getVolume(),quality:this.getQuality()});break;case"durationupdate":this.mediaFile.duration=g.duration;break;case"complete":this.playNext();break;default:break;}if(g.type=="playing"&&!this.loaded){if(this.settings.autoLoad&&!this.settings.autostart){setTimeout(function(){e.setVolume();e.player.pauseMedia();e.settings.autostart=true;e.loaded=true;},100);}else{this.loaded=true;this.setVolume();this.display.trigger("mediaupdate",g);}}else{this.display.trigger("mediaupdate",g);}};this.startProgress=function(){if(this.playerReady){clearInterval(this.progressInterval);this.progressInterval=setInterval(function(){e.onMediaUpdate({type:"progress"});},500);}};this.startUpdate=function(){if(this.playerReady){clearInterval(this.updateInterval);this.updateInterval=setInterval(function(){if(e.playerReady){e.onMediaUpdate({type:"update",currentTime:e.player.getCurrentTime(),totalTime:e.getDuration(),volume:e.player.getVolume(),quality:e.getQuality()});}},1000);}};this.stopMedia=function(){this.loaded=false;clearInterval(this.progressInterval);clearInterval(this.updateInterval);if(this.playerReady){this.player.stopMedia();}};this.mute=function(f){this.player.setVolume(f?0:this.volume);};this.onResize=function(){if(this.player&&this.player.onResize){this.player.onResize();}};this.getPercentLoaded=function(){if(this.player.getPercentLoaded){return this.player.getPercentLoaded();}else{var g=this.player.getBytesLoaded();var f=this.mediaFile.bytesTotal?this.mediaFile.bytesTotal:this.player.getBytesTotal();return f?(g/f):0;}};this.showControls=function(f){if(this.playerReady){this.player.showControls(f);}};this.hasControls=function(){if(this.player){return this.player.hasControls();}return false;};this.getDuration=function(){if(this.mediaFile){if(!this.mediaFile.duration){this.mediaFile.duration=this.player.getDuration();}return this.mediaFile.duration;}else{return 0;}};this.setVolume=function(f){this.volume=f?f:((this.volume==-1)?(this.settings.volume/100):this.volume);if(this.player){this.player.setVolume(this.volume);}};this.getVolume=function(){if(!this.volume){this.volume=this.player.getVolume();}return this.volume;};this.getQuality=function(){if(!this.mediaFile.quality){this.mediaFile.quality=this.player.getQuality();}return this.mediaFile.quality;};})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.drupal.js b/js/compressed/jquery.media.drupal.js deleted file mode 100644 index 0ab01e13..00000000 --- a/js/compressed/jquery.media.drupal.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{apiKey:"",api:2,sessid:"",drupalVersion:6});jQuery.media=jQuery.extend({},{drupal:function(c,b){return new (function(i,h){h=jQuery.media.utils.getSettings(h);var j=this;var e=(h.apiKey.length>0);var g=(h.api==1);var d=(h.drupalVersion>=6)?"node.get":"node.load";var f=(h.protocol=="auto");jQuery.media=jQuery.extend({},{commands:{connect:{command:{rpc:"system.connect",json:""},useKey:g,protocol:"rpc"},mail:{command:{rpc:"system.mail",json:""},useKey:e,protocol:"rpc"},loadNode:{command:{rpc:d,json:"mediafront_getnode"},useKey:g,protocol:"json"},getPlaylist:{command:{rpc:"mediafront.getPlaylist",json:"mediafront_getplaylist"},useKey:g,protocol:"json"},getVote:{command:{rpc:"vote.getVote",json:""},useKey:g,protocol:"rpc"},setVote:{command:{rpc:"vote.setVote",json:""},useKey:e,protocol:"rpc"},getUserVote:{command:{rpc:"vote.getUserVote",json:""},useKey:g,protocol:"rpc"},deleteVote:{command:{rpc:"vote.deleteVote",json:""},useKey:e,protocol:"rpc"},addTag:{command:{rpc:"tag.addTag",json:""},useKey:e,protocol:"rpc"},incrementCounter:{command:{rpc:"mediafront.incrementNodeCounter",json:""},useKey:e,protocol:"rpc"},setFavorite:{command:{rpc:"favorites.setFavorite",json:""},useKey:e,protocol:"rpc"},deleteFavorite:{command:{rpc:"favorites.deleteFavorite",json:""},useKey:e,protocol:"rpc"},isFavorite:{command:{rpc:"favorites.isFavorite",json:""},useKey:g,protocol:"rpc"},login:{command:{rpc:"user.login",json:""},useKey:e,protocol:"rpc"},logout:{command:{rpc:"user.logout",json:""},useKey:e,protocol:"rpc"},adClick:{command:{rpc:"mediafront.adClick",json:""},useKey:e,protocol:"rpc"},getAd:{command:{rpc:"mediafront.getAd",json:""},useKey:g,protocol:"rpc"},setUserStatus:{command:{rpc:"mediafront.setUserStatus",json:""},useKey:e,protocol:"rpc"}}},jQuery.media);this.user={};this.sessionId="";this.onConnected=null;this.encoder=new jQuery.media.sha256();this.baseURL=h.baseURL.substring(0,(h.baseURL.length-1)).replace(/^(http[s]?\:[\\\/][\\\/])/,"");this.connect=function(k){this.onConnected=k;if(h.sessid){this.onConnect({sessid:h.sessid});}else{this.call(jQuery.media.commands.connect,function(l){j.onConnect(l);},null);}};this.call=function(p,o,m){var k=[];for(var l=3;l1){var m=this.getTimeStamp();var l=this.getNonce();var n=this.computeHMAC(m,this.baseURL,l,o.command.rpc,h.apiKey);k.unshift(l);k.unshift(m);k.unshift(this.baseURL);k.unshift(n);}else{k.unshift(h.apiKey);}}return k;};this.getTimeStamp=function(){return(parseInt(new Date().getTime()/1000,10)).toString();};this.getNonce=function(){var n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";var l="";for(var m=0;m<10;m++){var k=Math.floor(Math.random()*n.length);l+=n.substring(k,k+1);}return l;};this.computeHMAC=function(n,m,l,p,o){var k=n+";"+m+";"+l+";"+p;return this.encoder.encrypt(o,k);};this.onConnect=function(k){if(k){this.sessionId=k.sessid;this.user=k.user;}if(this.onConnected){this.onConnected(k);}};})(c,b);}},jQuery.media);})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.file.js b/js/compressed/jquery.media.file.js deleted file mode 100644 index 3a0e4687..00000000 --- a/js/compressed/jquery.media.file.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.checkPlayType=function(c,b){if((typeof c.canPlayType)=="function"){return("no"!==c.canPlayType(b))&&(""!==c.canPlayType(b));}else{return false;}};jQuery.media.getPlayTypes=function(){var b={};var c=document.createElement("video");b.ogg=jQuery.media.checkPlayType(c,'video/ogg; codecs="theora, vorbis"');b.h264=jQuery.media.checkPlayType(c,'video/mp4; codecs="avc1.42E01E, mp4a.40.2"');b.webm=jQuery.media.checkPlayType(c,'video/webm; codecs="vp8, vorbis"');c=document.createElement("audio");b.audioOgg=jQuery.media.checkPlayType(c,"audio/ogg");b.mp3=jQuery.media.checkPlayType(c,"audio/mpeg");return b;};jQuery.media.playTypes=null;jQuery.media.file=function(b,c){if(!jQuery.media.playTypes){jQuery.media.playTypes=jQuery.media.getPlayTypes();}b=(typeof b==="string")?{path:b}:b;this.duration=b.duration?b.duration:0;this.bytesTotal=b.bytesTotal?b.bytesTotal:0;this.quality=b.quality?b.quality:0;this.stream=c.streamer?c.streamer:b.stream;this.path=b.path?jQuery.trim(b.path):(c.baseURL+jQuery.trim(b.filepath));this.extension=b.extension?b.extension:this.getFileExtension();this.weight=b.weight?b.weight:this.getWeight();this.player=b.player?b.player:this.getPlayer();this.mimetype=b.mimetype?b.mimetype:this.getMimeType();this.type=b.type?b.type:this.getType();};jQuery.media.file.prototype.getFileExtension=function(){return this.path.substring(this.path.lastIndexOf(".")+1).toLowerCase();};jQuery.media.file.prototype.getPlayer=function(){switch(this.extension){case"ogg":case"ogv":return jQuery.media.playTypes.ogg?"html5":"flash";case"mp4":case"m4v":return jQuery.media.playTypes.h264?"html5":"flash";case"webm":return jQuery.media.playTypes.webm?"html5":"flash";case"oga":return jQuery.media.playTypes.audioOgg?"html5":"flash";case"mp3":return jQuery.media.playTypes.mp3?"html5":"flash";case"swf":case"flv":case"f4v":case"f4a":case"mov":case"3g2":case"3gp":case"3gpp":case"m4a":case"aac":case"wav":case"aif":case"wma":return"flash";default:for(var b in jQuery.media.playerTypes){if(jQuery.media.playerTypes.hasOwnProperty(b)){if(jQuery.media.playerTypes[b](this.path)){return b;}}}break;}return"flash";};jQuery.media.file.prototype.getType=function(){switch(this.extension){case"swf":case"webm":case"ogg":case"ogv":case"mp4":case"m4v":case"flv":case"f4v":case"mov":case"3g2":case"3gp":case"3gpp":return"video";case"oga":case"mp3":case"f4a":case"m4a":case"aac":case"wav":case"aif":case"wma":return"audio";default:break;}return"";};jQuery.media.file.prototype.getWeight=function(){switch(this.extension){case"mp4":case"m4v":case"m4a":return jQuery.media.playTypes.h264?3:7;case"webm":return jQuery.media.playTypes.webm?4:8;case"ogg":case"ogv":return jQuery.media.playTypes.ogg?5:20;case"oga":return jQuery.media.playTypes.audioOgg?5:20;case"mp3":return 6;case"mov":case"swf":case"flv":case"f4v":case"f4a":case"3g2":case"3gp":case"3gpp":return 9;case"wav":case"aif":case"aac":return 10;case"wma":return 11;default:break;}return 0;};jQuery.media.file.prototype.getMimeType=function(){switch(this.extension){case"mp4":case"m4v":case"flv":case"f4v":return"video/mp4";case"webm":return"video/x-webm";case"ogg":case"ogv":return"video/ogg";case"3g2":return"video/3gpp2";case"3gpp":case"3gp":return"video/3gpp";case"mov":return"video/quicktime";case"swf":return"application/x-shockwave-flash";case"oga":return"audio/ogg";case"mp3":return"audio/mpeg";case"m4a":case"f4a":return"audio/mp4";case"aac":return"audio/aac";case"wav":return"audio/vnd.wave";case"wma":return"audio/x-ms-wma";default:break;}return"";};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.flash.js b/js/compressed/jquery.media.flash.js deleted file mode 100644 index 1c2b785c..00000000 --- a/js/compressed/jquery.media.flash.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){window.onFlashPlayerReady=function(b){jQuery.media.players[b].node.player.media.player.onReady();};window.onFlashPlayerUpdate=function(c,b){jQuery.media.players[c].node.player.media.player.onMediaUpdate(b);};window.onFlashPlayerDebug=function(b){if(window.console&&console.log){console.log(b);}};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{flashPlayer:"./flash/mediafront.swf",skin:"default",config:"nocontrols"});jQuery.fn.mediaflash=function(c,b){return new (function(f,e,d){e=jQuery.media.utils.getSettings(e);this.display=f;var g=this;this.player=null;this.mediaFile=null;this.preview="";this.ready=false;this.translate={mediaConnected:"connected",mediaBuffering:"buffering",mediaPaused:"paused",mediaPlaying:"playing",mediaStopped:"stopped",mediaComplete:"complete",mediaMeta:"meta"};this.busy={mediaConnected:false,mediaBuffering:"show",mediaPaused:"hide",mediaPlaying:"hide",mediaStopped:false,mediaComplete:false,mediaMeta:false};this.createMedia=function(h,l){this.mediaFile=h;this.preview=l;this.ready=false;var j=(e.id+"_media");var k=Math.floor(Math.random()*1000000);var m=e.flashPlayer+"?rand="+k;var i={config:e.config,id:e.id,file:h.path,image:this.preview,skin:e.skin,autostart:(e.autostart||!e.autoLoad)};if(h.stream){i.stream=h.stream;}if(e.debug){i.debug="1";}jQuery.media.utils.insertFlash(this.display,m,j,"100%","100%",i,e.wmode,function(n){g.player=n;g.loadPlayer();});};this.loadMedia=function(h){if(this.player&&this.ready){this.mediaFile=h;this.player.loadMedia(h.path,h.stream);d({type:"playerready"});}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){d({type:"playerready"});}};this.onMediaUpdate=function(h){d({type:this.translate[h],busy:this.busy[h]});};this.playMedia=function(){if(this.player&&this.ready){this.player.playMedia();}};this.pauseMedia=function(){if(this.player&&this.ready){this.player.pauseMedia();}};this.stopMedia=function(){if(this.player&&this.ready){this.player.stopMedia();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){if(this.player&&this.ready){this.player.seekMedia(h);}};this.setVolume=function(h){if(this.player&&this.ready){this.player.setVolume(h);}};this.getVolume=function(){return(this.player&&this.ready)?this.player.getVolume():0;};this.getDuration=function(){return(this.player&&this.ready)?this.player.getDuration():0;};this.getCurrentTime=function(){return(this.player&&this.ready)?this.player.getCurrentTime():0;};this.getBytesLoaded=function(){return(this.player&&this.ready)?this.player.getMediaBytesLoaded():0;};this.getBytesTotal=function(){return(this.player&&this.ready)?this.player.getMediaBytesTotal():0;};this.hasControls=function(){return true;};this.showControls=function(h){if(this.player&&this.ready){this.player.showPlugin("controlBar",h);this.player.showPlugin("playLoader",h);}};this.getEmbedCode=function(){var h={config:"config",id:"mediafront_player",file:this.mediaFile.path,image:this.preview,skin:e.skin};if(this.mediaFile.stream){h.stream=this.mediaFile.stream;}return jQuery.media.utils.getFlash(e.flashPlayer,"mediafront_player",e.embedWidth,e.embedHeight,h,e.wmode);};this.setQuality=function(h){};this.getQuality=function(){return"";};this.getMediaLink=function(){return"This video currently does not have a link.";};})(this,c,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.html5.js b/js/compressed/jquery.media.html5.js deleted file mode 100644 index 03f8efc4..00000000 --- a/js/compressed/jquery.media.html5.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.fn.mediahtml5=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.bytesLoaded=0;this.bytesTotal=0;this.mediaType="";this.loaded=false;this.mediaFile=null;this.playerElement=null;this.getPlayer=function(h,m){this.mediaFile=h;var j=e.id+"_"+this.mediaType;var l="<"+this.mediaType+' style="position:absolute" id="'+j+'"';l+=m?' poster="'+m+'"':"";if(typeof h==="array"){l+=">";var k=h.length;while(k){k--;l+='';}}else{l+=' src="'+h.path+'">Unable to display media.';}l+="";this.display.append(l);this.bytesTotal=h.bytesTotal;this.playerElement=this.display.find("#"+j);this.onResize();return this.playerElement.eq(0)[0];};this.createMedia=function(h,i){jQuery.media.utils.removeFlash(this.display,e.id+"_media");this.display.children().remove();this.mediaType=this.getMediaType(h);this.player=this.getPlayer(h,i);this.loaded=false;var j=false;if(this.player){this.player.addEventListener("abort",function(){d({type:"stopped"});},true);this.player.addEventListener("loadstart",function(){d({type:"ready",busy:"show"});g.onReady();},true);this.player.addEventListener("loadeddata",function(){d({type:"loaded",busy:"hide"});},true);this.player.addEventListener("loadedmetadata",function(){d({type:"meta"});},true);this.player.addEventListener("canplaythrough",function(){d({type:"canplay",busy:"hide"});},true);this.player.addEventListener("ended",function(){d({type:"complete"});},true);this.player.addEventListener("pause",function(){d({type:"paused"});},true);this.player.addEventListener("play",function(){d({type:"playing"});},true);this.player.addEventListener("playing",function(){d({type:"playing",busy:"hide"});},true);this.player.addEventListener("error",function(k){g.onError(k.target.error);d({type:"error",code:k.target.error.code});},true);this.player.addEventListener("waiting",function(){d({type:"waiting",busy:"show"});},true);this.player.addEventListener("timeupdate",function(){if(j){d({type:"timeupdate",busy:"hide"});}else{j=true;}},true);this.player.addEventListener("durationchange",function(){if(this.duration&&(this.duration!==Infinity)){d({type:"durationupdate",duration:this.duration});}},true);this.player.addEventListener("progress",function(k){g.bytesLoaded=k.loaded;g.bytesTotal=k.total;},true);this.player.autoplay=true;if(typeof this.player.hasAttribute=="function"&&this.player.hasAttribute("preload")&&this.player.preload!="none"){this.player.autobuffer=true;}else{this.player.autobuffer=false;this.player.preload="none";}d({type:"playerready"});}};this.onError=function(h){switch(h.code){case 1:console.log("Error: MEDIA_ERR_ABORTED");break;case 2:console.log("Error: MEDIA_ERR_DECODE");break;case 3:console.log("Error: MEDIA_ERR_NETWORK");break;case 4:console.log("Error: MEDIA_ERR_SRC_NOT_SUPPORTED");break;default:break;}};this.onReady=function(){if(!this.loaded){this.loaded=true;this.playMedia();}};this.loadMedia=function(h){this.mediaFile=h;this.createMedia(h);};this.getMediaType=function(h){var i=(typeof h==="array")?h[0].extension:h.extension;switch(i){case"ogg":case"ogv":case"mp4":case"m4v":return"video";case"oga":case"mp3":return"audio";default:break;}return"video";};this.playMedia=function(){if(this.player&&this.player.play){this.player.play();}};this.pauseMedia=function(){if(this.player&&this.player.pause){this.player.pause();}};this.stopMedia=function(){this.pauseMedia();if(this.player){this.player.src="";}};this.destroy=function(){this.stopMedia();this.display.children().remove();};this.seekMedia=function(h){if(this.player){this.player.currentTime=h;}};this.setVolume=function(h){if(this.player){this.player.volume=h;}};this.getVolume=function(){return this.player?this.player.volume:0;};this.getDuration=function(){var h=this.player?this.player.duration:0;return(h===Infinity)?0:h;};this.getCurrentTime=function(){return this.player?this.player.currentTime:0;};this.getPercentLoaded=function(){if(this.player&&this.player.buffered&&this.player.duration){return(this.player.buffered.end(0)/this.player.duration);}else{if(this.bytesTotal){return(this.bytesLoaded/this.bytesTotal);}else{return 0;}}};this.onResize=function(){if(this.mediaType=="video"){this.playerElement.css({width:this.display.width(),height:this.display.height()});}};this.setQuality=function(h){};this.getQuality=function(){return"";};this.hasControls=function(){return false;};this.showControls=function(h){};this.getEmbedCode=function(){if((this.mediaFile.extension=="mp4")||(this.mediaFile.extension=="m4v")||(this.mediaFile.extension=="webm")){var h={config:"config",id:"mediafront_player",file:this.mediaFile.path,image:this.preview,skin:e.skin};if(this.mediaFile.stream){h.stream=this.mediaFile.stream;}return jQuery.media.utils.getFlash(e.flashPlayer,"mediafront_player",e.embedWidth,e.embedHeight,h,e.wmode);}else{return"This media does not support embedding.";}};this.getMediaLink=function(){return"This media currently does not have a link.";};})(this,c,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.image.js b/js/compressed/jquery.media.image.js deleted file mode 100644 index 0e600b72..00000000 --- a/js/compressed/jquery.media.image.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.fn.mediaimage=function(c,b){if(this.length===0){return null;}return new (function(e,h,d){this.display=e;var i=this;var g=0;var f=false;this.imgLoader=new Image();this.imgLoader.onload=function(){f=true;g=(i.imgLoader.width/i.imgLoader.height);i.resize();i.display.trigger("imageLoaded");};e.css("overflow","hidden");this.loaded=function(){return this.imgLoader.complete;};this.resize=function(n,j){var m=d?this.imgLoader.width:(n?n:this.display.width());var k=d?this.imgLoader.height:(j?j:this.display.height());if(m&&k&&f){var l=jQuery.media.utils.getScaledRect(g,{width:m,height:k});if(this.image){this.image.attr("src",this.imgLoader.src).css({marginLeft:l.x,marginTop:l.y,width:l.width,height:l.height});}this.image.fadeIn();}};this.clear=function(){f=false;if(this.image){this.image.attr("src","");this.imgLoader.src="";this.image.fadeOut(function(){if(h){a(this).parent().remove();}else{a(this).remove();}});}};this.refresh=function(){this.resize();};this.loadImage=function(j){this.clear();this.image=a(document.createElement("img")).attr({src:""}).hide();if(h){this.display.append(a(document.createElement("a")).attr({target:"_blank",href:h}).append(this.image));}else{this.display.append(this.image);}this.imgLoader.src=j;};})(this,c,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.json.js b/js/compressed/jquery.media.json.js deleted file mode 100644 index a71dc66e..00000000 --- a/js/compressed/jquery.media.json.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media=jQuery.extend({},{json:function(b){return new (function(e){var f=this;var c={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};var d={"boolean":function(g){return String(g);},"null":function(g){return"null";},number:function(g){return isFinite(g)?String(g):"null";},string:function(g){if(/["\\\x00-\x1f]/.test(g)){g=g.replace(/([\x00-\x1f\\"])/g,function(i,h){var j=c[h];if(j){return j;}j=h.charCodeAt();return"\\u00"+Math.floor(j/16).toString(16)+(j%16).toString(16);});}return'"'+g+'"';},array:function(h){var k=["["],g,o,n,j=h.length,m;for(n=0;n0){this.scrollRegion.clear();var f=function(i,j){e.setLink(j);};var g=d.links.length;while(g){g--;var h=this.scrollRegion.newItem().playlistlink(d,d.links[g]);h.unbind("linkclick").bind("linkclick",f);}this.scrollRegion.activate();}};this.setLink=function(f){if(this.previousLink){this.previousLink.setActive(false);}f.setActive(true);this.previousLink=f;};})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.menu.js b/js/compressed/jquery.media.menu.js deleted file mode 100644 index 76346e6b..00000000 --- a/js/compressed/jquery.media.menu.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.ids=jQuery.extend(jQuery.media.ids,{close:"#mediamenuclose",embed:"#mediaembed",elink:"#mediaelink",email:"#mediaemail"});jQuery.fn.mediamenu=function(c,b){if(this.length===0){return null;}return new (function(f,g,e){e=jQuery.media.utils.getSettings(e);var h=this;this.display=g;this.on=false;this.contents=[];this.prevItem={id:0,link:null,contents:null};this.close=this.display.find(e.ids.close);this.close.unbind("click").bind("click",function(){h.display.trigger("menuclose");});this.setMenuItem=function(j,k){if(this.prevItem.id!=k){if(this.prevItem.id&&e.template.onMenuSelect){e.template.onMenuSelect(this.prevItem.link,this.prevItem.contents,false);}var i=this.contents[k];if(e.template.onMenuSelect){e.template.onMenuSelect(j,i,true);}this.prevItem={id:k,link:j,contents:i};}};this.setEmbedCode=function(i){this.setInputItem(e.ids.embed,i);};this.setMediaLink=function(i){this.setInputItem(e.ids.elink,i);};this.setInputItem=function(k,j){var i=this.contents[k].find("input");i.unbind("click").bind("click",function(){a(this).select().focus();});i.attr("value",j);};var d=0;this.links=this.display.find("a");this.links.each(function(){var j=a(this);if(j.length>0){var k=j.attr("href");var i=h.display.find(k);i.hide();h.contents[k]=i;j.unbind("click").bind("click",{id:k,obj:j.parent()},function(l){l.preventDefault();h.setMenuItem(l.data.obj,l.data.id);});if(d===0){h.setMenuItem(j.parent(),k);}d++;}});})(c,this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.minplayer.js b/js/compressed/jquery.media.minplayer.js deleted file mode 100644 index 35238651..00000000 --- a/js/compressed/jquery.media.minplayer.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{logo:"logo.png",logoWidth:49,logoHeight:15,logopos:"sw",logox:5,logoy:5,link:"http://www.mediafront.org",file:"",image:"",timeout:8,autoLoad:true});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{busy:"#mediabusy",preview:"#mediapreview",play:"#mediaplay",media:"#mediadisplay"});jQuery.fn.minplayer=function(b){if(this.length===0){return null;}return new (function(c,d){d=jQuery.media.utils.getSettings(d);this.display=c;var e=this;this.autoLoad=d.autoLoad;this.busy=c.find(d.ids.busy);this.busyImg=this.busy.find("img");this.busyWidth=this.busyImg.width();this.busyHeight=this.busyImg.height();this.play=c.find(d.ids.play);this.play.unbind("click").bind("click",function(){e.togglePlayPause();});this.playImg=this.play.find("img");this.playWidth=this.playImg.width();this.playHeight=this.playImg.height();this.preview=c.find(d.ids.preview).mediaimage();if(this.preview){this.preview.display.unbind("click").bind("click",function(){e.onMediaClick();});this.preview.display.unbind("imageLoaded").bind("imageLoaded",function(){e.onPreviewLoaded();});}this.usePlayerControls=false;this.busyFlags=0;this.busyVisible=false;this.playVisible=false;this.previewVisible=false;this.playing=false;this.hasMedia=false;this.timeoutId=0;this.width=this.display.width();this.height=this.display.height();this.showElement=function(h,f,g){if(h&&!this.usePlayerControls){if(f){h.show(g);}else{h.hide(g);}}};this.showPlay=function(f,g){f&=this.hasMedia;this.playVisible=f;this.showElement(this.play,f,g);};this.showBusy=function(h,f,g){if(f){this.busyFlags|=(1<0);this.showElement(this.busy,this.busyVisible,g);if(h==1&&!f){this.showBusy(3,false);}};this.showPreview=function(f,g){this.previewVisible=f;if(this.preview){this.showElement(this.preview.display,f,g);}};this.onControlUpdate=function(f){if(this.media){if(this.media.playerReady){switch(f.type){case"play":this.media.player.playMedia();break;case"pause":this.media.player.pauseMedia();break;case"seek":this.media.player.seekMedia(f.value);break;case"volume":this.media.setVolume(f.value);break;case"mute":this.media.mute(f.value);break;default:break;}}else{if((this.media.playQueue.length>0)&&!this.media.mediaFile){this.autoLoad=true;this.playNext();}}if(d.template&&d.template.onControlUpdate){d.template.onControlUpdate(f);}}};this.fullScreen=function(f){if(d.template.onFullScreen){d.template.onFullScreen(f);}this.preview.refresh();};this.onPreviewLoaded=function(){this.previewVisible=true;};this.onMediaUpdate=function(f){switch(f.type){case"paused":this.playing=false;this.showPlay(true);if(!this.media.loaded){this.showPreview(true);}break;case"update":case"playing":this.playing=true;this.showPlay(false);this.showPreview((this.media.mediaFile.type=="audio"));break;case"initialize":this.playing=false;this.showPlay(true);this.showBusy(1,this.autoLoad);this.showPreview(true);break;case"buffering":this.showPlay(true);this.showPreview((this.media.mediaFile.type=="audio"));break;default:break;}if(f.busy){this.showBusy(1,(f.busy=="show"));}};this.onMediaClick=function(){if(this.media.player&&!this.media.hasControls()){if(this.playing){this.media.player.pauseMedia();}else{this.media.player.playMedia();}}};this.media=this.display.find(d.ids.media).mediadisplay(d);if(this.media){this.media.display.unbind("click").bind("click",function(){e.onMediaClick();});}this.setLogoPos=function(){if(this.logo){var f={};if(d.logopos=="se"||d.logopos=="sw"){f.bottom=d.logoy;}if(d.logopos=="ne"||d.logopos=="nw"){f.top=d.logoy;}if(d.logopos=="nw"||d.logopos=="sw"){f.left=d.logox;}if(d.logopos=="ne"||d.logopos=="se"){f.right=d.logox;}this.logo.display.css(f);}};if(!d.controllerOnly){this.display.prepend('');this.logo=this.display.find("."+d.prefix+"medialogo").mediaimage(d.link);if(this.logo){this.logo.display.css({width:d.logoWidth,height:d.logoHeight});this.logo.display.bind("imageLoaded",function(){e.setLogoPos();});this.logo.loadImage(d.logo);}}this.reset=function(){this.hasMedia=false;this.playing=false;jQuery.media.players[d.id].showNativeControls(false);this.showPlay(true);this.showPreview(true);clearTimeout(this.timeoutId);if(this.media){this.media.reset();}};this.togglePlayPause=function(){if(this.media){if(this.media.playerReady){if(this.playing){this.showPlay(true);this.media.player.pauseMedia();}else{this.showPlay(false);this.media.player.playMedia();}}else{if((this.media.playQueue.length>0)&&!this.media.mediaFile){this.autoLoad=true;this.playNext();}}}};this.loadImage=function(f){if(this.preview){this.showBusy(3,true);this.preview.loadImage(f);var g=setInterval(function(){if(e.preview.loaded()){clearInterval(g);e.showBusy(3,false);}},500);if(this.media){this.media.preview=f;}}};this.onResize=function(){if(this.preview){this.preview.refresh();}if(this.media){this.media.onResize();}};this.clearImage=function(){if(this.preview){this.preview.clear();}};this.loadFiles=function(f){this.reset();this.hasMedia=this.media&&this.media.loadFiles(f);if(this.hasMedia&&this.autoLoad){this.media.playNext();}else{if(!this.hasMedia){this.showPlay(false);this.showPreview(true);this.timeoutId=setTimeout(function(){e.media.display.trigger("mediaupdate",{type:"complete"});},(d.timeout*1000));}}return this.hasMedia;};this.playNext=function(){if(this.media){this.media.playNext();}};this.hasControls=function(){if(this.media){return this.media.hasControls();}return true;};this.showControls=function(f){if(this.media){this.media.showControls(f);}};this.loadMedia=function(f){this.reset();if(this.media){this.media.loadMedia(f);}};if(d.file){this.loadMedia(d.file);}if(d.image){this.loadImage(d.image);}})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.mousewheel.js b/js/compressed/jquery.media.mousewheel.js deleted file mode 100644 index 7799cdd7..00000000 --- a/js/compressed/jquery.media.mousewheel.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -/* Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.0.4 - * - * Requires: 1.2.2+ - */ -(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){d--;this.addEventListener(a[d],b,false);}}else{this.onmousewheel=b;}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){d--;this.removeEventListener(a[d],b,false);}}else{this.onmousewheel=null;}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel");},unmousewheel:function(d){return this.unbind("mousewheel",d);}});function b(i){var g=i||window.event,f=[].slice.call(arguments,1),j=0,h=true,e=0,d=0;i=c.event.fix(g);i.type="mousewheel";if(i.wheelDelta){j=i.wheelDelta/120;}if(i.detail){j=-i.detail/3;}d=j;if(g.axis!==undefined&&g.axis===g.HORIZONTAL_AXIS){d=0;e=-1*j;}if(g.wheelDeltaY!==undefined){d=g.wheelDeltaY/120;}if(g.wheelDeltaX!==undefined){e=-1*g.wheelDeltaX/120;}f.unshift(i,j,e,d);return c.event.handle.apply(this,f);}})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.node.js b/js/compressed/jquery.media.node.js deleted file mode 100644 index fb62f402..00000000 --- a/js/compressed/jquery.media.node.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{node:"",incrementTime:5});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{voter:"#mediavoter",uservoter:"#mediauservoter",mediaRegion:"#mediaregion",field:".mediafield"});jQuery.fn.medianode=function(c,b){if(this.length===0){return null;}return new (function(f,e,d){d=jQuery.media.utils.getSettings(d);this.display=e;this.nodeInfo={};this.incremented=false;var g=this;this.player=this.display.find(d.ids.mediaRegion).minplayer(d);if(this.player&&(d.incrementTime!==0)){this.player.display.unbind("mediaupdate").bind("mediaupdate",function(h,i){g.onMediaUpdate(i);});}this.images=[];this.addVoters=function(h){this.voter=h.find(d.ids.voter).mediavoter(d,f,false);this.uservoter=h.find(d.ids.uservoter).mediavoter(d,f,true);if(this.uservoter&&this.voter){this.uservoter.display.unbind("processing").bind("processing",function(){g.player.showBusy(2,true);});this.uservoter.display.unbind("voteGet").bind("voteGet",function(){g.player.showBusy(2,false);});this.uservoter.display.unbind("voteSet").bind("voteSet",function(j,i){g.player.showBusy(2,false);g.voter.updateVote(i);});}};this.addVoters(this.display);this.onMediaUpdate=function(h){if(!this.incremented){switch(h.type){case"update":if((d.incrementTime>0)&&(h.currentTime>d.incrementTime)){this.incremented=true;f.call(jQuery.media.commands.incrementCounter,null,null,g.nodeInfo.nid);}break;case"complete":if(d.incrementTime<0){this.incremented=true;f.call(jQuery.media.commands.incrementCounter,null,null,g.nodeInfo.nid);}break;default:break;}}};this.loadNode=function(h){return this.getNode(this.translateNode(h));};this.translateNode=function(i){var j=((typeof i)=="number")||((typeof i)=="string");if(!i){var h=d.node;if((typeof h)=="object"){h.load=false;return h;}else{return h?{nid:h,load:true}:null;}}else{if(j){return{nid:i,load:true};}else{i.load=false;return i;}}};this.getNode=function(h){if(h){if(f&&h.load){f.call(jQuery.media.commands.loadNode,function(i){g.setNode(i);},null,h.nid,{});}else{this.setNode(h);}return true;}return false;};this.setNode=function(h){if(h){this.nodeInfo=h;this.incremented=false;if(this.player&&this.nodeInfo.mediafiles){var i=this.getImage("preview");if(i){this.player.loadImage(i.path);}else{this.player.clearImage();}this.player.loadFiles(this.nodeInfo.mediafiles.media);}if(this.voter){this.voter.getVote(h);}if(this.uservoter){this.uservoter.getVote(h);}this.display.find(d.ids.field).each(function(){g.setField(this,h,a(this).attr("type"),a(this).attr("field"));});this.display.trigger("nodeload",this.nodeInfo);}};this.setField=function(j,i,h,k){if(h){switch(h){case"text":this.setTextField(j,i,k);break;case"image":this.setImageField(j,k);break;case"cck_text":this.setCCKTextField(j,i,k);break;default:break;}}};this.setTextField=function(i,h,k){var j=h[k];if(j){a(i).empty().html(j);}return true;};this.setCCKTextField=function(i,h,k){if(args.fieldType=="cck_text"){var j=h[k];if(j){a(i).empty().html(j["0"].value);}}return true;};this.onResize=function(){if(this.player){this.player.onResize();}};this.getImage=function(j){var h=this.nodeInfo.mediafiles?this.nodeInfo.mediafiles.image:null;var k=null;if(h){if(h[j]){k=h[j];}else{for(var i in h){if(h.hasOwnProperty(i)){k=h[i];break;}}}k=(typeof k==="string")?{path:k}:k;k.path=k.path?jQuery.trim(k.path):(d.baseURL+jQuery.trim(k.filepath));if(k&&k.path){k.path=k.path?jQuery.trim(k.path):(d.baseURL+jQuery.trim(k.filepath));}else{k=null;}}return k;};this.setImageField=function(i,k){var h=this.getImage(k);if(h){var j=a(i).empty().mediaimage();this.images.push(j);j.loadImage(h.path);}};})(c,this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.pager.js b/js/compressed/jquery.media.pager.js deleted file mode 100644 index 68e4f9df..00000000 --- a/js/compressed/jquery.media.pager.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{shuffle:false,loop:false,pageLimit:10});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{prev:"#mediaprev",next:"#medianext",loadPrev:"#medialoadprev",loadNext:"#medialoadnext",prevPage:"#mediaprevpage",nextPage:"#medianextpage"});jQuery.fn.mediapager=function(b){return new (function(c,d){d=jQuery.media.utils.getSettings(d);this.display=c;var e=this;this.activeIndex=-1;this.currentIndex=-1;this.activePage=0;this.currentPage=0;this.numPages=0;this.numItems=10;this.activeNumItems=10;this.loadState="";this.enabled=false;this.prevButton=c.find(d.ids.prev).medialink(d,function(){if(e.enabled){e.loadPrev(false);}});this.nextButton=c.find(d.ids.next).medialink(d,function(){if(e.enabled){e.loadNext(false);}});this.loadPrevButton=c.find(d.ids.loadPrev).medialink(d,function(){if(e.enabled){e.loadPrev(true);}});this.loadNextButton=c.find(d.ids.loadNext).medialink(d,function(){if(e.enabled){e.loadNext(true);}});this.prevPageButton=c.find(d.ids.prevPage).medialink(d,function(){if(e.enabled){e.loadState="click";e.prevPage();}});this.nextPageButton=c.find(d.ids.nextPage).medialink(d,function(){if(e.enabled){e.loadState="click";e.nextPage();}});this.setTotalItems=function(f){if(f&&d.pageLimit){this.numPages=Math.ceil(f/d.pageLimit);if(this.numPages==1){this.numItems=f;}}};this.setNumItems=function(f){this.numItems=f;};this.reset=function(){this.activePage=0;this.currentPage=0;this.activeIndex=-1;this.currentIndex=-1;this.loadState="";};this.loadIndex=function(h){var f=h?"activeIndex":"currentIndex";var g=this[f];switch(this.loadState){case"prev":this.loadState="";this.loadPrev(h);return;case"first":g=0;break;case"last":g=(this.numItems-1);break;case"rand":g=Math.floor(Math.random()*this.numItems);break;default:break;}this.loadState="";if(g!=this[f]){this.loadState="";this[f]=g;this.display.trigger("loadindex",{index:this[f],active:h});}};this.loadNext=function(g){if(this.loadState){this.loadIndex(g);}else{if(d.shuffle){this.loadRand();}else{var f=g?"activeIndex":"currentIndex";if(g&&(this.activePage!=this.currentPage)){if((this.activeIndex==(this.activeNumItems-1))&&(this.activePage==(this.currentPage-1))){this.currentIndex=this.activeIndex=0;this.activePage=this.currentPage;this.display.trigger("loadindex",{index:0,active:true});}else{this.currentPage=this.activePage;this.loadState="";this.display.trigger("loadpage",{index:this.activePage,active:g});}}else{this[f]++;if(this[f]>=this.numItems){if(this.numPages>1){this[f]=(this.numItems-1);this.loadState=this.loadState?this.loadState:"first";this.nextPage(g);}else{if(!g||d.loop){this[f]=0;this.display.trigger("loadindex",{index:this[f],active:g});}}}else{this.display.trigger("loadindex",{index:this[f],active:g});}}}}};this.loadPrev=function(g){var f=g?"activeIndex":"currentIndex";if(g&&(this.activePage!=this.currentPage)){this.currentPage=this.activePage;this.loadState="prev";this.display.trigger("loadpage",{index:this.activePage,active:g});}else{this[f]--;if(this[f]<0){if(this.numPages>1){this[f]=0;this.loadState=this.loadState?this.loadState:"last";this.prevPage(g);}else{if(!g||d.loop){this[f]=(this.numItems-1);this.display.trigger("loadindex",{index:this[f],active:g});}}}else{this.display.trigger("loadindex",{index:this[f],active:g});}}};this.loadRand=function(){var f=Math.floor(Math.random()*this.numPages);if(f!=this.activePage){this.activePage=f;this.loadState=this.loadState?this.loadState:"rand";this.display.trigger("loadpage",{index:this.activePage,active:true});}else{this.activeIndex=Math.floor(Math.random()*this.numItems);this.display.trigger("loadindex",{index:this.activeIndex,active:true});}};this.nextPage=function(h){var f=h?"activePage":"currentPage";var g=false;if(this[f]<(this.numPages-1)){this[f]++;g=true;}else{if(d.loop){this.loadState=this.loadState?this.loadState:"first";this[f]=0;g=true;}else{this.loadState="";}}this.setPageState(h);if(g){this.display.trigger("loadpage",{index:this[f],active:h});}};this.prevPage=function(h){var f=h?"activePage":"currentPage";var g=false;if(this[f]>0){this[f]--;g=true;}else{if(d.loop){this.loadState=this.loadState?this.loadState:"last";this[f]=(this.numPages-1);g=true;}else{this.loadState="";}}this.setPageState(h);if(g){this.display.trigger("loadpage",{index:this[f],active:h});}};this.setPageState=function(f){if(f){this.currentPage=this.activePage;}else{this.activeNumItems=this.numItems;}};})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.parser.js b/js/compressed/jquery.media.parser.js deleted file mode 100644 index 9e750ef5..00000000 --- a/js/compressed/jquery.media.parser.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.extend({},{parser:function(b){return new (function(c){var d=this;this.onLoaded=null;this.parseFile=function(e,f){this.onLoaded=f;jQuery.ajax({type:"GET",url:e,dataType:"xml",success:function(g){d.parseXML(g);},error:function(g,i,h){if(window.console&&console.log){console.log("Error: "+i);}}});};this.parseXML=function(e){var f=this.parseXSPF(e);if(f.total_rows===0){f=this.parseASX(e);}if(f.total_rows===0){f=this.parseRSS(e);}if(this.onLoaded&&f.total_rows){this.onLoaded(f);}return f;};this.parseXSPF=function(e){var g={total_rows:0,nodes:[]};var f=jQuery("playlist trackList track",e);if(f.length>0){f.each(function(h){g.total_rows++;g.nodes.push({nid:g.total_rows,title:a(this).find("title").text(),description:a(this).find("annotation").text(),mediafiles:{image:{image:{path:a(this).find("image").text()}},media:{media:{path:a(this).find("location").text()}}}});});}return g;};this.parseASX=function(e){var g={total_rows:0,nodes:[]};var f=jQuery("asx entry",e);if(f.length>0){f.each(function(h){g.total_rows++;g.nodes.push({nid:g.total_rows,title:a(this).find("title").text(),mediafiles:{image:{image:{path:a(this).find("image").text()}},media:{media:{path:a(this).find("location").text()}}}});});}return g;};this.parseRSS=function(f){var h={total_rows:0,nodes:[]};var g=jQuery("rss channel",f);if(g.length>0){var e=(g.find("generator").text()=="YouTube data API");g.find("item").each(function(i){h.total_rows++;var j={};j=e?d.parseYouTubeItem(a(this)):d.parseRSSItem(a(this));j.nid=h.total_rows;h.nodes.push(j);});}return h;};this.parseRSSItem=function(e){return{title:e.find("title").text(),mediafiles:{image:{image:{path:e.find("image").text()}},media:{media:{path:e.find("location").text()}}}};};this.parseYouTubeItem=function(f){var e=f.find("description").text();var g=f.find("link").text().replace("&feature=youtube_gdata","");return{title:f.find("title").text(),mediafiles:{image:{image:{path:jQuery("img",e).eq(0).attr("src")}},media:{media:{path:g,player:"youtube"}}}};};})(b);}},jQuery.media);})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.player.js b/js/compressed/jquery.media.player.js deleted file mode 100644 index 8db0c5d8..00000000 --- a/js/compressed/jquery.media.player.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{protocol:"auto",server:"drupal",template:"default",baseURL:"",debug:false,draggable:false,resizable:false,showPlaylist:true,autoNext:true,prefix:"",zIndex:400,fluidWidth:false,fluidHeight:false,fullscreen:false});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{loading:"#mediaplayerloading",player:"#mediaplayer",menu:"#mediamenu",titleBar:"#mediatitlebar",node:"#medianode",playlist:"#mediaplaylist",control:"#mediacontrol"});jQuery.media.players={};jQuery.media.loadCallbacks={};jQuery.media.playlists={};jQuery.media.controllers={};jQuery.media.onLoaded=function(b,d){var c=jQuery.media.players[b];if(c&&c.display&&c.loaded){d(c);}else{if(!jQuery.media.loadCallbacks[b]){jQuery.media.loadCallbacks[b]=[];}jQuery.media.loadCallbacks[b].push(d);}};jQuery.media.addElement=function(d,f,c){if(f&&f[c]){var e=jQuery.media.players[d];if(e){switch(c){case"playlist":e.addPlaylist(f.playlist);break;case"controller":e.addController(f.controller);break;default:break;}}else{var b=c+"s";if(!jQuery.media[b][d]){jQuery.media[b][d]=[];}jQuery.media[b][d].push(f[c]);}}};jQuery.media.addController=function(b,c){jQuery.media.addElement(b,c,"controller");};jQuery.media.addPlaylist=function(b,c){jQuery.media.addElement(b,c,"playlist");};jQuery.fn.mediaplayer=function(b){if(this.length===0){return null;}return new (function(e,f){f=jQuery.media.utils.getSettings(f);if(!f.id){f.id=jQuery.media.utils.getId(e);}this.dialog=e;this.display=this.dialog.find(f.ids.player);var g=this;var c=[];jQuery.media.utils.checkVisibility(this.display,c);jQuery.media.players[f.id]=this;this.loaded=false;var d=0;f.template=jQuery.media.templates[f.template](this,f);if(f.template.getSettings){f=jQuery.extend(f,f.template.getSettings());}a(window).keyup(function(h){switch(h.keyCode){case 0:g.onSpaceBar();break;case 113:case 27:g.onEscKey();break;default:break;}});if(f.fluidWidth||f.fluidHeight){a(window).resize(function(){g.onResize();});}if(jQuery.media[f.protocol]){this.protocol=jQuery.media[f.protocol](f);}if(jQuery.media[f.server]){this.server=jQuery.media[f.server](this.protocol,f);}this.menu=this.dialog.find(f.ids.menu).mediamenu(this.server,f);if(this.menu){this.menu.display.unbind("menuclose").bind("menuclose",function(){g.showMenu(false);});}this.menuOn=false;this.maxOn=!f.showPlaylist;this.fullScreen=false;this.playlist=null;this.activePlaylist=null;this.controller=null;this.activeController=null;this.showMenu=function(h){if(f.template.onMenu){this.menuOn=h;f.template.onMenu(this.menuOn);}};this.onEscKey=function(){if(this.fullScreen){this.onFullScreen(false);}};this.onSpaceBar=function(){if(this.fullScreen&&this.node&&this.node.player){this.node.player.togglePlayPause();}};this.addPlayerEvents=function(h){h.display.unbind("menu").bind("menu",function(i){g.showMenu(!g.menuOn);});h.display.unbind("maximize").bind("maximize",function(i){g.maximize(!g.maxOn);});h.display.unbind("fullscreen").bind("fullscreen",function(i){g.onFullScreen(!g.fullScreen);});};this.onFullScreen=function(h){this.fullScreen=h;if(this.node&&this.node.player){this.node.player.fullScreen(this.fullScreen);this.onResize();if(window.webkitSupportsFullscreen&&window.webkitSupportsFullscreen()){if(h){window.webkitEnterFullscreen();}else{window.webkitExitFullscreen();}}}};this.titleBar=this.dialog.find(f.ids.titleBar).mediatitlebar(f);if(this.titleBar){this.addPlayerEvents(this.titleBar);if(f.draggable&&this.dialog.draggable){this.dialog.draggable({handle:f.ids.titleBar,containment:"document"});}if(f.resizable&&this.dialog.resizable){this.dialog.resizable({alsoResize:this.display,containment:"document",resize:function(h){g.onResize();}});}}this.node=this.dialog.find(f.ids.node).medianode(this.server,f);if(this.node){this.node.display.unbind("nodeload").bind("nodeload",function(h,i){g.onNodeLoad(i);});if(this.node.player&&this.node.player.media){this.node.player.media.display.unbind("mediaupdate").bind("mediaupdate",function(h,i){g.onMediaUpdate(i);});}if(this.node.uservoter){this.node.uservoter.display.unbind("voteSet").bind("voteSet",function(i,h){if(g.activePlaylist){g.activePlaylist.onVoteSet(h);}});}}this.onMediaUpdate=function(h){this.node.player.onMediaUpdate(h);if(f.autoNext&&this.activePlaylist&&(h.type=="complete")){this.activePlaylist.loadNext();}if(this.controller){this.controller.onMediaUpdate(h);}if(this.activeController){this.activeController.onMediaUpdate(h);}if(this.menu&&this.node&&(h.type=="meta")){this.menu.setEmbedCode(this.node.player.media.player.getEmbedCode());this.menu.setMediaLink(this.node.player.media.player.getMediaLink());}if(f.template&&f.template.onMediaUpdate){f.template.onMediaUpdate(h);}};this.onPlaylistLoad=function(h){if(this.node){if(this.node.player&&this.node.player.media){this.node.player.media.hasPlaylist=true;}this.node.loadNode(h);}if(f.template.onPlaylistLoad){f.template.onPlaylistLoad(h);}};this.onNodeLoad=function(h){if(f.template.onNodeLoad){f.template.onNodeLoad(h);}};this.maximize=function(h){if(!this.fullScreen){if(f.template.onMaximize&&(h!=this.maxOn)){this.maxOn=h;f.template.onMaximize(this.maxOn);}}};this.addPlaylist=function(h){if(h){h.display.unbind("playlistload").bind("playlistload",h,function(i,j){g.activePlaylist=i.data;g.onPlaylistLoad(j);});if(!this.activePlaylist&&h.activeTeaser){this.activePlaylist=h;this.onPlaylistLoad(h.activeTeaser.node.nodeInfo);}}return h;};this.searchForElement=function(h){for(var j in h){var i=new RegExp("^"+j+"(\\_[0-9]+)?$","i");if(f.id.search(i)===0){return h[j];}}return null;};this.playlist=this.addPlaylist(this.dialog.find(f.ids.playlist).mediaplaylist(this.server,f));this.addController=function(i,h){if(i){i.display.unbind("controlupdate").bind("controlupdate",i,function(j,k){g.activeController=j.data;if(g.node&&g.node.player){g.node.player.onControlUpdate(k);}});if(h&&!this.activeController){this.activeController=i;}this.addPlayerEvents(i);}return i;};this.controller=this.addController(this.dialog.find(f.ids.control).mediacontrol(f),false);if(this.controller&&this.node){this.node.addVoters(this.controller.display);}this.onResize=function(){if(f.template.onResize){f.template.onResize();}if(this.node){this.node.onResize();}if(this.controller){this.controller.onResize();}};this.showNativeControls=function(h){var i=this.node?this.node.player:null;if(i&&i.hasControls()){i.usePlayerControls=h;if(h){i.busy.hide();i.play.hide();if(i.preview){i.preview.display.hide();}if(this.controller){this.controller.display.hide();}}else{i.showBusy(1,((this.busyFlags&2)==2));i.showPlay(this.playVisible);i.showPreview(this.previewVisible);if(this.controller){this.controller.display.show();}}i.showControls(h);}};this.loadContent=function(){var j=this.searchForElement(jQuery.media.controllers);if(j){d=j.length;while(d){d--;this.addController(j[d],true);}}var h=this.searchForElement(jQuery.media.playlists);if(h){d=h.length;while(d){d--;this.addPlaylist(h[d]);}}var i=false;if(this.playlist){i=this.playlist.loadPlaylist();}if(!i&&this.node){if(this.node.player&&this.node.player.media){this.node.player.media.settings.repeat=(f.loop||f.repeat);}this.node.loadNode();}};this.initializeTemplate=function(){if(f.template.initialize){f.template.initialize(f);}jQuery.media.utils.resetVisibility(c);};this.load=function(){this.initializeTemplate();this.dialog.css("position","relative");this.dialog.css("marginLeft",0);this.dialog.css("overflow","visible");if(f.fullscreen){this.onFullScreen(true);}this.loaded=true;this.display.trigger("playerLoaded",this);if(jQuery.media.loadCallbacks[f.id]){var j=jQuery.media.loadCallbacks[f.id];var h=j.length;while(h){h--;j[h](this);}}this.server.connect(function(i){g.loadContent();});};this.load();})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.playlist.js b/js/compressed/jquery.media.playlist.js deleted file mode 100644 index 610bddff..00000000 --- a/js/compressed/jquery.media.playlist.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{playlist:"",args:[],wildcard:"*"});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{pager:"#mediapager",scroll:"#mediascroll",busy:"#mediabusy",links:"#medialinks"});jQuery.fn.mediaplaylist=function(c,b){if(this.length===0){return null;}return new (function(e,f,d){d=jQuery.media.utils.getSettings(d);this.display=f;var g=this;this.teasers=[];this.selectedTeaser=null;this.activeTeaser=null;this.args=d.args;this.setActive=true;this.activePager=null;this.pager=null;this.parser=jQuery.media.parser(d);this.scrollRegion=f.find(d.ids.scroll).mediascroll(d);this.scrollRegion.clear();this.busy=f.find(d.ids.busy);this.busyVisible=false;this.busyImg=this.busy.find("img");this.busyWidth=this.busyImg.width();this.busyHeight=this.busyImg.height();this.links=f.find(d.ids.links).medialinks(d);this.links.loadLinks();this.loading=function(h){if(this.pager){this.pager.enabled=!h;}if(this.activePager){this.activePager.enabled=!h;}if(h){this.busyVisible=true;this.busy.show();}else{this.busyVisible=false;this.busy.hide();}};this.addPager=function(h,i){if(h){h.display.unbind("loadindex").bind("loadindex",function(j,k){if(k.active){g.activateTeaser(g.teasers[k.index]);}else{g.selectTeaser(g.teasers[k.index]);}});h.display.unbind("loadpage").bind("loadpage",function(j,k){g.setActive=k.active;g.loadPlaylist({pageIndex:k.index});});if(i&&!this.activePager){this.activePager=h;}}return h;};this.pager=this.addPager(f.find(d.ids.pager).mediapager(d),false);this.links.display.unbind("linkclick").bind("linkclick",function(i,h){g.onLinkClick(h);});this.onLinkClick=function(k){var i=k.index;var j=k.playlist;var h=[];h[i]=k.arg;if(this.pager){this.pager.reset();}if(this.activePager){this.activePager.reset();}this.loadPlaylist({playlist:j,args:h});};this.loadNext=function(){if(this.pager){this.pager.loadNext(true);}else{if(this.activePager){this.activePager.loadNext(true);}}};this.loadPlaylist=function(h){var j={playlist:d.playlist,pageLimit:d.pageLimit,pageIndex:(this.pager?this.pager.activePage:0),args:{}};var i=jQuery.extend({},j,h);this.setArgs(i.args);this.loading(true);if(i.playlist){if(((typeof i.playlist)=="object")){d.playlist=i.playlist.name;this.setPlaylist(i.playlist);}else{if(i.playlist.match(/^http[s]?\:\/\/|\.xml$/i)){this.parser.parseFile(i.playlist,function(k){g.setPlaylist(k);});}else{if(e){e.call(jQuery.media.commands.getPlaylist,function(k){g.setPlaylist(k);},null,i.playlist,i.pageLimit,i.pageIndex,this.args);}}}return true;}return false;};this.setPlaylist=function(k){if(k&&k.nodes){var h=[];jQuery.media.utils.checkVisibility(this.display,h);if(this.pager){this.pager.setTotalItems(k.total_rows);}if(this.activePager){this.activePager.setTotalItems(k.total_rows);}this.scrollRegion.clear();this.resetTeasers();var j=k.nodes.length;for(var i=0;i
").mediaimage(null,true);this.display.append(g.display);if((d.rotatorTransition=="hscroll")||(d.rotatorTransition=="vscroll")){g.display.css({"float":"left"});}else{g.display.css({position:"absolute",zIndex:(200-this.images.length),top:0,left:0});}return g;};this.loadImages=function(g){this.images=[];this.imageIndex=0;jQuery.each(g,function(h){var i=f.addImage();if(h===0){i.display.unbind("imageLoaded").bind("imageLoaded",function(){f.onImageLoaded();}).show();}i.loadImage(this);f.images.push(i);});if(d.rotatorHover){this.display.unbind("mouseenter").bind("mouseenter",function(){f.startRotator();}).unbind("mouseleave").bind("mouseleave",function(){clearInterval(f.imageInterval);});}else{this.startRotator();}};this.startRotator=function(){clearInterval(this.imageInterval);this.imageInterval=setInterval(function(){f.showNextImage();},d.rotatorTimeout);};this.showNextImage=function(){this.hideImage(this.images[this.imageIndex].display);this.imageIndex=(this.imageIndex+1)%this.images.length;this.showImage(this.images[this.imageIndex].display);};this.showImage=function(g){if(d.rotatorTransition==="fade"){g.fadeIn(d.rotatorSpeed);}else{g.css({marginLeft:0,marginTop:0}).show();}};this.hideImage=function(g){switch(d.rotatorTransition){case"fade":g.fadeOut(d.rotatorSpeed);break;case"hscroll":g.animate({marginLeft:-this.width},d.rotatorSpeed,d.rotatorEasing,function(){g.css({marginLeft:0}).remove();f.display.append(g);});break;case"vscroll":g.animate({marginTop:-this.height},d.rotatorSpeed,d.rotatorEasing,function(){g.css({marginTop:0}).remove();f.display.append(g);});break;default:g.hide();break;}};var c=[];e.find("img").each(function(){c.push(a(this).attr("src"));});e.empty().css("overflow","hidden").append(a('
'));this.display=e.find(".imagerotatorinner");if(c.length){this.loadImages(c);}})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.rpc.js b/js/compressed/jquery.media.rpc.js deleted file mode 100644 index 13e4fbfc..00000000 --- a/js/compressed/jquery.media.rpc.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{gateway:""});jQuery.media=jQuery.extend({},{rpc:function(b){return new (function(c){c=jQuery.media.utils.getSettings(c);var d=this;this.parseObject=function(h){var e="";if(h instanceof Date){e="";e+=h.getFullYear();e+=h.getMonth();e+=h.getDate();e+="T";e+=h.getHours()+":";e+=h.getMinutes()+":";e+=h.getSeconds();e+="";}else{if(h instanceof Array){e="\n";for(var g=0;g"+this.serializeToXML(h[g])+"\n";}e+="";}else{e="\n";for(var f in h){if(h.hasOwnProperty(f)){e+=" "+f+"";e+=this.serializeToXML(h[f])+"\n";}}e+="";}}return e;};this.serializeToXML=function(f){switch(typeof f){case"boolean":return""+((f)?"1":"0")+"";case"number":var e=parseInt(f,10);if(e==f){return""+f+"";}return""+f+"";case"string":return""+f+"";case"object":return this.parseObject(f);default:break;}return"";};this.parseXMLValue=function(f){var m=jQuery(f).children();var k=m.length;var n=function(i){return function(){i.push(d.parseXMLValue(this));};};var l=function(i){return function(){i[jQuery("> name",this).text()]=d.parseXMLValue(jQuery("value",this));};};for(var h=0;h data > value",j).each(n(e));return e;case"struct":var g={};jQuery("> member",j).each(l(g));return g;case"dateTime.iso8601":return NULL;default:break;}}return null;};this.parseXML=function(f){var e={};e.version="1.0";jQuery("methodResponse params param > value",f).each(function(g){e.result=d.parseXMLValue(this);});jQuery("methodResponse fault > value",f).each(function(g){e.error=d.parseXMLValue(this);});return e;};this.xmlRPC=function(j,h){var e='';e+="";e+=""+j+"";if(h.length>0){e+="";var g=h.length;for(var f=0;f"+this.serializeToXML(h[f])+"";}}e+="";}e+="";return e;};this.call=function(i,h,e,g,f){if(c.gateway){jQuery.ajax({url:c.gateway,dataType:"xml",type:"POST",data:this.xmlRPC(i,g),error:function(j,l,k){if(e){e(l);}else{if(window.console&&console.log){console.log("Error: "+l);}}},success:function(k){var j=d.parseXML(k);if(j.error){if(e){e(j.error);}else{if(window.console&&console.dir){console.dir(j.error);}}}else{if(h){h(j.result);}}},processData:false,contentType:"text/xml"});}else{if(h){h(null);}}};})(b);}},jQuery.media);})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.scroll.js b/js/compressed/jquery.media.scroll.js deleted file mode 100644 index 572cf33e..00000000 --- a/js/compressed/jquery.media.scroll.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{vertical:true,scrollSpeed:20,updateTimeout:40,hysteresis:40,showScrollbar:true,scrollMode:"auto"});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{listMask:"#medialistmask",list:"#medialist",scrollWrapper:"#mediascrollbarwrapper",scrollBar:"#mediascrollbar",scrollTrack:"#mediascrolltrack",scrollHandle:"#mediascrollhandle",scrollUp:"#mediascrollup",scrollDown:"#mediascrolldown"});jQuery.fn.mediascroll=function(b){return new (function(c,e){e=jQuery.media.utils.getSettings(e);this.display=c;var f=this;this.spanMode=(e.scrollMode=="span");this.listMask=c.find(e.ids.listMask);if(this.spanMode||(e.scrollMode=="auto")){this.listMask.unbind("mouseenter").bind("mouseenter",function(g){f.onMouseOver(g);});this.listMask.unbind("mouseleave").bind("mouseleave",function(g){f.onMouseOut(g);});this.listMask.unbind("mousemove").bind("mousemove",function(g){f.onMouseMove(g);});}else{if(e.scrollMode=="mouse"){this.display.bind("mousewheel",function(i,j,h,g){i.preventDefault();f.onMouseScroll(h,g);});}}this.listMask.css("overflow","hidden");this.list=c.find(e.ids.list);var d=this.list.children().eq(0);this.elementWidth=d.width();this.elementHeight=d.height();this.elementSize=e.vertical?d.outerHeight(true):d.outerWidth(true);if(jQuery.browser.msie&&parseInt(jQuery.fn.jquery.replace(".",""),10)<132){this.template=a("
").append(jQuery.media.utils.cloneFix(d)).html();}else{this.template=a("
").append(d.clone()).html();}this.list.empty();this.pagePos=e.vertical?"pageY":"pageX";this.margin=e.vertical?"marginTop":"marginLeft";this.scrollSize=e.vertical?0:this.listMask.width();this.scrollMid=0;this.mousePos=0;this.listPos=0;this.scrollInterval=0;this.shouldScroll=false;this.bottomPos=0;this.ratio=0;this.elements=[];this.listSize=0;this.scrollBar=c.find(e.ids.scrollTrack).mediaslider(e.ids.scrollHandle,e.vertical);this.scrollUp=c.find(e.ids.scrollUp).medialink(e,function(){f.scroll(true);});this.scrollDown=c.find(e.ids.scrollDown).medialink(e,function(){f.scroll(false);});if(this.scrollBar){this.scrollBar.display.unbind("updatevalue").bind("updatevalue",function(g,h){f.setScrollPos(h*f.bottomPos,false);});this.scrollBar.display.unbind("setvalue").bind("setvalue",function(g,h){f.setScrollPos(h*f.bottomPos,true);});this.scrollBar.display.bind("mousewheel",function(i,j,h,g){i.preventDefault();f.onMouseScroll(h,g);});}this.setScrollSize=function(g){if(g){this.scrollSize=g;this.scrollMid=this.scrollSize/2;var h=this.scrollSize-(e.hysteresis*2);this.bottomPos=(this.listSize-this.scrollSize);this.ratio=((this.listSize-h)/h);this.shouldScroll=(this.bottomPos>0);}};this.clear=function(){this.mousePos=0;this.shouldScroll=false;this.bottomPos=0;this.ratio=0;this.scrolling=false;this.elements=[];this.listSize=0;this.list.css(this.margin,0);this.list.children().unbind();clearInterval(this.scrollInterval);this.list.empty();};this.getOffset=function(){return e.vertical?this.listMask.offset().top:this.listMask.offset().left;};this.activate=function(){this.setScrollSize(e.vertical?this.listMask.height():this.listMask.width());this.setScrollPos(0,true);};this.newItem=function(){var h=a(this.template);this.list.append(h);var g=this.getElement(h,this.elements.length);this.listSize+=g.size;if(e.vertical){this.list.css({height:this.listSize});}else{this.list.css({width:this.listSize});}this.elements.push(g);return g.obj;};this.getElement=function(i,g){var h=this.elementSize;var j=this.listSize;return{obj:i,size:h,position:j,bottom:(j+h),mid:(h/2),index:g};};this.scroll=function(g){var h=this.getElementAtPosition(g?0:this.scrollSize);if(h){var j=(h.straddle||g)?h:this.elements[h.index+1];if(j){var i=g?j.position:(j.bottom-this.scrollSize);this.setScrollPos(i,true);}}};this.onMouseScroll=function(h,g){var i=e.vertical?-g:h;this.setScrollPos(this.listPos+(e.scrollSpeed*i));};this.onMouseMove=function(g){this.mousePos=g[this.pagePos]-this.getOffset();if(this.shouldScroll&&this.spanMode){this.setScrollPos((this.mousePos-e.hysteresis)*this.ratio);}};this.onMouseOver=function(g){if(this.shouldScroll){clearInterval(this.scrollInterval);this.scrollInterval=setInterval(function(){f.update();},e.updateTimeout);}};this.onMouseOut=function(g){clearInterval(this.scrollInterval);};this.align=function(g){var h=this.getElementAtPosition(g?0:this.scrollSize);if(h){var i=g?h.position:(h.bottom-this.scrollSize);this.setScrollPos(i,true);}};this.setVisible=function(g){var i=this.elements[g];if(i){var h=this.listPos;if(i.positionthis.scrollSize){h=i.bottom-this.scrollSize;}}if(h!=this.listPos){this.setScrollPos(h,true);}}};this.getElementAtPosition=function(g){var j=null;var h=this.elements.length;while(h--){j=this.elements[h];if(((j.position-this.listPos)=g)){j.straddle=((j.bottom-this.listPos)!=g);break;}}return j;};this.update=function(){var h=this.mousePos-this.scrollMid;if(Math.abs(h)>e.hysteresis){var g=(h>0)?-e.hysteresis:e.hysteresis;h=e.scrollSpeed*((this.mousePos+g-this.scrollMid)/this.scrollMid);this.setScrollPos(this.listPos+h);}};this.setScrollPos=function(i,h){i=(i<0)?0:i;if(this.shouldScroll&&(i>this.bottomPos)){i=this.bottomPos;}this.listPos=i;if(this.scrollBar){var g=this.bottomPos?(this.listPos/this.bottomPos):0;this.scrollBar.setPosition(g);}if(h){if(e.vertical){this.list.animate({marginTop:-this.listPos},(e.scrollSpeed*10));}else{this.list.animate({marginLeft:-this.listPos},(e.scrollSpeed*10));}}else{this.list.css(this.margin,-this.listPos);}};})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.sha256.js b/js/compressed/jquery.media.sha256.js deleted file mode 100644 index dfdebfc1..00000000 --- a/js/compressed/jquery.media.sha256.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.extend({},{sha256:function(){function b(T,S){b.charSize=8;b.b64pad="";b.hexCase=0;var Q=null;var H=null;var x=function(p){var o=[];var s=(1<>5]|=(p.charCodeAt(q/b.charSize)&s)<<(32-b.charSize-q%32);}return o;};var n=function(p){var o=[];var s=p.length;for(var q=0;q>3]|=r<<(24-(4*(q%8)));}else{return"INVALID HEX STRING";}}return o;};var l=null;var j=null;if("HEX"===S){if(0!==(T.length%2)){return"TEXT MUST BE IN BYTE INCREMENTS";}l=T.length*4;j=n(T);}else{if(("ASCII"===S)||("undefined"===typeof(S))){l=T.length*b.charSize;j=x(T);}else{return"UNKNOWN TEXT INPUT TYPE";}}var R=function(p){var o=b.hexCase?"0123456789ABCDEF":"0123456789abcdef";var s="";var r=p.length*4;for(var q=0;q>2]>>((3-q%4)*8+4))&15)+o.charAt((p[q>>2]>>((3-q%4)*8))&15);}return s;};var K=function(p){var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var v="";var u=p.length*4;for(var r=0;r>2]>>8*(3-r%4))&255)<<16)|(((p[r+1>>2]>>8*(3-(r+1)%4))&255)<<8)|((p[r+2>>2]>>8*(3-(r+2)%4))&255);for(var q=0;q<4;q++){if(r*8+q*6>p.length*32){v+=b.b64pad;}else{v+=o.charAt((s>>6*(3-q))&63);}}}return v;};var z=function(o,p){if(p<32){return(o>>>p)|(o<<(32-p));}else{return o;}};var y=function(o,p){if(p<32){return o>>>p;}else{return 0;}};var t=function(o,q,p){return(o&q)^(~o&p);};var m=function(o,q,p){return(o&q)^(o&p)^(q&p);};var k=function(o){return z(o,2)^z(o,13)^z(o,22);};var i=function(o){return z(o,6)^z(o,11)^z(o,25);};var h=function(o){return z(o,7)^z(o,18)^y(o,3);};var g=function(o){return z(o,17)^z(o,19)^y(o,10);};var f=function(p,r){var q=(p&65535)+(r&65535);var o=(p>>>16)+(r>>>16)+(q>>>16);return((o&65535)<<16)|(q&65535);};var e=function(p,o,u,s){var r=(p&65535)+(o&65535)+(u&65535)+(s&65535);var q=(p>>>16)+(o>>>16)+(u>>>16)+(s>>>16)+(r>>>16);return((q&65535)<<16)|(r&65535);};var d=function(p,o,v,u,s){var r=(p&65535)+(o&65535)+(v&65535)+(u&65535)+(s&65535);var q=(p>>>16)+(o>>>16)+(v>>>16)+(u>>>16)+(s>>>16)+(r>>>16);return((q&65535)<<16)|(r&65535);};var c=function(B,A,w){var o=[];var M,L,J,I,G,F,E,D;var v,s;var q;var p=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];if(w==="SHA-224"){q=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428];}else{q=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];}B[A>>5]|=128<<(24-A%32);B[((A+1+64>>9)<<4)+15]=A;var u=B.length;for(var C=0;Cp){v[15]&=4294967040;}}for(var r=0;r<=15;r++){u[r]=v[r]^909522486;s[r]=v[r]^1549556828;}q=c(u.concat(j),512+l,B);q=c(s.concat(q),512+o,B);return(w(q));};}this.encrypt=function(e,c){var d=new b(c,"ASCII");return d.getHMAC(e,"ASCII","SHA-256","HEX");};}},jQuery.media);})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.slider.js b/js/compressed/jquery.media.slider.js deleted file mode 100644 index d5dfcdb4..00000000 --- a/js/compressed/jquery.media.slider.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.fn.mediaslider=function(b,d,c){if(this.length===0){return null;}return new (function(h,e,g,f){var i=this;this.display=h.css({cursor:"pointer"});this.dragging=false;this.value=0;this.handle=this.display.find(e);this.pagePos=g?"pageY":"pageX";this.handlePos=0;if(this.handle.length>0){this.handleSize=g?this.handle.height():this.handle.width();this.handleMid=(this.handleSize/2);}this.onResize=function(){this.setTrackSize();this.updateValue(this.value);};this.setTrackSize=function(){this.trackSize=g?this.display.height():this.display.width();this.trackSize-=this.handleSize;this.trackSize=(this.trackSize>0)?this.trackSize:1;};this.setValue=function(j){this.setPosition(j);this.display.trigger("setvalue",this.value);};this.updateValue=function(j){this.setPosition(j);this.display.trigger("updatevalue",this.value);};this.setPosition=function(j){j=(j<0)?0:j;j=(j>1)?1:j;this.value=j;this.handlePos=f?(1-this.value):this.value;this.handlePos*=this.trackSize;this.handle.css((g?"marginTop":"marginLeft"),this.handlePos);};this.display.unbind("mousedown").bind("mousedown",function(j){j.preventDefault();i.dragging=true;});this.getOffset=function(){var j=g?this.display.offset().top:this.display.offset().left;return(j+(this.handleSize/2));};this.getPosition=function(j){var k=(j-this.getOffset())/this.trackSize;k=(k<0)?0:k;k=(k>1)?1:k;k=f?(1-k):k;return k;};this.display.unbind("mousemove").bind("mousemove",function(j){j.preventDefault();if(i.dragging){i.updateValue(i.getPosition(j[i.pagePos]));}});this.display.unbind("mouseleave").bind("mouseleave",function(j){j.preventDefault();if(i.dragging){i.dragging=false;i.setValue(i.getPosition(j[i.pagePos]));}});this.display.unbind("mouseup").bind("mouseup",function(j){j.preventDefault();if(i.dragging){i.dragging=false;i.setValue(i.getPosition(j[i.pagePos]));}});this.onResize();})(this,b,d,c);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.teaser.js b/js/compressed/jquery.media.teaser.js deleted file mode 100644 index 41bd591e..00000000 --- a/js/compressed/jquery.media.teaser.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{pageLink:false});jQuery.fn.mediateaser=function(d,b,e,c){if(this.length===0){return null;}return new (function(j,g,k,f,h){h=jQuery.media.utils.getSettings(h);var l=this;this.display=f;this.display.unbind("mouseenter").bind("mouseenter",function(m){if(h.template.onTeaserOver){h.template.onTeaserOver(l);}});this.display.unbind("mouseleave").bind("mouseleave",function(m){if(h.template.onTeaserOut){h.template.onTeaserOut(l);}});this.index=k;this.node=this.display.medianode(j,h);if(this.node){this.node.loadNode(g);}if(this.node&&h.pageLink){var i=h.baseURL;i+=g.path?g.path:("node/"+g.nid);this.node.display.wrap('');}this.reset=function(){if(this.node){this.node.display.unbind();}};this.setActive=function(m){if(h.template.onTeaserActivate){h.template.onTeaserActivate(this,m);}};this.setSelected=function(m){if(h.template.onTeaserSelect){h.template.onTeaserSelect(this,m);}};if(h.template.onTeaserLoad){h.template.onTeaserLoad(this);}})(d,b,e,this,c);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.titlebar.js b/js/compressed/jquery.media.titlebar.js deleted file mode 100644 index 1880d30c..00000000 --- a/js/compressed/jquery.media.titlebar.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media.ids=jQuery.extend(jQuery.media.ids,{titleLinks:"#mediatitlelinks"});jQuery.fn.mediatitlebar=function(b){if(this.length===0){return null;}return new (function(c,d){var e=this;this.display=c;this.titleLinks=this.display.find(d.ids.titleLinks);this.display.find("a").each(function(){var f=a(this).attr("href");a(this).medialink(d,function(g){g.preventDefault();e.display.trigger(g.data.id);},{id:f.substr(1),obj:a(this)});});})(this,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.utils.js b/js/compressed/jquery.media.utils.js deleted file mode 100644 index 4ffa65ad..00000000 --- a/js/compressed/jquery.media.utils.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.extend({},{utils:{getBaseURL:function(){var b=new RegExp(/^(http[s]?\:[\\\/][\\\/])([^\\\/\?]+)/);var c=b.exec(location.href);return c?c[0]:"";},timer:{},stopElementHide:{},showThenHide:function(b,f,c,d,e){if(b){b.show(c);if(jQuery.media.utils.timer.hasOwnProperty(f)){clearTimeout(jQuery.media.utils.timer[f]);}jQuery.media.utils.timer[f]=setTimeout(function(){if(!jQuery.media.utils.stopElementHide[f]){b.hide(d,function(){if(jQuery.media.utils.stopElementHide[f]){b.show();}if(e){e();}});}},5000);}},stopHide:function(b,c){jQuery.media.utils.stopElementHide[c]=true;clearTimeout(jQuery.media.utils.timer[c]);},stopHideOnOver:function(b,c){if(b){jQuery.media.utils.stopElementHide[c]=false;b.unbind("mouseover").bind("mouseover",{id:c},function(d){jQuery.media.utils.stopElementHide[d.data.id]=true;}).unbind("mouseout").bind("mouseout",{id:c},function(d){jQuery.media.utils.stopElementHide[d.data.id]=false;});}},getSettings:function(b){if(!b){b={};}if(!b.initialized){b=jQuery.extend({},jQuery.media.defaults,b);b.ids=jQuery.extend({},jQuery.media.ids,b.ids);b.baseURL=b.baseURL?b.baseURL:jQuery.media.utils.getBaseURL();b.baseURL+=b.baseURL?"/":"";b.initialized=true;}return b;},getId:function(b){return b.attr("id")?b.attr("id"):b.attr("class")?b.attr("class"):"mediaplayer";},getScaledRect:function(b,e){var d={};d.x=e.x?e.x:0;d.y=e.y?e.y:0;d.width=e.width?e.width:0;d.height=e.height?e.height:0;if(b){var c=(e.width/e.height);d.height=(c>b)?e.height:Math.floor(e.width/b);d.width=(c>b)?Math.floor(e.height*b):e.width;d.x=Math.floor((e.width-d.width)/2);d.y=Math.floor((e.height-d.height)/2);}return d;},checkVisibility:function(d,c){var b=true;d.parents().each(function(){var e=jQuery(this);if(!e.is(":visible")){b=false;var f=e.attr("class");c.push({obj:e,attr:f});e.removeClass(f);}});},resetVisibility:function(b){var c=b.length;while(c){c--;b[c].obj.addClass(b[c].attr);}},getFlash:function(h,b,c,i,e,d){var j=window.location.protocol;if(j.charAt(j.length-1)==":"){j=j.substring(0,j.length-1);}var g=jQuery.param(e);var f=' ';f+='';f+='';f+='';f+='';f+='';f+='';f+='';f+="";return f;},removeFlash:function(c,d){if(typeof(swfobject)!="undefined"){swfobject.removeSWF(d);}else{var b=c.find("object").eq(0)[0];if(b){b.parentNode.removeChild(b);}}},insertFlash:function(h,k,c,d,l,f,e,j){jQuery.media.utils.removeFlash(h,c);h.children().remove();h.append('

Get Adobe Flash player

');if(typeof(swfobject)!="undefined"){var g={allowScriptAccess:"always",allowfullscreen:"true",wmode:e,quality:"high"};swfobject.embedSWF(k,c,d,l,"9.0.0","expressInstall.swf",f,g,{},function(m){j(m.ref);});}else{var i=jQuery.media.utils.getFlash(k,c,d,l,f,e);var b=h.find("#"+c).eq(0);if(jQuery.browser.msie){b[0].outerHTML=i;j(h.find("object").eq(0)[0]);}else{b.replaceWith(i);j(h.find("embed").eq(0)[0]);}}},cloneFix:function(e,d){var b=e.map(function(){var g=this.outerHTML;if(!g){var h=this.ownerDocument.createElement("div");h.appendChild(this.cloneNode(true));g=h.innerHTML;}return jQuery.clean([g.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0];});if(d===true){var f=e.find("*").andSelf(),c=0;b.find("*").andSelf().each(function(){if(this.nodeName!==f[c].nodeName){return;}var g=jQuery.data(f[c],"events");for(var i in g){if(g.hasOwnProperty(i)){for(var h in g[i]){if(g[i].hasOwnProperty(h)){jQuery.event.add(this,i,g[i][h],g[i][h].data);}}}}c++;});}return b;}}},jQuery.media);})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.vimeo.js b/js/compressed/jquery.media.vimeo.js deleted file mode 100644 index f0819ccc..00000000 --- a/js/compressed/jquery.media.vimeo.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};window.onVimeoReady=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onReady();};window.onVimeoFinish=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onFinished();};window.onVimeoLoading=function(c,b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onLoading(c);};window.onVimeoPlay=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onPlaying();};window.onVimeoPause=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onPaused();};window.onVimeoProgress=function(c,b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onProgress(c);};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{vimeo:function(b){return(b.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i)===0);}});jQuery.fn.mediavimeo=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.videoFile=null;this.ready=false;this.bytesLoaded=0;this.bytesTotal=0;this.currentVolume=1;this.createMedia=function(j,l){this.videoFile=j;this.ready=false;var i=(e.id+"_media");var h={clip_id:this.getId(j.path),width:"100%",height:"100%",js_api:"1",js_onLoad:"onVimeoReady",js_swf_id:i};var k=Math.floor(Math.random()*1000000);var m="http://vimeo.com/moogaloop.swf?rand="+k;jQuery.media.utils.insertFlash(this.display,m,i,"100%","100%",h,e.wmode,function(n){g.player=n;g.loadPlayer();});};this.getId=function(i){var h=/^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i;return(i.search(h)===0)?i.replace(h,"$3"):i;};this.loadMedia=function(h){this.bytesLoaded=0;this.bytesTotal=0;this.createMedia(h);};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player&&this.player.api_addEventListener){this.player.api_addEventListener("onProgress","onVimeoProgress");this.player.api_addEventListener("onFinish","onVimeoFinish");this.player.api_addEventListener("onLoading","onVimeoLoading");this.player.api_addEventListener("onPlay","onVimeoPlay");this.player.api_addEventListener("onPause","onVimeoPause");d({type:"playerready"});this.playMedia();}};this.onFinished=function(){d({type:"complete"});};this.onLoading=function(h){this.bytesLoaded=h.bytesLoaded;this.bytesTotal=h.bytesTotal;};this.onPlaying=function(){d({type:"playing",busy:"hide"});};this.onPaused=function(){d({type:"paused",busy:"hide"});};this.playMedia=function(){d({type:"playing",busy:"hide"});if(this.player.api_play){this.player.api_play();}};this.onProgress=function(h){d({type:"progress"});};this.pauseMedia=function(){d({type:"paused",busy:"hide"});if(this.player.api_pause){this.player.api_pause();}};this.stopMedia=function(){this.pauseMedia();if(this.player.api_unload){this.player.api_unload();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){if(this.player.api_seekTo){this.player.api_seekTo(h);}};this.setVolume=function(h){this.currentVolume=h;if(this.player.api_setVolume){this.player.api_setVolume((h*100));}};this.getVolume=function(){return this.currentVolume;};this.getDuration=function(){return this.player.api_getDuration?this.player.api_getDuration():0;};this.getCurrentTime=function(){return this.player.api_getCurrentTime?this.player.api_getCurrentTime():0;};this.getBytesLoaded=function(){return this.bytesLoaded;};this.getBytesTotal=function(){return this.bytesTotal;};this.setQuality=function(h){};this.getQuality=function(){return"";};this.hasControls=function(){return true;};this.showControls=function(h){};this.getEmbedCode=function(){return"This video cannot be embedded.";};this.getMediaLink=function(){return"This video currently does not have a link.";};})(this,c,b);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.voter.js b/js/compressed/jquery.media.voter.js deleted file mode 100644 index 0d57cd41..00000000 --- a/js/compressed/jquery.media.voter.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.fn.mediavoter=function(b,d,c){if(this.length===0){return null;}return new (function(f,e,h,g){this.display=f;var i=this;this.nodeId=0;this.votes=[];this.tag=this.display.attr("tag");this.display.find("div").each(function(){if(g){a(this).css("cursor","pointer");a(this).unbind("click").bind("click",function(j){i.setVote(parseInt(a(this).attr("vote"),10));});a(this).unbind("mouseenter").bind("mouseenter",function(j){i.updateVote({value:parseInt(a(this).attr("vote"),10)},true);});}i.votes.push({vote:parseInt(a(this).attr("vote"),10),display:a(this)});});this.votes.sort(function(k,j){return(k.vote-j.vote);});if(g){this.display.unbind("mouseleave").bind("mouseleave",function(j){i.updateVote({value:0},true);});}this.updateVote=function(j,k){if(j&&e.template.updateVote){e.template.updateVote(this,j.value,k);}};this.getVote=function(k){if(k&&k.nid){this.nodeId=parseInt(k.nid,10);if(k.vote){var j=g?k.vote.uservote:k.vote.vote;this.updateVote(k.vote.vote,false);this.display.trigger("voteGet",j);}else{if(h&&k.nid&&(this.display.length>0)){this.display.trigger("processing");var l=g?jQuery.media.commands.getUserVote:jQuery.media.commands.getVote;h.call(l,function(m){i.updateVote(m,false);i.display.trigger("voteGet",m);},null,"node",this.nodeId,this.tag);}}}};this.setVote=function(j){if(h&&this.nodeId){this.display.trigger("processing");this.updateVote({value:j},false);h.call(jQuery.media.commands.setVote,function(k){i.display.trigger("voteSet",k);},null,"node",this.nodeId,j,this.tag);}};this.deleteVote=function(){if(h&&this.nodeId){this.display.trigger("processing");h.call(jQuery.media.commands.deleteVote,function(j){i.updateVote(j,false);i.display.trigger("voteDelete",j);},null,"node",this.nodeId,this.tag);}};})(this,b,d,c);};})(jQuery); \ No newline at end of file diff --git a/js/compressed/jquery.media.youtube.js b/js/compressed/jquery.media.youtube.js deleted file mode 100644 index b7e2fe08..00000000 --- a/js/compressed/jquery.media.youtube.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};window.onYouTubePlayerReady=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onReady();};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{youtube:function(b){return(b.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i)===0);}});jQuery.fn.mediayoutube=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.videoFile=null;this.loaded=false;this.ready=false;this.qualities=[];this.createMedia=function(i,k){this.videoFile=i;this.ready=false;var h=(e.id+"_media");var j=Math.floor(Math.random()*1000000);var l="http://www.youtube.com/apiplayer?rand="+j+"&version=3&enablejsapi=1&playerapiid="+h;jQuery.media.utils.insertFlash(this.display,l,h,"100%","100%",{},e.wmode,function(m){g.player=m;g.loadPlayer();});};this.getId=function(i){var h=/^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i;return(i.search(h)===0)?i.replace(h,"$2"):i;};this.loadMedia=function(h){if(this.player){this.loaded=false;this.videoFile=h;d({type:"playerready"});if(this.player.loadVideoById){this.player.loadVideoById(this.getId(this.videoFile.path),0,e.quality);}}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){window[e.id+"StateChange"]=function(h){g.onStateChange(h);};window[e.id+"PlayerError"]=function(h){g.onError(h);};window[e.id+"QualityChange"]=function(h){g.quality=h;};if(this.player.addEventListener){this.player.addEventListener("onStateChange",e.id+"StateChange");this.player.addEventListener("onError",e.id+"PlayerError");this.player.addEventListener("onPlaybackQualityChange",e.id+"QualityChange");}if(this.player.getAvailableQualityLevels){this.qualities=this.player.getAvailableQualityLevels();}d({type:"playerready"});if(this.player.loadVideoById){this.player.loadVideoById(this.getId(this.videoFile.path),0);}}};this.onStateChange=function(i){var h=this.getPlayerState(i);d({type:h.state,busy:h.busy});if(!this.loaded&&h=="playing"){this.loaded=true;d({type:"meta"});}};this.onError=function(i){var h="An unknown error has occured: "+i;if(i==100){h="The requested video was not found. ";h+="This occurs when a video has been removed (for any reason), ";h+="or it has been marked as private.";}else{if((i==101)||(i==150)){h="The video requested does not allow playback in an embedded player.";}}if(window.console&&console.log){console.log(h);}d({type:"error",data:h});};this.getPlayerState=function(h){switch(h){case 5:return{state:"ready",busy:false};case 3:return{state:"buffering",busy:"show"};case 2:return{state:"paused",busy:"hide"};case 1:return{state:"playing",busy:"hide"};case 0:return{state:"complete",busy:false};case -1:return{state:"stopped",busy:false};default:return{state:"unknown",busy:false};}return"unknown";};this.playMedia=function(){d({type:"buffering",busy:"show"});if(this.player.playVideo){this.player.playVideo();}};this.pauseMedia=function(){if(this.player.pauseVideo){this.player.pauseVideo();}};this.stopMedia=function(){if(this.player.stopVideo){this.player.stopVideo();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){d({type:"buffering",busy:"show"});if(this.player.seekTo){this.player.seekTo(h,true);}};this.setVolume=function(h){if(this.player.setVolume){this.player.setVolume(h*100);}};this.setQuality=function(h){if(this.player.setPlaybackQuality){this.player.setPlaybackQuality(h);}};this.getVolume=function(){return this.player.getVolume?(this.player.getVolume()/100):0;};this.getDuration=function(){return this.player.getDuration?this.player.getDuration():0;};this.getCurrentTime=function(){return this.player.getCurrentTime?this.player.getCurrentTime():0;};this.getQuality=function(){return this.player.getPlaybackQuality?this.player.getPlaybackQuality():0;};this.getEmbedCode=function(){return this.player.getVideoEmbedCode?this.player.getVideoEmbedCode():0;};this.getMediaLink=function(){return this.player.getVideoUrl?this.player.getVideoUrl():0;};this.getBytesLoaded=function(){return this.player.getVideoBytesLoaded?this.player.getVideoBytesLoaded():0;};this.getBytesTotal=function(){return this.player.getVideoBytesTotal?this.player.getVideoBytesTotal():0;};this.hasControls=function(){return false;};this.showControls=function(h){};})(this,c,b);};})(jQuery); \ No newline at end of file diff --git a/js/createJS.inc b/js/createJS.inc deleted file mode 100755 index e1c37f50..00000000 --- a/js/createJS.inc +++ /dev/null @@ -1,114 +0,0 @@ - 1 ) { - if( file_exists( $uncompressed ) ) { - unlink( $uncompressed ); - } - - $handle = smart_fopen( $uncompressed, 'a+' ); - if( $handle ) { - $index = 0; - foreach( $files as $file ) { - if( !$filter || in_array( basename($file), $filter ) ) { - $contents = file_get_contents($file); - if( $index != 0 ) { - $contents = str_replace('(function($) {', '', $contents); - $contents = str_replace('jQuery.media = jQuery.media ? jQuery.media : {};', '', $contents); - } - if( ++$index < $num_files ) { - $contents = str_replace('})(jQuery);', '', $contents); - } - fwrite( $handle, $contents ); - - if( $source_dir ) { - create_compressed_file( $output_dir, $file, $source_dir . '/' . basename($file) ); - } - } - } - fclose( $handle ); - } - } - - create_compressed_file( $output_dir, $uncompressed, $compressed ); -} - -function addCopyRight( $output_dir, $file ) { - static $copyright; - if( !$copyright ) { - $copyright = file_get_contents($output_dir . 'LICENSE.TXT'); - } - $code = file_get_contents($file); - unlink( $file ); - $handle = fopen( $file, 'a+' ); - if( $handle ) { - fwrite( $handle, $copyright ); - fwrite( $handle, "\n" ); - fwrite( $handle, $code ); - fclose( $handle ); - } -} - -function create_javascript_release( $output_dir = '' ) { - define( "RELEASE_DIR", $output_dir . "js/source" ); - - // Bad things will happen if the release directory is the same as the output. - if( $output_dir != RELEASE_DIR ) { - define( "RELEASE_SOURCE_DIR", $output_dir . "js/compressed"); - define( "MAX_RELEASE_FILE", $output_dir . "js/jquery.osmplayer.js"); - define( "MAX_RELEASE_FILE_COMPRESSED", $output_dir . "js/jquery.osmplayer.compressed.js" ); - define( "MIN_RELEASE_FILE", $output_dir . "js/jquery.minplayer.js" ); - define( "MIN_RELEASE_FILE_COMPRESSED", $output_dir . "js/jquery.minplayer.compressed.js" ); - define( "TEMPLATE_FILE", $output_dir . "templates/default/jquery.media.template.default.js" ); - define( "TEMPLATE_RELEASE_FILE", $output_dir . "templates/default/jquery.media.template.default.compressed.js" ); - - $min_files = array( - "jquery.media.minplayer.js", - "jquery.media.control.js", - "jquery.media.dailymotion.js", - "jquery.media.display.js", - "jquery.media.flash.js", - "jquery.media.html5.js", - "jquery.media.vimeo.js", - "jquery.media.youtube.js" - ); - - // Make sure the src and template directory is created. - if( !is_dir(RELEASE_SOURCE_DIR) ) { - mkdir(RELEASE_SOURCE_DIR, 0755, true); - } - - // Now create the compressed javascript files... - $files = get_files(RELEASE_DIR, array("js"), false); - $num_files = count($files); - if( $num_files > 0 ) { - create_js_files( $output_dir, $files, array(), MAX_RELEASE_FILE, MAX_RELEASE_FILE_COMPRESSED, $num_files, RELEASE_SOURCE_DIR ); - create_js_files( $output_dir, $files, $min_files, MIN_RELEASE_FILE, MIN_RELEASE_FILE_COMPRESSED, count($min_files) ); - } - - // Now create the template javascript file... - create_compressed_file( $output_dir, TEMPLATE_FILE, TEMPLATE_RELEASE_FILE ); - } -} -?> \ No newline at end of file diff --git a/js/createJS.php b/js/createJS.php deleted file mode 100755 index 015f9fdc..00000000 --- a/js/createJS.php +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/js/createJS.sh b/js/createJS.sh deleted file mode 100755 index 000f06be..00000000 --- a/js/createJS.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -DIR="$( cd "$( dirname "$0" )" && pwd )" -php $DIR/createJS.php "$DIR/../" \ No newline at end of file diff --git a/js/jquery.minplayer.compressed.js b/js/jquery.minplayer.compressed.js deleted file mode 100644 index 1f289452..00000000 --- a/js/jquery.minplayer.compressed.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{volumeVertical:false});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{currentTime:"#mediacurrenttime",totalTime:"#mediatotaltime",playPause:"#mediaplaypause",seekUpdate:"#mediaseekupdate",seekProgress:"#mediaseekprogress",seekBar:"#mediaseekbar",seekHandle:"#mediaseekhandle",volumeUpdate:"#mediavolumeupdate",volumeBar:"#mediavolumebar",volumeHandle:"#mediavolumehandle",mute:"#mediamute"});jQuery.fn.mediacontrol=function(b){if(this.length===0){return null;}return new (function(e,c){c=jQuery.media.utils.getSettings(c);this.display=e;var f=this;this.formatTime=(c.template&&c.template.formatTime)?c.template.formatTime:function(j){j=j?j:0;var k=0;var h=0;var g=0;g=Math.floor(j/3600);j-=(g*3600);h=Math.floor(j/60);j-=(h*60);k=Math.floor(j%60);var i="";if(g){i+=String(g);i+=":";}i+=(h>=10)?String(h):("0"+String(h));i+=":";i+=(k>=10)?String(k):("0"+String(k));return{time:i,units:""};};this.setToggle=function(h,i){var g=i?".on":".off";var j=i?".off":".on";if(h){h.find(g).show();h.find(j).hide();}};var d=this.formatTime(0);this.duration=0;this.volume=-1;this.prevVolume=0;this.percentLoaded=0;this.playState=false;this.muteState=false;this.currentTime=e.find(c.ids.currentTime).text(d.time);this.totalTime=e.find(c.ids.totalTime).text(d.time);this.display.find("a.mediaplayerlink").each(function(){var g=a(this).attr("href");a(this).medialink(c,function(h){h.preventDefault();f.display.trigger(h.data.id);},{id:g.substr(1),obj:a(this)});});this.playPauseButton=e.find(c.ids.playPause).medialink(c,function(g,h){f.playState=!f.playState;f.setToggle(h,f.playState);f.display.trigger("controlupdate",{type:(f.playState?"pause":"play")});});this.seekUpdate=e.find(c.ids.seekUpdate).css("width",0);this.seekProgress=e.find(c.ids.seekProgress).css("width",0);this.seekBar=e.find(c.ids.seekBar).mediaslider(c.ids.seekHandle,false);if(this.seekBar){this.seekBar.display.unbind("setvalue").bind("setvalue",function(g,h){f.seekUpdate.css("width",(h*f.seekBar.trackSize)+"px");f.display.trigger("controlupdate",{type:"seek",value:(h*f.duration)});});this.seekBar.display.unbind("updatevalue").bind("updatevalue",function(g,h){f.seekUpdate.css("width",(h*f.seekBar.trackSize)+"px");});}this.setVolume=function(g){if(this.volumeBar){if(c.volumeVertical){this.volumeUpdate.css({marginTop:(this.volumeBar.handlePos+this.volumeBar.handleMid),height:(this.volumeBar.trackSize-this.volumeBar.handlePos)});}else{this.volumeUpdate.css("width",(g*this.volumeBar.trackSize));}}};this.volumeUpdate=e.find(c.ids.volumeUpdate);this.volumeBar=e.find(c.ids.volumeBar).mediaslider(c.ids.volumeHandle,c.volumeVertical,c.volumeVertical);if(this.volumeBar){this.volumeBar.display.unbind("setvalue").bind("setvalue",function(g,h){f.setVolume(h);f.display.trigger("controlupdate",{type:"volume",value:h});});this.volumeBar.display.unbind("updatevalue").bind("updatevalue",function(g,h){f.setVolume(h);f.volume=h;});}this.mute=e.find(c.ids.mute).medialink(c,function(g,h){f.muteState=!f.muteState;f.setToggle(h,f.muteState);f.setMute(f.muteState);});this.setMute=function(g){this.prevVolume=(this.volumeBar.value>0)?this.volumeBar.value:this.prevVolume;this.volumeBar.updateValue(g?0:this.prevVolume);this.display.trigger("controlupdate",{type:"mute",value:g});};this.setProgress=function(g){if(this.seekProgress&&this.seekBar){this.seekProgress.css("width",(g*(this.seekBar.trackSize+this.seekBar.handleSize)));}};this.onResize=function(){if(this.seekBar){this.seekBar.onResize();}this.setProgress(this.percentLoaded);};this.onMediaUpdate=function(g){switch(g.type){case"reset":this.reset();break;case"paused":this.playState=true;this.setToggle(this.playPauseButton.display,this.playState);break;case"playing":this.playState=false;this.setToggle(this.playPauseButton.display,this.playState);break;case"stopped":this.playState=true;this.setToggle(this.playPauseButton.display,this.playState);break;case"progress":this.percentLoaded=g.percentLoaded;this.setProgress(this.percentLoaded);break;case"meta":case"update":this.timeUpdate(g.currentTime,g.totalTime);if(this.volumeBar){this.volumeBar.updateValue(g.volume);}break;default:break;}};this.reset=function(){this.totalTime.text(this.formatTime(0).time);this.currentTime.text(this.formatTime(0).time);if(this.seekBar){this.seekBar.updateValue(0);}this.seekUpdate.css("width","0px");this.seekProgress.css("width","0px");};this.timeUpdate=function(g,h){this.duration=h;this.totalTime.text(this.formatTime(h).time);this.currentTime.text(this.formatTime(g).time);if(h&&this.seekBar&&!this.seekBar.dragging){this.seekBar.updateValue(g/h);}};this.timeUpdate(0,0);})(this,b);};window.onDailymotionPlayerReady=function(b){b=b.replace("_media","");jQuery.media.players[b].node.player.media.player.onReady();};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{dailymotion:function(b){return(b.search(/^http(s)?\:\/\/(www\.)?dailymotion\.com/i)===0);}});jQuery.fn.mediadailymotion=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.videoFile=null;this.meta=false;this.loaded=false;this.ready=false;this.createMedia=function(i,k){this.videoFile=i;this.ready=false;var h=(e.id+"_media");var j=Math.floor(Math.random()*1000000);var l="http://www.dailymotion.com/swf/"+i.path+"?rand="+j+"&enablejsapi=1&playerapiid="+h;jQuery.media.utils.insertFlash(this.display,l,h,"100%","100%",{},e.wmode,function(m){g.player=m;g.loadPlayer();});};this.loadMedia=function(h){if(this.player){this.loaded=false;this.meta=false;this.videoFile=h;d({type:"playerready"});this.player.loadVideoById(this.videoFile.path,0);}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){window[e.id+"StateChange"]=function(h){g.onStateChange(h);};window[e.id+"PlayerError"]=function(h){g.onError(h);};this.player.addEventListener("onStateChange",e.id+"StateChange");this.player.addEventListener("onError",e.id+"PlayerError");d({type:"playerready"});this.player.loadVideoById(this.videoFile.path,0);}};this.onStateChange=function(i){var h=this.getPlayerState(i);if(!(!this.meta&&h.state=="stopped")){d({type:h.state,busy:h.busy});}if(!this.loaded&&h.state=="buffering"){this.loaded=true;d({type:"paused",busy:"hide"});if(e.autostart){this.playMedia();}}if(!this.meta&&h.state=="playing"){this.meta=true;d({type:"meta"});}};this.onError=function(i){var h="An unknown error has occured: "+i;if(i==100){h="The requested video was not found. ";h+="This occurs when a video has been removed (for any reason), ";h+="or it has been marked as private.";}else{if((i==101)||(i==150)){h="The video requested does not allow playback in an embedded player.";}}d({type:"error",data:h});};this.getPlayerState=function(h){switch(h){case 5:return{state:"ready",busy:false};case 3:return{state:"buffering",busy:"show"};case 2:return{state:"paused",busy:"hide"};case 1:return{state:"playing",busy:"hide"};case 0:return{state:"complete",busy:false};case -1:return{state:"stopped",busy:false};default:return{state:"unknown",busy:false};}return"unknown";};this.playMedia=function(){d({type:"buffering",busy:"show"});this.player.playVideo();};this.pauseMedia=function(){this.player.pauseVideo();};this.stopMedia=function(){this.player.stopVideo();};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){d({type:"buffering",busy:"show"});this.player.seekTo(h,true);};this.setVolume=function(h){this.player.setVolume(h*100);};this.getVolume=function(){return(this.player.getVolume()/100);};this.getDuration=function(){return this.player.getDuration();};this.getCurrentTime=function(){return this.player.getCurrentTime();};this.getBytesLoaded=function(){return this.player.getVideoBytesLoaded();};this.getBytesTotal=function(){return this.player.getVideoBytesTotal();};this.getEmbedCode=function(){return this.player.getVideoEmbedCode();};this.getMediaLink=function(){return this.player.getVideoUrl();};this.hasControls=function(){return true;};this.showControls=function(h){};this.setQuality=function(h){};this.getQuality=function(){return"";};})(this,c,b);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{volume:80,autostart:false,streamer:"",embedWidth:450,embedHeight:337,wmode:"transparent",forceOverflow:false,quality:"default",repeat:false});jQuery.fn.mediadisplay=function(b){if(this.length===0){return null;}return new (function(d,c){this.settings=jQuery.media.utils.getSettings(c);this.display=d;var e=this;this.volume=-1;this.player=null;this.preview="";this.updateInterval=null;this.progressInterval=null;this.playQueue=[];this.playIndex=0;this.playerReady=false;this.loaded=false;this.mediaFile=null;this.hasPlaylist=false;if(this.settings.forceOverflow){this.display.parents().css("overflow","visible");}this.reset=function(){this.loaded=false;this.stopMedia();clearInterval(this.progressInterval);clearInterval(this.updateInterval);this.playQueue.length=0;this.playQueue=[];this.playIndex=0;this.playerReady=false;this.mediaFile=null;this.display.empty().trigger("mediaupdate",{type:"reset"});};this.getPlayableMedia=function(j){var h=null;var f=j.length;while(f--){var g=new jQuery.media.file(j[f],this.settings);if(!h||(g.weight0);if(!f){if(this.player){this.player.destroy();this.player=null;}this.display.trigger("mediaupdate",{type:"nomedia"});}return f;};this.playNext=function(){if(this.playQueue.length>this.playIndex){this.loadMedia(this.playQueue[this.playIndex]);this.playIndex++;}else{if(this.settings.repeat){this.playIndex=0;this.playNext();}else{if(this.hasPlaylist){this.reset();}else{this.loaded=false;this.settings.autostart=false;this.playIndex=0;this.playNext();}}}};this.loadMedia=function(g,f){if(g){g=new jQuery.media.file(this.getMediaFile(g),this.settings);g.player=f?f:g.player;this.stopMedia();if(!this.mediaFile||(this.mediaFile.player!=g.player)){this.player=null;this.playerReady=false;if(g.player){this.player=this.display["media"+g.player](this.settings,function(h){e.onMediaUpdate(h);});}if(this.player){this.player.createMedia(g,this.preview);}}else{if(this.player){this.player.loadMedia(g);}}this.mediaFile=g;this.onMediaUpdate({type:"initialize"});}};this.onMediaUpdate=function(g){switch(g.type){case"playerready":this.playerReady=true;this.player.setVolume(0);this.player.setQuality(this.settings.quality);this.startProgress();break;case"buffering":this.startProgress();break;case"stopped":clearInterval(this.progressInterval);clearInterval(this.updateInterval);break;case"error":if(g.code==4){this.loadMedia(this.mediaFile,"flash");}else{clearInterval(this.progressInterval);clearInterval(this.updateInterval);}break;case"paused":clearInterval(this.updateInterval);break;case"playing":this.startUpdate();break;case"progress":var f=this.getPercentLoaded();jQuery.extend(g,{percentLoaded:f});if(f>=1){clearInterval(this.progressInterval);}break;case"meta":jQuery.extend(g,{currentTime:this.player.getCurrentTime(),totalTime:this.getDuration(),volume:this.player.getVolume(),quality:this.getQuality()});break;case"durationupdate":this.mediaFile.duration=g.duration;break;case"complete":this.playNext();break;default:break;}if(g.type=="playing"&&!this.loaded){if(this.settings.autoLoad&&!this.settings.autostart){setTimeout(function(){e.setVolume();e.player.pauseMedia();e.settings.autostart=true;e.loaded=true;},100);}else{this.loaded=true;this.setVolume();this.display.trigger("mediaupdate",g);}}else{this.display.trigger("mediaupdate",g);}};this.startProgress=function(){if(this.playerReady){clearInterval(this.progressInterval);this.progressInterval=setInterval(function(){e.onMediaUpdate({type:"progress"});},500);}};this.startUpdate=function(){if(this.playerReady){clearInterval(this.updateInterval);this.updateInterval=setInterval(function(){if(e.playerReady){e.onMediaUpdate({type:"update",currentTime:e.player.getCurrentTime(),totalTime:e.getDuration(),volume:e.player.getVolume(),quality:e.getQuality()});}},1000);}};this.stopMedia=function(){this.loaded=false;clearInterval(this.progressInterval);clearInterval(this.updateInterval);if(this.playerReady){this.player.stopMedia();}};this.mute=function(f){this.player.setVolume(f?0:this.volume);};this.onResize=function(){if(this.player&&this.player.onResize){this.player.onResize();}};this.getPercentLoaded=function(){if(this.player.getPercentLoaded){return this.player.getPercentLoaded();}else{var g=this.player.getBytesLoaded();var f=this.mediaFile.bytesTotal?this.mediaFile.bytesTotal:this.player.getBytesTotal();return f?(g/f):0;}};this.showControls=function(f){if(this.playerReady){this.player.showControls(f);}};this.hasControls=function(){if(this.player){return this.player.hasControls();}return false;};this.getDuration=function(){if(this.mediaFile){if(!this.mediaFile.duration){this.mediaFile.duration=this.player.getDuration();}return this.mediaFile.duration;}else{return 0;}};this.setVolume=function(f){this.volume=f?f:((this.volume==-1)?(this.settings.volume/100):this.volume);if(this.player){this.player.setVolume(this.volume);}};this.getVolume=function(){if(!this.volume){this.volume=this.player.getVolume();}return this.volume;};this.getQuality=function(){if(!this.mediaFile.quality){this.mediaFile.quality=this.player.getQuality();}return this.mediaFile.quality;};})(this,b);};window.onFlashPlayerReady=function(b){jQuery.media.players[b].node.player.media.player.onReady();};window.onFlashPlayerUpdate=function(c,b){jQuery.media.players[c].node.player.media.player.onMediaUpdate(b);};window.onFlashPlayerDebug=function(b){if(window.console&&console.log){console.log(b);}};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{flashPlayer:"./flash/mediafront.swf",skin:"default",config:"nocontrols"});jQuery.fn.mediaflash=function(c,b){return new (function(f,e,d){e=jQuery.media.utils.getSettings(e);this.display=f;var g=this;this.player=null;this.mediaFile=null;this.preview="";this.ready=false;this.translate={mediaConnected:"connected",mediaBuffering:"buffering",mediaPaused:"paused",mediaPlaying:"playing",mediaStopped:"stopped",mediaComplete:"complete",mediaMeta:"meta"};this.busy={mediaConnected:false,mediaBuffering:"show",mediaPaused:"hide",mediaPlaying:"hide",mediaStopped:false,mediaComplete:false,mediaMeta:false};this.createMedia=function(h,l){this.mediaFile=h;this.preview=l;this.ready=false;var j=(e.id+"_media");var k=Math.floor(Math.random()*1000000);var m=e.flashPlayer+"?rand="+k;var i={config:e.config,id:e.id,file:h.path,image:this.preview,skin:e.skin,autostart:(e.autostart||!e.autoLoad)};if(h.stream){i.stream=h.stream;}if(e.debug){i.debug="1";}jQuery.media.utils.insertFlash(this.display,m,j,"100%","100%",i,e.wmode,function(n){g.player=n;g.loadPlayer();});};this.loadMedia=function(h){if(this.player&&this.ready){this.mediaFile=h;this.player.loadMedia(h.path,h.stream);d({type:"playerready"});}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){d({type:"playerready"});}};this.onMediaUpdate=function(h){d({type:this.translate[h],busy:this.busy[h]});};this.playMedia=function(){if(this.player&&this.ready){this.player.playMedia();}};this.pauseMedia=function(){if(this.player&&this.ready){this.player.pauseMedia();}};this.stopMedia=function(){if(this.player&&this.ready){this.player.stopMedia();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){if(this.player&&this.ready){this.player.seekMedia(h);}};this.setVolume=function(h){if(this.player&&this.ready){this.player.setVolume(h);}};this.getVolume=function(){return(this.player&&this.ready)?this.player.getVolume():0;};this.getDuration=function(){return(this.player&&this.ready)?this.player.getDuration():0;};this.getCurrentTime=function(){return(this.player&&this.ready)?this.player.getCurrentTime():0;};this.getBytesLoaded=function(){return(this.player&&this.ready)?this.player.getMediaBytesLoaded():0;};this.getBytesTotal=function(){return(this.player&&this.ready)?this.player.getMediaBytesTotal():0;};this.hasControls=function(){return true;};this.showControls=function(h){if(this.player&&this.ready){this.player.showPlugin("controlBar",h);this.player.showPlugin("playLoader",h);}};this.getEmbedCode=function(){var h={config:"config",id:"mediafront_player",file:this.mediaFile.path,image:this.preview,skin:e.skin};if(this.mediaFile.stream){h.stream=this.mediaFile.stream;}return jQuery.media.utils.getFlash(e.flashPlayer,"mediafront_player",e.embedWidth,e.embedHeight,h,e.wmode);};this.setQuality=function(h){};this.getQuality=function(){return"";};this.getMediaLink=function(){return"This video currently does not have a link.";};})(this,c,b);};jQuery.fn.mediahtml5=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.bytesLoaded=0;this.bytesTotal=0;this.mediaType="";this.loaded=false;this.mediaFile=null;this.playerElement=null;this.getPlayer=function(h,m){this.mediaFile=h;var j=e.id+"_"+this.mediaType;var l="<"+this.mediaType+' style="position:absolute" id="'+j+'"';l+=m?' poster="'+m+'"':"";if(typeof h==="array"){l+=">";var k=h.length;while(k){k--;l+='';}}else{l+=' src="'+h.path+'">Unable to display media.';}l+="";this.display.append(l);this.bytesTotal=h.bytesTotal;this.playerElement=this.display.find("#"+j);this.onResize();return this.playerElement.eq(0)[0];};this.createMedia=function(h,i){jQuery.media.utils.removeFlash(this.display,e.id+"_media");this.display.children().remove();this.mediaType=this.getMediaType(h);this.player=this.getPlayer(h,i);this.loaded=false;var j=false;if(this.player){this.player.addEventListener("abort",function(){d({type:"stopped"});},true);this.player.addEventListener("loadstart",function(){d({type:"ready",busy:"show"});g.onReady();},true);this.player.addEventListener("loadeddata",function(){d({type:"loaded",busy:"hide"});},true);this.player.addEventListener("loadedmetadata",function(){d({type:"meta"});},true);this.player.addEventListener("canplaythrough",function(){d({type:"canplay",busy:"hide"});},true);this.player.addEventListener("ended",function(){d({type:"complete"});},true);this.player.addEventListener("pause",function(){d({type:"paused"});},true);this.player.addEventListener("play",function(){d({type:"playing"});},true);this.player.addEventListener("playing",function(){d({type:"playing",busy:"hide"});},true);this.player.addEventListener("error",function(k){g.onError(k.target.error);d({type:"error",code:k.target.error.code});},true);this.player.addEventListener("waiting",function(){d({type:"waiting",busy:"show"});},true);this.player.addEventListener("timeupdate",function(){if(j){d({type:"timeupdate",busy:"hide"});}else{j=true;}},true);this.player.addEventListener("durationchange",function(){if(this.duration&&(this.duration!==Infinity)){d({type:"durationupdate",duration:this.duration});}},true);this.player.addEventListener("progress",function(k){g.bytesLoaded=k.loaded;g.bytesTotal=k.total;},true);this.player.autoplay=true;if(typeof this.player.hasAttribute=="function"&&this.player.hasAttribute("preload")&&this.player.preload!="none"){this.player.autobuffer=true;}else{this.player.autobuffer=false;this.player.preload="none";}d({type:"playerready"});}};this.onError=function(h){switch(h.code){case 1:console.log("Error: MEDIA_ERR_ABORTED");break;case 2:console.log("Error: MEDIA_ERR_DECODE");break;case 3:console.log("Error: MEDIA_ERR_NETWORK");break;case 4:console.log("Error: MEDIA_ERR_SRC_NOT_SUPPORTED");break;default:break;}};this.onReady=function(){if(!this.loaded){this.loaded=true;this.playMedia();}};this.loadMedia=function(h){this.mediaFile=h;this.createMedia(h);};this.getMediaType=function(h){var i=(typeof h==="array")?h[0].extension:h.extension;switch(i){case"ogg":case"ogv":case"mp4":case"m4v":return"video";case"oga":case"mp3":return"audio";default:break;}return"video";};this.playMedia=function(){if(this.player&&this.player.play){this.player.play();}};this.pauseMedia=function(){if(this.player&&this.player.pause){this.player.pause();}};this.stopMedia=function(){this.pauseMedia();if(this.player){this.player.src="";}};this.destroy=function(){this.stopMedia();this.display.children().remove();};this.seekMedia=function(h){if(this.player){this.player.currentTime=h;}};this.setVolume=function(h){if(this.player){this.player.volume=h;}};this.getVolume=function(){return this.player?this.player.volume:0;};this.getDuration=function(){var h=this.player?this.player.duration:0;return(h===Infinity)?0:h;};this.getCurrentTime=function(){return this.player?this.player.currentTime:0;};this.getPercentLoaded=function(){if(this.player&&this.player.buffered&&this.player.duration){return(this.player.buffered.end(0)/this.player.duration);}else{if(this.bytesTotal){return(this.bytesLoaded/this.bytesTotal);}else{return 0;}}};this.onResize=function(){if(this.mediaType=="video"){this.playerElement.css({width:this.display.width(),height:this.display.height()});}};this.setQuality=function(h){};this.getQuality=function(){return"";};this.hasControls=function(){return false;};this.showControls=function(h){};this.getEmbedCode=function(){if((this.mediaFile.extension=="mp4")||(this.mediaFile.extension=="m4v")||(this.mediaFile.extension=="webm")){var h={config:"config",id:"mediafront_player",file:this.mediaFile.path,image:this.preview,skin:e.skin};if(this.mediaFile.stream){h.stream=this.mediaFile.stream;}return jQuery.media.utils.getFlash(e.flashPlayer,"mediafront_player",e.embedWidth,e.embedHeight,h,e.wmode);}else{return"This media does not support embedding.";}};this.getMediaLink=function(){return"This media currently does not have a link.";};})(this,c,b);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{logo:"logo.png",logoWidth:49,logoHeight:15,logopos:"sw",logox:5,logoy:5,link:"http://www.mediafront.org",file:"",image:"",timeout:8,autoLoad:true});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{busy:"#mediabusy",preview:"#mediapreview",play:"#mediaplay",media:"#mediadisplay"});jQuery.fn.minplayer=function(b){if(this.length===0){return null;}return new (function(c,d){d=jQuery.media.utils.getSettings(d);this.display=c;var e=this;this.autoLoad=d.autoLoad;this.busy=c.find(d.ids.busy);this.busyImg=this.busy.find("img");this.busyWidth=this.busyImg.width();this.busyHeight=this.busyImg.height();this.play=c.find(d.ids.play);this.play.unbind("click").bind("click",function(){e.togglePlayPause();});this.playImg=this.play.find("img");this.playWidth=this.playImg.width();this.playHeight=this.playImg.height();this.preview=c.find(d.ids.preview).mediaimage();if(this.preview){this.preview.display.unbind("click").bind("click",function(){e.onMediaClick();});this.preview.display.unbind("imageLoaded").bind("imageLoaded",function(){e.onPreviewLoaded();});}this.usePlayerControls=false;this.busyFlags=0;this.busyVisible=false;this.playVisible=false;this.previewVisible=false;this.playing=false;this.hasMedia=false;this.timeoutId=0;this.width=this.display.width();this.height=this.display.height();this.showElement=function(h,f,g){if(h&&!this.usePlayerControls){if(f){h.show(g);}else{h.hide(g);}}};this.showPlay=function(f,g){f&=this.hasMedia;this.playVisible=f;this.showElement(this.play,f,g);};this.showBusy=function(h,f,g){if(f){this.busyFlags|=(1<0);this.showElement(this.busy,this.busyVisible,g);if(h==1&&!f){this.showBusy(3,false);}};this.showPreview=function(f,g){this.previewVisible=f;if(this.preview){this.showElement(this.preview.display,f,g);}};this.onControlUpdate=function(f){if(this.media){if(this.media.playerReady){switch(f.type){case"play":this.media.player.playMedia();break;case"pause":this.media.player.pauseMedia();break;case"seek":this.media.player.seekMedia(f.value);break;case"volume":this.media.setVolume(f.value);break;case"mute":this.media.mute(f.value);break;default:break;}}else{if((this.media.playQueue.length>0)&&!this.media.mediaFile){this.autoLoad=true;this.playNext();}}if(d.template&&d.template.onControlUpdate){d.template.onControlUpdate(f);}}};this.fullScreen=function(f){if(d.template.onFullScreen){d.template.onFullScreen(f);}this.preview.refresh();};this.onPreviewLoaded=function(){this.previewVisible=true;};this.onMediaUpdate=function(f){switch(f.type){case"paused":this.playing=false;this.showPlay(true);if(!this.media.loaded){this.showPreview(true);}break;case"update":case"playing":this.playing=true;this.showPlay(false);this.showPreview((this.media.mediaFile.type=="audio"));break;case"initialize":this.playing=false;this.showPlay(true);this.showBusy(1,this.autoLoad);this.showPreview(true);break;case"buffering":this.showPlay(true);this.showPreview((this.media.mediaFile.type=="audio"));break;default:break;}if(f.busy){this.showBusy(1,(f.busy=="show"));}};this.onMediaClick=function(){if(this.media.player&&!this.media.hasControls()){if(this.playing){this.media.player.pauseMedia();}else{this.media.player.playMedia();}}};this.media=this.display.find(d.ids.media).mediadisplay(d);if(this.media){this.media.display.unbind("click").bind("click",function(){e.onMediaClick();});}this.setLogoPos=function(){if(this.logo){var f={};if(d.logopos=="se"||d.logopos=="sw"){f.bottom=d.logoy;}if(d.logopos=="ne"||d.logopos=="nw"){f.top=d.logoy;}if(d.logopos=="nw"||d.logopos=="sw"){f.left=d.logox;}if(d.logopos=="ne"||d.logopos=="se"){f.right=d.logox;}this.logo.display.css(f);}};if(!d.controllerOnly){this.display.prepend('');this.logo=this.display.find("."+d.prefix+"medialogo").mediaimage(d.link);if(this.logo){this.logo.display.css({width:d.logoWidth,height:d.logoHeight});this.logo.display.bind("imageLoaded",function(){e.setLogoPos();});this.logo.loadImage(d.logo);}}this.reset=function(){this.hasMedia=false;this.playing=false;jQuery.media.players[d.id].showNativeControls(false);this.showPlay(true);this.showPreview(true);clearTimeout(this.timeoutId);if(this.media){this.media.reset();}};this.togglePlayPause=function(){if(this.media){if(this.media.playerReady){if(this.playing){this.showPlay(true);this.media.player.pauseMedia();}else{this.showPlay(false);this.media.player.playMedia();}}else{if((this.media.playQueue.length>0)&&!this.media.mediaFile){this.autoLoad=true;this.playNext();}}}};this.loadImage=function(f){if(this.preview){this.showBusy(3,true);this.preview.loadImage(f);var g=setInterval(function(){if(e.preview.loaded()){clearInterval(g);e.showBusy(3,false);}},500);if(this.media){this.media.preview=f;}}};this.onResize=function(){if(this.preview){this.preview.refresh();}if(this.media){this.media.onResize();}};this.clearImage=function(){if(this.preview){this.preview.clear();}};this.loadFiles=function(f){this.reset();this.hasMedia=this.media&&this.media.loadFiles(f);if(this.hasMedia&&this.autoLoad){this.media.playNext();}else{if(!this.hasMedia){this.showPlay(false);this.showPreview(true);this.timeoutId=setTimeout(function(){e.media.display.trigger("mediaupdate",{type:"complete"});},(d.timeout*1000));}}return this.hasMedia;};this.playNext=function(){if(this.media){this.media.playNext();}};this.hasControls=function(){if(this.media){return this.media.hasControls();}return true;};this.showControls=function(f){if(this.media){this.media.showControls(f);}};this.loadMedia=function(f){this.reset();if(this.media){this.media.loadMedia(f);}};if(d.file){this.loadMedia(d.file);}if(d.image){this.loadImage(d.image);}})(this,b);};window.onVimeoReady=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onReady();};window.onVimeoFinish=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onFinished();};window.onVimeoLoading=function(c,b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onLoading(c);};window.onVimeoPlay=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onPlaying();};window.onVimeoPause=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onPaused();};window.onVimeoProgress=function(c,b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onProgress(c);};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{vimeo:function(b){return(b.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i)===0);}});jQuery.fn.mediavimeo=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.videoFile=null;this.ready=false;this.bytesLoaded=0;this.bytesTotal=0;this.currentVolume=1;this.createMedia=function(j,l){this.videoFile=j;this.ready=false;var i=(e.id+"_media");var h={clip_id:this.getId(j.path),width:"100%",height:"100%",js_api:"1",js_onLoad:"onVimeoReady",js_swf_id:i};var k=Math.floor(Math.random()*1000000);var m="http://vimeo.com/moogaloop.swf?rand="+k;jQuery.media.utils.insertFlash(this.display,m,i,"100%","100%",h,e.wmode,function(n){g.player=n;g.loadPlayer();});};this.getId=function(i){var h=/^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i;return(i.search(h)===0)?i.replace(h,"$3"):i;};this.loadMedia=function(h){this.bytesLoaded=0;this.bytesTotal=0;this.createMedia(h);};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player&&this.player.api_addEventListener){this.player.api_addEventListener("onProgress","onVimeoProgress");this.player.api_addEventListener("onFinish","onVimeoFinish");this.player.api_addEventListener("onLoading","onVimeoLoading");this.player.api_addEventListener("onPlay","onVimeoPlay");this.player.api_addEventListener("onPause","onVimeoPause");d({type:"playerready"});this.playMedia();}};this.onFinished=function(){d({type:"complete"});};this.onLoading=function(h){this.bytesLoaded=h.bytesLoaded;this.bytesTotal=h.bytesTotal;};this.onPlaying=function(){d({type:"playing",busy:"hide"});};this.onPaused=function(){d({type:"paused",busy:"hide"});};this.playMedia=function(){d({type:"playing",busy:"hide"});if(this.player.api_play){this.player.api_play();}};this.onProgress=function(h){d({type:"progress"});};this.pauseMedia=function(){d({type:"paused",busy:"hide"});if(this.player.api_pause){this.player.api_pause();}};this.stopMedia=function(){this.pauseMedia();if(this.player.api_unload){this.player.api_unload();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){if(this.player.api_seekTo){this.player.api_seekTo(h);}};this.setVolume=function(h){this.currentVolume=h;if(this.player.api_setVolume){this.player.api_setVolume((h*100));}};this.getVolume=function(){return this.currentVolume;};this.getDuration=function(){return this.player.api_getDuration?this.player.api_getDuration():0;};this.getCurrentTime=function(){return this.player.api_getCurrentTime?this.player.api_getCurrentTime():0;};this.getBytesLoaded=function(){return this.bytesLoaded;};this.getBytesTotal=function(){return this.bytesTotal;};this.setQuality=function(h){};this.getQuality=function(){return"";};this.hasControls=function(){return true;};this.showControls=function(h){};this.getEmbedCode=function(){return"This video cannot be embedded.";};this.getMediaLink=function(){return"This video currently does not have a link.";};})(this,c,b);};window.onYouTubePlayerReady=function(b){b=b.replace(/\_media$/,"");jQuery.media.players[b].node.player.media.player.onReady();};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{youtube:function(b){return(b.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i)===0);}});jQuery.fn.mediayoutube=function(c,b){return new (function(f,e,d){this.display=f;var g=this;this.player=null;this.videoFile=null;this.loaded=false;this.ready=false;this.qualities=[];this.createMedia=function(i,k){this.videoFile=i;this.ready=false;var h=(e.id+"_media");var j=Math.floor(Math.random()*1000000);var l="http://www.youtube.com/apiplayer?rand="+j+"&version=3&enablejsapi=1&playerapiid="+h;jQuery.media.utils.insertFlash(this.display,l,h,"100%","100%",{},e.wmode,function(m){g.player=m;g.loadPlayer();});};this.getId=function(i){var h=/^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i;return(i.search(h)===0)?i.replace(h,"$2"):i;};this.loadMedia=function(h){if(this.player){this.loaded=false;this.videoFile=h;d({type:"playerready"});if(this.player.loadVideoById){this.player.loadVideoById(this.getId(this.videoFile.path),0,e.quality);}}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){window[e.id+"StateChange"]=function(h){g.onStateChange(h);};window[e.id+"PlayerError"]=function(h){g.onError(h);};window[e.id+"QualityChange"]=function(h){g.quality=h;};if(this.player.addEventListener){this.player.addEventListener("onStateChange",e.id+"StateChange");this.player.addEventListener("onError",e.id+"PlayerError");this.player.addEventListener("onPlaybackQualityChange",e.id+"QualityChange");}if(this.player.getAvailableQualityLevels){this.qualities=this.player.getAvailableQualityLevels();}d({type:"playerready"});if(this.player.loadVideoById){this.player.loadVideoById(this.getId(this.videoFile.path),0);}}};this.onStateChange=function(i){var h=this.getPlayerState(i);d({type:h.state,busy:h.busy});if(!this.loaded&&h=="playing"){this.loaded=true;d({type:"meta"});}};this.onError=function(i){var h="An unknown error has occured: "+i;if(i==100){h="The requested video was not found. ";h+="This occurs when a video has been removed (for any reason), ";h+="or it has been marked as private.";}else{if((i==101)||(i==150)){h="The video requested does not allow playback in an embedded player.";}}if(window.console&&console.log){console.log(h);}d({type:"error",data:h});};this.getPlayerState=function(h){switch(h){case 5:return{state:"ready",busy:false};case 3:return{state:"buffering",busy:"show"};case 2:return{state:"paused",busy:"hide"};case 1:return{state:"playing",busy:"hide"};case 0:return{state:"complete",busy:false};case -1:return{state:"stopped",busy:false};default:return{state:"unknown",busy:false};}return"unknown";};this.playMedia=function(){d({type:"buffering",busy:"show"});if(this.player.playVideo){this.player.playVideo();}};this.pauseMedia=function(){if(this.player.pauseVideo){this.player.pauseVideo();}};this.stopMedia=function(){if(this.player.stopVideo){this.player.stopVideo();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(e.id+"_media"));this.display.children().remove();};this.seekMedia=function(h){d({type:"buffering",busy:"show"});if(this.player.seekTo){this.player.seekTo(h,true);}};this.setVolume=function(h){if(this.player.setVolume){this.player.setVolume(h*100);}};this.setQuality=function(h){if(this.player.setPlaybackQuality){this.player.setPlaybackQuality(h);}};this.getVolume=function(){return this.player.getVolume?(this.player.getVolume()/100):0;};this.getDuration=function(){return this.player.getDuration?this.player.getDuration():0;};this.getCurrentTime=function(){return this.player.getCurrentTime?this.player.getCurrentTime():0;};this.getQuality=function(){return this.player.getPlaybackQuality?this.player.getPlaybackQuality():0;};this.getEmbedCode=function(){return this.player.getVideoEmbedCode?this.player.getVideoEmbedCode():0;};this.getMediaLink=function(){return this.player.getVideoUrl?this.player.getVideoUrl():0;};this.getBytesLoaded=function(){return this.player.getVideoBytesLoaded?this.player.getVideoBytesLoaded():0;};this.getBytesTotal=function(){return this.player.getVideoBytesTotal?this.player.getVideoBytesTotal():0;};this.hasControls=function(){return false;};this.showControls=function(h){};})(this,c,b);};})(jQuery); \ No newline at end of file diff --git a/js/jquery.minplayer.js b/js/jquery.minplayer.js deleted file mode 100644 index c656ed1f..00000000 --- a/js/jquery.minplayer.js +++ /dev/null @@ -1,2499 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - volumeVertical:false - }); - - // Set up our defaults for this component. - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - currentTime:"#mediacurrenttime", - totalTime:"#mediatotaltime", - playPause:"#mediaplaypause", - seekUpdate:"#mediaseekupdate", - seekProgress:"#mediaseekprogress", - seekBar:"#mediaseekbar", - seekHandle:"#mediaseekhandle", - volumeUpdate:"#mediavolumeupdate", - volumeBar:"#mediavolumebar", - volumeHandle:"#mediavolumehandle", - mute:"#mediamute" - }); - - jQuery.fn.mediacontrol = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( controlBar, settings ) { - settings = jQuery.media.utils.getSettings(settings); - this.display = controlBar; - var _this = this; - - // Allow the template to provide their own function for this... - this.formatTime = (settings.template && settings.template.formatTime) ? settings.template.formatTime : - function( time ) { - time = time ? time : 0; - var seconds = 0; - var minutes = 0; - var hour = 0; - - hour = Math.floor(time / 3600); - time -= (hour * 3600); - minutes = Math.floor( time / 60 ); - time -= (minutes * 60); - seconds = Math.floor(time % 60); - - var timeString = ""; - - if( hour ) { - timeString += String(hour); - timeString += ":"; - } - - timeString += (minutes >= 10) ? String(minutes) : ("0" + String(minutes)); - timeString += ":"; - timeString += (seconds >= 10) ? String(seconds) : ("0" + String(seconds)); - return { - time:timeString, - units:"" - }; - }; - - this.setToggle = function( button, state ) { - var on = state ? ".on" : ".off"; - var off = state ? ".off" : ".on"; - if( button ) { - button.find(on).show(); - button.find(off).hide(); - } - }; - - var zeroTime = this.formatTime( 0 ); - this.duration = 0; - this.volume = -1; - this.prevVolume = 0; - this.percentLoaded = 0; - this.playState = false; - this.muteState = false; - this.currentTime = controlBar.find( settings.ids.currentTime ).text( zeroTime.time ); - this.totalTime = controlBar.find( settings.ids.totalTime ).text( zeroTime.time ); - - // Allow them to attach custom links to the control bar that perform player functions. - this.display.find("a.mediaplayerlink").each( function() { - var linkId = $(this).attr("href"); - $(this).medialink( settings, function( event ) { - event.preventDefault(); - _this.display.trigger( event.data.id ); - }, { - id:linkId.substr(1), - obj:$(this) - } ); - }); - - // Set up the play pause button. - this.playPauseButton = controlBar.find( settings.ids.playPause ).medialink( settings, function( event, target ) { - _this.playState = !_this.playState; - _this.setToggle( target, _this.playState ); - _this.display.trigger( "controlupdate", { - type: (_this.playState ? "pause" : "play") - }); - }); - - // Set up the seek bar... - this.seekUpdate = controlBar.find( settings.ids.seekUpdate ).css("width", 0); - this.seekProgress = controlBar.find( settings.ids.seekProgress ).css("width", 0); - this.seekBar = controlBar.find( settings.ids.seekBar ).mediaslider( settings.ids.seekHandle, false ); - if( this.seekBar ) { - this.seekBar.display.unbind("setvalue").bind( "setvalue", function( event, data ) { - _this.seekUpdate.css( "width", (data * _this.seekBar.trackSize) + "px" ); - _this.display.trigger( "controlupdate", { - type:"seek", - value:(data * _this.duration) - }); - }); - this.seekBar.display.unbind("updatevalue").bind( "updatevalue", function( event, data ) { - _this.seekUpdate.css( "width", (data * _this.seekBar.trackSize) + "px" ); - }); - } - - this.setVolume = function( vol ) { - if( this.volumeBar ) { - if( settings.volumeVertical ) { - this.volumeUpdate.css({ - "marginTop":(this.volumeBar.handlePos + this.volumeBar.handleMid), - "height":(this.volumeBar.trackSize - this.volumeBar.handlePos) - }); - } - else { - this.volumeUpdate.css( "width", (vol * this.volumeBar.trackSize) ); - } - } - }; - - // Set up the volume bar. - this.volumeUpdate = controlBar.find( settings.ids.volumeUpdate ); - this.volumeBar = controlBar.find( settings.ids.volumeBar ).mediaslider( settings.ids.volumeHandle, settings.volumeVertical, settings.volumeVertical ); - if( this.volumeBar ) { - this.volumeBar.display.unbind("setvalue").bind("setvalue", function( event, data ) { - _this.setVolume( data ); - _this.display.trigger( "controlupdate", { - type:"volume", - value:data - }); - }); - this.volumeBar.display.unbind("updatevalue").bind("updatevalue", function( event, data ) { - _this.setVolume( data ); - _this.volume = data; - }); - } - - // Setup the mute button. - this.mute = controlBar.find(settings.ids.mute).medialink( settings, function( event, target ) { - _this.muteState = !_this.muteState; - _this.setToggle( target, _this.muteState ); - _this.setMute( _this.muteState ); - }); - - this.setMute = function( state ) { - this.prevVolume = (this.volumeBar.value > 0) ? this.volumeBar.value : this.prevVolume; - this.volumeBar.updateValue( state ? 0 : this.prevVolume ); - this.display.trigger( "controlupdate", { - type:"mute", - value:state - }); - }; - - this.setProgress = function( percent ) { - if( this.seekProgress && this.seekBar ) { - this.seekProgress.css( "width", (percent * (this.seekBar.trackSize + this.seekBar.handleSize)) ); - } - }; - - this.onResize = function() { - if( this.seekBar ) { - this.seekBar.onResize(); - } - this.setProgress( this.percentLoaded ); - }; - - // Handle the media events... - this.onMediaUpdate = function( data ) { - switch( data.type ) { - case "reset": - this.reset(); - break; - case "paused": - this.playState = true; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "playing": - this.playState = false; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "stopped": - this.playState = true; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "progress": - this.percentLoaded = data.percentLoaded; - this.setProgress( this.percentLoaded ); - break; - case "meta": - case "update": - this.timeUpdate( data.currentTime, data.totalTime ); - if( this.volumeBar ) { - this.volumeBar.updateValue( data.volume ); - } - break; - default: - break; - } - }; - - // Call to reset all controls... - this.reset = function() { - this.totalTime.text( this.formatTime(0).time ); - this.currentTime.text( this.formatTime(0).time ); - if( this.seekBar ) { - this.seekBar.updateValue(0); - } - this.seekUpdate.css( "width", "0px" ); - this.seekProgress.css( "width", "0px" ); - }; - - this.timeUpdate = function( cTime, tTime ) { - this.duration = tTime; - this.totalTime.text( this.formatTime( tTime ).time ); - this.currentTime.text( this.formatTime( cTime ).time ); - if( tTime && this.seekBar && !this.seekBar.dragging ) { - this.seekBar.updateValue( cTime / tTime ); - } - }; - - // Reset the time values. - this.timeUpdate( 0, 0 ); - })( this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Called when the YouTube player is ready. - window.onDailymotionPlayerReady = function( playerId ) { - playerId = playerId.replace("_media", ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "dailymotion":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?dailymotion\.com/i) === 0); - } - }); - - jQuery.fn.mediadailymotion = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.meta = false; - this.loaded = false; - this.ready = false; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://www.dailymotion.com/swf/' + videoFile.path + '?rand=' + rand + '&enablejsapi=1&playerapiid=' + playerId; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - {}, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.loadMedia = function( videoFile ) { - if( this.player ) { - this.loaded = false; - this.meta = false; - this.videoFile = videoFile; - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - this.player.loadVideoById( this.videoFile.path, 0 ); - } - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - this.loadPlayer = function() { - if( this.ready && this.player ) { - // Create our callback functions. - window[options.id + 'StateChange'] = function( newState ) { - _this.onStateChange( newState ); - }; - - window[options.id + 'PlayerError'] = function( errorCode ) { - _this.onError( errorCode ); - }; - - // Add our event listeners. - this.player.addEventListener('onStateChange', options.id + 'StateChange'); - this.player.addEventListener('onError', options.id + 'PlayerError'); - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - this.player.loadVideoById( this.videoFile.path, 0 ); - } - }; - - // Called when the player state changes. - this.onStateChange = function( newState ) { - var playerState = this.getPlayerState( newState ); - - // Alright... Dailymotion's status updates are just crazy... - // write some hacks to just make it work. - - if( !(!this.meta && playerState.state =="stopped") ) { - onUpdate( { - type:playerState.state, - busy:playerState.busy - } ); - } - - if( !this.loaded && playerState.state == "buffering" ) { - this.loaded = true; - onUpdate( { - type:"paused", - busy:"hide" - } ); - if( options.autostart ) { - this.playMedia(); - } - } - - if( !this.meta && playerState.state == "playing" ) { - // Set this player to meta. - this.meta = true; - - // Update our meta data. - onUpdate( { - type:"meta" - } ); - } - }; - - // Called when the player has an error. - this.onError = function( errorCode ) { - var errorText = "An unknown error has occured: " + errorCode; - if( errorCode == 100 ) { - errorText = "The requested video was not found. "; - errorText += "This occurs when a video has been removed (for any reason), "; - errorText += "or it has been marked as private."; - } else if( (errorCode == 101) || (errorCode == 150) ) { - errorText = "The video requested does not allow playback in an embedded player."; - } - onUpdate( { - type:"error", - data:errorText - } ); - }; - - // Translates the player state for the API player. - this.getPlayerState = function( playerState ) { - switch (playerState) { - case 5: - return {state:'ready', busy:false}; - case 3: - return {state:'buffering', busy:"show"}; - case 2: - return {state:'paused', busy:"hide"}; - case 1: - return {state:'playing', busy:"hide"}; - case 0: - return {state:'complete', busy:false}; - case -1: - return {state:'stopped', busy:false}; - default: - return {state:'unknown', busy:false}; - } - return 'unknown'; - }; - - /* - this.setSize = function( newWidth, newHeight ) { - this.player.setSize(newWidth, newHeight); - }; - */ - this.playMedia = function() { - onUpdate({ - type:"buffering", - busy:"show" - }); - this.player.playVideo(); - }; - - this.pauseMedia = function() { - this.player.pauseVideo(); - }; - - this.stopMedia = function() { - this.player.stopVideo(); - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - onUpdate({ - type:"buffering", - busy:"show" - }); - this.player.seekTo( pos, true ); - }; - - this.setVolume = function( vol ) { - this.player.setVolume( vol * 100 ); - }; - - this.getVolume = function() { - return (this.player.getVolume() / 100); - }; - - this.getDuration = function() { - return this.player.getDuration(); - }; - - this.getCurrentTime = function() { - return this.player.getCurrentTime(); - }; - - this.getBytesLoaded = function() { - return this.player.getVideoBytesLoaded(); - }; - - this.getBytesTotal = function() { - return this.player.getVideoBytesTotal(); - }; - - this.getEmbedCode = function() { - return this.player.getVideoEmbedCode(); - }; - - this.getMediaLink = function() { - return this.player.getVideoUrl(); - }; - - this.hasControls = function() { - return true; - }; - this.showControls = function(show) {}; - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - })( this, options, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - volume:80, - autostart:false, - streamer:"", - embedWidth:450, - embedHeight:337, - wmode:"transparent", - forceOverflow:false, - quality:"default", - repeat:false - }); - - jQuery.fn.mediadisplay = function( options ) { - if( this.length === 0 ) { - return null; - } - return new (function( mediaWrapper, options ) { - this.settings = jQuery.media.utils.getSettings( options ); - this.display = mediaWrapper; - var _this = this; - this.volume = -1; - this.player = null; - this.preview = ''; - this.updateInterval = null; - this.progressInterval = null; - this.playQueue = []; - this.playIndex = 0; - this.playerReady = false; - this.loaded = false; - this.mediaFile = null; - this.hasPlaylist = false; - - // If they provide the forceOverflow variable, then that means they - // wish to force the media player to override all parents overflow settings. - if( this.settings.forceOverflow ) { - // Make sure that all parents have overflow visible so that - // browser full screen will always work. - this.display.parents().css("overflow", "visible"); - } - - this.reset = function() { - this.loaded = false; - this.stopMedia(); - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - this.playQueue.length = 0; - this.playQueue = []; - this.playIndex = 0; - this.playerReady = false; - this.mediaFile = null; - this.display.empty().trigger( "mediaupdate", {type:"reset"} ); - }; - - // Returns the media that has the lowest weight value, which means - // this player prefers that media over the others. - this.getPlayableMedia = function( files ) { - var mFile = null; - var i = files.length; - while(i--) { - var tempFile = new jQuery.media.file( files[i], this.settings ); - if( !mFile || (tempFile.weight < mFile.weight) ) { - mFile = tempFile; - } - } - return mFile; - }; - - // Returns a valid media file for this browser. - this.getMediaFile = function( file ) { - if( file ) { - var type = typeof file; - if( ((type === 'object') || (type === 'array')) && file[0] ) { - file = this.getPlayableMedia( file ); - } - } - return file; - }; - - // Adds a media file to the play queue. - this.addToQueue = function( file ) { - if( file ) { - this.playQueue.push( this.getMediaFile( file ) ); - } - }; - - this.loadFiles = function( files ) { - if( files ) { - this.playQueue.length = 0; - this.playQueue = []; - this.playIndex = 0; - this.addToQueue( files.intro ); - this.addToQueue( files.commercial ); - this.addToQueue( files.prereel ); - this.addToQueue( files.media ); - this.addToQueue( files.postreel ); - } - var hasMedia = (this.playQueue.length > 0); - if( !hasMedia ) { - if (this.player) { - // Destroy the current player. - this.player.destroy(); - this.player = null; - } - - this.display.trigger( "mediaupdate", {type:"nomedia"} ); - } - return hasMedia; - }; - - this.playNext = function() { - if( this.playQueue.length > this.playIndex ) { - this.loadMedia( this.playQueue[this.playIndex] ); - this.playIndex++; - } - else if( this.settings.repeat ) { - this.playIndex = 0; - this.playNext(); - } - else if( this.hasPlaylist ) { - this.reset(); - } - else { - // If there is no playlist, and no repeat, we will - // just seek to the beginning and pause. - this.loaded = false; - this.settings.autostart = false; - this.playIndex = 0; - this.playNext(); - } - }; - - this.loadMedia = function( file, mediaplayer ) { - if( file ) { - // Get the media file object. - file = new jQuery.media.file( this.getMediaFile( file ), this.settings ); - - // Set the media player if they force it. - file.player = mediaplayer ? mediaplayer : file.player; - - // Stop the current player. - this.stopMedia(); - - if( !this.mediaFile || (this.mediaFile.player != file.player) ) { - // Reset our player variables. - this.player = null; - this.playerReady = false; - - // Create a new media player. - if( file.player ) { - // Set the new media player. - this.player = this.display["media" + file.player]( this.settings, function( data ) { - _this.onMediaUpdate( data ); - }); - } - - if( this.player ) { - // Create our media player. - this.player.createMedia( file, this.preview ); - } - } - else if( this.player ) { - // Load our file into the current player. - this.player.loadMedia( file ); - } - - // Save this file. - this.mediaFile = file; - - // Send out an update about the initialize. - this.onMediaUpdate({ - type:"initialize" - }); - } - }; - - this.onMediaUpdate = function( data ) { - // Now trigger the media update message. - switch( data.type ) { - case "playerready": - this.playerReady = true; - this.player.setVolume(0); - this.player.setQuality(this.settings.quality); - this.startProgress(); - break; - case "buffering": - this.startProgress(); - break; - case "stopped": - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - break; - case "error": - if( data.code == 4 ) { - // It is saying not supported... Try and fall back to flash... - this.loadMedia(this.mediaFile, "flash"); - } - else { - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - } - break; - case "paused": - clearInterval( this.updateInterval ); - break; - case "playing": - this.startUpdate(); - break; - case "progress": - var percentLoaded = this.getPercentLoaded(); - jQuery.extend( data, { - percentLoaded:percentLoaded - }); - if( percentLoaded >= 1 ) { - clearInterval( this.progressInterval ); - } - break; - case "meta": - jQuery.extend( data, { - currentTime:this.player.getCurrentTime(), - totalTime:this.getDuration(), - volume: this.player.getVolume(), - quality: this.getQuality() - }); - break; - case "durationupdate": - this.mediaFile.duration = data.duration; - break; - case "complete": - this.playNext(); - break; - default: - break; - } - - // If this is the playing state, we want to pause the video. - if( data.type=="playing" && !this.loaded ) { - if( this.settings.autoLoad && !this.settings.autostart ) { - setTimeout( function() { - _this.setVolume(); - _this.player.pauseMedia(); - _this.settings.autostart = true; - _this.loaded = true; - }, 100 ); - } - else { - this.loaded = true; - this.setVolume(); - this.display.trigger( "mediaupdate", data ); - } - } - else { - this.display.trigger( "mediaupdate", data ); - } - }; - - this.startProgress = function() { - if( this.playerReady ) { - clearInterval( this.progressInterval ); - this.progressInterval = setInterval( function() { - _this.onMediaUpdate( { - type:"progress" - } ); - }, 500 ); - } - }; - - this.startUpdate = function() { - if( this.playerReady ) { - clearInterval( this.updateInterval ); - this.updateInterval = setInterval( function() { - if( _this.playerReady ) { - _this.onMediaUpdate({ - type:"update", - currentTime:_this.player.getCurrentTime(), - totalTime:_this.getDuration(), - volume:_this.player.getVolume(), - quality:_this.getQuality() - }); - } - }, 1000 ); - } - }; - - this.stopMedia = function() { - this.loaded = false; - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - if( this.playerReady ) { - this.player.stopMedia(); - } - }; - - this.mute = function( on ) { - this.player.setVolume( on ? 0 : this.volume ); - }; - - this.onResize = function() { - if( this.player && this.player.onResize ) { - this.player.onResize(); - } - }; - - this.getPercentLoaded = function() { - if( this.player.getPercentLoaded ) { - return this.player.getPercentLoaded(); - } - else { - var bytesLoaded = this.player.getBytesLoaded(); - var bytesTotal = this.mediaFile.bytesTotal ? this.mediaFile.bytesTotal : this.player.getBytesTotal(); - return bytesTotal ? (bytesLoaded / bytesTotal) : 0; - } - }; - - this.showControls = function(show) { - if( this.playerReady ) { - this.player.showControls(show); - } - }; - - this.hasControls = function() { - if( this.player ) { - return this.player.hasControls(); - } - return false; - }; - - this.getDuration = function() { - if( this.mediaFile ) { - if(!this.mediaFile.duration ) { - this.mediaFile.duration = this.player.getDuration(); - } - return this.mediaFile.duration; - } - else { - return 0; - } - }; - - this.setVolume = function( vol ) { - this.volume = vol ? vol : ((this.volume == -1) ? (this.settings.volume / 100) : this.volume); - if( this.player ) { - this.player.setVolume(this.volume); - } - }; - - this.getVolume = function() { - if( !this.volume ) { - this.volume = this.player.getVolume(); - } - return this.volume; - }; - - this.getQuality = function() { - if( !this.mediaFile.quality ) { - this.mediaFile.quality = this.player.getQuality(); - } - return this.mediaFile.quality; - }; - })( this, options ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - window.onFlashPlayerReady = function( id ) { - jQuery.media.players[id].node.player.media.player.onReady(); - }; - - window.onFlashPlayerUpdate = function( id, eventType ) { - jQuery.media.players[id].node.player.media.player.onMediaUpdate( eventType ); - }; - - window.onFlashPlayerDebug = function( debug ) { - if( window.console && console.log ) { - console.log( debug ); - } - }; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - flashPlayer:"./flash/mediafront.swf", - skin:"default", - config:"nocontrols" - }); - - jQuery.fn.mediaflash = function( settings, onUpdate ) { - return new (function( video, settings, onUpdate ) { - settings = jQuery.media.utils.getSettings( settings ); - this.display = video; - var _this = this; - this.player = null; - this.mediaFile = null; - this.preview = ''; - this.ready = false; - - // Translate the messages. - this.translate = { - "mediaConnected":"connected", - "mediaBuffering":"buffering", - "mediaPaused":"paused", - "mediaPlaying":"playing", - "mediaStopped":"stopped", - "mediaComplete":"complete", - "mediaMeta":"meta" - }; - - // When to show the busy cursor. - this.busy = { - "mediaConnected":false, - "mediaBuffering":"show", - "mediaPaused":"hide", - "mediaPlaying":"hide", - "mediaStopped":false, - "mediaComplete":false, - "mediaMeta":false - }; - - this.createMedia = function( mediaFile, preview ) { - this.mediaFile = mediaFile; - this.preview = preview; - this.ready = false; - var playerId = (settings.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = settings.flashPlayer + "?rand=" + rand; - var flashvars = { - config:settings.config, - id:settings.id, - file:mediaFile.path, - image:this.preview, - skin:settings.skin, - autostart:(settings.autostart || !settings.autoLoad) - }; - if( mediaFile.stream ) { - flashvars.stream = mediaFile.stream; - } - if( settings.debug ) { - flashvars.debug = "1"; - } - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - flashvars, - settings.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.loadMedia = function( mediaFile ) { - if( this.player && this.ready ) { - this.mediaFile = mediaFile; - - // Load the new media file into the Flash player. - this.player.loadMedia( mediaFile.path, mediaFile.stream ); - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - } - }; - - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - this.loadPlayer = function() { - if( this.ready && this.player ) { - onUpdate( { - type:"playerready" - } ); - } - }; - - this.onMediaUpdate = function( eventType ) { - onUpdate( { - type:this.translate[eventType], - busy:this.busy[eventType] - }); - }; - - this.playMedia = function() { - if( this.player && this.ready ) { - this.player.playMedia(); - } - }; - - this.pauseMedia = function() { - if( this.player && this.ready ) { - this.player.pauseMedia(); - } - }; - - this.stopMedia = function() { - if( this.player && this.ready ) { - this.player.stopMedia(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (settings.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if( this.player && this.ready ) { - this.player.seekMedia( pos ); - } - }; - - this.setVolume = function( vol ) { - if( this.player && this.ready ) { - this.player.setVolume( vol ); - } - }; - - this.getVolume = function() { - return (this.player && this.ready) ? this.player.getVolume() : 0; - }; - - this.getDuration = function() { - return (this.player && this.ready) ? this.player.getDuration() : 0; - }; - - this.getCurrentTime = function() { - return (this.player && this.ready) ? this.player.getCurrentTime() : 0; - }; - - this.getBytesLoaded = function() { - return (this.player && this.ready) ? this.player.getMediaBytesLoaded() : 0; - }; - - this.getBytesTotal = function() { - return (this.player && this.ready) ? this.player.getMediaBytesTotal() : 0; - }; - - this.hasControls = function() { - return true; - }; - - this.showControls = function(show) { - if( this.player && this.ready ) { - this.player.showPlugin("controlBar", show); - this.player.showPlugin("playLoader", show); - } - }; - - this.getEmbedCode = function() { - var flashVars = { - config:"config", - id:"mediafront_player", - file:this.mediaFile.path, - image:this.preview, - skin:settings.skin - }; - if( this.mediaFile.stream ) { - flashVars.stream = this.mediaFile.stream; - } - return jQuery.media.utils.getFlash( - settings.flashPlayer, - "mediafront_player", - settings.embedWidth, - settings.embedHeight, - flashVars, - settings.wmode ); - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - //this.setSize = function( newWidth, newHeight ) {}; - this.getMediaLink = function() { - return "This video currently does not have a link."; - }; - })( this, settings, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.fn.mediahtml5 = function( options, onUpdate ) { - return new (function( media, options, onUpdate ) { - this.display = media; - var _this = this; - this.player = null; - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.mediaType = ""; - this.loaded = false; - this.mediaFile = null; - this.playerElement = null; - - this.getPlayer = function( mediaFile, preview ) { - this.mediaFile = mediaFile; - var playerId = options.id + '_' + this.mediaType; - var html = '<' + this.mediaType + ' style="position:absolute" id="' + playerId + '"'; - html += preview ? ' poster="' + preview + '"' : ''; - - if( typeof mediaFile === 'array' ) { - html += '>'; - var i = mediaFile.length; - while(i) { - i--; - html += ''; - } - } - else { - html += ' src="' + mediaFile.path + '">Unable to display media.'; - } - - html += ''; - this.display.append( html ); - this.bytesTotal = mediaFile.bytesTotal; - this.playerElement = this.display.find('#' + playerId); - this.onResize(); - - // return the player object. - return this.playerElement.eq(0)[0]; - }; - - // Create a new HTML5 player. - this.createMedia = function( mediaFile, preview ) { - // Remove any previous Flash players. - jQuery.media.utils.removeFlash( this.display, options.id + "_media" ); - this.display.children().remove(); - this.mediaType = this.getMediaType( mediaFile ); - this.player = this.getPlayer( mediaFile, preview ); - this.loaded = false; - var timeupdated = false; - if( this.player ) { - this.player.addEventListener( "abort", function() { - onUpdate( { - type:"stopped" - } ); - }, true); - this.player.addEventListener( "loadstart", function() { - onUpdate( { - type:"ready", - busy:"show" - }); - - _this.onReady(); - }, true); - this.player.addEventListener( "loadeddata", function() { - onUpdate( { - type:"loaded", - busy:"hide" - }); - }, true); - this.player.addEventListener( "loadedmetadata", function() { - onUpdate( { - type:"meta" - } ); - }, true); - this.player.addEventListener( "canplaythrough", function() { - onUpdate( { - type:"canplay", - busy:"hide" - }); - }, true); - this.player.addEventListener( "ended", function() { - onUpdate( { - type:"complete" - } ); - }, true); - this.player.addEventListener( "pause", function() { - onUpdate( { - type:"paused" - } ); - }, true); - this.player.addEventListener( "play", function() { - onUpdate( { - type:"playing" - } ); - }, true); - this.player.addEventListener( "playing", function() { - onUpdate( { - type:"playing", - busy:"hide" - }); - }, true); - this.player.addEventListener( "error", function(e) { - _this.onError(e.target.error); - onUpdate( { - type:"error", - code:e.target.error.code - } ); - }, true); - this.player.addEventListener( "waiting", function() { - onUpdate( { - type:"waiting", - busy:"show" - }); - }, true); - this.player.addEventListener( "timeupdate", function() { - if( timeupdated ) { - onUpdate( { - type:"timeupdate", - busy:"hide" - }); - } - else { - timeupdated = true; - } - }, true); - this.player.addEventListener( "durationchange", function() { - if( this.duration && (this.duration !== Infinity) ) { - onUpdate( { - type:"durationupdate", - duration:this.duration - }); - } - }, true); - - // Now add the event for getting the progress indication. - this.player.addEventListener( "progress", function( event ) { - _this.bytesLoaded = event.loaded; - _this.bytesTotal = event.total; - }, true); - - this.player.autoplay = true; - - if (typeof this.player.hasAttribute == "function" && this.player.hasAttribute("preload") && this.player.preload != "none") { - this.player.autobuffer = true; - } else { - this.player.autobuffer = false; - this.player.preload = "none"; - } - - onUpdate({ - type:"playerready" - }); - } - }; - - // A function to be called when an error occurs. - this.onError = function( error ) { - switch(error.code) { - case 1: - console.log("Error: MEDIA_ERR_ABORTED"); - break; - case 2: - console.log("Error: MEDIA_ERR_DECODE"); - break; - case 3: - console.log("Error: MEDIA_ERR_NETWORK"); - break; - case 4: - console.log("Error: MEDIA_ERR_SRC_NOT_SUPPORTED"); - break; - default: - break; - } - }; - - // Called when the media has started loading. - this.onReady = function() { - if( !this.loaded ) { - this.loaded = true; - this.playMedia(); - } - }; - - // Load new media into the HTML5 player. - this.loadMedia = function( mediaFile ) { - this.mediaFile = mediaFile; - this.createMedia( mediaFile ); - }; - - this.getMediaType = function( mediaFile ) { - var extension = (typeof mediaFile === 'array') ? mediaFile[0].extension : mediaFile.extension; - switch( extension ) { - case "ogg": case "ogv": case "mp4": case "m4v": - return "video"; - - case "oga": case "mp3": - return "audio"; - - default: - break; - } - return "video"; - }; - - this.playMedia = function() { - if( this.player && this.player.play ) { - this.player.play(); - } - }; - - this.pauseMedia = function() { - if( this.player && this.player.pause ) { - this.player.pause(); - } - }; - - this.stopMedia = function() { - this.pauseMedia(); - if( this.player ) { - this.player.src = ""; - } - }; - - this.destroy = function() { - this.stopMedia(); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if( this.player ) { - this.player.currentTime = pos; - } - }; - - this.setVolume = function( vol ) { - if( this.player ) { - this.player.volume = vol; - } - }; - - this.getVolume = function() { - return this.player ? this.player.volume : 0; - }; - - this.getDuration = function() { - var dur = this.player ? this.player.duration : 0; - return (dur === Infinity) ? 0 : dur; - }; - - this.getCurrentTime = function() { - return this.player ? this.player.currentTime : 0; - }; - - this.getPercentLoaded = function() { - if( this.player && this.player.buffered && this.player.duration ) { - return (this.player.buffered.end(0) / this.player.duration); - } - else if( this.bytesTotal ) { - return (this.bytesLoaded / this.bytesTotal); - } - else { - return 0; - } - }; - - // Called when the player resizes. - this.onResize = function() { - // If this is a video, set the width and height of the video element. - if( this.mediaType == "video" ) { - this.playerElement.css({width:this.display.width(), height:this.display.height()}); - } - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - this.hasControls = function() { - return false; - }; - this.showControls = function(show) {}; - //this.setSize = function( newWidth, newHeight ) {}; - this.getEmbedCode = function() { - - // Only return the Flash embed if this is a Flash playable media field. - if( (this.mediaFile.extension == 'mp4') || - (this.mediaFile.extension == 'm4v') || - (this.mediaFile.extension == 'webm') ) { - var flashVars = { - config:"config", - id:"mediafront_player", - file:this.mediaFile.path, - image:this.preview, - skin:options.skin - }; - if( this.mediaFile.stream ) { - flashVars.stream = this.mediaFile.stream; - } - return jQuery.media.utils.getFlash( - options.flashPlayer, - "mediafront_player", - options.embedWidth, - options.embedHeight, - flashVars, - options.wmode ); - } - else { - return "This media does not support embedding."; - } - }; - this.getMediaLink = function() { - return "This media currently does not have a link."; - }; - })( this, options, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - logo:"logo.png", - logoWidth:49, - logoHeight:15, - logopos:"sw", - logox:5, - logoy:5, - link:"http://www.mediafront.org", - file:"", - image:"", - timeout:8, - autoLoad:true - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - busy:"#mediabusy", - preview:"#mediapreview", - play:"#mediaplay", - media:"#mediadisplay" - }); - - jQuery.fn.minplayer = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( player, settings ) { - // Get the settings. - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = player; - var _this = this; - - // If the player should auto load or not. - this.autoLoad = settings.autoLoad; - - // Store the busy cursor and data. - this.busy = player.find( settings.ids.busy ); - this.busyImg = this.busy.find("img"); - this.busyWidth = this.busyImg.width(); - this.busyHeight = this.busyImg.height(); - - // Store the play overlay. - this.play = player.find( settings.ids.play ); - // Toggle the play/pause state if they click on the play button. - this.play.unbind("click").bind("click", function() { - _this.togglePlayPause(); - }); - this.playImg = this.play.find("img"); - this.playWidth = this.playImg.width(); - this.playHeight = this.playImg.height(); - - // Store the preview image. - this.preview = player.find( settings.ids.preview ).mediaimage(); - if( this.preview ) { - this.preview.display.unbind("click").bind("click", function() { - _this.onMediaClick(); - }); - - this.preview.display.unbind("imageLoaded").bind("imageLoaded", function() { - _this.onPreviewLoaded(); - }); - } - - // The internal player controls. - this.usePlayerControls = false; - this.busyFlags = 0; - this.busyVisible = false; - this.playVisible = false; - this.previewVisible = false; - this.playing = false; - this.hasMedia = false; - this.timeoutId = 0; - - // Cache the width and height. - this.width = this.display.width(); - this.height = this.display.height(); - - // Hide or show an element. - this.showElement = function( element, show, tween ) { - if( element && !this.usePlayerControls ) { - if( show ) { - element.show(tween); - } - else { - element.hide(tween); - } - } - }; - - this.showPlay = function( show, tween ) { - show &= this.hasMedia; - this.playVisible = show; - this.showElement( this.play, show, tween ); - }; - - this.showBusy = function( id, show, tween ) { - if( show ) { - this.busyFlags |= (1 << id); - } - else { - this.busyFlags &= ~(1 << id); - } - - // Set the busy cursor visiblility. - this.busyVisible = (this.busyFlags > 0); - this.showElement( this.busy, this.busyVisible, tween ); - - // If the media has finished loading, then we don't need the - // loader for the image. - if (id==1 && !show) { - this.showBusy(3, false); - } - }; - - this.showPreview = function( show, tween ) { - this.previewVisible = show; - if( this.preview ) { - this.showElement( this.preview.display, show, tween ); - } - }; - - // Handle the control events. - this.onControlUpdate = function( data ) { - if( this.media ) { - // If the player is ready. - if( this.media.playerReady ) { - switch( data.type ) { - case "play": - this.media.player.playMedia(); - break; - case "pause": - this.media.player.pauseMedia(); - break; - case "seek": - this.media.player.seekMedia( data.value ); - break; - case "volume": - this.media.setVolume( data.value ); - break; - case "mute": - this.media.mute( data.value ); - break; - default: - break; - } - } - // If there are files in the queue but no current media file. - else if( (this.media.playQueue.length > 0) && !this.media.mediaFile ) { - // They interacted with the player. Always autoload at this point on. - this.autoLoad = true; - - // Then play the next file in the queue. - this.playNext(); - } - - // Let the template do something... - if( settings.template && settings.template.onControlUpdate ) { - settings.template.onControlUpdate( data ); - } - } - }; - - // Handle the full screen event requests. - this.fullScreen = function( full ) { - if( settings.template.onFullScreen ) { - settings.template.onFullScreen( full ); - } - - // Refresh the preview image. - this.preview.refresh(); - }; - - // Handle when the preview image loads. - this.onPreviewLoaded = function() { - this.previewVisible = true; - }; - - // Handle the media events. - this.onMediaUpdate = function( data ) { - switch( data.type ) { - case "paused": - this.playing = false; - this.showPlay(true); - //this.showBusy(1, false); - if( !this.media.loaded ) { - this.showPreview(true); - } - break; - case "update": - case "playing": - this.playing = true; - this.showPlay(false); - this.showPreview((this.media.mediaFile.type == "audio")); - break; - case "initialize": - this.playing = false; - this.showPlay(true); - this.showBusy(1, this.autoLoad); - this.showPreview(true); - break; - case "buffering": - this.showPlay(true); - this.showPreview((this.media.mediaFile.type == "audio")); - break; - default: - break; - } - - // If they provide a busy cursor. - if( data.busy ) { - this.showBusy(1, (data.busy == "show")); - } - }; - - // Called when the media is clicked. - this.onMediaClick = function() { - if( this.media.player && !this.media.hasControls() ) { - if( this.playing ) { - this.media.player.pauseMedia(); - } - else { - this.media.player.playMedia(); - } - } - }; - - // Set the media player. - this.media = this.display.find( settings.ids.media ).mediadisplay( settings ); - if( this.media ) { - // If they click on the media region, then pause the media. - this.media.display.unbind("click").bind("click", function() { - _this.onMediaClick(); - }); - } - - // Sets the logo position. - this.setLogoPos = function() { - if( this.logo ) { - var logocss = {}; - if( settings.logopos=='se' || settings.logopos=='sw' ) { - logocss['bottom'] = settings.logoy; - } - if( settings.logopos=='ne' || settings.logopos=='nw' ) { - logocss['top'] = settings.logoy; - } - if( settings.logopos=='nw' || settings.logopos=='sw' ) { - logocss['left'] = settings.logox; - } - if( settings.logopos=='ne' || settings.logopos=='se' ) { - logocss['right'] = settings.logox; - } - this.logo.display.css(logocss); - } - }; - - // Add the logo. - if( !settings.controllerOnly ) { - this.display.prepend(''); - this.logo = this.display.find("." + settings.prefix + "medialogo").mediaimage( settings.link ); - if( this.logo ) { - this.logo.display.css({ - width:settings.logoWidth, - height:settings.logoHeight - }); - this.logo.display.bind("imageLoaded", function() { - _this.setLogoPos(); - }); - this.logo.loadImage( settings.logo ); - } - } - - // Reset to previous state... - this.reset = function() { - this.hasMedia = false; - this.playing = false; - jQuery.media.players[settings.id].showNativeControls(false); - this.showPlay(true); - this.showPreview(true); - clearTimeout( this.timeoutId ); - if( this.media ) { - this.media.reset(); - } - }; - - // Toggle the play/pause state. - this.togglePlayPause = function() { - if( this.media ) { - if( this.media.playerReady ) { - if( this.playing ) { - this.showPlay(true); - this.media.player.pauseMedia(); - } - else { - this.showPlay(false); - this.media.player.playMedia(); - } - } - else if( (this.media.playQueue.length > 0) && !this.media.mediaFile ) { - // They interacted with the player. Always autoload at this point on. - this.autoLoad = true; - - // Then play the next file in the queue. - this.playNext(); - } - } - }; - - // Loads an image... - this.loadImage = function( image ) { - if( this.preview ) { - // Show a busy cursor for the image loading... - this.showBusy(3, true); - - // Load the image. - this.preview.loadImage( image ); - - // Set and interval to check if the image is loaded. - var imageInterval = setInterval(function() { - - // If the image is loaded, then clear the interval. - if (_this.preview.loaded()) { - - // Clear the interval and stop the busy cursor. - clearInterval(imageInterval); - _this.showBusy(3, false); - } - }, 500); - - // Now set the preview image in the media player. - if( this.media ) { - this.media.preview = image; - } - } - }; - - this.onResize = function() { - if( this.preview ) { - this.preview.refresh(); - } - - if( this.media ) { - this.media.onResize(); - } - }; - - // Clears the loaded image. - this.clearImage = function() { - if( this.preview ) { - this.preview.clear(); - } - }; - - // Expose the public load functions from the media display. - this.loadFiles = function( files ) { - this.reset(); - this.hasMedia = this.media && this.media.loadFiles(files); - if( this.hasMedia && this.autoLoad ) { - this.media.playNext(); - } - else if( !this.hasMedia ) { - // Hide the overlays for non-media types. - this.showPlay(false); - this.showPreview(true); - this.timeoutId = setTimeout( function() { - _this.media.display.trigger( "mediaupdate", {type:"complete"} ); - }, (settings.timeout * 1000) ); - } - return this.hasMedia; - }; - - // Play the next file. - this.playNext = function() { - if( this.media ) { - this.media.playNext(); - } - }; - - // Check the player for controls. - this.hasControls = function() { - if( this.media ) { - return this.media.hasControls(); - } - return true; - }; - - // Show the native controls. - this.showControls = function( show ) { - if( this.media ) { - this.media.showControls( show ); - } - }; - - // Loads a single media file. - this.loadMedia = function( file ) { - this.reset(); - if( this.media ) { - this.media.loadMedia( file ); - } - }; - - // If they provide a file, then load it. - if( settings.file ) { - this.loadMedia( settings.file ); - } - - // If they provide the image, then load it. - if( settings.image ) { - this.loadImage( settings.image ); - } - })( this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - window.onVimeoReady = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - window.onVimeoFinish = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onFinished(); - }; - - window.onVimeoLoading = function( data, playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onLoading( data ); - }; - - window.onVimeoPlay = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onPlaying(); - }; - - window.onVimeoPause = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onPaused(); - }; - - window.onVimeoProgress = function( time, playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onProgress(time); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "vimeo":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i) === 0); - } - }); - - jQuery.fn.mediavimeo = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.ready = false; - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.currentVolume = 1; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var flashvars = { - clip_id:this.getId(videoFile.path), - width:"100%", - height:"100%", - js_api:'1', - js_onLoad:'onVimeoReady', - js_swf_id:playerId - }; - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://vimeo.com/moogaloop.swf?rand=' + rand; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - flashvars, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.getId = function( path ) { - var regex = /^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i; - return (path.search(regex) === 0) ? path.replace(regex, "$3") : path; - }; - - this.loadMedia = function( videoFile ) { - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.createMedia( videoFile ); - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - // Load the player. - this.loadPlayer = function() { - if( this.ready && this.player && this.player.api_addEventListener ) { - // Add our event listeners. - this.player.api_addEventListener('onProgress', 'onVimeoProgress'); - this.player.api_addEventListener('onFinish', 'onVimeoFinish'); - this.player.api_addEventListener('onLoading', 'onVimeoLoading'); - this.player.api_addEventListener('onPlay', 'onVimeoPlay'); - this.player.api_addEventListener('onPause', 'onVimeoPause'); - - // Let them know the player is ready. - onUpdate({ - type:"playerready" - }); - - this.playMedia(); - } - }; - - this.onFinished = function() { - onUpdate({ - type:"complete" - }); - }; - - this.onLoading = function( data ) { - this.bytesLoaded = data.bytesLoaded; - this.bytesTotal = data.bytesTotal; - }; - - this.onPlaying = function() { - onUpdate({ - type:"playing", - busy:"hide" - }); - }; - - this.onPaused = function() { - onUpdate({ - type:"paused", - busy:"hide" - }); - }; - - this.playMedia = function() { - onUpdate({ - type:"playing", - busy:"hide" - }); - if (this.player.api_play) { - this.player.api_play(); - } - }; - - this.onProgress = function( time ) { - onUpdate({ - type:"progress" - }); - }; - - this.pauseMedia = function() { - onUpdate({ - type:"paused", - busy:"hide" - }); - if (this.player.api_pause) { - this.player.api_pause(); - } - }; - - this.stopMedia = function() { - this.pauseMedia(); - if (this.player.api_unload) { - this.player.api_unload(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if (this.player.api_seekTo) { - this.player.api_seekTo( pos ); - } - }; - - this.setVolume = function( vol ) { - this.currentVolume = vol; - if (this.player.api_setVolume) { - this.player.api_setVolume( (vol*100) ); - } - }; - - // For some crazy reason... Vimeo has not implemented this... so just cache the value. - this.getVolume = function() { - return this.currentVolume; - }; - - this.getDuration = function() { - return this.player.api_getDuration ? this.player.api_getDuration() : 0; - }; - - this.getCurrentTime = function() { - return this.player.api_getCurrentTime ? this.player.api_getCurrentTime() : 0; - }; - - this.getBytesLoaded = function() { - return this.bytesLoaded; - }; - - this.getBytesTotal = function() { - return this.bytesTotal; - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - this.hasControls = function() { - return true; - }; - this.showControls = function(show) {}; - //this.setSize = function( newWidth, newHeight ) {}; - this.getEmbedCode = function() { - return "This video cannot be embedded."; - }; - this.getMediaLink = function() { - return "This video currently does not have a link."; - }; - })( this, options, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Called when the YouTube player is ready. - window.onYouTubePlayerReady = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "youtube":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i) === 0); - } - }); - - jQuery.fn.mediayoutube = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.loaded = false; - this.ready = false; - this.qualities = []; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://www.youtube.com/apiplayer?rand=' + rand + '&version=3&enablejsapi=1&playerapiid=' + playerId; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - {}, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.getId = function( path ) { - var regex = /^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i; - return (path.search(regex) === 0) ? path.replace(regex, "$2") : path; - }; - - this.loadMedia = function( videoFile ) { - if( this.player ) { - this.loaded = false; - this.videoFile = videoFile; - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - if (this.player.loadVideoById) { - this.player.loadVideoById( this.getId( this.videoFile.path ), 0, options.quality ); - } - } - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - // Try to load the player. - this.loadPlayer = function() { - if( this.ready && this.player ) { - // Create our callback functions. - window[options.id + 'StateChange'] = function( newState ) { - _this.onStateChange( newState ); - }; - - window[options.id + 'PlayerError'] = function( errorCode ) { - _this.onError( errorCode ); - }; - - window[options.id + 'QualityChange'] = function( newQuality ) { - _this.quality = newQuality; - }; - - // Add our event listeners. - if (this.player.addEventListener) { - this.player.addEventListener('onStateChange', options.id + 'StateChange'); - this.player.addEventListener('onError', options.id + 'PlayerError'); - this.player.addEventListener('onPlaybackQualityChange', options.id + 'QualityChange'); - } - - // Get all of the quality levels. - if (this.player.getAvailableQualityLevels) { - this.qualities = this.player.getAvailableQualityLevels(); - } - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - }); - - // Load our video. - if (this.player.loadVideoById) { - this.player.loadVideoById( this.getId( this.videoFile.path ), 0 ); - } - } - }; - - // Called when the YouTube player state changes. - this.onStateChange = function( newState ) { - var playerState = this.getPlayerState( newState ); - onUpdate( { - type:playerState.state, - busy:playerState.busy - } ); - - if( !this.loaded && playerState == "playing" ) { - // Set this player to loaded. - this.loaded = true; - - // Update our meta data. - onUpdate( { - type:"meta" - } ); - } - }; - - // Called when the YouTube player has an error. - this.onError = function( errorCode ) { - var errorText = "An unknown error has occured: " + errorCode; - if( errorCode == 100 ) { - errorText = "The requested video was not found. "; - errorText += "This occurs when a video has been removed (for any reason), "; - errorText += "or it has been marked as private."; - } else if( (errorCode == 101) || (errorCode == 150) ) { - errorText = "The video requested does not allow playback in an embedded player."; - } - if( window.console && console.log ) { - console.log(errorText); - } - onUpdate( { - type:"error", - data:errorText - } ); - }; - - // Translates the player state for the YouTube API player. - this.getPlayerState = function( playerState ) { - switch (playerState) { - case 5: - return {state:'ready', busy:false}; - case 3: - return {state:'buffering', busy:"show"}; - case 2: - return {state:'paused', busy:"hide"}; - case 1: - return {state:'playing', busy:"hide"}; - case 0: - return {state:'complete', busy:false}; - case -1: - return {state:'stopped', busy:false}; - default: - return {state:'unknown', busy:false}; - } - return 'unknown'; - }; - /* - this.setSize = function( newWidth, newHeight ) { - //this.player.setSize(newWidth, newHeight); - }; - */ - this.playMedia = function() { - onUpdate({ - type:"buffering", - busy:"show" - }); - if (this.player.playVideo) { - this.player.playVideo(); - } - }; - - this.pauseMedia = function() { - if (this.player.pauseVideo) { - this.player.pauseVideo(); - } - }; - - this.stopMedia = function() { - if (this.player.stopVideo) { - this.player.stopVideo(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - onUpdate({ - type:"buffering", - busy:"show" - }); - if (this.player.seekTo) { - this.player.seekTo( pos, true ); - } - }; - - this.setVolume = function( vol ) { - if (this.player.setVolume) { - this.player.setVolume( vol * 100 ); - } - }; - - this.setQuality = function( quality ) { - if (this.player.setPlaybackQuality) { - this.player.setPlaybackQuality( quality ); - } - }; - - this.getVolume = function() { - return this.player.getVolume ? (this.player.getVolume() / 100) : 0; - }; - - this.getDuration = function() { - return this.player.getDuration ? this.player.getDuration() : 0; - }; - - this.getCurrentTime = function() { - return this.player.getCurrentTime ? this.player.getCurrentTime() : 0; - }; - - this.getQuality = function() { - return this.player.getPlaybackQuality ? this.player.getPlaybackQuality() : 0; - }; - - this.getEmbedCode = function() { - return this.player.getVideoEmbedCode ? this.player.getVideoEmbedCode() : 0; - }; - - this.getMediaLink = function() { - return this.player.getVideoUrl ? this.player.getVideoUrl() : 0; - }; - - this.getBytesLoaded = function() { - return this.player.getVideoBytesLoaded ? this.player.getVideoBytesLoaded() : 0; - }; - - this.getBytesTotal = function() { - return this.player.getVideoBytesTotal ? this.player.getVideoBytesTotal() : 0; - }; - - this.hasControls = function() { - return false; - }; - this.showControls = function(show) {}; - })( this, options, onUpdate ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/jquery.osmplayer.compressed.js b/js/jquery.osmplayer.compressed.js deleted file mode 100644 index f6a4348c..00000000 --- a/js/jquery.osmplayer.compressed.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(c){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media=jQuery.extend({},{auto:function(d){return new (function(e){this.json=jQuery.media.json(e);this.rpc=jQuery.media.rpc(e);this.call=function(j,i,f,h,g){if(g=="json"){this.json.call(j,i,f,h,g);}else{this.rpc.call(j,i,f,h,g);}};})(d);}},jQuery.media);jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{volumeVertical:false});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{currentTime:"#mediacurrenttime",totalTime:"#mediatotaltime",playPause:"#mediaplaypause",seekUpdate:"#mediaseekupdate",seekProgress:"#mediaseekprogress",seekBar:"#mediaseekbar",seekHandle:"#mediaseekhandle",volumeUpdate:"#mediavolumeupdate",volumeBar:"#mediavolumebar",volumeHandle:"#mediavolumehandle",mute:"#mediamute"});jQuery.fn.mediacontrol=function(d){if(this.length===0){return null;}return new (function(g,e){e=jQuery.media.utils.getSettings(e);this.display=g;var h=this;this.formatTime=(e.template&&e.template.formatTime)?e.template.formatTime:function(l){l=l?l:0;var m=0;var j=0;var i=0;i=Math.floor(l/3600);l-=(i*3600);j=Math.floor(l/60);l-=(j*60);m=Math.floor(l%60);var k="";if(i){k+=String(i);k+=":";}k+=(j>=10)?String(j):("0"+String(j));k+=":";k+=(m>=10)?String(m):("0"+String(m));return{time:k,units:""};};this.setToggle=function(j,k){var i=k?".on":".off";var l=k?".off":".on";if(j){j.find(i).show();j.find(l).hide();}};var f=this.formatTime(0);this.duration=0;this.volume=-1;this.prevVolume=0;this.percentLoaded=0;this.playState=false;this.muteState=false;this.currentTime=g.find(e.ids.currentTime).text(f.time);this.totalTime=g.find(e.ids.totalTime).text(f.time);this.display.find("a.mediaplayerlink").each(function(){var i=c(this).attr("href");c(this).medialink(e,function(j){j.preventDefault();h.display.trigger(j.data.id);},{id:i.substr(1),obj:c(this)});});this.playPauseButton=g.find(e.ids.playPause).medialink(e,function(i,j){h.playState=!h.playState;h.setToggle(j,h.playState);h.display.trigger("controlupdate",{type:(h.playState?"pause":"play")});});this.seekUpdate=g.find(e.ids.seekUpdate).css("width",0);this.seekProgress=g.find(e.ids.seekProgress).css("width",0);this.seekBar=g.find(e.ids.seekBar).mediaslider(e.ids.seekHandle,false);if(this.seekBar){this.seekBar.display.unbind("setvalue").bind("setvalue",function(i,j){h.seekUpdate.css("width",(j*h.seekBar.trackSize)+"px");h.display.trigger("controlupdate",{type:"seek",value:(j*h.duration)});});this.seekBar.display.unbind("updatevalue").bind("updatevalue",function(i,j){h.seekUpdate.css("width",(j*h.seekBar.trackSize)+"px");});}this.setVolume=function(i){if(this.volumeBar){if(e.volumeVertical){this.volumeUpdate.css({marginTop:(this.volumeBar.handlePos+this.volumeBar.handleMid),height:(this.volumeBar.trackSize-this.volumeBar.handlePos)});}else{this.volumeUpdate.css("width",(i*this.volumeBar.trackSize));}}};this.volumeUpdate=g.find(e.ids.volumeUpdate);this.volumeBar=g.find(e.ids.volumeBar).mediaslider(e.ids.volumeHandle,e.volumeVertical,e.volumeVertical);if(this.volumeBar){this.volumeBar.display.unbind("setvalue").bind("setvalue",function(i,j){h.setVolume(j);h.display.trigger("controlupdate",{type:"volume",value:j});});this.volumeBar.display.unbind("updatevalue").bind("updatevalue",function(i,j){h.setVolume(j);h.volume=j;});}this.mute=g.find(e.ids.mute).medialink(e,function(i,j){h.muteState=!h.muteState;h.setToggle(j,h.muteState);h.setMute(h.muteState);});this.setMute=function(i){this.prevVolume=(this.volumeBar.value>0)?this.volumeBar.value:this.prevVolume;this.volumeBar.updateValue(i?0:this.prevVolume);this.display.trigger("controlupdate",{type:"mute",value:i});};this.setProgress=function(i){if(this.seekProgress&&this.seekBar){this.seekProgress.css("width",(i*(this.seekBar.trackSize+this.seekBar.handleSize)));}};this.onResize=function(){if(this.seekBar){this.seekBar.onResize();}this.setProgress(this.percentLoaded);};this.onMediaUpdate=function(i){switch(i.type){case"reset":this.reset();break;case"paused":this.playState=true;this.setToggle(this.playPauseButton.display,this.playState);break;case"playing":this.playState=false;this.setToggle(this.playPauseButton.display,this.playState);break;case"stopped":this.playState=true;this.setToggle(this.playPauseButton.display,this.playState);break;case"progress":this.percentLoaded=i.percentLoaded;this.setProgress(this.percentLoaded);break;case"meta":case"update":this.timeUpdate(i.currentTime,i.totalTime);if(this.volumeBar){this.volumeBar.updateValue(i.volume);}break;default:break;}};this.reset=function(){this.totalTime.text(this.formatTime(0).time);this.currentTime.text(this.formatTime(0).time);if(this.seekBar){this.seekBar.updateValue(0);}this.seekUpdate.css("width","0px");this.seekProgress.css("width","0px");};this.timeUpdate=function(i,j){this.duration=j;this.totalTime.text(this.formatTime(j).time);this.currentTime.text(this.formatTime(i).time);if(j&&this.seekBar&&!this.seekBar.dragging){this.seekBar.updateValue(i/j);}};this.timeUpdate(0,0);})(this,d);};window.onDailymotionPlayerReady=function(d){d=d.replace("_media","");jQuery.media.players[d].node.player.media.player.onReady();};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{dailymotion:function(d){return(d.search(/^http(s)?\:\/\/(www\.)?dailymotion\.com/i)===0);}});jQuery.fn.mediadailymotion=function(e,d){return new (function(h,g,f){this.display=h;var i=this;this.player=null;this.videoFile=null;this.meta=false;this.loaded=false;this.ready=false;this.createMedia=function(k,m){this.videoFile=k;this.ready=false;var j=(g.id+"_media");var l=Math.floor(Math.random()*1000000);var n="http://www.dailymotion.com/swf/"+k.path+"?rand="+l+"&enablejsapi=1&playerapiid="+j;jQuery.media.utils.insertFlash(this.display,n,j,"100%","100%",{},g.wmode,function(o){i.player=o;i.loadPlayer();});};this.loadMedia=function(j){if(this.player){this.loaded=false;this.meta=false;this.videoFile=j;f({type:"playerready"});this.player.loadVideoById(this.videoFile.path,0);}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){window[g.id+"StateChange"]=function(j){i.onStateChange(j);};window[g.id+"PlayerError"]=function(j){i.onError(j);};this.player.addEventListener("onStateChange",g.id+"StateChange");this.player.addEventListener("onError",g.id+"PlayerError");f({type:"playerready"});this.player.loadVideoById(this.videoFile.path,0);}};this.onStateChange=function(k){var j=this.getPlayerState(k);if(!(!this.meta&&j.state=="stopped")){f({type:j.state,busy:j.busy});}if(!this.loaded&&j.state=="buffering"){this.loaded=true;f({type:"paused",busy:"hide"});if(g.autostart){this.playMedia();}}if(!this.meta&&j.state=="playing"){this.meta=true;f({type:"meta"});}};this.onError=function(k){var j="An unknown error has occured: "+k;if(k==100){j="The requested video was not found. ";j+="This occurs when a video has been removed (for any reason), ";j+="or it has been marked as private.";}else{if((k==101)||(k==150)){j="The video requested does not allow playback in an embedded player.";}}f({type:"error",data:j});};this.getPlayerState=function(j){switch(j){case 5:return{state:"ready",busy:false};case 3:return{state:"buffering",busy:"show"};case 2:return{state:"paused",busy:"hide"};case 1:return{state:"playing",busy:"hide"};case 0:return{state:"complete",busy:false};case -1:return{state:"stopped",busy:false};default:return{state:"unknown",busy:false};}return"unknown";};this.playMedia=function(){f({type:"buffering",busy:"show"});this.player.playVideo();};this.pauseMedia=function(){this.player.pauseVideo();};this.stopMedia=function(){this.player.stopVideo();};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(g.id+"_media"));this.display.children().remove();};this.seekMedia=function(j){f({type:"buffering",busy:"show"});this.player.seekTo(j,true);};this.setVolume=function(j){this.player.setVolume(j*100);};this.getVolume=function(){return(this.player.getVolume()/100);};this.getDuration=function(){return this.player.getDuration();};this.getCurrentTime=function(){return this.player.getCurrentTime();};this.getBytesLoaded=function(){return this.player.getVideoBytesLoaded();};this.getBytesTotal=function(){return this.player.getVideoBytesTotal();};this.getEmbedCode=function(){return this.player.getVideoEmbedCode();};this.getMediaLink=function(){return this.player.getVideoUrl();};this.hasControls=function(){return true;};this.showControls=function(j){};this.setQuality=function(j){};this.getQuality=function(){return"";};})(this,e,d);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{volume:80,autostart:false,streamer:"",embedWidth:450,embedHeight:337,wmode:"transparent",forceOverflow:false,quality:"default",repeat:false});jQuery.fn.mediadisplay=function(d){if(this.length===0){return null;}return new (function(f,e){this.settings=jQuery.media.utils.getSettings(e);this.display=f;var g=this;this.volume=-1;this.player=null;this.preview="";this.updateInterval=null;this.progressInterval=null;this.playQueue=[];this.playIndex=0;this.playerReady=false;this.loaded=false;this.mediaFile=null;this.hasPlaylist=false;if(this.settings.forceOverflow){this.display.parents().css("overflow","visible");}this.reset=function(){this.loaded=false;this.stopMedia();clearInterval(this.progressInterval);clearInterval(this.updateInterval);this.playQueue.length=0;this.playQueue=[];this.playIndex=0;this.playerReady=false;this.mediaFile=null;this.display.empty().trigger("mediaupdate",{type:"reset"});};this.getPlayableMedia=function(l){var k=null;var h=l.length;while(h--){var j=new jQuery.media.file(l[h],this.settings);if(!k||(j.weight0);if(!h){if(this.player){this.player.destroy();this.player=null;}this.display.trigger("mediaupdate",{type:"nomedia"});}return h;};this.playNext=function(){if(this.playQueue.length>this.playIndex){this.loadMedia(this.playQueue[this.playIndex]);this.playIndex++;}else{if(this.settings.repeat){this.playIndex=0;this.playNext();}else{if(this.hasPlaylist){this.reset();}else{this.loaded=false;this.settings.autostart=false;this.playIndex=0;this.playNext();}}}};this.loadMedia=function(i,h){if(i){i=new jQuery.media.file(this.getMediaFile(i),this.settings);i.player=h?h:i.player;this.stopMedia();if(!this.mediaFile||(this.mediaFile.player!=i.player)){this.player=null;this.playerReady=false;if(i.player){this.player=this.display["media"+i.player](this.settings,function(j){g.onMediaUpdate(j);});}if(this.player){this.player.createMedia(i,this.preview);}}else{if(this.player){this.player.loadMedia(i);}}this.mediaFile=i;this.onMediaUpdate({type:"initialize"});}};this.onMediaUpdate=function(i){switch(i.type){case"playerready":this.playerReady=true;this.player.setVolume(0);this.player.setQuality(this.settings.quality);this.startProgress();break;case"buffering":this.startProgress();break;case"stopped":clearInterval(this.progressInterval);clearInterval(this.updateInterval);break;case"error":if(i.code==4){this.loadMedia(this.mediaFile,"flash");}else{clearInterval(this.progressInterval);clearInterval(this.updateInterval);}break;case"paused":clearInterval(this.updateInterval);break;case"playing":this.startUpdate();break;case"progress":var h=this.getPercentLoaded();jQuery.extend(i,{percentLoaded:h});if(h>=1){clearInterval(this.progressInterval);}break;case"meta":jQuery.extend(i,{currentTime:this.player.getCurrentTime(),totalTime:this.getDuration(),volume:this.player.getVolume(),quality:this.getQuality()});break;case"durationupdate":this.mediaFile.duration=i.duration;break;case"complete":this.playNext();break;default:break;}if(i.type=="playing"&&!this.loaded){if(this.settings.autoLoad&&!this.settings.autostart){setTimeout(function(){g.setVolume();g.player.pauseMedia();g.settings.autostart=true;g.loaded=true;},100);}else{this.loaded=true;this.setVolume();this.display.trigger("mediaupdate",i);}}else{this.display.trigger("mediaupdate",i);}};this.startProgress=function(){if(this.playerReady){clearInterval(this.progressInterval);this.progressInterval=setInterval(function(){g.onMediaUpdate({type:"progress"});},500);}};this.startUpdate=function(){if(this.playerReady){clearInterval(this.updateInterval);this.updateInterval=setInterval(function(){if(g.playerReady){g.onMediaUpdate({type:"update",currentTime:g.player.getCurrentTime(),totalTime:g.getDuration(),volume:g.player.getVolume(),quality:g.getQuality()});}},1000);}};this.stopMedia=function(){this.loaded=false;clearInterval(this.progressInterval);clearInterval(this.updateInterval);if(this.playerReady){this.player.stopMedia();}};this.mute=function(h){this.player.setVolume(h?0:this.volume);};this.onResize=function(){if(this.player&&this.player.onResize){this.player.onResize();}};this.getPercentLoaded=function(){if(this.player.getPercentLoaded){return this.player.getPercentLoaded();}else{var i=this.player.getBytesLoaded();var h=this.mediaFile.bytesTotal?this.mediaFile.bytesTotal:this.player.getBytesTotal();return h?(i/h):0;}};this.showControls=function(h){if(this.playerReady){this.player.showControls(h);}};this.hasControls=function(){if(this.player){return this.player.hasControls();}return false;};this.getDuration=function(){if(this.mediaFile){if(!this.mediaFile.duration){this.mediaFile.duration=this.player.getDuration();}return this.mediaFile.duration;}else{return 0;}};this.setVolume=function(h){this.volume=h?h:((this.volume==-1)?(this.settings.volume/100):this.volume);if(this.player){this.player.setVolume(this.volume);}};this.getVolume=function(){if(!this.volume){this.volume=this.player.getVolume();}return this.volume;};this.getQuality=function(){if(!this.mediaFile.quality){this.mediaFile.quality=this.player.getQuality();}return this.mediaFile.quality;};})(this,d);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{apiKey:"",api:2,sessid:"",drupalVersion:6});jQuery.media=jQuery.extend({},{drupal:function(e,d){return new (function(k,j){j=jQuery.media.utils.getSettings(j);var l=this;var g=(j.apiKey.length>0);var i=(j.api==1);var f=(j.drupalVersion>=6)?"node.get":"node.load";var h=(j.protocol=="auto");jQuery.media=jQuery.extend({},{commands:{connect:{command:{rpc:"system.connect",json:""},useKey:i,protocol:"rpc"},mail:{command:{rpc:"system.mail",json:""},useKey:g,protocol:"rpc"},loadNode:{command:{rpc:f,json:"mediafront_getnode"},useKey:i,protocol:"json"},getPlaylist:{command:{rpc:"mediafront.getPlaylist",json:"mediafront_getplaylist"},useKey:i,protocol:"json"},getVote:{command:{rpc:"vote.getVote",json:""},useKey:i,protocol:"rpc"},setVote:{command:{rpc:"vote.setVote",json:""},useKey:g,protocol:"rpc"},getUserVote:{command:{rpc:"vote.getUserVote",json:""},useKey:i,protocol:"rpc"},deleteVote:{command:{rpc:"vote.deleteVote",json:""},useKey:g,protocol:"rpc"},addTag:{command:{rpc:"tag.addTag",json:""},useKey:g,protocol:"rpc"},incrementCounter:{command:{rpc:"mediafront.incrementNodeCounter",json:""},useKey:g,protocol:"rpc"},setFavorite:{command:{rpc:"favorites.setFavorite",json:""},useKey:g,protocol:"rpc"},deleteFavorite:{command:{rpc:"favorites.deleteFavorite",json:""},useKey:g,protocol:"rpc"},isFavorite:{command:{rpc:"favorites.isFavorite",json:""},useKey:i,protocol:"rpc"},login:{command:{rpc:"user.login",json:""},useKey:g,protocol:"rpc"},logout:{command:{rpc:"user.logout",json:""},useKey:g,protocol:"rpc"},adClick:{command:{rpc:"mediafront.adClick",json:""},useKey:g,protocol:"rpc"},getAd:{command:{rpc:"mediafront.getAd",json:""},useKey:i,protocol:"rpc"},setUserStatus:{command:{rpc:"mediafront.setUserStatus",json:""},useKey:g,protocol:"rpc"}}},jQuery.media);this.user={};this.sessionId="";this.onConnected=null;this.encoder=new jQuery.media.sha256();this.baseURL=j.baseURL.substring(0,(j.baseURL.length-1)).replace(/^(http[s]?\:[\\\/][\\\/])/,"");this.connect=function(m){this.onConnected=m;if(j.sessid){this.onConnect({sessid:j.sessid});}else{this.call(jQuery.media.commands.connect,function(n){l.onConnect(n);},null);}};this.call=function(r,q,o){var m=[];for(var n=3;n1){var o=this.getTimeStamp();var n=this.getNonce();var p=this.computeHMAC(o,this.baseURL,n,q.command.rpc,j.apiKey);m.unshift(n);m.unshift(o);m.unshift(this.baseURL);m.unshift(p);}else{m.unshift(j.apiKey);}}return m;};this.getTimeStamp=function(){return(parseInt(new Date().getTime()/1000,10)).toString();};this.getNonce=function(){var p="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";var n="";for(var o=0;o<10;o++){var m=Math.floor(Math.random()*p.length);n+=p.substring(m,m+1);}return n;};this.computeHMAC=function(p,o,n,r,q){var m=p+";"+o+";"+n+";"+r;return this.encoder.encrypt(q,m);};this.onConnect=function(m){if(m){this.sessionId=m.sessid;this.user=m.user;}if(this.onConnected){this.onConnected(m);}};})(e,d);}},jQuery.media);jQuery.media.checkPlayType=function(e,d){if((typeof e.canPlayType)=="function"){return("no"!==e.canPlayType(d))&&(""!==e.canPlayType(d));}else{return false;}};jQuery.media.getPlayTypes=function(){var d={};var e=document.createElement("video");d.ogg=jQuery.media.checkPlayType(e,'video/ogg; codecs="theora, vorbis"');d.h264=jQuery.media.checkPlayType(e,'video/mp4; codecs="avc1.42E01E, mp4a.40.2"');d.webm=jQuery.media.checkPlayType(e,'video/webm; codecs="vp8, vorbis"');e=document.createElement("audio");d.audioOgg=jQuery.media.checkPlayType(e,"audio/ogg");d.mp3=jQuery.media.checkPlayType(e,"audio/mpeg");return d;};jQuery.media.playTypes=null;jQuery.media.file=function(d,e){if(!jQuery.media.playTypes){jQuery.media.playTypes=jQuery.media.getPlayTypes();}d=(typeof d==="string")?{path:d}:d;this.duration=d.duration?d.duration:0;this.bytesTotal=d.bytesTotal?d.bytesTotal:0;this.quality=d.quality?d.quality:0;this.stream=e.streamer?e.streamer:d.stream;this.path=d.path?jQuery.trim(d.path):(e.baseURL+jQuery.trim(d.filepath));this.extension=d.extension?d.extension:this.getFileExtension();this.weight=d.weight?d.weight:this.getWeight();this.player=d.player?d.player:this.getPlayer();this.mimetype=d.mimetype?d.mimetype:this.getMimeType();this.type=d.type?d.type:this.getType();};jQuery.media.file.prototype.getFileExtension=function(){return this.path.substring(this.path.lastIndexOf(".")+1).toLowerCase();};jQuery.media.file.prototype.getPlayer=function(){switch(this.extension){case"ogg":case"ogv":return jQuery.media.playTypes.ogg?"html5":"flash";case"mp4":case"m4v":return jQuery.media.playTypes.h264?"html5":"flash";case"webm":return jQuery.media.playTypes.webm?"html5":"flash";case"oga":return jQuery.media.playTypes.audioOgg?"html5":"flash";case"mp3":return jQuery.media.playTypes.mp3?"html5":"flash";case"swf":case"flv":case"f4v":case"f4a":case"mov":case"3g2":case"3gp":case"3gpp":case"m4a":case"aac":case"wav":case"aif":case"wma":return"flash";default:for(var d in jQuery.media.playerTypes){if(jQuery.media.playerTypes.hasOwnProperty(d)){if(jQuery.media.playerTypes[d](this.path)){return d;}}}break;}return"flash";};jQuery.media.file.prototype.getType=function(){switch(this.extension){case"swf":case"webm":case"ogg":case"ogv":case"mp4":case"m4v":case"flv":case"f4v":case"mov":case"3g2":case"3gp":case"3gpp":return"video";case"oga":case"mp3":case"f4a":case"m4a":case"aac":case"wav":case"aif":case"wma":return"audio";default:break;}return"";};jQuery.media.file.prototype.getWeight=function(){switch(this.extension){case"mp4":case"m4v":case"m4a":return jQuery.media.playTypes.h264?3:7;case"webm":return jQuery.media.playTypes.webm?4:8;case"ogg":case"ogv":return jQuery.media.playTypes.ogg?5:20;case"oga":return jQuery.media.playTypes.audioOgg?5:20;case"mp3":return 6;case"mov":case"swf":case"flv":case"f4v":case"f4a":case"3g2":case"3gp":case"3gpp":return 9;case"wav":case"aif":case"aac":return 10;case"wma":return 11;default:break;}return 0;};jQuery.media.file.prototype.getMimeType=function(){switch(this.extension){case"mp4":case"m4v":case"flv":case"f4v":return"video/mp4";case"webm":return"video/x-webm";case"ogg":case"ogv":return"video/ogg";case"3g2":return"video/3gpp2";case"3gpp":case"3gp":return"video/3gpp";case"mov":return"video/quicktime";case"swf":return"application/x-shockwave-flash";case"oga":return"audio/ogg";case"mp3":return"audio/mpeg";case"m4a":case"f4a":return"audio/mp4";case"aac":return"audio/aac";case"wav":return"audio/vnd.wave";case"wma":return"audio/x-ms-wma";default:break;}return"";};window.onFlashPlayerReady=function(d){jQuery.media.players[d].node.player.media.player.onReady();};window.onFlashPlayerUpdate=function(e,d){jQuery.media.players[e].node.player.media.player.onMediaUpdate(d);};window.onFlashPlayerDebug=function(d){if(window.console&&console.log){console.log(d);}};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{flashPlayer:"./flash/mediafront.swf",skin:"default",config:"nocontrols"});jQuery.fn.mediaflash=function(e,d){return new (function(h,g,f){g=jQuery.media.utils.getSettings(g);this.display=h;var i=this;this.player=null;this.mediaFile=null;this.preview="";this.ready=false;this.translate={mediaConnected:"connected",mediaBuffering:"buffering",mediaPaused:"paused",mediaPlaying:"playing",mediaStopped:"stopped",mediaComplete:"complete",mediaMeta:"meta"};this.busy={mediaConnected:false,mediaBuffering:"show",mediaPaused:"hide",mediaPlaying:"hide",mediaStopped:false,mediaComplete:false,mediaMeta:false};this.createMedia=function(j,n){this.mediaFile=j;this.preview=n;this.ready=false;var l=(g.id+"_media");var m=Math.floor(Math.random()*1000000);var o=g.flashPlayer+"?rand="+m;var k={config:g.config,id:g.id,file:j.path,image:this.preview,skin:g.skin,autostart:(g.autostart||!g.autoLoad)};if(j.stream){k.stream=j.stream;}if(g.debug){k.debug="1";}jQuery.media.utils.insertFlash(this.display,o,l,"100%","100%",k,g.wmode,function(p){i.player=p;i.loadPlayer();});};this.loadMedia=function(j){if(this.player&&this.ready){this.mediaFile=j;this.player.loadMedia(j.path,j.stream);f({type:"playerready"});}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){f({type:"playerready"});}};this.onMediaUpdate=function(j){f({type:this.translate[j],busy:this.busy[j]});};this.playMedia=function(){if(this.player&&this.ready){this.player.playMedia();}};this.pauseMedia=function(){if(this.player&&this.ready){this.player.pauseMedia();}};this.stopMedia=function(){if(this.player&&this.ready){this.player.stopMedia();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(g.id+"_media"));this.display.children().remove();};this.seekMedia=function(j){if(this.player&&this.ready){this.player.seekMedia(j);}};this.setVolume=function(j){if(this.player&&this.ready){this.player.setVolume(j);}};this.getVolume=function(){return(this.player&&this.ready)?this.player.getVolume():0;};this.getDuration=function(){return(this.player&&this.ready)?this.player.getDuration():0;};this.getCurrentTime=function(){return(this.player&&this.ready)?this.player.getCurrentTime():0;};this.getBytesLoaded=function(){return(this.player&&this.ready)?this.player.getMediaBytesLoaded():0;};this.getBytesTotal=function(){return(this.player&&this.ready)?this.player.getMediaBytesTotal():0;};this.hasControls=function(){return true;};this.showControls=function(j){if(this.player&&this.ready){this.player.showPlugin("controlBar",j);this.player.showPlugin("playLoader",j);}};this.getEmbedCode=function(){var j={config:"config",id:"mediafront_player",file:this.mediaFile.path,image:this.preview,skin:g.skin};if(this.mediaFile.stream){j.stream=this.mediaFile.stream;}return jQuery.media.utils.getFlash(g.flashPlayer,"mediafront_player",g.embedWidth,g.embedHeight,j,g.wmode);};this.setQuality=function(j){};this.getQuality=function(){return"";};this.getMediaLink=function(){return"This video currently does not have a link.";};})(this,e,d);};jQuery.fn.mediahtml5=function(e,d){return new (function(h,g,f){this.display=h;var i=this;this.player=null;this.bytesLoaded=0;this.bytesTotal=0;this.mediaType="";this.loaded=false;this.mediaFile=null;this.playerElement=null;this.getPlayer=function(j,n){this.mediaFile=j;var k=g.id+"_"+this.mediaType;var m="<"+this.mediaType+' style="position:absolute" id="'+k+'"';m+=n?' poster="'+n+'"':"";if(typeof j==="array"){m+=">";var l=j.length;while(l){l--;m+='';}}else{m+=' src="'+j.path+'">Unable to display media.';}m+="";this.display.append(m);this.bytesTotal=j.bytesTotal;this.playerElement=this.display.find("#"+k);this.onResize();return this.playerElement.eq(0)[0];};this.createMedia=function(j,k){jQuery.media.utils.removeFlash(this.display,g.id+"_media");this.display.children().remove();this.mediaType=this.getMediaType(j);this.player=this.getPlayer(j,k);this.loaded=false;var l=false;if(this.player){this.player.addEventListener("abort",function(){f({type:"stopped"});},true);this.player.addEventListener("loadstart",function(){f({type:"ready",busy:"show"});i.onReady();},true);this.player.addEventListener("loadeddata",function(){f({type:"loaded",busy:"hide"});},true);this.player.addEventListener("loadedmetadata",function(){f({type:"meta"});},true);this.player.addEventListener("canplaythrough",function(){f({type:"canplay",busy:"hide"});},true);this.player.addEventListener("ended",function(){f({type:"complete"});},true);this.player.addEventListener("pause",function(){f({type:"paused"});},true);this.player.addEventListener("play",function(){f({type:"playing"});},true);this.player.addEventListener("playing",function(){f({type:"playing",busy:"hide"});},true);this.player.addEventListener("error",function(m){i.onError(m.target.error);f({type:"error",code:m.target.error.code});},true);this.player.addEventListener("waiting",function(){f({type:"waiting",busy:"show"});},true);this.player.addEventListener("timeupdate",function(){if(l){f({type:"timeupdate",busy:"hide"});}else{l=true;}},true);this.player.addEventListener("durationchange",function(){if(this.duration&&(this.duration!==Infinity)){f({type:"durationupdate",duration:this.duration});}},true);this.player.addEventListener("progress",function(m){i.bytesLoaded=m.loaded;i.bytesTotal=m.total;},true);this.player.autoplay=true;if(typeof this.player.hasAttribute=="function"&&this.player.hasAttribute("preload")&&this.player.preload!="none"){this.player.autobuffer=true;}else{this.player.autobuffer=false;this.player.preload="none";}f({type:"playerready"});}};this.onError=function(j){switch(j.code){case 1:console.log("Error: MEDIA_ERR_ABORTED");break;case 2:console.log("Error: MEDIA_ERR_DECODE");break;case 3:console.log("Error: MEDIA_ERR_NETWORK");break;case 4:console.log("Error: MEDIA_ERR_SRC_NOT_SUPPORTED");break;default:break;}};this.onReady=function(){if(!this.loaded){this.loaded=true;this.playMedia();}};this.loadMedia=function(j){this.mediaFile=j;this.createMedia(j);};this.getMediaType=function(j){var k=(typeof j==="array")?j[0].extension:j.extension;switch(k){case"ogg":case"ogv":case"mp4":case"m4v":return"video";case"oga":case"mp3":return"audio";default:break;}return"video";};this.playMedia=function(){if(this.player&&this.player.play){this.player.play();}};this.pauseMedia=function(){if(this.player&&this.player.pause){this.player.pause();}};this.stopMedia=function(){this.pauseMedia();if(this.player){this.player.src="";}};this.destroy=function(){this.stopMedia();this.display.children().remove();};this.seekMedia=function(j){if(this.player){this.player.currentTime=j;}};this.setVolume=function(j){if(this.player){this.player.volume=j;}};this.getVolume=function(){return this.player?this.player.volume:0;};this.getDuration=function(){var j=this.player?this.player.duration:0;return(j===Infinity)?0:j;};this.getCurrentTime=function(){return this.player?this.player.currentTime:0;};this.getPercentLoaded=function(){if(this.player&&this.player.buffered&&this.player.duration){return(this.player.buffered.end(0)/this.player.duration);}else{if(this.bytesTotal){return(this.bytesLoaded/this.bytesTotal);}else{return 0;}}};this.onResize=function(){if(this.mediaType=="video"){this.playerElement.css({width:this.display.width(),height:this.display.height()});}};this.setQuality=function(j){};this.getQuality=function(){return"";};this.hasControls=function(){return false;};this.showControls=function(j){};this.getEmbedCode=function(){if((this.mediaFile.extension=="mp4")||(this.mediaFile.extension=="m4v")||(this.mediaFile.extension=="webm")){var j={config:"config",id:"mediafront_player",file:this.mediaFile.path,image:this.preview,skin:g.skin};if(this.mediaFile.stream){j.stream=this.mediaFile.stream;}return jQuery.media.utils.getFlash(g.flashPlayer,"mediafront_player",g.embedWidth,g.embedHeight,j,g.wmode);}else{return"This media does not support embedding.";}};this.getMediaLink=function(){return"This media currently does not have a link.";};})(this,e,d);};jQuery.fn.mediaimage=function(e,d){if(this.length===0){return null;}return new (function(g,j,f){this.display=g;var k=this;var i=0;var h=false;this.imgLoader=new Image();this.imgLoader.onload=function(){h=true;i=(k.imgLoader.width/k.imgLoader.height);k.resize();k.display.trigger("imageLoaded");};g.css("overflow","hidden");this.loaded=function(){return this.imgLoader.complete;};this.resize=function(p,l){var o=f?this.imgLoader.width:(p?p:this.display.width());var m=f?this.imgLoader.height:(l?l:this.display.height());if(o&&m&&h){var n=jQuery.media.utils.getScaledRect(i,{width:o,height:m});if(this.image){this.image.attr("src",this.imgLoader.src).css({marginLeft:n.x,marginTop:n.y,width:n.width,height:n.height});}this.image.fadeIn();}};this.clear=function(){h=false;if(this.image){this.image.attr("src","");this.imgLoader.src="";this.image.fadeOut(function(){if(j){c(this).parent().remove();}else{c(this).remove();}});}};this.refresh=function(){this.resize();};this.loadImage=function(l){this.clear();this.image=c(document.createElement("img")).attr({src:""}).hide();if(j){this.display.append(c(document.createElement("a")).attr({target:"_blank",href:j}).append(this.image));}else{this.display.append(this.image);}this.imgLoader.src=l;};})(this,e,d);};jQuery.media=jQuery.extend({},{json:function(d){return new (function(g){var h=this;var e={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};var f={"boolean":function(i){return String(i);},"null":function(i){return"null";},number:function(i){return isFinite(i)?String(i):"null";},string:function(i){if(/["\\\x00-\x1f]/.test(i)){i=i.replace(/([\x00-\x1f\\"])/g,function(k,j){var l=e[j];if(l){return l;}l=j.charCodeAt();return"\\u00"+Math.floor(l/16).toString(16)+(l%16).toString(16);});}return'"'+i+'"';},array:function(k){var n=["["],j,q,p,m=k.length,o;for(p=0;p0){this.scrollRegion.clear();var h=function(i,l){g.setLink(l);};var j=f.links.length;while(j){j--;var k=this.scrollRegion.newItem().playlistlink(f,f.links[j]);k.unbind("linkclick").bind("linkclick",h);}this.scrollRegion.activate();}};this.setLink=function(h){if(this.previousLink){this.previousLink.setActive(false);}h.setActive(true);this.previousLink=h;};})(this,d);};jQuery.media.ids=jQuery.extend(jQuery.media.ids,{close:"#mediamenuclose",embed:"#mediaembed",elink:"#mediaelink",email:"#mediaemail"});jQuery.fn.mediamenu=function(e,d){if(this.length===0){return null;}return new (function(h,i,g){g=jQuery.media.utils.getSettings(g);var j=this;this.display=i;this.on=false;this.contents=[];this.prevItem={id:0,link:null,contents:null};this.close=this.display.find(g.ids.close);this.close.unbind("click").bind("click",function(){j.display.trigger("menuclose");});this.setMenuItem=function(l,m){if(this.prevItem.id!=m){if(this.prevItem.id&&g.template.onMenuSelect){g.template.onMenuSelect(this.prevItem.link,this.prevItem.contents,false);}var k=this.contents[m];if(g.template.onMenuSelect){g.template.onMenuSelect(l,k,true);}this.prevItem={id:m,link:l,contents:k};}};this.setEmbedCode=function(k){this.setInputItem(g.ids.embed,k);};this.setMediaLink=function(k){this.setInputItem(g.ids.elink,k);};this.setInputItem=function(m,l){var k=this.contents[m].find("input");k.unbind("click").bind("click",function(){c(this).select().focus();});k.attr("value",l);};var f=0;this.links=this.display.find("a");this.links.each(function(){var l=c(this);if(l.length>0){var m=l.attr("href");var k=j.display.find(m);k.hide();j.contents[m]=k;l.unbind("click").bind("click",{id:m,obj:l.parent()},function(n){n.preventDefault();j.setMenuItem(n.data.obj,n.data.id);});if(f===0){j.setMenuItem(l.parent(),m);}f++;}});})(e,this,d);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{logo:"logo.png",logoWidth:49,logoHeight:15,logopos:"sw",logox:5,logoy:5,link:"http://www.mediafront.org",file:"",image:"",timeout:8,autoLoad:true});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{busy:"#mediabusy",preview:"#mediapreview",play:"#mediaplay",media:"#mediadisplay"});jQuery.fn.minplayer=function(d){if(this.length===0){return null;}return new (function(e,f){f=jQuery.media.utils.getSettings(f);this.display=e;var g=this;this.autoLoad=f.autoLoad;this.busy=e.find(f.ids.busy);this.busyImg=this.busy.find("img");this.busyWidth=this.busyImg.width();this.busyHeight=this.busyImg.height();this.play=e.find(f.ids.play);this.play.unbind("click").bind("click",function(){g.togglePlayPause();});this.playImg=this.play.find("img");this.playWidth=this.playImg.width();this.playHeight=this.playImg.height();this.preview=e.find(f.ids.preview).mediaimage();if(this.preview){this.preview.display.unbind("click").bind("click",function(){g.onMediaClick();});this.preview.display.unbind("imageLoaded").bind("imageLoaded",function(){g.onPreviewLoaded();});}this.usePlayerControls=false;this.busyFlags=0;this.busyVisible=false;this.playVisible=false;this.previewVisible=false;this.playing=false;this.hasMedia=false;this.timeoutId=0;this.width=this.display.width();this.height=this.display.height();this.showElement=function(j,h,i){if(j&&!this.usePlayerControls){if(h){j.show(i);}else{j.hide(i);}}};this.showPlay=function(h,i){h&=this.hasMedia;this.playVisible=h;this.showElement(this.play,h,i);};this.showBusy=function(j,h,i){if(h){this.busyFlags|=(1<0);this.showElement(this.busy,this.busyVisible,i);if(j==1&&!h){this.showBusy(3,false);}};this.showPreview=function(h,i){this.previewVisible=h;if(this.preview){this.showElement(this.preview.display,h,i);}};this.onControlUpdate=function(h){if(this.media){if(this.media.playerReady){switch(h.type){case"play":this.media.player.playMedia();break;case"pause":this.media.player.pauseMedia();break;case"seek":this.media.player.seekMedia(h.value);break;case"volume":this.media.setVolume(h.value);break;case"mute":this.media.mute(h.value);break;default:break;}}else{if((this.media.playQueue.length>0)&&!this.media.mediaFile){this.autoLoad=true;this.playNext();}}if(f.template&&f.template.onControlUpdate){f.template.onControlUpdate(h);}}};this.fullScreen=function(h){if(f.template.onFullScreen){f.template.onFullScreen(h);}this.preview.refresh();};this.onPreviewLoaded=function(){this.previewVisible=true;};this.onMediaUpdate=function(h){switch(h.type){case"paused":this.playing=false;this.showPlay(true);if(!this.media.loaded){this.showPreview(true);}break;case"update":case"playing":this.playing=true;this.showPlay(false);this.showPreview((this.media.mediaFile.type=="audio"));break;case"initialize":this.playing=false;this.showPlay(true);this.showBusy(1,this.autoLoad);this.showPreview(true);break;case"buffering":this.showPlay(true);this.showPreview((this.media.mediaFile.type=="audio"));break;default:break;}if(h.busy){this.showBusy(1,(h.busy=="show"));}};this.onMediaClick=function(){if(this.media.player&&!this.media.hasControls()){if(this.playing){this.media.player.pauseMedia();}else{this.media.player.playMedia();}}};this.media=this.display.find(f.ids.media).mediadisplay(f);if(this.media){this.media.display.unbind("click").bind("click",function(){g.onMediaClick();});}this.setLogoPos=function(){if(this.logo){var h={};if(f.logopos=="se"||f.logopos=="sw"){h.bottom=f.logoy;}if(f.logopos=="ne"||f.logopos=="nw"){h.top=f.logoy;}if(f.logopos=="nw"||f.logopos=="sw"){h.left=f.logox;}if(f.logopos=="ne"||f.logopos=="se"){h.right=f.logox;}this.logo.display.css(h);}};if(!f.controllerOnly){this.display.prepend('');this.logo=this.display.find("."+f.prefix+"medialogo").mediaimage(f.link);if(this.logo){this.logo.display.css({width:f.logoWidth,height:f.logoHeight});this.logo.display.bind("imageLoaded",function(){g.setLogoPos();});this.logo.loadImage(f.logo);}}this.reset=function(){this.hasMedia=false;this.playing=false;jQuery.media.players[f.id].showNativeControls(false);this.showPlay(true);this.showPreview(true);clearTimeout(this.timeoutId);if(this.media){this.media.reset();}};this.togglePlayPause=function(){if(this.media){if(this.media.playerReady){if(this.playing){this.showPlay(true);this.media.player.pauseMedia();}else{this.showPlay(false);this.media.player.playMedia();}}else{if((this.media.playQueue.length>0)&&!this.media.mediaFile){this.autoLoad=true;this.playNext();}}}};this.loadImage=function(h){if(this.preview){this.showBusy(3,true);this.preview.loadImage(h);var i=setInterval(function(){if(g.preview.loaded()){clearInterval(i);g.showBusy(3,false);}},500);if(this.media){this.media.preview=h;}}};this.onResize=function(){if(this.preview){this.preview.refresh();}if(this.media){this.media.onResize();}};this.clearImage=function(){if(this.preview){this.preview.clear();}};this.loadFiles=function(h){this.reset();this.hasMedia=this.media&&this.media.loadFiles(h);if(this.hasMedia&&this.autoLoad){this.media.playNext();}else{if(!this.hasMedia){this.showPlay(false);this.showPreview(true);this.timeoutId=setTimeout(function(){g.media.display.trigger("mediaupdate",{type:"complete"});},(f.timeout*1000));}}return this.hasMedia;};this.playNext=function(){if(this.media){this.media.playNext();}};this.hasControls=function(){if(this.media){return this.media.hasControls();}return true;};this.showControls=function(h){if(this.media){this.media.showControls(h);}};this.loadMedia=function(h){this.reset();if(this.media){this.media.loadMedia(h);}};if(f.file){this.loadMedia(f.file);}if(f.image){this.loadImage(f.image);}})(this,d);}; -/* Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.0.4 - * - * Requires: 1.2.2+ - */ -var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){d--;this.addEventListener(a[d],b,false);}}else{this.onmousewheel=b;}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){d--;this.removeEventListener(a[d],b,false);}}else{this.onmousewheel=null;}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel");},unmousewheel:function(d){return this.unbind("mousewheel",d);}});function b(i){var g=i||window.event,f=[].slice.call(arguments,1),j=0,h=true,e=0,d=0;i=c.event.fix(g);i.type="mousewheel";if(i.wheelDelta){j=i.wheelDelta/120;}if(i.detail){j=-i.detail/3;}d=j;if(g.axis!==undefined&&g.axis===g.HORIZONTAL_AXIS){d=0;e=-1*j;}if(g.wheelDeltaY!==undefined){d=g.wheelDeltaY/120;}if(g.wheelDeltaX!==undefined){e=-1*g.wheelDeltaX/120;}f.unshift(i,j,e,d);return c.event.handle.apply(this,f);}jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{node:"",incrementTime:5});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{voter:"#mediavoter",uservoter:"#mediauservoter",mediaRegion:"#mediaregion",field:".mediafield"});jQuery.fn.medianode=function(e,d){if(this.length===0){return null;}return new (function(h,g,f){f=jQuery.media.utils.getSettings(f);this.display=g;this.nodeInfo={};this.incremented=false;var i=this;this.player=this.display.find(f.ids.mediaRegion).minplayer(f);if(this.player&&(f.incrementTime!==0)){this.player.display.unbind("mediaupdate").bind("mediaupdate",function(j,k){i.onMediaUpdate(k);});}this.images=[];this.addVoters=function(j){this.voter=j.find(f.ids.voter).mediavoter(f,h,false);this.uservoter=j.find(f.ids.uservoter).mediavoter(f,h,true);if(this.uservoter&&this.voter){this.uservoter.display.unbind("processing").bind("processing",function(){i.player.showBusy(2,true);});this.uservoter.display.unbind("voteGet").bind("voteGet",function(){i.player.showBusy(2,false);});this.uservoter.display.unbind("voteSet").bind("voteSet",function(l,k){i.player.showBusy(2,false);i.voter.updateVote(k);});}};this.addVoters(this.display);this.onMediaUpdate=function(j){if(!this.incremented){switch(j.type){case"update":if((f.incrementTime>0)&&(j.currentTime>f.incrementTime)){this.incremented=true;h.call(jQuery.media.commands.incrementCounter,null,null,i.nodeInfo.nid);}break;case"complete":if(f.incrementTime<0){this.incremented=true;h.call(jQuery.media.commands.incrementCounter,null,null,i.nodeInfo.nid);}break;default:break;}}};this.loadNode=function(j){return this.getNode(this.translateNode(j));};this.translateNode=function(k){var l=((typeof k)=="number")||((typeof k)=="string");if(!k){var j=f.node;if((typeof j)=="object"){j.load=false;return j;}else{return j?{nid:j,load:true}:null;}}else{if(l){return{nid:k,load:true};}else{k.load=false;return k;}}};this.getNode=function(j){if(j){if(h&&j.load){h.call(jQuery.media.commands.loadNode,function(k){i.setNode(k);},null,j.nid,{});}else{this.setNode(j);}return true;}return false;};this.setNode=function(j){if(j){this.nodeInfo=j;this.incremented=false;if(this.player&&this.nodeInfo.mediafiles){var k=this.getImage("preview");if(k){this.player.loadImage(k.path);}else{this.player.clearImage();}this.player.loadFiles(this.nodeInfo.mediafiles.media);}if(this.voter){this.voter.getVote(j);}if(this.uservoter){this.uservoter.getVote(j);}this.display.find(f.ids.field).each(function(){i.setField(this,j,c(this).attr("type"),c(this).attr("field"));});this.display.trigger("nodeload",this.nodeInfo);}};this.setField=function(l,k,j,m){if(j){switch(j){case"text":this.setTextField(l,k,m);break;case"image":this.setImageField(l,m);break;case"cck_text":this.setCCKTextField(l,k,m);break;default:break;}}};this.setTextField=function(k,j,m){var l=j[m];if(l){c(k).empty().html(l);}return true;};this.setCCKTextField=function(k,j,m){if(args.fieldType=="cck_text"){var l=j[m];if(l){c(k).empty().html(l["0"].value);}}return true;};this.onResize=function(){if(this.player){this.player.onResize();}};this.getImage=function(l){var j=this.nodeInfo.mediafiles?this.nodeInfo.mediafiles.image:null;var m=null;if(j){if(j[l]){m=j[l];}else{for(var k in j){if(j.hasOwnProperty(k)){m=j[k];break;}}}m=(typeof m==="string")?{path:m}:m;m.path=m.path?jQuery.trim(m.path):(f.baseURL+jQuery.trim(m.filepath));if(m&&m.path){m.path=m.path?jQuery.trim(m.path):(f.baseURL+jQuery.trim(m.filepath));}else{m=null;}}return m;};this.setImageField=function(k,m){var j=this.getImage(m);if(j){var l=c(k).empty().mediaimage();this.images.push(l);l.loadImage(j.path);}};})(e,this,d);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{shuffle:false,loop:false,pageLimit:10});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{prev:"#mediaprev",next:"#medianext",loadPrev:"#medialoadprev",loadNext:"#medialoadnext",prevPage:"#mediaprevpage",nextPage:"#medianextpage"});jQuery.fn.mediapager=function(d){return new (function(e,f){f=jQuery.media.utils.getSettings(f);this.display=e;var g=this;this.activeIndex=-1;this.currentIndex=-1;this.activePage=0;this.currentPage=0;this.numPages=0;this.numItems=10;this.activeNumItems=10;this.loadState="";this.enabled=false;this.prevButton=e.find(f.ids.prev).medialink(f,function(){if(g.enabled){g.loadPrev(false);}});this.nextButton=e.find(f.ids.next).medialink(f,function(){if(g.enabled){g.loadNext(false);}});this.loadPrevButton=e.find(f.ids.loadPrev).medialink(f,function(){if(g.enabled){g.loadPrev(true);}});this.loadNextButton=e.find(f.ids.loadNext).medialink(f,function(){if(g.enabled){g.loadNext(true);}});this.prevPageButton=e.find(f.ids.prevPage).medialink(f,function(){if(g.enabled){g.loadState="click";g.prevPage();}});this.nextPageButton=e.find(f.ids.nextPage).medialink(f,function(){if(g.enabled){g.loadState="click";g.nextPage();}});this.setTotalItems=function(h){if(h&&f.pageLimit){this.numPages=Math.ceil(h/f.pageLimit);if(this.numPages==1){this.numItems=h;}}};this.setNumItems=function(h){this.numItems=h;};this.reset=function(){this.activePage=0;this.currentPage=0;this.activeIndex=-1;this.currentIndex=-1;this.loadState="";};this.loadIndex=function(j){var h=j?"activeIndex":"currentIndex";var i=this[h];switch(this.loadState){case"prev":this.loadState="";this.loadPrev(j);return;case"first":i=0;break;case"last":i=(this.numItems-1);break;case"rand":i=Math.floor(Math.random()*this.numItems);break;default:break;}this.loadState="";if(i!=this[h]){this.loadState="";this[h]=i;this.display.trigger("loadindex",{index:this[h],active:j});}};this.loadNext=function(i){if(this.loadState){this.loadIndex(i);}else{if(f.shuffle){this.loadRand();}else{var h=i?"activeIndex":"currentIndex";if(i&&(this.activePage!=this.currentPage)){if((this.activeIndex==(this.activeNumItems-1))&&(this.activePage==(this.currentPage-1))){this.currentIndex=this.activeIndex=0;this.activePage=this.currentPage;this.display.trigger("loadindex",{index:0,active:true});}else{this.currentPage=this.activePage;this.loadState="";this.display.trigger("loadpage",{index:this.activePage,active:i});}}else{this[h]++;if(this[h]>=this.numItems){if(this.numPages>1){this[h]=(this.numItems-1);this.loadState=this.loadState?this.loadState:"first";this.nextPage(i);}else{if(!i||f.loop){this[h]=0;this.display.trigger("loadindex",{index:this[h],active:i});}}}else{this.display.trigger("loadindex",{index:this[h],active:i});}}}}};this.loadPrev=function(i){var h=i?"activeIndex":"currentIndex";if(i&&(this.activePage!=this.currentPage)){this.currentPage=this.activePage;this.loadState="prev";this.display.trigger("loadpage",{index:this.activePage,active:i});}else{this[h]--;if(this[h]<0){if(this.numPages>1){this[h]=0;this.loadState=this.loadState?this.loadState:"last";this.prevPage(i);}else{if(!i||f.loop){this[h]=(this.numItems-1);this.display.trigger("loadindex",{index:this[h],active:i});}}}else{this.display.trigger("loadindex",{index:this[h],active:i});}}};this.loadRand=function(){var h=Math.floor(Math.random()*this.numPages);if(h!=this.activePage){this.activePage=h;this.loadState=this.loadState?this.loadState:"rand";this.display.trigger("loadpage",{index:this.activePage,active:true});}else{this.activeIndex=Math.floor(Math.random()*this.numItems);this.display.trigger("loadindex",{index:this.activeIndex,active:true});}};this.nextPage=function(j){var h=j?"activePage":"currentPage";var i=false;if(this[h]<(this.numPages-1)){this[h]++;i=true;}else{if(f.loop){this.loadState=this.loadState?this.loadState:"first";this[h]=0;i=true;}else{this.loadState="";}}this.setPageState(j);if(i){this.display.trigger("loadpage",{index:this[h],active:j});}};this.prevPage=function(j){var h=j?"activePage":"currentPage";var i=false;if(this[h]>0){this[h]--;i=true;}else{if(f.loop){this.loadState=this.loadState?this.loadState:"last";this[h]=(this.numPages-1);i=true;}else{this.loadState="";}}this.setPageState(j);if(i){this.display.trigger("loadpage",{index:this[h],active:j});}};this.setPageState=function(h){if(h){this.currentPage=this.activePage;}else{this.activeNumItems=this.numItems;}};})(this,d);};jQuery.media=jQuery.extend({},{parser:function(d){return new (function(e){var f=this;this.onLoaded=null;this.parseFile=function(g,h){this.onLoaded=h;jQuery.ajax({type:"GET",url:g,dataType:"xml",success:function(i){f.parseXML(i);},error:function(i,k,j){if(window.console&&console.log){console.log("Error: "+k);}}});};this.parseXML=function(g){var h=this.parseXSPF(g);if(h.total_rows===0){h=this.parseASX(g);}if(h.total_rows===0){h=this.parseRSS(g);}if(this.onLoaded&&h.total_rows){this.onLoaded(h);}return h;};this.parseXSPF=function(g){var i={total_rows:0,nodes:[]};var h=jQuery("playlist trackList track",g);if(h.length>0){h.each(function(j){i.total_rows++;i.nodes.push({nid:i.total_rows,title:c(this).find("title").text(),description:c(this).find("annotation").text(),mediafiles:{image:{image:{path:c(this).find("image").text()}},media:{media:{path:c(this).find("location").text()}}}});});}return i;};this.parseASX=function(g){var i={total_rows:0,nodes:[]};var h=jQuery("asx entry",g);if(h.length>0){h.each(function(j){i.total_rows++;i.nodes.push({nid:i.total_rows,title:c(this).find("title").text(),mediafiles:{image:{image:{path:c(this).find("image").text()}},media:{media:{path:c(this).find("location").text()}}}});});}return i;};this.parseRSS=function(h){var j={total_rows:0,nodes:[]};var i=jQuery("rss channel",h);if(i.length>0){var g=(i.find("generator").text()=="YouTube data API");i.find("item").each(function(k){j.total_rows++;var l={};l=g?f.parseYouTubeItem(c(this)):f.parseRSSItem(c(this));l.nid=j.total_rows;j.nodes.push(l);});}return j;};this.parseRSSItem=function(g){return{title:g.find("title").text(),mediafiles:{image:{image:{path:g.find("image").text()}},media:{media:{path:g.find("location").text()}}}};};this.parseYouTubeItem=function(h){var g=h.find("description").text();var i=h.find("link").text().replace("&feature=youtube_gdata","");return{title:h.find("title").text(),mediafiles:{image:{image:{path:jQuery("img",g).eq(0).attr("src")}},media:{media:{path:i,player:"youtube"}}}};};})(d);}},jQuery.media);jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{protocol:"auto",server:"drupal",template:"default",baseURL:"",debug:false,draggable:false,resizable:false,showPlaylist:true,autoNext:true,prefix:"",zIndex:400,fluidWidth:false,fluidHeight:false,fullscreen:false});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{loading:"#mediaplayerloading",player:"#mediaplayer",menu:"#mediamenu",titleBar:"#mediatitlebar",node:"#medianode",playlist:"#mediaplaylist",control:"#mediacontrol"});jQuery.media.players={};jQuery.media.loadCallbacks={};jQuery.media.playlists={};jQuery.media.controllers={};jQuery.media.onLoaded=function(d,f){var e=jQuery.media.players[d];if(e&&e.display&&e.loaded){f(e);}else{if(!jQuery.media.loadCallbacks[d]){jQuery.media.loadCallbacks[d]=[];}jQuery.media.loadCallbacks[d].push(f);}};jQuery.media.addElement=function(f,h,e){if(h&&h[e]){var g=jQuery.media.players[f];if(g){switch(e){case"playlist":g.addPlaylist(h.playlist);break;case"controller":g.addController(h.controller);break;default:break;}}else{var d=e+"s";if(!jQuery.media[d][f]){jQuery.media[d][f]=[];}jQuery.media[d][f].push(h[e]);}}};jQuery.media.addController=function(d,e){jQuery.media.addElement(d,e,"controller");};jQuery.media.addPlaylist=function(d,e){jQuery.media.addElement(d,e,"playlist");};jQuery.fn.mediaplayer=function(d){if(this.length===0){return null;}return new (function(g,h){h=jQuery.media.utils.getSettings(h);if(!h.id){h.id=jQuery.media.utils.getId(g);}this.dialog=g;this.display=this.dialog.find(h.ids.player);var j=this;var e=[];jQuery.media.utils.checkVisibility(this.display,e);jQuery.media.players[h.id]=this;this.loaded=false;var f=0;h.template=jQuery.media.templates[h.template](this,h);if(h.template.getSettings){h=jQuery.extend(h,h.template.getSettings());}c(window).keyup(function(i){switch(i.keyCode){case 0:j.onSpaceBar();break;case 113:case 27:j.onEscKey();break;default:break;}});if(h.fluidWidth||h.fluidHeight){c(window).resize(function(){j.onResize();});}if(jQuery.media[h.protocol]){this.protocol=jQuery.media[h.protocol](h);}if(jQuery.media[h.server]){this.server=jQuery.media[h.server](this.protocol,h);}this.menu=this.dialog.find(h.ids.menu).mediamenu(this.server,h);if(this.menu){this.menu.display.unbind("menuclose").bind("menuclose",function(){j.showMenu(false);});}this.menuOn=false;this.maxOn=!h.showPlaylist;this.fullScreen=false;this.playlist=null;this.activePlaylist=null;this.controller=null;this.activeController=null;this.showMenu=function(i){if(h.template.onMenu){this.menuOn=i;h.template.onMenu(this.menuOn);}};this.onEscKey=function(){if(this.fullScreen){this.onFullScreen(false);}};this.onSpaceBar=function(){if(this.fullScreen&&this.node&&this.node.player){this.node.player.togglePlayPause();}};this.addPlayerEvents=function(i){i.display.unbind("menu").bind("menu",function(k){j.showMenu(!j.menuOn);});i.display.unbind("maximize").bind("maximize",function(k){j.maximize(!j.maxOn);});i.display.unbind("fullscreen").bind("fullscreen",function(k){j.onFullScreen(!j.fullScreen);});};this.onFullScreen=function(i){this.fullScreen=i;if(this.node&&this.node.player){this.node.player.fullScreen(this.fullScreen);this.onResize();if(window.webkitSupportsFullscreen&&window.webkitSupportsFullscreen()){if(i){window.webkitEnterFullscreen();}else{window.webkitExitFullscreen();}}}};this.titleBar=this.dialog.find(h.ids.titleBar).mediatitlebar(h);if(this.titleBar){this.addPlayerEvents(this.titleBar);if(h.draggable&&this.dialog.draggable){this.dialog.draggable({handle:h.ids.titleBar,containment:"document"});}if(h.resizable&&this.dialog.resizable){this.dialog.resizable({alsoResize:this.display,containment:"document",resize:function(i){j.onResize();}});}}this.node=this.dialog.find(h.ids.node).medianode(this.server,h);if(this.node){this.node.display.unbind("nodeload").bind("nodeload",function(i,k){j.onNodeLoad(k);});if(this.node.player&&this.node.player.media){this.node.player.media.display.unbind("mediaupdate").bind("mediaupdate",function(i,k){j.onMediaUpdate(k);});}if(this.node.uservoter){this.node.uservoter.display.unbind("voteSet").bind("voteSet",function(k,i){if(j.activePlaylist){j.activePlaylist.onVoteSet(i);}});}}this.onMediaUpdate=function(i){this.node.player.onMediaUpdate(i);if(h.autoNext&&this.activePlaylist&&(i.type=="complete")){this.activePlaylist.loadNext();}if(this.controller){this.controller.onMediaUpdate(i);}if(this.activeController){this.activeController.onMediaUpdate(i);}if(this.menu&&this.node&&(i.type=="meta")){this.menu.setEmbedCode(this.node.player.media.player.getEmbedCode());this.menu.setMediaLink(this.node.player.media.player.getMediaLink());}if(h.template&&h.template.onMediaUpdate){h.template.onMediaUpdate(i);}};this.onPlaylistLoad=function(i){if(this.node){if(this.node.player&&this.node.player.media){this.node.player.media.hasPlaylist=true;}this.node.loadNode(i);}if(h.template.onPlaylistLoad){h.template.onPlaylistLoad(i);}};this.onNodeLoad=function(i){if(h.template.onNodeLoad){h.template.onNodeLoad(i);}};this.maximize=function(i){if(!this.fullScreen){if(h.template.onMaximize&&(i!=this.maxOn)){this.maxOn=i;h.template.onMaximize(this.maxOn);}}};this.addPlaylist=function(i){if(i){i.display.unbind("playlistload").bind("playlistload",i,function(k,l){j.activePlaylist=k.data;j.onPlaylistLoad(l);});if(!this.activePlaylist&&i.activeTeaser){this.activePlaylist=i;this.onPlaylistLoad(i.activeTeaser.node.nodeInfo);}}return i;};this.searchForElement=function(i){for(var l in i){var k=new RegExp("^"+l+"(\\_[0-9]+)?$","i");if(h.id.search(k)===0){return i[l];}}return null;};this.playlist=this.addPlaylist(this.dialog.find(h.ids.playlist).mediaplaylist(this.server,h));this.addController=function(k,i){if(k){k.display.unbind("controlupdate").bind("controlupdate",k,function(l,m){j.activeController=l.data;if(j.node&&j.node.player){j.node.player.onControlUpdate(m);}});if(i&&!this.activeController){this.activeController=k;}this.addPlayerEvents(k);}return k;};this.controller=this.addController(this.dialog.find(h.ids.control).mediacontrol(h),false);if(this.controller&&this.node){this.node.addVoters(this.controller.display);}this.onResize=function(){if(h.template.onResize){h.template.onResize();}if(this.node){this.node.onResize();}if(this.controller){this.controller.onResize();}};this.showNativeControls=function(i){var k=this.node?this.node.player:null;if(k&&k.hasControls()){k.usePlayerControls=i;if(i){k.busy.hide();k.play.hide();if(k.preview){k.preview.display.hide();}if(this.controller){this.controller.display.hide();}}else{k.showBusy(1,((this.busyFlags&2)==2));k.showPlay(this.playVisible);k.showPreview(this.previewVisible);if(this.controller){this.controller.display.show();}}k.showControls(i);}};this.loadContent=function(){var l=this.searchForElement(jQuery.media.controllers);if(l){f=l.length;while(f){f--;this.addController(l[f],true);}}var i=this.searchForElement(jQuery.media.playlists);if(i){f=i.length;while(f){f--;this.addPlaylist(i[f]);}}var k=false;if(this.playlist){k=this.playlist.loadPlaylist();}if(!k&&this.node){if(this.node.player&&this.node.player.media){this.node.player.media.settings.repeat=(h.loop||h.repeat);}this.node.loadNode();}};this.initializeTemplate=function(){if(h.template.initialize){h.template.initialize(h);}jQuery.media.utils.resetVisibility(e);};this.load=function(){this.initializeTemplate();this.dialog.css("position","relative");this.dialog.css("marginLeft",0);this.dialog.css("overflow","visible");if(h.fullscreen){this.onFullScreen(true);}this.loaded=true;this.display.trigger("playerLoaded",this);if(jQuery.media.loadCallbacks[h.id]){var l=jQuery.media.loadCallbacks[h.id];var k=l.length;while(k){k--;l[k](this);}}this.server.connect(function(i){j.loadContent();});};this.load();})(this,d);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{playlist:"",args:[],wildcard:"*"});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{pager:"#mediapager",scroll:"#mediascroll",busy:"#mediabusy",links:"#medialinks"});jQuery.fn.mediaplaylist=function(e,d){if(this.length===0){return null;}return new (function(g,h,f){f=jQuery.media.utils.getSettings(f);this.display=h;var i=this;this.teasers=[];this.selectedTeaser=null;this.activeTeaser=null;this.args=f.args;this.setActive=true;this.activePager=null;this.pager=null;this.parser=jQuery.media.parser(f);this.scrollRegion=h.find(f.ids.scroll).mediascroll(f);this.scrollRegion.clear();this.busy=h.find(f.ids.busy);this.busyVisible=false;this.busyImg=this.busy.find("img");this.busyWidth=this.busyImg.width();this.busyHeight=this.busyImg.height();this.links=h.find(f.ids.links).medialinks(f);this.links.loadLinks();this.loading=function(j){if(this.pager){this.pager.enabled=!j;}if(this.activePager){this.activePager.enabled=!j;}if(j){this.busyVisible=true;this.busy.show();}else{this.busyVisible=false;this.busy.hide();}};this.addPager=function(j,k){if(j){j.display.unbind("loadindex").bind("loadindex",function(l,m){if(m.active){i.activateTeaser(i.teasers[m.index]);}else{i.selectTeaser(i.teasers[m.index]);}});j.display.unbind("loadpage").bind("loadpage",function(l,m){i.setActive=m.active;i.loadPlaylist({pageIndex:m.index});});if(k&&!this.activePager){this.activePager=j;}}return j;};this.pager=this.addPager(h.find(f.ids.pager).mediapager(f),false);this.links.display.unbind("linkclick").bind("linkclick",function(k,j){i.onLinkClick(j);});this.onLinkClick=function(m){var k=m.index;var l=m.playlist;var j=[];j[k]=m.arg;if(this.pager){this.pager.reset();}if(this.activePager){this.activePager.reset();}this.loadPlaylist({playlist:l,args:j});};this.loadNext=function(){if(this.pager){this.pager.loadNext(true);}else{if(this.activePager){this.activePager.loadNext(true);}}};this.loadPlaylist=function(j){var l={playlist:f.playlist,pageLimit:f.pageLimit,pageIndex:(this.pager?this.pager.activePage:0),args:{}};var k=jQuery.extend({},l,j);this.setArgs(k.args);this.loading(true);if(k.playlist){if(((typeof k.playlist)=="object")){f.playlist=k.playlist.name;this.setPlaylist(k.playlist);}else{if(k.playlist.match(/^http[s]?\:\/\/|\.xml$/i)){this.parser.parseFile(k.playlist,function(m){i.setPlaylist(m);});}else{if(g){g.call(jQuery.media.commands.getPlaylist,function(m){i.setPlaylist(m);},null,k.playlist,k.pageLimit,k.pageIndex,this.args);}}}return true;}return false;};this.setPlaylist=function(m){if(m&&m.nodes){var j=[];jQuery.media.utils.checkVisibility(this.display,j);if(this.pager){this.pager.setTotalItems(m.total_rows);}if(this.activePager){this.activePager.setTotalItems(m.total_rows);}this.scrollRegion.clear();this.resetTeasers();var l=m.nodes.length;for(var k=0;k").mediaimage(null,true);this.display.append(i.display);if((f.rotatorTransition=="hscroll")||(f.rotatorTransition=="vscroll")){i.display.css({"float":"left"});}else{i.display.css({position:"absolute",zIndex:(200-this.images.length),top:0,left:0});}return i;};this.loadImages=function(i){this.images=[];this.imageIndex=0;jQuery.each(i,function(j){var k=h.addImage();if(j===0){k.display.unbind("imageLoaded").bind("imageLoaded",function(){h.onImageLoaded();}).show();}k.loadImage(this);h.images.push(k);});if(f.rotatorHover){this.display.unbind("mouseenter").bind("mouseenter",function(){h.startRotator();}).unbind("mouseleave").bind("mouseleave",function(){clearInterval(h.imageInterval);});}else{this.startRotator();}};this.startRotator=function(){clearInterval(this.imageInterval);this.imageInterval=setInterval(function(){h.showNextImage();},f.rotatorTimeout);};this.showNextImage=function(){this.hideImage(this.images[this.imageIndex].display);this.imageIndex=(this.imageIndex+1)%this.images.length;this.showImage(this.images[this.imageIndex].display);};this.showImage=function(i){if(f.rotatorTransition==="fade"){i.fadeIn(f.rotatorSpeed);}else{i.css({marginLeft:0,marginTop:0}).show();}};this.hideImage=function(i){switch(f.rotatorTransition){case"fade":i.fadeOut(f.rotatorSpeed);break;case"hscroll":i.animate({marginLeft:-this.width},f.rotatorSpeed,f.rotatorEasing,function(){i.css({marginLeft:0}).remove();h.display.append(i);});break;case"vscroll":i.animate({marginTop:-this.height},f.rotatorSpeed,f.rotatorEasing,function(){i.css({marginTop:0}).remove();h.display.append(i);});break;default:i.hide();break;}};var e=[];g.find("img").each(function(){e.push(c(this).attr("src"));});g.empty().css("overflow","hidden").append(c('
'));this.display=g.find(".imagerotatorinner");if(e.length){this.loadImages(e);}})(this,d);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{gateway:""});jQuery.media=jQuery.extend({},{rpc:function(d){return new (function(e){e=jQuery.media.utils.getSettings(e);var f=this;this.parseObject=function(k){var g="";if(k instanceof Date){g="";g+=k.getFullYear();g+=k.getMonth();g+=k.getDate();g+="T";g+=k.getHours()+":";g+=k.getMinutes()+":";g+=k.getSeconds();g+="";}else{if(k instanceof Array){g="\n";for(var j=0;j"+this.serializeToXML(k[j])+"\n";}g+="";}else{g="\n";for(var h in k){if(k.hasOwnProperty(h)){g+=" "+h+"";g+=this.serializeToXML(k[h])+"\n";}}g+="";}}return g;};this.serializeToXML=function(h){switch(typeof h){case"boolean":return""+((h)?"1":"0")+"";case"number":var g=parseInt(h,10);if(g==h){return""+h+"";}return""+h+"";case"string":return""+h+"";case"object":return this.parseObject(h);default:break;}return"";};this.parseXMLValue=function(h){var o=jQuery(h).children();var m=o.length;var p=function(i){return function(){i.push(f.parseXMLValue(this));};};var n=function(i){return function(){i[jQuery("> name",this).text()]=f.parseXMLValue(jQuery("value",this));};};for(var k=0;k data > value",l).each(p(g));return g;case"struct":var j={};jQuery("> member",l).each(n(j));return j;case"dateTime.iso8601":return NULL;default:break;}}return null;};this.parseXML=function(h){var g={};g.version="1.0";jQuery("methodResponse params param > value",h).each(function(i){g.result=f.parseXMLValue(this);});jQuery("methodResponse fault > value",h).each(function(i){g.error=f.parseXMLValue(this);});return g;};this.xmlRPC=function(l,k){var g='';g+="";g+=""+l+"";if(k.length>0){g+="";var j=k.length;for(var h=0;h"+this.serializeToXML(k[h])+"";}}g+="";}g+="";return g;};this.call=function(k,j,g,i,h){if(e.gateway){jQuery.ajax({url:e.gateway,dataType:"xml",type:"POST",data:this.xmlRPC(k,i),error:function(l,n,m){if(g){g(n);}else{if(window.console&&console.log){console.log("Error: "+n);}}},success:function(m){var l=f.parseXML(m);if(l.error){if(g){g(l.error);}else{if(window.console&&console.dir){console.dir(l.error);}}}else{if(j){j(l.result);}}},processData:false,contentType:"text/xml"});}else{if(j){j(null);}}};})(d);}},jQuery.media);jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{vertical:true,scrollSpeed:20,updateTimeout:40,hysteresis:40,showScrollbar:true,scrollMode:"auto"});jQuery.media.ids=jQuery.extend(jQuery.media.ids,{listMask:"#medialistmask",list:"#medialist",scrollWrapper:"#mediascrollbarwrapper",scrollBar:"#mediascrollbar",scrollTrack:"#mediascrolltrack",scrollHandle:"#mediascrollhandle",scrollUp:"#mediascrollup",scrollDown:"#mediascrolldown"});jQuery.fn.mediascroll=function(d){return new (function(e,g){g=jQuery.media.utils.getSettings(g);this.display=e;var h=this;this.spanMode=(g.scrollMode=="span");this.listMask=e.find(g.ids.listMask);if(this.spanMode||(g.scrollMode=="auto")){this.listMask.unbind("mouseenter").bind("mouseenter",function(i){h.onMouseOver(i);});this.listMask.unbind("mouseleave").bind("mouseleave",function(i){h.onMouseOut(i);});this.listMask.unbind("mousemove").bind("mousemove",function(i){h.onMouseMove(i);});}else{if(g.scrollMode=="mouse"){this.display.bind("mousewheel",function(k,l,j,i){k.preventDefault();h.onMouseScroll(j,i);});}}this.listMask.css("overflow","hidden");this.list=e.find(g.ids.list);var f=this.list.children().eq(0);this.elementWidth=f.width();this.elementHeight=f.height();this.elementSize=g.vertical?f.outerHeight(true):f.outerWidth(true);if(jQuery.browser.msie&&parseInt(jQuery.fn.jquery.replace(".",""),10)<132){this.template=c("
").append(jQuery.media.utils.cloneFix(f)).html();}else{this.template=c("
").append(f.clone()).html();}this.list.empty();this.pagePos=g.vertical?"pageY":"pageX";this.margin=g.vertical?"marginTop":"marginLeft";this.scrollSize=g.vertical?0:this.listMask.width();this.scrollMid=0;this.mousePos=0;this.listPos=0;this.scrollInterval=0;this.shouldScroll=false;this.bottomPos=0;this.ratio=0;this.elements=[];this.listSize=0;this.scrollBar=e.find(g.ids.scrollTrack).mediaslider(g.ids.scrollHandle,g.vertical);this.scrollUp=e.find(g.ids.scrollUp).medialink(g,function(){h.scroll(true);});this.scrollDown=e.find(g.ids.scrollDown).medialink(g,function(){h.scroll(false);});if(this.scrollBar){this.scrollBar.display.unbind("updatevalue").bind("updatevalue",function(i,j){h.setScrollPos(j*h.bottomPos,false);});this.scrollBar.display.unbind("setvalue").bind("setvalue",function(i,j){h.setScrollPos(j*h.bottomPos,true);});this.scrollBar.display.bind("mousewheel",function(k,l,j,i){k.preventDefault();h.onMouseScroll(j,i);});}this.setScrollSize=function(i){if(i){this.scrollSize=i;this.scrollMid=this.scrollSize/2;var j=this.scrollSize-(g.hysteresis*2);this.bottomPos=(this.listSize-this.scrollSize);this.ratio=((this.listSize-j)/j);this.shouldScroll=(this.bottomPos>0);}};this.clear=function(){this.mousePos=0;this.shouldScroll=false;this.bottomPos=0;this.ratio=0;this.scrolling=false;this.elements=[];this.listSize=0;this.list.css(this.margin,0);this.list.children().unbind();clearInterval(this.scrollInterval);this.list.empty();};this.getOffset=function(){return g.vertical?this.listMask.offset().top:this.listMask.offset().left;};this.activate=function(){this.setScrollSize(g.vertical?this.listMask.height():this.listMask.width());this.setScrollPos(0,true);};this.newItem=function(){var j=c(this.template);this.list.append(j);var i=this.getElement(j,this.elements.length);this.listSize+=i.size;if(g.vertical){this.list.css({height:this.listSize});}else{this.list.css({width:this.listSize});}this.elements.push(i);return i.obj;};this.getElement=function(k,i){var j=this.elementSize;var l=this.listSize;return{obj:k,size:j,position:l,bottom:(l+j),mid:(j/2),index:i};};this.scroll=function(i){var j=this.getElementAtPosition(i?0:this.scrollSize);if(j){var l=(j.straddle||i)?j:this.elements[j.index+1];if(l){var k=i?l.position:(l.bottom-this.scrollSize);this.setScrollPos(k,true);}}};this.onMouseScroll=function(j,i){var k=g.vertical?-i:j;this.setScrollPos(this.listPos+(g.scrollSpeed*k));};this.onMouseMove=function(i){this.mousePos=i[this.pagePos]-this.getOffset();if(this.shouldScroll&&this.spanMode){this.setScrollPos((this.mousePos-g.hysteresis)*this.ratio);}};this.onMouseOver=function(i){if(this.shouldScroll){clearInterval(this.scrollInterval);this.scrollInterval=setInterval(function(){h.update();},g.updateTimeout);}};this.onMouseOut=function(i){clearInterval(this.scrollInterval);};this.align=function(i){var j=this.getElementAtPosition(i?0:this.scrollSize);if(j){var k=i?j.position:(j.bottom-this.scrollSize);this.setScrollPos(k,true);}};this.setVisible=function(i){var k=this.elements[i];if(k){var j=this.listPos;if(k.positionthis.scrollSize){j=k.bottom-this.scrollSize;}}if(j!=this.listPos){this.setScrollPos(j,true);}}};this.getElementAtPosition=function(j){var l=null;var k=this.elements.length;while(k--){l=this.elements[k];if(((l.position-this.listPos)=j)){l.straddle=((l.bottom-this.listPos)!=j);break;}}return l;};this.update=function(){var j=this.mousePos-this.scrollMid;if(Math.abs(j)>g.hysteresis){var i=(j>0)?-g.hysteresis:g.hysteresis;j=g.scrollSpeed*((this.mousePos+i-this.scrollMid)/this.scrollMid);this.setScrollPos(this.listPos+j);}};this.setScrollPos=function(k,j){k=(k<0)?0:k;if(this.shouldScroll&&(k>this.bottomPos)){k=this.bottomPos;}this.listPos=k;if(this.scrollBar){var i=this.bottomPos?(this.listPos/this.bottomPos):0;this.scrollBar.setPosition(i);}if(j){if(g.vertical){this.list.animate({marginTop:-this.listPos},(g.scrollSpeed*10));}else{this.list.animate({marginLeft:-this.listPos},(g.scrollSpeed*10));}}else{this.list.css(this.margin,-this.listPos);}};})(this,d);};jQuery.media=jQuery.extend({},{sha256:function(){function d(V,U){d.charSize=8;d.b64pad="";d.hexCase=0;var S=null;var Q=null;var z=function(p){var o=[];var s=(1<>5]|=(p.charCodeAt(q/d.charSize)&s)<<(32-d.charSize-q%32);}return o;};var x=function(p){var o=[];var s=p.length;for(var q=0;q>3]|=r<<(24-(4*(q%8)));}else{return"INVALID HEX STRING";}}return o;};var n=null;var l=null;if("HEX"===U){if(0!==(V.length%2)){return"TEXT MUST BE IN BYTE INCREMENTS";}n=V.length*4;l=x(V);}else{if(("ASCII"===U)||("undefined"===typeof(U))){n=V.length*d.charSize;l=z(V);}else{return"UNKNOWN TEXT INPUT TYPE";}}var T=function(p){var o=d.hexCase?"0123456789ABCDEF":"0123456789abcdef";var s="";var r=p.length*4;for(var q=0;q>2]>>((3-q%4)*8+4))&15)+o.charAt((p[q>>2]>>((3-q%4)*8))&15);}return s;};var R=function(p){var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var v="";var u=p.length*4;for(var r=0;r>2]>>8*(3-r%4))&255)<<16)|(((p[r+1>>2]>>8*(3-(r+1)%4))&255)<<8)|((p[r+2>>2]>>8*(3-(r+2)%4))&255);for(var q=0;q<4;q++){if(r*8+q*6>p.length*32){v+=d.b64pad;}else{v+=o.charAt((s>>6*(3-q))&63);}}}return v;};var K=function(o,p){if(p<32){return(o>>>p)|(o<<(32-p));}else{return o;}};var H=function(o,p){if(p<32){return o>>>p;}else{return 0;}};var y=function(o,q,p){return(o&q)^(~o&p);};var t=function(o,q,p){return(o&q)^(o&p)^(q&p);};var m=function(o){return K(o,2)^K(o,13)^K(o,22);};var k=function(o){return K(o,6)^K(o,11)^K(o,25);};var j=function(o){return K(o,7)^K(o,18)^H(o,3);};var i=function(o){return K(o,17)^K(o,19)^H(o,10);};var h=function(p,r){var q=(p&65535)+(r&65535);var o=(p>>>16)+(r>>>16)+(q>>>16);return((o&65535)<<16)|(q&65535);};var g=function(p,o,u,s){var r=(p&65535)+(o&65535)+(u&65535)+(s&65535);var q=(p>>>16)+(o>>>16)+(u>>>16)+(s>>>16)+(r>>>16);return((q&65535)<<16)|(r&65535);};var f=function(p,o,v,u,s){var r=(p&65535)+(o&65535)+(v&65535)+(u&65535)+(s&65535);var q=(p>>>16)+(o>>>16)+(v>>>16)+(u>>>16)+(s>>>16)+(r>>>16);return((q&65535)<<16)|(r&65535);};var e=function(B,A,w){var o=[];var M,L,J,I,G,F,E,D;var v,s;var q;var p=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];if(w==="SHA-224"){q=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428];}else{q=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];}B[A>>5]|=128<<(24-A%32);B[((A+1+64>>9)<<4)+15]=A;var u=B.length;for(var C=0;Cp){v[15]&=4294967040;}}for(var r=0;r<=15;r++){u[r]=v[r]^909522486;s[r]=v[r]^1549556828;}q=e(u.concat(l),512+n,B);q=e(s.concat(q),512+o,B);return(w(q));};}this.encrypt=function(g,e){var f=new d(e,"ASCII");return f.getHMAC(g,"ASCII","SHA-256","HEX");};}},jQuery.media);jQuery.fn.mediaslider=function(d,f,e){if(this.length===0){return null;}return new (function(j,g,i,h){var k=this;this.display=j.css({cursor:"pointer"});this.dragging=false;this.value=0;this.handle=this.display.find(g);this.pagePos=i?"pageY":"pageX";this.handlePos=0;if(this.handle.length>0){this.handleSize=i?this.handle.height():this.handle.width();this.handleMid=(this.handleSize/2);}this.onResize=function(){this.setTrackSize();this.updateValue(this.value);};this.setTrackSize=function(){this.trackSize=i?this.display.height():this.display.width();this.trackSize-=this.handleSize;this.trackSize=(this.trackSize>0)?this.trackSize:1;};this.setValue=function(l){this.setPosition(l);this.display.trigger("setvalue",this.value);};this.updateValue=function(l){this.setPosition(l);this.display.trigger("updatevalue",this.value);};this.setPosition=function(l){l=(l<0)?0:l;l=(l>1)?1:l;this.value=l;this.handlePos=h?(1-this.value):this.value;this.handlePos*=this.trackSize;this.handle.css((i?"marginTop":"marginLeft"),this.handlePos);};this.display.unbind("mousedown").bind("mousedown",function(l){l.preventDefault();k.dragging=true;});this.getOffset=function(){var l=i?this.display.offset().top:this.display.offset().left;return(l+(this.handleSize/2));};this.getPosition=function(l){var m=(l-this.getOffset())/this.trackSize;m=(m<0)?0:m;m=(m>1)?1:m;m=h?(1-m):m;return m;};this.display.unbind("mousemove").bind("mousemove",function(l){l.preventDefault();if(k.dragging){k.updateValue(k.getPosition(l[k.pagePos]));}});this.display.unbind("mouseleave").bind("mouseleave",function(l){l.preventDefault();if(k.dragging){k.dragging=false;k.setValue(k.getPosition(l[k.pagePos]));}});this.display.unbind("mouseup").bind("mouseup",function(l){l.preventDefault();if(k.dragging){k.dragging=false;k.setValue(k.getPosition(l[k.pagePos]));}});this.onResize();})(this,d,f,e);};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{pageLink:false});jQuery.fn.mediateaser=function(f,d,g,e){if(this.length===0){return null;}return new (function(l,i,m,h,j){j=jQuery.media.utils.getSettings(j);var n=this;this.display=h;this.display.unbind("mouseenter").bind("mouseenter",function(o){if(j.template.onTeaserOver){j.template.onTeaserOver(n);}});this.display.unbind("mouseleave").bind("mouseleave",function(o){if(j.template.onTeaserOut){j.template.onTeaserOut(n);}});this.index=m;this.node=this.display.medianode(l,j);if(this.node){this.node.loadNode(i);}if(this.node&&j.pageLink){var k=j.baseURL;k+=i.path?i.path:("node/"+i.nid);this.node.display.wrap('');}this.reset=function(){if(this.node){this.node.display.unbind();}};this.setActive=function(o){if(j.template.onTeaserActivate){j.template.onTeaserActivate(this,o);}};this.setSelected=function(o){if(j.template.onTeaserSelect){j.template.onTeaserSelect(this,o);}};if(j.template.onTeaserLoad){j.template.onTeaserLoad(this);}})(f,d,g,this,e);};jQuery.media.ids=jQuery.extend(jQuery.media.ids,{titleLinks:"#mediatitlelinks"});jQuery.fn.mediatitlebar=function(d){if(this.length===0){return null;}return new (function(e,f){var g=this;this.display=e;this.titleLinks=this.display.find(f.ids.titleLinks);this.display.find("a").each(function(){var h=c(this).attr("href");c(this).medialink(f,function(i){i.preventDefault();g.display.trigger(i.data.id);},{id:h.substr(1),obj:c(this)});});})(this,d);};jQuery.media=jQuery.extend({},{utils:{getBaseURL:function(){var d=new RegExp(/^(http[s]?\:[\\\/][\\\/])([^\\\/\?]+)/);var e=d.exec(location.href);return e?e[0]:"";},timer:{},stopElementHide:{},showThenHide:function(d,h,e,f,g){if(d){d.show(e);if(jQuery.media.utils.timer.hasOwnProperty(h)){clearTimeout(jQuery.media.utils.timer[h]);}jQuery.media.utils.timer[h]=setTimeout(function(){if(!jQuery.media.utils.stopElementHide[h]){d.hide(f,function(){if(jQuery.media.utils.stopElementHide[h]){d.show();}if(g){g();}});}},5000);}},stopHide:function(d,e){jQuery.media.utils.stopElementHide[e]=true;clearTimeout(jQuery.media.utils.timer[e]);},stopHideOnOver:function(d,e){if(d){jQuery.media.utils.stopElementHide[e]=false;d.unbind("mouseover").bind("mouseover",{id:e},function(f){jQuery.media.utils.stopElementHide[f.data.id]=true;}).unbind("mouseout").bind("mouseout",{id:e},function(f){jQuery.media.utils.stopElementHide[f.data.id]=false;});}},getSettings:function(d){if(!d){d={};}if(!d.initialized){d=jQuery.extend({},jQuery.media.defaults,d);d.ids=jQuery.extend({},jQuery.media.ids,d.ids);d.baseURL=d.baseURL?d.baseURL:jQuery.media.utils.getBaseURL();d.baseURL+=d.baseURL?"/":"";d.initialized=true;}return d;},getId:function(d){return d.attr("id")?d.attr("id"):d.attr("class")?d.attr("class"):"mediaplayer";},getScaledRect:function(d,g){var f={};f.x=g.x?g.x:0;f.y=g.y?g.y:0;f.width=g.width?g.width:0;f.height=g.height?g.height:0;if(d){var e=(g.width/g.height);f.height=(e>d)?g.height:Math.floor(g.width/d);f.width=(e>d)?Math.floor(g.height*d):g.width;f.x=Math.floor((g.width-f.width)/2);f.y=Math.floor((g.height-f.height)/2);}return f;},checkVisibility:function(f,e){var d=true;f.parents().each(function(){var g=jQuery(this);if(!g.is(":visible")){d=false;var h=g.attr("class");e.push({obj:g,attr:h});g.removeClass(h);}});},resetVisibility:function(d){var e=d.length;while(e){e--;d[e].obj.addClass(d[e].attr);}},getFlash:function(j,d,e,k,g,f){var l=window.location.protocol;if(l.charAt(l.length-1)==":"){l=l.substring(0,l.length-1);}var i=jQuery.param(g);var h=' ';h+='';h+='';h+='';h+='';h+='';h+='';h+='';h+="";return h;},removeFlash:function(e,f){if(typeof(swfobject)!="undefined"){swfobject.removeSWF(f);}else{var d=e.find("object").eq(0)[0];if(d){d.parentNode.removeChild(d);}}},insertFlash:function(j,m,e,f,n,h,g,l){jQuery.media.utils.removeFlash(j,e);j.children().remove();j.append('

Get Adobe Flash player

');if(typeof(swfobject)!="undefined"){var i={allowScriptAccess:"always",allowfullscreen:"true",wmode:g,quality:"high"};swfobject.embedSWF(m,e,f,n,"9.0.0","expressInstall.swf",h,i,{},function(o){l(o.ref);});}else{var k=jQuery.media.utils.getFlash(m,e,f,n,h,g);var d=j.find("#"+e).eq(0);if(jQuery.browser.msie){d[0].outerHTML=k;l(j.find("object").eq(0)[0]);}else{d.replaceWith(k);l(j.find("embed").eq(0)[0]);}}},cloneFix:function(g,f){var d=g.map(function(){var i=this.outerHTML;if(!i){var j=this.ownerDocument.createElement("div");j.appendChild(this.cloneNode(true));i=j.innerHTML;}return jQuery.clean([i.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0];});if(f===true){var h=g.find("*").andSelf(),e=0;d.find("*").andSelf().each(function(){if(this.nodeName!==h[e].nodeName){return;}var i=jQuery.data(h[e],"events");for(var k in i){if(i.hasOwnProperty(k)){for(var j in i[k]){if(i[k].hasOwnProperty(j)){jQuery.event.add(this,k,i[k][j],i[k][j].data);}}}}e++;});}return d;}}},jQuery.media);window.onVimeoReady=function(d){d=d.replace(/\_media$/,"");jQuery.media.players[d].node.player.media.player.onReady();};window.onVimeoFinish=function(d){d=d.replace(/\_media$/,"");jQuery.media.players[d].node.player.media.player.onFinished();};window.onVimeoLoading=function(e,d){d=d.replace(/\_media$/,"");jQuery.media.players[d].node.player.media.player.onLoading(e);};window.onVimeoPlay=function(d){d=d.replace(/\_media$/,"");jQuery.media.players[d].node.player.media.player.onPlaying();};window.onVimeoPause=function(d){d=d.replace(/\_media$/,"");jQuery.media.players[d].node.player.media.player.onPaused();};window.onVimeoProgress=function(e,d){d=d.replace(/\_media$/,"");jQuery.media.players[d].node.player.media.player.onProgress(e);};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{vimeo:function(d){return(d.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i)===0);}});jQuery.fn.mediavimeo=function(e,d){return new (function(h,g,f){this.display=h;var i=this;this.player=null;this.videoFile=null;this.ready=false;this.bytesLoaded=0;this.bytesTotal=0;this.currentVolume=1;this.createMedia=function(l,n){this.videoFile=l;this.ready=false;var k=(g.id+"_media");var j={clip_id:this.getId(l.path),width:"100%",height:"100%",js_api:"1",js_onLoad:"onVimeoReady",js_swf_id:k};var m=Math.floor(Math.random()*1000000);var o="http://vimeo.com/moogaloop.swf?rand="+m;jQuery.media.utils.insertFlash(this.display,o,k,"100%","100%",j,g.wmode,function(p){i.player=p;i.loadPlayer();});};this.getId=function(k){var j=/^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i;return(k.search(j)===0)?k.replace(j,"$3"):k;};this.loadMedia=function(j){this.bytesLoaded=0;this.bytesTotal=0;this.createMedia(j);};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player&&this.player.api_addEventListener){this.player.api_addEventListener("onProgress","onVimeoProgress");this.player.api_addEventListener("onFinish","onVimeoFinish");this.player.api_addEventListener("onLoading","onVimeoLoading");this.player.api_addEventListener("onPlay","onVimeoPlay");this.player.api_addEventListener("onPause","onVimeoPause");f({type:"playerready"});this.playMedia();}};this.onFinished=function(){f({type:"complete"});};this.onLoading=function(j){this.bytesLoaded=j.bytesLoaded;this.bytesTotal=j.bytesTotal;};this.onPlaying=function(){f({type:"playing",busy:"hide"});};this.onPaused=function(){f({type:"paused",busy:"hide"});};this.playMedia=function(){f({type:"playing",busy:"hide"});if(this.player.api_play){this.player.api_play();}};this.onProgress=function(j){f({type:"progress"});};this.pauseMedia=function(){f({type:"paused",busy:"hide"});if(this.player.api_pause){this.player.api_pause();}};this.stopMedia=function(){this.pauseMedia();if(this.player.api_unload){this.player.api_unload();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(g.id+"_media"));this.display.children().remove();};this.seekMedia=function(j){if(this.player.api_seekTo){this.player.api_seekTo(j);}};this.setVolume=function(j){this.currentVolume=j;if(this.player.api_setVolume){this.player.api_setVolume((j*100));}};this.getVolume=function(){return this.currentVolume;};this.getDuration=function(){return this.player.api_getDuration?this.player.api_getDuration():0;};this.getCurrentTime=function(){return this.player.api_getCurrentTime?this.player.api_getCurrentTime():0;};this.getBytesLoaded=function(){return this.bytesLoaded;};this.getBytesTotal=function(){return this.bytesTotal;};this.setQuality=function(j){};this.getQuality=function(){return"";};this.hasControls=function(){return true;};this.showControls=function(j){};this.getEmbedCode=function(){return"This video cannot be embedded.";};this.getMediaLink=function(){return"This video currently does not have a link.";};})(this,e,d);};jQuery.fn.mediavoter=function(d,f,e){if(this.length===0){return null;}return new (function(h,g,j,i){this.display=h;var k=this;this.nodeId=0;this.votes=[];this.tag=this.display.attr("tag");this.display.find("div").each(function(){if(i){c(this).css("cursor","pointer");c(this).unbind("click").bind("click",function(l){k.setVote(parseInt(c(this).attr("vote"),10));});c(this).unbind("mouseenter").bind("mouseenter",function(l){k.updateVote({value:parseInt(c(this).attr("vote"),10)},true);});}k.votes.push({vote:parseInt(c(this).attr("vote"),10),display:c(this)});});this.votes.sort(function(m,l){return(m.vote-l.vote);});if(i){this.display.unbind("mouseleave").bind("mouseleave",function(l){k.updateVote({value:0},true);});}this.updateVote=function(l,m){if(l&&g.template.updateVote){g.template.updateVote(this,l.value,m);}};this.getVote=function(m){if(m&&m.nid){this.nodeId=parseInt(m.nid,10);if(m.vote){var l=i?m.vote.uservote:m.vote.vote;this.updateVote(m.vote.vote,false);this.display.trigger("voteGet",l);}else{if(j&&m.nid&&(this.display.length>0)){this.display.trigger("processing");var n=i?jQuery.media.commands.getUserVote:jQuery.media.commands.getVote;j.call(n,function(o){k.updateVote(o,false);k.display.trigger("voteGet",o);},null,"node",this.nodeId,this.tag);}}}};this.setVote=function(l){if(j&&this.nodeId){this.display.trigger("processing");this.updateVote({value:l},false);j.call(jQuery.media.commands.setVote,function(m){k.display.trigger("voteSet",m);},null,"node",this.nodeId,l,this.tag);}};this.deleteVote=function(){if(j&&this.nodeId){this.display.trigger("processing");j.call(jQuery.media.commands.deleteVote,function(l){k.updateVote(l,false);k.display.trigger("voteDelete",l);},null,"node",this.nodeId,this.tag);}};})(this,d,f,e);};window.onYouTubePlayerReady=function(d){d=d.replace(/\_media$/,"");jQuery.media.players[d].node.player.media.player.onReady();};jQuery.media.playerTypes=jQuery.extend(jQuery.media.playerTypes,{youtube:function(d){return(d.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i)===0);}});jQuery.fn.mediayoutube=function(e,d){return new (function(h,g,f){this.display=h;var i=this;this.player=null;this.videoFile=null;this.loaded=false;this.ready=false;this.qualities=[];this.createMedia=function(k,m){this.videoFile=k;this.ready=false;var j=(g.id+"_media");var l=Math.floor(Math.random()*1000000);var n="http://www.youtube.com/apiplayer?rand="+l+"&version=3&enablejsapi=1&playerapiid="+j;jQuery.media.utils.insertFlash(this.display,n,j,"100%","100%",{},g.wmode,function(o){i.player=o;i.loadPlayer();});};this.getId=function(k){var j=/^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i;return(k.search(j)===0)?k.replace(j,"$2"):k;};this.loadMedia=function(j){if(this.player){this.loaded=false;this.videoFile=j;f({type:"playerready"});if(this.player.loadVideoById){this.player.loadVideoById(this.getId(this.videoFile.path),0,g.quality);}}};this.onReady=function(){this.ready=true;this.loadPlayer();};this.loadPlayer=function(){if(this.ready&&this.player){window[g.id+"StateChange"]=function(j){i.onStateChange(j);};window[g.id+"PlayerError"]=function(j){i.onError(j);};window[g.id+"QualityChange"]=function(j){i.quality=j;};if(this.player.addEventListener){this.player.addEventListener("onStateChange",g.id+"StateChange");this.player.addEventListener("onError",g.id+"PlayerError");this.player.addEventListener("onPlaybackQualityChange",g.id+"QualityChange");}if(this.player.getAvailableQualityLevels){this.qualities=this.player.getAvailableQualityLevels();}f({type:"playerready"});if(this.player.loadVideoById){this.player.loadVideoById(this.getId(this.videoFile.path),0);}}};this.onStateChange=function(k){var j=this.getPlayerState(k);f({type:j.state,busy:j.busy});if(!this.loaded&&j=="playing"){this.loaded=true;f({type:"meta"});}};this.onError=function(k){var j="An unknown error has occured: "+k;if(k==100){j="The requested video was not found. ";j+="This occurs when a video has been removed (for any reason), ";j+="or it has been marked as private.";}else{if((k==101)||(k==150)){j="The video requested does not allow playback in an embedded player.";}}if(window.console&&console.log){console.log(j);}f({type:"error",data:j});};this.getPlayerState=function(j){switch(j){case 5:return{state:"ready",busy:false};case 3:return{state:"buffering",busy:"show"};case 2:return{state:"paused",busy:"hide"};case 1:return{state:"playing",busy:"hide"};case 0:return{state:"complete",busy:false};case -1:return{state:"stopped",busy:false};default:return{state:"unknown",busy:false};}return"unknown";};this.playMedia=function(){f({type:"buffering",busy:"show"});if(this.player.playVideo){this.player.playVideo();}};this.pauseMedia=function(){if(this.player.pauseVideo){this.player.pauseVideo();}};this.stopMedia=function(){if(this.player.stopVideo){this.player.stopVideo();}};this.destroy=function(){this.stopMedia();jQuery.media.utils.removeFlash(this.display,(g.id+"_media"));this.display.children().remove();};this.seekMedia=function(j){f({type:"buffering",busy:"show"});if(this.player.seekTo){this.player.seekTo(j,true);}};this.setVolume=function(j){if(this.player.setVolume){this.player.setVolume(j*100);}};this.setQuality=function(j){if(this.player.setPlaybackQuality){this.player.setPlaybackQuality(j);}};this.getVolume=function(){return this.player.getVolume?(this.player.getVolume()/100):0;};this.getDuration=function(){return this.player.getDuration?this.player.getDuration():0;};this.getCurrentTime=function(){return this.player.getCurrentTime?this.player.getCurrentTime():0;};this.getQuality=function(){return this.player.getPlaybackQuality?this.player.getPlaybackQuality():0;};this.getEmbedCode=function(){return this.player.getVideoEmbedCode?this.player.getVideoEmbedCode():0;};this.getMediaLink=function(){return this.player.getVideoUrl?this.player.getVideoUrl():0;};this.getBytesLoaded=function(){return this.player.getVideoBytesLoaded?this.player.getVideoBytesLoaded():0;};this.getBytesTotal=function(){return this.player.getVideoBytesTotal?this.player.getVideoBytesTotal():0;};this.hasControls=function(){return false;};this.showControls=function(j){};})(this,e,d);};})(jQuery); \ No newline at end of file diff --git a/js/jquery.osmplayer.js b/js/jquery.osmplayer.js deleted file mode 100644 index 8166d2db..00000000 --- a/js/jquery.osmplayer.js +++ /dev/null @@ -1,6912 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the auto server object. - auto : function( settings ) { - // Return a new function for this object - return new (function( settings ) { - this.json = jQuery.media.json( settings ); - this.rpc = jQuery.media.rpc( settings ); - this.call = function( method, onSuccess, onFailed, params, protocol ) { - if( protocol == "json" ) { - this.json.call( method, onSuccess, onFailed, params, protocol ); - } - else { - this.rpc.call( method, onSuccess, onFailed, params, protocol ); - } - }; - })( settings ); - } - }, jQuery.media ); - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - volumeVertical:false - }); - - // Set up our defaults for this component. - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - currentTime:"#mediacurrenttime", - totalTime:"#mediatotaltime", - playPause:"#mediaplaypause", - seekUpdate:"#mediaseekupdate", - seekProgress:"#mediaseekprogress", - seekBar:"#mediaseekbar", - seekHandle:"#mediaseekhandle", - volumeUpdate:"#mediavolumeupdate", - volumeBar:"#mediavolumebar", - volumeHandle:"#mediavolumehandle", - mute:"#mediamute" - }); - - jQuery.fn.mediacontrol = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( controlBar, settings ) { - settings = jQuery.media.utils.getSettings(settings); - this.display = controlBar; - var _this = this; - - // Allow the template to provide their own function for this... - this.formatTime = (settings.template && settings.template.formatTime) ? settings.template.formatTime : - function( time ) { - time = time ? time : 0; - var seconds = 0; - var minutes = 0; - var hour = 0; - - hour = Math.floor(time / 3600); - time -= (hour * 3600); - minutes = Math.floor( time / 60 ); - time -= (minutes * 60); - seconds = Math.floor(time % 60); - - var timeString = ""; - - if( hour ) { - timeString += String(hour); - timeString += ":"; - } - - timeString += (minutes >= 10) ? String(minutes) : ("0" + String(minutes)); - timeString += ":"; - timeString += (seconds >= 10) ? String(seconds) : ("0" + String(seconds)); - return { - time:timeString, - units:"" - }; - }; - - this.setToggle = function( button, state ) { - var on = state ? ".on" : ".off"; - var off = state ? ".off" : ".on"; - if( button ) { - button.find(on).show(); - button.find(off).hide(); - } - }; - - var zeroTime = this.formatTime( 0 ); - this.duration = 0; - this.volume = -1; - this.prevVolume = 0; - this.percentLoaded = 0; - this.playState = false; - this.muteState = false; - this.currentTime = controlBar.find( settings.ids.currentTime ).text( zeroTime.time ); - this.totalTime = controlBar.find( settings.ids.totalTime ).text( zeroTime.time ); - - // Allow them to attach custom links to the control bar that perform player functions. - this.display.find("a.mediaplayerlink").each( function() { - var linkId = $(this).attr("href"); - $(this).medialink( settings, function( event ) { - event.preventDefault(); - _this.display.trigger( event.data.id ); - }, { - id:linkId.substr(1), - obj:$(this) - } ); - }); - - // Set up the play pause button. - this.playPauseButton = controlBar.find( settings.ids.playPause ).medialink( settings, function( event, target ) { - _this.playState = !_this.playState; - _this.setToggle( target, _this.playState ); - _this.display.trigger( "controlupdate", { - type: (_this.playState ? "pause" : "play") - }); - }); - - // Set up the seek bar... - this.seekUpdate = controlBar.find( settings.ids.seekUpdate ).css("width", 0); - this.seekProgress = controlBar.find( settings.ids.seekProgress ).css("width", 0); - this.seekBar = controlBar.find( settings.ids.seekBar ).mediaslider( settings.ids.seekHandle, false ); - if( this.seekBar ) { - this.seekBar.display.unbind("setvalue").bind( "setvalue", function( event, data ) { - _this.seekUpdate.css( "width", (data * _this.seekBar.trackSize) + "px" ); - _this.display.trigger( "controlupdate", { - type:"seek", - value:(data * _this.duration) - }); - }); - this.seekBar.display.unbind("updatevalue").bind( "updatevalue", function( event, data ) { - _this.seekUpdate.css( "width", (data * _this.seekBar.trackSize) + "px" ); - }); - } - - this.setVolume = function( vol ) { - if( this.volumeBar ) { - if( settings.volumeVertical ) { - this.volumeUpdate.css({ - "marginTop":(this.volumeBar.handlePos + this.volumeBar.handleMid), - "height":(this.volumeBar.trackSize - this.volumeBar.handlePos) - }); - } - else { - this.volumeUpdate.css( "width", (vol * this.volumeBar.trackSize) ); - } - } - }; - - // Set up the volume bar. - this.volumeUpdate = controlBar.find( settings.ids.volumeUpdate ); - this.volumeBar = controlBar.find( settings.ids.volumeBar ).mediaslider( settings.ids.volumeHandle, settings.volumeVertical, settings.volumeVertical ); - if( this.volumeBar ) { - this.volumeBar.display.unbind("setvalue").bind("setvalue", function( event, data ) { - _this.setVolume( data ); - _this.display.trigger( "controlupdate", { - type:"volume", - value:data - }); - }); - this.volumeBar.display.unbind("updatevalue").bind("updatevalue", function( event, data ) { - _this.setVolume( data ); - _this.volume = data; - }); - } - - // Setup the mute button. - this.mute = controlBar.find(settings.ids.mute).medialink( settings, function( event, target ) { - _this.muteState = !_this.muteState; - _this.setToggle( target, _this.muteState ); - _this.setMute( _this.muteState ); - }); - - this.setMute = function( state ) { - this.prevVolume = (this.volumeBar.value > 0) ? this.volumeBar.value : this.prevVolume; - this.volumeBar.updateValue( state ? 0 : this.prevVolume ); - this.display.trigger( "controlupdate", { - type:"mute", - value:state - }); - }; - - this.setProgress = function( percent ) { - if( this.seekProgress && this.seekBar ) { - this.seekProgress.css( "width", (percent * (this.seekBar.trackSize + this.seekBar.handleSize)) ); - } - }; - - this.onResize = function() { - if( this.seekBar ) { - this.seekBar.onResize(); - } - this.setProgress( this.percentLoaded ); - }; - - // Handle the media events... - this.onMediaUpdate = function( data ) { - switch( data.type ) { - case "reset": - this.reset(); - break; - case "paused": - this.playState = true; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "playing": - this.playState = false; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "stopped": - this.playState = true; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "progress": - this.percentLoaded = data.percentLoaded; - this.setProgress( this.percentLoaded ); - break; - case "meta": - case "update": - this.timeUpdate( data.currentTime, data.totalTime ); - if( this.volumeBar ) { - this.volumeBar.updateValue( data.volume ); - } - break; - default: - break; - } - }; - - // Call to reset all controls... - this.reset = function() { - this.totalTime.text( this.formatTime(0).time ); - this.currentTime.text( this.formatTime(0).time ); - if( this.seekBar ) { - this.seekBar.updateValue(0); - } - this.seekUpdate.css( "width", "0px" ); - this.seekProgress.css( "width", "0px" ); - }; - - this.timeUpdate = function( cTime, tTime ) { - this.duration = tTime; - this.totalTime.text( this.formatTime( tTime ).time ); - this.currentTime.text( this.formatTime( cTime ).time ); - if( tTime && this.seekBar && !this.seekBar.dragging ) { - this.seekBar.updateValue( cTime / tTime ); - } - }; - - // Reset the time values. - this.timeUpdate( 0, 0 ); - })( this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Called when the YouTube player is ready. - window.onDailymotionPlayerReady = function( playerId ) { - playerId = playerId.replace("_media", ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "dailymotion":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?dailymotion\.com/i) === 0); - } - }); - - jQuery.fn.mediadailymotion = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.meta = false; - this.loaded = false; - this.ready = false; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://www.dailymotion.com/swf/' + videoFile.path + '?rand=' + rand + '&enablejsapi=1&playerapiid=' + playerId; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - {}, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.loadMedia = function( videoFile ) { - if( this.player ) { - this.loaded = false; - this.meta = false; - this.videoFile = videoFile; - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - this.player.loadVideoById( this.videoFile.path, 0 ); - } - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - this.loadPlayer = function() { - if( this.ready && this.player ) { - // Create our callback functions. - window[options.id + 'StateChange'] = function( newState ) { - _this.onStateChange( newState ); - }; - - window[options.id + 'PlayerError'] = function( errorCode ) { - _this.onError( errorCode ); - }; - - // Add our event listeners. - this.player.addEventListener('onStateChange', options.id + 'StateChange'); - this.player.addEventListener('onError', options.id + 'PlayerError'); - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - this.player.loadVideoById( this.videoFile.path, 0 ); - } - }; - - // Called when the player state changes. - this.onStateChange = function( newState ) { - var playerState = this.getPlayerState( newState ); - - // Alright... Dailymotion's status updates are just crazy... - // write some hacks to just make it work. - - if( !(!this.meta && playerState.state =="stopped") ) { - onUpdate( { - type:playerState.state, - busy:playerState.busy - } ); - } - - if( !this.loaded && playerState.state == "buffering" ) { - this.loaded = true; - onUpdate( { - type:"paused", - busy:"hide" - } ); - if( options.autostart ) { - this.playMedia(); - } - } - - if( !this.meta && playerState.state == "playing" ) { - // Set this player to meta. - this.meta = true; - - // Update our meta data. - onUpdate( { - type:"meta" - } ); - } - }; - - // Called when the player has an error. - this.onError = function( errorCode ) { - var errorText = "An unknown error has occured: " + errorCode; - if( errorCode == 100 ) { - errorText = "The requested video was not found. "; - errorText += "This occurs when a video has been removed (for any reason), "; - errorText += "or it has been marked as private."; - } else if( (errorCode == 101) || (errorCode == 150) ) { - errorText = "The video requested does not allow playback in an embedded player."; - } - onUpdate( { - type:"error", - data:errorText - } ); - }; - - // Translates the player state for the API player. - this.getPlayerState = function( playerState ) { - switch (playerState) { - case 5: - return {state:'ready', busy:false}; - case 3: - return {state:'buffering', busy:"show"}; - case 2: - return {state:'paused', busy:"hide"}; - case 1: - return {state:'playing', busy:"hide"}; - case 0: - return {state:'complete', busy:false}; - case -1: - return {state:'stopped', busy:false}; - default: - return {state:'unknown', busy:false}; - } - return 'unknown'; - }; - - /* - this.setSize = function( newWidth, newHeight ) { - this.player.setSize(newWidth, newHeight); - }; - */ - this.playMedia = function() { - onUpdate({ - type:"buffering", - busy:"show" - }); - this.player.playVideo(); - }; - - this.pauseMedia = function() { - this.player.pauseVideo(); - }; - - this.stopMedia = function() { - this.player.stopVideo(); - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - onUpdate({ - type:"buffering", - busy:"show" - }); - this.player.seekTo( pos, true ); - }; - - this.setVolume = function( vol ) { - this.player.setVolume( vol * 100 ); - }; - - this.getVolume = function() { - return (this.player.getVolume() / 100); - }; - - this.getDuration = function() { - return this.player.getDuration(); - }; - - this.getCurrentTime = function() { - return this.player.getCurrentTime(); - }; - - this.getBytesLoaded = function() { - return this.player.getVideoBytesLoaded(); - }; - - this.getBytesTotal = function() { - return this.player.getVideoBytesTotal(); - }; - - this.getEmbedCode = function() { - return this.player.getVideoEmbedCode(); - }; - - this.getMediaLink = function() { - return this.player.getVideoUrl(); - }; - - this.hasControls = function() { - return true; - }; - this.showControls = function(show) {}; - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - })( this, options, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - volume:80, - autostart:false, - streamer:"", - embedWidth:450, - embedHeight:337, - wmode:"transparent", - forceOverflow:false, - quality:"default", - repeat:false - }); - - jQuery.fn.mediadisplay = function( options ) { - if( this.length === 0 ) { - return null; - } - return new (function( mediaWrapper, options ) { - this.settings = jQuery.media.utils.getSettings( options ); - this.display = mediaWrapper; - var _this = this; - this.volume = -1; - this.player = null; - this.preview = ''; - this.updateInterval = null; - this.progressInterval = null; - this.playQueue = []; - this.playIndex = 0; - this.playerReady = false; - this.loaded = false; - this.mediaFile = null; - this.hasPlaylist = false; - - // If they provide the forceOverflow variable, then that means they - // wish to force the media player to override all parents overflow settings. - if( this.settings.forceOverflow ) { - // Make sure that all parents have overflow visible so that - // browser full screen will always work. - this.display.parents().css("overflow", "visible"); - } - - this.reset = function() { - this.loaded = false; - this.stopMedia(); - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - this.playQueue.length = 0; - this.playQueue = []; - this.playIndex = 0; - this.playerReady = false; - this.mediaFile = null; - this.display.empty().trigger( "mediaupdate", {type:"reset"} ); - }; - - // Returns the media that has the lowest weight value, which means - // this player prefers that media over the others. - this.getPlayableMedia = function( files ) { - var mFile = null; - var i = files.length; - while(i--) { - var tempFile = new jQuery.media.file( files[i], this.settings ); - if( !mFile || (tempFile.weight < mFile.weight) ) { - mFile = tempFile; - } - } - return mFile; - }; - - // Returns a valid media file for this browser. - this.getMediaFile = function( file ) { - if( file ) { - var type = typeof file; - if( ((type === 'object') || (type === 'array')) && file[0] ) { - file = this.getPlayableMedia( file ); - } - } - return file; - }; - - // Adds a media file to the play queue. - this.addToQueue = function( file ) { - if( file ) { - this.playQueue.push( this.getMediaFile( file ) ); - } - }; - - this.loadFiles = function( files ) { - if( files ) { - this.playQueue.length = 0; - this.playQueue = []; - this.playIndex = 0; - this.addToQueue( files.intro ); - this.addToQueue( files.commercial ); - this.addToQueue( files.prereel ); - this.addToQueue( files.media ); - this.addToQueue( files.postreel ); - } - var hasMedia = (this.playQueue.length > 0); - if( !hasMedia ) { - if (this.player) { - // Destroy the current player. - this.player.destroy(); - this.player = null; - } - - this.display.trigger( "mediaupdate", {type:"nomedia"} ); - } - return hasMedia; - }; - - this.playNext = function() { - if( this.playQueue.length > this.playIndex ) { - this.loadMedia( this.playQueue[this.playIndex] ); - this.playIndex++; - } - else if( this.settings.repeat ) { - this.playIndex = 0; - this.playNext(); - } - else if( this.hasPlaylist ) { - this.reset(); - } - else { - // If there is no playlist, and no repeat, we will - // just seek to the beginning and pause. - this.loaded = false; - this.settings.autostart = false; - this.playIndex = 0; - this.playNext(); - } - }; - - this.loadMedia = function( file, mediaplayer ) { - if( file ) { - // Get the media file object. - file = new jQuery.media.file( this.getMediaFile( file ), this.settings ); - - // Set the media player if they force it. - file.player = mediaplayer ? mediaplayer : file.player; - - // Stop the current player. - this.stopMedia(); - - if( !this.mediaFile || (this.mediaFile.player != file.player) ) { - // Reset our player variables. - this.player = null; - this.playerReady = false; - - // Create a new media player. - if( file.player ) { - // Set the new media player. - this.player = this.display["media" + file.player]( this.settings, function( data ) { - _this.onMediaUpdate( data ); - }); - } - - if( this.player ) { - // Create our media player. - this.player.createMedia( file, this.preview ); - } - } - else if( this.player ) { - // Load our file into the current player. - this.player.loadMedia( file ); - } - - // Save this file. - this.mediaFile = file; - - // Send out an update about the initialize. - this.onMediaUpdate({ - type:"initialize" - }); - } - }; - - this.onMediaUpdate = function( data ) { - // Now trigger the media update message. - switch( data.type ) { - case "playerready": - this.playerReady = true; - this.player.setVolume(0); - this.player.setQuality(this.settings.quality); - this.startProgress(); - break; - case "buffering": - this.startProgress(); - break; - case "stopped": - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - break; - case "error": - if( data.code == 4 ) { - // It is saying not supported... Try and fall back to flash... - this.loadMedia(this.mediaFile, "flash"); - } - else { - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - } - break; - case "paused": - clearInterval( this.updateInterval ); - break; - case "playing": - this.startUpdate(); - break; - case "progress": - var percentLoaded = this.getPercentLoaded(); - jQuery.extend( data, { - percentLoaded:percentLoaded - }); - if( percentLoaded >= 1 ) { - clearInterval( this.progressInterval ); - } - break; - case "meta": - jQuery.extend( data, { - currentTime:this.player.getCurrentTime(), - totalTime:this.getDuration(), - volume: this.player.getVolume(), - quality: this.getQuality() - }); - break; - case "durationupdate": - this.mediaFile.duration = data.duration; - break; - case "complete": - this.playNext(); - break; - default: - break; - } - - // If this is the playing state, we want to pause the video. - if( data.type=="playing" && !this.loaded ) { - if( this.settings.autoLoad && !this.settings.autostart ) { - setTimeout( function() { - _this.setVolume(); - _this.player.pauseMedia(); - _this.settings.autostart = true; - _this.loaded = true; - }, 100 ); - } - else { - this.loaded = true; - this.setVolume(); - this.display.trigger( "mediaupdate", data ); - } - } - else { - this.display.trigger( "mediaupdate", data ); - } - }; - - this.startProgress = function() { - if( this.playerReady ) { - clearInterval( this.progressInterval ); - this.progressInterval = setInterval( function() { - _this.onMediaUpdate( { - type:"progress" - } ); - }, 500 ); - } - }; - - this.startUpdate = function() { - if( this.playerReady ) { - clearInterval( this.updateInterval ); - this.updateInterval = setInterval( function() { - if( _this.playerReady ) { - _this.onMediaUpdate({ - type:"update", - currentTime:_this.player.getCurrentTime(), - totalTime:_this.getDuration(), - volume:_this.player.getVolume(), - quality:_this.getQuality() - }); - } - }, 1000 ); - } - }; - - this.stopMedia = function() { - this.loaded = false; - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - if( this.playerReady ) { - this.player.stopMedia(); - } - }; - - this.mute = function( on ) { - this.player.setVolume( on ? 0 : this.volume ); - }; - - this.onResize = function() { - if( this.player && this.player.onResize ) { - this.player.onResize(); - } - }; - - this.getPercentLoaded = function() { - if( this.player.getPercentLoaded ) { - return this.player.getPercentLoaded(); - } - else { - var bytesLoaded = this.player.getBytesLoaded(); - var bytesTotal = this.mediaFile.bytesTotal ? this.mediaFile.bytesTotal : this.player.getBytesTotal(); - return bytesTotal ? (bytesLoaded / bytesTotal) : 0; - } - }; - - this.showControls = function(show) { - if( this.playerReady ) { - this.player.showControls(show); - } - }; - - this.hasControls = function() { - if( this.player ) { - return this.player.hasControls(); - } - return false; - }; - - this.getDuration = function() { - if( this.mediaFile ) { - if(!this.mediaFile.duration ) { - this.mediaFile.duration = this.player.getDuration(); - } - return this.mediaFile.duration; - } - else { - return 0; - } - }; - - this.setVolume = function( vol ) { - this.volume = vol ? vol : ((this.volume == -1) ? (this.settings.volume / 100) : this.volume); - if( this.player ) { - this.player.setVolume(this.volume); - } - }; - - this.getVolume = function() { - if( !this.volume ) { - this.volume = this.player.getVolume(); - } - return this.volume; - }; - - this.getQuality = function() { - if( !this.mediaFile.quality ) { - this.mediaFile.quality = this.player.getQuality(); - } - return this.mediaFile.quality; - }; - })( this, options ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - apiKey:"", - api:2, - sessid:"", - drupalVersion:6 - }); - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the drupal server object. - drupal : function( protocol, settings ) { - // Return a new server object. - return new (function( protocol, settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - - var hasKey = (settings.apiKey.length > 0); - var usesKey = (settings.api == 1); - var nodeGet = (settings.drupalVersion >= 6) ? "node.get" : "node.load"; - var autoProtocol = (settings.protocol == "auto"); - - // Set up the commands. - jQuery.media = jQuery.extend( {}, { - commands : { - connect:{command:{rpc:"system.connect", json:""}, useKey:usesKey, protocol:"rpc"}, - mail:{command:{rpc:"system.mail", json:""}, useKey:hasKey, protocol:"rpc"}, - loadNode:{command:{rpc:nodeGet, json:"mediafront_getnode"}, useKey:usesKey, protocol:"json"}, - getPlaylist:{command:{rpc:"mediafront.getPlaylist", json:"mediafront_getplaylist"}, useKey:usesKey, protocol:"json"}, - getVote:{command:{rpc:"vote.getVote", json:""}, useKey:usesKey, protocol:"rpc"}, - setVote:{command:{rpc:"vote.setVote", json:""}, useKey:hasKey, protocol:"rpc"}, - getUserVote:{command:{rpc:"vote.getUserVote", json:""}, useKey:usesKey, protocol:"rpc"}, - deleteVote:{command:{rpc:"vote.deleteVote", json:""}, useKey:hasKey, protocol:"rpc"}, - addTag:{command:{rpc:"tag.addTag", json:""}, useKey:hasKey, protocol:"rpc"}, - incrementCounter:{command:{rpc:"mediafront.incrementNodeCounter", json:""}, useKey:hasKey, protocol:"rpc"}, - setFavorite:{command:{rpc:"favorites.setFavorite", json:""}, useKey:hasKey, protocol:"rpc"}, - deleteFavorite:{command:{rpc:"favorites.deleteFavorite", json:""}, useKey:hasKey, protocol:"rpc"}, - isFavorite:{command:{rpc:"favorites.isFavorite", json:""}, useKey:usesKey, protocol:"rpc"}, - login:{command:{rpc:"user.login", json:""}, useKey:hasKey, protocol:"rpc"}, - logout:{command:{rpc:"user.logout", json:""}, useKey:hasKey, protocol:"rpc"}, - adClick:{command:{rpc:"mediafront.adClick", json:""}, useKey:hasKey, protocol:"rpc"}, - getAd:{command:{rpc:"mediafront.getAd", json:""}, useKey:usesKey, protocol:"rpc"}, - setUserStatus:{command:{rpc:"mediafront.setUserStatus", json:""}, useKey:hasKey, protocol:"rpc"} - } - }, jQuery.media); - - // Public variables. - this.user = {}; - this.sessionId = ""; - this.onConnected = null; - this.encoder = new jQuery.media.sha256(); - - // Cache this... it is a little processor intensive. - // The baseURL has an ending "/". We need to truncate this, and then remove the "http://" - this.baseURL = settings.baseURL.substring(0,(settings.baseURL.length - 1)).replace(/^(http[s]?\:[\\\/][\\\/])/,''); - - this.connect = function( onSuccess ) { - this.onConnected = onSuccess; - // If they provide the session Id, then we can skip this call. - if( settings.sessid ) { - this.onConnect({ - sessid:settings.sessid - }); - } - else { - this.call( jQuery.media.commands.connect, function( result ) { - _this.onConnect( result ); - }, null ); - } - }; - - this.call = function( command, onSuccess, onFailed ) { - var args = []; - for (var i=3; i 1 ) { - var timestamp = this.getTimeStamp(); - var nonce = this.getNonce(); - var hash = this.computeHMAC( timestamp, this.baseURL, nonce, command.command.rpc, settings.apiKey); - args.unshift( nonce ); - args.unshift( timestamp ); - args.unshift( this.baseURL ); - args.unshift( hash ); - } - else { - args.unshift( settings.apiKey ); - } - } - return args; - }; - - this.getTimeStamp = function() { - return (parseInt(new Date().getTime() / 1000, 10)).toString(); - }; - - this.getNonce = function() { - var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; - var randomString = ''; - for (var i=0; i<10; i++) { - var rnum = Math.floor(Math.random() * chars.length); - randomString += chars.substring(rnum,rnum+1); - } - return randomString; - }; - - this.computeHMAC = function( timestamp, baseURL, nonce, command, apiKey ) { - var input = timestamp + ";" + baseURL + ";" + nonce + ";" + command; - return this.encoder.encrypt( apiKey, input ); - }; - - this.onConnect = function( result ) { - if( result ) { - this.sessionId = result.sessid; - this.user = result.user; - } - if( this.onConnected ) { - this.onConnected( result ); - } - }; - })( protocol, settings ); - } - }, jQuery.media ); -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Checks the file type for browser compatibilty. - jQuery.media.checkPlayType = function( elem, playType ) { - if( (typeof elem.canPlayType) == 'function' ) { - return ("no" !== elem.canPlayType(playType)) && ("" !== elem.canPlayType(playType)); - } - else { - return false; - } - }; - - // Get's all of the types that this browser can play. - jQuery.media.getPlayTypes = function() { - var types = {}; - - // Check for video types... - var elem = document.createElement("video"); - types.ogg = jQuery.media.checkPlayType( elem, 'video/ogg; codecs="theora, vorbis"'); - types.h264 = jQuery.media.checkPlayType( elem, 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'); - types.webm = jQuery.media.checkPlayType( elem, 'video/webm; codecs="vp8, vorbis"'); - - // Now check for audio types... - elem = document.createElement("audio"); - types.audioOgg = jQuery.media.checkPlayType( elem, "audio/ogg"); - types.mp3 = jQuery.media.checkPlayType( elem, "audio/mpeg"); - - return types; - }; - - // The play types for the media player. - jQuery.media.playTypes = null; - - // The constructor for our media file object. - jQuery.media.file = function( file, settings ) { - // Only set the play types if it has not already been set. - if( !jQuery.media.playTypes ) { - jQuery.media.playTypes = jQuery.media.getPlayTypes(); - } - - // Normalize the file object passed to this constructor. - file = (typeof file === "string") ? { - path:file - } : file; - - // The duration of the media file. - this.duration = file.duration ? file.duration : 0; - this.bytesTotal = file.bytesTotal ? file.bytesTotal : 0; - this.quality = file.quality ? file.quality : 0; - this.stream = settings.streamer ? settings.streamer : file.stream; - this.path = file.path ? jQuery.trim(file.path) : ( settings.baseURL + jQuery.trim(file.filepath) ); - this.extension = file.extension ? file.extension : this.getFileExtension(); - this.weight = file.weight ? file.weight : this.getWeight(); - this.player = file.player ? file.player : this.getPlayer(); - this.mimetype = file.mimetype ? file.mimetype : this.getMimeType(); - this.type = file.type ? file.type : this.getType(); - }; - - // Get the file extension. - jQuery.media.file.prototype.getFileExtension = function() { - return this.path.substring(this.path.lastIndexOf(".") + 1).toLowerCase(); - }; - - // Get the player for this media. - jQuery.media.file.prototype.getPlayer = function() { - switch( this.extension ) - { - case "ogg":case "ogv": - return jQuery.media.playTypes.ogg ? "html5" : "flash"; - - case "mp4":case "m4v": - return jQuery.media.playTypes.h264 ? "html5" : "flash"; - - case "webm": - return jQuery.media.playTypes.webm ? "html5" : "flash"; - - case "oga": - return jQuery.media.playTypes.audioOgg ? "html5" : "flash"; - - case "mp3": - return jQuery.media.playTypes.mp3 ? "html5" : "flash"; - - case "swf":case "flv":case "f4v":case "f4a": - case "mov":case "3g2":case "3gp":case "3gpp": - case "m4a":case "aac":case "wav":case "aif": - case "wma": - return "flash"; - - default: - // Now iterate through all of our registered players. - for( var player in jQuery.media.playerTypes ) { - if( jQuery.media.playerTypes.hasOwnProperty( player ) ) { - if( jQuery.media.playerTypes[player]( this.path ) ) { - return player; - } - } - } - break; - } - return "flash"; - }; - - // Get the type of media this is... - jQuery.media.file.prototype.getType = function() { - switch( this.extension ) { - case"swf":case "webm":case "ogg":case "ogv": - case "mp4":case "m4v":case "flv":case "f4v": - case "mov":case "3g2":case "3gp":case "3gpp": - return "video"; - case "oga":case "mp3":case "f4a":case "m4a": - case "aac":case "wav":case "aif":case "wma": - return "audio"; - default: - break; - } - return ''; - }; - - // Get the preference "weight" of this media type. - // The lower the number, the higher the preference. - jQuery.media.file.prototype.getWeight = function() { - switch( this.extension ) { - case 'mp4':case 'm4v':case 'm4a': - return jQuery.media.playTypes.h264 ? 3 : 7; - case'webm': - return jQuery.media.playTypes.webm ? 4 : 8; - case 'ogg':case 'ogv': - return jQuery.media.playTypes.ogg ? 5 : 20; - case 'oga': - return jQuery.media.playTypes.audioOgg ? 5 : 20; - case 'mp3': - return 6; - case 'mov':case'swf':case 'flv':case 'f4v': - case 'f4a':case '3g2':case '3gp':case '3gpp': - return 9; - case 'wav':case 'aif':case 'aac': - return 10; - case 'wma': - return 11; - default: - break; - } - return 0; - }; - - // Return the best guess mime type for the given file. - jQuery.media.file.prototype.getMimeType = function() { - switch( this.extension ) { - case 'mp4':case 'm4v':case 'flv':case 'f4v': - return 'video/mp4'; - case'webm': - return 'video/x-webm'; - case 'ogg':case 'ogv': - return 'video/ogg'; - case '3g2': - return 'video/3gpp2'; - case '3gpp': - case '3gp': - return 'video/3gpp'; - case 'mov': - return 'video/quicktime'; - case'swf': - return 'application/x-shockwave-flash'; - case 'oga': - return 'audio/ogg'; - case 'mp3': - return 'audio/mpeg'; - case 'm4a':case 'f4a': - return 'audio/mp4'; - case 'aac': - return 'audio/aac'; - case 'wav': - return 'audio/vnd.wave'; - case 'wma': - return 'audio/x-ms-wma'; - default: - break; - } - return ''; - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - window.onFlashPlayerReady = function( id ) { - jQuery.media.players[id].node.player.media.player.onReady(); - }; - - window.onFlashPlayerUpdate = function( id, eventType ) { - jQuery.media.players[id].node.player.media.player.onMediaUpdate( eventType ); - }; - - window.onFlashPlayerDebug = function( debug ) { - if( window.console && console.log ) { - console.log( debug ); - } - }; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - flashPlayer:"./flash/mediafront.swf", - skin:"default", - config:"nocontrols" - }); - - jQuery.fn.mediaflash = function( settings, onUpdate ) { - return new (function( video, settings, onUpdate ) { - settings = jQuery.media.utils.getSettings( settings ); - this.display = video; - var _this = this; - this.player = null; - this.mediaFile = null; - this.preview = ''; - this.ready = false; - - // Translate the messages. - this.translate = { - "mediaConnected":"connected", - "mediaBuffering":"buffering", - "mediaPaused":"paused", - "mediaPlaying":"playing", - "mediaStopped":"stopped", - "mediaComplete":"complete", - "mediaMeta":"meta" - }; - - // When to show the busy cursor. - this.busy = { - "mediaConnected":false, - "mediaBuffering":"show", - "mediaPaused":"hide", - "mediaPlaying":"hide", - "mediaStopped":false, - "mediaComplete":false, - "mediaMeta":false - }; - - this.createMedia = function( mediaFile, preview ) { - this.mediaFile = mediaFile; - this.preview = preview; - this.ready = false; - var playerId = (settings.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = settings.flashPlayer + "?rand=" + rand; - var flashvars = { - config:settings.config, - id:settings.id, - file:mediaFile.path, - image:this.preview, - skin:settings.skin, - autostart:(settings.autostart || !settings.autoLoad) - }; - if( mediaFile.stream ) { - flashvars.stream = mediaFile.stream; - } - if( settings.debug ) { - flashvars.debug = "1"; - } - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - flashvars, - settings.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.loadMedia = function( mediaFile ) { - if( this.player && this.ready ) { - this.mediaFile = mediaFile; - - // Load the new media file into the Flash player. - this.player.loadMedia( mediaFile.path, mediaFile.stream ); - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - } - }; - - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - this.loadPlayer = function() { - if( this.ready && this.player ) { - onUpdate( { - type:"playerready" - } ); - } - }; - - this.onMediaUpdate = function( eventType ) { - onUpdate( { - type:this.translate[eventType], - busy:this.busy[eventType] - }); - }; - - this.playMedia = function() { - if( this.player && this.ready ) { - this.player.playMedia(); - } - }; - - this.pauseMedia = function() { - if( this.player && this.ready ) { - this.player.pauseMedia(); - } - }; - - this.stopMedia = function() { - if( this.player && this.ready ) { - this.player.stopMedia(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (settings.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if( this.player && this.ready ) { - this.player.seekMedia( pos ); - } - }; - - this.setVolume = function( vol ) { - if( this.player && this.ready ) { - this.player.setVolume( vol ); - } - }; - - this.getVolume = function() { - return (this.player && this.ready) ? this.player.getVolume() : 0; - }; - - this.getDuration = function() { - return (this.player && this.ready) ? this.player.getDuration() : 0; - }; - - this.getCurrentTime = function() { - return (this.player && this.ready) ? this.player.getCurrentTime() : 0; - }; - - this.getBytesLoaded = function() { - return (this.player && this.ready) ? this.player.getMediaBytesLoaded() : 0; - }; - - this.getBytesTotal = function() { - return (this.player && this.ready) ? this.player.getMediaBytesTotal() : 0; - }; - - this.hasControls = function() { - return true; - }; - - this.showControls = function(show) { - if( this.player && this.ready ) { - this.player.showPlugin("controlBar", show); - this.player.showPlugin("playLoader", show); - } - }; - - this.getEmbedCode = function() { - var flashVars = { - config:"config", - id:"mediafront_player", - file:this.mediaFile.path, - image:this.preview, - skin:settings.skin - }; - if( this.mediaFile.stream ) { - flashVars.stream = this.mediaFile.stream; - } - return jQuery.media.utils.getFlash( - settings.flashPlayer, - "mediafront_player", - settings.embedWidth, - settings.embedHeight, - flashVars, - settings.wmode ); - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - //this.setSize = function( newWidth, newHeight ) {}; - this.getMediaLink = function() { - return "This video currently does not have a link."; - }; - })( this, settings, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.fn.mediahtml5 = function( options, onUpdate ) { - return new (function( media, options, onUpdate ) { - this.display = media; - var _this = this; - this.player = null; - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.mediaType = ""; - this.loaded = false; - this.mediaFile = null; - this.playerElement = null; - - this.getPlayer = function( mediaFile, preview ) { - this.mediaFile = mediaFile; - var playerId = options.id + '_' + this.mediaType; - var html = '<' + this.mediaType + ' style="position:absolute" id="' + playerId + '"'; - html += preview ? ' poster="' + preview + '"' : ''; - - if( typeof mediaFile === 'array' ) { - html += '>'; - var i = mediaFile.length; - while(i) { - i--; - html += ''; - } - } - else { - html += ' src="' + mediaFile.path + '">Unable to display media.'; - } - - html += ''; - this.display.append( html ); - this.bytesTotal = mediaFile.bytesTotal; - this.playerElement = this.display.find('#' + playerId); - this.onResize(); - - // return the player object. - return this.playerElement.eq(0)[0]; - }; - - // Create a new HTML5 player. - this.createMedia = function( mediaFile, preview ) { - // Remove any previous Flash players. - jQuery.media.utils.removeFlash( this.display, options.id + "_media" ); - this.display.children().remove(); - this.mediaType = this.getMediaType( mediaFile ); - this.player = this.getPlayer( mediaFile, preview ); - this.loaded = false; - var timeupdated = false; - if( this.player ) { - this.player.addEventListener( "abort", function() { - onUpdate( { - type:"stopped" - } ); - }, true); - this.player.addEventListener( "loadstart", function() { - onUpdate( { - type:"ready", - busy:"show" - }); - - _this.onReady(); - }, true); - this.player.addEventListener( "loadeddata", function() { - onUpdate( { - type:"loaded", - busy:"hide" - }); - }, true); - this.player.addEventListener( "loadedmetadata", function() { - onUpdate( { - type:"meta" - } ); - }, true); - this.player.addEventListener( "canplaythrough", function() { - onUpdate( { - type:"canplay", - busy:"hide" - }); - }, true); - this.player.addEventListener( "ended", function() { - onUpdate( { - type:"complete" - } ); - }, true); - this.player.addEventListener( "pause", function() { - onUpdate( { - type:"paused" - } ); - }, true); - this.player.addEventListener( "play", function() { - onUpdate( { - type:"playing" - } ); - }, true); - this.player.addEventListener( "playing", function() { - onUpdate( { - type:"playing", - busy:"hide" - }); - }, true); - this.player.addEventListener( "error", function(e) { - _this.onError(e.target.error); - onUpdate( { - type:"error", - code:e.target.error.code - } ); - }, true); - this.player.addEventListener( "waiting", function() { - onUpdate( { - type:"waiting", - busy:"show" - }); - }, true); - this.player.addEventListener( "timeupdate", function() { - if( timeupdated ) { - onUpdate( { - type:"timeupdate", - busy:"hide" - }); - } - else { - timeupdated = true; - } - }, true); - this.player.addEventListener( "durationchange", function() { - if( this.duration && (this.duration !== Infinity) ) { - onUpdate( { - type:"durationupdate", - duration:this.duration - }); - } - }, true); - - // Now add the event for getting the progress indication. - this.player.addEventListener( "progress", function( event ) { - _this.bytesLoaded = event.loaded; - _this.bytesTotal = event.total; - }, true); - - this.player.autoplay = true; - - if (typeof this.player.hasAttribute == "function" && this.player.hasAttribute("preload") && this.player.preload != "none") { - this.player.autobuffer = true; - } else { - this.player.autobuffer = false; - this.player.preload = "none"; - } - - onUpdate({ - type:"playerready" - }); - } - }; - - // A function to be called when an error occurs. - this.onError = function( error ) { - switch(error.code) { - case 1: - console.log("Error: MEDIA_ERR_ABORTED"); - break; - case 2: - console.log("Error: MEDIA_ERR_DECODE"); - break; - case 3: - console.log("Error: MEDIA_ERR_NETWORK"); - break; - case 4: - console.log("Error: MEDIA_ERR_SRC_NOT_SUPPORTED"); - break; - default: - break; - } - }; - - // Called when the media has started loading. - this.onReady = function() { - if( !this.loaded ) { - this.loaded = true; - this.playMedia(); - } - }; - - // Load new media into the HTML5 player. - this.loadMedia = function( mediaFile ) { - this.mediaFile = mediaFile; - this.createMedia( mediaFile ); - }; - - this.getMediaType = function( mediaFile ) { - var extension = (typeof mediaFile === 'array') ? mediaFile[0].extension : mediaFile.extension; - switch( extension ) { - case "ogg": case "ogv": case "mp4": case "m4v": - return "video"; - - case "oga": case "mp3": - return "audio"; - - default: - break; - } - return "video"; - }; - - this.playMedia = function() { - if( this.player && this.player.play ) { - this.player.play(); - } - }; - - this.pauseMedia = function() { - if( this.player && this.player.pause ) { - this.player.pause(); - } - }; - - this.stopMedia = function() { - this.pauseMedia(); - if( this.player ) { - this.player.src = ""; - } - }; - - this.destroy = function() { - this.stopMedia(); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if( this.player ) { - this.player.currentTime = pos; - } - }; - - this.setVolume = function( vol ) { - if( this.player ) { - this.player.volume = vol; - } - }; - - this.getVolume = function() { - return this.player ? this.player.volume : 0; - }; - - this.getDuration = function() { - var dur = this.player ? this.player.duration : 0; - return (dur === Infinity) ? 0 : dur; - }; - - this.getCurrentTime = function() { - return this.player ? this.player.currentTime : 0; - }; - - this.getPercentLoaded = function() { - if( this.player && this.player.buffered && this.player.duration ) { - return (this.player.buffered.end(0) / this.player.duration); - } - else if( this.bytesTotal ) { - return (this.bytesLoaded / this.bytesTotal); - } - else { - return 0; - } - }; - - // Called when the player resizes. - this.onResize = function() { - // If this is a video, set the width and height of the video element. - if( this.mediaType == "video" ) { - this.playerElement.css({width:this.display.width(), height:this.display.height()}); - } - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - this.hasControls = function() { - return false; - }; - this.showControls = function(show) {}; - //this.setSize = function( newWidth, newHeight ) {}; - this.getEmbedCode = function() { - - // Only return the Flash embed if this is a Flash playable media field. - if( (this.mediaFile.extension == 'mp4') || - (this.mediaFile.extension == 'm4v') || - (this.mediaFile.extension == 'webm') ) { - var flashVars = { - config:"config", - id:"mediafront_player", - file:this.mediaFile.path, - image:this.preview, - skin:options.skin - }; - if( this.mediaFile.stream ) { - flashVars.stream = this.mediaFile.stream; - } - return jQuery.media.utils.getFlash( - options.flashPlayer, - "mediafront_player", - options.embedWidth, - options.embedHeight, - flashVars, - options.wmode ); - } - else { - return "This media does not support embedding."; - } - }; - this.getMediaLink = function() { - return "This media currently does not have a link."; - }; - })( this, options, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - /** - * Load and scale an image while maintining original aspect ratio. - */ - jQuery.fn.mediaimage = function( link, fitToImage ) { - if( this.length === 0 ) { - return null; - } - return new (function( container, link, fitToImage ) { - this.display = container; - var _this = this; - - var ratio = 0; - var imageLoaded = false; - - // Now create the image loader, and add the loaded handler. - this.imgLoader = new Image(); - this.imgLoader.onload = function() { - imageLoaded = true; - ratio = (_this.imgLoader.width / _this.imgLoader.height); - _this.resize(); - _this.display.trigger( "imageLoaded" ); - }; - - // Set the container to not show any overflow... - container.css("overflow", "hidden"); - - // Check to see if this image is completely loaded. - this.loaded = function() { - return this.imgLoader.complete; - }; - - // Resize the image. - this.resize = function( newWidth, newHeight ) { - var rectWidth = fitToImage ? this.imgLoader.width : (newWidth ? newWidth : this.display.width()); - var rectHeight = fitToImage ? this.imgLoader.height : (newHeight ? newHeight : this.display.height()); - if( rectWidth && rectHeight && imageLoaded ) { - // Now resize the image in the container... - var rect = jQuery.media.utils.getScaledRect( ratio, { - width:rectWidth, - height:rectHeight - }); - - // Now set this image to the new size. - if( this.image ) { - this.image.attr( "src", this.imgLoader.src ).css({ - marginLeft:rect.x, - marginTop:rect.y, - width:rect.width, - height:rect.height - }); - } - - // Show the container. - this.image.fadeIn(); - } - }; - - // Clears the image. - this.clear = function() { - imageLoaded = false; - if( this.image ) { - this.image.attr("src", ""); - this.imgLoader.src = ''; - this.image.fadeOut( function() { - if( link ) { - $(this).parent().remove(); - } - else { - $(this).remove(); - } - }); - } - }; - - // Refreshes the image. - this.refresh = function() { - this.resize(); - }; - - // Load the image. - this.loadImage = function( src ) { - // Now add the image object. - this.clear(); - this.image = $(document.createElement('img')).attr({ - src:"" - }).hide(); - if( link ) { - this.display.append($(document.createElement('a')).attr({ - target:"_blank", - href:link - }).append(this.image)); - } - else { - this.display.append(this.image); - } - this.imgLoader.src = src; - }; - })( this, link, fitToImage ); - }; - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the json server object. - json : function( settings ) { - // Return a new function for this object - return new (function( settings ) { - var _this = this; - - // ************************************************ - // This code is from http://kelpi.com/script/a85cbb - // ************************************************ - - // A character conversion map - var m = { - '\b':'\\b', - '\t':'\\t', - '\n':'\\n', - '\f':'\\f', - '\r':'\\r', - '"':'\\"', - '\\':'\\\\' - }; - - // Map type names to functions for serializing those types - var s = { - 'boolean': function (x) { - return String(x); - }, - 'null': function (x) { - return "null"; - }, - number: function (x) { - return isFinite(x) ? String(x) : 'null'; - }, - string: function (x) { - if (/["\\\x00-\x1f]/.test(x)) { - x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) { - var c = m[b]; - if (c) { - return c; - } - c = b.charCodeAt(); - return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); - }); - } - return '"' + x + '"'; - }, - array: function (x) { - var a = ['['], b, f, i, l = x.length, v; - for (i = 0; i < l; i += 1) { - v = x[i]; - f = s[typeof v]; - if (f) { - v = f(v); - if (typeof v == 'string') { - if (b) { - a[a.length] = ','; - } - a[a.length] = v; - b = true; - } - } - } - a[a.length] = ']'; - return a.join(''); - }, - object: function (x) { - if (x) { - if (x instanceof Array) { - return s.array(x); - } - var a = ['{'], b, f, i, v; - for( i in x ) { - if( x.hasOwnProperty(i) ) { - v = x[i]; - f = s[typeof v]; - if(f) { - v = f(v); - if (typeof v == 'string') { - if (b) { - a[a.length] = ','; - } - a.push(s.string(i), ':', v); - b = true; - } - } - } - } - a[a.length] = '}'; - return a.join(''); - } - return 'null'; - } - }; - - // Public function to serialize any object to JSON format. - this.serializeToJSON = function( o ) { - return s.object(o); - }; - - //************************************************ - // End of code from http://kelpi.com/script/a85cbb - //************************************************ - - this.call = function( method, onSuccess, onFailed, params, protocol ) { - if( settings.baseURL ) { - // Add json functionality here. - jQuery.ajax({ - "url": settings.baseURL + method, - "dataType": "json", - "type": "POST", - "data": { - methodName:method, - params:this.serializeToJSON(params) - }, - "error": function( XMLHttpRequest, textStatus, errorThrown ) { - if( onFailed ) { - onFailed( textStatus ); - } - else if( window.console && console.log ) { - console.log( "Error: " + textStatus ); - } - }, - "success": function( data ) { - if( onSuccess ) { - onSuccess( data ); - } - } - }); - } - else if( onSuccess ) { - onSuccess( null ); - } - }; - })( settings ); - } - }, jQuery.media ); - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.fn.medialink = function( settings, onClick, data ) { - data = data ? data : { - noargs:true - }; - return new (function( link, settings, onClick, data ) { - var _this = this; - this.display = link; - - this.display.css("cursor", "pointer").unbind("click").bind( "click", data, function( event ) { - onClick( event, $(this) ); - }).unbind("mouseenter").bind("mouseenter", function() { - if( settings.template.onLinkOver ) { - settings.template.onLinkOver( $(this) ); - } - }).unbind("mouseleave").bind("mouseleave", function() { - if( settings.template.onLinkOut ) { - settings.template.onLinkOut( $(this) ); - } - }); - })( this, settings, onClick, data ); - }; - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - links:[], - linksvertical:false - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - linkScroll:"#medialinkscroll" - }); - - jQuery.fn.medialinks = function( settings ) { - return new (function( links, settings ) { - - // Get our settings. - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = links; - var _this = this; - - // Keep track of the previous link. - this.previousLink = null; - - // Setup the scroll region - this.scrollRegion = links.find( settings.ids.linkScroll ).mediascroll({ - vertical:settings.linksvertical - }); - this.scrollRegion.clear(); - - // Load the links. - this.loadLinks = function() { - if( links.length > 0 ) { - this.scrollRegion.clear(); - var onLinkClick = function( event, data ) { - _this.setLink( data ); - }; - - var i = settings.links.length; - while(i) { - i--; - // Add this link to the scroll region. - var link = this.scrollRegion.newItem().playlistlink( settings, settings.links[i] ); - link.unbind("linkclick").bind("linkclick", onLinkClick); - } - // Activate the scroll region. - this.scrollRegion.activate(); - } - }; - - // Set the active link. - this.setLink = function( link ) { - - // If there is a previous link, then unactivate it. - if( this.previousLink ) { - this.previousLink.setActive(false); - } - - // Add the active class to the clicked target. - link.setActive(true); - - // Store this target for later. - this.previousLink = link; - }; - })( this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - close:"#mediamenuclose", - embed:"#mediaembed", - elink:"#mediaelink", - email:"#mediaemail" - }); - - jQuery.fn.mediamenu = function( server, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, menu, settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - this.display = menu; - - this.on = false; - - this.contents = []; - this.prevItem = { - id:0, - link:null, - contents:null - }; - - this.close = this.display.find( settings.ids.close ); - this.close.unbind("click").bind( "click", function() { - _this.display.trigger( "menuclose" ); - }); - - this.setMenuItem = function( link, itemId ) { - if( this.prevItem.id != itemId ) { - if( this.prevItem.id && settings.template.onMenuSelect ) { - settings.template.onMenuSelect( this.prevItem.link, this.prevItem.contents, false ); - } - - var contents = this.contents[itemId]; - - if( settings.template.onMenuSelect ) { - settings.template.onMenuSelect( link, contents, true ); - } - - this.prevItem = { - id:itemId, - link:link, - contents:contents - }; - } - }; - - this.setEmbedCode = function( embed ) { - this.setInputItem( settings.ids.embed, embed ); - }; - - - this.setMediaLink = function( mediaLink ) { - this.setInputItem( settings.ids.elink , mediaLink ); - }; - - this.setInputItem = function( id, value ) { - var input = this.contents[id].find("input"); - input.unbind("click").bind("click", function() { - $(this).select().focus(); - }); - input.attr("value", value ); - }; - - var linkIndex = 0; - this.links = this.display.find("a"); - this.links.each( function() { - var link = $(this); - if( link.length > 0 ) { - var linkId = link.attr("href"); - var contents = _this.display.find(linkId); - contents.hide(); - _this.contents[linkId] = contents; - link.unbind("click").bind("click", { - id:linkId, - obj:link.parent() - }, function( event ) { - event.preventDefault(); - _this.setMenuItem( event.data.obj, event.data.id ); - }); - - if( linkIndex === 0 ) { - _this.setMenuItem( link.parent(), linkId ); - } - linkIndex++; - } - }); - - - })( server, this, settings ); - }; - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - logo:"logo.png", - logoWidth:49, - logoHeight:15, - logopos:"sw", - logox:5, - logoy:5, - link:"http://www.mediafront.org", - file:"", - image:"", - timeout:8, - autoLoad:true - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - busy:"#mediabusy", - preview:"#mediapreview", - play:"#mediaplay", - media:"#mediadisplay" - }); - - jQuery.fn.minplayer = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( player, settings ) { - // Get the settings. - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = player; - var _this = this; - - // If the player should auto load or not. - this.autoLoad = settings.autoLoad; - - // Store the busy cursor and data. - this.busy = player.find( settings.ids.busy ); - this.busyImg = this.busy.find("img"); - this.busyWidth = this.busyImg.width(); - this.busyHeight = this.busyImg.height(); - - // Store the play overlay. - this.play = player.find( settings.ids.play ); - // Toggle the play/pause state if they click on the play button. - this.play.unbind("click").bind("click", function() { - _this.togglePlayPause(); - }); - this.playImg = this.play.find("img"); - this.playWidth = this.playImg.width(); - this.playHeight = this.playImg.height(); - - // Store the preview image. - this.preview = player.find( settings.ids.preview ).mediaimage(); - if( this.preview ) { - this.preview.display.unbind("click").bind("click", function() { - _this.onMediaClick(); - }); - - this.preview.display.unbind("imageLoaded").bind("imageLoaded", function() { - _this.onPreviewLoaded(); - }); - } - - // The internal player controls. - this.usePlayerControls = false; - this.busyFlags = 0; - this.busyVisible = false; - this.playVisible = false; - this.previewVisible = false; - this.playing = false; - this.hasMedia = false; - this.timeoutId = 0; - - // Cache the width and height. - this.width = this.display.width(); - this.height = this.display.height(); - - // Hide or show an element. - this.showElement = function( element, show, tween ) { - if( element && !this.usePlayerControls ) { - if( show ) { - element.show(tween); - } - else { - element.hide(tween); - } - } - }; - - this.showPlay = function( show, tween ) { - show &= this.hasMedia; - this.playVisible = show; - this.showElement( this.play, show, tween ); - }; - - this.showBusy = function( id, show, tween ) { - if( show ) { - this.busyFlags |= (1 << id); - } - else { - this.busyFlags &= ~(1 << id); - } - - // Set the busy cursor visiblility. - this.busyVisible = (this.busyFlags > 0); - this.showElement( this.busy, this.busyVisible, tween ); - - // If the media has finished loading, then we don't need the - // loader for the image. - if (id==1 && !show) { - this.showBusy(3, false); - } - }; - - this.showPreview = function( show, tween ) { - this.previewVisible = show; - if( this.preview ) { - this.showElement( this.preview.display, show, tween ); - } - }; - - // Handle the control events. - this.onControlUpdate = function( data ) { - if( this.media ) { - // If the player is ready. - if( this.media.playerReady ) { - switch( data.type ) { - case "play": - this.media.player.playMedia(); - break; - case "pause": - this.media.player.pauseMedia(); - break; - case "seek": - this.media.player.seekMedia( data.value ); - break; - case "volume": - this.media.setVolume( data.value ); - break; - case "mute": - this.media.mute( data.value ); - break; - default: - break; - } - } - // If there are files in the queue but no current media file. - else if( (this.media.playQueue.length > 0) && !this.media.mediaFile ) { - // They interacted with the player. Always autoload at this point on. - this.autoLoad = true; - - // Then play the next file in the queue. - this.playNext(); - } - - // Let the template do something... - if( settings.template && settings.template.onControlUpdate ) { - settings.template.onControlUpdate( data ); - } - } - }; - - // Handle the full screen event requests. - this.fullScreen = function( full ) { - if( settings.template.onFullScreen ) { - settings.template.onFullScreen( full ); - } - - // Refresh the preview image. - this.preview.refresh(); - }; - - // Handle when the preview image loads. - this.onPreviewLoaded = function() { - this.previewVisible = true; - }; - - // Handle the media events. - this.onMediaUpdate = function( data ) { - switch( data.type ) { - case "paused": - this.playing = false; - this.showPlay(true); - //this.showBusy(1, false); - if( !this.media.loaded ) { - this.showPreview(true); - } - break; - case "update": - case "playing": - this.playing = true; - this.showPlay(false); - this.showPreview((this.media.mediaFile.type == "audio")); - break; - case "initialize": - this.playing = false; - this.showPlay(true); - this.showBusy(1, this.autoLoad); - this.showPreview(true); - break; - case "buffering": - this.showPlay(true); - this.showPreview((this.media.mediaFile.type == "audio")); - break; - default: - break; - } - - // If they provide a busy cursor. - if( data.busy ) { - this.showBusy(1, (data.busy == "show")); - } - }; - - // Called when the media is clicked. - this.onMediaClick = function() { - if( this.media.player && !this.media.hasControls() ) { - if( this.playing ) { - this.media.player.pauseMedia(); - } - else { - this.media.player.playMedia(); - } - } - }; - - // Set the media player. - this.media = this.display.find( settings.ids.media ).mediadisplay( settings ); - if( this.media ) { - // If they click on the media region, then pause the media. - this.media.display.unbind("click").bind("click", function() { - _this.onMediaClick(); - }); - } - - // Sets the logo position. - this.setLogoPos = function() { - if( this.logo ) { - var logocss = {}; - if( settings.logopos=='se' || settings.logopos=='sw' ) { - logocss['bottom'] = settings.logoy; - } - if( settings.logopos=='ne' || settings.logopos=='nw' ) { - logocss['top'] = settings.logoy; - } - if( settings.logopos=='nw' || settings.logopos=='sw' ) { - logocss['left'] = settings.logox; - } - if( settings.logopos=='ne' || settings.logopos=='se' ) { - logocss['right'] = settings.logox; - } - this.logo.display.css(logocss); - } - }; - - // Add the logo. - if( !settings.controllerOnly ) { - this.display.prepend(''); - this.logo = this.display.find("." + settings.prefix + "medialogo").mediaimage( settings.link ); - if( this.logo ) { - this.logo.display.css({ - width:settings.logoWidth, - height:settings.logoHeight - }); - this.logo.display.bind("imageLoaded", function() { - _this.setLogoPos(); - }); - this.logo.loadImage( settings.logo ); - } - } - - // Reset to previous state... - this.reset = function() { - this.hasMedia = false; - this.playing = false; - jQuery.media.players[settings.id].showNativeControls(false); - this.showPlay(true); - this.showPreview(true); - clearTimeout( this.timeoutId ); - if( this.media ) { - this.media.reset(); - } - }; - - // Toggle the play/pause state. - this.togglePlayPause = function() { - if( this.media ) { - if( this.media.playerReady ) { - if( this.playing ) { - this.showPlay(true); - this.media.player.pauseMedia(); - } - else { - this.showPlay(false); - this.media.player.playMedia(); - } - } - else if( (this.media.playQueue.length > 0) && !this.media.mediaFile ) { - // They interacted with the player. Always autoload at this point on. - this.autoLoad = true; - - // Then play the next file in the queue. - this.playNext(); - } - } - }; - - // Loads an image... - this.loadImage = function( image ) { - if( this.preview ) { - // Show a busy cursor for the image loading... - this.showBusy(3, true); - - // Load the image. - this.preview.loadImage( image ); - - // Set and interval to check if the image is loaded. - var imageInterval = setInterval(function() { - - // If the image is loaded, then clear the interval. - if (_this.preview.loaded()) { - - // Clear the interval and stop the busy cursor. - clearInterval(imageInterval); - _this.showBusy(3, false); - } - }, 500); - - // Now set the preview image in the media player. - if( this.media ) { - this.media.preview = image; - } - } - }; - - this.onResize = function() { - if( this.preview ) { - this.preview.refresh(); - } - - if( this.media ) { - this.media.onResize(); - } - }; - - // Clears the loaded image. - this.clearImage = function() { - if( this.preview ) { - this.preview.clear(); - } - }; - - // Expose the public load functions from the media display. - this.loadFiles = function( files ) { - this.reset(); - this.hasMedia = this.media && this.media.loadFiles(files); - if( this.hasMedia && this.autoLoad ) { - this.media.playNext(); - } - else if( !this.hasMedia ) { - // Hide the overlays for non-media types. - this.showPlay(false); - this.showPreview(true); - this.timeoutId = setTimeout( function() { - _this.media.display.trigger( "mediaupdate", {type:"complete"} ); - }, (settings.timeout * 1000) ); - } - return this.hasMedia; - }; - - // Play the next file. - this.playNext = function() { - if( this.media ) { - this.media.playNext(); - } - }; - - // Check the player for controls. - this.hasControls = function() { - if( this.media ) { - return this.media.hasControls(); - } - return true; - }; - - // Show the native controls. - this.showControls = function( show ) { - if( this.media ) { - this.media.showControls( show ); - } - }; - - // Loads a single media file. - this.loadMedia = function( file ) { - this.reset(); - if( this.media ) { - this.media.loadMedia( file ); - } - }; - - // If they provide a file, then load it. - if( settings.file ) { - this.loadMedia( settings.file ); - } - - // If they provide the image, then load it. - if( settings.image ) { - this.loadImage( settings.image ); - } - })( this, settings ); - }; -/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.0.4 - * - * Requires: 1.2.2+ - */ - - - - var types = ['DOMMouseScroll', 'mousewheel']; - - $.event.special.mousewheel = { - setup: function() { - if ( this.addEventListener ) { - for ( var i=types.length; i; ) { - i--; - this.addEventListener( types[i], handler, false ); - } - } else { - this.onmousewheel = handler; - } - }, - - teardown: function() { - if ( this.removeEventListener ) { - for ( var i=types.length; i; ) { - i--; - this.removeEventListener( types[i], handler, false ); - } - } else { - this.onmousewheel = null; - } - } - }; - - $.fn.extend({ - mousewheel: function(fn) { - return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); - }, - - unmousewheel: function(fn) { - return this.unbind("mousewheel", fn); - } - }); - - - function handler(event) { - var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; - event = $.event.fix(orgEvent); - event.type = "mousewheel"; - - // Old school scrollwheel delta - if ( event.wheelDelta ) { - delta = event.wheelDelta/120; - } - if ( event.detail ) { - delta = -event.detail/3; - } - - // New school multidimensional scroll (touchpads) deltas - deltaY = delta; - - // Gecko - if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { - deltaY = 0; - deltaX = -1*delta; - } - - // Webkit - if ( orgEvent.wheelDeltaY !== undefined ) { - deltaY = orgEvent.wheelDeltaY/120; - } - if ( orgEvent.wheelDeltaX !== undefined ) { - deltaX = -1*orgEvent.wheelDeltaX/120; - } - - // Add event and delta to the front of the arguments - args.unshift(event, delta, deltaX, deltaY); - - return $.event.handle.apply(this, args); - } - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - node:"", - incrementTime:5 - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - voter:"#mediavoter", - uservoter:"#mediauservoter", - mediaRegion:"#mediaregion", - field:".mediafield" - }); - - jQuery.fn.medianode = function( server, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, node, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = node; - this.nodeInfo = {}; - this.incremented = false; - var _this = this; - - // Add the min player as the player for this node. - this.player = this.display.find(settings.ids.mediaRegion).minplayer( settings ); - if( this.player && (settings.incrementTime !== 0)) { - this.player.display.unbind("mediaupdate").bind( "mediaupdate", function( event, data ) { - _this.onMediaUpdate( data ); - }); - } - - // Store all loaded images. - this.images = []; - - this.addVoters = function( element ) { - this.voter = element.find(settings.ids.voter).mediavoter( settings, server, false ); - this.uservoter = element.find(settings.ids.uservoter).mediavoter( settings, server, true ); - if( this.uservoter && this.voter ) { - this.uservoter.display.unbind("processing").bind( "processing", function() { - _this.player.showBusy(2, true); - }); - this.uservoter.display.unbind("voteGet").bind( "voteGet", function() { - _this.player.showBusy(2, false); - }); - this.uservoter.display.unbind("voteSet").bind( "voteSet", function( event, vote ) { - _this.player.showBusy(2, false); - _this.voter.updateVote( vote ); - }); - } - }; - - // Add the voters to this node. - this.addVoters( this.display ); - - // Handle the media events. - this.onMediaUpdate = function( data ) { - if( !this.incremented ) { - switch( data.type ) { - case "update": - // Increment node counter if the increment time is positive and is less than the current time. - if( (settings.incrementTime > 0) && (data.currentTime > settings.incrementTime) ) { - this.incremented = true; - server.call( jQuery.media.commands.incrementCounter, null, null, _this.nodeInfo.nid ); - } - break; - case "complete": - // If the increment time is negative, then that means to increment on media completion. - if( settings.incrementTime < 0 ) { - this.incremented = true; - server.call( jQuery.media.commands.incrementCounter, null, null, _this.nodeInfo.nid ); - } - break; - default: - break; - } - } - }; - - this.loadNode = function( _nodeInfo ) { - return this.getNode( this.translateNode( _nodeInfo ) ); - }; - - this.translateNode = function( _nodeInfo ) { - var isValue = ((typeof _nodeInfo) == "number") || ((typeof _nodeInfo) == "string"); - if( !_nodeInfo ) { - var defaultNode = settings.node; - if( (typeof defaultNode) == 'object' ) { - defaultNode.load = false; - return defaultNode; - } - else { - return defaultNode ? { - nid:defaultNode, - load:true - } : null; - } - } - else if( isValue ) { - return { - nid:_nodeInfo, - load:true - }; - } - else { - _nodeInfo.load = false; - return _nodeInfo; - } - }; - - this.getNode = function( _nodeInfo ) { - if( _nodeInfo ) { - if( server && _nodeInfo.load ) { - server.call( jQuery.media.commands.loadNode, function( result ) { - _this.setNode( result ); - }, null, _nodeInfo.nid, {} ); - } - else { - this.setNode( _nodeInfo ); - } - - // Return that the node was loaded. - return true; - } - - // Return that there was no node loaded. - return false; - }; - - this.setNode = function( _nodeInfo ) { - if( _nodeInfo ) { - // Set the node information object. - this.nodeInfo = _nodeInfo; - this.incremented = false; - - // Load the media... - if( this.player && this.nodeInfo.mediafiles ) { - // Load the preview image. - var image = this.getImage("preview"); - if( image ) { - this.player.loadImage( image.path ); - } - else { - this.player.clearImage(); - } - - // Load the media... - this.player.loadFiles( this.nodeInfo.mediafiles.media ); - } - - // Get the vote for these voters. - if( this.voter ) { - this.voter.getVote( _nodeInfo ); - } - if( this.uservoter ) { - this.uservoter.getVote( _nodeInfo ); - } - - // Load all of our fields. - this.display.find(settings.ids.field).each( function() { - _this.setField( this, _nodeInfo, $(this).attr("type"), $(this).attr("field") ); - }); - - // Trigger our node loaded event. - this.display.trigger( "nodeload", this.nodeInfo ); - } - }; - - this.setField = function( fieldObj, _nodeInfo, type, fieldName ) { - // We only want to load the fields that have a type. - if( type ) { - switch( type ) { - case "text": - this.setTextField( fieldObj, _nodeInfo, fieldName ); - break; - - case "image": - this.setImageField( fieldObj, fieldName ); - break; - - case 'cck_text': - this.setCCKTextField( fieldObj, _nodeInfo, fieldName ); - break; - default: - break; - } - } - }; - - this.setTextField = function( fieldObj, _nodeInfo, fieldName ) { - var field = _nodeInfo[fieldName]; - if( field ) { - $(fieldObj).empty().html( field ); - } - return true; - }; - - this.setCCKTextField = function( fieldObj, _nodeInfo, fieldName ) { - if( args.fieldType == 'cck_text' ) { - var field = _nodeInfo[fieldName]; - if( field ) { - $(fieldObj).empty().html( field["0"].value ); - } - } - return true; - }; - - this.onResize = function() { - if( this.player ) { - this.player.onResize(); - } - }; - - this.getImage = function( imageName ) { - var images = this.nodeInfo.mediafiles ? this.nodeInfo.mediafiles.image : null; - var image = null; - if( images ) { - - // Get the image. - if( images[imageName] ) { - image = images[imageName]; - } - else { - // Or just use the first image... - for( var key in images ) { - if( images.hasOwnProperty( key ) ) { - image = images[key]; - break; - } - } - } - - // If they just provided a string, then still show the image. - image = (typeof image === "string") ? { - path:image - } : image; - image.path = image.path ? jQuery.trim(image.path) : ( settings.baseURL + jQuery.trim(image.filepath) ); - if( image && image.path ) { - image.path = image.path ? jQuery.trim(image.path) : ( settings.baseURL + jQuery.trim(image.filepath) ); - } - else { - image = null; - } - } - return image; - }; - - this.setImageField = function( fieldObj, fieldName ) { - var file = this.getImage( fieldName ); - if( file ) { - var image = $(fieldObj).empty().mediaimage(); - this.images.push( image ); - image.loadImage( file.path ); - } - }; - })( server, this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - shuffle:false, - loop:false, - pageLimit:10 - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - prev:"#mediaprev", - next:"#medianext", - loadPrev:"#medialoadprev", - loadNext:"#medialoadnext", - prevPage:"#mediaprevpage", - nextPage:"#medianextpage" - }); - - jQuery.fn.mediapager = function( settings ){ - return new (function( pager, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = pager; - var _this = this; - - // The active index within a page. - this.activeIndex = -1; - - // The non-active index within a page. - this.currentIndex = -1; - - // The active page index. - this.activePage = 0; - - // The non-active page index. - this.currentPage = 0; - - // The number of pages. - this.numPages = 0; - - // The number of items on the current page. - this.numItems = 10; - - // The number of items on the active page. - this.activeNumItems = 10; - - // The load state for loading an index after a new page. - this.loadState = ""; - - // Used to turn on and off the pager. - this.enabled = false; - - // Add our buttons... - this.prevButton = pager.find( settings.ids.prev ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadPrev( false ); - } - }); - - this.nextButton = pager.find( settings.ids.next ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadNext( false ); - } - }); - - this.loadPrevButton = pager.find( settings.ids.loadPrev ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadPrev( true ); - } - }); - - this.loadNextButton = pager.find( settings.ids.loadNext ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadNext( true ); - } - }); - - this.prevPageButton = pager.find( settings.ids.prevPage ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadState = "click"; - _this.prevPage(); - } - }); - - this.nextPageButton = pager.find( settings.ids.nextPage ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadState = "click"; - _this.nextPage(); - } - }); - - this.setTotalItems = function( totalItems ) { - if ( totalItems && settings.pageLimit ) { - this.numPages = Math.ceil(totalItems / settings.pageLimit); - if( this.numPages == 1 ) { - this.numItems = totalItems; - } - } - }; - - this.setNumItems = function( _numItems ) { - this.numItems = _numItems; - }; - - this.reset = function() { - this.activePage = 0; - this.currentPage = 0; - this.activeIndex = -1; - this.currentIndex = -1; - this.loadState = ""; - }; - - this.loadIndex = function( setActive ) { - var indexVar = setActive ? "activeIndex" : "currentIndex"; - var newIndex = this[indexVar]; - switch ( this.loadState ) { - case "prev": - this.loadState = ""; - this.loadPrev(setActive); - return; - - case "first": - newIndex = 0; - break; - case "last" : - newIndex = (this.numItems - 1); - break; - - case "rand" : - newIndex = Math.floor(Math.random() * this.numItems); - break; - - default: - break; - } - - this.loadState = ""; - - if( newIndex != this[indexVar] ) { - this.loadState = ""; - this[indexVar] = newIndex; - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - }; - - this.loadNext = function( setActive ) { - if ( this.loadState ) { - this.loadIndex( setActive ); - } - else if ( settings.shuffle ) { - this.loadRand(); - } - else { - // Increment the playlist index. - var indexVar = setActive ? "activeIndex" : "currentIndex"; - if( setActive && ( this.activePage != this.currentPage ) ) { - - // Check to make sure we cover the crazy corner-case where the activeIndex - // is on the last item of the previous page. Here we don't need to load - // a new page, but simply load the first item on the current page. - if( (this.activeIndex == (this.activeNumItems - 1)) && (this.activePage == (this.currentPage - 1)) ) { - this.currentIndex = this.activeIndex = 0; - this.activePage = this.currentPage; - this.display.trigger("loadindex", { - index:0, - active:true - }); - } - else { - this.currentPage = this.activePage; - this.loadState = ""; - this.display.trigger("loadpage", { - index:this.activePage, - active:setActive - }); - } - } - else { - this[indexVar]++; - if ( this[indexVar] >= this.numItems ) { - if( this.numPages > 1 ) { - this[indexVar] = (this.numItems - 1); - this.loadState = this.loadState ? this.loadState : "first"; - this.nextPage( setActive ); - } - else if( !setActive || settings.loop ) { - this[indexVar] = 0; - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - } - else { - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - } - } - }; - - this.loadPrev = function( setActive ) { - var indexVar = setActive ? "activeIndex" : "currentIndex"; - - if( setActive && ( this.activePage != this.currentPage ) ) { - this.currentPage = this.activePage; - this.loadState = "prev"; - this.display.trigger("loadpage", { - index:this.activePage, - active:setActive - }); - } - else { - this[indexVar]--; - if ( this[indexVar] < 0 ) { - if( this.numPages > 1 ) { - this[indexVar] = 0; - this.loadState = this.loadState ? this.loadState : "last"; - this.prevPage( setActive ); - } - else if( !setActive || settings.loop ) { - this[indexVar] = (this.numItems - 1); - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - } - else { - this.display.trigger( "loadindex", { - index:this[indexVar], - active:setActive - } ); - } - } - }; - - this.loadRand = function() { - var newPage = Math.floor(Math.random() * this.numPages); - - if (newPage != this.activePage) { - this.activePage = newPage; - this.loadState = this.loadState ? this.loadState : "rand"; - this.display.trigger("loadpage", { - index:this.activePage, - active:true - }); - } - else { - this.activeIndex = Math.floor(Math.random() * this.numItems); - this.display.trigger("loadindex", { - index:this.activeIndex, - active:true - }); - } - }; - - this.nextPage = function( setActive ) { - var pageVar = setActive ? "activePage" : "currentPage"; - var pageLoaded = false; - - if ( this[pageVar] < (this.numPages - 1) ) { - this[pageVar]++; - pageLoaded = true; - } - else if ( settings.loop ) { - this.loadState = this.loadState ? this.loadState : "first"; - this[pageVar] = 0; - pageLoaded = true; - } - else { - this.loadState = ""; - } - - // Set the page state. - this.setPageState( setActive ); - - if( pageLoaded ) { - this.display.trigger("loadpage", { - index:this[pageVar], - active:setActive - }); - } - }; - - this.prevPage = function( setActive ) { - var pageVar = setActive ? "activePage" : "currentPage"; - var pageLoaded = false; - - if (this[pageVar] > 0) { - this[pageVar]--; - pageLoaded = true; - } - else if ( settings.loop ) { - this.loadState = this.loadState ? this.loadState : "last"; - this[pageVar] = (this.numPages - 1); - pageLoaded = true; - } - else { - this.loadState = ""; - } - - // Set the page state. - this.setPageState( setActive ); - - if( pageLoaded ) { - this.display.trigger("loadpage", { - index:this[pageVar], - active:setActive - }); - } - }; - - this.setPageState = function( setActive ) { - if( setActive ) { - // If this page is active, then we want to make sure - // we set the current page to the active page. - this.currentPage = this.activePage; - } - else { - // Store the active num items. - this.activeNumItems = this.numItems; - } - }; - })( this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.media = jQuery.extend( {}, { - parser : function( settings ) { - // Return a new parser object. - return new (function( settings ) { - var _this = this; - this.onLoaded = null; - - // Parse the contents from a file. - this.parseFile = function( file, onLoaded ) { - this.onLoaded = onLoaded; - jQuery.ajax({ - type: "GET", - url:file, - dataType:"xml", - success: function(xml) { - _this.parseXML( xml ); - }, - error: function( XMLHttpRequest, textStatus, errorThrown ) { - if( window.console && console.log ) { - console.log( "Error: " + textStatus ); - } - } - }); - }; - - // Parse an xml string. - this.parseXML = function( xml ) { - // Try to parse a playlist in any format... - var playlist = this.parseXSPF( xml ); - if( playlist.total_rows === 0 ) { - playlist = this.parseASX( xml ); - } - if( playlist.total_rows === 0 ) { - playlist = this.parseRSS( xml ); - } - if( this.onLoaded && playlist.total_rows ) { - this.onLoaded( playlist ); - } - return playlist; - }; - - // Parse XSPF contents. - this.parseXSPF = function( xml ) { - var playlist = { - total_rows:0, - nodes:[] - }; - var trackList = jQuery("playlist trackList track", xml); - if( trackList.length > 0 ) { - trackList.each( function(index) { - playlist.total_rows++; - playlist.nodes.push({ - nid:playlist.total_rows, - title: $(this).find("title").text(), - description: $(this).find("annotation").text(), - mediafiles: { - image:{ - "image":{ - path:$(this).find("image").text() - } - }, - media:{ - "media":{ - path:$(this).find("location").text() - } - } - } - }); - }); - } - return playlist; - }; - - // Parse ASX contents. - this.parseASX = function( xml ) { - var playlist = { - total_rows:0, - nodes:[] - }; - var trackList = jQuery("asx entry", xml); - if( trackList.length > 0 ) { - trackList.each( function(index) { - playlist.total_rows++; - playlist.nodes.push({ - nid:playlist.total_rows, - title: $(this).find("title").text(), - mediafiles: { - image:{ - "image":{ - path:$(this).find("image").text() - } - }, - media:{ - "media":{ - path:$(this).find("location").text() - } - } - } - }); - }); - } - return playlist; - }; - - // Parse RSS contents. - this.parseRSS = function( xml ) { - var playlist = { - total_rows:0, - nodes:[] - }; - var channel = jQuery("rss channel", xml); - if( channel.length > 0 ) { - var youTube = (channel.find("generator").text() == "YouTube data API"); - - // Iterate through all the items. - channel.find("item").each( function(index) { - playlist.total_rows++; - var item = {}; - item = youTube ? _this.parseYouTubeItem( $(this) ) : _this.parseRSSItem( $(this) ); - item.nid = playlist.total_rows; - playlist.nodes.push(item); - }); - } - return playlist; - }; - - // Parse a default RSS Item. - this.parseRSSItem = function( item ) { - return { - title: item.find("title").text(), - mediafiles: { - image:{ - "image":{ - path:item.find("image").text() - } - }, - media:{ - "media":{ - path:item.find("location").text() - } - } - } - }; - }; - - // Parse a YouTube item. - this.parseYouTubeItem = function( item ) { - var description = item.find("description").text(); - var media = item.find("link").text().replace("&feature=youtube_gdata", ""); - return { - title: item.find("title").text(), - mediafiles: { - image:{ - "image":{ - path:jQuery("img", description).eq(0).attr("src") - } - }, - media:{ - "media":{ - path:media, - player:"youtube" - } - } - } - }; - }; - })( settings ); - } - }, jQuery.media ); -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - protocol:"auto", - server:"drupal", - template:"default", - baseURL:"", - debug:false, - draggable:false, - resizable:false, - showPlaylist:true, - autoNext:true, - prefix:"", - zIndex:400, - fluidWidth:false, - fluidHeight:false, - fullscreen:false - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - loading:"#mediaplayerloading", - player:"#mediaplayer", - menu:"#mediamenu", - titleBar:"#mediatitlebar", - node:"#medianode", - playlist:"#mediaplaylist", - control:"#mediacontrol" - }); - - // Initialize our players, playlists, and controllers. - jQuery.media.players = {}; - jQuery.media.loadCallbacks = {}; - jQuery.media.playlists = {}; - jQuery.media.controllers = {}; - - // Use this function to trigger when the player has finished registering and loaded. - jQuery.media.onLoaded = function( playerId, callback ) { - var player = jQuery.media.players[playerId]; - if( player && player.display && player.loaded ) { - callback( player ); - } - else { - if( !jQuery.media.loadCallbacks[playerId] ) { - jQuery.media.loadCallbacks[playerId] = []; - } - jQuery.media.loadCallbacks[playerId].push( callback ); - } - }; - - // Adds a new element to the media player. - jQuery.media.addElement = function( playerId, fromPlayer, name ) { - if( fromPlayer && fromPlayer[name] ) { - var toPlayer = jQuery.media.players[playerId]; - if( toPlayer ) { - switch( name ) { - case "playlist": - toPlayer.addPlaylist( fromPlayer.playlist ); - break; - case "controller": - toPlayer.addController( fromPlayer.controller ); - break; - default: - break; - } - } - else { - // Otherwise, cache it for inclusion when the player is created. - var pName = name + "s"; - if( !jQuery.media[pName][playerId] ) { - jQuery.media[pName][playerId] = []; - } - jQuery.media[pName][playerId].push( fromPlayer[name] ); - } - } - }; - - // To add a new controller to any existing or future-included players. - jQuery.media.addController = function( playerId, fromPlayer ) { - jQuery.media.addElement( playerId, fromPlayer, "controller" ); - }; - - // To add a new playlist to any existing or future-included players. - jQuery.media.addPlaylist = function( playerId, fromPlayer ) { - jQuery.media.addElement( playerId, fromPlayer, "playlist" ); - }; - - // The main entry point into the player. - jQuery.fn.mediaplayer = function( settings ) { - if( this.length === 0 ) { - return null; - } - // Return the media Media Player - return new (function( player, settings ) { - // Get the settings. - settings = jQuery.media.utils.getSettings( settings ); - - // Get the id if it has not been set. - if( !settings.id ) { - settings.id = jQuery.media.utils.getId( player ); - } - - // Save the dialog. - this.dialog = player; - - // Save the jQuery display. - this.display = this.dialog.find( settings.ids.player ); - var _this = this; - - // Fix a really strange issue where if any of the parent elements are invisible - // when this player's template is initializing, it would crash due to the issue - // with calling the position() function on an invisible object. This seems to fix - // that issue. - var invisibleParents = []; - - // Now check the visibility of the parents, and add the offenders to the array. - jQuery.media.utils.checkVisibility( this.display, invisibleParents ); - - // Add this player to the players object. - jQuery.media.players[settings.id] = this; - - // Variable to keep track if this player has finished loading. - this.loaded = false; - - // Store the index variable. - var i = 0; - - // Set the template object. - settings.template = jQuery.media.templates[settings.template]( this, settings ); - - // Get all of the setting overrides used in this template. - if( settings.template.getSettings ) { - settings = jQuery.extend( settings, settings.template.getSettings() ); - } - - // Add some keyboard event handlers. - $(window).keyup( function( event ) { - switch( event.keyCode ) { - case 0: /* SpaceBar */ - _this.onSpaceBar(); - break; - case 113: /* Q key */ - case 27: /* ESC Key */ - _this.onEscKey(); - break; - default: - break; - } - }); - - // Add a resize handler to the window if either our width or height is fluid. - if( settings.fluidWidth || settings.fluidHeight ) { - $(window).resize( function() { - _this.onResize(); - }); - } - - // First get the communication protocol. - if( jQuery.media[settings.protocol] ) { - this.protocol = jQuery.media[settings.protocol]( settings ); - } - - // Load the server. - if( jQuery.media[settings.server] ) { - this.server = jQuery.media[settings.server]( this.protocol, settings ); - } - - // Get the menu. - this.menu = this.dialog.find( settings.ids.menu ).mediamenu( this.server, settings ); - if( this.menu ) { - this.menu.display.unbind("menuclose").bind( "menuclose", function() { - _this.showMenu( false ); - }); - } - - // Setup our booleans. - this.menuOn = false; - this.maxOn = !settings.showPlaylist; - this.fullScreen = false; - - // The attached playlist. - this.playlist = null; - - // The active playlist. - this.activePlaylist = null; - - // Our attached controller. - this.controller = null; - - // The active controller. - this.activeController = null; - - // Hide or Show the menu. - this.showMenu = function( show ) { - if( settings.template.onMenu ) { - this.menuOn = show; - settings.template.onMenu( this.menuOn ); - } - }; - - // Called when the user presses the ESC key. - this.onEscKey = function() { - // If they are in full screen mode, then escape when they press the ESC key. - if( this.fullScreen ) { - this.onFullScreen( false ); - } - }; - - // When they press the space bar, we will toggle the player play/pause state. - this.onSpaceBar = function() { - if( this.fullScreen && this.node && this.node.player ) { - this.node.player.togglePlayPause(); - } - }; - - // Adds the media player events to a given element. - this.addPlayerEvents = function( element ) { - // Trigger on the menu. - element.display.unbind("menu").bind("menu", function(event) { - _this.showMenu( !_this.menuOn ); - }); - - element.display.unbind("maximize").bind("maximize", function( event ) { - _this.maximize( !_this.maxOn ); - }); - - element.display.unbind("fullscreen").bind("fullscreen", function( event ) { - _this.onFullScreen( !_this.fullScreen ); - }); - }; - - // Function to put the player in fullscreen mode. - this.onFullScreen = function( full ) { - this.fullScreen = full; - if( this.node && this.node.player ) { - this.node.player.fullScreen( this.fullScreen ); - this.onResize(); - - // Check to see if this browser supports native fullscreen. - if (window.webkitSupportsFullscreen && window.webkitSupportsFullscreen()) { - if (full) { - window.webkitEnterFullscreen(); - } - else { - window.webkitExitFullscreen(); - } - } - } - }; - - // Setup the title bar. - this.titleBar = this.dialog.find( settings.ids.titleBar ).mediatitlebar( settings ); - if( this.titleBar ) { - // Add the player events to the titlebar. - this.addPlayerEvents( this.titleBar ); - - // If they have jQuery UI, make this draggable. - if( settings.draggable && this.dialog.draggable ) { - this.dialog.draggable({ - handle: settings.ids.titleBar, - containment: 'document' - }); - } - - // If they have jQuery UI, make this resizable. - if( settings.resizable && this.dialog.resizable ) { - this.dialog.resizable({ - alsoResize: this.display, - containment: 'document', - resize: function(event) { - _this.onResize(); - } - }); - } - } - - // Get the node and register for events. - this.node = this.dialog.find( settings.ids.node ).medianode( this.server, settings ); - if( this.node ) { - this.node.display.unbind("nodeload").bind( "nodeload", function( event, data ) { - _this.onNodeLoad( data ); - }); - - if( this.node.player && this.node.player.media ) { - this.node.player.media.display.unbind("mediaupdate").bind( "mediaupdate", function( event, data ) { - _this.onMediaUpdate( data ); - }); - } - - if( this.node.uservoter ) { - this.node.uservoter.display.unbind("voteSet").bind( "voteSet", function( event, vote ) { - if( _this.activePlaylist ) { - _this.activePlaylist.onVoteSet( vote ); - } - }); - } - } - - // Called when the media updates. - this.onMediaUpdate = function( data ) { - // Call the player onMediaUpdate. - this.node.player.onMediaUpdate( data ); - - // When the media completes, have the active playlist load the next item. - if( settings.autoNext && this.activePlaylist && (data.type == "complete") ) { - this.activePlaylist.loadNext(); - } - - // Update our controller. - if( this.controller ) { - this.controller.onMediaUpdate( data ); - } - - // Update our active controller. - if( this.activeController ) { - this.activeController.onMediaUpdate( data ); - } - - // Set the media information in the menu. - if( this.menu && this.node && (data.type == "meta") ) { - this.menu.setEmbedCode( this.node.player.media.player.getEmbedCode() ); - this.menu.setMediaLink( this.node.player.media.player.getMediaLink() ); - } - - // Let the template do something... - if( settings.template && settings.template.onMediaUpdate ) { - settings.template.onMediaUpdate( data ); - } - }; - - // Called when the playlist is finished loading. - this.onPlaylistLoad = function( data ) { - if( this.node ) { - // Let our media know that there is a playlist. - if( this.node.player && this.node.player.media ) { - this.node.player.media.hasPlaylist = true; - } - - this.node.loadNode( data ); - } - - // Allow the template to do something when the playlist is loaded. - if( settings.template.onPlaylistLoad ) { - settings.template.onPlaylistLoad( data ); - } - }; - - // Called when the main node is loaded. - this.onNodeLoad = function( data ) { - // Allow the template to do something when the node is loaded. - if( settings.template.onNodeLoad ) { - settings.template.onNodeLoad( data ); - } - }; - - // Maximize the player. - this.maximize = function( on ) { - // Don't want to maximize in fullscreen mode. - if( !this.fullScreen ) { - if( settings.template.onMaximize && (on != this.maxOn) ) { - this.maxOn = on; - settings.template.onMaximize( this.maxOn ); - } - } - }; - - // Allow multiple playlists to be associated with this single player using this API. - this.addPlaylist = function( newPlaylist ) { - if( newPlaylist ) { - newPlaylist.display.unbind("playlistload").bind( "playlistload", newPlaylist, function( event, data ) { - // Set this as the active playlist. - _this.activePlaylist = event.data; - _this.onPlaylistLoad( data ); - }); - - // Check to see if this playlist has already loaded... If so, then we need to - // go ahead and load the active teaser into this player. - if( !this.activePlaylist && newPlaylist.activeTeaser ) { - this.activePlaylist = newPlaylist; - this.onPlaylistLoad( newPlaylist.activeTeaser.node.nodeInfo ); - } - } - return newPlaylist; - }; - - // Search these elements for the id. - this.searchForElement = function(elementList) { - - // Iterate through the elements. - for(var id in elementList) { - - // We need to tolerate instances. - var reg = new RegExp( '^' + id + '(\\_[0-9]+)?$', 'i'); - if (settings.id.search(reg) === 0) { - return elementList[id]; - } - } - return null; - }; - - // Add the default playlist. - this.playlist = this.addPlaylist( this.dialog.find( settings.ids.playlist ).mediaplaylist( this.server, settings ) ); - - // Allow mulitple controllers to control this media. - this.addController = function( newController, active ) { - if( newController ) { - newController.display.unbind("controlupdate").bind( "controlupdate", newController, function( event, data ) { - _this.activeController = event.data; - if( _this.node && _this.node.player ) { - _this.node.player.onControlUpdate( data ); - } - }); - - if( active && !this.activeController ) { - this.activeController = newController; - } - - this.addPlayerEvents( newController ); - } - return newController; - }; - - // Add the control bar to the media. - this.controller = this.addController( this.dialog.find( settings.ids.control ).mediacontrol( settings ), false ); - if( this.controller && this.node ) { - // Add any voters to the node. - this.node.addVoters( this.controller.display ); - } - - // Called when the player resizes. - this.onResize = function() { - // Call the template resize function. - if( settings.template.onResize ) { - settings.template.onResize(); - } - - // Resize the node. - if( this.node ) { - this.node.onResize(); - } - - // Resize the attached control region. - if( this.controller ) { - this.controller.onResize(); - } - }; - - // Function to show the built in controls or not. - this.showNativeControls = function( show ) { - var player = this.node ? this.node.player : null; - if( player && player.hasControls() ) { - player.usePlayerControls = show; - if( show ) { - player.busy.hide(); - player.play.hide(); - if( player.preview ) { - player.preview.display.hide(); - } - if( this.controller ) { - this.controller.display.hide(); - } - } - else { - player.showBusy( 1, ((this.busyFlags & 0x2) == 0x2) ); - player.showPlay( this.playVisible ); - player.showPreview( this.previewVisible ); - if( this.controller ) { - this.controller.display.show(); - } - } - player.showControls( show ); - } - }; - - // Load the content into the player. - this.loadContent = function() { - - // Now add any queued controllers... - var controllers = this.searchForElement(jQuery.media.controllers); - if (controllers) { - i = controllers.length; - while(i) { - i--; - this.addController( controllers[i], true ); - } - } - - // Now add any queued playlists... - var playlists = this.searchForElement(jQuery.media.playlists); - if (playlists) { - i = playlists.length; - while(i) { - i--; - this.addPlaylist( playlists[i] ); - } - } - - var playlistLoaded = false; - - if( this.playlist ) { - playlistLoaded = this.playlist.loadPlaylist(); - } - - // Don't load the node if there is a plalist loaded. - if( !playlistLoaded && this.node ) { - // Make sure to transfer any playlist settings over to the node. - if( this.node.player && this.node.player.media ) { - this.node.player.media.settings.repeat = (settings.loop || settings.repeat); - } - - this.node.loadNode(); - } - }; - - this.initializeTemplate = function() { - // Initialize our template. - if( settings.template.initialize ) { - settings.template.initialize( settings ); - } - - // Now reset the visibility of the parents. - jQuery.media.utils.resetVisibility( invisibleParents ); - }; - - this.load = function() { - // Initialize our template. - this.initializeTemplate(); - - // The player looks good now. Move the dialog back. - this.dialog.css("position","relative"); - this.dialog.css("marginLeft",0); - this.dialog.css("overflow","visible"); - - // If they wish to default the player in fullscreen mode, do that now. - if( settings.fullscreen ) { - this.onFullScreen(true); - } - - // Set our loaded flag to true. - this.loaded = true; - this.display.trigger( "playerLoaded", this ); - - // Call all of our queued onLoaded callback functions. - if( jQuery.media.loadCallbacks[settings.id] ) { - var callbacks = jQuery.media.loadCallbacks[settings.id]; - var i = callbacks.length; - while(i) { - i--; - callbacks[i]( this ); - } - } - - // Connect to the server. - this.server.connect( function( result ) { - _this.loadContent(); - }); - }; - - this.load(); - })( this, settings ); - }; - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - playlist:"", - args:[], - wildcard:"*" - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - pager:"#mediapager", - scroll:"#mediascroll", - busy:"#mediabusy", - links:"#medialinks" - }); - - jQuery.fn.mediaplaylist = function( server, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, playlist, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = playlist; - var _this = this; - - // Store all of the current teasers. - this.teasers = []; - - // The non-active selected teaser. - this.selectedTeaser = null; - - // The active teaser. - this.activeTeaser = null; - - // Set up our playlist args. - this.args = settings.args; - - // Used to keep track if we should set the node active after a playlist load. - this.setActive = true; - - // The active pager. - this.activePager = null; - - // The attached pager bar.. - this.pager = null; - - // Set up the playlist parser. - this.parser = jQuery.media.parser( settings ); - - // Get the Scroll Region. - this.scrollRegion = playlist.find( settings.ids.scroll ).mediascroll( settings ); - this.scrollRegion.clear(); - - // Store the busy cursor. - this.busy = playlist.find( settings.ids.busy ); - this.busyVisible = false; - this.busyImg = this.busy.find("img"); - this.busyWidth = this.busyImg.width(); - this.busyHeight = this.busyImg.height(); - - // Get the links. - this.links = playlist.find( settings.ids.links ).medialinks( settings ); - this.links.loadLinks(); - - this.loading = function( _loading ) { - if( this.pager ) { - this.pager.enabled = !_loading; - } - if( this.activePager ) { - this.activePager.enabled = !_loading; - } - if( _loading ) { - this.busyVisible = true; - this.busy.show(); - } - else { - this.busyVisible = false; - this.busy.hide(); - } - }; - - // Allow mulitple pagers to control this playlist. - this.addPager = function( newPager, active ) { - if( newPager ) { - // Handler for the loadindex event. - newPager.display.unbind("loadindex").bind( "loadindex", function( event, data ) { - if( data.active ) { - _this.activateTeaser( _this.teasers[data.index] ); - } - else { - _this.selectTeaser( _this.teasers[data.index] ); - } - }); - - // Handler for the loadpage event. - newPager.display.unbind("loadpage").bind( "loadpage", function( event, data ) { - _this.setActive = data.active; - _this.loadPlaylist( { - pageIndex:data.index - } ); - }); - - if( active && !this.activePager ) { - this.activePager = newPager; - } - } - return newPager; - }; - - // Add the pager. - this.pager = this.addPager( playlist.find( settings.ids.pager ).mediapager( settings ), false ); - - // Handler for when a link is clicked. - this.links.display.unbind("linkclick").bind( "linkclick", function( event, link ) { - _this.onLinkClick( link ); - }); - - this.onLinkClick = function( link ) { - var index = link.index; - var newPlaylist = link.playlist; - var newArgs = []; - newArgs[index] = link.arg; - - if( this.pager ) { - this.pager.reset(); - } - - if( this.activePager ) { - this.activePager.reset(); - } - - this.loadPlaylist( { - playlist:newPlaylist, - args:newArgs - } ); - }; - - // Loads the next track. - this.loadNext = function() { - if( this.pager ) { - this.pager.loadNext( true ); - } - else if( this.activePager ) { - this.activePager.loadNext( true ); - } - }; - - // Function to load the playlist. - this.loadPlaylist = function( _args ) { - var defaults = { - playlist:settings.playlist, - pageLimit:settings.pageLimit, - pageIndex:(this.pager ? this.pager.activePage : 0), - args:{} - }; - - var playlistArgs = jQuery.extend( {}, defaults, _args ); - - // Set the arguments. - this.setArgs( playlistArgs.args ); - - // Set the busy cursor. - this.loading( true ); - - // If there is a playlist. - if( playlistArgs.playlist ) { - // If the playlist is an object, then just set it directly. - if( ((typeof playlistArgs.playlist) == "object") ) { - settings.playlist = playlistArgs.playlist.name; - this.setPlaylist( playlistArgs.playlist ); - } - else { - // See if the playlist is a URL file. - if( playlistArgs.playlist.match(/^http[s]?\:\/\/|\.xml$/i) ) { - // Parse the XML file. - this.parser.parseFile( playlistArgs.playlist, function( result ) { - _this.setPlaylist( result ); - }); - } - else if( server ) { - // Load the playlist from the server. - server.call( jQuery.media.commands.getPlaylist, function( result ) { - _this.setPlaylist( result ); - }, null, playlistArgs.playlist, playlistArgs.pageLimit, playlistArgs.pageIndex, this.args ); - } - } - - // Return that the playlist was loaded. - return true; - } - - // Return that the playlist was not loaded. - return false; - }; - - // Set this playlist. - this.setPlaylist = function( _playlist ) { - if( _playlist && _playlist.nodes ) { - // Now check the visibility of the parents, and add the offenders to the array. - var invisibleParents = []; - jQuery.media.utils.checkVisibility( this.display, invisibleParents ); - - // Set the total number of items for the pager. - if( this.pager ) { - this.pager.setTotalItems( _playlist.total_rows ); - } - - // Set the total number of items for the active pager. - if( this.activePager ) { - this.activePager.setTotalItems( _playlist.total_rows ); - } - - // Empty the scroll region. - this.scrollRegion.clear(); - - // Reset the teasers. - this.resetTeasers(); - - // Iterate through all of our nodes. - var numNodes = _playlist.nodes.length; - for( var index=0; index < numNodes; index++ ) { - // Add the teaser. - this.addTeaser( _playlist.nodes[index], index ); - } - - // Activate the scroll region. - this.scrollRegion.activate(); - - // Load the next node. - if( this.pager ) { - this.pager.loadNext( this.setActive ); - } - - if( this.activePager ) { - this.activePager.loadNext( this.setActive ); - } - - // Now reset the invisibilty. - jQuery.media.utils.resetVisibility( invisibleParents ); - } - - // We are finished loading. - this.loading( false ); - }; - - // When a vote has been cast, we also need to update the playlist. - this.onVoteSet = function( vote ) { - if( vote ) { - var i = this.teasers.length; - while(i--) { - var teaser = this.teasers[i]; - if( teaser.node.nodeInfo.nid == vote.content_id ) { - teaser.node.voter.updateVote( vote ); - } - } - } - }; - - // Add a single teaser to the list. - this.addTeaser = function( nodeInfo, index ) { - // Setup the teaser. - var teaser = this.scrollRegion.newItem().mediateaser( server, nodeInfo, index, settings ); - if( teaser ) { - // If they click on the teaser, then activate it. - teaser.display.unbind("click").bind( "click", teaser, function( event ) { - _this.activateTeaser( event.data ); - }); - - if( this.activeTeaser ) { - this.activeTeaser.setActive( nodeInfo.nid == this.activeTeaser.node.nodeInfo.nid ); - } - - if( this.selectedTeaser ) { - this.selectedTeaser.setSelected( nodeInfo.nid == this.selectedTeaser.node.nodeInfo.nid ); - } - - // Add this teaser to the teasers array. - this.teasers.push( teaser ); - } - }; - - // Reset the teaser bindings. - this.resetTeasers = function() { - // Remove all handlers. - var i = this.teasers.length; - while(i--) { - this.teasers[i].reset(); - } - this.teasers = []; - }; - - // Set the arguments for this playlist. - this.setArgs = function( _args ) { - if( _args ) { - // Reset the arguments. - this.args = settings.args; - - // Loop through and add the new arguments. - var i = _args.length; - while(i) { - i--; - var arg = _args[i]; - if( arg && (arg != settings.wildcard) ) { - this.args[i] = arg; - } - } - } - }; - - // Selects a teaser. - this.selectTeaser = function( teaser ) { - - // Set the current active teaser to false. - if( this.selectedTeaser ) { - this.selectedTeaser.setSelected( false ); - } - - // Store the active teaser for next time. - this.selectedTeaser = teaser; - - if( this.selectedTeaser ) { - // Now activate the new teaser. - this.selectedTeaser.setSelected( true ); - - // Set this item as visible in the scroll region. - this.scrollRegion.setVisible( teaser.index ); - } - }; - - // Activate the teaser. - this.activateTeaser = function( teaser ) { - // First select the teaser. - this.selectTeaser( teaser ); - - // Set the current active teaser to false. - if( this.activeTeaser ) { - this.activeTeaser.setActive( false ); - } - - // Store the active teaser for next time. - this.activeTeaser = teaser; - - if( this.activeTeaser ) { - // Now activate the new teaser. - this.activeTeaser.setActive( true ); - - // Set the active and current index to this one. - if( this.pager ) { - this.pager.activeIndex = this.pager.currentIndex = teaser.index; - } - - if( this.activePager ) { - this.activePager.activeIndex = this.activePager.currentIndex = teaser.index; - } - - // Trigger an even that the teaser has been activated. - this.display.trigger( "playlistload", teaser.node.nodeInfo ); - } - }; - })( server, this, settings ); - }; - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - linkText:"#medialinktext" - }); - - jQuery.fn.playlistlink = function( settings, linkInfo ) { - return new (function( link, settings, linkInfo ) { - settings = jQuery.media.utils.getSettings(settings); - this.display = link; - this.arg = linkInfo.arg; - this.text = linkInfo.text; - this.index = linkInfo.index; - - // Call the setLink when clicked. - this.display.medialink( settings, function( event ) { - _this.display.trigger( "linkclick", event.data ); - }, this ); - - this.setActive = function( active ) { - if( settings.template.onLinkSelect ) { - settings.template.onLinkSelect( _this, active ); - } - }; - - this.display.find( settings.ids.linkText ).html( this.text ); - })( this, settings, linkInfo ); - }; - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - rotatorTimeout:5000, - rotatorTransition:"fade", - rotatorEasing:"swing", - rotatorSpeed:"slow", - rotatorHover:false - }); - - jQuery.fn.mediarotator = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( rotator, settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - this.images = []; - this.imageIndex = 0; - this.imageInterval = null; - this.width = 0; - this.height = 0; - - this.onImageLoaded = function() { - this.width = this.images[0].imgLoader.width; - this.height = this.images[0].imgLoader.height; - rotator.css({ - width:this.width, - height:this.height - }); - var sliderWidth = (settings.rotatorTransition == "hscroll") ? (2*this.width) : this.width; - var sliderHeight = (settings.rotatorTransition == "vscroll") ? (2*this.height) : this.height; - this.display.css({ - width:sliderWidth, - height:sliderHeight - }); - }; - - this.addImage = function() { - var image = $("
").mediaimage(null, true); - this.display.append( image.display ); - - if( (settings.rotatorTransition == "hscroll") || (settings.rotatorTransition == "vscroll") ) { - image.display.css({ - "float":"left" - }); - } - else { - image.display.css({ - position:"absolute", - zIndex:(200 - this.images.length), - top:0, - left:0 - }); - } - return image; - }; - - this.loadImages = function( _images ) { - this.images = []; - this.imageIndex = 0; - - jQuery.each( _images, function( index ) { - var image = _this.addImage(); - if( index === 0 ) { - image.display.unbind("imageLoaded").bind("imageLoaded", function() { - _this.onImageLoaded(); - }).show(); - } - image.loadImage( this ); - _this.images.push( image ); - }); - - if( settings.rotatorHover ) { - this.display.unbind("mouseenter").bind( "mouseenter", function() { - _this.startRotator(); - }).unbind("mouseleave").bind( "mouseleave", function() { - clearInterval( _this.imageInterval ); - }); - } - else { - this.startRotator(); - } - }; - - this.startRotator = function() { - clearInterval( this.imageInterval ); - this.imageInterval = setInterval( function() { - _this.showNextImage(); - }, settings.rotatorTimeout ); - }; - - this.showNextImage = function() { - this.hideImage( this.images[this.imageIndex].display ); - this.imageIndex = (this.imageIndex + 1) % this.images.length; - this.showImage( this.images[this.imageIndex].display ); - }; - - this.showImage = function( image ) { - if( settings.rotatorTransition === 'fade' ) { - image.fadeIn(settings.rotatorSpeed); - } - else { - image.css({ - marginLeft:0, - marginTop:0 - }).show(); - } - }; - - this.hideImage = function( image ) { - switch( settings.rotatorTransition ) { - case "fade": - image.fadeOut(settings.rotatorSpeed); - break; - case "hscroll": - image.animate({ - marginLeft:-this.width - }, settings.rotatorSpeed, settings.rotatorEasing, function() { - image.css({ - marginLeft:0 - }).remove(); - _this.display.append( image ); - }); - break; - case "vscroll": - image.animate({ - marginTop:-this.height - }, settings.rotatorSpeed, settings.rotatorEasing, function() { - image.css({ - marginTop:0 - }).remove(); - _this.display.append( image ); - }); - break; - default: - image.hide(); - break; - } - }; - - // Find all the images in the rotator container. - var _images = []; - rotator.find("img").each( function() { - _images.push( $(this).attr("src") ); - }); - - // Empty the container and setup the inner rotator. - rotator.empty().css("overflow", "hidden").append( $('
') ); - this.display = rotator.find(".imagerotatorinner"); - - // If they provided images, then we will want to load them. - if( _images.length ) { - this.loadImages( _images ); - } - })( this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - gateway:"" - }); - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the rpc object. - rpc : function( settings ) { - // Return a new function for this object - return new (function( settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - - this.parseObject = function( data ) { - var ret = ""; - if( data instanceof Date ) { - ret = ""; - ret += data.getFullYear(); - ret += data.getMonth(); - ret += data.getDate(); - ret += "T"; - ret += data.getHours() + ":"; - ret += data.getMinutes() + ":"; - ret += data.getSeconds(); - ret += ""; - } else if( data instanceof Array ) { - ret = ''+"\n"; - for (var i=0; i < data.length; i++) { - ret += ' '+ this.serializeToXML(data[i]) +"\n"; - } - ret += ''; - } else { - ret = ''+"\n"; - for(var key in data ) { - if( data.hasOwnProperty(key) ) { - ret += " "+ key +""; - ret += this.serializeToXML(data[key]) +"\n"; - } - } - ret += ''; - } - return ret; - }; - - this.serializeToXML = function( data ) { - switch( typeof data ) { - case 'boolean': - return ''+ ((data) ? '1' : '0') +''; - - case 'number': - var parsed = parseInt(data, 10); - if(parsed == data) { - return ''+ data +''; - } - return ''+ data +''; - - case 'string': - return ''+ data +''; - - case 'object': - return this.parseObject( data ); - default: - break; - } - return ''; - }; - - this.parseXMLValue = function( node ) { - var childs = jQuery(node).children(); - var numChildren = childs.length; - var newArray = function(items) { - return function() { - items.push( _this.parseXMLValue(this) ); - }; - }; - var newObject = function( items ) { - return function() { - items[jQuery( "> name", this).text()] = _this.parseXMLValue(jQuery("value", this)); - }; - }; - for(var i=0; i < numChildren; i++) { - var element = childs[i]; - switch(element.tagName) { - case 'boolean': - return (jQuery(element).text() == 1); - case 'int': - return parseInt(jQuery(element).text(), 10); - case 'double': - return parseFloat(jQuery(element).text()); - case "string": - return jQuery(element).text(); - case "array": - var retArray = []; - jQuery("> data > value", element).each( newArray( retArray ) ); - return retArray; - case "struct": - var retObj = {}; - jQuery("> member", element).each( newObject( retObj ) ); - return retObj; - case "dateTime.iso8601": - return NULL; - default: - break; - } - } - return null; - }; - - this.parseXML = function( data ) { - var ret = {}; - ret.version = "1.0"; - jQuery("methodResponse params param > value", data).each( function(index) { - ret.result = _this.parseXMLValue(this); - }); - jQuery("methodResponse fault > value", data).each( function(index) { - ret.error = _this.parseXMLValue(this); - }); - return ret; - }; - - this.xmlRPC = function( method, params ) { - var ret = ''; - ret += ''; - ret += '' + method + ''; - if( params.length > 0 ) { - ret += ''; - var numParams = params.length; - for(var i=0; i < numParams; i++) { - if( params[i] ) { - ret += "" + this.serializeToXML(params[i]) + ""; - } - } - ret += ''; - } - ret += ''; - return ret; - }; - - this.call = function( method, onSuccess, onFailed, params, protocol ) { - if( settings.gateway ) { - jQuery.ajax({ - "url": settings.gateway, - "dataType": "xml", - "type": "POST", - "data": this.xmlRPC( method, params ), - "error": function( XMLHttpRequest, textStatus, errorThrown ) { - if( onFailed ) { - onFailed( textStatus ); - } - else if( window.console && console.log ) { - console.log( "Error: " + textStatus ); - } - }, - "success": function( msg ) { - var xml = _this.parseXML( msg ); - if( xml.error ) { - if( onFailed ) { - onFailed( xml.error ); - } - else if( window.console && console.dir ) { - console.dir( xml.error ); - } - } - else if( onSuccess ) { - onSuccess( xml.result ); - } - }, - "processData": false, - "contentType": "text/xml" - }); - } - else if( onSuccess ) { - onSuccess( null ); - } - }; - })( settings ); - } - }, jQuery.media ); - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - vertical:true, - scrollSpeed:20, - updateTimeout:40, - hysteresis:40, - showScrollbar:true, - scrollMode:"auto" /* "auto", "span", "mouse", "none" */ - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - listMask:"#medialistmask", - list:"#medialist", - scrollWrapper:"#mediascrollbarwrapper", - scrollBar:"#mediascrollbar", - scrollTrack:"#mediascrolltrack", - scrollHandle:"#mediascrollhandle", - scrollUp:"#mediascrollup", - scrollDown:"#mediascrolldown" - }); - - jQuery.fn.mediascroll = function( settings ) { - return new (function( scrollRegion, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = scrollRegion; - var _this = this; - - this.spanMode = (settings.scrollMode == "span"); - - // Get the list region. - this.listMask = scrollRegion.find( settings.ids.listMask ); - - // Setup the mouse events for the auto scroll mode. - if( this.spanMode || (settings.scrollMode == "auto") ) { - // Add our event callbacks. - this.listMask.unbind("mouseenter").bind( 'mouseenter', function( event ) { - _this.onMouseOver( event ); - }); - this.listMask.unbind("mouseleave").bind( 'mouseleave', function( event ) { - _this.onMouseOut( event ); - }); - this.listMask.unbind("mousemove").bind( 'mousemove', function( event ) { - _this.onMouseMove( event ); - }); - } - // Setup the mouse events for the mouse scroll mode. - else if(settings.scrollMode == "mouse") { - // Add our event callbacks. - this.display.bind('mousewheel', function(event, delta, deltaX, deltaY) { - event.preventDefault(); - _this.onMouseScroll(deltaX, deltaY); - }); - } - - this.listMask.css("overflow", "hidden"); - - this.list = scrollRegion.find( settings.ids.list ); - - var element = this.list.children().eq(0); - this.elementWidth = element.width(); - this.elementHeight = element.height(); - this.elementSize = settings.vertical ? element.outerHeight(true) : element.outerWidth(true); - - // Early versions of jQuery have a broken clone method for IE. This fixes that. - if( jQuery.browser.msie && parseInt( jQuery.fn.jquery.replace(".", ""), 10 ) < 132 ) { - this.template = $("
").append( jQuery.media.utils.cloneFix( element ) ).html(); - } - else { - this.template = $("
").append( element.clone() ).html(); - } - - // Empty our list. - this.list.empty(); - - // Initialize our variables. - this.pagePos = settings.vertical ? "pageY" : "pageX"; - this.margin = settings.vertical ? "marginTop" : "marginLeft"; - this.scrollSize = settings.vertical ? 0 : this.listMask.width(); - this.scrollMid = 0; - this.mousePos = 0; - this.listPos = 0; - this.scrollInterval = 0; - this.shouldScroll = false; - this.bottomPos = 0; - this.ratio = 0; - this.elements = []; - this.listSize = 0; - - // Add the slider control to this scroll bar. - this.scrollBar = scrollRegion.find( settings.ids.scrollTrack ).mediaslider( settings.ids.scrollHandle, settings.vertical ); - - // Setup the scroll up button. - this.scrollUp = scrollRegion.find( settings.ids.scrollUp ).medialink( settings, function() { - _this.scroll( true ); - }); - - // Setup the scroll down button. - this.scrollDown = scrollRegion.find( settings.ids.scrollDown ).medialink( settings, function() { - _this.scroll( false ); - }); - - if( this.scrollBar ) { - // Handle the update value event. - this.scrollBar.display.unbind("updatevalue").bind("updatevalue", function( event, data ) { - _this.setScrollPos( data * _this.bottomPos, false ); - }); - - // Handle the set value event. - this.scrollBar.display.unbind("setvalue").bind("setvalue", function( event, data ) { - _this.setScrollPos( data * _this.bottomPos, true ); - }); - - // Add our event callbacks. - this.scrollBar.display.bind('mousewheel', function(event, delta, deltaX, deltaY) { - event.preventDefault(); - _this.onMouseScroll(deltaX, deltaY); - }); - } - - this.setScrollSize = function( newSize ) { - if( newSize ) { - this.scrollSize = newSize; - this.scrollMid = this.scrollSize / 2; - var activeSize = this.scrollSize - (settings.hysteresis*2); - this.bottomPos = (this.listSize - this.scrollSize); - this.ratio = ( (this.listSize - activeSize) / activeSize ); - this.shouldScroll = (this.bottomPos > 0); - } - }; - - // Clears this scroll region. - this.clear = function() { - // Reset all variables for a page refresh. - this.mousePos = 0; - this.shouldScroll = false; - this.bottomPos = 0; - this.ratio = 0; - this.scrolling = false; - this.elements = []; - this.listSize = 0; - this.list.css( this.margin, 0 ); - this.list.children().unbind(); - clearInterval( this.scrollInterval ); - this.list.empty(); - }; - - this.getOffset = function() { - return settings.vertical ? this.listMask.offset().top : this.listMask.offset().left; - }; - - // Activates the scroll region. - this.activate = function() { - // Set the scroll size. - this.setScrollSize( settings.vertical ? this.listMask.height() : this.listMask.width() ); - - // Now reset the list position. - this.setScrollPos( 0, true ); - }; - - // Add an item to this scroll region. - this.newItem = function() { - var newTemplate = $(this.template); - this.list.append( newTemplate ); - var element = this.getElement( newTemplate, this.elements.length ); - this.listSize += element.size; - if( settings.vertical ) { - this.list.css({ - height:this.listSize - }); - } - else { - this.list.css({ - width:this.listSize - }); - } - this.elements.push( element ); - return element.obj; - }; - - // Returns the cached element object with all properties. - this.getElement = function( element, index ) { - var size = this.elementSize; - var pos = this.listSize; - return { - obj:element, - size:size, - position:pos, - bottom:(pos+size), - mid:(size/2), - index:index - }; - }; - - // Scroll the list up or down one element. - this.scroll = function( up ) { - var element = this.getElementAtPosition( up ? 0 : this.scrollSize ); - if( element ) { - var newElement = (element.straddle || up) ? element : this.elements[ element.index + 1 ]; - if( newElement ) { - var _listPos = up ? newElement.position : (newElement.bottom - this.scrollSize); - this.setScrollPos( _listPos, true ); - } - } - }; - - // Called when the mouse scrolls. - this.onMouseScroll = function( deltaX, deltaY ) { - var d = settings.vertical ? -deltaY : deltaX; - this.setScrollPos(this.listPos + (settings.scrollSpeed*d)); - }; - - // Called when the mouse moves within the scroll region. - this.onMouseMove = function( event ) { - this.mousePos = event[ this.pagePos ] - this.getOffset(); - - // If the scroll type is span, then just move the list - // up and down according to the listSize/regionSize ratio. - if( this.shouldScroll && this.spanMode ) { - this.setScrollPos( (this.mousePos - settings.hysteresis) * this.ratio ); - } - }; - - // Called when the mouse enters the scroll region. - this.onMouseOver = function( event ) { - if( this.shouldScroll ) { - clearInterval( this.scrollInterval ); - this.scrollInterval = setInterval( function() { - _this.update(); - }, settings.updateTimeout ); - } - }; - - // Called when the mouse exits the scroll region. - this.onMouseOut = function( event ) { - clearInterval( this.scrollInterval ); - }; - - // This function will align the scroll region. - this.align = function( up ) { - var element = this.getElementAtPosition( up ? 0 : this.scrollSize ); - if( element ) { - var _listPos = up ? element.position : (element.bottom - this.scrollSize); - this.setScrollPos( _listPos, true ); - } - }; - - // Will set the element at the given index visible. - this.setVisible = function( index ) { - var element = this.elements[index]; - if( element ) { - var newPos = this.listPos; - if( element.position < this.listPos ) { - newPos = element.position; - } else if( (element.bottom - this.listPos) > this.scrollSize ) { - newPos = element.bottom - this.scrollSize; - } - if( newPos != this.listPos ) { - this.setScrollPos( newPos, true ); - } - } - }; - - // Gets an element at a specific location in the list. - this.getElementAtPosition = function( position ) { - var element = null; - var i = this.elements.length; - while(i--) { - element = this.elements[i]; - if( ((element.position - this.listPos) < position) && - ((element.bottom - this.listPos) >= position) ) { - element.straddle = ((element.bottom - this.listPos) != position); - break; - } - } - return element; - }; - - // Called every interval to update the scroll position. - this.update = function() { - var delta = this.mousePos - this.scrollMid; - if( Math.abs(delta) > settings.hysteresis ) { - var hyst = (delta > 0) ? -settings.hysteresis : settings.hysteresis; - delta = settings.scrollSpeed * (( this.mousePos + hyst - this.scrollMid) / this.scrollMid); - this.setScrollPos(this.listPos + delta); - } - }; - - // Sets the scroll position. - this.setScrollPos = function( _listPos, tween ) { - // Make sure we are greater than zero here. - _listPos = (_listPos < 0) ? 0 : _listPos; - - // See if we should scroll and if the list position is - // greater than the bottom position. - if( this.shouldScroll && (_listPos > this.bottomPos) ) { - _listPos = this.bottomPos; - } - - // Now set the list position. - this.listPos = _listPos; - - // Set the position of the scroll bar. - if( this.scrollBar ) { - var newPos = this.bottomPos ? (this.listPos / this.bottomPos) : 0; - this.scrollBar.setPosition( newPos ); - } - - if( tween ) { - if( settings.vertical ) { - this.list.animate({ - marginTop: -this.listPos - }, (settings.scrollSpeed*10)); - } - else { - this.list.animate({ - marginLeft: -this.listPos - }, (settings.scrollSpeed*10)); - } - } - else { - this.list.css( this.margin, -this.listPos ); - } - }; - })( this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the sha256 object. - sha256 : function() { - /* A JavaScript implementation of the SHA family of hashes, as defined in FIPS PUB 180-2 - * as well as the corresponding HMAC implementation as defined in FIPS PUB 198a - * Version 1.2 Copyright Brian Turek 2009 - * Distributed under the BSD License - * See http://jssha.sourceforge.net/ for more information - * - * Several functions taken from Paul Johnson - */ - function jsSHA(o,p){jsSHA.charSize=8;jsSHA.b64pad="";jsSHA.hexCase=0;var q=null;var r=null;var s=function(a){var b=[];var c=(1<>5]|=(a.charCodeAt(i/jsSHA.charSize)&c)<<(32-jsSHA.charSize-i%32)}return b};var u=function(a){var b=[];var c=a.length;for(var i=0;i>3]|=d<<(24-(4*(i%8)))}else{return"INVALID HEX STRING"}}return b};var v=null;var w=null;if("HEX"===p){if(0!==(o.length%2)){return"TEXT MUST BE IN BYTE INCREMENTS"}v=o.length*4;w=u(o)}else if(("ASCII"===p)||('undefined'===typeof(p))){v=o.length*jsSHA.charSize;w=s(o)}else{return"UNKNOWN TEXT INPUT TYPE"}var A=function(a){var b=jsSHA.hexCase?"0123456789ABCDEF":"0123456789abcdef";var c="";var d=a.length*4;for(var i=0;i>2]>>((3-i%4)*8+4))&0xF)+b.charAt((a[i>>2]>>((3-i%4)*8))&0xF)}return c};var B=function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var c="";var d=a.length*4;for(var i=0;i>2]>>8*(3-i%4))&0xFF)<<16)|(((a[i+1>>2]>>8*(3-(i+1)%4))&0xFF)<<8)|((a[i+2>>2]>>8*(3-(i+2)%4))&0xFF);for(var j=0;j<4;j++){if(i*8+j*6>a.length*32){c+=jsSHA.b64pad}else{c+=b.charAt((e>>6*(3-j))&0x3F)}}}return c};var C=function(x,n){if(n<32){return(x>>>n)|(x<<(32-n))}else{return x}};var D=function(x,n){if(n<32){return x>>>n}else{return 0}};var E=function(x,y,z){return(x&y)^(~x&z)};var F=function(x,y,z){return(x&y)^(x&z)^(y&z)};var G=function(x){return C(x,2)^C(x,13)^C(x,22)};var I=function(x){return C(x,6)^C(x,11)^C(x,25)};var J=function(x){return C(x,7)^C(x,18)^D(x,3)};var L=function(x){return C(x,17)^C(x,19)^D(x,10)};var M=function(x,y){var a=(x&0xFFFF)+(y&0xFFFF);var b=(x>>>16)+(y>>>16)+(a>>>16);return((b&0xFFFF)<<16)|(a&0xFFFF)};var N=function(a,b,c,d){var e=(a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF);var f=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16);return((f&0xFFFF)<<16)|(e&0xFFFF)};var O=function(a,b,c,d,e){var f=(a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);var g=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16)+(f>>>16);return((g&0xFFFF)<<16)|(f&0xFFFF)};var P=function(j,k,l){var W=[];var a,b,c,d,e,f,g,h;var m,T2;var H;var K=[0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0x0FC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x06CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2];if(l==="SHA-224"){H=[0xc1059ed8,0x367cd507,0x3070dd17,0xf70e5939,0xffc00b31,0x68581511,0x64f98fa7,0xbefa4fa4]}else{H=[0x6A09E667,0xBB67AE85,0x3C6EF372,0xA54FF53A,0x510E527F,0x9B05688C,0x1F83D9AB,0x5BE0CD19]}j[k>>5]|=0x80<<(24-k%32);j[((k+1+64>>9)<<4)+15]=k;var n=j.length;for(var i=0;ik){f[15]&=0xFFFFFF00}for(var i=0;i<=15;i++){g[i]=f[i]^0x36363636;h[i]=f[i]^0x5C5C5C5C}j=P(g.concat(w),512+v,c);j=P(h.concat(j),512+l,c);return(e(j))}} - - // But I wrote this... ;) - this.encrypt = function( key, input ) { - var shaObj = new jsSHA(input, "ASCII"); - return shaObj.getHMAC(key, "ASCII", "SHA-256", "HEX"); - }; - } - }, jQuery.media ); - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.fn.mediaslider = function( handleId, vertical, inverted ) { - if( this.length === 0 ) { - return null; - } - return new (function( control, handleId, vertical, inverted ) { - var _this = this; - this.display = control.css({ - cursor:"pointer" - }); - this.dragging = false; - this.value = 0; - this.handle = this.display.find(handleId); - this.pagePos = vertical ? "pageY" : "pageX"; - this.handlePos = 0; - - // Only if there is a handle. - if( this.handle.length > 0 ) { - this.handleSize = vertical ? this.handle.height() : this.handle.width(); - this.handleMid = (this.handleSize/2); - } - - this.onResize = function() { - this.setTrackSize(); - this.updateValue( this.value ); - }; - - this.setTrackSize = function() { - this.trackSize = vertical ? this.display.height() : this.display.width(); - this.trackSize -= this.handleSize; - this.trackSize = (this.trackSize > 0) ? this.trackSize : 1; - }; - - this.setValue = function( _value ) { - this.setPosition( _value ); - this.display.trigger( "setvalue", this.value ); - }; - - this.updateValue = function( _value ) { - this.setPosition( _value ); - this.display.trigger( "updatevalue", this.value ); - }; - - this.setPosition = function( _value ) { - _value = (_value < 0) ? 0 : _value; - _value = (_value > 1) ? 1 : _value; - this.value = _value; - this.handlePos = inverted ? (1-this.value) : this.value; - this.handlePos *= this.trackSize; - this.handle.css( (vertical ? "marginTop" : "marginLeft"), this.handlePos ); - }; - - this.display.unbind("mousedown").bind("mousedown", function( event ) { - event.preventDefault(); - _this.dragging = true; - }); - - this.getOffset = function() { - var offset = vertical ? this.display.offset().top : this.display.offset().left; - return (offset + (this.handleSize / 2)); - }; - - this.getPosition = function( pagePos ) { - var pos = (pagePos - this.getOffset()) / this.trackSize; - pos = (pos < 0) ? 0 : pos; - pos = (pos > 1) ? 1 : pos; - pos = inverted ? (1-pos) : pos; - return pos; - }; - - this.display.unbind("mousemove").bind("mousemove", function( event ) { - event.preventDefault(); - if( _this.dragging ) { - _this.updateValue( _this.getPosition( event[_this.pagePos] ) ); - } - }); - - this.display.unbind("mouseleave").bind("mouseleave", function( event ) { - event.preventDefault(); - if( _this.dragging ) { - _this.dragging = false; - _this.setValue( _this.getPosition( event[_this.pagePos] ) ); - } - }); - - this.display.unbind("mouseup").bind("mouseup", function( event ) { - event.preventDefault(); - if( _this.dragging ) { - _this.dragging = false; - _this.setValue( _this.getPosition( event[_this.pagePos] ) ); - } - }); - - this.onResize(); - - })( this, handleId, vertical, inverted ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - pageLink:false - }); - - jQuery.fn.mediateaser = function( server, nodeInfo, _index, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, nodeInfo, _index, teaser, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - var _this = this; - this.display = teaser; - - // If they hover over the teaser... - this.display.unbind("mouseenter").bind( "mouseenter", function(event) { - if( settings.template.onTeaserOver ) { - settings.template.onTeaserOver( _this ); - } - }); - - // If they hover away from the teaser... - this.display.unbind("mouseleave").bind( "mouseleave", function(event) { - if( settings.template.onTeaserOut ) { - settings.template.onTeaserOut( _this ); - } - }); - - // The index of this teaser - this.index = _index; - - // Setup the node. - this.node = this.display.medianode( server, settings ); - - // Load the node information. - if( this.node ) { - this.node.loadNode( nodeInfo ); - } - - // If they wish to link these teasers to actual nodes. - if( this.node && settings.pageLink ) { - var path = settings.baseURL; - path += nodeInfo.path ? nodeInfo.path : ("node/" + nodeInfo.nid); - this.node.display.wrap(''); - } - - this.reset = function() { - if( this.node ) { - this.node.display.unbind(); - } - }; - - this.setActive = function( _active ) { - if( settings.template.onTeaserActivate ) { - settings.template.onTeaserActivate(this, _active); - } - }; - - this.setSelected = function( _selected ) { - if( settings.template.onTeaserSelect ) { - settings.template.onTeaserSelect(this, _selected); - } - }; - - // Let the template setup the teaser. - if( settings.template.onTeaserLoad ) { - settings.template.onTeaserLoad( this ); - } - })( server, nodeInfo, _index, this, settings ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - titleLinks:"#mediatitlelinks" - }); - - jQuery.fn.mediatitlebar = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( titleBar, settings ) { - // Save the jQuery display. - var _this = this; - this.display = titleBar; - - this.titleLinks = this.display.find( settings.ids.titleLinks ); - - this.display.find("a").each( function() { - var linkId = $(this).attr("href"); - $(this).medialink( settings, function( event ) { - event.preventDefault(); - _this.display.trigger( event.data.id ); - }, { - id:linkId.substr(1), - obj:$(this) - } ); - }); - })( this, settings ); - }; - -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.media = jQuery.extend( {}, { - utils : { - getBaseURL : function() { - var url = new RegExp(/^(http[s]?\:[\\\/][\\\/])([^\\\/\?]+)/); - var results = url.exec(location.href); - return results ? results[0] : ""; - }, - - timer:{}, - stopElementHide:{}, - showThenHide : function( element, id, showSpeed, hideSpeed, finished ) { - if( element ) { - element.show(showSpeed); - if( jQuery.media.utils.timer.hasOwnProperty(id) ) { - clearTimeout( jQuery.media.utils.timer[id] ); - } - jQuery.media.utils.timer[id] = setTimeout( function() { - if( !jQuery.media.utils.stopElementHide[id] ) { - element.hide(hideSpeed, function() { - if( jQuery.media.utils.stopElementHide[id] ) { - element.show(); - } - - if( finished ) { - finished(); - } - }); - } - }, 5000); - } - }, - - stopHide : function( element, id ) { - jQuery.media.utils.stopElementHide[id] = true; - clearTimeout(jQuery.media.utils.timer[id]); - }, - - stopHideOnOver : function( element, id ) { - if( element ) { - jQuery.media.utils.stopElementHide[id] = false; - element.unbind("mouseover").bind("mouseover", {id:id}, function( event ) { - jQuery.media.utils.stopElementHide[event.data.id] = true; - }).unbind("mouseout").bind("mouseout", {id:id}, function( event ) { - jQuery.media.utils.stopElementHide[event.data.id] = false; - }); - } - }, - - getSettings : function( settings ) { - // Make sure it exists... - if( !settings ) { - settings = {}; - } - - // Only get the settings if they have not yet been initialized. - if( !settings.initialized ) { - settings = jQuery.extend( {}, jQuery.media.defaults, settings ); - settings.ids = jQuery.extend( {}, jQuery.media.ids, settings.ids ); - settings.baseURL = settings.baseURL ? settings.baseURL : jQuery.media.utils.getBaseURL(); - settings.baseURL += settings.baseURL ? "/" : ""; - settings.initialized = true; - } - - // Return the settings. - return settings; - }, - - getId : function( display ) { - return display.attr("id") ? display.attr("id") : display.attr("class") ? display.attr("class") : "mediaplayer"; - }, - - getScaledRect : function( ratio, rect ) { - var scaledRect = {}; - scaledRect.x = rect.x ? rect.x : 0; - scaledRect.y = rect.y ? rect.y : 0; - scaledRect.width = rect.width ? rect.width : 0; - scaledRect.height = rect.height ? rect.height : 0; - - if( ratio ) { - var newRatio = (rect.width / rect.height); - scaledRect.height = (newRatio > ratio) ? rect.height : Math.floor(rect.width / ratio); - scaledRect.width = (newRatio > ratio) ? Math.floor(rect.height * ratio) : rect.width; - scaledRect.x = Math.floor((rect.width - scaledRect.width) / 2); - scaledRect.y = Math.floor((rect.height - scaledRect.height) / 2); - } - - return scaledRect; - }, - - // Checks all parents visibility, and resets them and adds those items to a passed in - // array which can be used to reset their visibiltiy at a later point by calling - // resetVisibility - checkVisibility : function( display, invisibleParents ) { - var isVisible = true; - display.parents().each( function() { - var jObject = jQuery(this); - if( !jObject.is(':visible') ) { - isVisible = false; - var attrClass = jObject.attr("class"); - invisibleParents.push( { - obj:jObject, - attr:attrClass - } ); - jObject.removeClass(attrClass); - } - }); - }, - - // Reset's the visibility of the passed in parent elements. - resetVisibility : function( invisibleParents ) { - // Now iterate through all of the invisible objects and rehide them. - var i = invisibleParents.length; - while(i){ - i--; - invisibleParents[i].obj.addClass(invisibleParents[i].attr); - } - }, - - getFlash : function( player, id, width, height, flashvars, wmode ) { - // Get the protocol. - var protocol = window.location.protocol; - if (protocol.charAt(protocol.length - 1) == ':') { - protocol = protocol.substring(0, protocol.length - 1); - } - - // Convert the flashvars object to a string... - var flashVarsString = jQuery.param(flashvars); - - // Get the HTML flash object string. - var flash = ' '; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - return flash; - }, - - removeFlash : function( obj, id ) { - if( typeof(swfobject) != "undefined" ) { - swfobject.removeSWF( id ); - } - else { - var flash = obj.find('object').eq(0)[0]; - if( flash ) { - flash.parentNode.removeChild(flash); - } - } - }, - - // Insert flash routine. If they have swfobject, then this function will dynamically use that instead. - insertFlash : function( obj, player, id, width, height, flashvars, wmode, onAdded ) { - jQuery.media.utils.removeFlash( obj, id ); - obj.children().remove(); - obj.append('

Get Adobe Flash player

'); - if( typeof(swfobject) != "undefined" ) { - var params = { - allowScriptAccess:"always", - allowfullscreen:"true", - wmode:wmode, - quality:"high" - }; - swfobject.embedSWF( - player, - id, - width, - height, - "9.0.0", - "expressInstall.swf", - flashvars, - params, - {}, - function( swf ) { - onAdded( swf.ref ); - } - ); - } - else { - var flash = jQuery.media.utils.getFlash( player, id, width, height, flashvars, wmode ); - var container = obj.find('#' + id).eq(0); - if( jQuery.browser.msie ) { - container[0].outerHTML = flash; - onAdded( obj.find('object').eq(0)[0] ); - } else { - container.replaceWith( flash ); - onAdded( obj.find('embed').eq(0)[0] ); - } - } - }, - - // Fix the clone method for jQuery 1.2.6 - 1.3.1 - cloneFix: function( obj, events ) { - // Do the clone - var ret = obj.map(function(){ - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var html = this.outerHTML; - if ( !html ) { - var div = this.ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; - }); - - // Copy the events from the original to the clone - if ( events === true ) { - var orig = obj.find("*").andSelf(), i = 0; - - ret.find("*").andSelf().each(function(){ - if ( this.nodeName !== orig[i].nodeName ) { - return; - } - - var events = jQuery.data( orig[i], "events" ); - - for ( var type in events ) { - if( events.hasOwnProperty( type ) ) { - for ( var handler in events[ type ] ) { - if( events[ type ].hasOwnProperty( handler ) ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } - } - } - } - - i++; - }); - } - - // Return the cloned set - return ret; - } - } - }, jQuery.media ); -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - window.onVimeoReady = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - window.onVimeoFinish = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onFinished(); - }; - - window.onVimeoLoading = function( data, playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onLoading( data ); - }; - - window.onVimeoPlay = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onPlaying(); - }; - - window.onVimeoPause = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onPaused(); - }; - - window.onVimeoProgress = function( time, playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onProgress(time); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "vimeo":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i) === 0); - } - }); - - jQuery.fn.mediavimeo = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.ready = false; - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.currentVolume = 1; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var flashvars = { - clip_id:this.getId(videoFile.path), - width:"100%", - height:"100%", - js_api:'1', - js_onLoad:'onVimeoReady', - js_swf_id:playerId - }; - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://vimeo.com/moogaloop.swf?rand=' + rand; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - flashvars, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.getId = function( path ) { - var regex = /^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i; - return (path.search(regex) === 0) ? path.replace(regex, "$3") : path; - }; - - this.loadMedia = function( videoFile ) { - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.createMedia( videoFile ); - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - // Load the player. - this.loadPlayer = function() { - if( this.ready && this.player && this.player.api_addEventListener ) { - // Add our event listeners. - this.player.api_addEventListener('onProgress', 'onVimeoProgress'); - this.player.api_addEventListener('onFinish', 'onVimeoFinish'); - this.player.api_addEventListener('onLoading', 'onVimeoLoading'); - this.player.api_addEventListener('onPlay', 'onVimeoPlay'); - this.player.api_addEventListener('onPause', 'onVimeoPause'); - - // Let them know the player is ready. - onUpdate({ - type:"playerready" - }); - - this.playMedia(); - } - }; - - this.onFinished = function() { - onUpdate({ - type:"complete" - }); - }; - - this.onLoading = function( data ) { - this.bytesLoaded = data.bytesLoaded; - this.bytesTotal = data.bytesTotal; - }; - - this.onPlaying = function() { - onUpdate({ - type:"playing", - busy:"hide" - }); - }; - - this.onPaused = function() { - onUpdate({ - type:"paused", - busy:"hide" - }); - }; - - this.playMedia = function() { - onUpdate({ - type:"playing", - busy:"hide" - }); - if (this.player.api_play) { - this.player.api_play(); - } - }; - - this.onProgress = function( time ) { - onUpdate({ - type:"progress" - }); - }; - - this.pauseMedia = function() { - onUpdate({ - type:"paused", - busy:"hide" - }); - if (this.player.api_pause) { - this.player.api_pause(); - } - }; - - this.stopMedia = function() { - this.pauseMedia(); - if (this.player.api_unload) { - this.player.api_unload(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if (this.player.api_seekTo) { - this.player.api_seekTo( pos ); - } - }; - - this.setVolume = function( vol ) { - this.currentVolume = vol; - if (this.player.api_setVolume) { - this.player.api_setVolume( (vol*100) ); - } - }; - - // For some crazy reason... Vimeo has not implemented this... so just cache the value. - this.getVolume = function() { - return this.currentVolume; - }; - - this.getDuration = function() { - return this.player.api_getDuration ? this.player.api_getDuration() : 0; - }; - - this.getCurrentTime = function() { - return this.player.api_getCurrentTime ? this.player.api_getCurrentTime() : 0; - }; - - this.getBytesLoaded = function() { - return this.bytesLoaded; - }; - - this.getBytesTotal = function() { - return this.bytesTotal; - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - this.hasControls = function() { - return true; - }; - this.showControls = function(show) {}; - //this.setSize = function( newWidth, newHeight ) {}; - this.getEmbedCode = function() { - return "This video cannot be embedded."; - }; - this.getMediaLink = function() { - return "This video currently does not have a link."; - }; - })( this, options, onUpdate ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - jQuery.fn.mediavoter = function( settings, server, userVote ) { - if( this.length === 0 ) { - return null; - } - return new (function( voteObj, settings, server, userVote ) { - // Save the jQuery display. - this.display = voteObj; - var _this = this; - - // The node id. - this.nodeId = 0; - - // Store all of our votes. - this.votes = []; - - // Get the tag for the voting. - this.tag = this.display.attr("tag"); - - // Setup each vote element. - this.display.find("div").each( function() { - if( userVote ) { - $(this).css("cursor", "pointer"); - $(this).unbind("click").bind( "click", function( event ) { - _this.setVote( parseInt($(this).attr("vote"), 10) ); - }); - $(this).unbind("mouseenter").bind( "mouseenter", function( event ) { - _this.updateVote( { - value: parseInt($(this).attr("vote"), 10) - }, true ); - }); - } - _this.votes.push( { - vote:parseInt($(this).attr("vote"), 10), - display:$(this) - } ); - }); - - // Sort the votes based on numerical order. - this.votes.sort( function( voteA, voteB ) { - return (voteA.vote - voteB.vote); - }); - - // If this is a uservoter, then add the mouse leave event. - if( userVote ) { - this.display.unbind("mouseleave").bind( "mouseleave", function( event ) { - _this.updateVote( { - value:0 - }, true ); - }); - } - - // Update a vote value. - this.updateVote = function( vote, hover ) { - if( vote && settings.template.updateVote ) { - settings.template.updateVote( this, vote.value, hover ); - } - }; - - // Get the vote from the server. - this.getVote = function( nodeInfo ) { - if( nodeInfo && nodeInfo.nid ) { - this.nodeId = parseInt(nodeInfo.nid, 10); - if( nodeInfo.vote ) { - var vote = userVote ? nodeInfo.vote.uservote : nodeInfo.vote.vote; - this.updateVote( nodeInfo.vote.vote, false ); - this.display.trigger( "voteGet", vote ); - } - else { - if( server && nodeInfo.nid && (this.display.length > 0) ) { - this.display.trigger( "processing" ); - var cmd = userVote ? jQuery.media.commands.getUserVote : jQuery.media.commands.getVote; - server.call( cmd, function( vote ) { - _this.updateVote( vote, false ); - _this.display.trigger( "voteGet", vote ); - }, null, "node", this.nodeId, this.tag ); - } - } - } - }; - - // Set the current vote. - this.setVote = function( voteValue ) { - if( server && this.nodeId ) { - this.display.trigger( "processing" ); - this.updateVote( { - value:voteValue - }, false ); - server.call( jQuery.media.commands.setVote, function( vote ) { - _this.display.trigger( "voteSet", vote ); - }, null, "node", this.nodeId, voteValue, this.tag ); - } - }; - - // Delete the current vote. - this.deleteVote = function() { - if( server && this.nodeId ) { - this.display.trigger( "processing" ); - server.call( jQuery.media.commands.deleteVote, function( vote ) { - _this.updateVote( vote, false ); - _this.display.trigger( "voteDelete", vote ); - }, null, "node", this.nodeId, this.tag ); - } - }; - })( this, settings, server, userVote ); - }; -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - - - // Called when the YouTube player is ready. - window.onYouTubePlayerReady = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "youtube":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i) === 0); - } - }); - - jQuery.fn.mediayoutube = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.loaded = false; - this.ready = false; - this.qualities = []; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://www.youtube.com/apiplayer?rand=' + rand + '&version=3&enablejsapi=1&playerapiid=' + playerId; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - {}, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.getId = function( path ) { - var regex = /^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i; - return (path.search(regex) === 0) ? path.replace(regex, "$2") : path; - }; - - this.loadMedia = function( videoFile ) { - if( this.player ) { - this.loaded = false; - this.videoFile = videoFile; - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - if (this.player.loadVideoById) { - this.player.loadVideoById( this.getId( this.videoFile.path ), 0, options.quality ); - } - } - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - // Try to load the player. - this.loadPlayer = function() { - if( this.ready && this.player ) { - // Create our callback functions. - window[options.id + 'StateChange'] = function( newState ) { - _this.onStateChange( newState ); - }; - - window[options.id + 'PlayerError'] = function( errorCode ) { - _this.onError( errorCode ); - }; - - window[options.id + 'QualityChange'] = function( newQuality ) { - _this.quality = newQuality; - }; - - // Add our event listeners. - if (this.player.addEventListener) { - this.player.addEventListener('onStateChange', options.id + 'StateChange'); - this.player.addEventListener('onError', options.id + 'PlayerError'); - this.player.addEventListener('onPlaybackQualityChange', options.id + 'QualityChange'); - } - - // Get all of the quality levels. - if (this.player.getAvailableQualityLevels) { - this.qualities = this.player.getAvailableQualityLevels(); - } - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - }); - - // Load our video. - if (this.player.loadVideoById) { - this.player.loadVideoById( this.getId( this.videoFile.path ), 0 ); - } - } - }; - - // Called when the YouTube player state changes. - this.onStateChange = function( newState ) { - var playerState = this.getPlayerState( newState ); - onUpdate( { - type:playerState.state, - busy:playerState.busy - } ); - - if( !this.loaded && playerState == "playing" ) { - // Set this player to loaded. - this.loaded = true; - - // Update our meta data. - onUpdate( { - type:"meta" - } ); - } - }; - - // Called when the YouTube player has an error. - this.onError = function( errorCode ) { - var errorText = "An unknown error has occured: " + errorCode; - if( errorCode == 100 ) { - errorText = "The requested video was not found. "; - errorText += "This occurs when a video has been removed (for any reason), "; - errorText += "or it has been marked as private."; - } else if( (errorCode == 101) || (errorCode == 150) ) { - errorText = "The video requested does not allow playback in an embedded player."; - } - if( window.console && console.log ) { - console.log(errorText); - } - onUpdate( { - type:"error", - data:errorText - } ); - }; - - // Translates the player state for the YouTube API player. - this.getPlayerState = function( playerState ) { - switch (playerState) { - case 5: - return {state:'ready', busy:false}; - case 3: - return {state:'buffering', busy:"show"}; - case 2: - return {state:'paused', busy:"hide"}; - case 1: - return {state:'playing', busy:"hide"}; - case 0: - return {state:'complete', busy:false}; - case -1: - return {state:'stopped', busy:false}; - default: - return {state:'unknown', busy:false}; - } - return 'unknown'; - }; - /* - this.setSize = function( newWidth, newHeight ) { - //this.player.setSize(newWidth, newHeight); - }; - */ - this.playMedia = function() { - onUpdate({ - type:"buffering", - busy:"show" - }); - if (this.player.playVideo) { - this.player.playVideo(); - } - }; - - this.pauseMedia = function() { - if (this.player.pauseVideo) { - this.player.pauseVideo(); - } - }; - - this.stopMedia = function() { - if (this.player.stopVideo) { - this.player.stopVideo(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - onUpdate({ - type:"buffering", - busy:"show" - }); - if (this.player.seekTo) { - this.player.seekTo( pos, true ); - } - }; - - this.setVolume = function( vol ) { - if (this.player.setVolume) { - this.player.setVolume( vol * 100 ); - } - }; - - this.setQuality = function( quality ) { - if (this.player.setPlaybackQuality) { - this.player.setPlaybackQuality( quality ); - } - }; - - this.getVolume = function() { - return this.player.getVolume ? (this.player.getVolume() / 100) : 0; - }; - - this.getDuration = function() { - return this.player.getDuration ? this.player.getDuration() : 0; - }; - - this.getCurrentTime = function() { - return this.player.getCurrentTime ? this.player.getCurrentTime() : 0; - }; - - this.getQuality = function() { - return this.player.getPlaybackQuality ? this.player.getPlaybackQuality() : 0; - }; - - this.getEmbedCode = function() { - return this.player.getVideoEmbedCode ? this.player.getVideoEmbedCode() : 0; - }; - - this.getMediaLink = function() { - return this.player.getVideoUrl ? this.player.getVideoUrl() : 0; - }; - - this.getBytesLoaded = function() { - return this.player.getVideoBytesLoaded ? this.player.getVideoBytesLoaded() : 0; - }; - - this.getBytesTotal = function() { - return this.player.getVideoBytesTotal ? this.player.getVideoBytesTotal() : 0; - }; - - this.hasControls = function() { - return false; - }; - this.showControls = function(show) {}; - })( this, options, onUpdate ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/myfunctions.inc b/js/myfunctions.inc deleted file mode 100755 index 9293ba04..00000000 --- a/js/myfunctions.inc +++ /dev/null @@ -1,253 +0,0 @@ - 0) { - if(in_array(get_file_ext($node), $extensions)) { - $files[] = $path.'/'.$node; - } - } - else { - $files[] = $path.'/'.$node; - } - } - } - } - } - } - return $files; -} - -// Copy's a file, but makes sure the directory is created. -function smart_copy( $src, $dest, $chmod=0755 ) { - $directory = dirname($dest); - if (!is_dir($directory)){ - if (!mkdir($directory, $chmod, true)){ - return FALSE; - } - } - if( $src && $dest ) { - copy( $src, $dest ); - } -} - -// Opens a new file, but makes sure the directory is created. -function smart_fopen($path, $mode, $chmod=0755) { - $directory = dirname($path); - if (!is_dir($directory)){ - if (!mkdir($directory, $chmod, true)){ - return FALSE; - } - } - return fopen($path, $mode); -} - -/* - * String Encryption: Pass in string with a password. - */ - -function get_rnd_iv($iv_len) -{ - $iv = ''; - while ($iv_len-- > 0) { - $iv .= chr(mt_rand() & 0xff); - } - return $iv; -} -function md5_encrypt($plain_text, $password, $iv_len = 16) -{ - $plain_text .= "\x13"; - $n = strlen($plain_text); - if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16)); - $i = 0; - $enc_text = get_rnd_iv($iv_len); - $iv = substr($password ^ $enc_text, 0, 512); - while ($i < $n) { - $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv)); - $enc_text .= $block; - $iv = substr($block . $iv, 0, 512) ^ $password; - $i += 16; - } - return base64_encode($enc_text); -} -function md5_decrypt($enc_text, $password, $iv_len = 16) -{ - $enc_text = base64_decode($enc_text); - $n = strlen($enc_text); - $i = $iv_len; - $plain_text = ''; - $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512); - while ($i < $n) { - $block = substr($enc_text, $i, 16); - $plain_text .= $block ^ pack('H*', md5($iv)); - $iv = substr($block . $iv, 0, 512) ^ $password; - $i += 16; - } - return preg_replace('/\\x13\\x00*$/', '', $plain_text); -} - -/* - * End Encryption routines. - */ - -// This function will extract a string given a start and end tag. -function ExtractString($str, $start, $end) { - $str_low = strtolower($str); - $pos_start = strpos($str_low, $start); - $pos_end = strpos($str_low, $end, ($pos_start + strlen($start))); - if ( ($pos_start !== false) && ($pos_end !== false) ) - { - $pos1 = $pos_start + strlen($start); - $pos2 = $pos_end - $pos1; - return substr($str, $pos1, $pos2); - } -} - -/* A function that detects SRC, HREF and URL links, in addition to URLs in CSS code, and Javascript imports. - * It also understands html entities(such as &) inside URLs. - * $matches[3] will contain Javascript import links, - * $matches[5] will contain the CSS links - * $matches[8] will contain the regular URL/SRC/HREF HTML links. - */ - -function get_links($url) { - if( !($body = @file_get_contents($url)) ) return FALSE; - //Pattern building across multiple lines to avoid page distortion. - $pattern = "/((@import\s+[\"'`]([\w:?=@&\/#._;-]+)[\"'`];)|"; - $pattern .= "(:\s*url\s*\([\s\"'`]*([\w:?=@&\/#._;-]+)"; - $pattern .= "([\s\"'`]*\))|<[^>]*\s+(src|href|url)\=[\s\"'`]*"; - $pattern .= "([\w:?=@&\/#._;-]+)[\s\"'`]*[^>]*>))/i"; - //End pattern building. - preg_match_all ($pattern, $body, $matches); - return (is_array($matches)) ? $matches : FALSE; -} - - -// Validate an email -function validate_email($email){ - $qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'; - $dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'; - $atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'; - $quoted_pair = '\\x5c\\x00-\\x7f'; - $domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d"; - $quoted_string = "\\x22($qtext|$quoted_pair)*\\x22"; - $domain_ref = $atom; - $sub_domain = "($domain_ref|$domain_literal)"; - $word = "($atom|$quoted_string)"; - $domain = "$sub_domain(\\x2e$sub_domain)*"; - $local_part = "$word(\\x2e$word)*"; - $addr_spec = "$local_part\\x40$domain"; - return preg_match("!^$addr_spec$!", $email); -} - -/* - * Given two arrays, one regular, the other jumbled... the function will determine if the two arrays - * have the same letters (no repeats). - */ -function array_numbers(&$item) { $item = ord($item); } -function same_characters($array, $jumbled) { - $temp1 = array_values($array); - $temp2 = array_values($jumbled); - array_walk($temp1, 'array_numbers'); - array_walk($temp2, 'array_numbers'); - return (array_product($temp2) == array_product($temp1)); -} - -/** - * Regular expression version of the strpos function. Will also change the Pattern variable to the - * actual string that was matched so that we can determine the length. - */ -function preg_strpos($haystack, &$pattern, $offset = 0) { - $matches = array(); - if(preg_match($pattern, substr($haystack, $offset), $matches, PREG_OFFSET_CAPTURE) === 1) { - $pattern = $matches[0][0]; - return ($matches[0][1] + $offset); - } - else { - return FALSE; - } -} - -/** - * A function that takes an array and returns it in XML format. - */ -function array_to_xml($arr,$first=true) { - $output = ($first) ? "\n\n" : ""; - foreach($arr as $key => $val) { - $key = (is_numeric($key)) ? "arr_".$key : $key; // <0 is not allowed - switch (gettype($val)) { - case "array": - $output .= "<".htmlspecialchars($key)." type='array' size='".count($val)."'>". array_to_xml($val,false)."\n"; - break; - case "boolean": - $output .= "<".htmlspecialchars($key)." type='bool'>". ($val?"true":"false"). "\n"; - break; - case "integer": - $output .= "<".htmlspecialchars($key)." type='integer'>". htmlspecialchars($val)."\n"; - break; - case "double": - $output .= "<".htmlspecialchars($key)." type='double'>". htmlspecialchars($val)."\n"; - break; - case "string": - $output .= "<".htmlspecialchars($key)." type='string' size='".strlen($val)."'>". htmlspecialchars($val)."\n"; - break; - default: - $output .= "<".htmlspecialchars($key)." type='unknown'>".gettype($val). "\n"; - break; - } - } - $output .= ($first) ? "\n" : ""; - return $output; -} - -/** - * A function that sorts a two diminsional array. - */ -function array_sort($array, $key) { - for ($i = 0; $i < sizeof($array); $i++) { - $sort_values[$i] = $array[$i][$key]; - } - asort ($sort_values); - reset ($sort_values); - while (list ($arr_key, $arr_val) = each ($sort_values)) { - $sorted_arr[] = $array[$arr_key]; - } - return $sorted_arr; -} -?> diff --git a/js/source/jquery.media.auto.js b/js/source/jquery.media.auto.js deleted file mode 100644 index 5abe6bff..00000000 --- a/js/source/jquery.media.auto.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the auto server object. - auto : function( settings ) { - // Return a new function for this object - return new (function( settings ) { - this.json = jQuery.media.json( settings ); - this.rpc = jQuery.media.rpc( settings ); - this.call = function( method, onSuccess, onFailed, params, protocol ) { - if( protocol == "json" ) { - this.json.call( method, onSuccess, onFailed, params, protocol ); - } - else { - this.rpc.call( method, onSuccess, onFailed, params, protocol ); - } - }; - })( settings ); - } - }, jQuery.media ); -})(jQuery); diff --git a/js/source/jquery.media.control.js b/js/source/jquery.media.control.js deleted file mode 100755 index 0880f5a5..00000000 --- a/js/source/jquery.media.control.js +++ /dev/null @@ -1,263 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - volumeVertical:false - }); - - // Set up our defaults for this component. - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - currentTime:"#mediacurrenttime", - totalTime:"#mediatotaltime", - playPause:"#mediaplaypause", - seekUpdate:"#mediaseekupdate", - seekProgress:"#mediaseekprogress", - seekBar:"#mediaseekbar", - seekHandle:"#mediaseekhandle", - volumeUpdate:"#mediavolumeupdate", - volumeBar:"#mediavolumebar", - volumeHandle:"#mediavolumehandle", - mute:"#mediamute" - }); - - jQuery.fn.mediacontrol = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( controlBar, settings ) { - settings = jQuery.media.utils.getSettings(settings); - this.display = controlBar; - var _this = this; - - // Allow the template to provide their own function for this... - this.formatTime = (settings.template && settings.template.formatTime) ? settings.template.formatTime : - function( time ) { - time = time ? time : 0; - var seconds = 0; - var minutes = 0; - var hour = 0; - - hour = Math.floor(time / 3600); - time -= (hour * 3600); - minutes = Math.floor( time / 60 ); - time -= (minutes * 60); - seconds = Math.floor(time % 60); - - var timeString = ""; - - if( hour ) { - timeString += String(hour); - timeString += ":"; - } - - timeString += (minutes >= 10) ? String(minutes) : ("0" + String(minutes)); - timeString += ":"; - timeString += (seconds >= 10) ? String(seconds) : ("0" + String(seconds)); - return { - time:timeString, - units:"" - }; - }; - - this.setToggle = function( button, state ) { - var on = state ? ".on" : ".off"; - var off = state ? ".off" : ".on"; - if( button ) { - button.find(on).show(); - button.find(off).hide(); - } - }; - - var zeroTime = this.formatTime( 0 ); - this.duration = 0; - this.volume = -1; - this.prevVolume = 0; - this.percentLoaded = 0; - this.playState = false; - this.muteState = false; - this.currentTime = controlBar.find( settings.ids.currentTime ).text( zeroTime.time ); - this.totalTime = controlBar.find( settings.ids.totalTime ).text( zeroTime.time ); - - // Allow them to attach custom links to the control bar that perform player functions. - this.display.find("a.mediaplayerlink").each( function() { - var linkId = $(this).attr("href"); - $(this).medialink( settings, function( event ) { - event.preventDefault(); - _this.display.trigger( event.data.id ); - }, { - id:linkId.substr(1), - obj:$(this) - } ); - }); - - // Set up the play pause button. - this.playPauseButton = controlBar.find( settings.ids.playPause ).medialink( settings, function( event, target ) { - _this.playState = !_this.playState; - _this.setToggle( target, _this.playState ); - _this.display.trigger( "controlupdate", { - type: (_this.playState ? "pause" : "play") - }); - }); - - // Set up the seek bar... - this.seekUpdate = controlBar.find( settings.ids.seekUpdate ).css("width", 0); - this.seekProgress = controlBar.find( settings.ids.seekProgress ).css("width", 0); - this.seekBar = controlBar.find( settings.ids.seekBar ).mediaslider( settings.ids.seekHandle, false ); - if( this.seekBar ) { - this.seekBar.display.unbind("setvalue").bind( "setvalue", function( event, data ) { - _this.seekUpdate.css( "width", (data * _this.seekBar.trackSize) + "px" ); - _this.display.trigger( "controlupdate", { - type:"seek", - value:(data * _this.duration) - }); - }); - this.seekBar.display.unbind("updatevalue").bind( "updatevalue", function( event, data ) { - _this.seekUpdate.css( "width", (data * _this.seekBar.trackSize) + "px" ); - }); - } - - this.setVolume = function( vol ) { - if( this.volumeBar ) { - if( settings.volumeVertical ) { - this.volumeUpdate.css({ - "marginTop":(this.volumeBar.handlePos + this.volumeBar.handleMid), - "height":(this.volumeBar.trackSize - this.volumeBar.handlePos) - }); - } - else { - this.volumeUpdate.css( "width", (vol * this.volumeBar.trackSize) ); - } - } - }; - - // Set up the volume bar. - this.volumeUpdate = controlBar.find( settings.ids.volumeUpdate ); - this.volumeBar = controlBar.find( settings.ids.volumeBar ).mediaslider( settings.ids.volumeHandle, settings.volumeVertical, settings.volumeVertical ); - if( this.volumeBar ) { - this.volumeBar.display.unbind("setvalue").bind("setvalue", function( event, data ) { - _this.setVolume( data ); - _this.display.trigger( "controlupdate", { - type:"volume", - value:data - }); - }); - this.volumeBar.display.unbind("updatevalue").bind("updatevalue", function( event, data ) { - _this.setVolume( data ); - _this.volume = data; - }); - } - - // Setup the mute button. - this.mute = controlBar.find(settings.ids.mute).medialink( settings, function( event, target ) { - _this.muteState = !_this.muteState; - _this.setToggle( target, _this.muteState ); - _this.setMute( _this.muteState ); - }); - - this.setMute = function( state ) { - this.prevVolume = (this.volumeBar.value > 0) ? this.volumeBar.value : this.prevVolume; - this.volumeBar.updateValue( state ? 0 : this.prevVolume ); - this.display.trigger( "controlupdate", { - type:"mute", - value:state - }); - }; - - this.setProgress = function( percent ) { - if( this.seekProgress && this.seekBar ) { - this.seekProgress.css( "width", (percent * (this.seekBar.trackSize + this.seekBar.handleSize)) ); - } - }; - - this.onResize = function() { - if( this.seekBar ) { - this.seekBar.onResize(); - } - this.setProgress( this.percentLoaded ); - }; - - // Handle the media events... - this.onMediaUpdate = function( data ) { - switch( data.type ) { - case "reset": - this.reset(); - break; - case "paused": - this.playState = true; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "playing": - this.playState = false; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "stopped": - this.playState = true; - this.setToggle( this.playPauseButton.display, this.playState ); - break; - case "progress": - this.percentLoaded = data.percentLoaded; - this.setProgress( this.percentLoaded ); - break; - case "meta": - case "update": - this.timeUpdate( data.currentTime, data.totalTime ); - if( this.volumeBar ) { - this.volumeBar.updateValue( data.volume ); - } - break; - default: - break; - } - }; - - // Call to reset all controls... - this.reset = function() { - this.totalTime.text( this.formatTime(0).time ); - this.currentTime.text( this.formatTime(0).time ); - if( this.seekBar ) { - this.seekBar.updateValue(0); - } - this.seekUpdate.css( "width", "0px" ); - this.seekProgress.css( "width", "0px" ); - }; - - this.timeUpdate = function( cTime, tTime ) { - this.duration = tTime; - this.totalTime.text( this.formatTime( tTime ).time ); - this.currentTime.text( this.formatTime( cTime ).time ); - if( tTime && this.seekBar && !this.seekBar.dragging ) { - this.seekBar.updateValue( cTime / tTime ); - } - }; - - // Reset the time values. - this.timeUpdate( 0, 0 ); - })( this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.dailymotion.js b/js/source/jquery.media.dailymotion.js deleted file mode 100644 index 6c158cf4..00000000 --- a/js/source/jquery.media.dailymotion.js +++ /dev/null @@ -1,270 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Called when the YouTube player is ready. - window.onDailymotionPlayerReady = function( playerId ) { - playerId = playerId.replace("_media", ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "dailymotion":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?dailymotion\.com/i) === 0); - } - }); - - jQuery.fn.mediadailymotion = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.meta = false; - this.loaded = false; - this.ready = false; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://www.dailymotion.com/swf/' + videoFile.path + '?rand=' + rand + '&enablejsapi=1&playerapiid=' + playerId; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - {}, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.loadMedia = function( videoFile ) { - if( this.player ) { - this.loaded = false; - this.meta = false; - this.videoFile = videoFile; - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - this.player.loadVideoById( this.videoFile.path, 0 ); - } - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - this.loadPlayer = function() { - if( this.ready && this.player ) { - // Create our callback functions. - window[options.id + 'StateChange'] = function( newState ) { - _this.onStateChange( newState ); - }; - - window[options.id + 'PlayerError'] = function( errorCode ) { - _this.onError( errorCode ); - }; - - // Add our event listeners. - this.player.addEventListener('onStateChange', options.id + 'StateChange'); - this.player.addEventListener('onError', options.id + 'PlayerError'); - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - this.player.loadVideoById( this.videoFile.path, 0 ); - } - }; - - // Called when the player state changes. - this.onStateChange = function( newState ) { - var playerState = this.getPlayerState( newState ); - - // Alright... Dailymotion's status updates are just crazy... - // write some hacks to just make it work. - - if( !(!this.meta && playerState.state =="stopped") ) { - onUpdate( { - type:playerState.state, - busy:playerState.busy - } ); - } - - if( !this.loaded && playerState.state == "buffering" ) { - this.loaded = true; - onUpdate( { - type:"paused", - busy:"hide" - } ); - if( options.autostart ) { - this.playMedia(); - } - } - - if( !this.meta && playerState.state == "playing" ) { - // Set this player to meta. - this.meta = true; - - // Update our meta data. - onUpdate( { - type:"meta" - } ); - } - }; - - // Called when the player has an error. - this.onError = function( errorCode ) { - var errorText = "An unknown error has occured: " + errorCode; - if( errorCode == 100 ) { - errorText = "The requested video was not found. "; - errorText += "This occurs when a video has been removed (for any reason), "; - errorText += "or it has been marked as private."; - } else if( (errorCode == 101) || (errorCode == 150) ) { - errorText = "The video requested does not allow playback in an embedded player."; - } - onUpdate( { - type:"error", - data:errorText - } ); - }; - - // Translates the player state for the API player. - this.getPlayerState = function( playerState ) { - switch (playerState) { - case 5: - return {state:'ready', busy:false}; - case 3: - return {state:'buffering', busy:"show"}; - case 2: - return {state:'paused', busy:"hide"}; - case 1: - return {state:'playing', busy:"hide"}; - case 0: - return {state:'complete', busy:false}; - case -1: - return {state:'stopped', busy:false}; - default: - return {state:'unknown', busy:false}; - } - return 'unknown'; - }; - - /* - this.setSize = function( newWidth, newHeight ) { - this.player.setSize(newWidth, newHeight); - }; - */ - this.playMedia = function() { - onUpdate({ - type:"buffering", - busy:"show" - }); - this.player.playVideo(); - }; - - this.pauseMedia = function() { - this.player.pauseVideo(); - }; - - this.stopMedia = function() { - this.player.stopVideo(); - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - onUpdate({ - type:"buffering", - busy:"show" - }); - this.player.seekTo( pos, true ); - }; - - this.setVolume = function( vol ) { - this.player.setVolume( vol * 100 ); - }; - - this.getVolume = function() { - return (this.player.getVolume() / 100); - }; - - this.getDuration = function() { - return this.player.getDuration(); - }; - - this.getCurrentTime = function() { - return this.player.getCurrentTime(); - }; - - this.getBytesLoaded = function() { - return this.player.getVideoBytesLoaded(); - }; - - this.getBytesTotal = function() { - return this.player.getVideoBytesTotal(); - }; - - this.getEmbedCode = function() { - return this.player.getVideoEmbedCode(); - }; - - this.getMediaLink = function() { - return this.player.getVideoUrl(); - }; - - this.hasControls = function() { - return true; - }; - this.showControls = function(show) {}; - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - })( this, options, onUpdate ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.display.js b/js/source/jquery.media.display.js deleted file mode 100755 index 7bf7369b..00000000 --- a/js/source/jquery.media.display.js +++ /dev/null @@ -1,390 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - volume:80, - autostart:false, - streamer:"", - embedWidth:450, - embedHeight:337, - wmode:"transparent", - forceOverflow:false, - quality:"default", - repeat:false - }); - - jQuery.fn.mediadisplay = function( options ) { - if( this.length === 0 ) { - return null; - } - return new (function( mediaWrapper, options ) { - this.settings = jQuery.media.utils.getSettings( options ); - this.display = mediaWrapper; - var _this = this; - this.volume = -1; - this.player = null; - this.preview = ''; - this.updateInterval = null; - this.progressInterval = null; - this.playQueue = []; - this.playIndex = 0; - this.playerReady = false; - this.loaded = false; - this.mediaFile = null; - this.hasPlaylist = false; - - // If they provide the forceOverflow variable, then that means they - // wish to force the media player to override all parents overflow settings. - if( this.settings.forceOverflow ) { - // Make sure that all parents have overflow visible so that - // browser full screen will always work. - this.display.parents().css("overflow", "visible"); - } - - this.reset = function() { - this.loaded = false; - this.stopMedia(); - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - this.playQueue.length = 0; - this.playQueue = []; - this.playIndex = 0; - this.playerReady = false; - this.mediaFile = null; - this.display.empty().trigger( "mediaupdate", {type:"reset"} ); - }; - - // Returns the media that has the lowest weight value, which means - // this player prefers that media over the others. - this.getPlayableMedia = function( files ) { - var mFile = null; - var i = files.length; - while(i--) { - var tempFile = new jQuery.media.file( files[i], this.settings ); - if( !mFile || (tempFile.weight < mFile.weight) ) { - mFile = tempFile; - } - } - return mFile; - }; - - // Returns a valid media file for this browser. - this.getMediaFile = function( file ) { - if( file ) { - var type = typeof file; - if( ((type === 'object') || (type === 'array')) && file[0] ) { - file = this.getPlayableMedia( file ); - } - } - return file; - }; - - // Adds a media file to the play queue. - this.addToQueue = function( file ) { - if( file ) { - this.playQueue.push( this.getMediaFile( file ) ); - } - }; - - this.loadFiles = function( files ) { - if( files ) { - this.playQueue.length = 0; - this.playQueue = []; - this.playIndex = 0; - this.addToQueue( files.intro ); - this.addToQueue( files.commercial ); - this.addToQueue( files.prereel ); - this.addToQueue( files.media ); - this.addToQueue( files.postreel ); - } - var hasMedia = (this.playQueue.length > 0); - if( !hasMedia ) { - if (this.player) { - // Destroy the current player. - this.player.destroy(); - this.player = null; - } - - this.display.trigger( "mediaupdate", {type:"nomedia"} ); - } - return hasMedia; - }; - - this.playNext = function() { - if( this.playQueue.length > this.playIndex ) { - this.loadMedia( this.playQueue[this.playIndex] ); - this.playIndex++; - } - else if( this.settings.repeat ) { - this.playIndex = 0; - this.playNext(); - } - else if( this.hasPlaylist ) { - this.reset(); - } - else { - // If there is no playlist, and no repeat, we will - // just seek to the beginning and pause. - this.loaded = false; - this.settings.autostart = false; - this.playIndex = 0; - this.playNext(); - } - }; - - this.loadMedia = function( file, mediaplayer ) { - if( file ) { - // Get the media file object. - file = new jQuery.media.file( this.getMediaFile( file ), this.settings ); - - // Set the media player if they force it. - file.player = mediaplayer ? mediaplayer : file.player; - - // Stop the current player. - this.stopMedia(); - - if( !this.mediaFile || (this.mediaFile.player != file.player) ) { - // Reset our player variables. - this.player = null; - this.playerReady = false; - - // Create a new media player. - if( file.player ) { - // Set the new media player. - this.player = this.display["media" + file.player]( this.settings, function( data ) { - _this.onMediaUpdate( data ); - }); - } - - if( this.player ) { - // Create our media player. - this.player.createMedia( file, this.preview ); - } - } - else if( this.player ) { - // Load our file into the current player. - this.player.loadMedia( file ); - } - - // Save this file. - this.mediaFile = file; - - // Send out an update about the initialize. - this.onMediaUpdate({ - type:"initialize" - }); - } - }; - - this.onMediaUpdate = function( data ) { - // Now trigger the media update message. - switch( data.type ) { - case "playerready": - this.playerReady = true; - this.player.setVolume(0); - this.player.setQuality(this.settings.quality); - this.startProgress(); - break; - case "buffering": - this.startProgress(); - break; - case "stopped": - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - break; - case "error": - if( data.code == 4 ) { - // It is saying not supported... Try and fall back to flash... - this.loadMedia(this.mediaFile, "flash"); - } - else { - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - } - break; - case "paused": - clearInterval( this.updateInterval ); - break; - case "playing": - this.startUpdate(); - break; - case "progress": - var percentLoaded = this.getPercentLoaded(); - jQuery.extend( data, { - percentLoaded:percentLoaded - }); - if( percentLoaded >= 1 ) { - clearInterval( this.progressInterval ); - } - break; - case "meta": - jQuery.extend( data, { - currentTime:this.player.getCurrentTime(), - totalTime:this.getDuration(), - volume: this.player.getVolume(), - quality: this.getQuality() - }); - break; - case "durationupdate": - this.mediaFile.duration = data.duration; - break; - case "complete": - this.playNext(); - break; - default: - break; - } - - // If this is the playing state, we want to pause the video. - if( data.type=="playing" && !this.loaded ) { - if( this.settings.autoLoad && !this.settings.autostart ) { - setTimeout( function() { - _this.setVolume(); - _this.player.pauseMedia(); - _this.settings.autostart = true; - _this.loaded = true; - }, 100 ); - } - else { - this.loaded = true; - this.setVolume(); - this.display.trigger( "mediaupdate", data ); - } - } - else { - this.display.trigger( "mediaupdate", data ); - } - }; - - this.startProgress = function() { - if( this.playerReady ) { - clearInterval( this.progressInterval ); - this.progressInterval = setInterval( function() { - _this.onMediaUpdate( { - type:"progress" - } ); - }, 500 ); - } - }; - - this.startUpdate = function() { - if( this.playerReady ) { - clearInterval( this.updateInterval ); - this.updateInterval = setInterval( function() { - if( _this.playerReady ) { - _this.onMediaUpdate({ - type:"update", - currentTime:_this.player.getCurrentTime(), - totalTime:_this.getDuration(), - volume:_this.player.getVolume(), - quality:_this.getQuality() - }); - } - }, 1000 ); - } - }; - - this.stopMedia = function() { - this.loaded = false; - clearInterval( this.progressInterval ); - clearInterval( this.updateInterval ); - if( this.playerReady ) { - this.player.stopMedia(); - } - }; - - this.mute = function( on ) { - this.player.setVolume( on ? 0 : this.volume ); - }; - - this.onResize = function() { - if( this.player && this.player.onResize ) { - this.player.onResize(); - } - }; - - this.getPercentLoaded = function() { - if( this.player.getPercentLoaded ) { - return this.player.getPercentLoaded(); - } - else { - var bytesLoaded = this.player.getBytesLoaded(); - var bytesTotal = this.mediaFile.bytesTotal ? this.mediaFile.bytesTotal : this.player.getBytesTotal(); - return bytesTotal ? (bytesLoaded / bytesTotal) : 0; - } - }; - - this.showControls = function(show) { - if( this.playerReady ) { - this.player.showControls(show); - } - }; - - this.hasControls = function() { - if( this.player ) { - return this.player.hasControls(); - } - return false; - }; - - this.getDuration = function() { - if( this.mediaFile ) { - if(!this.mediaFile.duration ) { - this.mediaFile.duration = this.player.getDuration(); - } - return this.mediaFile.duration; - } - else { - return 0; - } - }; - - this.setVolume = function( vol ) { - this.volume = vol ? vol : ((this.volume == -1) ? (this.settings.volume / 100) : this.volume); - if( this.player ) { - this.player.setVolume(this.volume); - } - }; - - this.getVolume = function() { - if( !this.volume ) { - this.volume = this.player.getVolume(); - } - return this.volume; - }; - - this.getQuality = function() { - if( !this.mediaFile.quality ) { - this.mediaFile.quality = this.player.getQuality(); - } - return this.mediaFile.quality; - }; - })( this, options ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.drupal.js b/js/source/jquery.media.drupal.js deleted file mode 100644 index 45e39687..00000000 --- a/js/source/jquery.media.drupal.js +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - apiKey:"", - api:2, - sessid:"", - drupalVersion:6 - }); - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the drupal server object. - drupal : function( protocol, settings ) { - // Return a new server object. - return new (function( protocol, settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - - var hasKey = (settings.apiKey.length > 0); - var usesKey = (settings.api == 1); - var nodeGet = (settings.drupalVersion >= 6) ? "node.get" : "node.load"; - var autoProtocol = (settings.protocol == "auto"); - - // Set up the commands. - jQuery.media = jQuery.extend( {}, { - commands : { - connect:{command:{rpc:"system.connect", json:""}, useKey:usesKey, protocol:"rpc"}, - mail:{command:{rpc:"system.mail", json:""}, useKey:hasKey, protocol:"rpc"}, - loadNode:{command:{rpc:nodeGet, json:"mediafront_getnode"}, useKey:usesKey, protocol:"json"}, - getPlaylist:{command:{rpc:"mediafront.getPlaylist", json:"mediafront_getplaylist"}, useKey:usesKey, protocol:"json"}, - getVote:{command:{rpc:"vote.getVote", json:""}, useKey:usesKey, protocol:"rpc"}, - setVote:{command:{rpc:"vote.setVote", json:""}, useKey:hasKey, protocol:"rpc"}, - getUserVote:{command:{rpc:"vote.getUserVote", json:""}, useKey:usesKey, protocol:"rpc"}, - deleteVote:{command:{rpc:"vote.deleteVote", json:""}, useKey:hasKey, protocol:"rpc"}, - addTag:{command:{rpc:"tag.addTag", json:""}, useKey:hasKey, protocol:"rpc"}, - incrementCounter:{command:{rpc:"mediafront.incrementNodeCounter", json:""}, useKey:hasKey, protocol:"rpc"}, - setFavorite:{command:{rpc:"favorites.setFavorite", json:""}, useKey:hasKey, protocol:"rpc"}, - deleteFavorite:{command:{rpc:"favorites.deleteFavorite", json:""}, useKey:hasKey, protocol:"rpc"}, - isFavorite:{command:{rpc:"favorites.isFavorite", json:""}, useKey:usesKey, protocol:"rpc"}, - login:{command:{rpc:"user.login", json:""}, useKey:hasKey, protocol:"rpc"}, - logout:{command:{rpc:"user.logout", json:""}, useKey:hasKey, protocol:"rpc"}, - adClick:{command:{rpc:"mediafront.adClick", json:""}, useKey:hasKey, protocol:"rpc"}, - getAd:{command:{rpc:"mediafront.getAd", json:""}, useKey:usesKey, protocol:"rpc"}, - setUserStatus:{command:{rpc:"mediafront.setUserStatus", json:""}, useKey:hasKey, protocol:"rpc"} - } - }, jQuery.media); - - // Public variables. - this.user = {}; - this.sessionId = ""; - this.onConnected = null; - this.encoder = new jQuery.media.sha256(); - - // Cache this... it is a little processor intensive. - // The baseURL has an ending "/". We need to truncate this, and then remove the "http://" - this.baseURL = settings.baseURL.substring(0,(settings.baseURL.length - 1)).replace(/^(http[s]?\:[\\\/][\\\/])/,''); - - this.connect = function( onSuccess ) { - this.onConnected = onSuccess; - // If they provide the session Id, then we can skip this call. - if( settings.sessid ) { - this.onConnect({ - sessid:settings.sessid - }); - } - else { - this.call( jQuery.media.commands.connect, function( result ) { - _this.onConnect( result ); - }, null ); - } - }; - - this.call = function( command, onSuccess, onFailed ) { - var args = []; - for (var i=3; i 1 ) { - var timestamp = this.getTimeStamp(); - var nonce = this.getNonce(); - var hash = this.computeHMAC( timestamp, this.baseURL, nonce, command.command.rpc, settings.apiKey); - args.unshift( nonce ); - args.unshift( timestamp ); - args.unshift( this.baseURL ); - args.unshift( hash ); - } - else { - args.unshift( settings.apiKey ); - } - } - return args; - }; - - this.getTimeStamp = function() { - return (parseInt(new Date().getTime() / 1000, 10)).toString(); - }; - - this.getNonce = function() { - var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; - var randomString = ''; - for (var i=0; i<10; i++) { - var rnum = Math.floor(Math.random() * chars.length); - randomString += chars.substring(rnum,rnum+1); - } - return randomString; - }; - - this.computeHMAC = function( timestamp, baseURL, nonce, command, apiKey ) { - var input = timestamp + ";" + baseURL + ";" + nonce + ";" + command; - return this.encoder.encrypt( apiKey, input ); - }; - - this.onConnect = function( result ) { - if( result ) { - this.sessionId = result.sessid; - this.user = result.user; - } - if( this.onConnected ) { - this.onConnected( result ); - } - }; - })( protocol, settings ); - } - }, jQuery.media ); -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.file.js b/js/source/jquery.media.file.js deleted file mode 100755 index 9025e4d1..00000000 --- a/js/source/jquery.media.file.js +++ /dev/null @@ -1,207 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Checks the file type for browser compatibilty. - jQuery.media.checkPlayType = function( elem, playType ) { - if( (typeof elem.canPlayType) == 'function' ) { - return ("no" !== elem.canPlayType(playType)) && ("" !== elem.canPlayType(playType)); - } - else { - return false; - } - }; - - // Get's all of the types that this browser can play. - jQuery.media.getPlayTypes = function() { - var types = {}; - - // Check for video types... - var elem = document.createElement("video"); - types.ogg = jQuery.media.checkPlayType( elem, 'video/ogg; codecs="theora, vorbis"'); - types.h264 = jQuery.media.checkPlayType( elem, 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'); - types.webm = jQuery.media.checkPlayType( elem, 'video/webm; codecs="vp8, vorbis"'); - - // Now check for audio types... - elem = document.createElement("audio"); - types.audioOgg = jQuery.media.checkPlayType( elem, "audio/ogg"); - types.mp3 = jQuery.media.checkPlayType( elem, "audio/mpeg"); - - return types; - }; - - // The play types for the media player. - jQuery.media.playTypes = null; - - // The constructor for our media file object. - jQuery.media.file = function( file, settings ) { - // Only set the play types if it has not already been set. - if( !jQuery.media.playTypes ) { - jQuery.media.playTypes = jQuery.media.getPlayTypes(); - } - - // Normalize the file object passed to this constructor. - file = (typeof file === "string") ? { - path:file - } : file; - - // The duration of the media file. - this.duration = file.duration ? file.duration : 0; - this.bytesTotal = file.bytesTotal ? file.bytesTotal : 0; - this.quality = file.quality ? file.quality : 0; - this.stream = settings.streamer ? settings.streamer : file.stream; - this.path = file.path ? jQuery.trim(file.path) : ( settings.baseURL + jQuery.trim(file.filepath) ); - this.extension = file.extension ? file.extension : this.getFileExtension(); - this.weight = file.weight ? file.weight : this.getWeight(); - this.player = file.player ? file.player : this.getPlayer(); - this.mimetype = file.mimetype ? file.mimetype : this.getMimeType(); - this.type = file.type ? file.type : this.getType(); - }; - - // Get the file extension. - jQuery.media.file.prototype.getFileExtension = function() { - return this.path.substring(this.path.lastIndexOf(".") + 1).toLowerCase(); - }; - - // Get the player for this media. - jQuery.media.file.prototype.getPlayer = function() { - switch( this.extension ) - { - case "ogg":case "ogv": - return jQuery.media.playTypes.ogg ? "html5" : "flash"; - - case "mp4":case "m4v": - return jQuery.media.playTypes.h264 ? "html5" : "flash"; - - case "webm": - return jQuery.media.playTypes.webm ? "html5" : "flash"; - - case "oga": - return jQuery.media.playTypes.audioOgg ? "html5" : "flash"; - - case "mp3": - return jQuery.media.playTypes.mp3 ? "html5" : "flash"; - - case "swf":case "flv":case "f4v":case "f4a": - case "mov":case "3g2":case "3gp":case "3gpp": - case "m4a":case "aac":case "wav":case "aif": - case "wma": - return "flash"; - - default: - // Now iterate through all of our registered players. - for( var player in jQuery.media.playerTypes ) { - if( jQuery.media.playerTypes.hasOwnProperty( player ) ) { - if( jQuery.media.playerTypes[player]( this.path ) ) { - return player; - } - } - } - break; - } - return "flash"; - }; - - // Get the type of media this is... - jQuery.media.file.prototype.getType = function() { - switch( this.extension ) { - case"swf":case "webm":case "ogg":case "ogv": - case "mp4":case "m4v":case "flv":case "f4v": - case "mov":case "3g2":case "3gp":case "3gpp": - return "video"; - case "oga":case "mp3":case "f4a":case "m4a": - case "aac":case "wav":case "aif":case "wma": - return "audio"; - default: - break; - } - return ''; - }; - - // Get the preference "weight" of this media type. - // The lower the number, the higher the preference. - jQuery.media.file.prototype.getWeight = function() { - switch( this.extension ) { - case 'mp4':case 'm4v':case 'm4a': - return jQuery.media.playTypes.h264 ? 3 : 7; - case'webm': - return jQuery.media.playTypes.webm ? 4 : 8; - case 'ogg':case 'ogv': - return jQuery.media.playTypes.ogg ? 5 : 20; - case 'oga': - return jQuery.media.playTypes.audioOgg ? 5 : 20; - case 'mp3': - return 6; - case 'mov':case'swf':case 'flv':case 'f4v': - case 'f4a':case '3g2':case '3gp':case '3gpp': - return 9; - case 'wav':case 'aif':case 'aac': - return 10; - case 'wma': - return 11; - default: - break; - } - return 0; - }; - - // Return the best guess mime type for the given file. - jQuery.media.file.prototype.getMimeType = function() { - switch( this.extension ) { - case 'mp4':case 'm4v':case 'flv':case 'f4v': - return 'video/mp4'; - case'webm': - return 'video/x-webm'; - case 'ogg':case 'ogv': - return 'video/ogg'; - case '3g2': - return 'video/3gpp2'; - case '3gpp': - case '3gp': - return 'video/3gpp'; - case 'mov': - return 'video/quicktime'; - case'swf': - return 'application/x-shockwave-flash'; - case 'oga': - return 'audio/ogg'; - case 'mp3': - return 'audio/mpeg'; - case 'm4a':case 'f4a': - return 'audio/mp4'; - case 'aac': - return 'audio/aac'; - case 'wav': - return 'audio/vnd.wave'; - case 'wma': - return 'audio/x-ms-wma'; - default: - break; - } - return ''; - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.flash.js b/js/source/jquery.media.flash.js deleted file mode 100755 index 07631810..00000000 --- a/js/source/jquery.media.flash.js +++ /dev/null @@ -1,248 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - window.onFlashPlayerReady = function( id ) { - jQuery.media.players[id].node.player.media.player.onReady(); - }; - - window.onFlashPlayerUpdate = function( id, eventType ) { - jQuery.media.players[id].node.player.media.player.onMediaUpdate( eventType ); - }; - - window.onFlashPlayerDebug = function( debug ) { - if( window.console && console.log ) { - console.log( debug ); - } - }; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - flashPlayer:"./flash/mediafront.swf", - skin:"default", - config:"nocontrols" - }); - - jQuery.fn.mediaflash = function( settings, onUpdate ) { - return new (function( video, settings, onUpdate ) { - settings = jQuery.media.utils.getSettings( settings ); - this.display = video; - var _this = this; - this.player = null; - this.mediaFile = null; - this.preview = ''; - this.ready = false; - - // Translate the messages. - this.translate = { - "mediaConnected":"connected", - "mediaBuffering":"buffering", - "mediaPaused":"paused", - "mediaPlaying":"playing", - "mediaStopped":"stopped", - "mediaComplete":"complete", - "mediaMeta":"meta" - }; - - // When to show the busy cursor. - this.busy = { - "mediaConnected":false, - "mediaBuffering":"show", - "mediaPaused":"hide", - "mediaPlaying":"hide", - "mediaStopped":false, - "mediaComplete":false, - "mediaMeta":false - }; - - this.createMedia = function( mediaFile, preview ) { - this.mediaFile = mediaFile; - this.preview = preview; - this.ready = false; - var playerId = (settings.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = settings.flashPlayer + "?rand=" + rand; - var flashvars = { - config:settings.config, - id:settings.id, - file:mediaFile.path, - image:this.preview, - skin:settings.skin, - autostart:(settings.autostart || !settings.autoLoad) - }; - if( mediaFile.stream ) { - flashvars.stream = mediaFile.stream; - } - if( settings.debug ) { - flashvars.debug = "1"; - } - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - flashvars, - settings.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.loadMedia = function( mediaFile ) { - if( this.player && this.ready ) { - this.mediaFile = mediaFile; - - // Load the new media file into the Flash player. - this.player.loadMedia( mediaFile.path, mediaFile.stream ); - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - } - }; - - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - this.loadPlayer = function() { - if( this.ready && this.player ) { - onUpdate( { - type:"playerready" - } ); - } - }; - - this.onMediaUpdate = function( eventType ) { - onUpdate( { - type:this.translate[eventType], - busy:this.busy[eventType] - }); - }; - - this.playMedia = function() { - if( this.player && this.ready ) { - this.player.playMedia(); - } - }; - - this.pauseMedia = function() { - if( this.player && this.ready ) { - this.player.pauseMedia(); - } - }; - - this.stopMedia = function() { - if( this.player && this.ready ) { - this.player.stopMedia(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (settings.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if( this.player && this.ready ) { - this.player.seekMedia( pos ); - } - }; - - this.setVolume = function( vol ) { - if( this.player && this.ready ) { - this.player.setVolume( vol ); - } - }; - - this.getVolume = function() { - return (this.player && this.ready) ? this.player.getVolume() : 0; - }; - - this.getDuration = function() { - return (this.player && this.ready) ? this.player.getDuration() : 0; - }; - - this.getCurrentTime = function() { - return (this.player && this.ready) ? this.player.getCurrentTime() : 0; - }; - - this.getBytesLoaded = function() { - return (this.player && this.ready) ? this.player.getMediaBytesLoaded() : 0; - }; - - this.getBytesTotal = function() { - return (this.player && this.ready) ? this.player.getMediaBytesTotal() : 0; - }; - - this.hasControls = function() { - return true; - }; - - this.showControls = function(show) { - if( this.player && this.ready ) { - this.player.showPlugin("controlBar", show); - this.player.showPlugin("playLoader", show); - } - }; - - this.getEmbedCode = function() { - var flashVars = { - config:"config", - id:"mediafront_player", - file:this.mediaFile.path, - image:this.preview, - skin:settings.skin - }; - if( this.mediaFile.stream ) { - flashVars.stream = this.mediaFile.stream; - } - return jQuery.media.utils.getFlash( - settings.flashPlayer, - "mediafront_player", - settings.embedWidth, - settings.embedHeight, - flashVars, - settings.wmode ); - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - //this.setSize = function( newWidth, newHeight ) {}; - this.getMediaLink = function() { - return "This video currently does not have a link."; - }; - })( this, settings, onUpdate ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.html5.js b/js/source/jquery.media.html5.js deleted file mode 100755 index d1d1c4c9..00000000 --- a/js/source/jquery.media.html5.js +++ /dev/null @@ -1,343 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.fn.mediahtml5 = function( options, onUpdate ) { - return new (function( media, options, onUpdate ) { - this.display = media; - var _this = this; - this.player = null; - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.mediaType = ""; - this.loaded = false; - this.mediaFile = null; - this.playerElement = null; - - this.getPlayer = function( mediaFile, preview ) { - this.mediaFile = mediaFile; - var playerId = options.id + '_' + this.mediaType; - var html = '<' + this.mediaType + ' style="position:absolute" id="' + playerId + '"'; - html += preview ? ' poster="' + preview + '"' : ''; - - if( typeof mediaFile === 'array' ) { - html += '>'; - var i = mediaFile.length; - while(i) { - i--; - html += ''; - } - } - else { - html += ' src="' + mediaFile.path + '">Unable to display media.'; - } - - html += ''; - this.display.append( html ); - this.bytesTotal = mediaFile.bytesTotal; - this.playerElement = this.display.find('#' + playerId); - this.onResize(); - - // return the player object. - return this.playerElement.eq(0)[0]; - }; - - // Create a new HTML5 player. - this.createMedia = function( mediaFile, preview ) { - // Remove any previous Flash players. - jQuery.media.utils.removeFlash( this.display, options.id + "_media" ); - this.display.children().remove(); - this.mediaType = this.getMediaType( mediaFile ); - this.player = this.getPlayer( mediaFile, preview ); - this.loaded = false; - var timeupdated = false; - if( this.player ) { - this.player.addEventListener( "abort", function() { - onUpdate( { - type:"stopped" - } ); - }, true); - this.player.addEventListener( "loadstart", function() { - onUpdate( { - type:"ready", - busy:"show" - }); - - _this.onReady(); - }, true); - this.player.addEventListener( "loadeddata", function() { - onUpdate( { - type:"loaded", - busy:"hide" - }); - }, true); - this.player.addEventListener( "loadedmetadata", function() { - onUpdate( { - type:"meta" - } ); - }, true); - this.player.addEventListener( "canplaythrough", function() { - onUpdate( { - type:"canplay", - busy:"hide" - }); - }, true); - this.player.addEventListener( "ended", function() { - onUpdate( { - type:"complete" - } ); - }, true); - this.player.addEventListener( "pause", function() { - onUpdate( { - type:"paused" - } ); - }, true); - this.player.addEventListener( "play", function() { - onUpdate( { - type:"playing" - } ); - }, true); - this.player.addEventListener( "playing", function() { - onUpdate( { - type:"playing", - busy:"hide" - }); - }, true); - this.player.addEventListener( "error", function(e) { - _this.onError(e.target.error); - onUpdate( { - type:"error", - code:e.target.error.code - } ); - }, true); - this.player.addEventListener( "waiting", function() { - onUpdate( { - type:"waiting", - busy:"show" - }); - }, true); - this.player.addEventListener( "timeupdate", function() { - if( timeupdated ) { - onUpdate( { - type:"timeupdate", - busy:"hide" - }); - } - else { - timeupdated = true; - } - }, true); - this.player.addEventListener( "durationchange", function() { - if( this.duration && (this.duration !== Infinity) ) { - onUpdate( { - type:"durationupdate", - duration:this.duration - }); - } - }, true); - - // Now add the event for getting the progress indication. - this.player.addEventListener( "progress", function( event ) { - _this.bytesLoaded = event.loaded; - _this.bytesTotal = event.total; - }, true); - - this.player.autoplay = true; - - if (typeof this.player.hasAttribute == "function" && this.player.hasAttribute("preload") && this.player.preload != "none") { - this.player.autobuffer = true; - } else { - this.player.autobuffer = false; - this.player.preload = "none"; - } - - onUpdate({ - type:"playerready" - }); - } - }; - - // A function to be called when an error occurs. - this.onError = function( error ) { - switch(error.code) { - case 1: - console.log("Error: MEDIA_ERR_ABORTED"); - break; - case 2: - console.log("Error: MEDIA_ERR_DECODE"); - break; - case 3: - console.log("Error: MEDIA_ERR_NETWORK"); - break; - case 4: - console.log("Error: MEDIA_ERR_SRC_NOT_SUPPORTED"); - break; - default: - break; - } - }; - - // Called when the media has started loading. - this.onReady = function() { - if( !this.loaded ) { - this.loaded = true; - this.playMedia(); - } - }; - - // Load new media into the HTML5 player. - this.loadMedia = function( mediaFile ) { - this.mediaFile = mediaFile; - this.createMedia( mediaFile ); - }; - - this.getMediaType = function( mediaFile ) { - var extension = (typeof mediaFile === 'array') ? mediaFile[0].extension : mediaFile.extension; - switch( extension ) { - case "ogg": case "ogv": case "mp4": case "m4v": - return "video"; - - case "oga": case "mp3": - return "audio"; - - default: - break; - } - return "video"; - }; - - this.playMedia = function() { - if( this.player && this.player.play ) { - this.player.play(); - } - }; - - this.pauseMedia = function() { - if( this.player && this.player.pause ) { - this.player.pause(); - } - }; - - this.stopMedia = function() { - this.pauseMedia(); - if( this.player ) { - this.player.src = ""; - } - }; - - this.destroy = function() { - this.stopMedia(); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if( this.player ) { - this.player.currentTime = pos; - } - }; - - this.setVolume = function( vol ) { - if( this.player ) { - this.player.volume = vol; - } - }; - - this.getVolume = function() { - return this.player ? this.player.volume : 0; - }; - - this.getDuration = function() { - var dur = this.player ? this.player.duration : 0; - return (dur === Infinity) ? 0 : dur; - }; - - this.getCurrentTime = function() { - return this.player ? this.player.currentTime : 0; - }; - - this.getPercentLoaded = function() { - if( this.player && this.player.buffered && this.player.duration ) { - return (this.player.buffered.end(0) / this.player.duration); - } - else if( this.bytesTotal ) { - return (this.bytesLoaded / this.bytesTotal); - } - else { - return 0; - } - }; - - // Called when the player resizes. - this.onResize = function() { - // If this is a video, set the width and height of the video element. - if( this.mediaType == "video" ) { - this.playerElement.css({width:this.display.width(), height:this.display.height()}); - } - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - this.hasControls = function() { - return false; - }; - this.showControls = function(show) {}; - //this.setSize = function( newWidth, newHeight ) {}; - this.getEmbedCode = function() { - - // Only return the Flash embed if this is a Flash playable media field. - if( (this.mediaFile.extension == 'mp4') || - (this.mediaFile.extension == 'm4v') || - (this.mediaFile.extension == 'webm') ) { - var flashVars = { - config:"config", - id:"mediafront_player", - file:this.mediaFile.path, - image:this.preview, - skin:options.skin - }; - if( this.mediaFile.stream ) { - flashVars.stream = this.mediaFile.stream; - } - return jQuery.media.utils.getFlash( - options.flashPlayer, - "mediafront_player", - options.embedWidth, - options.embedHeight, - flashVars, - options.wmode ); - } - else { - return "This media does not support embedding."; - } - }; - this.getMediaLink = function() { - return "This media currently does not have a link."; - }; - })( this, options, onUpdate ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.image.js b/js/source/jquery.media.image.js deleted file mode 100644 index b456eba1..00000000 --- a/js/source/jquery.media.image.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - /** - * Load and scale an image while maintining original aspect ratio. - */ - jQuery.fn.mediaimage = function( link, fitToImage ) { - if( this.length === 0 ) { - return null; - } - return new (function( container, link, fitToImage ) { - this.display = container; - var _this = this; - - var ratio = 0; - var imageLoaded = false; - - // Now create the image loader, and add the loaded handler. - this.imgLoader = new Image(); - this.imgLoader.onload = function() { - imageLoaded = true; - ratio = (_this.imgLoader.width / _this.imgLoader.height); - _this.resize(); - _this.display.trigger( "imageLoaded" ); - }; - - // Set the container to not show any overflow... - container.css("overflow", "hidden"); - - // Check to see if this image is completely loaded. - this.loaded = function() { - return this.imgLoader.complete; - }; - - // Resize the image. - this.resize = function( newWidth, newHeight ) { - var rectWidth = fitToImage ? this.imgLoader.width : (newWidth ? newWidth : this.display.width()); - var rectHeight = fitToImage ? this.imgLoader.height : (newHeight ? newHeight : this.display.height()); - if( rectWidth && rectHeight && imageLoaded ) { - // Now resize the image in the container... - var rect = jQuery.media.utils.getScaledRect( ratio, { - width:rectWidth, - height:rectHeight - }); - - // Now set this image to the new size. - if( this.image ) { - this.image.attr( "src", this.imgLoader.src ).css({ - marginLeft:rect.x, - marginTop:rect.y, - width:rect.width, - height:rect.height - }); - } - - // Show the container. - this.image.fadeIn(); - } - }; - - // Clears the image. - this.clear = function() { - imageLoaded = false; - if( this.image ) { - this.image.attr("src", ""); - this.imgLoader.src = ''; - this.image.fadeOut( function() { - if( link ) { - $(this).parent().remove(); - } - else { - $(this).remove(); - } - }); - } - }; - - // Refreshes the image. - this.refresh = function() { - this.resize(); - }; - - // Load the image. - this.loadImage = function( src ) { - // Now add the image object. - this.clear(); - this.image = $(document.createElement('img')).attr({ - src:"" - }).hide(); - if( link ) { - this.display.append($(document.createElement('a')).attr({ - target:"_blank", - href:link - }).append(this.image)); - } - else { - this.display.append(this.image); - } - this.imgLoader.src = src; - }; - })( this, link, fitToImage ); - }; -})(jQuery); diff --git a/js/source/jquery.media.json.js b/js/source/jquery.media.json.js deleted file mode 100755 index b2b75c45..00000000 --- a/js/source/jquery.media.json.js +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the json server object. - json : function( settings ) { - // Return a new function for this object - return new (function( settings ) { - var _this = this; - - // ************************************************ - // This code is from http://kelpi.com/script/a85cbb - // ************************************************ - - // A character conversion map - var m = { - '\b':'\\b', - '\t':'\\t', - '\n':'\\n', - '\f':'\\f', - '\r':'\\r', - '"':'\\"', - '\\':'\\\\' - }; - - // Map type names to functions for serializing those types - var s = { - 'boolean': function (x) { - return String(x); - }, - 'null': function (x) { - return "null"; - }, - number: function (x) { - return isFinite(x) ? String(x) : 'null'; - }, - string: function (x) { - if (/["\\\x00-\x1f]/.test(x)) { - x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) { - var c = m[b]; - if (c) { - return c; - } - c = b.charCodeAt(); - return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); - }); - } - return '"' + x + '"'; - }, - array: function (x) { - var a = ['['], b, f, i, l = x.length, v; - for (i = 0; i < l; i += 1) { - v = x[i]; - f = s[typeof v]; - if (f) { - v = f(v); - if (typeof v == 'string') { - if (b) { - a[a.length] = ','; - } - a[a.length] = v; - b = true; - } - } - } - a[a.length] = ']'; - return a.join(''); - }, - object: function (x) { - if (x) { - if (x instanceof Array) { - return s.array(x); - } - var a = ['{'], b, f, i, v; - for( i in x ) { - if( x.hasOwnProperty(i) ) { - v = x[i]; - f = s[typeof v]; - if(f) { - v = f(v); - if (typeof v == 'string') { - if (b) { - a[a.length] = ','; - } - a.push(s.string(i), ':', v); - b = true; - } - } - } - } - a[a.length] = '}'; - return a.join(''); - } - return 'null'; - } - }; - - // Public function to serialize any object to JSON format. - this.serializeToJSON = function( o ) { - return s.object(o); - }; - - //************************************************ - // End of code from http://kelpi.com/script/a85cbb - //************************************************ - - this.call = function( method, onSuccess, onFailed, params, protocol ) { - if( settings.baseURL ) { - // Add json functionality here. - jQuery.ajax({ - "url": settings.baseURL + method, - "dataType": "json", - "type": "POST", - "data": { - methodName:method, - params:this.serializeToJSON(params) - }, - "error": function( XMLHttpRequest, textStatus, errorThrown ) { - if( onFailed ) { - onFailed( textStatus ); - } - else if( window.console && console.log ) { - console.log( "Error: " + textStatus ); - } - }, - "success": function( data ) { - if( onSuccess ) { - onSuccess( data ); - } - } - }); - } - else if( onSuccess ) { - onSuccess( null ); - } - }; - })( settings ); - } - }, jQuery.media ); -})(jQuery); diff --git a/js/source/jquery.media.link.js b/js/source/jquery.media.link.js deleted file mode 100644 index 5edbe78d..00000000 --- a/js/source/jquery.media.link.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.fn.medialink = function( settings, onClick, data ) { - data = data ? data : { - noargs:true - }; - return new (function( link, settings, onClick, data ) { - var _this = this; - this.display = link; - - this.display.css("cursor", "pointer").unbind("click").bind( "click", data, function( event ) { - onClick( event, $(this) ); - }).unbind("mouseenter").bind("mouseenter", function() { - if( settings.template.onLinkOver ) { - settings.template.onLinkOver( $(this) ); - } - }).unbind("mouseleave").bind("mouseleave", function() { - if( settings.template.onLinkOut ) { - settings.template.onLinkOut( $(this) ); - } - }); - })( this, settings, onClick, data ); - }; -})(jQuery); diff --git a/js/source/jquery.media.links.js b/js/source/jquery.media.links.js deleted file mode 100644 index 42b2cf10..00000000 --- a/js/source/jquery.media.links.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - links:[], - linksvertical:false - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - linkScroll:"#medialinkscroll" - }); - - jQuery.fn.medialinks = function( settings ) { - return new (function( links, settings ) { - - // Get our settings. - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = links; - var _this = this; - - // Keep track of the previous link. - this.previousLink = null; - - // Setup the scroll region - this.scrollRegion = links.find( settings.ids.linkScroll ).mediascroll({ - vertical:settings.linksvertical - }); - this.scrollRegion.clear(); - - // Load the links. - this.loadLinks = function() { - if( links.length > 0 ) { - this.scrollRegion.clear(); - var onLinkClick = function( event, data ) { - _this.setLink( data ); - }; - - var i = settings.links.length; - while(i) { - i--; - // Add this link to the scroll region. - var link = this.scrollRegion.newItem().playlistlink( settings, settings.links[i] ); - link.unbind("linkclick").bind("linkclick", onLinkClick); - } - // Activate the scroll region. - this.scrollRegion.activate(); - } - }; - - // Set the active link. - this.setLink = function( link ) { - - // If there is a previous link, then unactivate it. - if( this.previousLink ) { - this.previousLink.setActive(false); - } - - // Add the active class to the clicked target. - link.setActive(true); - - // Store this target for later. - this.previousLink = link; - }; - })( this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.menu.js b/js/source/jquery.media.menu.js deleted file mode 100644 index c0d5e616..00000000 --- a/js/source/jquery.media.menu.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - close:"#mediamenuclose", - embed:"#mediaembed", - elink:"#mediaelink", - email:"#mediaemail" - }); - - jQuery.fn.mediamenu = function( server, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, menu, settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - this.display = menu; - - this.on = false; - - this.contents = []; - this.prevItem = { - id:0, - link:null, - contents:null - }; - - this.close = this.display.find( settings.ids.close ); - this.close.unbind("click").bind( "click", function() { - _this.display.trigger( "menuclose" ); - }); - - this.setMenuItem = function( link, itemId ) { - if( this.prevItem.id != itemId ) { - if( this.prevItem.id && settings.template.onMenuSelect ) { - settings.template.onMenuSelect( this.prevItem.link, this.prevItem.contents, false ); - } - - var contents = this.contents[itemId]; - - if( settings.template.onMenuSelect ) { - settings.template.onMenuSelect( link, contents, true ); - } - - this.prevItem = { - id:itemId, - link:link, - contents:contents - }; - } - }; - - this.setEmbedCode = function( embed ) { - this.setInputItem( settings.ids.embed, embed ); - }; - - - this.setMediaLink = function( mediaLink ) { - this.setInputItem( settings.ids.elink , mediaLink ); - }; - - this.setInputItem = function( id, value ) { - var input = this.contents[id].find("input"); - input.unbind("click").bind("click", function() { - $(this).select().focus(); - }); - input.attr("value", value ); - }; - - var linkIndex = 0; - this.links = this.display.find("a"); - this.links.each( function() { - var link = $(this); - if( link.length > 0 ) { - var linkId = link.attr("href"); - var contents = _this.display.find(linkId); - contents.hide(); - _this.contents[linkId] = contents; - link.unbind("click").bind("click", { - id:linkId, - obj:link.parent() - }, function( event ) { - event.preventDefault(); - _this.setMenuItem( event.data.obj, event.data.id ); - }); - - if( linkIndex === 0 ) { - _this.setMenuItem( link.parent(), linkId ); - } - linkIndex++; - } - }); - - - })( server, this, settings ); - }; -})(jQuery); diff --git a/js/source/jquery.media.minplayer.js b/js/source/jquery.media.minplayer.js deleted file mode 100755 index f55ba5cf..00000000 --- a/js/source/jquery.media.minplayer.js +++ /dev/null @@ -1,442 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - logo:"logo.png", - logoWidth:49, - logoHeight:15, - logopos:"sw", - logox:5, - logoy:5, - link:"http://www.mediafront.org", - file:"", - image:"", - timeout:8, - autoLoad:true - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - busy:"#mediabusy", - preview:"#mediapreview", - play:"#mediaplay", - media:"#mediadisplay" - }); - - jQuery.fn.minplayer = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( player, settings ) { - // Get the settings. - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = player; - var _this = this; - - // If the player should auto load or not. - this.autoLoad = settings.autoLoad; - - // Store the busy cursor and data. - this.busy = player.find( settings.ids.busy ); - this.busyImg = this.busy.find("img"); - this.busyWidth = this.busyImg.width(); - this.busyHeight = this.busyImg.height(); - - // Store the play overlay. - this.play = player.find( settings.ids.play ); - // Toggle the play/pause state if they click on the play button. - this.play.unbind("click").bind("click", function() { - _this.togglePlayPause(); - }); - this.playImg = this.play.find("img"); - this.playWidth = this.playImg.width(); - this.playHeight = this.playImg.height(); - - // Store the preview image. - this.preview = player.find( settings.ids.preview ).mediaimage(); - if( this.preview ) { - this.preview.display.unbind("click").bind("click", function() { - _this.onMediaClick(); - }); - - this.preview.display.unbind("imageLoaded").bind("imageLoaded", function() { - _this.onPreviewLoaded(); - }); - } - - // The internal player controls. - this.usePlayerControls = false; - this.busyFlags = 0; - this.busyVisible = false; - this.playVisible = false; - this.previewVisible = false; - this.playing = false; - this.hasMedia = false; - this.timeoutId = 0; - - // Cache the width and height. - this.width = this.display.width(); - this.height = this.display.height(); - - // Hide or show an element. - this.showElement = function( element, show, tween ) { - if( element && !this.usePlayerControls ) { - if( show ) { - element.show(tween); - } - else { - element.hide(tween); - } - } - }; - - this.showPlay = function( show, tween ) { - show &= this.hasMedia; - this.playVisible = show; - this.showElement( this.play, show, tween ); - }; - - this.showBusy = function( id, show, tween ) { - if( show ) { - this.busyFlags |= (1 << id); - } - else { - this.busyFlags &= ~(1 << id); - } - - // Set the busy cursor visiblility. - this.busyVisible = (this.busyFlags > 0); - this.showElement( this.busy, this.busyVisible, tween ); - - // If the media has finished loading, then we don't need the - // loader for the image. - if (id==1 && !show) { - this.showBusy(3, false); - } - }; - - this.showPreview = function( show, tween ) { - this.previewVisible = show; - if( this.preview ) { - this.showElement( this.preview.display, show, tween ); - } - }; - - // Handle the control events. - this.onControlUpdate = function( data ) { - if( this.media ) { - // If the player is ready. - if( this.media.playerReady ) { - switch( data.type ) { - case "play": - this.media.player.playMedia(); - break; - case "pause": - this.media.player.pauseMedia(); - break; - case "seek": - this.media.player.seekMedia( data.value ); - break; - case "volume": - this.media.setVolume( data.value ); - break; - case "mute": - this.media.mute( data.value ); - break; - default: - break; - } - } - // If there are files in the queue but no current media file. - else if( (this.media.playQueue.length > 0) && !this.media.mediaFile ) { - // They interacted with the player. Always autoload at this point on. - this.autoLoad = true; - - // Then play the next file in the queue. - this.playNext(); - } - - // Let the template do something... - if( settings.template && settings.template.onControlUpdate ) { - settings.template.onControlUpdate( data ); - } - } - }; - - // Handle the full screen event requests. - this.fullScreen = function( full ) { - if( settings.template.onFullScreen ) { - settings.template.onFullScreen( full ); - } - - // Refresh the preview image. - this.preview.refresh(); - }; - - // Handle when the preview image loads. - this.onPreviewLoaded = function() { - this.previewVisible = true; - }; - - // Handle the media events. - this.onMediaUpdate = function( data ) { - switch( data.type ) { - case "paused": - this.playing = false; - this.showPlay(true); - //this.showBusy(1, false); - if( !this.media.loaded ) { - this.showPreview(true); - } - break; - case "update": - case "playing": - this.playing = true; - this.showPlay(false); - this.showPreview((this.media.mediaFile.type == "audio")); - break; - case "initialize": - this.playing = false; - this.showPlay(true); - this.showBusy(1, this.autoLoad); - this.showPreview(true); - break; - case "buffering": - this.showPlay(true); - this.showPreview((this.media.mediaFile.type == "audio")); - break; - default: - break; - } - - // If they provide a busy cursor. - if( data.busy ) { - this.showBusy(1, (data.busy == "show")); - } - }; - - // Called when the media is clicked. - this.onMediaClick = function() { - if( this.media.player && !this.media.hasControls() ) { - if( this.playing ) { - this.media.player.pauseMedia(); - } - else { - this.media.player.playMedia(); - } - } - }; - - // Set the media player. - this.media = this.display.find( settings.ids.media ).mediadisplay( settings ); - if( this.media ) { - // If they click on the media region, then pause the media. - this.media.display.unbind("click").bind("click", function() { - _this.onMediaClick(); - }); - } - - // Sets the logo position. - this.setLogoPos = function() { - if( this.logo ) { - var logocss = {}; - if( settings.logopos=='se' || settings.logopos=='sw' ) { - logocss['bottom'] = settings.logoy; - } - if( settings.logopos=='ne' || settings.logopos=='nw' ) { - logocss['top'] = settings.logoy; - } - if( settings.logopos=='nw' || settings.logopos=='sw' ) { - logocss['left'] = settings.logox; - } - if( settings.logopos=='ne' || settings.logopos=='se' ) { - logocss['right'] = settings.logox; - } - this.logo.display.css(logocss); - } - }; - - // Add the logo. - if( !settings.controllerOnly ) { - this.display.prepend(''); - this.logo = this.display.find("." + settings.prefix + "medialogo").mediaimage( settings.link ); - if( this.logo ) { - this.logo.display.css({ - width:settings.logoWidth, - height:settings.logoHeight - }); - this.logo.display.bind("imageLoaded", function() { - _this.setLogoPos(); - }); - this.logo.loadImage( settings.logo ); - } - } - - // Reset to previous state... - this.reset = function() { - this.hasMedia = false; - this.playing = false; - jQuery.media.players[settings.id].showNativeControls(false); - this.showPlay(true); - this.showPreview(true); - clearTimeout( this.timeoutId ); - if( this.media ) { - this.media.reset(); - } - }; - - // Toggle the play/pause state. - this.togglePlayPause = function() { - if( this.media ) { - if( this.media.playerReady ) { - if( this.playing ) { - this.showPlay(true); - this.media.player.pauseMedia(); - } - else { - this.showPlay(false); - this.media.player.playMedia(); - } - } - else if( (this.media.playQueue.length > 0) && !this.media.mediaFile ) { - // They interacted with the player. Always autoload at this point on. - this.autoLoad = true; - - // Then play the next file in the queue. - this.playNext(); - } - } - }; - - // Loads an image... - this.loadImage = function( image ) { - if( this.preview ) { - // Show a busy cursor for the image loading... - this.showBusy(3, true); - - // Load the image. - this.preview.loadImage( image ); - - // Set and interval to check if the image is loaded. - var imageInterval = setInterval(function() { - - // If the image is loaded, then clear the interval. - if (_this.preview.loaded()) { - - // Clear the interval and stop the busy cursor. - clearInterval(imageInterval); - _this.showBusy(3, false); - } - }, 500); - - // Now set the preview image in the media player. - if( this.media ) { - this.media.preview = image; - } - } - }; - - this.onResize = function() { - if( this.preview ) { - this.preview.refresh(); - } - - if( this.media ) { - this.media.onResize(); - } - }; - - // Clears the loaded image. - this.clearImage = function() { - if( this.preview ) { - this.preview.clear(); - } - }; - - // Expose the public load functions from the media display. - this.loadFiles = function( files ) { - this.reset(); - this.hasMedia = this.media && this.media.loadFiles(files); - if( this.hasMedia && this.autoLoad ) { - this.media.playNext(); - } - else if( !this.hasMedia ) { - // Hide the overlays for non-media types. - this.showPlay(false); - this.showPreview(true); - this.timeoutId = setTimeout( function() { - _this.media.display.trigger( "mediaupdate", {type:"complete"} ); - }, (settings.timeout * 1000) ); - } - return this.hasMedia; - }; - - // Play the next file. - this.playNext = function() { - if( this.media ) { - this.media.playNext(); - } - }; - - // Check the player for controls. - this.hasControls = function() { - if( this.media ) { - return this.media.hasControls(); - } - return true; - }; - - // Show the native controls. - this.showControls = function( show ) { - if( this.media ) { - this.media.showControls( show ); - } - }; - - // Loads a single media file. - this.loadMedia = function( file ) { - this.reset(); - if( this.media ) { - this.media.loadMedia( file ); - } - }; - - // If they provide a file, then load it. - if( settings.file ) { - this.loadMedia( settings.file ); - } - - // If they provide the image, then load it. - if( settings.image ) { - this.loadImage( settings.image ); - } - })( this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.mousewheel.js b/js/source/jquery.media.mousewheel.js deleted file mode 100644 index d358b673..00000000 --- a/js/source/jquery.media.mousewheel.js +++ /dev/null @@ -1,88 +0,0 @@ -/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.0.4 - * - * Requires: 1.2.2+ - */ - -(function($) { - - var types = ['DOMMouseScroll', 'mousewheel']; - - $.event.special.mousewheel = { - setup: function() { - if ( this.addEventListener ) { - for ( var i=types.length; i; ) { - i--; - this.addEventListener( types[i], handler, false ); - } - } else { - this.onmousewheel = handler; - } - }, - - teardown: function() { - if ( this.removeEventListener ) { - for ( var i=types.length; i; ) { - i--; - this.removeEventListener( types[i], handler, false ); - } - } else { - this.onmousewheel = null; - } - } - }; - - $.fn.extend({ - mousewheel: function(fn) { - return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); - }, - - unmousewheel: function(fn) { - return this.unbind("mousewheel", fn); - } - }); - - - function handler(event) { - var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; - event = $.event.fix(orgEvent); - event.type = "mousewheel"; - - // Old school scrollwheel delta - if ( event.wheelDelta ) { - delta = event.wheelDelta/120; - } - if ( event.detail ) { - delta = -event.detail/3; - } - - // New school multidimensional scroll (touchpads) deltas - deltaY = delta; - - // Gecko - if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { - deltaY = 0; - deltaX = -1*delta; - } - - // Webkit - if ( orgEvent.wheelDeltaY !== undefined ) { - deltaY = orgEvent.wheelDeltaY/120; - } - if ( orgEvent.wheelDeltaX !== undefined ) { - deltaX = -1*orgEvent.wheelDeltaX/120; - } - - // Add event and delta to the front of the arguments - args.unshift(event, delta, deltaX, deltaY); - - return $.event.handle.apply(this, args); - } - -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.node.js b/js/source/jquery.media.node.js deleted file mode 100644 index 6036d3ee..00000000 --- a/js/source/jquery.media.node.js +++ /dev/null @@ -1,288 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - node:"", - incrementTime:5 - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - voter:"#mediavoter", - uservoter:"#mediauservoter", - mediaRegion:"#mediaregion", - field:".mediafield" - }); - - jQuery.fn.medianode = function( server, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, node, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = node; - this.nodeInfo = {}; - this.incremented = false; - var _this = this; - - // Add the min player as the player for this node. - this.player = this.display.find(settings.ids.mediaRegion).minplayer( settings ); - if( this.player && (settings.incrementTime !== 0)) { - this.player.display.unbind("mediaupdate").bind( "mediaupdate", function( event, data ) { - _this.onMediaUpdate( data ); - }); - } - - // Store all loaded images. - this.images = []; - - this.addVoters = function( element ) { - this.voter = element.find(settings.ids.voter).mediavoter( settings, server, false ); - this.uservoter = element.find(settings.ids.uservoter).mediavoter( settings, server, true ); - if( this.uservoter && this.voter ) { - this.uservoter.display.unbind("processing").bind( "processing", function() { - _this.player.showBusy(2, true); - }); - this.uservoter.display.unbind("voteGet").bind( "voteGet", function() { - _this.player.showBusy(2, false); - }); - this.uservoter.display.unbind("voteSet").bind( "voteSet", function( event, vote ) { - _this.player.showBusy(2, false); - _this.voter.updateVote( vote ); - }); - } - }; - - // Add the voters to this node. - this.addVoters( this.display ); - - // Handle the media events. - this.onMediaUpdate = function( data ) { - if( !this.incremented ) { - switch( data.type ) { - case "update": - // Increment node counter if the increment time is positive and is less than the current time. - if( (settings.incrementTime > 0) && (data.currentTime > settings.incrementTime) ) { - this.incremented = true; - server.call( jQuery.media.commands.incrementCounter, null, null, _this.nodeInfo.nid ); - } - break; - case "complete": - // If the increment time is negative, then that means to increment on media completion. - if( settings.incrementTime < 0 ) { - this.incremented = true; - server.call( jQuery.media.commands.incrementCounter, null, null, _this.nodeInfo.nid ); - } - break; - default: - break; - } - } - }; - - this.loadNode = function( _nodeInfo ) { - return this.getNode( this.translateNode( _nodeInfo ) ); - }; - - this.translateNode = function( _nodeInfo ) { - var isValue = ((typeof _nodeInfo) == "number") || ((typeof _nodeInfo) == "string"); - if( !_nodeInfo ) { - var defaultNode = settings.node; - if( (typeof defaultNode) == 'object' ) { - defaultNode.load = false; - return defaultNode; - } - else { - return defaultNode ? { - nid:defaultNode, - load:true - } : null; - } - } - else if( isValue ) { - return { - nid:_nodeInfo, - load:true - }; - } - else { - _nodeInfo.load = false; - return _nodeInfo; - } - }; - - this.getNode = function( _nodeInfo ) { - if( _nodeInfo ) { - if( server && _nodeInfo.load ) { - server.call( jQuery.media.commands.loadNode, function( result ) { - _this.setNode( result ); - }, null, _nodeInfo.nid, {} ); - } - else { - this.setNode( _nodeInfo ); - } - - // Return that the node was loaded. - return true; - } - - // Return that there was no node loaded. - return false; - }; - - this.setNode = function( _nodeInfo ) { - if( _nodeInfo ) { - // Set the node information object. - this.nodeInfo = _nodeInfo; - this.incremented = false; - - // Load the media... - if( this.player && this.nodeInfo.mediafiles ) { - // Load the preview image. - var image = this.getImage("preview"); - if( image ) { - this.player.loadImage( image.path ); - } - else { - this.player.clearImage(); - } - - // Load the media... - this.player.loadFiles( this.nodeInfo.mediafiles.media ); - } - - // Get the vote for these voters. - if( this.voter ) { - this.voter.getVote( _nodeInfo ); - } - if( this.uservoter ) { - this.uservoter.getVote( _nodeInfo ); - } - - // Load all of our fields. - this.display.find(settings.ids.field).each( function() { - _this.setField( this, _nodeInfo, $(this).attr("type"), $(this).attr("field") ); - }); - - // Trigger our node loaded event. - this.display.trigger( "nodeload", this.nodeInfo ); - } - }; - - this.setField = function( fieldObj, _nodeInfo, type, fieldName ) { - // We only want to load the fields that have a type. - if( type ) { - switch( type ) { - case "text": - this.setTextField( fieldObj, _nodeInfo, fieldName ); - break; - - case "image": - this.setImageField( fieldObj, fieldName ); - break; - - case 'cck_text': - this.setCCKTextField( fieldObj, _nodeInfo, fieldName ); - break; - default: - break; - } - } - }; - - this.setTextField = function( fieldObj, _nodeInfo, fieldName ) { - var field = _nodeInfo[fieldName]; - if( field ) { - $(fieldObj).empty().html( field ); - } - return true; - }; - - this.setCCKTextField = function( fieldObj, _nodeInfo, fieldName ) { - if( args.fieldType == 'cck_text' ) { - var field = _nodeInfo[fieldName]; - if( field ) { - $(fieldObj).empty().html( field["0"].value ); - } - } - return true; - }; - - this.onResize = function() { - if( this.player ) { - this.player.onResize(); - } - }; - - this.getImage = function( imageName ) { - var images = this.nodeInfo.mediafiles ? this.nodeInfo.mediafiles.image : null; - var image = null; - if( images ) { - - // Get the image. - if( images[imageName] ) { - image = images[imageName]; - } - else { - // Or just use the first image... - for( var key in images ) { - if( images.hasOwnProperty( key ) ) { - image = images[key]; - break; - } - } - } - - // If they just provided a string, then still show the image. - image = (typeof image === "string") ? { - path:image - } : image; - image.path = image.path ? jQuery.trim(image.path) : ( settings.baseURL + jQuery.trim(image.filepath) ); - if( image && image.path ) { - image.path = image.path ? jQuery.trim(image.path) : ( settings.baseURL + jQuery.trim(image.filepath) ); - } - else { - image = null; - } - } - return image; - }; - - this.setImageField = function( fieldObj, fieldName ) { - var file = this.getImage( fieldName ); - if( file ) { - var image = $(fieldObj).empty().mediaimage(); - this.images.push( image ); - image.loadImage( file.path ); - } - }; - })( server, this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.pager.js b/js/source/jquery.media.pager.js deleted file mode 100644 index 86f2203d..00000000 --- a/js/source/jquery.media.pager.js +++ /dev/null @@ -1,359 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - shuffle:false, - loop:false, - pageLimit:10 - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - prev:"#mediaprev", - next:"#medianext", - loadPrev:"#medialoadprev", - loadNext:"#medialoadnext", - prevPage:"#mediaprevpage", - nextPage:"#medianextpage" - }); - - jQuery.fn.mediapager = function( settings ){ - return new (function( pager, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = pager; - var _this = this; - - // The active index within a page. - this.activeIndex = -1; - - // The non-active index within a page. - this.currentIndex = -1; - - // The active page index. - this.activePage = 0; - - // The non-active page index. - this.currentPage = 0; - - // The number of pages. - this.numPages = 0; - - // The number of items on the current page. - this.numItems = 10; - - // The number of items on the active page. - this.activeNumItems = 10; - - // The load state for loading an index after a new page. - this.loadState = ""; - - // Used to turn on and off the pager. - this.enabled = false; - - // Add our buttons... - this.prevButton = pager.find( settings.ids.prev ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadPrev( false ); - } - }); - - this.nextButton = pager.find( settings.ids.next ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadNext( false ); - } - }); - - this.loadPrevButton = pager.find( settings.ids.loadPrev ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadPrev( true ); - } - }); - - this.loadNextButton = pager.find( settings.ids.loadNext ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadNext( true ); - } - }); - - this.prevPageButton = pager.find( settings.ids.prevPage ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadState = "click"; - _this.prevPage(); - } - }); - - this.nextPageButton = pager.find( settings.ids.nextPage ).medialink( settings, function() { - if( _this.enabled ) { - _this.loadState = "click"; - _this.nextPage(); - } - }); - - this.setTotalItems = function( totalItems ) { - if ( totalItems && settings.pageLimit ) { - this.numPages = Math.ceil(totalItems / settings.pageLimit); - if( this.numPages == 1 ) { - this.numItems = totalItems; - } - } - }; - - this.setNumItems = function( _numItems ) { - this.numItems = _numItems; - }; - - this.reset = function() { - this.activePage = 0; - this.currentPage = 0; - this.activeIndex = -1; - this.currentIndex = -1; - this.loadState = ""; - }; - - this.loadIndex = function( setActive ) { - var indexVar = setActive ? "activeIndex" : "currentIndex"; - var newIndex = this[indexVar]; - switch ( this.loadState ) { - case "prev": - this.loadState = ""; - this.loadPrev(setActive); - return; - - case "first": - newIndex = 0; - break; - case "last" : - newIndex = (this.numItems - 1); - break; - - case "rand" : - newIndex = Math.floor(Math.random() * this.numItems); - break; - - default: - break; - } - - this.loadState = ""; - - if( newIndex != this[indexVar] ) { - this.loadState = ""; - this[indexVar] = newIndex; - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - }; - - this.loadNext = function( setActive ) { - if ( this.loadState ) { - this.loadIndex( setActive ); - } - else if ( settings.shuffle ) { - this.loadRand(); - } - else { - // Increment the playlist index. - var indexVar = setActive ? "activeIndex" : "currentIndex"; - if( setActive && ( this.activePage != this.currentPage ) ) { - - // Check to make sure we cover the crazy corner-case where the activeIndex - // is on the last item of the previous page. Here we don't need to load - // a new page, but simply load the first item on the current page. - if( (this.activeIndex == (this.activeNumItems - 1)) && (this.activePage == (this.currentPage - 1)) ) { - this.currentIndex = this.activeIndex = 0; - this.activePage = this.currentPage; - this.display.trigger("loadindex", { - index:0, - active:true - }); - } - else { - this.currentPage = this.activePage; - this.loadState = ""; - this.display.trigger("loadpage", { - index:this.activePage, - active:setActive - }); - } - } - else { - this[indexVar]++; - if ( this[indexVar] >= this.numItems ) { - if( this.numPages > 1 ) { - this[indexVar] = (this.numItems - 1); - this.loadState = this.loadState ? this.loadState : "first"; - this.nextPage( setActive ); - } - else if( !setActive || settings.loop ) { - this[indexVar] = 0; - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - } - else { - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - } - } - }; - - this.loadPrev = function( setActive ) { - var indexVar = setActive ? "activeIndex" : "currentIndex"; - - if( setActive && ( this.activePage != this.currentPage ) ) { - this.currentPage = this.activePage; - this.loadState = "prev"; - this.display.trigger("loadpage", { - index:this.activePage, - active:setActive - }); - } - else { - this[indexVar]--; - if ( this[indexVar] < 0 ) { - if( this.numPages > 1 ) { - this[indexVar] = 0; - this.loadState = this.loadState ? this.loadState : "last"; - this.prevPage( setActive ); - } - else if( !setActive || settings.loop ) { - this[indexVar] = (this.numItems - 1); - this.display.trigger("loadindex", { - index:this[indexVar], - active:setActive - }); - } - } - else { - this.display.trigger( "loadindex", { - index:this[indexVar], - active:setActive - } ); - } - } - }; - - this.loadRand = function() { - var newPage = Math.floor(Math.random() * this.numPages); - - if (newPage != this.activePage) { - this.activePage = newPage; - this.loadState = this.loadState ? this.loadState : "rand"; - this.display.trigger("loadpage", { - index:this.activePage, - active:true - }); - } - else { - this.activeIndex = Math.floor(Math.random() * this.numItems); - this.display.trigger("loadindex", { - index:this.activeIndex, - active:true - }); - } - }; - - this.nextPage = function( setActive ) { - var pageVar = setActive ? "activePage" : "currentPage"; - var pageLoaded = false; - - if ( this[pageVar] < (this.numPages - 1) ) { - this[pageVar]++; - pageLoaded = true; - } - else if ( settings.loop ) { - this.loadState = this.loadState ? this.loadState : "first"; - this[pageVar] = 0; - pageLoaded = true; - } - else { - this.loadState = ""; - } - - // Set the page state. - this.setPageState( setActive ); - - if( pageLoaded ) { - this.display.trigger("loadpage", { - index:this[pageVar], - active:setActive - }); - } - }; - - this.prevPage = function( setActive ) { - var pageVar = setActive ? "activePage" : "currentPage"; - var pageLoaded = false; - - if (this[pageVar] > 0) { - this[pageVar]--; - pageLoaded = true; - } - else if ( settings.loop ) { - this.loadState = this.loadState ? this.loadState : "last"; - this[pageVar] = (this.numPages - 1); - pageLoaded = true; - } - else { - this.loadState = ""; - } - - // Set the page state. - this.setPageState( setActive ); - - if( pageLoaded ) { - this.display.trigger("loadpage", { - index:this[pageVar], - active:setActive - }); - } - }; - - this.setPageState = function( setActive ) { - if( setActive ) { - // If this page is active, then we want to make sure - // we set the current page to the active page. - this.currentPage = this.activePage; - } - else { - // Store the active num items. - this.activeNumItems = this.numItems; - } - }; - })( this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.parser.js b/js/source/jquery.media.parser.js deleted file mode 100755 index 0578fae8..00000000 --- a/js/source/jquery.media.parser.js +++ /dev/null @@ -1,196 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.extend( {}, { - parser : function( settings ) { - // Return a new parser object. - return new (function( settings ) { - var _this = this; - this.onLoaded = null; - - // Parse the contents from a file. - this.parseFile = function( file, onLoaded ) { - this.onLoaded = onLoaded; - jQuery.ajax({ - type: "GET", - url:file, - dataType:"xml", - success: function(xml) { - _this.parseXML( xml ); - }, - error: function( XMLHttpRequest, textStatus, errorThrown ) { - if( window.console && console.log ) { - console.log( "Error: " + textStatus ); - } - } - }); - }; - - // Parse an xml string. - this.parseXML = function( xml ) { - // Try to parse a playlist in any format... - var playlist = this.parseXSPF( xml ); - if( playlist.total_rows === 0 ) { - playlist = this.parseASX( xml ); - } - if( playlist.total_rows === 0 ) { - playlist = this.parseRSS( xml ); - } - if( this.onLoaded && playlist.total_rows ) { - this.onLoaded( playlist ); - } - return playlist; - }; - - // Parse XSPF contents. - this.parseXSPF = function( xml ) { - var playlist = { - total_rows:0, - nodes:[] - }; - var trackList = jQuery("playlist trackList track", xml); - if( trackList.length > 0 ) { - trackList.each( function(index) { - playlist.total_rows++; - playlist.nodes.push({ - nid:playlist.total_rows, - title: $(this).find("title").text(), - description: $(this).find("annotation").text(), - mediafiles: { - image:{ - "image":{ - path:$(this).find("image").text() - } - }, - media:{ - "media":{ - path:$(this).find("location").text() - } - } - } - }); - }); - } - return playlist; - }; - - // Parse ASX contents. - this.parseASX = function( xml ) { - var playlist = { - total_rows:0, - nodes:[] - }; - var trackList = jQuery("asx entry", xml); - if( trackList.length > 0 ) { - trackList.each( function(index) { - playlist.total_rows++; - playlist.nodes.push({ - nid:playlist.total_rows, - title: $(this).find("title").text(), - mediafiles: { - image:{ - "image":{ - path:$(this).find("image").text() - } - }, - media:{ - "media":{ - path:$(this).find("location").text() - } - } - } - }); - }); - } - return playlist; - }; - - // Parse RSS contents. - this.parseRSS = function( xml ) { - var playlist = { - total_rows:0, - nodes:[] - }; - var channel = jQuery("rss channel", xml); - if( channel.length > 0 ) { - var youTube = (channel.find("generator").text() == "YouTube data API"); - - // Iterate through all the items. - channel.find("item").each( function(index) { - playlist.total_rows++; - var item = {}; - item = youTube ? _this.parseYouTubeItem( $(this) ) : _this.parseRSSItem( $(this) ); - item.nid = playlist.total_rows; - playlist.nodes.push(item); - }); - } - return playlist; - }; - - // Parse a default RSS Item. - this.parseRSSItem = function( item ) { - return { - title: item.find("title").text(), - mediafiles: { - image:{ - "image":{ - path:item.find("image").text() - } - }, - media:{ - "media":{ - path:item.find("location").text() - } - } - } - }; - }; - - // Parse a YouTube item. - this.parseYouTubeItem = function( item ) { - var description = item.find("description").text(); - var media = item.find("link").text().replace("&feature=youtube_gdata", ""); - return { - title: item.find("title").text(), - mediafiles: { - image:{ - "image":{ - path:jQuery("img", description).eq(0).attr("src") - } - }, - media:{ - "media":{ - path:media, - player:"youtube" - } - } - } - }; - }; - })( settings ); - } - }, jQuery.media ); -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.player.js b/js/source/jquery.media.player.js deleted file mode 100755 index 41c02502..00000000 --- a/js/source/jquery.media.player.js +++ /dev/null @@ -1,588 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - protocol:"auto", - server:"drupal", - template:"default", - baseURL:"", - debug:false, - draggable:false, - resizable:false, - showPlaylist:true, - autoNext:true, - prefix:"", - zIndex:400, - fluidWidth:false, - fluidHeight:false, - fullscreen:false - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - loading:"#mediaplayerloading", - player:"#mediaplayer", - menu:"#mediamenu", - titleBar:"#mediatitlebar", - node:"#medianode", - playlist:"#mediaplaylist", - control:"#mediacontrol" - }); - - // Initialize our players, playlists, and controllers. - jQuery.media.players = {}; - jQuery.media.loadCallbacks = {}; - jQuery.media.playlists = {}; - jQuery.media.controllers = {}; - - // Use this function to trigger when the player has finished registering and loaded. - jQuery.media.onLoaded = function( playerId, callback ) { - var player = jQuery.media.players[playerId]; - if( player && player.display && player.loaded ) { - callback( player ); - } - else { - if( !jQuery.media.loadCallbacks[playerId] ) { - jQuery.media.loadCallbacks[playerId] = []; - } - jQuery.media.loadCallbacks[playerId].push( callback ); - } - }; - - // Adds a new element to the media player. - jQuery.media.addElement = function( playerId, fromPlayer, name ) { - if( fromPlayer && fromPlayer[name] ) { - var toPlayer = jQuery.media.players[playerId]; - if( toPlayer ) { - switch( name ) { - case "playlist": - toPlayer.addPlaylist( fromPlayer.playlist ); - break; - case "controller": - toPlayer.addController( fromPlayer.controller ); - break; - default: - break; - } - } - else { - // Otherwise, cache it for inclusion when the player is created. - var pName = name + "s"; - if( !jQuery.media[pName][playerId] ) { - jQuery.media[pName][playerId] = []; - } - jQuery.media[pName][playerId].push( fromPlayer[name] ); - } - } - }; - - // To add a new controller to any existing or future-included players. - jQuery.media.addController = function( playerId, fromPlayer ) { - jQuery.media.addElement( playerId, fromPlayer, "controller" ); - }; - - // To add a new playlist to any existing or future-included players. - jQuery.media.addPlaylist = function( playerId, fromPlayer ) { - jQuery.media.addElement( playerId, fromPlayer, "playlist" ); - }; - - // The main entry point into the player. - jQuery.fn.mediaplayer = function( settings ) { - if( this.length === 0 ) { - return null; - } - // Return the media Media Player - return new (function( player, settings ) { - // Get the settings. - settings = jQuery.media.utils.getSettings( settings ); - - // Get the id if it has not been set. - if( !settings.id ) { - settings.id = jQuery.media.utils.getId( player ); - } - - // Save the dialog. - this.dialog = player; - - // Save the jQuery display. - this.display = this.dialog.find( settings.ids.player ); - var _this = this; - - // Fix a really strange issue where if any of the parent elements are invisible - // when this player's template is initializing, it would crash due to the issue - // with calling the position() function on an invisible object. This seems to fix - // that issue. - var invisibleParents = []; - - // Now check the visibility of the parents, and add the offenders to the array. - jQuery.media.utils.checkVisibility( this.display, invisibleParents ); - - // Add this player to the players object. - jQuery.media.players[settings.id] = this; - - // Variable to keep track if this player has finished loading. - this.loaded = false; - - // Store the index variable. - var i = 0; - - // Set the template object. - settings.template = jQuery.media.templates[settings.template]( this, settings ); - - // Get all of the setting overrides used in this template. - if( settings.template.getSettings ) { - settings = jQuery.extend( settings, settings.template.getSettings() ); - } - - // Add some keyboard event handlers. - $(window).keyup( function( event ) { - switch( event.keyCode ) { - case 0: /* SpaceBar */ - _this.onSpaceBar(); - break; - case 113: /* Q key */ - case 27: /* ESC Key */ - _this.onEscKey(); - break; - default: - break; - } - }); - - // Add a resize handler to the window if either our width or height is fluid. - if( settings.fluidWidth || settings.fluidHeight ) { - $(window).resize( function() { - _this.onResize(); - }); - } - - // First get the communication protocol. - if( jQuery.media[settings.protocol] ) { - this.protocol = jQuery.media[settings.protocol]( settings ); - } - - // Load the server. - if( jQuery.media[settings.server] ) { - this.server = jQuery.media[settings.server]( this.protocol, settings ); - } - - // Get the menu. - this.menu = this.dialog.find( settings.ids.menu ).mediamenu( this.server, settings ); - if( this.menu ) { - this.menu.display.unbind("menuclose").bind( "menuclose", function() { - _this.showMenu( false ); - }); - } - - // Setup our booleans. - this.menuOn = false; - this.maxOn = !settings.showPlaylist; - this.fullScreen = false; - - // The attached playlist. - this.playlist = null; - - // The active playlist. - this.activePlaylist = null; - - // Our attached controller. - this.controller = null; - - // The active controller. - this.activeController = null; - - // Hide or Show the menu. - this.showMenu = function( show ) { - if( settings.template.onMenu ) { - this.menuOn = show; - settings.template.onMenu( this.menuOn ); - } - }; - - // Called when the user presses the ESC key. - this.onEscKey = function() { - // If they are in full screen mode, then escape when they press the ESC key. - if( this.fullScreen ) { - this.onFullScreen( false ); - } - }; - - // When they press the space bar, we will toggle the player play/pause state. - this.onSpaceBar = function() { - if( this.fullScreen && this.node && this.node.player ) { - this.node.player.togglePlayPause(); - } - }; - - // Adds the media player events to a given element. - this.addPlayerEvents = function( element ) { - // Trigger on the menu. - element.display.unbind("menu").bind("menu", function(event) { - _this.showMenu( !_this.menuOn ); - }); - - element.display.unbind("maximize").bind("maximize", function( event ) { - _this.maximize( !_this.maxOn ); - }); - - element.display.unbind("fullscreen").bind("fullscreen", function( event ) { - _this.onFullScreen( !_this.fullScreen ); - }); - }; - - // Function to put the player in fullscreen mode. - this.onFullScreen = function( full ) { - this.fullScreen = full; - if( this.node && this.node.player ) { - this.node.player.fullScreen( this.fullScreen ); - this.onResize(); - - // Check to see if this browser supports native fullscreen. - if (window.webkitSupportsFullscreen && window.webkitSupportsFullscreen()) { - if (full) { - window.webkitEnterFullscreen(); - } - else { - window.webkitExitFullscreen(); - } - } - } - }; - - // Setup the title bar. - this.titleBar = this.dialog.find( settings.ids.titleBar ).mediatitlebar( settings ); - if( this.titleBar ) { - // Add the player events to the titlebar. - this.addPlayerEvents( this.titleBar ); - - // If they have jQuery UI, make this draggable. - if( settings.draggable && this.dialog.draggable ) { - this.dialog.draggable({ - handle: settings.ids.titleBar, - containment: 'document' - }); - } - - // If they have jQuery UI, make this resizable. - if( settings.resizable && this.dialog.resizable ) { - this.dialog.resizable({ - alsoResize: this.display, - containment: 'document', - resize: function(event) { - _this.onResize(); - } - }); - } - } - - // Get the node and register for events. - this.node = this.dialog.find( settings.ids.node ).medianode( this.server, settings ); - if( this.node ) { - this.node.display.unbind("nodeload").bind( "nodeload", function( event, data ) { - _this.onNodeLoad( data ); - }); - - if( this.node.player && this.node.player.media ) { - this.node.player.media.display.unbind("mediaupdate").bind( "mediaupdate", function( event, data ) { - _this.onMediaUpdate( data ); - }); - } - - if( this.node.uservoter ) { - this.node.uservoter.display.unbind("voteSet").bind( "voteSet", function( event, vote ) { - if( _this.activePlaylist ) { - _this.activePlaylist.onVoteSet( vote ); - } - }); - } - } - - // Called when the media updates. - this.onMediaUpdate = function( data ) { - // Call the player onMediaUpdate. - this.node.player.onMediaUpdate( data ); - - // When the media completes, have the active playlist load the next item. - if( settings.autoNext && this.activePlaylist && (data.type == "complete") ) { - this.activePlaylist.loadNext(); - } - - // Update our controller. - if( this.controller ) { - this.controller.onMediaUpdate( data ); - } - - // Update our active controller. - if( this.activeController ) { - this.activeController.onMediaUpdate( data ); - } - - // Set the media information in the menu. - if( this.menu && this.node && (data.type == "meta") ) { - this.menu.setEmbedCode( this.node.player.media.player.getEmbedCode() ); - this.menu.setMediaLink( this.node.player.media.player.getMediaLink() ); - } - - // Let the template do something... - if( settings.template && settings.template.onMediaUpdate ) { - settings.template.onMediaUpdate( data ); - } - }; - - // Called when the playlist is finished loading. - this.onPlaylistLoad = function( data ) { - if( this.node ) { - // Let our media know that there is a playlist. - if( this.node.player && this.node.player.media ) { - this.node.player.media.hasPlaylist = true; - } - - this.node.loadNode( data ); - } - - // Allow the template to do something when the playlist is loaded. - if( settings.template.onPlaylistLoad ) { - settings.template.onPlaylistLoad( data ); - } - }; - - // Called when the main node is loaded. - this.onNodeLoad = function( data ) { - // Allow the template to do something when the node is loaded. - if( settings.template.onNodeLoad ) { - settings.template.onNodeLoad( data ); - } - }; - - // Maximize the player. - this.maximize = function( on ) { - // Don't want to maximize in fullscreen mode. - if( !this.fullScreen ) { - if( settings.template.onMaximize && (on != this.maxOn) ) { - this.maxOn = on; - settings.template.onMaximize( this.maxOn ); - } - } - }; - - // Allow multiple playlists to be associated with this single player using this API. - this.addPlaylist = function( newPlaylist ) { - if( newPlaylist ) { - newPlaylist.display.unbind("playlistload").bind( "playlistload", newPlaylist, function( event, data ) { - // Set this as the active playlist. - _this.activePlaylist = event.data; - _this.onPlaylistLoad( data ); - }); - - // Check to see if this playlist has already loaded... If so, then we need to - // go ahead and load the active teaser into this player. - if( !this.activePlaylist && newPlaylist.activeTeaser ) { - this.activePlaylist = newPlaylist; - this.onPlaylistLoad( newPlaylist.activeTeaser.node.nodeInfo ); - } - } - return newPlaylist; - }; - - // Search these elements for the id. - this.searchForElement = function(elementList) { - - // Iterate through the elements. - for(var id in elementList) { - - // We need to tolerate instances. - var reg = new RegExp( '^' + id + '(\\_[0-9]+)?$', 'i'); - if (settings.id.search(reg) === 0) { - return elementList[id]; - } - } - return null; - }; - - // Add the default playlist. - this.playlist = this.addPlaylist( this.dialog.find( settings.ids.playlist ).mediaplaylist( this.server, settings ) ); - - // Allow mulitple controllers to control this media. - this.addController = function( newController, active ) { - if( newController ) { - newController.display.unbind("controlupdate").bind( "controlupdate", newController, function( event, data ) { - _this.activeController = event.data; - if( _this.node && _this.node.player ) { - _this.node.player.onControlUpdate( data ); - } - }); - - if( active && !this.activeController ) { - this.activeController = newController; - } - - this.addPlayerEvents( newController ); - } - return newController; - }; - - // Add the control bar to the media. - this.controller = this.addController( this.dialog.find( settings.ids.control ).mediacontrol( settings ), false ); - if( this.controller && this.node ) { - // Add any voters to the node. - this.node.addVoters( this.controller.display ); - } - - // Called when the player resizes. - this.onResize = function() { - // Call the template resize function. - if( settings.template.onResize ) { - settings.template.onResize(); - } - - // Resize the node. - if( this.node ) { - this.node.onResize(); - } - - // Resize the attached control region. - if( this.controller ) { - this.controller.onResize(); - } - }; - - // Function to show the built in controls or not. - this.showNativeControls = function( show ) { - var player = this.node ? this.node.player : null; - if( player && player.hasControls() ) { - player.usePlayerControls = show; - if( show ) { - player.busy.hide(); - player.play.hide(); - if( player.preview ) { - player.preview.display.hide(); - } - if( this.controller ) { - this.controller.display.hide(); - } - } - else { - player.showBusy( 1, ((this.busyFlags & 0x2) == 0x2) ); - player.showPlay( this.playVisible ); - player.showPreview( this.previewVisible ); - if( this.controller ) { - this.controller.display.show(); - } - } - player.showControls( show ); - } - }; - - // Load the content into the player. - this.loadContent = function() { - - // Now add any queued controllers... - var controllers = this.searchForElement(jQuery.media.controllers); - if (controllers) { - i = controllers.length; - while(i) { - i--; - this.addController( controllers[i], true ); - } - } - - // Now add any queued playlists... - var playlists = this.searchForElement(jQuery.media.playlists); - if (playlists) { - i = playlists.length; - while(i) { - i--; - this.addPlaylist( playlists[i] ); - } - } - - var playlistLoaded = false; - - if( this.playlist ) { - playlistLoaded = this.playlist.loadPlaylist(); - } - - // Don't load the node if there is a plalist loaded. - if( !playlistLoaded && this.node ) { - // Make sure to transfer any playlist settings over to the node. - if( this.node.player && this.node.player.media ) { - this.node.player.media.settings.repeat = (settings.loop || settings.repeat); - } - - this.node.loadNode(); - } - }; - - this.initializeTemplate = function() { - // Initialize our template. - if( settings.template.initialize ) { - settings.template.initialize( settings ); - } - - // Now reset the visibility of the parents. - jQuery.media.utils.resetVisibility( invisibleParents ); - }; - - this.load = function() { - // Initialize our template. - this.initializeTemplate(); - - // The player looks good now. Move the dialog back. - this.dialog.css("position","relative"); - this.dialog.css("marginLeft",0); - this.dialog.css("overflow","visible"); - - // If they wish to default the player in fullscreen mode, do that now. - if( settings.fullscreen ) { - this.onFullScreen(true); - } - - // Set our loaded flag to true. - this.loaded = true; - this.display.trigger( "playerLoaded", this ); - - // Call all of our queued onLoaded callback functions. - if( jQuery.media.loadCallbacks[settings.id] ) { - var callbacks = jQuery.media.loadCallbacks[settings.id]; - var i = callbacks.length; - while(i) { - i--; - callbacks[i]( this ); - } - } - - // Connect to the server. - this.server.connect( function( result ) { - _this.loadContent(); - }); - }; - - this.load(); - })( this, settings ); - }; -})(jQuery); diff --git a/js/source/jquery.media.playlist.js b/js/source/jquery.media.playlist.js deleted file mode 100755 index 87d143b1..00000000 --- a/js/source/jquery.media.playlist.js +++ /dev/null @@ -1,390 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - playlist:"", - args:[], - wildcard:"*" - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - pager:"#mediapager", - scroll:"#mediascroll", - busy:"#mediabusy", - links:"#medialinks" - }); - - jQuery.fn.mediaplaylist = function( server, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, playlist, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = playlist; - var _this = this; - - // Store all of the current teasers. - this.teasers = []; - - // The non-active selected teaser. - this.selectedTeaser = null; - - // The active teaser. - this.activeTeaser = null; - - // Set up our playlist args. - this.args = settings.args; - - // Used to keep track if we should set the node active after a playlist load. - this.setActive = true; - - // The active pager. - this.activePager = null; - - // The attached pager bar.. - this.pager = null; - - // Set up the playlist parser. - this.parser = jQuery.media.parser( settings ); - - // Get the Scroll Region. - this.scrollRegion = playlist.find( settings.ids.scroll ).mediascroll( settings ); - this.scrollRegion.clear(); - - // Store the busy cursor. - this.busy = playlist.find( settings.ids.busy ); - this.busyVisible = false; - this.busyImg = this.busy.find("img"); - this.busyWidth = this.busyImg.width(); - this.busyHeight = this.busyImg.height(); - - // Get the links. - this.links = playlist.find( settings.ids.links ).medialinks( settings ); - this.links.loadLinks(); - - this.loading = function( _loading ) { - if( this.pager ) { - this.pager.enabled = !_loading; - } - if( this.activePager ) { - this.activePager.enabled = !_loading; - } - if( _loading ) { - this.busyVisible = true; - this.busy.show(); - } - else { - this.busyVisible = false; - this.busy.hide(); - } - }; - - // Allow mulitple pagers to control this playlist. - this.addPager = function( newPager, active ) { - if( newPager ) { - // Handler for the loadindex event. - newPager.display.unbind("loadindex").bind( "loadindex", function( event, data ) { - if( data.active ) { - _this.activateTeaser( _this.teasers[data.index] ); - } - else { - _this.selectTeaser( _this.teasers[data.index] ); - } - }); - - // Handler for the loadpage event. - newPager.display.unbind("loadpage").bind( "loadpage", function( event, data ) { - _this.setActive = data.active; - _this.loadPlaylist( { - pageIndex:data.index - } ); - }); - - if( active && !this.activePager ) { - this.activePager = newPager; - } - } - return newPager; - }; - - // Add the pager. - this.pager = this.addPager( playlist.find( settings.ids.pager ).mediapager( settings ), false ); - - // Handler for when a link is clicked. - this.links.display.unbind("linkclick").bind( "linkclick", function( event, link ) { - _this.onLinkClick( link ); - }); - - this.onLinkClick = function( link ) { - var index = link.index; - var newPlaylist = link.playlist; - var newArgs = []; - newArgs[index] = link.arg; - - if( this.pager ) { - this.pager.reset(); - } - - if( this.activePager ) { - this.activePager.reset(); - } - - this.loadPlaylist( { - playlist:newPlaylist, - args:newArgs - } ); - }; - - // Loads the next track. - this.loadNext = function() { - if( this.pager ) { - this.pager.loadNext( true ); - } - else if( this.activePager ) { - this.activePager.loadNext( true ); - } - }; - - // Function to load the playlist. - this.loadPlaylist = function( _args ) { - var defaults = { - playlist:settings.playlist, - pageLimit:settings.pageLimit, - pageIndex:(this.pager ? this.pager.activePage : 0), - args:{} - }; - - var playlistArgs = jQuery.extend( {}, defaults, _args ); - - // Set the arguments. - this.setArgs( playlistArgs.args ); - - // Set the busy cursor. - this.loading( true ); - - // If there is a playlist. - if( playlistArgs.playlist ) { - // If the playlist is an object, then just set it directly. - if( ((typeof playlistArgs.playlist) == "object") ) { - settings.playlist = playlistArgs.playlist.name; - this.setPlaylist( playlistArgs.playlist ); - } - else { - // See if the playlist is a URL file. - if( playlistArgs.playlist.match(/^http[s]?\:\/\/|\.xml$/i) ) { - // Parse the XML file. - this.parser.parseFile( playlistArgs.playlist, function( result ) { - _this.setPlaylist( result ); - }); - } - else if( server ) { - // Load the playlist from the server. - server.call( jQuery.media.commands.getPlaylist, function( result ) { - _this.setPlaylist( result ); - }, null, playlistArgs.playlist, playlistArgs.pageLimit, playlistArgs.pageIndex, this.args ); - } - } - - // Return that the playlist was loaded. - return true; - } - - // Return that the playlist was not loaded. - return false; - }; - - // Set this playlist. - this.setPlaylist = function( _playlist ) { - if( _playlist && _playlist.nodes ) { - // Now check the visibility of the parents, and add the offenders to the array. - var invisibleParents = []; - jQuery.media.utils.checkVisibility( this.display, invisibleParents ); - - // Set the total number of items for the pager. - if( this.pager ) { - this.pager.setTotalItems( _playlist.total_rows ); - } - - // Set the total number of items for the active pager. - if( this.activePager ) { - this.activePager.setTotalItems( _playlist.total_rows ); - } - - // Empty the scroll region. - this.scrollRegion.clear(); - - // Reset the teasers. - this.resetTeasers(); - - // Iterate through all of our nodes. - var numNodes = _playlist.nodes.length; - for( var index=0; index < numNodes; index++ ) { - // Add the teaser. - this.addTeaser( _playlist.nodes[index], index ); - } - - // Activate the scroll region. - this.scrollRegion.activate(); - - // Load the next node. - if( this.pager ) { - this.pager.loadNext( this.setActive ); - } - - if( this.activePager ) { - this.activePager.loadNext( this.setActive ); - } - - // Now reset the invisibilty. - jQuery.media.utils.resetVisibility( invisibleParents ); - } - - // We are finished loading. - this.loading( false ); - }; - - // When a vote has been cast, we also need to update the playlist. - this.onVoteSet = function( vote ) { - if( vote ) { - var i = this.teasers.length; - while(i--) { - var teaser = this.teasers[i]; - if( teaser.node.nodeInfo.nid == vote.content_id ) { - teaser.node.voter.updateVote( vote ); - } - } - } - }; - - // Add a single teaser to the list. - this.addTeaser = function( nodeInfo, index ) { - // Setup the teaser. - var teaser = this.scrollRegion.newItem().mediateaser( server, nodeInfo, index, settings ); - if( teaser ) { - // If they click on the teaser, then activate it. - teaser.display.unbind("click").bind( "click", teaser, function( event ) { - _this.activateTeaser( event.data ); - }); - - if( this.activeTeaser ) { - this.activeTeaser.setActive( nodeInfo.nid == this.activeTeaser.node.nodeInfo.nid ); - } - - if( this.selectedTeaser ) { - this.selectedTeaser.setSelected( nodeInfo.nid == this.selectedTeaser.node.nodeInfo.nid ); - } - - // Add this teaser to the teasers array. - this.teasers.push( teaser ); - } - }; - - // Reset the teaser bindings. - this.resetTeasers = function() { - // Remove all handlers. - var i = this.teasers.length; - while(i--) { - this.teasers[i].reset(); - } - this.teasers = []; - }; - - // Set the arguments for this playlist. - this.setArgs = function( _args ) { - if( _args ) { - // Reset the arguments. - this.args = settings.args; - - // Loop through and add the new arguments. - var i = _args.length; - while(i) { - i--; - var arg = _args[i]; - if( arg && (arg != settings.wildcard) ) { - this.args[i] = arg; - } - } - } - }; - - // Selects a teaser. - this.selectTeaser = function( teaser ) { - - // Set the current active teaser to false. - if( this.selectedTeaser ) { - this.selectedTeaser.setSelected( false ); - } - - // Store the active teaser for next time. - this.selectedTeaser = teaser; - - if( this.selectedTeaser ) { - // Now activate the new teaser. - this.selectedTeaser.setSelected( true ); - - // Set this item as visible in the scroll region. - this.scrollRegion.setVisible( teaser.index ); - } - }; - - // Activate the teaser. - this.activateTeaser = function( teaser ) { - // First select the teaser. - this.selectTeaser( teaser ); - - // Set the current active teaser to false. - if( this.activeTeaser ) { - this.activeTeaser.setActive( false ); - } - - // Store the active teaser for next time. - this.activeTeaser = teaser; - - if( this.activeTeaser ) { - // Now activate the new teaser. - this.activeTeaser.setActive( true ); - - // Set the active and current index to this one. - if( this.pager ) { - this.pager.activeIndex = this.pager.currentIndex = teaser.index; - } - - if( this.activePager ) { - this.activePager.activeIndex = this.activePager.currentIndex = teaser.index; - } - - // Trigger an even that the teaser has been activated. - this.display.trigger( "playlistload", teaser.node.nodeInfo ); - } - }; - })( server, this, settings ); - }; -})(jQuery); diff --git a/js/source/jquery.media.playlistlink.js b/js/source/jquery.media.playlistlink.js deleted file mode 100644 index e7d01f27..00000000 --- a/js/source/jquery.media.playlistlink.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - linkText:"#medialinktext" - }); - - jQuery.fn.playlistlink = function( settings, linkInfo ) { - return new (function( link, settings, linkInfo ) { - settings = jQuery.media.utils.getSettings(settings); - this.display = link; - this.arg = linkInfo.arg; - this.text = linkInfo.text; - this.index = linkInfo.index; - - // Call the setLink when clicked. - this.display.medialink( settings, function( event ) { - _this.display.trigger( "linkclick", event.data ); - }, this ); - - this.setActive = function( active ) { - if( settings.template.onLinkSelect ) { - settings.template.onLinkSelect( _this, active ); - } - }; - - this.display.find( settings.ids.linkText ).html( this.text ); - })( this, settings, linkInfo ); - }; -})(jQuery); diff --git a/js/source/jquery.media.rotator.js b/js/source/jquery.media.rotator.js deleted file mode 100644 index 98bfc46c..00000000 --- a/js/source/jquery.media.rotator.js +++ /dev/null @@ -1,182 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - rotatorTimeout:5000, - rotatorTransition:"fade", - rotatorEasing:"swing", - rotatorSpeed:"slow", - rotatorHover:false - }); - - jQuery.fn.mediarotator = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( rotator, settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - this.images = []; - this.imageIndex = 0; - this.imageInterval = null; - this.width = 0; - this.height = 0; - - this.onImageLoaded = function() { - this.width = this.images[0].imgLoader.width; - this.height = this.images[0].imgLoader.height; - rotator.css({ - width:this.width, - height:this.height - }); - var sliderWidth = (settings.rotatorTransition == "hscroll") ? (2*this.width) : this.width; - var sliderHeight = (settings.rotatorTransition == "vscroll") ? (2*this.height) : this.height; - this.display.css({ - width:sliderWidth, - height:sliderHeight - }); - }; - - this.addImage = function() { - var image = $("
").mediaimage(null, true); - this.display.append( image.display ); - - if( (settings.rotatorTransition == "hscroll") || (settings.rotatorTransition == "vscroll") ) { - image.display.css({ - "float":"left" - }); - } - else { - image.display.css({ - position:"absolute", - zIndex:(200 - this.images.length), - top:0, - left:0 - }); - } - return image; - }; - - this.loadImages = function( _images ) { - this.images = []; - this.imageIndex = 0; - - jQuery.each( _images, function( index ) { - var image = _this.addImage(); - if( index === 0 ) { - image.display.unbind("imageLoaded").bind("imageLoaded", function() { - _this.onImageLoaded(); - }).show(); - } - image.loadImage( this ); - _this.images.push( image ); - }); - - if( settings.rotatorHover ) { - this.display.unbind("mouseenter").bind( "mouseenter", function() { - _this.startRotator(); - }).unbind("mouseleave").bind( "mouseleave", function() { - clearInterval( _this.imageInterval ); - }); - } - else { - this.startRotator(); - } - }; - - this.startRotator = function() { - clearInterval( this.imageInterval ); - this.imageInterval = setInterval( function() { - _this.showNextImage(); - }, settings.rotatorTimeout ); - }; - - this.showNextImage = function() { - this.hideImage( this.images[this.imageIndex].display ); - this.imageIndex = (this.imageIndex + 1) % this.images.length; - this.showImage( this.images[this.imageIndex].display ); - }; - - this.showImage = function( image ) { - if( settings.rotatorTransition === 'fade' ) { - image.fadeIn(settings.rotatorSpeed); - } - else { - image.css({ - marginLeft:0, - marginTop:0 - }).show(); - } - }; - - this.hideImage = function( image ) { - switch( settings.rotatorTransition ) { - case "fade": - image.fadeOut(settings.rotatorSpeed); - break; - case "hscroll": - image.animate({ - marginLeft:-this.width - }, settings.rotatorSpeed, settings.rotatorEasing, function() { - image.css({ - marginLeft:0 - }).remove(); - _this.display.append( image ); - }); - break; - case "vscroll": - image.animate({ - marginTop:-this.height - }, settings.rotatorSpeed, settings.rotatorEasing, function() { - image.css({ - marginTop:0 - }).remove(); - _this.display.append( image ); - }); - break; - default: - image.hide(); - break; - } - }; - - // Find all the images in the rotator container. - var _images = []; - rotator.find("img").each( function() { - _images.push( $(this).attr("src") ); - }); - - // Empty the container and setup the inner rotator. - rotator.empty().css("overflow", "hidden").append( $('
') ); - this.display = rotator.find(".imagerotatorinner"); - - // If they provided images, then we will want to load them. - if( _images.length ) { - this.loadImages( _images ); - } - })( this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.rpc.js b/js/source/jquery.media.rpc.js deleted file mode 100755 index 1e6de710..00000000 --- a/js/source/jquery.media.rpc.js +++ /dev/null @@ -1,208 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - gateway:"" - }); - - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the rpc object. - rpc : function( settings ) { - // Return a new function for this object - return new (function( settings ) { - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - - this.parseObject = function( data ) { - var ret = ""; - if( data instanceof Date ) { - ret = ""; - ret += data.getFullYear(); - ret += data.getMonth(); - ret += data.getDate(); - ret += "T"; - ret += data.getHours() + ":"; - ret += data.getMinutes() + ":"; - ret += data.getSeconds(); - ret += ""; - } else if( data instanceof Array ) { - ret = ''+"\n"; - for (var i=0; i < data.length; i++) { - ret += ' '+ this.serializeToXML(data[i]) +"\n"; - } - ret += ''; - } else { - ret = ''+"\n"; - for(var key in data ) { - if( data.hasOwnProperty(key) ) { - ret += " "+ key +""; - ret += this.serializeToXML(data[key]) +"\n"; - } - } - ret += ''; - } - return ret; - }; - - this.serializeToXML = function( data ) { - switch( typeof data ) { - case 'boolean': - return ''+ ((data) ? '1' : '0') +''; - - case 'number': - var parsed = parseInt(data, 10); - if(parsed == data) { - return ''+ data +''; - } - return ''+ data +''; - - case 'string': - return ''+ data +''; - - case 'object': - return this.parseObject( data ); - default: - break; - } - return ''; - }; - - this.parseXMLValue = function( node ) { - var childs = jQuery(node).children(); - var numChildren = childs.length; - var newArray = function(items) { - return function() { - items.push( _this.parseXMLValue(this) ); - }; - }; - var newObject = function( items ) { - return function() { - items[jQuery( "> name", this).text()] = _this.parseXMLValue(jQuery("value", this)); - }; - }; - for(var i=0; i < numChildren; i++) { - var element = childs[i]; - switch(element.tagName) { - case 'boolean': - return (jQuery(element).text() == 1); - case 'int': - return parseInt(jQuery(element).text(), 10); - case 'double': - return parseFloat(jQuery(element).text()); - case "string": - return jQuery(element).text(); - case "array": - var retArray = []; - jQuery("> data > value", element).each( newArray( retArray ) ); - return retArray; - case "struct": - var retObj = {}; - jQuery("> member", element).each( newObject( retObj ) ); - return retObj; - case "dateTime.iso8601": - return NULL; - default: - break; - } - } - return null; - }; - - this.parseXML = function( data ) { - var ret = {}; - ret.version = "1.0"; - jQuery("methodResponse params param > value", data).each( function(index) { - ret.result = _this.parseXMLValue(this); - }); - jQuery("methodResponse fault > value", data).each( function(index) { - ret.error = _this.parseXMLValue(this); - }); - return ret; - }; - - this.xmlRPC = function( method, params ) { - var ret = ''; - ret += ''; - ret += '' + method + ''; - if( params.length > 0 ) { - ret += ''; - var numParams = params.length; - for(var i=0; i < numParams; i++) { - if( params[i] ) { - ret += "" + this.serializeToXML(params[i]) + ""; - } - } - ret += ''; - } - ret += ''; - return ret; - }; - - this.call = function( method, onSuccess, onFailed, params, protocol ) { - if( settings.gateway ) { - jQuery.ajax({ - "url": settings.gateway, - "dataType": "xml", - "type": "POST", - "data": this.xmlRPC( method, params ), - "error": function( XMLHttpRequest, textStatus, errorThrown ) { - if( onFailed ) { - onFailed( textStatus ); - } - else if( window.console && console.log ) { - console.log( "Error: " + textStatus ); - } - }, - "success": function( msg ) { - var xml = _this.parseXML( msg ); - if( xml.error ) { - if( onFailed ) { - onFailed( xml.error ); - } - else if( window.console && console.dir ) { - console.dir( xml.error ); - } - } - else if( onSuccess ) { - onSuccess( xml.result ); - } - }, - "processData": false, - "contentType": "text/xml" - }); - } - else if( onSuccess ) { - onSuccess( null ); - } - }; - })( settings ); - } - }, jQuery.media ); -})(jQuery); diff --git a/js/source/jquery.media.scroll.js b/js/source/jquery.media.scroll.js deleted file mode 100755 index 3dd3d95b..00000000 --- a/js/source/jquery.media.scroll.js +++ /dev/null @@ -1,355 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - vertical:true, - scrollSpeed:20, - updateTimeout:40, - hysteresis:40, - showScrollbar:true, - scrollMode:"auto" /* "auto", "span", "mouse", "none" */ - }); - - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - listMask:"#medialistmask", - list:"#medialist", - scrollWrapper:"#mediascrollbarwrapper", - scrollBar:"#mediascrollbar", - scrollTrack:"#mediascrolltrack", - scrollHandle:"#mediascrollhandle", - scrollUp:"#mediascrollup", - scrollDown:"#mediascrolldown" - }); - - jQuery.fn.mediascroll = function( settings ) { - return new (function( scrollRegion, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - // Save the jQuery display. - this.display = scrollRegion; - var _this = this; - - this.spanMode = (settings.scrollMode == "span"); - - // Get the list region. - this.listMask = scrollRegion.find( settings.ids.listMask ); - - // Setup the mouse events for the auto scroll mode. - if( this.spanMode || (settings.scrollMode == "auto") ) { - // Add our event callbacks. - this.listMask.unbind("mouseenter").bind( 'mouseenter', function( event ) { - _this.onMouseOver( event ); - }); - this.listMask.unbind("mouseleave").bind( 'mouseleave', function( event ) { - _this.onMouseOut( event ); - }); - this.listMask.unbind("mousemove").bind( 'mousemove', function( event ) { - _this.onMouseMove( event ); - }); - } - // Setup the mouse events for the mouse scroll mode. - else if(settings.scrollMode == "mouse") { - // Add our event callbacks. - this.display.bind('mousewheel', function(event, delta, deltaX, deltaY) { - event.preventDefault(); - _this.onMouseScroll(deltaX, deltaY); - }); - } - - this.listMask.css("overflow", "hidden"); - - this.list = scrollRegion.find( settings.ids.list ); - - var element = this.list.children().eq(0); - this.elementWidth = element.width(); - this.elementHeight = element.height(); - this.elementSize = settings.vertical ? element.outerHeight(true) : element.outerWidth(true); - - // Early versions of jQuery have a broken clone method for IE. This fixes that. - if( jQuery.browser.msie && parseInt( jQuery.fn.jquery.replace(".", ""), 10 ) < 132 ) { - this.template = $("
").append( jQuery.media.utils.cloneFix( element ) ).html(); - } - else { - this.template = $("
").append( element.clone() ).html(); - } - - // Empty our list. - this.list.empty(); - - // Initialize our variables. - this.pagePos = settings.vertical ? "pageY" : "pageX"; - this.margin = settings.vertical ? "marginTop" : "marginLeft"; - this.scrollSize = settings.vertical ? 0 : this.listMask.width(); - this.scrollMid = 0; - this.mousePos = 0; - this.listPos = 0; - this.scrollInterval = 0; - this.shouldScroll = false; - this.bottomPos = 0; - this.ratio = 0; - this.elements = []; - this.listSize = 0; - - // Add the slider control to this scroll bar. - this.scrollBar = scrollRegion.find( settings.ids.scrollTrack ).mediaslider( settings.ids.scrollHandle, settings.vertical ); - - // Setup the scroll up button. - this.scrollUp = scrollRegion.find( settings.ids.scrollUp ).medialink( settings, function() { - _this.scroll( true ); - }); - - // Setup the scroll down button. - this.scrollDown = scrollRegion.find( settings.ids.scrollDown ).medialink( settings, function() { - _this.scroll( false ); - }); - - if( this.scrollBar ) { - // Handle the update value event. - this.scrollBar.display.unbind("updatevalue").bind("updatevalue", function( event, data ) { - _this.setScrollPos( data * _this.bottomPos, false ); - }); - - // Handle the set value event. - this.scrollBar.display.unbind("setvalue").bind("setvalue", function( event, data ) { - _this.setScrollPos( data * _this.bottomPos, true ); - }); - - // Add our event callbacks. - this.scrollBar.display.bind('mousewheel', function(event, delta, deltaX, deltaY) { - event.preventDefault(); - _this.onMouseScroll(deltaX, deltaY); - }); - } - - this.setScrollSize = function( newSize ) { - if( newSize ) { - this.scrollSize = newSize; - this.scrollMid = this.scrollSize / 2; - var activeSize = this.scrollSize - (settings.hysteresis*2); - this.bottomPos = (this.listSize - this.scrollSize); - this.ratio = ( (this.listSize - activeSize) / activeSize ); - this.shouldScroll = (this.bottomPos > 0); - } - }; - - // Clears this scroll region. - this.clear = function() { - // Reset all variables for a page refresh. - this.mousePos = 0; - this.shouldScroll = false; - this.bottomPos = 0; - this.ratio = 0; - this.scrolling = false; - this.elements = []; - this.listSize = 0; - this.list.css( this.margin, 0 ); - this.list.children().unbind(); - clearInterval( this.scrollInterval ); - this.list.empty(); - }; - - this.getOffset = function() { - return settings.vertical ? this.listMask.offset().top : this.listMask.offset().left; - }; - - // Activates the scroll region. - this.activate = function() { - // Set the scroll size. - this.setScrollSize( settings.vertical ? this.listMask.height() : this.listMask.width() ); - - // Now reset the list position. - this.setScrollPos( 0, true ); - }; - - // Add an item to this scroll region. - this.newItem = function() { - var newTemplate = $(this.template); - this.list.append( newTemplate ); - var element = this.getElement( newTemplate, this.elements.length ); - this.listSize += element.size; - if( settings.vertical ) { - this.list.css({ - height:this.listSize - }); - } - else { - this.list.css({ - width:this.listSize - }); - } - this.elements.push( element ); - return element.obj; - }; - - // Returns the cached element object with all properties. - this.getElement = function( element, index ) { - var size = this.elementSize; - var pos = this.listSize; - return { - obj:element, - size:size, - position:pos, - bottom:(pos+size), - mid:(size/2), - index:index - }; - }; - - // Scroll the list up or down one element. - this.scroll = function( up ) { - var element = this.getElementAtPosition( up ? 0 : this.scrollSize ); - if( element ) { - var newElement = (element.straddle || up) ? element : this.elements[ element.index + 1 ]; - if( newElement ) { - var _listPos = up ? newElement.position : (newElement.bottom - this.scrollSize); - this.setScrollPos( _listPos, true ); - } - } - }; - - // Called when the mouse scrolls. - this.onMouseScroll = function( deltaX, deltaY ) { - var d = settings.vertical ? -deltaY : deltaX; - this.setScrollPos(this.listPos + (settings.scrollSpeed*d)); - }; - - // Called when the mouse moves within the scroll region. - this.onMouseMove = function( event ) { - this.mousePos = event[ this.pagePos ] - this.getOffset(); - - // If the scroll type is span, then just move the list - // up and down according to the listSize/regionSize ratio. - if( this.shouldScroll && this.spanMode ) { - this.setScrollPos( (this.mousePos - settings.hysteresis) * this.ratio ); - } - }; - - // Called when the mouse enters the scroll region. - this.onMouseOver = function( event ) { - if( this.shouldScroll ) { - clearInterval( this.scrollInterval ); - this.scrollInterval = setInterval( function() { - _this.update(); - }, settings.updateTimeout ); - } - }; - - // Called when the mouse exits the scroll region. - this.onMouseOut = function( event ) { - clearInterval( this.scrollInterval ); - }; - - // This function will align the scroll region. - this.align = function( up ) { - var element = this.getElementAtPosition( up ? 0 : this.scrollSize ); - if( element ) { - var _listPos = up ? element.position : (element.bottom - this.scrollSize); - this.setScrollPos( _listPos, true ); - } - }; - - // Will set the element at the given index visible. - this.setVisible = function( index ) { - var element = this.elements[index]; - if( element ) { - var newPos = this.listPos; - if( element.position < this.listPos ) { - newPos = element.position; - } else if( (element.bottom - this.listPos) > this.scrollSize ) { - newPos = element.bottom - this.scrollSize; - } - if( newPos != this.listPos ) { - this.setScrollPos( newPos, true ); - } - } - }; - - // Gets an element at a specific location in the list. - this.getElementAtPosition = function( position ) { - var element = null; - var i = this.elements.length; - while(i--) { - element = this.elements[i]; - if( ((element.position - this.listPos) < position) && - ((element.bottom - this.listPos) >= position) ) { - element.straddle = ((element.bottom - this.listPos) != position); - break; - } - } - return element; - }; - - // Called every interval to update the scroll position. - this.update = function() { - var delta = this.mousePos - this.scrollMid; - if( Math.abs(delta) > settings.hysteresis ) { - var hyst = (delta > 0) ? -settings.hysteresis : settings.hysteresis; - delta = settings.scrollSpeed * (( this.mousePos + hyst - this.scrollMid) / this.scrollMid); - this.setScrollPos(this.listPos + delta); - } - }; - - // Sets the scroll position. - this.setScrollPos = function( _listPos, tween ) { - // Make sure we are greater than zero here. - _listPos = (_listPos < 0) ? 0 : _listPos; - - // See if we should scroll and if the list position is - // greater than the bottom position. - if( this.shouldScroll && (_listPos > this.bottomPos) ) { - _listPos = this.bottomPos; - } - - // Now set the list position. - this.listPos = _listPos; - - // Set the position of the scroll bar. - if( this.scrollBar ) { - var newPos = this.bottomPos ? (this.listPos / this.bottomPos) : 0; - this.scrollBar.setPosition( newPos ); - } - - if( tween ) { - if( settings.vertical ) { - this.list.animate({ - marginTop: -this.listPos - }, (settings.scrollSpeed*10)); - } - else { - this.list.animate({ - marginLeft: -this.listPos - }, (settings.scrollSpeed*10)); - } - } - else { - this.list.css( this.margin, -this.listPos ); - } - }; - })( this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.sha256.js b/js/source/jquery.media.sha256.js deleted file mode 100644 index cfa2e4f6..00000000 --- a/js/source/jquery.media.sha256.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - // Extend the media namespace - jQuery.media = jQuery.extend( {}, { - // Add the sha256 object. - sha256 : function() { - /* A JavaScript implementation of the SHA family of hashes, as defined in FIPS PUB 180-2 - * as well as the corresponding HMAC implementation as defined in FIPS PUB 198a - * Version 1.2 Copyright Brian Turek 2009 - * Distributed under the BSD License - * See http://jssha.sourceforge.net/ for more information - * - * Several functions taken from Paul Johnson - */ - function jsSHA(o,p){jsSHA.charSize=8;jsSHA.b64pad="";jsSHA.hexCase=0;var q=null;var r=null;var s=function(a){var b=[];var c=(1<>5]|=(a.charCodeAt(i/jsSHA.charSize)&c)<<(32-jsSHA.charSize-i%32)}return b};var u=function(a){var b=[];var c=a.length;for(var i=0;i>3]|=d<<(24-(4*(i%8)))}else{return"INVALID HEX STRING"}}return b};var v=null;var w=null;if("HEX"===p){if(0!==(o.length%2)){return"TEXT MUST BE IN BYTE INCREMENTS"}v=o.length*4;w=u(o)}else if(("ASCII"===p)||('undefined'===typeof(p))){v=o.length*jsSHA.charSize;w=s(o)}else{return"UNKNOWN TEXT INPUT TYPE"}var A=function(a){var b=jsSHA.hexCase?"0123456789ABCDEF":"0123456789abcdef";var c="";var d=a.length*4;for(var i=0;i>2]>>((3-i%4)*8+4))&0xF)+b.charAt((a[i>>2]>>((3-i%4)*8))&0xF)}return c};var B=function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var c="";var d=a.length*4;for(var i=0;i>2]>>8*(3-i%4))&0xFF)<<16)|(((a[i+1>>2]>>8*(3-(i+1)%4))&0xFF)<<8)|((a[i+2>>2]>>8*(3-(i+2)%4))&0xFF);for(var j=0;j<4;j++){if(i*8+j*6>a.length*32){c+=jsSHA.b64pad}else{c+=b.charAt((e>>6*(3-j))&0x3F)}}}return c};var C=function(x,n){if(n<32){return(x>>>n)|(x<<(32-n))}else{return x}};var D=function(x,n){if(n<32){return x>>>n}else{return 0}};var E=function(x,y,z){return(x&y)^(~x&z)};var F=function(x,y,z){return(x&y)^(x&z)^(y&z)};var G=function(x){return C(x,2)^C(x,13)^C(x,22)};var I=function(x){return C(x,6)^C(x,11)^C(x,25)};var J=function(x){return C(x,7)^C(x,18)^D(x,3)};var L=function(x){return C(x,17)^C(x,19)^D(x,10)};var M=function(x,y){var a=(x&0xFFFF)+(y&0xFFFF);var b=(x>>>16)+(y>>>16)+(a>>>16);return((b&0xFFFF)<<16)|(a&0xFFFF)};var N=function(a,b,c,d){var e=(a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF);var f=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16);return((f&0xFFFF)<<16)|(e&0xFFFF)};var O=function(a,b,c,d,e){var f=(a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);var g=(a>>>16)+(b>>>16)+(c>>>16)+(d>>>16)+(e>>>16)+(f>>>16);return((g&0xFFFF)<<16)|(f&0xFFFF)};var P=function(j,k,l){var W=[];var a,b,c,d,e,f,g,h;var m,T2;var H;var K=[0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0x0FC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x06CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2];if(l==="SHA-224"){H=[0xc1059ed8,0x367cd507,0x3070dd17,0xf70e5939,0xffc00b31,0x68581511,0x64f98fa7,0xbefa4fa4]}else{H=[0x6A09E667,0xBB67AE85,0x3C6EF372,0xA54FF53A,0x510E527F,0x9B05688C,0x1F83D9AB,0x5BE0CD19]}j[k>>5]|=0x80<<(24-k%32);j[((k+1+64>>9)<<4)+15]=k;var n=j.length;for(var i=0;ik){f[15]&=0xFFFFFF00}for(var i=0;i<=15;i++){g[i]=f[i]^0x36363636;h[i]=f[i]^0x5C5C5C5C}j=P(g.concat(w),512+v,c);j=P(h.concat(j),512+l,c);return(e(j))}} - - // But I wrote this... ;) - this.encrypt = function( key, input ) { - var shaObj = new jsSHA(input, "ASCII"); - return shaObj.getHMAC(key, "ASCII", "SHA-256", "HEX"); - }; - } - }, jQuery.media ); -})(jQuery); diff --git a/js/source/jquery.media.slider.js b/js/source/jquery.media.slider.js deleted file mode 100644 index 83ecf250..00000000 --- a/js/source/jquery.media.slider.js +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.fn.mediaslider = function( handleId, vertical, inverted ) { - if( this.length === 0 ) { - return null; - } - return new (function( control, handleId, vertical, inverted ) { - var _this = this; - this.display = control.css({ - cursor:"pointer" - }); - this.dragging = false; - this.value = 0; - this.handle = this.display.find(handleId); - this.pagePos = vertical ? "pageY" : "pageX"; - this.handlePos = 0; - - // Only if there is a handle. - if( this.handle.length > 0 ) { - this.handleSize = vertical ? this.handle.height() : this.handle.width(); - this.handleMid = (this.handleSize/2); - } - - this.onResize = function() { - this.setTrackSize(); - this.updateValue( this.value ); - }; - - this.setTrackSize = function() { - this.trackSize = vertical ? this.display.height() : this.display.width(); - this.trackSize -= this.handleSize; - this.trackSize = (this.trackSize > 0) ? this.trackSize : 1; - }; - - this.setValue = function( _value ) { - this.setPosition( _value ); - this.display.trigger( "setvalue", this.value ); - }; - - this.updateValue = function( _value ) { - this.setPosition( _value ); - this.display.trigger( "updatevalue", this.value ); - }; - - this.setPosition = function( _value ) { - _value = (_value < 0) ? 0 : _value; - _value = (_value > 1) ? 1 : _value; - this.value = _value; - this.handlePos = inverted ? (1-this.value) : this.value; - this.handlePos *= this.trackSize; - this.handle.css( (vertical ? "marginTop" : "marginLeft"), this.handlePos ); - }; - - this.display.unbind("mousedown").bind("mousedown", function( event ) { - event.preventDefault(); - _this.dragging = true; - }); - - this.getOffset = function() { - var offset = vertical ? this.display.offset().top : this.display.offset().left; - return (offset + (this.handleSize / 2)); - }; - - this.getPosition = function( pagePos ) { - var pos = (pagePos - this.getOffset()) / this.trackSize; - pos = (pos < 0) ? 0 : pos; - pos = (pos > 1) ? 1 : pos; - pos = inverted ? (1-pos) : pos; - return pos; - }; - - this.display.unbind("mousemove").bind("mousemove", function( event ) { - event.preventDefault(); - if( _this.dragging ) { - _this.updateValue( _this.getPosition( event[_this.pagePos] ) ); - } - }); - - this.display.unbind("mouseleave").bind("mouseleave", function( event ) { - event.preventDefault(); - if( _this.dragging ) { - _this.dragging = false; - _this.setValue( _this.getPosition( event[_this.pagePos] ) ); - } - }); - - this.display.unbind("mouseup").bind("mouseup", function( event ) { - event.preventDefault(); - if( _this.dragging ) { - _this.dragging = false; - _this.setValue( _this.getPosition( event[_this.pagePos] ) ); - } - }); - - this.onResize(); - - })( this, handleId, vertical, inverted ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.teaser.js b/js/source/jquery.media.teaser.js deleted file mode 100755 index c7a04d55..00000000 --- a/js/source/jquery.media.teaser.js +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - pageLink:false - }); - - jQuery.fn.mediateaser = function( server, nodeInfo, _index, settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( server, nodeInfo, _index, teaser, settings ) { - settings = jQuery.media.utils.getSettings(settings); - - var _this = this; - this.display = teaser; - - // If they hover over the teaser... - this.display.unbind("mouseenter").bind( "mouseenter", function(event) { - if( settings.template.onTeaserOver ) { - settings.template.onTeaserOver( _this ); - } - }); - - // If they hover away from the teaser... - this.display.unbind("mouseleave").bind( "mouseleave", function(event) { - if( settings.template.onTeaserOut ) { - settings.template.onTeaserOut( _this ); - } - }); - - // The index of this teaser - this.index = _index; - - // Setup the node. - this.node = this.display.medianode( server, settings ); - - // Load the node information. - if( this.node ) { - this.node.loadNode( nodeInfo ); - } - - // If they wish to link these teasers to actual nodes. - if( this.node && settings.pageLink ) { - var path = settings.baseURL; - path += nodeInfo.path ? nodeInfo.path : ("node/" + nodeInfo.nid); - this.node.display.wrap(''); - } - - this.reset = function() { - if( this.node ) { - this.node.display.unbind(); - } - }; - - this.setActive = function( _active ) { - if( settings.template.onTeaserActivate ) { - settings.template.onTeaserActivate(this, _active); - } - }; - - this.setSelected = function( _selected ) { - if( settings.template.onTeaserSelect ) { - settings.template.onTeaserSelect(this, _selected); - } - }; - - // Let the template setup the teaser. - if( settings.template.onTeaserLoad ) { - settings.template.onTeaserLoad( this ); - } - })( server, nodeInfo, _index, this, settings ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.titlebar.js b/js/source/jquery.media.titlebar.js deleted file mode 100644 index 984c906d..00000000 --- a/js/source/jquery.media.titlebar.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media.ids = jQuery.extend( jQuery.media.ids, { - titleLinks:"#mediatitlelinks" - }); - - jQuery.fn.mediatitlebar = function( settings ) { - if( this.length === 0 ) { - return null; - } - return new (function( titleBar, settings ) { - // Save the jQuery display. - var _this = this; - this.display = titleBar; - - this.titleLinks = this.display.find( settings.ids.titleLinks ); - - this.display.find("a").each( function() { - var linkId = $(this).attr("href"); - $(this).medialink( settings, function( event ) { - event.preventDefault(); - _this.display.trigger( event.data.id ); - }, { - id:linkId.substr(1), - obj:$(this) - } ); - }); - })( this, settings ); - }; -})(jQuery); diff --git a/js/source/jquery.media.utils.js b/js/source/jquery.media.utils.js deleted file mode 100644 index 26dc9859..00000000 --- a/js/source/jquery.media.utils.js +++ /dev/null @@ -1,280 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.extend( {}, { - utils : { - getBaseURL : function() { - var url = new RegExp(/^(http[s]?\:[\\\/][\\\/])([^\\\/\?]+)/); - var results = url.exec(location.href); - return results ? results[0] : ""; - }, - - timer:{}, - stopElementHide:{}, - showThenHide : function( element, id, showSpeed, hideSpeed, finished ) { - if( element ) { - element.show(showSpeed); - if( jQuery.media.utils.timer.hasOwnProperty(id) ) { - clearTimeout( jQuery.media.utils.timer[id] ); - } - jQuery.media.utils.timer[id] = setTimeout( function() { - if( !jQuery.media.utils.stopElementHide[id] ) { - element.hide(hideSpeed, function() { - if( jQuery.media.utils.stopElementHide[id] ) { - element.show(); - } - - if( finished ) { - finished(); - } - }); - } - }, 5000); - } - }, - - stopHide : function( element, id ) { - jQuery.media.utils.stopElementHide[id] = true; - clearTimeout(jQuery.media.utils.timer[id]); - }, - - stopHideOnOver : function( element, id ) { - if( element ) { - jQuery.media.utils.stopElementHide[id] = false; - element.unbind("mouseover").bind("mouseover", {id:id}, function( event ) { - jQuery.media.utils.stopElementHide[event.data.id] = true; - }).unbind("mouseout").bind("mouseout", {id:id}, function( event ) { - jQuery.media.utils.stopElementHide[event.data.id] = false; - }); - } - }, - - getSettings : function( settings ) { - // Make sure it exists... - if( !settings ) { - settings = {}; - } - - // Only get the settings if they have not yet been initialized. - if( !settings.initialized ) { - settings = jQuery.extend( {}, jQuery.media.defaults, settings ); - settings.ids = jQuery.extend( {}, jQuery.media.ids, settings.ids ); - settings.baseURL = settings.baseURL ? settings.baseURL : jQuery.media.utils.getBaseURL(); - settings.baseURL += settings.baseURL ? "/" : ""; - settings.initialized = true; - } - - // Return the settings. - return settings; - }, - - getId : function( display ) { - return display.attr("id") ? display.attr("id") : display.attr("class") ? display.attr("class") : "mediaplayer"; - }, - - getScaledRect : function( ratio, rect ) { - var scaledRect = {}; - scaledRect.x = rect.x ? rect.x : 0; - scaledRect.y = rect.y ? rect.y : 0; - scaledRect.width = rect.width ? rect.width : 0; - scaledRect.height = rect.height ? rect.height : 0; - - if( ratio ) { - var newRatio = (rect.width / rect.height); - scaledRect.height = (newRatio > ratio) ? rect.height : Math.floor(rect.width / ratio); - scaledRect.width = (newRatio > ratio) ? Math.floor(rect.height * ratio) : rect.width; - scaledRect.x = Math.floor((rect.width - scaledRect.width) / 2); - scaledRect.y = Math.floor((rect.height - scaledRect.height) / 2); - } - - return scaledRect; - }, - - // Checks all parents visibility, and resets them and adds those items to a passed in - // array which can be used to reset their visibiltiy at a later point by calling - // resetVisibility - checkVisibility : function( display, invisibleParents ) { - var isVisible = true; - display.parents().each( function() { - var jObject = jQuery(this); - if( !jObject.is(':visible') ) { - isVisible = false; - var attrClass = jObject.attr("class"); - invisibleParents.push( { - obj:jObject, - attr:attrClass - } ); - jObject.removeClass(attrClass); - } - }); - }, - - // Reset's the visibility of the passed in parent elements. - resetVisibility : function( invisibleParents ) { - // Now iterate through all of the invisible objects and rehide them. - var i = invisibleParents.length; - while(i){ - i--; - invisibleParents[i].obj.addClass(invisibleParents[i].attr); - } - }, - - getFlash : function( player, id, width, height, flashvars, wmode ) { - // Get the protocol. - var protocol = window.location.protocol; - if (protocol.charAt(protocol.length - 1) == ':') { - protocol = protocol.substring(0, protocol.length - 1); - } - - // Convert the flashvars object to a string... - var flashVarsString = jQuery.param(flashvars); - - // Get the HTML flash object string. - var flash = ' '; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - flash += ''; - return flash; - }, - - removeFlash : function( obj, id ) { - if( typeof(swfobject) != "undefined" ) { - swfobject.removeSWF( id ); - } - else { - var flash = obj.find('object').eq(0)[0]; - if( flash ) { - flash.parentNode.removeChild(flash); - } - } - }, - - // Insert flash routine. If they have swfobject, then this function will dynamically use that instead. - insertFlash : function( obj, player, id, width, height, flashvars, wmode, onAdded ) { - jQuery.media.utils.removeFlash( obj, id ); - obj.children().remove(); - obj.append('

Get Adobe Flash player

'); - if( typeof(swfobject) != "undefined" ) { - var params = { - allowScriptAccess:"always", - allowfullscreen:"true", - wmode:wmode, - quality:"high" - }; - swfobject.embedSWF( - player, - id, - width, - height, - "9.0.0", - "expressInstall.swf", - flashvars, - params, - {}, - function( swf ) { - onAdded( swf.ref ); - } - ); - } - else { - var flash = jQuery.media.utils.getFlash( player, id, width, height, flashvars, wmode ); - var container = obj.find('#' + id).eq(0); - if( jQuery.browser.msie ) { - container[0].outerHTML = flash; - onAdded( obj.find('object').eq(0)[0] ); - } else { - container.replaceWith( flash ); - onAdded( obj.find('embed').eq(0)[0] ); - } - } - }, - - // Fix the clone method for jQuery 1.2.6 - 1.3.1 - cloneFix: function( obj, events ) { - // Do the clone - var ret = obj.map(function(){ - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var html = this.outerHTML; - if ( !html ) { - var div = this.ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; - }); - - // Copy the events from the original to the clone - if ( events === true ) { - var orig = obj.find("*").andSelf(), i = 0; - - ret.find("*").andSelf().each(function(){ - if ( this.nodeName !== orig[i].nodeName ) { - return; - } - - var events = jQuery.data( orig[i], "events" ); - - for ( var type in events ) { - if( events.hasOwnProperty( type ) ) { - for ( var handler in events[ type ] ) { - if( events[ type ].hasOwnProperty( handler ) ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } - } - } - } - - i++; - }); - } - - // Return the cloned set - return ret; - } - } - }, jQuery.media ); -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.vimeo.js b/js/source/jquery.media.vimeo.js deleted file mode 100644 index ef0aa9e1..00000000 --- a/js/source/jquery.media.vimeo.js +++ /dev/null @@ -1,258 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - window.onVimeoReady = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - window.onVimeoFinish = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onFinished(); - }; - - window.onVimeoLoading = function( data, playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onLoading( data ); - }; - - window.onVimeoPlay = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onPlaying(); - }; - - window.onVimeoPause = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onPaused(); - }; - - window.onVimeoProgress = function( time, playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onProgress(time); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "vimeo":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i) === 0); - } - }); - - jQuery.fn.mediavimeo = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.ready = false; - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.currentVolume = 1; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var flashvars = { - clip_id:this.getId(videoFile.path), - width:"100%", - height:"100%", - js_api:'1', - js_onLoad:'onVimeoReady', - js_swf_id:playerId - }; - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://vimeo.com/moogaloop.swf?rand=' + rand; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - flashvars, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.getId = function( path ) { - var regex = /^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i; - return (path.search(regex) === 0) ? path.replace(regex, "$3") : path; - }; - - this.loadMedia = function( videoFile ) { - this.bytesLoaded = 0; - this.bytesTotal = 0; - this.createMedia( videoFile ); - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - // Load the player. - this.loadPlayer = function() { - if( this.ready && this.player && this.player.api_addEventListener ) { - // Add our event listeners. - this.player.api_addEventListener('onProgress', 'onVimeoProgress'); - this.player.api_addEventListener('onFinish', 'onVimeoFinish'); - this.player.api_addEventListener('onLoading', 'onVimeoLoading'); - this.player.api_addEventListener('onPlay', 'onVimeoPlay'); - this.player.api_addEventListener('onPause', 'onVimeoPause'); - - // Let them know the player is ready. - onUpdate({ - type:"playerready" - }); - - this.playMedia(); - } - }; - - this.onFinished = function() { - onUpdate({ - type:"complete" - }); - }; - - this.onLoading = function( data ) { - this.bytesLoaded = data.bytesLoaded; - this.bytesTotal = data.bytesTotal; - }; - - this.onPlaying = function() { - onUpdate({ - type:"playing", - busy:"hide" - }); - }; - - this.onPaused = function() { - onUpdate({ - type:"paused", - busy:"hide" - }); - }; - - this.playMedia = function() { - onUpdate({ - type:"playing", - busy:"hide" - }); - if (this.player.api_play) { - this.player.api_play(); - } - }; - - this.onProgress = function( time ) { - onUpdate({ - type:"progress" - }); - }; - - this.pauseMedia = function() { - onUpdate({ - type:"paused", - busy:"hide" - }); - if (this.player.api_pause) { - this.player.api_pause(); - } - }; - - this.stopMedia = function() { - this.pauseMedia(); - if (this.player.api_unload) { - this.player.api_unload(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - if (this.player.api_seekTo) { - this.player.api_seekTo( pos ); - } - }; - - this.setVolume = function( vol ) { - this.currentVolume = vol; - if (this.player.api_setVolume) { - this.player.api_setVolume( (vol*100) ); - } - }; - - // For some crazy reason... Vimeo has not implemented this... so just cache the value. - this.getVolume = function() { - return this.currentVolume; - }; - - this.getDuration = function() { - return this.player.api_getDuration ? this.player.api_getDuration() : 0; - }; - - this.getCurrentTime = function() { - return this.player.api_getCurrentTime ? this.player.api_getCurrentTime() : 0; - }; - - this.getBytesLoaded = function() { - return this.bytesLoaded; - }; - - this.getBytesTotal = function() { - return this.bytesTotal; - }; - - // Not implemented yet... - this.setQuality = function( quality ) {}; - this.getQuality = function() { - return ""; - }; - this.hasControls = function() { - return true; - }; - this.showControls = function(show) {}; - //this.setSize = function( newWidth, newHeight ) {}; - this.getEmbedCode = function() { - return "This video cannot be embedded."; - }; - this.getMediaLink = function() { - return "This video currently does not have a link."; - }; - })( this, options, onUpdate ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.voter.js b/js/source/jquery.media.voter.js deleted file mode 100644 index e686be50..00000000 --- a/js/source/jquery.media.voter.js +++ /dev/null @@ -1,132 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.fn.mediavoter = function( settings, server, userVote ) { - if( this.length === 0 ) { - return null; - } - return new (function( voteObj, settings, server, userVote ) { - // Save the jQuery display. - this.display = voteObj; - var _this = this; - - // The node id. - this.nodeId = 0; - - // Store all of our votes. - this.votes = []; - - // Get the tag for the voting. - this.tag = this.display.attr("tag"); - - // Setup each vote element. - this.display.find("div").each( function() { - if( userVote ) { - $(this).css("cursor", "pointer"); - $(this).unbind("click").bind( "click", function( event ) { - _this.setVote( parseInt($(this).attr("vote"), 10) ); - }); - $(this).unbind("mouseenter").bind( "mouseenter", function( event ) { - _this.updateVote( { - value: parseInt($(this).attr("vote"), 10) - }, true ); - }); - } - _this.votes.push( { - vote:parseInt($(this).attr("vote"), 10), - display:$(this) - } ); - }); - - // Sort the votes based on numerical order. - this.votes.sort( function( voteA, voteB ) { - return (voteA.vote - voteB.vote); - }); - - // If this is a uservoter, then add the mouse leave event. - if( userVote ) { - this.display.unbind("mouseleave").bind( "mouseleave", function( event ) { - _this.updateVote( { - value:0 - }, true ); - }); - } - - // Update a vote value. - this.updateVote = function( vote, hover ) { - if( vote && settings.template.updateVote ) { - settings.template.updateVote( this, vote.value, hover ); - } - }; - - // Get the vote from the server. - this.getVote = function( nodeInfo ) { - if( nodeInfo && nodeInfo.nid ) { - this.nodeId = parseInt(nodeInfo.nid, 10); - if( nodeInfo.vote ) { - var vote = userVote ? nodeInfo.vote.uservote : nodeInfo.vote.vote; - this.updateVote( nodeInfo.vote.vote, false ); - this.display.trigger( "voteGet", vote ); - } - else { - if( server && nodeInfo.nid && (this.display.length > 0) ) { - this.display.trigger( "processing" ); - var cmd = userVote ? jQuery.media.commands.getUserVote : jQuery.media.commands.getVote; - server.call( cmd, function( vote ) { - _this.updateVote( vote, false ); - _this.display.trigger( "voteGet", vote ); - }, null, "node", this.nodeId, this.tag ); - } - } - } - }; - - // Set the current vote. - this.setVote = function( voteValue ) { - if( server && this.nodeId ) { - this.display.trigger( "processing" ); - this.updateVote( { - value:voteValue - }, false ); - server.call( jQuery.media.commands.setVote, function( vote ) { - _this.display.trigger( "voteSet", vote ); - }, null, "node", this.nodeId, voteValue, this.tag ); - } - }; - - // Delete the current vote. - this.deleteVote = function() { - if( server && this.nodeId ) { - this.display.trigger( "processing" ); - server.call( jQuery.media.commands.deleteVote, function( vote ) { - _this.updateVote( vote, false ); - _this.display.trigger( "voteDelete", vote ); - }, null, "node", this.nodeId, this.tag ); - } - }; - })( this, settings, server, userVote ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/source/jquery.media.youtube.js b/js/source/jquery.media.youtube.js deleted file mode 100755 index c925ae90..00000000 --- a/js/source/jquery.media.youtube.js +++ /dev/null @@ -1,292 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Called when the YouTube player is ready. - window.onYouTubePlayerReady = function( playerId ) { - playerId = playerId.replace(/\_media$/, ""); - jQuery.media.players[playerId].node.player.media.player.onReady(); - }; - - // Tell the media player how to determine if a file path is a YouTube media type. - jQuery.media.playerTypes = jQuery.extend( jQuery.media.playerTypes, { - "youtube":function( file ) { - return (file.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i) === 0); - } - }); - - jQuery.fn.mediayoutube = function( options, onUpdate ) { - return new (function( video, options, onUpdate ) { - this.display = video; - var _this = this; - this.player = null; - this.videoFile = null; - this.loaded = false; - this.ready = false; - this.qualities = []; - - this.createMedia = function( videoFile, preview ) { - this.videoFile = videoFile; - this.ready = false; - var playerId = (options.id + "_media"); - var rand = Math.floor(Math.random() * 1000000); - var flashPlayer = 'http://www.youtube.com/apiplayer?rand=' + rand + '&version=3&enablejsapi=1&playerapiid=' + playerId; - jQuery.media.utils.insertFlash( - this.display, - flashPlayer, - playerId, - "100%", - "100%", - {}, - options.wmode, - function( obj ) { - _this.player = obj; - _this.loadPlayer(); - } - ); - }; - - this.getId = function( path ) { - var regex = /^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i; - return (path.search(regex) === 0) ? path.replace(regex, "$2") : path; - }; - - this.loadMedia = function( videoFile ) { - if( this.player ) { - this.loaded = false; - this.videoFile = videoFile; - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - } ); - - // Load our video. - if (this.player.loadVideoById) { - this.player.loadVideoById( this.getId( this.videoFile.path ), 0, options.quality ); - } - } - }; - - // Called when the player has finished loading. - this.onReady = function() { - this.ready = true; - this.loadPlayer(); - }; - - // Try to load the player. - this.loadPlayer = function() { - if( this.ready && this.player ) { - // Create our callback functions. - window[options.id + 'StateChange'] = function( newState ) { - _this.onStateChange( newState ); - }; - - window[options.id + 'PlayerError'] = function( errorCode ) { - _this.onError( errorCode ); - }; - - window[options.id + 'QualityChange'] = function( newQuality ) { - _this.quality = newQuality; - }; - - // Add our event listeners. - if (this.player.addEventListener) { - this.player.addEventListener('onStateChange', options.id + 'StateChange'); - this.player.addEventListener('onError', options.id + 'PlayerError'); - this.player.addEventListener('onPlaybackQualityChange', options.id + 'QualityChange'); - } - - // Get all of the quality levels. - if (this.player.getAvailableQualityLevels) { - this.qualities = this.player.getAvailableQualityLevels(); - } - - // Let them know the player is ready. - onUpdate( { - type:"playerready" - }); - - // Load our video. - if (this.player.loadVideoById) { - this.player.loadVideoById( this.getId( this.videoFile.path ), 0 ); - } - } - }; - - // Called when the YouTube player state changes. - this.onStateChange = function( newState ) { - var playerState = this.getPlayerState( newState ); - onUpdate( { - type:playerState.state, - busy:playerState.busy - } ); - - if( !this.loaded && playerState == "playing" ) { - // Set this player to loaded. - this.loaded = true; - - // Update our meta data. - onUpdate( { - type:"meta" - } ); - } - }; - - // Called when the YouTube player has an error. - this.onError = function( errorCode ) { - var errorText = "An unknown error has occured: " + errorCode; - if( errorCode == 100 ) { - errorText = "The requested video was not found. "; - errorText += "This occurs when a video has been removed (for any reason), "; - errorText += "or it has been marked as private."; - } else if( (errorCode == 101) || (errorCode == 150) ) { - errorText = "The video requested does not allow playback in an embedded player."; - } - if( window.console && console.log ) { - console.log(errorText); - } - onUpdate( { - type:"error", - data:errorText - } ); - }; - - // Translates the player state for the YouTube API player. - this.getPlayerState = function( playerState ) { - switch (playerState) { - case 5: - return {state:'ready', busy:false}; - case 3: - return {state:'buffering', busy:"show"}; - case 2: - return {state:'paused', busy:"hide"}; - case 1: - return {state:'playing', busy:"hide"}; - case 0: - return {state:'complete', busy:false}; - case -1: - return {state:'stopped', busy:false}; - default: - return {state:'unknown', busy:false}; - } - return 'unknown'; - }; - /* - this.setSize = function( newWidth, newHeight ) { - //this.player.setSize(newWidth, newHeight); - }; - */ - this.playMedia = function() { - onUpdate({ - type:"buffering", - busy:"show" - }); - if (this.player.playVideo) { - this.player.playVideo(); - } - }; - - this.pauseMedia = function() { - if (this.player.pauseVideo) { - this.player.pauseVideo(); - } - }; - - this.stopMedia = function() { - if (this.player.stopVideo) { - this.player.stopVideo(); - } - }; - - this.destroy = function() { - this.stopMedia(); - jQuery.media.utils.removeFlash( this.display, (options.id + "_media") ); - this.display.children().remove(); - }; - - this.seekMedia = function( pos ) { - onUpdate({ - type:"buffering", - busy:"show" - }); - if (this.player.seekTo) { - this.player.seekTo( pos, true ); - } - }; - - this.setVolume = function( vol ) { - if (this.player.setVolume) { - this.player.setVolume( vol * 100 ); - } - }; - - this.setQuality = function( quality ) { - if (this.player.setPlaybackQuality) { - this.player.setPlaybackQuality( quality ); - } - }; - - this.getVolume = function() { - return this.player.getVolume ? (this.player.getVolume() / 100) : 0; - }; - - this.getDuration = function() { - return this.player.getDuration ? this.player.getDuration() : 0; - }; - - this.getCurrentTime = function() { - return this.player.getCurrentTime ? this.player.getCurrentTime() : 0; - }; - - this.getQuality = function() { - return this.player.getPlaybackQuality ? this.player.getPlaybackQuality() : 0; - }; - - this.getEmbedCode = function() { - return this.player.getVideoEmbedCode ? this.player.getVideoEmbedCode() : 0; - }; - - this.getMediaLink = function() { - return this.player.getVideoUrl ? this.player.getVideoUrl() : 0; - }; - - this.getBytesLoaded = function() { - return this.player.getVideoBytesLoaded ? this.player.getVideoBytesLoaded() : 0; - }; - - this.getBytesTotal = function() { - return this.player.getVideoBytesTotal ? this.player.getVideoBytesTotal() : 0; - }; - - this.hasControls = function() { - return false; - }; - this.showControls = function(show) {}; - })( this, options, onUpdate ); - }; -})(jQuery); \ No newline at end of file diff --git a/js/yuicompressor/build/yuicompressor.jar b/js/yuicompressor/build/yuicompressor.jar deleted file mode 100755 index c29470bd0d0175ddd98e7f82079a9566c2aebf4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851219 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
vQWQ81PSRYsyy%}BasMgW*@C!F^ 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

mDlI*-YYr4^5Gs;u7l7((%~7noXQa; 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�y9sA{K37k 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 z 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 XH3K=u5BCppxNtlQhqw|l4gU3i%C&)! diff --git a/makefile b/makefile new file mode 100644 index 00000000..ade0c5a0 --- /dev/null +++ b/makefile @@ -0,0 +1,61 @@ +# To run this makefile, you must do the following. +# +# 1.) Download http://closure-compiler.googlecode.com/files/compiler-latest.zip +# and place compiler.jar within the tools directory. +# +# 2.) Install closure-linter tool at by following +# http://code.google.com/closure/utilities/docs/linter_howto.html +# +# 3.) Download the JSDoc toolkit found at +# http://code.google.com/p/jsdoc-toolkit and place the jsdoc-toolkit +# directory within the tools directory. + +# Create the list of files +files = src/osmplayer.js\ + src/osmplayer.parser.default.js\ + src/osmplayer.parser.youtube.js\ + src/osmplayer.parser.rss.js\ + src/osmplayer.parser.asx.js\ + src/osmplayer.parser.xspf.js\ + src/osmplayer.playlist.js\ + src/osmplayer.scroll.js\ + src/osmplayer.pager.js\ + src/osmplayer.teaser.js + +.DEFAULT_GOAL := all + +all: jslint js jsdoc + +# Perform a jsLint on all the files. +jslint: ${files} + gjslint $^ + +# Create an aggregated js file and a compressed js file. +js: ${files} + @echo "Generating aggregated bin/osmplayer.js file" + @cat > bin/osmplayer.js $^ + @echo "Generating compressed bin/osmplayer.compressed file" + @java -jar tools/compiler.jar --js bin/osmplayer.js --js_output_file bin/osmplayer.compressed.js + +# Create the documentation from source code. +jsdoc: ${files} + @echo "Generating documetation." + @java -jar tools/jsdoc-toolkit/jsrun.jar tools/jsdoc-toolkit/app/run.js -a -t=tools/jsdoc-toolkit/templates/jsdoc -d=doc $^ + +# Fix the js style on all the files. +fixjsstyle: ${files} + fixjsstyle $^ + +# Install the necessary tools. +tools: + apt-get install python-setuptools + apt-get install unzip + wget http://closure-compiler.googlecode.com/files/compiler-latest.zip -P tools + unzip tools/compiler-latest.zip -d tools + rm tools/compiler-latest.zip tools/COPYING tools/README + easy_install http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz + wget http://jsdoc-toolkit.googlecode.com/files/jsdoc_toolkit-2.4.0.zip -P tools + unzip tools/jsdoc_toolkit-2.4.0.zip -d tools + mv tools/jsdoc_toolkit-2.4.0/jsdoc-toolkit tools/jsdoc-toolkit + rm -rd tools/jsdoc_toolkit-2.4.0 + rm tools/jsdoc_toolkit-2.4.0.zip diff --git a/minplayer/LICENSE.txt b/minplayer/LICENSE.txt deleted file mode 100755 index 20d40b6b..00000000 --- a/minplayer/LICENSE.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/minplayer/README.md b/minplayer/README.md new file mode 100644 index 00000000..63034555 --- /dev/null +++ b/minplayer/README.md @@ -0,0 +1,122 @@ +minPlayer - Because less IS more. +=================================== + +The goal of this project is to provide a slim, well documented, object oriented, +plugin-based "core" media player in which other players and libraries can build +on top of. It is written using object oriented JavaScript and is continuously +integrated using JSLint, JSDoc, and Google Closure. + +Multiple players - One single API. +----------------------------------- +It also allows for hot-swappable 3rd party API players by providing a common +API for all of these players so that they can be utilized in the same manner. +This means that once you develop for the minPlayer, one can easily bring in a +different player an your code will still function as it would for all the +others. Out of the box, this player provides a common API for YouTube, Vimeo, +HTML5, and Flash with more on the way. + +Everything is a plugin +----------------------------------- +Since this is a plugin-based media player, every displayable class must derive +from the plugin class, thereby, making it a plugin. This includes the media +player itself. This plugin system is highly flexible to be able to handle +just about any type of plugin imaginable, and allows for every plugin to have +direct dependeny-injected control over any other plugin within the media player. + +Complete User Interface & Business Logic separation +----------------------------------- +One common complaint for many media solutions out there is that they hijack the +DOM and build out their own controls to provide consistency amongst different +browsers. They do this, however, within the core player which completely binds +the user interface to the business logic of the media player. The minPlayer +takes a different approach by keeping ALL user interface functionality within +the "templates" directory, where each template essentially derives from the base +Business logic classes only to provide the user interface aspects of that control. +This allows for easy templating of the media player besides just overriding the +CSS like current media solutions do today. + +No "Features"! +----------------------------------- +I am pleased to say that this media player does NOT have many features, and this +is on purpose. Since this is a "core" player, it does not have any features +other than what is critical in presenting your media. Any additional "bling" +will be added to this player from different repositories and from different +players that extend this "core" functionality. This methodology will keep this +"core" media solution lean & highly functional. + +API +----------------------------------- +The API for minPlayer is very simple. It revolves around a single API that is +able to retrieve any plugin even before that plugin is created. By doing this, +you can have complete control over any plugin within the minPlayer. This API +is simply called + +``` +minplayer.get(); +``` + +This API can take up to three different argument with each argument providing +different usage. The code docs for this function are as follows... + +``` +/** + * The main API for minPlayer. + * + * Provided that this function takes three parameters, there are 8 different + * ways to use this api. + * + * id (0x100) - You want a specific player. + * plugin (0x010) - You want a specific plugin. + * callback (0x001) - You only want it when it is ready. + * + * 000 - You want all plugins from all players, ready or not. + * + * var instances = minplayer.get(); + * + * 001 - You want all plugins from all players, but only when ready. + * + * minplayer.get(function(plugin) { + * // Code goes here. + * }); + * + * 010 - You want a specific plugin from all players, ready or not... + * + * var medias = minplayer.get(null, 'media'); + * + * 011 - You want a specific plugin from all players, but only when ready. + * + * minplayer.get('player', function(player) { + * // Code goes here. + * }); + * + * 100 - You want all plugins from a specific player, ready or not. + * + * var plugins = minplayer.get('player_id'); + * + * 101 - You want all plugins from a specific player, but only when ready. + * + * minplayer.get('player_id', null, function(plugin) { + * // Code goes here. + * }); + * + * 110 - You want a specific plugin from a specific player, ready or not. + * + * var plugin = minplayer.get('player_id', 'media'); + * + * 111 - You want a specific plugin from a specific player, only when ready. + * + * minplayer.get('player_id', 'media', function(media) { + * // Code goes here. + * }); + * + * @this The context in which this function was called. + * @param {string} id The ID of the widget to get the plugins from. + * @param {string} plugin The name of the plugin. + * @param {function} callback Called when the plugin is ready. + * @return {object} The plugin object if it is immediately available. + */ +minplayer.get = function(id, plugin, callback) { +}; +``` + +Thanks and enjoy minPlayer. \ No newline at end of file diff --git a/minplayer/bin/minplayer.compressed.js b/minplayer/bin/minplayer.compressed.js new file mode 100644 index 00000000..86b8f83a --- /dev/null +++ b/minplayer/bin/minplayer.compressed.js @@ -0,0 +1,103 @@ +var minplayer=minplayer||{};function checkPlayType(a,b){if("function"===typeof a.canPlayType){if("object"===typeof b){for(var c=b.length,d="";c--&&!(d=checkPlayType(a,b[c])););return d}c=a.canPlayType(b);if("no"!==c&&""!==c)return b}return""} +minplayer.compatibility=function(){var a=null,a=document.createElement("video");this.videoOGG=checkPlayType(a,"video/ogg");this.videoH264=checkPlayType(a,["video/mp4","video/h264"]);this.videoWEBM=checkPlayType(a,["video/x-webm","video/webm","application/octet-stream"]);a=document.createElement("audio");this.audioOGG=checkPlayType(a,"audio/ogg");this.audioMP3=checkPlayType(a,"audio/mpeg");this.audioMP4=checkPlayType(a,"audio/mp4")};minplayer.playTypes||(minplayer.playTypes=new minplayer.compatibility); +minplayer=minplayer||{};minplayer.async=function(){this.value=null;this.queue=[]};minplayer.async.prototype.get=function(a){this.value!==null?a(this.value):this.queue.push(a)};minplayer.async.prototype.set=function(a){this.value=a;var b=this.queue.length;if(b){for(;b--;)this.queue[b](a);this.queue=[]}};minplayer=minplayer||{};minplayer.flags=function(){this.flag=0;this.ids={};this.numFlags=0}; +minplayer.flags.prototype.setFlag=function(a,b){if(!this.ids.hasOwnProperty(a)){this.ids[a]=this.numFlags;this.numFlags++}this.flag=b?this.flag|1<a){c.height=b.height;c.width=Math.floor(b.height*a)}else{c.height=Math.floor(b.width/a);c.width=b.width}c.x=Math.floor((b.width-c.width)/2);c.y=Math.floor((b.height-c.height)/2)}return c}; +minplayer.display.prototype.getElements=function(){return{}};minplayer.display.prototype.isValid=function(){return this.display.length>0}; +(function(a,b){var c=function(){for(var a=[["requestFullscreen","exitFullscreen","fullscreenchange","fullscreen","fullscreenElement"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitfullscreenchange","webkitIsFullScreen","webkitCurrentFullScreenElement"],["mozRequestFullScreen","mozCancelFullScreen","mozfullscreenchange","mozFullScreen","mozFullScreenElement"]],c=0,d=a.length;c0&&(c=d)}return c}; +minplayer.prototype.loadPlayer=function(){if(this.options.file)if(this.options.file.player){this.error();var a=this.options.file.player.toString();if(!this.media||a!==this.currentPlayer){this.currentPlayer=a;if(this.elements.display){a={};if(this.media){a=this.media.queue;this.media.destroy()}pClass=minplayer.players[this.options.file.player];this.options.mediaelement=this.elements.media;this.media=new pClass(this.elements.display,this.options,a);this.get("media",function(a){return function(c){c.load(a.options.file)}}(this))}else this.error("No media display found.")}else this.media&& +this.media.load(this.options.file)}else this.error("Cannot play media: "+this.options.file.mimetype);else this.error("No media found.")};minplayer.prototype.load=function(a){this.options.files=a||this.options.files;this.options.file=this.getMediaFile(this.options.files);this.loadPlayer()};minplayer.prototype.resize=function(){this.get(function(a){a.onResize()})};minplayer=minplayer||{}; +minplayer.image=function(a,b){this.loaded=false;this.loader=null;this.ratio=0;this.img=null;minplayer.display.call(this,"image",a,b)};minplayer.image.prototype=new minplayer.display;minplayer.image.prototype.constructor=minplayer.image; +minplayer.image.prototype.construct=function(){this.allowResize=true;minplayer.display.prototype.construct.call(this);this.display.css("overflow","hidden");this.loader=new Image;this.loader.onload=function(a){return function(){a.loaded=true;a.ratio=a.loader.width/a.loader.height;a.resize();a.trigger("loaded")}}(this);this.ready()}; +minplayer.image.prototype.load=function(a){this.clear(function(){this.display.empty();this.img=jQuery(document.createElement("img")).attr({src:""}).hide();this.display.append(this.img);this.loader.src=a})};minplayer.image.prototype.clear=function(a){this.loaded=false;this.img?this.img.fadeOut(function(b){return function(){b.img.attr("src","");b.loader.src="";$(this).remove();a.call(b)}}(this)):a.call(this)}; +minplayer.image.prototype.resize=function(a,b){a=a||this.display.width();b=b||this.display.height();if(a&&b&&this.loaded){var c=this.getScaledRect(this.ratio,{width:a,height:b});this.img&&this.img.attr("src",this.loader.src).css({marginLeft:c.x,marginTop:c.y,width:c.width,height:c.height});this.img.fadeIn()}};minplayer.image.prototype.onResize=function(){this.resize()};minplayer=minplayer||{}; +minplayer.file=function(a){this.duration=a.duration||0;this.bytesTotal=a.bytesTotal||0;this.quality=a.quality||0;this.stream=a.stream||"";this.path=a.path||"";this.codecs=a.codecs||"";this.extension=a.extension||this.getFileExtension();this.mimetype=a.mimetype||a.filemime||this.getMimeType();this.type=a.type||this.getType();if(!this.type){this.mimetype=this.getMimeType();this.type=this.getType()}this.player=a.player||this.getBestPlayer();this.priority=a.priority||this.getPriority();this.id=a.id|| +this.getId()};minplayer.file.prototype.getBestPlayer=function(){var a=null,b=0;jQuery.each(minplayer.players,function(c){return function(d,e){var f=e.getPriority();if(e.canPlay(c)&&f>b){a=d;b=f}}}(this));return a}; +minplayer.file.prototype.getPriority=function(){var a=1;this.player&&(a=minplayer.players[this.player].getPriority());switch(this.mimetype){case "video/x-webm":case "video/webm":case "application/octet-stream":return a*10;case "video/mp4":case "audio/mp4":case "audio/mpeg":return a*9;case "video/ogg":case "audio/ogg":case "video/quicktime":return a*8;default:return a*5}};minplayer.file.prototype.getFileExtension=function(){return this.path.substring(this.path.lastIndexOf(".")+1).toLowerCase()}; +minplayer.file.prototype.getMimeType=function(){switch(this.extension){case "mp4":case "m4v":case "flv":case "f4v":return"video/mp4";case "webm":return"video/webm";case "ogg":case "ogv":return"video/ogg";case "3g2":return"video/3gpp2";case "3gpp":case "3gp":return"video/3gpp";case "mov":return"video/quicktime";case "swf":return"application/x-shockwave-flash";case "oga":return"audio/ogg";case "mp3":return"audio/mpeg";case "m4a":case "f4a":return"audio/mp4";case "aac":return"audio/aac";case "wav":return"audio/vnd.wave"; +case "wma":return"audio/x-ms-wma";default:return"unknown"}};minplayer.file.prototype.getType=function(){switch(this.mimetype){case "video/mp4":case "video/webm":case "application/octet-stream":case "video/x-webm":case "video/ogg":case "video/3gpp2":case "video/3gpp":case "video/quicktime":return"video";case "audio/mp3":case "audio/mp4":case "audio/ogg":case "audio/mpeg":return"audio";default:return""}}; +minplayer.file.prototype.getId=function(){var a=minplayer.players[this.player];return a&&a.getMediaId?a.getMediaId(this):""};minplayer=minplayer||{};minplayer.playLoader=function(a,b){this.busy=new minplayer.flags;this.bigPlay=new minplayer.flags;this.preview=null;minplayer.display.call(this,"playLoader",a,b)};minplayer.playLoader.prototype=new minplayer.display;minplayer.playLoader.prototype.constructor=minplayer.playLoader; +minplayer.playLoader.prototype.construct=function(){minplayer.display.prototype.construct.call(this);this.get("media",function(a){if(a.hasPlayLoader()){this.elements.busy&&this.elements.busy.unbind().hide();this.elements.bigPlay&&this.elements.bigPlay.unbind().hide();this.display.unbind().hide()}else{if(!this.options.preview)this.options.preview=a.elements.media.attr("poster");a.elements.media.attr("poster","");this.loadPreview();this.elements.bigPlay&&this.elements.bigPlay.unbind().bind("click", +function(b){b.preventDefault();jQuery(this).hide();a.play()});a.unbind("loadstart").bind("loadstart",function(a){return function(){a.busy.setFlag("media",true);a.bigPlay.setFlag("media",true);a.preview&&a.elements.preview.show();a.checkVisibility()}}(this));a.bind("waiting",function(a){return function(){a.busy.setFlag("media",true);a.checkVisibility()}}(this));a.bind("loadeddata",function(a){return function(){a.busy.setFlag("media",false);a.checkVisibility()}}(this));a.bind("playing",function(a){return function(){a.busy.setFlag("media", +false);a.bigPlay.setFlag("media",false);a.preview&&a.elements.preview.hide();a.checkVisibility()}}(this));a.bind("pause",function(a){return function(){a.bigPlay.setFlag("media",true);a.checkVisibility()}}(this))}});this.ready()};minplayer.playLoader.prototype.loadPreview=function(){if(this.elements.preview)if(this.options.preview){this.elements.preview.addClass("has-preview").show();this.preview=new minplayer.image(this.elements.preview,this.options);this.preview.load(this.options.preview)}else this.elements.preview.hide()}; +minplayer.playLoader.prototype.checkVisibility=function(){this.busy.flag?this.elements.busy.show():this.elements.busy.hide();this.bigPlay.flag?this.elements.bigPlay.show():this.elements.bigPlay.hide();(this.bigPlay.flag||this.busy.flag)&&this.display.show();!this.bigPlay.flag&&!this.busy.flag&&this.display.hide()};minplayer=minplayer||{};minplayer.players=minplayer.players||{};minplayer.players.base=function(a,b,c){minplayer.display.call(this,"media",a,b,c)};minplayer.players.base.prototype=new minplayer.display; +minplayer.players.base.prototype.constructor=minplayer.players.base;minplayer.players.base.prototype.getElements=function(){var a=minplayer.display.prototype.getElements.call(this);return jQuery.extend(a,{media:this.options.mediaelement})};minplayer.players.base.getPriority=function(){return 0};minplayer.players.base.getMediaId=function(){return""};minplayer.players.base.canPlay=function(){return false}; +minplayer.players.base.prototype.construct=function(){minplayer.display.prototype.construct.call(this);this.clear();this.mediaFile=this.options.file;if(!this.playerFound()){this.elements.media&&this.elements.media.remove();this.elements.media=jQuery(this.create());this.display.html(this.elements.media)}this.player=this.getPlayer();jQuery(document).bind("click",function(a){return function(b){a.hasFocus=jQuery(b.target).closest("#"+a.options.id).length==0?false:true}}(this));jQuery(document).bind("keydown", +function(a){return function(b){if(a.hasFocus){b.preventDefault();switch(b.keyCode){case 32:case 179:a.playing?a.pause():a.play();break;case 38:a.setVolumeRelative(0.1);break;case 40:a.setVolumeRelative(-0.1);break;case 37:case 227:a.seekRelative(-0.05);break;case 39:case 228:a.seekRelative(0.05)}}}}(this))};minplayer.players.base.prototype.destroy=function(){minplayer.plugin.prototype.destroy.call(this);this.clear()}; +minplayer.players.base.prototype.clear=function(){this.playerReady=false;this.reset();this.player&&jQuery(this.player).unbind()}; +minplayer.players.base.prototype.reset=function(){this.duration=new minplayer.async;this.currentTime=new minplayer.async;this.bytesLoaded=new minplayer.async;this.bytesTotal=new minplayer.async;this.bytesStart=new minplayer.async;this.volume=new minplayer.async;this.loading=this.playing=this.hasFocus=false;this.trigger("pause");this.trigger("waiting");this.trigger("progress",{loaded:0,total:0,start:0});this.trigger("timeupdate",{currentTime:0,duration:0})}; +minplayer.players.base.prototype.onReady=function(){if(!this.playerReady){this.playerReady=true;this.setVolume(this.options.volume/100);this.loading=true;this.poll(function(a){return function(){a.loading&&a.getBytesLoaded(function(b){a.getBytesTotal(function(c){if(b||c){var d=0;a.getBytesStart(function(a){d=a});a.trigger("progress",{loaded:b,total:c,start:d});if(b>=c)a.loading=false}})});return a.loading}}(this),1E3);this.ready();this.trigger("loadstart")}}; +minplayer.players.base.prototype.onPlaying=function(){this.trigger("playing");this.playing=this.hasFocus=true;this.poll(function(a){return function(){a.playing&&a.getCurrentTime(function(b){a.getDuration(function(c){b=parseFloat(b);c=parseFloat(c);(b||c)&&a.trigger("timeupdate",{currentTime:b,duration:c})})});return a.playing}}(this),1E3)};minplayer.players.base.prototype.onPaused=function(){this.trigger("pause");this.playing=this.hasFocus=false}; +minplayer.players.base.prototype.onComplete=function(){this.hasFocus=this.loading=this.playing=false;this.trigger("ended")};minplayer.players.base.prototype.onLoaded=function(){this.trigger("loadeddata")};minplayer.players.base.prototype.onWaiting=function(){this.trigger("waiting")};minplayer.players.base.prototype.onError=function(a){this.hasFocus=false;this.trigger("error",a)};minplayer.players.base.prototype.isReady=function(){return this.player&&this.playerReady}; +minplayer.players.base.prototype.hasPlayLoader=function(){return false};minplayer.players.base.prototype.playerFound=function(){return false};minplayer.players.base.prototype.create=function(){this.reset();return null};minplayer.players.base.prototype.getPlayer=function(){return this.player};minplayer.players.base.prototype.load=function(a){var b=typeof this.mediaFile=="string"?this.mediaFile:this.mediaFile.path;if(a&&a.path!=b){this.reset();this.mediaFile=a}}; +minplayer.players.base.prototype.play=function(){};minplayer.players.base.prototype.pause=function(){};minplayer.players.base.prototype.stop=function(){this.hasFocus=this.loading=this.playing=false};minplayer.players.base.prototype.seekRelative=function(a){this.getCurrentTime(function(b){return function(c){b.getDuration(function(d){if(d){var e=0,e=a>-1&&a<1?c/d+parseFloat(a):(c+parseFloat(a))/d;b.seek(e)}})}}(this))};minplayer.players.base.prototype.seek=function(){}; +minplayer.players.base.prototype.setVolumeRelative=function(a){this.getVolume(function(b){return function(c){c=c+parseFloat(a);c=c<0?0:c;b.setVolume(c>1?1:c)}}(this))};minplayer.players.base.prototype.setVolume=function(a){this.trigger("volumeupdate",a)};minplayer.players.base.prototype.getVolume=function(a){return this.volume.get(a)};minplayer.players.base.prototype.getCurrentTime=function(a){return this.currentTime.get(a)};minplayer.players.base.prototype.getDuration=function(a){return this.duration.get(a)}; +minplayer.players.base.prototype.getBytesStart=function(a){return this.bytesStart.get(a)};minplayer.players.base.prototype.getBytesLoaded=function(a){return this.bytesLoaded.get(a)};minplayer.players.base.prototype.getBytesTotal=function(a){return this.bytesTotal.get(a)};minplayer=minplayer||{};minplayer.players=minplayer.players||{};minplayer.players.html5=function(a,b,c){minplayer.players.base.call(this,a,b,c)};minplayer.players.html5.prototype=new minplayer.players.base; +minplayer.players.html5.prototype.constructor=minplayer.players.html5;minplayer.players.html5.getPriority=function(){return 10}; +minplayer.players.html5.canPlay=function(a){switch(a.mimetype){case "video/ogg":return!!minplayer.playTypes.videoOGG;case "video/mp4":case "video/x-mp4":case "video/m4v":case "video/x-m4v":return!!minplayer.playTypes.videoH264;case "video/x-webm":case "video/webm":case "application/octet-stream":return!!minplayer.playTypes.videoWEBM;case "audio/ogg":return!!minplayer.playTypes.audioOGG;case "audio/mpeg":return!!minplayer.playTypes.audioMP3;case "audio/mp4":return!!minplayer.playTypes.audioMP4;default:return false}}; +minplayer.players.html5.prototype.construct=function(){minplayer.players.base.prototype.construct.call(this);if(this.player){this.player.addEventListener("abort",function(a){return function(){a.trigger("abort")}}(this),false);this.player.addEventListener("loadstart",function(a){return function(){a.onReady()}}(this),false);this.player.addEventListener("loadeddata",function(a){return function(){a.onLoaded()}}(this),false);this.player.addEventListener("loadedmetadata",function(a){return function(){a.onLoaded()}}(this), +false);this.player.addEventListener("canplaythrough",function(a){return function(){a.onLoaded()}}(this),false);this.player.addEventListener("ended",function(a){return function(){a.onComplete()}}(this),false);this.player.addEventListener("pause",function(a){return function(){a.onPaused()}}(this),false);this.player.addEventListener("play",function(a){return function(){a.onPlaying()}}(this),false);this.player.addEventListener("playing",function(a){return function(){a.onPlaying()}}(this),false);this.player.addEventListener("error", +function(a){return function(){a.trigger("error","An error occured - "+this.error.code)}}(this),false);this.player.addEventListener("waiting",function(a){return function(){a.onWaiting()}}(this),false);this.player.addEventListener("durationchange",function(a){return function(){a.duration.set(this.duration);a.trigger("durationchange",{duration:this.duration})}}(this),false);this.player.addEventListener("progress",function(a){return function(b){a.bytesTotal.set(b.total);a.bytesLoaded.set(b.loaded)}}(this), +false);this.onReady()}};minplayer.players.html5.prototype.playerFound=function(){return this.display.find(this.mediaFile.type).length>0};minplayer.players.html5.prototype.create=function(){minplayer.players.base.prototype.create.call(this);var a=jQuery(document.createElement(this.mediaFile.type)).attr(this.options.attributes).append(jQuery(document.createElement("source")).attr({src:this.mediaFile.path}));a.eq(0)[0].setAttribute("width","100%");a.eq(0)[0].setAttribute("height","100%");return a}; +minplayer.players.html5.prototype.getPlayer=function(){return this.elements.media.eq(0)[0]};minplayer.players.html5.prototype.load=function(a){if(a){var b=this.elements.media.attr("src");b||(b=jQuery("source",this.elements.media).eq(0).attr("src"));if(b!=a.path){b='';this.elements.media.removeAttr("src").empty().html(b)}}minplayer.players.base.prototype.load.call(this,a)}; +minplayer.players.html5.prototype.play=function(){minplayer.players.base.prototype.play.call(this);this.isReady()&&this.player.play()};minplayer.players.html5.prototype.pause=function(){minplayer.players.base.prototype.pause.call(this);this.isReady()&&this.player.pause()};minplayer.players.html5.prototype.stop=function(){minplayer.players.base.prototype.stop.call(this);if(this.isReady()){this.player.pause();this.player.src=""}}; +minplayer.players.html5.prototype.seek=function(a){minplayer.players.base.prototype.seek.call(this,a);if(this.isReady())this.player.currentTime=a};minplayer.players.html5.prototype.setVolume=function(a){minplayer.players.base.prototype.setVolume.call(this,a);if(this.isReady())this.player.volume=a};minplayer.players.html5.prototype.getVolume=function(a){this.isReady()&&a(this.player.volume)};minplayer.players.html5.prototype.getDuration=function(a){this.isReady()&&a(this.player.duration)}; +minplayer.players.html5.prototype.getCurrentTime=function(a){this.isReady()&&a(this.player.currentTime)}; +minplayer.players.html5.prototype.getBytesLoaded=function(a){if(this.isReady()){var b=0;if(this.bytesLoaded.value)b=this.bytesLoaded.value;else if(this.player.buffered&&this.player.buffered.length>0&&this.player.buffered.end&&this.player.duration)b=this.player.buffered.end(0);else if(this.player.bytesTotal!=void 0&&this.player.bytesTotal>0&&this.player.bufferedBytes!=void 0)b=this.player.bufferedBytes;a(b)}}; +minplayer.players.html5.prototype.getBytesTotal=function(a){if(this.isReady()){var b=0;if(this.bytesTotal.value)b=this.bytesTotal.value;else if(this.player.buffered&&this.player.buffered.length>0&&this.player.buffered.end&&this.player.duration)b=this.player.duration;else if(this.player.bytesTotal!=void 0&&this.player.bytesTotal>0&&this.player.bufferedBytes!=void 0)b=this.player.bytesTotal;a(b)}};minplayer=minplayer||{};minplayer.players=minplayer.players||{}; +minplayer.players.flash=function(a,b,c){minplayer.players.base.call(this,a,b,c)};minplayer.players.flash.prototype=new minplayer.players.base;minplayer.players.flash.prototype.constructor=minplayer.players.flash;minplayer.players.flash.getPriority=function(){return 0};minplayer.players.flash.canPlay=function(){return false}; +minplayer.players.flash.getFlash=function(a){var b=window.location.protocol;b.charAt(b.length-1)==":"&&(b=b.substring(0,b.length-1));var c=jQuery.param(a.flashvars),d;d=' ');d=d+''+ +('');d=d+('');d=d+''+('')+(''};minplayer.players.flash.prototype.playerFound=function(){return this.display.find('object[playerType="flash"]').length>0};minplayer.players.flash.prototype.getPlayer=function(){return jQuery(jQuery.browser.msie?"object":"embed",this.display).eq(0)[0]};minplayer=minplayer||{};minplayer.players=minplayer.players||{};minplayer.players.minplayer=function(a,b,c){minplayer.players.flash.call(this,a,b,c)}; +minplayer.players.minplayer.prototype=new minplayer.players.flash;minplayer.players.minplayer.prototype.constructor=minplayer.players.minplayer;window.onFlashPlayerReady=function(a){if(a=minplayer.get(a,"media"))a.onReady()};window.onFlashPlayerUpdate=function(a,b){var c=minplayer.get(a,"media");if(c)c.onMediaUpdate(b)};window.onFlashPlayerDebug=function(a){minplayer.console.log(a)};minplayer.players.minplayer.getPriority=function(){return 1}; +minplayer.players.minplayer.canPlay=function(a){switch(a.mimetype){case "video/mp4":case "video/x-mp4":case "video/m4v":case "video/x-m4v":case "video/x-webm":case "video/webm":case "application/octet-stream":case "video/quicktime":case "video/3gpp2":case "video/3gpp":case "application/x-shockwave-flash":case "audio/mpeg":case "audio/mp4":case "audio/aac":case "audio/vnd.wave":case "audio/x-ms-wma":return true;default:return false}}; +minplayer.players.minplayer.prototype.create=function(){this.options=jQuery.extend({swfplayer:"flash/minplayer.swf"},this.options);minplayer.players.flash.prototype.create.call(this);return minplayer.players.flash.getFlash({swf:this.options.swfplayer,id:this.options.id+"_player",width:this.options.width,height:"100%",flashvars:{id:this.options.id,debug:this.options.debug,config:"nocontrols",file:this.mediaFile.path,autostart:this.options.autoplay},wmode:this.options.wmode})}; +minplayer.players.minplayer.prototype.onMediaUpdate=function(a){switch(a){case "mediaMeta":this.onLoaded();break;case "mediaPlaying":this.onPlaying();break;case "mediaPaused":this.onPaused();break;case "mediaComplete":this.onComplete()}};minplayer.players.minplayer.prototype.load=function(a){minplayer.players.flash.prototype.load.call(this,a);a&&this.isReady()&&this.player.loadMedia(a.path,a.stream)}; +minplayer.players.minplayer.prototype.play=function(){minplayer.players.flash.prototype.play.call(this);this.isReady()&&this.player.playMedia()};minplayer.players.minplayer.prototype.pause=function(){minplayer.players.flash.prototype.pause.call(this);this.isReady()&&this.player.pauseMedia()};minplayer.players.minplayer.prototype.stop=function(){minplayer.players.flash.prototype.stop.call(this);this.isReady()&&this.player.stopMedia()}; +minplayer.players.minplayer.prototype.seek=function(a){minplayer.players.flash.prototype.seek.call(this,a);this.isReady()&&this.player.seekMedia(a)};minplayer.players.minplayer.prototype.setVolume=function(a){minplayer.players.flash.prototype.setVolume.call(this,a);this.isReady()&&this.player.setVolume(a)};minplayer.players.minplayer.prototype.getVolume=function(a){this.isReady()&&a(this.player.getVolume())}; +minplayer.players.minplayer.prototype.getDuration=function(a){if(this.isReady()){var b=this.player.getDuration();b?a(b):this.poll(function(c){return function(){(b=c.player.getDuration())&&a(b);return!b}}(this),1E3)}};minplayer.players.minplayer.prototype.getCurrentTime=function(a){this.isReady()&&a(this.player.getCurrentTime())};minplayer.players.minplayer.prototype.getBytesLoaded=function(a){this.isReady()&&a(this.player.getMediaBytesLoaded())}; +minplayer.players.minplayer.prototype.getBytesTotal=function(a){this.isReady()&&a(this.player.getMediaBytesTotal())};minplayer=minplayer||{};minplayer.players=minplayer.players||{};minplayer.players.youtube=function(a,b,c){this.quality="default";minplayer.players.base.call(this,a,b,c)};minplayer.players.youtube.prototype=new minplayer.players.base;minplayer.players.youtube.prototype.constructor=minplayer.players.youtube;minplayer.players.youtube.getPriority=function(){return 10}; +minplayer.players.youtube.canPlay=function(a){return a.mimetype==="video/youtube"?true:a.path.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i)===0};minplayer.players.youtube.getMediaId=function(a){var b=/^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i;return a.path.search(b)===0?a.path.match(b)[2]:a.path}; +minplayer.players.youtube.prototype.register=function(){window.onYouTubePlayerAPIReady=function(){jQuery.each(minplayer.get(null,"player"),function(a,b){if(b.currentPlayer=="youtube")b.media.player=new YT.Player(a+"-player",{events:{onReady:function(a){b.media.onReady(a)},onStateChange:function(a){b.media.onPlayerStateChange(a)},onPlaybackQualityChange:function(a){b.media.onQualityChange(a)},onError:function(a){b.media.onError(a)}}})})}}; +minplayer.players.youtube.prototype.setPlayerState=function(a){switch(a){case YT.PlayerState.BUFFERING:this.onWaiting();break;case YT.PlayerState.PAUSED:this.onPaused();break;case YT.PlayerState.PLAYING:this.onPlaying();break;case YT.PlayerState.ENDED:this.onComplete()}};minplayer.players.youtube.prototype.onReady=function(){minplayer.players.base.prototype.onReady.call(this);this.onLoaded()}; +minplayer.players.youtube.prototype.playerFound=function(){return this.display.find("iframe#"+this.options.id+"-player").length>0};minplayer.players.youtube.prototype.onPlayerStateChange=function(a){this.setPlayerState(a.data)};minplayer.players.youtube.prototype.onQualityChange=function(a){this.quality=a.data};minplayer.players.youtube.prototype.hasPlayLoader=function(){return true}; +minplayer.players.youtube.prototype.create=function(){minplayer.players.base.prototype.create.call(this);var a=document.createElement("script");a.src="http://www.youtube.com/player_api?enablejsapi=1";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);this.register();a=document.createElement("iframe");a.setAttribute("id",this.options.id+"-player");a.setAttribute("type","text/html");a.setAttribute("width","100%");a.setAttribute("height","100%");a.setAttribute("frameborder", +"0");var b="http://www.youtube.com/embed/"+(this.mediaFile.id+"?"),c=location.protocol,c=c+("//"+location.hostname),c=c+(location.port&&":"+location.port),b=b+jQuery.param({wmode:"opaque",controls:0,enablejsapi:1,origin:c,autoplay:this.options.autoplay,loop:this.options.loop});a.setAttribute("src",b);return a};minplayer.players.youtube.prototype.load=function(a){minplayer.players.base.prototype.load.call(this,a);a&&this.isReady()&&this.player.loadVideoById(a.id,0,this.quality)}; +minplayer.players.youtube.prototype.play=function(){minplayer.players.base.prototype.play.call(this);this.isReady()&&this.player.playVideo()};minplayer.players.youtube.prototype.pause=function(){minplayer.players.base.prototype.pause.call(this);this.isReady()&&this.player.pauseVideo()};minplayer.players.youtube.prototype.stop=function(){minplayer.players.base.prototype.stop.call(this);this.isReady()&&this.player.stopVideo()}; +minplayer.players.youtube.prototype.seek=function(a){minplayer.players.base.prototype.seek.call(this,a);this.isReady()&&this.player.seekTo(a,true)};minplayer.players.youtube.prototype.setVolume=function(a){minplayer.players.base.prototype.setVolume.call(this,a);this.isReady()&&this.player.setVolume(a*100)};minplayer.players.youtube.prototype.getVolume=function(a){this.isReady()&&a(this.player.getVolume())};minplayer.players.youtube.prototype.getDuration=function(a){this.isReady()&&a(this.player.getDuration())}; +minplayer.players.youtube.prototype.getCurrentTime=function(a){this.isReady()&&a(this.player.getCurrentTime())};minplayer.players.youtube.prototype.getBytesStart=function(a){this.isReady()&&a(this.player.getVideoStartBytes())};minplayer.players.youtube.prototype.getBytesLoaded=function(a){this.isReady()&&a(this.player.getVideoBytesLoaded())};minplayer.players.youtube.prototype.getBytesTotal=function(a){this.isReady()&&a(this.player.getVideoBytesTotal())};minplayer=minplayer||{}; +minplayer.players=minplayer.players||{};minplayer.players.vimeo=function(a,b,c){minplayer.players.base.call(this,a,b,c)};minplayer.players.vimeo.prototype=new minplayer.players.base;minplayer.players.vimeo.prototype.constructor=minplayer.players.vimeo;minplayer.players.vimeo.getPriority=function(){return 10};minplayer.players.vimeo.canPlay=function(a){return a.mimetype==="video/vimeo"?true:a.path.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i)===0}; +minplayer.players.vimeo.getMediaId=function(a){var b=/^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i;return a.path.search(b)===0?a.path.match(b)[3]:a.path};minplayer.players.vimeo.prototype.reset=function(){minplayer.players.base.prototype.reset.call(this)}; +minplayer.players.vimeo.prototype.create=function(){minplayer.players.base.prototype.create.call(this);var a=document.createElement("script");a.src="http://a.vimeocdn.com/js/froogaloop2.min.js";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);var c=document.createElement("iframe");c.setAttribute("id",this.options.id+"-player");c.setAttribute("type","text/html");c.setAttribute("width","100%");c.setAttribute("height","100%");c.setAttribute("frameborder","0");a="http://player.vimeo.com/video/"+ +(this.mediaFile.id+"?");a=a+jQuery.param({wmode:"opaque",api:1,player_id:this.options.id+"-player",title:0,byline:0,portrait:0,autoplay:this.options.autoplay,loop:this.options.loop});c.setAttribute("src",a);this.poll(function(a){return function(){if(window.Froogaloop){a.player=window.Froogaloop(c);a.player.addEvent("ready",function(){a.onReady()})}return!window.Froogaloop}}(this),200);this.trigger("loadstart");return c}; +minplayer.players.vimeo.prototype.onReady=function(){this.player.addEvent("loadProgress",function(a){return function(b){a.duration.set(parseFloat(b.duration));a.bytesLoaded.set(b.bytesLoaded);a.bytesTotal.set(b.bytesTotal)}}(this));this.player.addEvent("playProgress",function(a){return function(b){a.duration.set(parseFloat(b.duration));a.currentTime.set(parseFloat(b.seconds))}}(this));this.player.addEvent("play",function(a){return function(){a.onPlaying()}}(this));this.player.addEvent("pause",function(a){return function(){a.onPaused()}}(this)); +this.player.addEvent("finish",function(a){return function(){a.onComplete()}}(this));minplayer.players.base.prototype.onReady.call(this);this.onLoaded()};minplayer.players.vimeo.prototype.playerFound=function(){return this.display.find("iframe#"+this.options.id+"-player").length>0};minplayer.players.vimeo.prototype.play=function(){minplayer.players.base.prototype.play.call(this);this.isReady()&&this.player.api("play")}; +minplayer.players.vimeo.prototype.pause=function(){minplayer.players.base.prototype.pause.call(this);this.isReady()&&this.player.api("pause")};minplayer.players.vimeo.prototype.stop=function(){minplayer.players.base.prototype.stop.call(this);this.isReady()&&this.player.api("unload")};minplayer.players.vimeo.prototype.seek=function(a){minplayer.players.base.prototype.seek.call(this,a);this.isReady()&&this.player.api("seekTo",a)}; +minplayer.players.vimeo.prototype.setVolume=function(a){minplayer.players.base.prototype.setVolume.call(this,a);if(this.isReady()){this.volume.set(a);this.player.api("setVolume",a)}};minplayer.players.vimeo.prototype.getVolume=function(a){this.player.api("getVolume",function(b){a(b)})};minplayer.players.vimeo.prototype.getDuration=function(a){this.isReady()&&(this.duration.value?a(this.duration.value):this.player.api("getDuration",function(b){a(b)}))};minplayer=minplayer||{}; +minplayer.controller=function(a,b){minplayer.display.call(this,"controller",a,b)};minplayer.controller.prototype=new minplayer.display;minplayer.controller.prototype.constructor=minplayer.controller;minplayer.formatTime=function(a){var a=a||0,b=0,c=0,d=0,e="",d=Math.floor(a/3600),a=a-d*3600,c=Math.floor(a/60),b=Math.floor((a-c*60)%60);d&&(e=e+(""+d)+":");return{time:e+(c>=10?""+c:"0"+c)+":"+(b>=10?""+b:"0"+b),units:""}}; +minplayer.controller.prototype.getElements=function(){var a=minplayer.display.prototype.getElements.call(this);return jQuery.extend(a,{play:null,pause:null,fullscreen:null,seek:null,progress:null,volume:null,timer:null})}; +minplayer.controller.prototype.construct=function(){minplayer.display.prototype.construct.call(this);this.dragging=false;if(this.elements.seek)this.seekBar=this.elements.seek.slider({range:"min"});if(this.elements.volume)this.volumeBar=this.elements.volume.slider({range:"min",orientation:"vertical"});this.get("player",function(a){this.elements.fullscreen&&this.elements.fullscreen.unbind().bind("click",function(){a.toggleFullScreen()}).css({pointer:"hand"})});this.get("media",function(a){if(this.elements.pause){this.elements.pause.unbind().bind("click", +function(b){return function(c){c.preventDefault();b.playPause(false,a)}}(this));a.bind("pause",function(a){return function(){a.setPlayPause(true)}}(this))}if(this.elements.play){this.elements.play.unbind().bind("click",function(b){return function(c){c.preventDefault();b.playPause(true,a)}}(this));a.bind("playing",function(a){return function(){a.setPlayPause(false)}}(this))}if(this.elements.duration){a.bind("durationchange",function(a){return function(c,d){a.setTimeString("duration",d.duration)}}(this)); +a.getDuration(function(a){return function(c){a.setTimeString("duration",c)}}(this))}this.elements.progress&&a.bind("progress",function(a){return function(c,d){a.elements.progress.width((d.total?d.loaded/d.total*100:0)+"%")}}(this));(this.seekBar||this.elements.timer)&&a.bind("timeupdate",function(a){return function(c,d){if(!a.dragging){var e=0;d.duration&&(e=d.currentTime/d.duration*100);a.seekBar&&a.seekBar.slider("option","value",e);a.setTimeString("timer",d.currentTime)}}}(this));this.seekBar&& +this.seekBar.slider({start:function(a){return function(){a.dragging=true}}(this),stop:function(b){return function(c,d){b.dragging=false;a.getDuration(function(b){a.seek(d.value/100*b)})}}(this),slide:function(b){return function(c,d){a.getDuration(function(c){c=d.value/100*c;b.dragging||a.seek(c);b.setTimeString("timer",c)})}}(this)});if(this.volumeBar){this.volumeBar.slider({slide:function(b,c){a.setVolume(c.value/100)}});a.bind("volumeupdate",function(a){return function(c,d){a.volumeBar.slider("option", +"value",d*100)}}(this));a.getVolume(function(a){return function(c){a.volumeBar.slider("option","value",c*100)}}(this))}});this.ready()};minplayer.controller.prototype.setPlayPause=function(a){this.elements.play&&this.elements.play.css("display",a?"inherit":"none");this.elements.pause&&this.elements.pause.css("display",a?"none":"inherit")};minplayer.controller.prototype.playPause=function(a,b){var c=a?"play":"pause";this.display.trigger(c);this.setPlayPause(!a);if(b)b[c]()}; +minplayer.controller.prototype.setTimeString=function(a,b){this.elements[a]&&this.elements[a].text(minplayer.formatTime(b).time)}; diff --git a/minplayer/bin/minplayer.js b/minplayer/bin/minplayer.js new file mode 100644 index 00000000..16950e28 --- /dev/null +++ b/minplayer/bin/minplayer.js @@ -0,0 +1,4167 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +// Private function to check a single element's play type. +function checkPlayType(elem, playType) { + if ((typeof elem.canPlayType) === 'function') { + if (typeof playType === 'object') { + var i = playType.length; + var mimetype = ''; + while (i--) { + mimetype = checkPlayType(elem, playType[i]); + if (!!mimetype) { + break; + } + } + return mimetype; + } + else { + var canPlay = elem.canPlayType(playType); + if (('no' !== canPlay) && ('' !== canPlay)) { + return playType; + } + } + } + return ''; +} + +/** + * @constructor + * @class This class is used to define the types of media that can be played + * within the browser. + *

+ * Usage: + *


+ *   var playTypes = new minplayer.compatibility();
+ *
+ *   if (playTypes.videoOGG) {
+ *     console.log("This browser can play OGG video");
+ *   }
+ *
+ *   if (playTypes.videoH264) {
+ *     console.log("This browser can play H264 video");
+ *   }
+ *
+ *   if (playTypes.videoWEBM) {
+ *     console.log("This browser can play WebM video");
+ *   }
+ *
+ *   if (playTypes.audioOGG) {
+ *     console.log("This browser can play OGG audio");
+ *   }
+ *
+ *   if (playTypes.audioMP3) {
+ *     console.log("This browser can play MP3 audio");
+ *   }
+ *
+ *   if (playTypes.audioMP4) {
+ *     console.log("This browser can play MP4 audio");
+ *   }
+ * 
+ */ +minplayer.compatibility = function() { + var elem = null; + + // Create a video element. + elem = document.createElement('video'); + + /** Can play OGG video */ + this.videoOGG = checkPlayType(elem, 'video/ogg'); + + /** Can play H264 video */ + this.videoH264 = checkPlayType(elem, [ + 'video/mp4', + 'video/h264' + ]); + + /** Can play WEBM video */ + this.videoWEBM = checkPlayType(elem, [ + 'video/x-webm', + 'video/webm', + 'application/octet-stream' + ]); + + // Create an audio element. + elem = document.createElement('audio'); + + /** Can play audio OGG */ + this.audioOGG = checkPlayType(elem, 'audio/ogg'); + + /** Can play audio MP3 */ + this.audioMP3 = checkPlayType(elem, 'audio/mpeg'); + + /** Can play audio MP4 */ + this.audioMP4 = checkPlayType(elem, 'audio/mp4'); +}; + +if (!minplayer.playTypes) { + + /** The compatible playtypes for this browser. */ + minplayer.playTypes = new minplayer.compatibility(); +} +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class This class keeps track of asynchronous get requests for certain + * variables within the player. + */ +minplayer.async = function() { + + /** The final value of this asynchronous variable. */ + this.value = null; + + /** The queue of callbacks to call when this value is determined. */ + this.queue = []; +}; + +/** + * Retrieve the value of this variable. + * + * @param {function} callback The function to call when the value is determined. + * @param {function} pollValue The poll function to try and get the value every + * 1 second if the value is not set. + */ +minplayer.async.prototype.get = function(callback, pollValue) { + + // If the value is set, then immediately call the callback, otherwise, just + // add it to the queue when the variable is set. + if (this.value !== null) { + callback(this.value); + } + else { + + // Add this callback to the queue. + this.queue.push(callback); + } +}; + +/** + * Sets the value of an asynchronous value. + * + * @param {void} val The value to set. + */ +minplayer.async.prototype.set = function(val) { + + // Set the value. + this.value = val; + + // Get the callback queue length. + var i = this.queue.length; + + // Iterate through all the callbacks and call them. + if (i) { + while (i--) { + this.queue[i](val); + } + + // Reset the queue. + this.queue = []; + } +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class This is a class used to keep track of flag states + * which is used to control the busy cursor, big play button, among other + * items in which multiple components can have an interest in hiding or + * showing a single element on the screen. + * + *

+ * Usage: + *


+ *   // Declare a flags variable.
+ *   var flags = new minplayer.flags();
+ *
+ *   // Set the flag based on two components interested in the flag.
+ *   flags.setFlag("component1", true);
+ *   flags.setFlag("component2", true);
+ *
+ *   // Print out the value of the flags. ( Prints 3 )
+ *   console.log(flags.flags);
+ *
+ *   // Now unset a single components flag.
+ *   flags.setFlag("component1", false);
+ *
+ *   // Print out the value of the flags.
+ *   console.log(flags.flags);
+ *
+ *   // Unset the other components flag.
+ *   flags.setFlag("component2", false);
+ *
+ *   // Print out the value of the flags.
+ *   console.log(flags.flags);
+ * 
+ *

+ */ +minplayer.flags = function() { + + /** The flag. */ + this.flag = 0; + + /** Id map to reference id with the flag index. */ + this.ids = {}; + + /** The number of flags. */ + this.numFlags = 0; +}; + +/** + * Sets a flag based on boolean logic operators. + * + * @param {string} id The id of the controller interested in this flag. + * @param {boolean} value The value of this flag ( true or false ). + */ +minplayer.flags.prototype.setFlag = function(id, value) { + + // Define this id if it isn't present. + if (!this.ids.hasOwnProperty(id)) { + this.ids[id] = this.numFlags; + this.numFlags++; + } + + // Use binary operations to keep track of the flag state + if (value) { + this.flag |= (1 << this.ids[id]); + } + else { + this.flag &= ~(1 << this.ids[id]); + } +}; +/** The minplayer namespace. */ +minplayer = minplayer || {}; + +/** Static array to keep track of all plugins. */ +minplayer.plugins = minplayer.plugins || {}; + +/** Static array to keep track of queues. */ +minplayer.queue = minplayer.queue || []; + +/** Mutex lock to keep multiple triggers from occuring. */ +minplayer.lock = false; + +/** + * @constructor + * @class The base class for all plugins. + * + * @param {string} name The name of this plugin. + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.plugin = function(name, context, options, queue) { + + /** The name of this plugin. */ + this.name = name; + + /** The ready flag. */ + this.pluginReady = false; + + /** The options for this plugin. */ + this.options = options || {}; + + /** The event queue. */ + this.queue = queue || {}; + + /** Keep track of already triggered events. */ + this.triggered = {}; + + /** Create a queue lock. */ + this.lock = false; + + // Only call the constructor if we have a context. + if (context) { + + /** Keep track of the context. */ + this.context = context; + + // Construct this plugin. + this.construct(); + } +}; + +/** + * The constructor which is called once the context is set. + * Any class deriving from the plugin class should place all context + * dependant functionality within this function instead of the standard + * constructor function since it is called on object derivation as well + * as object creation. + */ +minplayer.plugin.prototype.construct = function() { + + // Adds this as a plugin. + this.addPlugin(); +}; + +/** + * Destructor. + */ +minplayer.plugin.prototype.destroy = function() { + + // Unbind all events. + this.unbind(); +}; + +/** + * Creates a new plugin within this context. + * + * @param {string} name The name of the plugin you wish to create. + * @param {object} base The base object for this plugin. + * @param {object} context The context which you would like to create. + * @return {object} The new plugin object. + */ +minplayer.plugin.prototype.create = function(name, base, context) { + var plugin = null; + + // Make sure we have a base object. + base = base || 'minplayer'; + + // Make sure there is a context. + context = context || this.display; + + // See if this plugin exists within this object. + if (window[base][name]) { + + // Set the plugin. + plugin = window[base][name]; + + // See if a template version of the plugin exists. + if (plugin[this.options.template]) { + + plugin = plugin[this.options.template]; + } + + // Create the new plugin. + return new plugin(context, this.options); + } + + return null; +}; + +/** + * Plugins should call this method when they are ready. + */ +minplayer.plugin.prototype.ready = function() { + + // Keep this plugin from triggering multiple ready events. + if (!this.pluginReady) { + + // Set the ready flag. + this.pluginReady = true; + + // Now trigger that I am ready. + this.trigger('ready'); + + // Check the queue. + this.checkQueue(); + } +}; + +/** + * Adds a new plugin to this player. + * + * @param {string} name The name of this plugin. + * @param {object} plugin A new plugin object, derived from media.plugin. + */ +minplayer.plugin.prototype.addPlugin = function(name, plugin) { + name = name || this.name; + plugin = plugin || this; + + // Make sure the plugin is valid. + if (plugin.isValid()) { + + // If the plugins for this instance do not exist. + if (!minplayer.plugins[this.options.id]) { + + // Initialize the plugins. + minplayer.plugins[this.options.id] = {}; + } + + // Add this plugin. + minplayer.plugins[this.options.id][name] = plugin; + } +}; + +/** + * Create a polling timer. + * + * @param {function} callback The function to call when you poll. + * @param {integer} interval The interval you would like to poll. + */ +minplayer.plugin.prototype.poll = function(callback, interval) { + setTimeout((function(context) { + return function callLater() { + if (callback.call(context)) { + setTimeout(callLater, interval); + } + }; + })(this), interval); +}; + +/** + * Gets a plugin by name and calls callback when it is ready. + * + * @param {string} plugin The plugin of the plugin. + * @param {function} callback Called when the plugin is ready. + * @return {object} The plugin if no callback is provided. + */ +minplayer.plugin.prototype.get = function(plugin, callback) { + + // If they pass just a callback, then return all plugins when ready. + if (typeof plugin === 'function') { + callback = plugin; + plugin = null; + } + + // Return the minplayer.get equivalent. + return minplayer.get.call(this, this.options.id, plugin, callback); +}; + +/** + * Check the queue and execute it. + */ +minplayer.plugin.prototype.checkQueue = function() { + + // Initialize our variables. + var q = null, i = 0, check = false, newqueue = []; + + // Set the lock. + minplayer.lock = true; + + // Iterate through all the queues. + var length = minplayer.queue.length; + for (i = 0; i < length; i++) { + + // Get the queue. + q = minplayer.queue[i]; + + // Now check to see if this queue is about us. + check = !q.id && !q.plugin; + check |= (q.plugin == this.name) && (!q.id || (q.id == this.options.id)); + + // If the check passes... + if (check) { + check = minplayer.bind.call( + q.context, + q.event, + this.options.id, + this.name, + q.callback + ); + } + + // Add the queue back if it doesn't check out. + if (!check) { + + // Add this back to the queue. + newqueue.push(q); + } + } + + // Set the old queue to the new queue. + minplayer.queue = newqueue; + + // Release the lock. + minplayer.lock = false; +}; + +/** + * Trigger a media event. + * + * @param {string} type The event type. + * @param {object} data The event data object. + * @return {object} The plugin object. + */ +minplayer.plugin.prototype.trigger = function(type, data) { + data = data || {}; + data.plugin = this; + + // Add this to our triggered array. + this.triggered[type] = data; + + // Check to make sure the queue for this type exists. + if (this.queue.hasOwnProperty(type)) { + + var i = 0, queue = {}; + + // Iterate through all the callbacks in this queue. + for (i in this.queue[type]) { + + // Setup the event object, and call the callback. + queue = this.queue[type][i]; + queue.callback({target: this, data: queue.data}, data); + } + } + + // Return the plugin object. + return this; +}; + +/** + * Bind to a media event. + * + * @param {string} type The event type. + * @param {object} data The data to bind with the event. + * @param {function} fn The callback function. + * @return {object} The plugin object. + **/ +minplayer.plugin.prototype.bind = function(type, data, fn) { + + // Allow the data to be the callback. + if (typeof data === 'function') { + fn = data; + data = null; + } + + // You must bind to a specific event and have a callback. + if (!type || !fn) { + return; + } + + // Initialize the queue for this type. + this.queue[type] = this.queue[type] || []; + + // Unbind any existing equivalent events. + this.unbind(type, fn); + + // Now add this event to the queue. + this.queue[type].push({ + callback: fn, + data: data + }); + + // Now see if this event has already been triggered. + if (this.triggered[type]) { + + // Go ahead and trigger the event. + fn({target: this, data: data}, this.triggered[type]); + } + + // Return the plugin. + return this; +}; + +/** + * Unbind a media event. + * + * @param {string} type The event type. + * @param {function} fn The callback function. + * @return {object} The plugin object. + **/ +minplayer.plugin.prototype.unbind = function(type, fn) { + + // If this is locked then try again after 10ms. + if (this.lock) { + setTimeout((function(plugin) { + return function() { + plugin.unbind(type, fn); + }; + })(this), 10); + } + + // Set the lock. + this.lock = true; + + if (!type) { + this.queue = {}; + } + else if (!fn) { + this.queue[type] = []; + } + else { + // Iterate through all the callbacks and search for equal callbacks. + var i = 0, queue = {}; + for (i in this.queue[type]) { + if (this.queue[type][i].callback === fn) { + queue = this.queue[type].splice(1, 1); + delete queue; + } + } + } + + // Reset the lock. + this.lock = false; + + // Return the plugin. + return this; +}; + +/** + * Adds an item to the queue. + * + * @param {object} context The context which this is called within. + * @param {string} event The event to trigger on. + * @param {string} id The player ID. + * @param {string} plugin The name of the plugin. + * @param {function} callback Called when the event occurs. + */ +minplayer.addQueue = function(context, event, id, plugin, callback) { + + // See if it is locked... + if (!minplayer.lock) { + minplayer.queue.push({ + context: context, + id: id, + event: event, + plugin: plugin, + callback: callback + }); + } + else { + + // If so, then try again after 10 milliseconds. + setTimeout(function() { + minplayer.addQueue(context, id, event, plugin, callback); + }, 10); + } +}; + +/** + * Binds an event to a plugin instance, and if it doesn't exist, then caches + * it for a later time. + * + * @param {string} event The event to trigger on. + * @param {string} id The player ID. + * @param {string} plugin The name of the plugin. + * @param {function} callback Called when the event occurs. + * @return {boolean} If the bind was successful. + * @this The object in context who called this method. + */ +minplayer.bind = function(event, id, plugin, callback) { + + // If no callback exists, then just return false. + if (!callback) { + return false; + } + + // Get the plugins. + var inst = minplayer.plugins; + + // See if this plugin exists. + if (inst[id][plugin]) { + + // If so, then bind the event to this plugin. + inst[id][plugin].bind(event, {context: this}, function(event, data) { + callback.call(event.data.context, data.plugin); + }); + return true; + } + + // If not, then add it to the queue to bind later. + minplayer.addQueue(this, event, id, plugin, callback); + + // Return that this wasn't handled. + return false; +}; + +/** + * The main API for minPlayer. + * + * Provided that this function takes three parameters, there are 8 different + * ways to use this api. + * + * id (0x100) - You want a specific player. + * plugin (0x010) - You want a specific plugin. + * callback (0x001) - You only want it when it is ready. + * + * 000 - You want all plugins from all players, ready or not. + * + * var plugins = minplayer.get(); + * + * 001 - You want all plugins from all players, but only when ready. + * + * minplayer.get(function(plugin) { + * // Code goes here. + * }); + * + * 010 - You want a specific plugin from all players, ready or not... + * + * var medias = minplayer.get(null, 'media'); + * + * 011 - You want a specific plugin from all players, but only when ready. + * + * minplayer.get('player', function(player) { + * // Code goes here. + * }); + * + * 100 - You want all plugins from a specific player, ready or not. + * + * var plugins = minplayer.get('player_id'); + * + * 101 - You want all plugins from a specific player, but only when ready. + * + * minplayer.get('player_id', null, function(plugin) { + * // Code goes here. + * }); + * + * 110 - You want a specific plugin from a specific player, ready or not. + * + * var plugin = minplayer.get('player_id', 'media'); + * + * 111 - You want a specific plugin from a specific player, only when ready. + * + * minplayer.get('player_id', 'media', function(media) { + * // Code goes here. + * }); + * + * @this The context in which this function was called. + * @param {string} id The ID of the widget to get the plugins from. + * @param {string} plugin The name of the plugin. + * @param {function} callback Called when the plugin is ready. + * @return {object} The plugin object if it is immediately available. + */ +minplayer.get = function(id, plugin, callback) { + + // Normalize the arguments for a better interface. + if (typeof id === 'function') { + callback = id; + plugin = id = null; + } + + if (typeof plugin === 'function') { + callback = plugin; + plugin = id; + id = null; + } + + // Make sure the callback is a callback. + callback = (typeof callback === 'function') ? callback : null; + + // Get the plugins. + var plugins = minplayer.plugins; + + // 0x000 + if (!id && !plugin && !callback) { + return plugins; + } + // 0x100 + else if (id && !plugin && !callback) { + return plugins[id]; + } + // 0x110 + else if (id && plugin && !callback) { + return plugins[id][plugin]; + } + // 0x111 + else if (id && plugin && callback) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + // 0x011 + else if (!id && plugin && callback) { + for (var id in plugins) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + } + // 0x101 + else if (id && !plugin && callback) { + for (var plugin in plugins[id]) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + } + // 0x010 + else if (!id && plugin && !callback) { + var plugin_types = {}; + for (var id in plugins) { + if (plugins.hasOwnProperty(id) && plugins[id].hasOwnProperty(plugin)) { + plugin_types[id] = plugins[id][plugin]; + } + } + return plugin_types; + } + // 0x001 + else { + for (var id in plugins) { + for (var plugin in plugins[id]) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + } + } +}; +/** The minplayer namespace. */ +minplayer = minplayer || {}; + +/** + * @constructor + * @extends minplayer.plugin + * @class Base class used to provide the display and options for any component + * deriving from this class. Components who derive are expected to provide + * the elements that they define by implementing the getElements method. + * + * @param {string} name The name of this plugin. + * @param {object} context The jQuery context this component resides. + * @param {object} options The options for this component. + * @param {object} queue The event queue to pass events around. + */ +minplayer.display = function(name, context, options, queue) { + + // See if we allow resize on this display. + this.allowResize = false; + + if (context) { + + // Set the display. + this.display = this.getDisplay(context, options); + } + + // Derive from plugin + minplayer.plugin.call(this, name, context, options, queue); +}; + +/** Derive from minplayer.plugin. */ +minplayer.display.prototype = new minplayer.plugin(); + +/** Reset the constructor. */ +minplayer.display.prototype.constructor = minplayer.display; + +/** + * Returns the display for this component. + * + * @param {object} context The original context. + * @param {object} options The options for this component. + * @return {object} The jQuery context for this display. + */ +minplayer.display.prototype.getDisplay = function(context, options) { + return jQuery(context); +}; + +/** + * @see minplayer.plugin.construct + */ +minplayer.display.prototype.construct = function() { + + // Call the plugin constructor. + minplayer.plugin.prototype.construct.call(this); + + // Get the display elements. + this.elements = this.getElements(); + + // Only do this if they allow resize for this display. + if (this.allowResize) { + + // Set the resize timeout and this pointer. + var resizeTimeout = 0; + + // Add a handler to trigger a resize event. + jQuery(window).resize((function(display) { + return function() { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(function() { + display.onResize(); + }, 200); + }; + })(this)); + } +}; + +/** + * Called when the window resizes. + */ +minplayer.display.prototype.onResize = function() { +}; + +/** + * Gets the full screen element. + * + * @return {object} The display to be used for full screen support. + */ +minplayer.display.prototype.fullScreenElement = function() { + return this.display; +}; + +/** + * Called if you would like for your display item to show then hide. + * + * @param {object} element The element you would like to hide or show. + * @param {number} timeout The timeout to hide and show. + */ +minplayer.showThenHide = function(element, timeout) { + + // Ensure we have a timeout. + timeout = timeout || 5000; + + // If this has not yet been configured. + if (!element.showTimer) { + + // Bind when they move the mouse. + jQuery(document).bind('mousemove', function() { + minplayer.showThenHide(element, timeout); + }); + } + + // Clear the timeout, and then setup the show then hide functionality. + clearTimeout(element.showTimer); + + // Show the display. + element.show(); + + // Set a timer to hide it after the timeout. + element.showTimer = setTimeout(function() { + element.hide('slow'); + }, timeout); +}; + +/** + * Make this display element go fullscreen. + * + * @param {boolean} full Tell the player to go into fullscreen or not. + */ +minplayer.display.prototype.fullscreen = function(full) { + var isFull = this.isFullScreen(); + var element = this.fullScreenElement(); + if (isFull && !full) { + element.removeClass('fullscreen'); + if (screenfull) { + screenfull.exit(); + } + this.trigger('fullscreen', false); + } + else if (!isFull && full) { + element.addClass('fullscreen'); + if (screenfull) { + screenfull.request(element[0]); + screenfull.onchange = (function(display) { + return function(e) { + if (!screenfull.isFullscreen) { + display.fullscreen(false); + } + }; + })(this); + } + this.trigger('fullscreen', true); + } +}; + +/** + * Toggle fullscreen. + */ +minplayer.display.prototype.toggleFullScreen = function() { + this.fullscreen(!this.isFullScreen()); +}; + +/** + * Checks to see if we are in fullscreen mode. + * + * @return {boolean} TRUE - fullscreen, FALSE - otherwise. + */ +minplayer.display.prototype.isFullScreen = function() { + return this.fullScreenElement().hasClass('fullscreen'); +}; + +/** + * Returns a scaled rectangle provided a ratio and the container rect. + * + * @param {number} ratio The width/height ratio of what is being scaled. + * @param {object} rect The bounding rectangle for scaling. + * @return {object} The Rectangle object of the scaled rectangle. + */ +minplayer.display.prototype.getScaledRect = function(ratio, rect) { + var scaledRect = {}; + scaledRect.x = rect.x ? rect.x : 0; + scaledRect.y = rect.y ? rect.y : 0; + scaledRect.width = rect.width ? rect.width : 0; + scaledRect.height = rect.height ? rect.height : 0; + if (ratio) { + if ((rect.width / rect.height) > ratio) { + scaledRect.height = rect.height; + scaledRect.width = Math.floor(rect.height * ratio); + } + else { + scaledRect.height = Math.floor(rect.width / ratio); + scaledRect.width = rect.width; + } + scaledRect.x = Math.floor((rect.width - scaledRect.width) / 2); + scaledRect.y = Math.floor((rect.height - scaledRect.height) / 2); + } + return scaledRect; +}; + +/** + * Returns all the jQuery elements that this component uses. + * + * @return {object} An object which defines all the jQuery elements that + * this component uses. + */ +minplayer.display.prototype.getElements = function() { + return {}; +}; + +/** + * Returns if this component is valid and exists within the DOM. + * + * @return {boolean} TRUE if the plugin display is valid. + */ +minplayer.display.prototype.isValid = function() { + return (this.display.length > 0); +}; + +/** + * From https://github.com/sindresorhus/screenfull.js + */ +/*global Element:true*/ +(function(window, document) { + 'use strict'; + var methods = (function() { + var methodMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenchange', + 'fullscreen', + 'fullscreenElement' + ], + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitIsFullScreen', + 'webkitCurrentFullScreenElement' + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozfullscreenchange', + 'mozFullScreen', + 'mozFullScreenElement' + ] + ]; + for (var i = 0, l = methodMap.length; i < l; i++) { + var val = methodMap[i]; + if (val[1] in document) { + return val; + } + } + })(); + + if (!methods) { + return window.screenfull = false; + } + + var keyboardAllowed = 'ALLOW_KEYBOARD_INPUT' in Element; + + var screenfull = { + init: function() { + document.addEventListener(methods[2], function(e) { + screenfull.isFullscreen = document[methods[3]]; + screenfull.element = document[methods[4]]; + screenfull.onchange(e); + }); + return this; + }, + isFullscreen: document[methods[3]], + element: document[methods[4]], + request: function(elem) { + elem = elem || document.documentElement; + elem[methods[0]](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); + // Work around Safari 5.1 bug: reports support for keyboard in fullscreen + // even though it doesn't. + if (!document.isFullscreen) { + elem[methods[0]](); + } + }, + exit: function() { + document[methods[1]](); + }, + toggle: function(elem) { + if (this.isFullscreen) { + this.exit(); + } else { + this.request(elem); + } + }, + onchange: function() {} + }; + + window.screenfull = screenfull.init(); +})(window, document); +// Add a way to instanciate using jQuery prototype. +if (!jQuery.fn.minplayer) { + + /** + * @constructor + * + * Define a jQuery minplayer prototype. + * + * @param {object} options The options for this jQuery prototype. + * @return {Array} jQuery object. + */ + jQuery.fn.minplayer = function(options) { + return jQuery(this).each(function() { + options = options || {}; + options.id = options.id || $(this).attr('id') || Math.random(); + if (!minplayer.plugins[options.id]) { + options.template = options.template || 'default'; + if (minplayer[options.template]) { + new minplayer[options.template](jQuery(this), options); + } + else { + new minplayer(jQuery(this), options); + } + } + }); + }; +} + +/** + * @constructor + * @extends minplayer.display + * @class The core media player class which governs the media player + * functionality. + * + *

Usage: + *


+ *
+ *   // Create a media player.
+ *   var player = jQuery("#player").minplayer({
+ *
+ *   });
+ *
+ * 
+ *

+ * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer = jQuery.extend(function(context, options) { + + // Derive from display + minplayer.display.call(this, 'player', context, options); +}, minplayer); + +/** Derive from minplayer.display. */ +minplayer.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.prototype.constructor = minplayer; + +/** + * Define a way to debug. + */ +minplayer.console = console || {log: function(data) {}}; + +/** + * @see minplayer.plugin.construct + */ +minplayer.prototype.construct = function() { + + // Allow them to provide arguments based off of the DOM attributes. + jQuery.each(this.context[0].attributes, (function(player) { + return function(index, attr) { + player.options[attr.name] = player.options[attr.name] || attr.value; + }; + })(this)); + + // Make sure we provide default options... + this.options = jQuery.extend({ + id: 'player', + build: false, + wmode: 'transparent', + preload: true, + autoplay: false, + loop: false, + width: '100%', + height: '350px', + debug: false, + volume: 80, + files: [], + file: '', + preview: '', + attributes: {} + }, this.options); + + // Call the minplayer display constructor. + minplayer.display.prototype.construct.call(this); + + /** The controller for this player. */ + this.controller = this.create('controller'); + + /** The play loader for this player. */ + this.playLoader = this.create('playLoader'); + + /** Variable to store the current media player. */ + this.currentPlayer = 'html5'; + + // Add key events to the window. + this.addKeyEvents(); + + // Now load these files. + this.load(this.getFiles()); + + // Add the player events. + this.addEvents(); + + // The player is ready. + this.ready(); +}; + +/** + * We need to bind to events we are interested in. + */ +minplayer.prototype.addEvents = function() { + minplayer.get.call(this, this.options.id, null, (function(player) { + return function(plugin) { + + // Bind to the error event. + plugin.bind('error', function(event, data) { + + // If an error occurs within the html5 media player, then try + // to fall back to the flash player. + if (player.currentPlayer == 'html5') { + player.options.file.player = 'minplayer'; + player.loadPlayer(); + } + else { + player.error(data); + } + }); + + // Bind to the fullscreen event. + plugin.bind('fullscreen', function(event, data) { + player.resize(); + }); + }; + })(this)); +}; + +/** + * Sets an error on the player. + * + * @param {string} error The error to display on the player. + */ +minplayer.prototype.error = function(error) { + error = error || ''; + if (this.elements.error) { + + // Set the error text. + this.elements.error.text(error); + if (error) { + this.elements.error.show(); + } + else { + this.elements.error.hide(); + } + } +}; + +/** + * Adds key events to the player. + */ +minplayer.prototype.addKeyEvents = function() { + jQuery(document).bind('keydown', (function(player) { + return function(event) { + switch (event.keyCode) { + case 113: // ESC + case 27: // Q + if (player.isFullScreen()) { + player.fullscreen(false); + } + break; + } + }; + })(this)); +}; + +/** + * Returns all the media files available for this player. + * + * @return {array} All the media files for this player. + */ +minplayer.prototype.getFiles = function() { + var files = []; + var mediaSrc = null; + + // Get the files involved... + if (this.elements.media) { + mediaSrc = this.elements.media.attr('src'); + if (mediaSrc) { + files.push({'path': mediaSrc}); + } + jQuery('source', this.elements.media).each(function() { + files.push({ + 'path': jQuery(this).attr('src'), + 'mimetype': jQuery(this).attr('type'), + 'codecs': jQuery(this).attr('codecs') + }); + }); + } + + return files; +}; + +/** + * Returns the full media player object. + * @param {array} files An array of files to chose from. + * @return {object} The best media file to play in the current browser. + */ +minplayer.prototype.getMediaFile = function(files) { + + // If there are no files then return null. + if (!files) { + return null; + } + + // If the file is a single string, then return the file object. + if (typeof files === 'string') { + return new minplayer.file({'path': files}); + } + + // If the file is already a file object then just return. + if (files.path || files.id) { + return new minplayer.file(files); + } + + // Add the files and get the best player to play. + var i = files.length, bestPriority = 0, mFile = null, file = null; + while (i--) { + file = files[i]; + + // Get the minplayer file object. + if (typeof file === 'string') { + file = new minplayer.file({'path': file}); + } + else { + file = new minplayer.file(file); + } + + // Determine the best file for this browser. + if (file.priority > bestPriority) { + mFile = file; + } + } + + // Return the best minplayer file. + return mFile; +}; + +/** + * Loads a media player based on the current file. + */ +minplayer.prototype.loadPlayer = function() { + + // Do nothing if there isn't a file. + if (!this.options.file) { + this.error('No media found.'); + return; + } + + if (!this.options.file.player) { + this.error('Cannot play media: ' + this.options.file.mimetype); + return; + } + + // Reset the error. + this.error(); + + // Only destroy if the current player is different than the new player. + var player = this.options.file.player.toString(); + + // If there isn't media or if the players are different. + if (!this.media || (player !== this.currentPlayer)) { + + // Set the current media player. + this.currentPlayer = player; + + // Do nothing if we don't have a display. + if (!this.elements.display) { + this.error('No media display found.'); + return; + } + + // Destroy the current media. + var queue = {}; + if (this.media) { + queue = this.media.queue; + this.media.destroy(); + } + + // Get the class name and create the new player. + pClass = minplayer.players[this.options.file.player]; + + // Create the new media player. + this.options.mediaelement = this.elements.media; + this.media = new pClass(this.elements.display, this.options, queue); + + // Now get the media when it is ready. + this.get('media', (function(player) { + return function(media) { + + // Load the media. + media.load(player.options.file); + }; + })(this)); + } + // If the media object already exists... + else if (this.media) { + + // Now load the different media file. + this.media.load(this.options.file); + } +}; + +/** + * Load a set of files or a single file for the media player. + * + * @param {array} files An array of files to chose from to load. + */ +minplayer.prototype.load = function(files) { + + // Set the id and class. + var id = '', pClass = ''; + + // If no file was provided, then get it. + this.options.files = files || this.options.files; + this.options.file = this.getMediaFile(this.options.files); + + // Now load the player. + this.loadPlayer(); +}; + +/** + * Called when the player is resized. + */ +minplayer.prototype.resize = function() { + + // Call onRezie for each plugin. + this.get(function(plugin) { + plugin.onResize(); + }); +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class A class to easily handle images. + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer.image = function(context, options) { + + // Determine if the image is loaded. + this.loaded = false; + + // The image loader. + this.loader = null; + + // The ratio of the image. + this.ratio = 0; + + // The image element. + this.img = null; + + // Derive from display + minplayer.display.call(this, 'image', context, options); +}; + +/** Derive from minplayer.display. */ +minplayer.image.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.image.prototype.constructor = minplayer.image; + +/** + * @see minplayer.plugin.construct + */ +minplayer.image.prototype.construct = function() { + + // Say we need to resize. + this.allowResize = true; + + // Call the media display constructor. + minplayer.display.prototype.construct.call(this); + + // Set the container to not show any overflow... + this.display.css('overflow', 'hidden'); + + /** The loader for the image. */ + this.loader = new Image(); + + /** Register for when the image is loaded within the loader. */ + this.loader.onload = (function(image) { + return function() { + image.loaded = true; + image.ratio = (image.loader.width / image.loader.height); + image.resize(); + image.trigger('loaded'); + }; + })(this); + + // We are now ready. + this.ready(); +}; + +/** + * Loads an image. + * + * @param {string} src The source of the image to load. + */ +minplayer.image.prototype.load = function(src) { + + // First clear the previous image. + this.clear(function() { + + // Create the new image, and append to the display. + this.display.empty(); + this.img = jQuery(document.createElement('img')).attr({src: ''}).hide(); + this.display.append(this.img); + this.loader.src = src; + }); +}; + +/** + * Clears an image. + * + * @param {function} callback Called when the image is done clearing. + */ +minplayer.image.prototype.clear = function(callback) { + this.loaded = false; + if (this.img) { + this.img.fadeOut((function(image) { + return function() { + image.img.attr('src', ''); + image.loader.src = ''; + $(this).remove(); + callback.call(image); + }; + })(this)); + } + else { + callback.call(this); + } +}; + +/** + * Resize the image provided a width and height or nothing. + * + * @param {integer} width (optional) The width of the container. + * @param {integer} height (optional) The height of the container. + */ +minplayer.image.prototype.resize = function(width, height) { + width = width || this.display.width(); + height = height || this.display.height(); + if (width && height && this.loaded) { + + // Get the scaled rectangle. + var rect = this.getScaledRect(this.ratio, { + width: width, + height: height + }); + + // Now set this image to the new size. + if (this.img) { + this.img.attr('src', this.loader.src).css({ + marginLeft: rect.x, + marginTop: rect.y, + width: rect.width, + height: rect.height + }); + } + + // Show the container. + this.img.fadeIn(); + } +}; + +/** + * @see minplayer.display#onResize + */ +minplayer.image.prototype.onResize = function() { + + // Resize the image to fit. + this.resize(); +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class A wrapper class used to provide all the data necessary to control an + * individual file within this media player. + * + * @param {object} file A media file object with minimal required information. + */ +minplayer.file = function(file) { + this.duration = file.duration || 0; + this.bytesTotal = file.bytesTotal || 0; + this.quality = file.quality || 0; + this.stream = file.stream || ''; + this.path = file.path || ''; + this.codecs = file.codecs || ''; + + // These should be provided, but just in case... + this.extension = file.extension || this.getFileExtension(); + this.mimetype = file.mimetype || file.filemime || this.getMimeType(); + this.type = file.type || this.getType(); + + // Fail safe to try and guess the mimetype and media type. + if (!this.type) { + this.mimetype = this.getMimeType(); + this.type = this.getType(); + } + + // Get the player. + this.player = file.player || this.getBestPlayer(); + this.priority = file.priority || this.getPriority(); + this.id = file.id || this.getId(); +}; + +/** + * Returns the best player for the job. + * + * @return {string} The best player to play the media file. + */ +minplayer.file.prototype.getBestPlayer = function() { + var bestplayer = null, bestpriority = 0; + jQuery.each(minplayer.players, (function(file) { + return function(name, player) { + var priority = player.getPriority(); + if (player.canPlay(file) && (priority > bestpriority)) { + bestplayer = name; + bestpriority = priority; + } + }; + })(this)); + return bestplayer; +}; + +/** + * The priority of this file is determined by the priority of the best + * player multiplied by the priority of the mimetype. + * + * @return {integer} The priority of the media file. + */ +minplayer.file.prototype.getPriority = function() { + var priority = 1; + if (this.player) { + priority = minplayer.players[this.player].getPriority(); + } + switch (this.mimetype) { + case 'video/x-webm': + case 'video/webm': + case 'application/octet-stream': + return priority * 10; + case 'video/mp4': + case 'audio/mp4': + case 'audio/mpeg': + return priority * 9; + case 'video/ogg': + case 'audio/ogg': + case 'video/quicktime': + return priority * 8; + default: + return priority * 5; + } +}; + +/** + * Returns the file extension of the file path. + * + * @return {string} The file extension. + */ +minplayer.file.prototype.getFileExtension = function() { + return this.path.substring(this.path.lastIndexOf('.') + 1).toLowerCase(); +}; + +/** + * Returns the proper mimetype based off of the extension. + * + * @return {string} The mimetype of the file based off of extension. + */ +minplayer.file.prototype.getMimeType = function() { + switch (this.extension) { + case 'mp4': case 'm4v': case 'flv': case 'f4v': + return 'video/mp4'; + case'webm': + return 'video/webm'; + case 'ogg': case 'ogv': + return 'video/ogg'; + case '3g2': + return 'video/3gpp2'; + case '3gpp': + case '3gp': + return 'video/3gpp'; + case 'mov': + return 'video/quicktime'; + case'swf': + return 'application/x-shockwave-flash'; + case 'oga': + return 'audio/ogg'; + case 'mp3': + return 'audio/mpeg'; + case 'm4a': case 'f4a': + return 'audio/mp4'; + case 'aac': + return 'audio/aac'; + case 'wav': + return 'audio/vnd.wave'; + case 'wma': + return 'audio/x-ms-wma'; + default: + return 'unknown'; + } +}; + +/** + * The type of media this is: video or audio. + * + * @return {string} "video" or "audio" based on what the type of media this + * is. + */ +minplayer.file.prototype.getType = function() { + switch (this.mimetype) { + case 'video/mp4': + case 'video/webm': + case 'application/octet-stream': + case 'video/x-webm': + case 'video/ogg': + case 'video/3gpp2': + case 'video/3gpp': + case 'video/quicktime': + return 'video'; + case 'audio/mp3': + case 'audio/mp4': + case 'audio/ogg': + case 'audio/mpeg': + return 'audio'; + default: + return ''; + } +}; + +/** + * Returns the ID for this media file. + * + * @return {string} The id for this media file which is provided by the player. + */ +minplayer.file.prototype.getId = function() { + var player = minplayer.players[this.player]; + return (player && player.getMediaId) ? player.getMediaId(this) : ''; +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The play loader base class, which is used to control the busy + * cursor, big play button, and the opaque background which shows when the + * player is paused. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer.playLoader = function(context, options) { + + // Define the flags that control the busy cursor. + this.busy = new minplayer.flags(); + + // Define the flags that control the big play button. + this.bigPlay = new minplayer.flags(); + + /** The preview image. */ + this.preview = null; + + // Derive from display + minplayer.display.call(this, 'playLoader', context, options); +}; + +/** Derive from minplayer.display. */ +minplayer.playLoader.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.playLoader.prototype.constructor = minplayer.playLoader; + +/** + * The constructor. + */ +minplayer.playLoader.prototype.construct = function() { + + // Call the media display constructor. + minplayer.display.prototype.construct.call(this); + + // Get the media plugin. + this.get('media', function(media) { + + // Only bind if this player does not have its own play loader. + if (!media.hasPlayLoader()) { + + // Get the poster image. + if (!this.options.preview) { + this.options.preview = media.elements.media.attr('poster'); + } + + // Reset the media's poster image. + media.elements.media.attr('poster', ''); + + // Load the preview image. + this.loadPreview(); + + // Trigger a play event when someone clicks on the controller. + if (this.elements.bigPlay) { + this.elements.bigPlay.unbind().bind('click', function(event) { + event.preventDefault(); + jQuery(this).hide(); + media.play(); + }); + } + + // Bind to the player events to control the play loader. + media.unbind('loadstart').bind('loadstart', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', true); + playLoader.bigPlay.setFlag('media', true); + if (playLoader.preview) { + playLoader.elements.preview.show(); + } + playLoader.checkVisibility(); + }; + })(this)); + media.bind('waiting', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', true); + playLoader.checkVisibility(); + }; + })(this)); + media.bind('loadeddata', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', false); + playLoader.checkVisibility(); + }; + })(this)); + media.bind('playing', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', false); + playLoader.bigPlay.setFlag('media', false); + if (playLoader.preview) { + playLoader.elements.preview.hide(); + } + playLoader.checkVisibility(); + }; + })(this)); + media.bind('pause', (function(playLoader) { + return function(event) { + playLoader.bigPlay.setFlag('media', true); + playLoader.checkVisibility(); + }; + })(this)); + } + else { + + // Hide the busy cursor. + if (this.elements.busy) { + this.elements.busy.unbind().hide(); + } + + // Hide the big play button. + if (this.elements.bigPlay) { + this.elements.bigPlay.unbind().hide(); + } + + // Hide the display. + this.display.unbind().hide(); + } + }); + + // We are now ready. + this.ready(); +}; + +/** + * Loads the preview image. + */ +minplayer.playLoader.prototype.loadPreview = function() { + + // If the preview element exists. + if (this.elements.preview) { + + // If there is a preview to show... + if (this.options.preview) { + + // Say that this has a preview. + this.elements.preview.addClass('has-preview').show(); + + // Create a new preview image. + this.preview = new minplayer.image(this.elements.preview, this.options); + + // Create the image. + this.preview.load(this.options.preview); + } + else { + + // Hide the preview. + this.elements.preview.hide(); + } + } +}; + +/** + * Hide or show certain elements based on the state of the busy and big play + * button. + */ +minplayer.playLoader.prototype.checkVisibility = function() { + + // Hide or show the busy cursor based on the flags. + if (this.busy.flag) { + this.elements.busy.show(); + } + else { + this.elements.busy.hide(); + } + + // Hide or show the big play button based on the flags. + if (this.bigPlay.flag) { + this.elements.bigPlay.show(); + } + else { + this.elements.bigPlay.hide(); + } + + // Show the control either flag is set. + if (this.bigPlay.flag || this.busy.flag) { + this.display.show(); + } + + // Hide the whole control if both flags are 0. + if (!this.bigPlay.flag && !this.busy.flag) { + this.display.hide(); + } +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The base media player class where all media players derive from. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.base = function(context, options, queue) { + + // Derive from display + minplayer.display.call(this, 'media', context, options, queue); +}; + +/** Derive from minplayer.display. */ +minplayer.players.base.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.players.base.prototype.constructor = minplayer.players.base; + +/** + * @see minplayer.display.getElements + * @this minplayer.players.base + * @return {object} The elements for this display. + */ +minplayer.players.base.prototype.getElements = function() { + var elements = minplayer.display.prototype.getElements.call(this); + return jQuery.extend(elements, { + media: this.options.mediaelement + }); +}; + +/** + * Get the priority of this media player. + * + * @return {number} The priority of this media player. + */ +minplayer.players.base.getPriority = function() { + return 0; +}; + +/** + * Returns the ID for the media being played. + * + * @param {object} file A {@link minplayer.file} object. + * @return {string} The ID for the provided media. + */ +minplayer.players.base.getMediaId = function(file) { + return ''; +}; + +/** + * Determine if we can play the media file. + * + * @param {object} file A {@link minplayer.file} object. + * @return {boolean} If this player can play this media type. + */ +minplayer.players.base.canPlay = function(file) { + return false; +}; + +/** + * @see minplayer.plugin.construct + * @this minplayer.players.base + */ +minplayer.players.base.prototype.construct = function() { + + // Call the media display constructor. + minplayer.display.prototype.construct.call(this); + + // Clear the media player. + this.clear(); + + /** The currently loaded media file. */ + this.mediaFile = this.options.file; + + // Get the player display object. + if (!this.playerFound()) { + + // Remove the media element if found + if (this.elements.media) { + this.elements.media.remove(); + } + + // Create a new media player element. + this.elements.media = jQuery(this.create()); + this.display.html(this.elements.media); + } + + // Get the player object... + this.player = this.getPlayer(); + + // Set the focus of the element based on if they click in or outside of it. + jQuery(document).bind('click', (function(player) { + return function(event) { + if (jQuery(event.target).closest('#' + player.options.id).length == 0) { + player.hasFocus = false; + } + else { + player.hasFocus = true; + } + }; + })(this)); + + // Bind to key events... + jQuery(document).bind('keydown', (function(player) { + return function(event) { + if (player.hasFocus) { + event.preventDefault(); + switch (event.keyCode) { + case 32: // SPACE + case 179: // GOOGLE play/pause button. + if (player.playing) { + player.pause(); + } + else { + player.play(); + } + break; + case 38: // UP + player.setVolumeRelative(0.1); + break; + case 40: // DOWN + player.setVolumeRelative(-0.1); + break; + case 37: // LEFT + case 227: // GOOGLE TV REW + player.seekRelative(-0.05); + break; + case 39: // RIGHT + case 228: // GOOGLE TV FW + player.seekRelative(0.05); + break; + } + } + }; + })(this)); +}; + +/** + * @see minplayer.plugin.destroy. + */ +minplayer.players.base.prototype.destroy = function() { + minplayer.plugin.prototype.destroy.call(this); + this.clear(); +}; + +/** + * Clears the media player. + */ +minplayer.players.base.prototype.clear = function() { + + // Reset the ready flag. + this.playerReady = false; + + // Reset the player. + this.reset(); + + // If the player exists, then unbind all events. + if (this.player) { + jQuery(this.player).unbind(); + } +}; + +/** + * Resets all variables. + */ +minplayer.players.base.prototype.reset = function() { + + // The duration of the player. + this.duration = new minplayer.async(); + + // The current play time of the player. + this.currentTime = new minplayer.async(); + + // The amount of bytes loaded in the player. + this.bytesLoaded = new minplayer.async(); + + // The total amount of bytes for the media. + this.bytesTotal = new minplayer.async(); + + // The bytes that the download started with. + this.bytesStart = new minplayer.async(); + + // The current volume of the player. + this.volume = new minplayer.async(); + + // Reset focus. + this.hasFocus = false; + + // We are not playing. + this.playing = false; + + // We are not loading. + this.loading = false; + + // Tell everyone else we reset. + this.trigger('pause'); + this.trigger('waiting'); + this.trigger('progress', {loaded: 0, total: 0, start: 0}); + this.trigger('timeupdate', {currentTime: 0, duration: 0}); +}; + +/** + * Called when the player is ready to recieve events and commands. + */ +minplayer.players.base.prototype.onReady = function() { + + // Only continue if we are not already ready. + if (this.playerReady) { + return; + } + + // Set the ready flag. + this.playerReady = true; + + // Set the volume to the default. + this.setVolume(this.options.volume / 100); + + // Setup the progress interval. + this.loading = true; + + // Create a poll to get the progress. + this.poll((function(player) { + return function() { + + // Only do this if the play interval is set. + if (player.loading) { + + // Get the bytes loaded asynchronously. + player.getBytesLoaded(function(bytesLoaded) { + + // Get the bytes total asynchronously. + player.getBytesTotal(function(bytesTotal) { + + // Trigger an event about the progress. + if (bytesLoaded || bytesTotal) { + + // Get the bytes start, but don't require it. + var bytesStart = 0; + player.getBytesStart(function(val) { + bytesStart = val; + }); + + // Trigger a progress event. + player.trigger('progress', { + loaded: bytesLoaded, + total: bytesTotal, + start: bytesStart + }); + + // Say we are not longer loading if they are equal. + if (bytesLoaded >= bytesTotal) { + player.loading = false; + } + } + }); + }); + } + + // Keep polling as long as its loading... + return player.loading; + }; + })(this), 1000); + + // We are now ready. + this.ready(); + + // Trigger that the load has started. + this.trigger('loadstart'); +}; + +/** + * Should be called when the media is playing. + */ +minplayer.players.base.prototype.onPlaying = function() { + + // Trigger an event that we are playing. + this.trigger('playing'); + + // Say that this player has focus. + this.hasFocus = true; + + // Set the playInterval to true. + this.playing = true; + + // Create a poll to get the timeupate. + this.poll((function(player) { + return function() { + + // Only do this if the play interval is set. + if (player.playing) { + + // Get the current time asyncrhonously. + player.getCurrentTime(function(currentTime) { + + // Get the duration asynchronously. + player.getDuration(function(duration) { + + // Convert these to floats. + currentTime = parseFloat(currentTime); + duration = parseFloat(duration); + + // Trigger an event about the progress. + if (currentTime || duration) { + + // Trigger an update event. + player.trigger('timeupdate', { + currentTime: currentTime, + duration: duration + }); + } + }); + }); + } + + // Keep polling as long as it is playing. + return player.playing; + }; + })(this), 1000); +}; + +/** + * Should be called when the media is paused. + */ +minplayer.players.base.prototype.onPaused = function() { + + // Trigger an event that we are paused. + this.trigger('pause'); + + // Remove focus. + this.hasFocus = false; + + // Say we are not playing. + this.playing = false; +}; + +/** + * Should be called when the media is complete. + */ +minplayer.players.base.prototype.onComplete = function() { + // Stop the intervals. + this.playing = false; + this.loading = false; + this.hasFocus = false; + this.trigger('ended'); +}; + +/** + * Should be called when the media is done loading. + */ +minplayer.players.base.prototype.onLoaded = function() { + this.trigger('loadeddata'); +}; + +/** + * Should be called when the player is waiting. + */ +minplayer.players.base.prototype.onWaiting = function() { + this.trigger('waiting'); +}; + +/** + * Called when an error occurs. + * + * @param {string} errorCode The error that was triggered. + */ +minplayer.players.base.prototype.onError = function(errorCode) { + this.hasFocus = false; + this.trigger('error', errorCode); +}; + +/** + * @see minplayer.players.base#isReady + * @return {boolean} Checks to see if the Flash is ready. + */ +minplayer.players.base.prototype.isReady = function() { + + // Return that the player is set and the ready flag is good. + return (this.player && this.playerReady); +}; + +/** + * Determines if the player should show the playloader. + * + * @return {bool} If this player implements its own playLoader. + */ +minplayer.players.base.prototype.hasPlayLoader = function() { + return false; +}; + +/** + * Returns if the media player is already within the DOM. + * + * @return {boolean} TRUE - if the player is in the DOM, FALSE otherwise. + */ +minplayer.players.base.prototype.playerFound = function() { + return false; +}; + +/** + * Creates the media player and inserts it in the DOM. + * + * @return {object} The media player entity. + */ +minplayer.players.base.prototype.create = function() { + this.reset(); + return null; +}; + +/** + * Returns the media player object. + * + * @return {object} The media player object. + */ +minplayer.players.base.prototype.getPlayer = function() { + return this.player; +}; + +/** + * Loads a new media player. + * + * @param {object} file A {@link minplayer.file} object. + */ +minplayer.players.base.prototype.load = function(file) { + + // Store the media file for future lookup. + var isString = (typeof this.mediaFile == 'string'); + var path = isString ? this.mediaFile : this.mediaFile.path; + if (file && (file.path != path)) { + this.reset(); + this.mediaFile = file; + } +}; + +/** + * Play the loaded media file. + */ +minplayer.players.base.prototype.play = function() { +}; + +/** + * Pause the loaded media file. + */ +minplayer.players.base.prototype.pause = function() { +}; + +/** + * Stop the loaded media file. + */ +minplayer.players.base.prototype.stop = function() { + this.playing = false; + this.loading = false; + this.hasFocus = false; +}; + +/** + * Seeks to relative position. + * + * @param {number} pos Relative position. -1 to 1 (percent), > 1 (seconds). + */ +minplayer.players.base.prototype.seekRelative = function(pos) { + + // Get the current time asyncrhonously. + this.getCurrentTime((function(player) { + return function(currentTime) { + + // Get the duration asynchronously. + player.getDuration(function(duration) { + + // Only do this if we have a duration. + if (duration) { + + // Get the position. + var seekPos = 0; + if ((pos > -1) && (pos < 1)) { + seekPos = (currentTime / duration) + parseFloat(pos); + } + else { + seekPos = (currentTime + parseFloat(pos)) / duration; + } + + // Set the seek value. + player.seek(seekPos); + } + }); + }; + })(this)); +}; + +/** + * Seek the loaded media. + * + * @param {number} pos The position to seek the minplayer. 0 to 1. + */ +minplayer.players.base.prototype.seek = function(pos) { +}; + +/** + * Set the volume of the loaded minplayer. + * + * @param {number} vol -1 to 1 - The relative amount to increase or decrease. + */ +minplayer.players.base.prototype.setVolumeRelative = function(vol) { + + // Get the volume + this.getVolume((function(player) { + return function(newVol) { + newVol += parseFloat(vol); + newVol = (newVol < 0) ? 0 : newVol; + newVol = (newVol > 1) ? 1 : newVol; + player.setVolume(newVol); + }; + })(this)); +}; + +/** + * Set the volume of the loaded minplayer. + * + * @param {number} vol The volume to set the media. 0 to 1. + */ +minplayer.players.base.prototype.setVolume = function(vol) { + this.trigger('volumeupdate', vol); +}; + +/** + * Get the volume from the loaded media. + * + * @param {function} callback Called when the volume is determined. + * @return {number} The volume of the media; 0 to 1. + */ +minplayer.players.base.prototype.getVolume = function(callback) { + return this.volume.get(callback); +}; + +/** + * Get the current time for the media being played. + * + * @param {function} callback Called when the time is determined. + * @return {number} The volume of the media; 0 to 1. + */ +minplayer.players.base.prototype.getCurrentTime = function(callback) { + return this.currentTime.get(callback); +}; + +/** + * Return the duration of the loaded media. + * + * @param {function} callback Called when the duration is determined. + * @return {number} The duration of the loaded media. + */ +minplayer.players.base.prototype.getDuration = function(callback) { + return this.duration.get(callback); +}; + +/** + * Return the start bytes for the loaded media. + * + * @param {function} callback Called when the start bytes is determined. + * @return {int} The bytes that were started. + */ +minplayer.players.base.prototype.getBytesStart = function(callback) { + return this.bytesStart.get(callback); +}; + +/** + * Return the bytes of media loaded. + * + * @param {function} callback Called when the bytes loaded is determined. + * @return {int} The amount of bytes loaded. + */ +minplayer.players.base.prototype.getBytesLoaded = function(callback) { + return this.bytesLoaded.get(callback); +}; + +/** + * Return the total amount of bytes. + * + * @param {function} callback Called when the bytes total is determined. + * @return {int} The total amount of bytes for this media. + */ +minplayer.players.base.prototype.getBytesTotal = function(callback) { + return this.bytesTotal.get(callback); +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The HTML5 media player implementation. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.html5 = function(context, options, queue) { + + // Derive players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.html5.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.html5.prototype.constructor = minplayer.players.html5; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.html5.getPriority = function() { + return 10; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.html5.canPlay = function(file) { + switch (file.mimetype) { + case 'video/ogg': + return !!minplayer.playTypes.videoOGG; + case 'video/mp4': + case 'video/x-mp4': + case 'video/m4v': + case 'video/x-m4v': + return !!minplayer.playTypes.videoH264; + case 'video/x-webm': + case 'video/webm': + case 'application/octet-stream': + return !!minplayer.playTypes.videoWEBM; + case 'audio/ogg': + return !!minplayer.playTypes.audioOGG; + case 'audio/mpeg': + return !!minplayer.playTypes.audioMP3; + case 'audio/mp4': + return !!minplayer.playTypes.audioMP4; + default: + return false; + } +}; + +/** + * @see minplayer.plugin.construct + */ +minplayer.players.html5.prototype.construct = function() { + + // Call base constructor. + minplayer.players.base.prototype.construct.call(this); + + // For the HTML5 player, we will just pass events along... + if (this.player) { + + this.player.addEventListener('abort', (function(player) { + return function() { + player.trigger('abort'); + }; + })(this), false); + this.player.addEventListener('loadstart', (function(player) { + return function() { + player.onReady(); + }; + })(this), false); + this.player.addEventListener('loadeddata', (function(player) { + return function() { + player.onLoaded(); + }; + })(this), false); + this.player.addEventListener('loadedmetadata', (function(player) { + return function() { + player.onLoaded(); + }; + })(this), false); + this.player.addEventListener('canplaythrough', (function(player) { + return function() { + player.onLoaded(); + }; + })(this), false); + this.player.addEventListener('ended', (function(player) { + return function() { + player.onComplete(); + }; + })(this), false); + this.player.addEventListener('pause', (function(player) { + return function() { + player.onPaused(); + }; + })(this), false); + this.player.addEventListener('play', (function(player) { + return function() { + player.onPlaying(); + }; + })(this), false); + this.player.addEventListener('playing', (function(player) { + return function() { + player.onPlaying(); + }; + })(this), false); + this.player.addEventListener('error', (function(player) { + return function() { + player.trigger('error', 'An error occured - ' + this.error.code); + }; + })(this), false); + this.player.addEventListener('waiting', (function(player) { + return function() { + player.onWaiting(); + }; + })(this), false); + this.player.addEventListener('durationchange', (function(player) { + return function() { + player.duration.set(this.duration); + player.trigger('durationchange', {duration: this.duration}); + }; + })(this), false); + this.player.addEventListener('progress', (function(player) { + return function(event) { + player.bytesTotal.set(event.total); + player.bytesLoaded.set(event.loaded); + }; + })(this), false); + + // Say we are ready. + this.onReady(); + } +}; + +/** + * @see minplayer.players.base#playerFound + * @return {boolean} TRUE - if the player is in the DOM, FALSE otherwise. + */ +minplayer.players.html5.prototype.playerFound = function() { + return (this.display.find(this.mediaFile.type).length > 0); +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.html5.prototype.create = function() { + minplayer.players.base.prototype.create.call(this); + var element = jQuery(document.createElement(this.mediaFile.type)) + .attr(this.options.attributes) + .append( + jQuery(document.createElement('source')).attr({ + 'src': this.mediaFile.path + }) + ); + + // Fix the fluid width and height. + element.eq(0)[0].setAttribute('width', '100%'); + element.eq(0)[0].setAttribute('height', '100%'); + return element; +}; + +/** + * @see minplayer.players.base#getPlayer + * @return {object} The media player object. + */ +minplayer.players.html5.prototype.getPlayer = function() { + return this.elements.media.eq(0)[0]; +}; + +/** + * @see minplayer.players.base#load + */ +minplayer.players.html5.prototype.load = function(file) { + + if (file) { + + // Get the current source. + var src = this.elements.media.attr('src'); + if (!src) { + src = jQuery('source', this.elements.media).eq(0).attr('src'); + } + + // If the source is different. + if (src != file.path) { + + // Change the source... + var code = ''; + this.elements.media.removeAttr('src').empty().html(code); + } + } + + // Always call the base first on load... + minplayer.players.base.prototype.load.call(this, file); +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.html5.prototype.play = function() { + minplayer.players.base.prototype.play.call(this); + if (this.isReady()) { + this.player.play(); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.html5.prototype.pause = function() { + minplayer.players.base.prototype.pause.call(this); + if (this.isReady()) { + this.player.pause(); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.html5.prototype.stop = function() { + minplayer.players.base.prototype.stop.call(this); + if (this.isReady()) { + this.player.pause(); + this.player.src = ''; + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.html5.prototype.seek = function(pos) { + minplayer.players.base.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.currentTime = pos; + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.html5.prototype.setVolume = function(vol) { + minplayer.players.base.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.player.volume = vol; + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.html5.prototype.getVolume = function(callback) { + if (this.isReady()) { + callback(this.player.volume); + } +}; + +/** + * @see minplayer.players.base#getDuration + */ +minplayer.players.html5.prototype.getDuration = function(callback) { + if (this.isReady()) { + callback(this.player.duration); + } +}; + +/** + * @see minplayer.players.base#getCurrentTime + */ +minplayer.players.html5.prototype.getCurrentTime = function(callback) { + if (this.isReady()) { + callback(this.player.currentTime); + } +}; + +/** + * @see minplayer.players.base#getBytesLoaded + */ +minplayer.players.html5.prototype.getBytesLoaded = function(callback) { + if (this.isReady()) { + var loaded = 0; + + // Check several different possibilities. + if (this.bytesLoaded.value) { + loaded = this.bytesLoaded.value; + } + else if (this.player.buffered && + this.player.buffered.length > 0 && + this.player.buffered.end && + this.player.duration) { + loaded = this.player.buffered.end(0); + } + else if (this.player.bytesTotal != undefined && + this.player.bytesTotal > 0 && + this.player.bufferedBytes != undefined) { + loaded = this.player.bufferedBytes; + } + + // Return the loaded amount. + callback(loaded); + } +}; + +/** + * @see minplayer.players.base#getBytesTotal + */ +minplayer.players.html5.prototype.getBytesTotal = function(callback) { + if (this.isReady()) { + + var total = 0; + + // Check several different possibilities. + if (this.bytesTotal.value) { + total = this.bytesTotal.value; + } + else if (this.player.buffered && + this.player.buffered.length > 0 && + this.player.buffered.end && + this.player.duration) { + total = this.player.duration; + } + else if (this.player.bytesTotal != undefined && + this.player.bytesTotal > 0 && + this.player.bufferedBytes != undefined) { + total = this.player.bytesTotal; + } + + // Return the loaded amount. + callback(total); + } +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The Flash media player class to control the flash fallback. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.flash = function(context, options, queue) { + + // Derive from players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.flash.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.flash.prototype.constructor = minplayer.players.flash; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.flash.getPriority = function() { + return 0; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.flash.canPlay = function(file) { + return false; +}; + +/** + * API to return the Flash player code provided params. + * + * @param {object} params The params used to populate the Flash code. + * @return {object} A Flash DOM element. + */ +minplayer.players.flash.getFlash = function(params) { + // Get the protocol. + var protocol = window.location.protocol; + if (protocol.charAt(protocol.length - 1) == ':') { + protocol = protocol.substring(0, protocol.length - 1); + } + + // Convert the flashvars object to a string... + var flashVars = jQuery.param(params.flashvars); + + // Set the codebase. + var codebase = protocol + '://fpdownload.macromedia.com'; + codebase += '/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0'; + + // Get the HTML flash object string. + var flash = ' '; + flash += ''; + flash += ''; + flash += ''; + flash += ''; + flash += ''; + flash += ''; + flash += ' 0); +}; + +/** + * @see minplayer.players.base#getPlayer + * @return {object} The media player object. + */ +minplayer.players.flash.prototype.getPlayer = function() { + // IE needs the object, everyone else just needs embed. + var object = jQuery.browser.msie ? 'object' : 'embed'; + return jQuery(object, this.display).eq(0)[0]; +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The Flash media player class to control the flash fallback. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.minplayer = function(context, options, queue) { + + // Derive from players flash. + minplayer.players.flash.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.flash. */ +minplayer.players.minplayer.prototype = new minplayer.players.flash(); + +/** Reset the constructor. */ +minplayer.players.minplayer.prototype.constructor = minplayer.players.minplayer; + +/** + * Called when the Flash player is ready. + * + * @param {string} id The media player ID. + */ +window.onFlashPlayerReady = function(id) { + var media = minplayer.get(id, 'media'); + if (media) { + media.onReady(); + } +}; + +/** + * Called when the Flash player updates. + * + * @param {string} id The media player ID. + * @param {string} eventType The event type that was triggered. + */ +window.onFlashPlayerUpdate = function(id, eventType) { + var media = minplayer.get(id, 'media'); + if (media) { + media.onMediaUpdate(eventType); + } +}; + +/** + * Used to debug from the Flash player to the browser console. + * + * @param {string} debug The debug string. + */ +window.onFlashPlayerDebug = function(debug) { + minplayer.console.log(debug); +}; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.minplayer.getPriority = function() { + return 1; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.minplayer.canPlay = function(file) { + switch (file.mimetype) { + case 'video/mp4': + case 'video/x-mp4': + case 'video/m4v': + case 'video/x-m4v': + case 'video/x-webm': + case 'video/webm': + case 'application/octet-stream': + case 'video/quicktime': + case 'video/3gpp2': + case 'video/3gpp': + case 'application/x-shockwave-flash': + case 'audio/mpeg': + case 'audio/mp4': + case 'audio/aac': + case 'audio/vnd.wave': + case 'audio/x-ms-wma': + return true; + + default: + return false; + } +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.minplayer.prototype.create = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + swfplayer: 'flash/minplayer.swf' + }, this.options); + + minplayer.players.flash.prototype.create.call(this); + + // The flash variables for this flash player. + var flashVars = { + 'id': this.options.id, + 'debug': this.options.debug, + 'config': 'nocontrols', + 'file': this.mediaFile.path, + 'autostart': this.options.autoplay + }; + + // Return a flash media player object. + return minplayer.players.flash.getFlash({ + swf: this.options.swfplayer, + id: this.options.id + '_player', + width: this.options.width, + height: '100%', + flashvars: flashVars, + wmode: this.options.wmode + }); +}; + +/** + * Called when the Flash player has an update. + * + * @param {string} eventType The event that was triggered in the player. + */ +minplayer.players.minplayer.prototype.onMediaUpdate = function(eventType) { + switch (eventType) { + case 'mediaMeta': + this.onLoaded(); + break; + case 'mediaPlaying': + this.onPlaying(); + break; + case 'mediaPaused': + this.onPaused(); + break; + case 'mediaComplete': + this.onComplete(); + break; + } +}; + +/** + * @see minplayer.players.base#load + */ +minplayer.players.minplayer.prototype.load = function(file) { + minplayer.players.flash.prototype.load.call(this, file); + if (file && this.isReady()) { + this.player.loadMedia(file.path, file.stream); + } +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.minplayer.prototype.play = function() { + minplayer.players.flash.prototype.play.call(this); + if (this.isReady()) { + this.player.playMedia(); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.minplayer.prototype.pause = function() { + minplayer.players.flash.prototype.pause.call(this); + if (this.isReady()) { + this.player.pauseMedia(); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.minplayer.prototype.stop = function() { + minplayer.players.flash.prototype.stop.call(this); + if (this.isReady()) { + this.player.stopMedia(); + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.minplayer.prototype.seek = function(pos) { + minplayer.players.flash.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.seekMedia(pos); + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.minplayer.prototype.setVolume = function(vol) { + minplayer.players.flash.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.player.setVolume(vol); + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.minplayer.prototype.getVolume = function(callback) { + if (this.isReady()) { + callback(this.player.getVolume()); + } +}; + +/** + * @see minplayer.players.flash#getDuration + */ +minplayer.players.minplayer.prototype.getDuration = function(callback) { + if (this.isReady()) { + + // Check to see if it is immediately available. + var duration = this.player.getDuration(); + if (duration) { + callback(duration); + } + else { + + // If not, then poll every second for the duration. + this.poll((function(player) { + return function() { + duration = player.player.getDuration(); + if (duration) { + callback(duration); + } + return !duration; + }; + })(this), 1000); + } + } +}; + +/** + * @see minplayer.players.base#getCurrentTime + */ +minplayer.players.minplayer.prototype.getCurrentTime = function(callback) { + if (this.isReady()) { + callback(this.player.getCurrentTime()); + } +}; + +/** + * @see minplayer.players.base#getBytesLoaded + */ +minplayer.players.minplayer.prototype.getBytesLoaded = function(callback) { + if (this.isReady()) { + callback(this.player.getMediaBytesLoaded()); + } +}; + +/** + * @see minplayer.players.base#getBytesTotal. + */ +minplayer.players.minplayer.prototype.getBytesTotal = function(callback) { + if (this.isReady()) { + callback(this.player.getMediaBytesTotal()); + } +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.players.base + * @class The YouTube media player. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.youtube = function(context, options, queue) { + + /** The quality of the YouTube stream. */ + this.quality = 'default'; + + // Derive from players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.youtube.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.youtube.prototype.constructor = minplayer.players.youtube; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.youtube.getPriority = function() { + return 10; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.youtube.canPlay = function(file) { + + // Check for the mimetype for youtube. + if (file.mimetype === 'video/youtube') { + return true; + } + + // If the path is a YouTube path, then return true. + return (file.path.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i) === 0); +}; + +/** + * Return the ID for a provided media file. + * + * @param {object} file A {@link minplayer.file} object. + * @return {string} The ID for the provided media. + */ +minplayer.players.youtube.getMediaId = function(file) { + var regex = /^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i; + if (file.path.search(regex) === 0) { + return file.path.match(regex)[2]; + } + else { + return file.path; + } +}; + +/** + * Register this youtube player so that multiple players can be present + * on the same page without event collision. + */ +minplayer.players.youtube.prototype.register = function() { + + /** + * Register the standard youtube api ready callback. + */ + window.onYouTubePlayerAPIReady = function() { + + // Iterate over each media player. + jQuery.each(minplayer.get(null, 'player'), function(id, player) { + + // Make sure this is the youtube player. + if (player.currentPlayer == 'youtube') { + + // Create a new youtube player object for this instance only. + var playerId = id + '-player'; + + // Set this players media. + player.media.player = new YT.Player(playerId, { + events: { + 'onReady': function(event) { + player.media.onReady(event); + }, + 'onStateChange': function(event) { + player.media.onPlayerStateChange(event); + }, + 'onPlaybackQualityChange': function(newQuality) { + player.media.onQualityChange(newQuality); + }, + 'onError': function(errorCode) { + player.media.onError(errorCode); + } + } + }); + } + }); + } +}; + +/** + * Translates the player state for the YouTube API player. + * + * @param {number} playerState The YouTube player state. + */ +minplayer.players.youtube.prototype.setPlayerState = function(playerState) { + switch (playerState) { + case YT.PlayerState.CUED: + break; + case YT.PlayerState.BUFFERING: + this.onWaiting(); + break; + case YT.PlayerState.PAUSED: + this.onPaused(); + break; + case YT.PlayerState.PLAYING: + this.onPlaying(); + break; + case YT.PlayerState.ENDED: + this.onComplete(); + break; + default: + break; + } +}; + +/** + * Called when an error occurs. + * + * @param {string} event The onReady event that was triggered. + */ +minplayer.players.youtube.prototype.onReady = function(event) { + minplayer.players.base.prototype.onReady.call(this); + this.onLoaded(); +}; + +/** + * Checks to see if this player can be found. + * @return {bool} TRUE - Player is found, FALSE - otherwise. + */ +minplayer.players.youtube.prototype.playerFound = function() { + var iframe = this.display.find('iframe#' + this.options.id + '-player'); + return (iframe.length > 0); +}; + +/** + * Called when the player state changes. + * + * @param {object} event A JavaScript Event. + */ +minplayer.players.youtube.prototype.onPlayerStateChange = function(event) { + this.setPlayerState(event.data); +}; + +/** + * Called when the player quality changes. + * + * @param {string} newQuality The new quality for the change. + */ +minplayer.players.youtube.prototype.onQualityChange = function(newQuality) { + this.quality = newQuality.data; +}; + +/** + * Determines if the player should show the playloader. + * + * @return {bool} If this player implements its own playLoader. + */ +minplayer.players.youtube.prototype.hasPlayLoader = function() { + return true; +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.youtube.prototype.create = function() { + minplayer.players.base.prototype.create.call(this); + + // Insert the YouTube iframe API player. + var tag = document.createElement('script'); + tag.src = 'http://www.youtube.com/player_api?enablejsapi=1'; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + + // Now register this player. + this.register(); + + // Create the iframe for this player. + var iframe = document.createElement('iframe'); + iframe.setAttribute('id', this.options.id + '-player'); + iframe.setAttribute('type', 'text/html'); + iframe.setAttribute('width', '100%'); + iframe.setAttribute('height', '100%'); + iframe.setAttribute('frameborder', '0'); + + // Get the source. + var src = 'http://www.youtube.com/embed/'; + src += this.mediaFile.id + '?'; + + // Determine the origin of this script. + var origin = location.protocol; + origin += '//' + location.hostname; + origin += (location.port && ':' + location.port); + + // Add the parameters to the src. + src += jQuery.param({ + 'wmode': 'opaque', + 'controls': 0, + 'enablejsapi': 1, + 'origin': origin, + 'autoplay': this.options.autoplay, + 'loop': this.options.loop + }); + + // Set the source of the iframe. + iframe.setAttribute('src', src); + + // Return the player. + return iframe; +}; + +/** + * @see minplayer.players.base#load + */ +minplayer.players.youtube.prototype.load = function(file) { + minplayer.players.base.prototype.load.call(this, file); + if (file && this.isReady()) { + this.player.loadVideoById(file.id, 0, this.quality); + } +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.youtube.prototype.play = function() { + minplayer.players.base.prototype.play.call(this); + if (this.isReady()) { + this.player.playVideo(); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.youtube.prototype.pause = function() { + minplayer.players.base.prototype.pause.call(this); + if (this.isReady()) { + this.player.pauseVideo(); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.youtube.prototype.stop = function() { + minplayer.players.base.prototype.stop.call(this); + if (this.isReady()) { + this.player.stopVideo(); + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.youtube.prototype.seek = function(pos) { + minplayer.players.base.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.seekTo(pos, true); + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.youtube.prototype.setVolume = function(vol) { + minplayer.players.base.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.player.setVolume(vol * 100); + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.youtube.prototype.getVolume = function(callback) { + if (this.isReady()) { + callback(this.player.getVolume()); + } +}; + +/** + * @see minplayer.players.base#getDuration. + */ +minplayer.players.youtube.prototype.getDuration = function(callback) { + if (this.isReady()) { + callback(this.player.getDuration()); + } +}; + +/** + * @see minplayer.players.base#getCurrentTime + */ +minplayer.players.youtube.prototype.getCurrentTime = function(callback) { + if (this.isReady()) { + callback(this.player.getCurrentTime()); + } +}; + +/** + * @see minplayer.players.base#getBytesStart. + */ +minplayer.players.youtube.prototype.getBytesStart = function(callback) { + if (this.isReady()) { + callback(this.player.getVideoStartBytes()); + } +}; + +/** + * @see minplayer.players.base#getBytesLoaded. + */ +minplayer.players.youtube.prototype.getBytesLoaded = function(callback) { + if (this.isReady()) { + callback(this.player.getVideoBytesLoaded()); + } +}; + +/** + * @see minplayer.players.base#getBytesTotal. + */ +minplayer.players.youtube.prototype.getBytesTotal = function(callback) { + if (this.isReady()) { + callback(this.player.getVideoBytesTotal()); + } +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.players.base + * @class The vimeo media player. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.vimeo = function(context, options, queue) { + + // Derive from players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.vimeo.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.vimeo.prototype.constructor = minplayer.players.vimeo; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.vimeo.getPriority = function() { + return 10; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.vimeo.canPlay = function(file) { + + // Check for the mimetype for vimeo. + if (file.mimetype === 'video/vimeo') { + return true; + } + + // If the path is a vimeo path, then return true. + return (file.path.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i) === 0); +}; + +/** + * Return the ID for a provided media file. + * + * @param {object} file A {@link minplayer.file} object. + * @return {string} The ID for the provided media. + */ +minplayer.players.vimeo.getMediaId = function(file) { + var regex = /^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i; + if (file.path.search(regex) === 0) { + return file.path.match(regex)[3]; + } + else { + return file.path; + } +}; + +/** + * @see minplayer.players.base#reset + */ +minplayer.players.vimeo.prototype.reset = function() { + + // Reset the flash variables.. + minplayer.players.base.prototype.reset.call(this); +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.vimeo.prototype.create = function() { + minplayer.players.base.prototype.create.call(this); + + // Insert the Vimeo Froogaloop player. + var tag = document.createElement('script'); + tag.src = 'http://a.vimeocdn.com/js/froogaloop2.min.js'; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + + // Create the iframe for this player. + var iframe = document.createElement('iframe'); + iframe.setAttribute('id', this.options.id + '-player'); + iframe.setAttribute('type', 'text/html'); + iframe.setAttribute('width', '100%'); + iframe.setAttribute('height', '100%'); + iframe.setAttribute('frameborder', '0'); + + // Get the source. + var src = 'http://player.vimeo.com/video/'; + src += this.mediaFile.id + '?'; + + // Add the parameters to the src. + src += jQuery.param({ + 'wmode': 'opaque', + 'api': 1, + 'player_id': this.options.id + '-player', + 'title': 0, + 'byline': 0, + 'portrait': 0, + 'autoplay': this.options.autoplay, + 'loop': this.options.loop + }); + + // Set the source of the iframe. + iframe.setAttribute('src', src); + + // Now register this player when the froogaloop code is loaded. + this.poll((function(player) { + return function() { + if (window.Froogaloop) { + player.player = window.Froogaloop(iframe); + player.player.addEvent('ready', function() { + player.onReady(); + }); + } + return !window.Froogaloop; + }; + })(this), 200); + + // Trigger that the load has started. + this.trigger('loadstart'); + + // Return the player. + return iframe; +}; + +/** + * @see minplayer.players.base#onReady + */ +minplayer.players.vimeo.prototype.onReady = function(player_id) { + + // Add the other listeners. + this.player.addEvent('loadProgress', (function(player) { + return function(progress) { + player.duration.set(parseFloat(progress.duration)); + player.bytesLoaded.set(progress.bytesLoaded); + player.bytesTotal.set(progress.bytesTotal); + }; + })(this)); + + this.player.addEvent('playProgress', (function(player) { + return function(progress) { + player.duration.set(parseFloat(progress.duration)); + player.currentTime.set(parseFloat(progress.seconds)); + }; + })(this)); + + this.player.addEvent('play', (function(player) { + return function() { + player.onPlaying(); + }; + })(this)); + + this.player.addEvent('pause', (function(player) { + return function() { + player.onPaused(); + }; + })(this)); + + this.player.addEvent('finish', (function(player) { + return function() { + player.onComplete(); + }; + })(this)); + + minplayer.players.base.prototype.onReady.call(this); + this.onLoaded(); +}; + +/** + * Checks to see if this player can be found. + * @return {bool} TRUE - Player is found, FALSE - otherwise. + */ +minplayer.players.vimeo.prototype.playerFound = function() { + var iframe = this.display.find('iframe#' + this.options.id + '-player'); + return (iframe.length > 0); +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.vimeo.prototype.play = function() { + minplayer.players.base.prototype.play.call(this); + if (this.isReady()) { + this.player.api('play'); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.vimeo.prototype.pause = function() { + minplayer.players.base.prototype.pause.call(this); + if (this.isReady()) { + this.player.api('pause'); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.vimeo.prototype.stop = function() { + minplayer.players.base.prototype.stop.call(this); + if (this.isReady()) { + this.player.api('unload'); + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.vimeo.prototype.seek = function(pos) { + minplayer.players.base.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.api('seekTo', pos); + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.vimeo.prototype.setVolume = function(vol) { + minplayer.players.base.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.volume.set(vol); + this.player.api('setVolume', vol); + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.vimeo.prototype.getVolume = function(callback) { + this.player.api('getVolume', function(vol) { + callback(vol); + }); +}; + +/** + * @see minplayer.players.base#getDuration. + */ +minplayer.players.vimeo.prototype.getDuration = function(callback) { + if (this.isReady()) { + if (this.duration.value) { + callback(this.duration.value); + } + else { + this.player.api('getDuration', function(duration) { + callback(duration); + }); + } + } +}; +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This is the base minplayer controller. Other controllers can derive + * from the base and either build on top of it or simply define the elements + * that this base controller uses. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer.controller = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'controller', context, options); +}; + +/** Derive from minplayer.display. */ +minplayer.controller.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.controller.prototype.constructor = minplayer.controller; + +/** + * A static function that will format a time value into a string time format. + * + * @param {integer} time An integer value of time. + * @return {string} A string representation of the time. + */ +minplayer.formatTime = function(time) { + time = time || 0; + var seconds = 0, minutes = 0, hour = 0, timeString = ''; + + hour = Math.floor(time / 3600); + time -= (hour * 3600); + minutes = Math.floor(time / 60); + time -= (minutes * 60); + seconds = Math.floor(time % 60); + + if (hour) { + timeString += String(hour); + timeString += ':'; + } + + timeString += (minutes >= 10) ? String(minutes) : ('0' + String(minutes)); + timeString += ':'; + timeString += (seconds >= 10) ? String(seconds) : ('0' + String(seconds)); + return {time: timeString, units: ''}; +}; + +/** + * @see minplayer.display#getElements + * @return {object} The elements defined by this display. + */ +minplayer.controller.prototype.getElements = function() { + var elements = minplayer.display.prototype.getElements.call(this); + return jQuery.extend(elements, { + play: null, + pause: null, + fullscreen: null, + seek: null, + progress: null, + volume: null, + timer: null + }); +}; + +/** + * @see minplayer.plugin#construct + */ +minplayer.controller.prototype.construct = function() { + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + // Keep track of if we are dragging... + this.dragging = false; + + // If they have a seek bar. + if (this.elements.seek) { + + // Create the seek bar slider control. + this.seekBar = this.elements.seek.slider({ + range: 'min' + }); + } + + // If they have a volume bar. + if (this.elements.volume) { + + // Create the volume bar slider control. + this.volumeBar = this.elements.volume.slider({ + range: 'min', + orientation: 'vertical' + }); + } + + // Get the player plugin. + this.get('player', function(player) { + + // If they have a fullscreen button. + if (this.elements.fullscreen) { + + // Bind to the click event. + this.elements.fullscreen.unbind().bind('click', function(e) { + + // Toggle fullscreen mode. + player.toggleFullScreen(); + }).css({'pointer' : 'hand'}); + } + }); + + // Get the media plugin. + this.get('media', function(media) { + + // If they have a pause button + if (this.elements.pause) { + + // Bind to the click on this button. + this.elements.pause.unbind().bind('click', (function(controller) { + return function(event) { + event.preventDefault(); + controller.playPause(false, media); + }; + })(this)); + + // Bind to the pause event of the media. + media.bind('pause', (function(controller) { + return function(event) { + controller.setPlayPause(true); + }; + })(this)); + } + + // If they have a play button + if (this.elements.play) { + + // Bind to the click on this button. + this.elements.play.unbind().bind('click', (function(controller) { + return function(event) { + event.preventDefault(); + controller.playPause(true, media); + }; + })(this)); + + // Bind to the play event of the media. + media.bind('playing', (function(controller) { + return function(event) { + controller.setPlayPause(false); + }; + })(this)); + } + + // If they have a duration, then trigger on duration change. + if (this.elements.duration) { + + // Bind to the duration change event. + media.bind('durationchange', (function(controller) { + return function(event, data) { + controller.setTimeString('duration', data.duration); + }; + })(this)); + + // Set the timestring to the duration. + media.getDuration((function(controller) { + return function(duration) { + controller.setTimeString('duration', duration); + }; + })(this)); + } + + // If they have a progress element. + if (this.elements.progress) { + + // Bind to the progress event. + media.bind('progress', (function(controller) { + return function(event, data) { + var percent = data.total ? (data.loaded / data.total) * 100 : 0; + controller.elements.progress.width(percent + '%'); + }; + })(this)); + } + + // If they have a seek bar or timer, bind to the timeupdate. + if (this.seekBar || this.elements.timer) { + + // Bind to the time update event. + media.bind('timeupdate', (function(controller) { + return function(event, data) { + if (!controller.dragging) { + var value = 0; + if (data.duration) { + value = (data.currentTime / data.duration) * 100; + } + + // Update the seek bar if it exists. + if (controller.seekBar) { + controller.seekBar.slider('option', 'value', value); + } + + controller.setTimeString('timer', data.currentTime); + } + }; + })(this)); + } + + // If they have a seekBar element. + if (this.seekBar) { + + // Register the events for the control bar to control the media. + this.seekBar.slider({ + start: (function(controller) { + return function(event, ui) { + controller.dragging = true; + }; + })(this), + stop: (function(controller) { + return function(event, ui) { + controller.dragging = false; + media.getDuration(function(duration) { + media.seek((ui.value / 100) * duration); + }); + }; + })(this), + slide: (function(controller) { + return function(event, ui) { + media.getDuration(function(duration) { + var time = (ui.value / 100) * duration; + if (!controller.dragging) { + media.seek(time); + } + controller.setTimeString('timer', time); + }); + }; + })(this) + }); + } + + // Setup the volume bar. + if (this.volumeBar) { + + // Create the slider. + this.volumeBar.slider({ + slide: function(event, ui) { + media.setVolume(ui.value / 100); + } + }); + + media.bind('volumeupdate', (function(controller) { + return function(event, vol) { + controller.volumeBar.slider('option', 'value', (vol * 100)); + }; + })(this)); + + // Set the volume to match that of the player. + media.getVolume((function(controller) { + return function(vol) { + controller.volumeBar.slider('option', 'value', (vol * 100)); + }; + })(this)); + } + }); + + // We are now ready. + this.ready(); +}; + +/** + * Sets the play and pause state of the control bar. + * + * @param {boolean} state TRUE - Show Play, FALSE - Show Pause. + */ +minplayer.controller.prototype.setPlayPause = function(state) { + var css = ''; + if (this.elements.play) { + css = state ? 'inherit' : 'none'; + this.elements.play.css('display', css); + } + if (this.elements.pause) { + css = state ? 'none' : 'inherit'; + this.elements.pause.css('display', css); + } +}; + +/** + * Plays or pauses the media. + * + * @param {bool} state true => play, false => pause. + * @param {object} media The media player object. + */ +minplayer.controller.prototype.playPause = function(state, media) { + var type = state ? 'play' : 'pause'; + this.display.trigger(type); + this.setPlayPause(!state); + if (media) { + media[type](); + } +}; + +/** + * Sets the time string on the control bar. + * + * @param {string} element The name of the element to set. + * @param {number} time The total time amount to set. + */ +minplayer.controller.prototype.setTimeString = function(element, time) { + if (this.elements[element]) { + this.elements[element].text(minplayer.formatTime(time).time); + } +}; diff --git a/minplayer/com/mediafront/display/Image.as b/minplayer/com/mediafront/display/Image.as deleted file mode 100755 index d07af3b7..00000000 --- a/minplayer/com/mediafront/display/Image.as +++ /dev/null @@ -1,111 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display { - import com.mediafront.utils.Utils; - import flash.net.*; - import flash.display.*; - import flash.geom.*; - import flash.events.*; - - public class Image extends Sprite { - public function loadImage( imagePath:String, _boundingRect:Rectangle = null ):void { - boundingRect=_boundingRect; - boundingRect=boundingRect?boundingRect:getRect(this); - - // Only load an image who's path is defined. - if (imagePath) { - currentLoader=createImageLoader(); - - var request:URLRequest=new URLRequest(imagePath); - request.requestHeaders.push( new URLRequestHeader("pragma", "no-cache") ); - - // Try to load the image. - try { - currentLoader.load(request); - } catch (e:Error) { - Utils.debug( "Error loading image." ); - } - } - } - - public function createImageLoader():Loader { - clearImage(); - var loader:Loader = new Loader(); - loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onImageLoaded ); - loader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, onError ); - loader.addEventListener( IOErrorEvent.IO_ERROR, onError ); - addChild( loader ); - return loader; - } - - public function clearImage() { - var i:int=numChildren; - while (i--) { - var field:* =getChildAt(i); - if (field is Loader) { - field.unload(); - field.contentLoaderInfo.removeEventListener( Event.COMPLETE, onImageLoaded ); - field.contentLoaderInfo.removeEventListener( IOErrorEvent.IO_ERROR, onError ); - field.removeEventListener( IOErrorEvent.IO_ERROR, onError ); - removeChild( field ); - } - } - } - - public function resize( newRect:Rectangle ) { - if (currentLoader) { - var imageRect:Rectangle=Utils.getScaledRect(imageRatio,newRect); - currentLoader.width=imageRect.width; - currentLoader.height=imageRect.height; - currentLoader.x=imageRect.x; - currentLoader.y=imageRect.y; - } - } - - private function onImageLoaded( event:Event ) { - if (boundingRect&&event.target) { - // Get the image ratio of the loaded image. - imageRatio=event.target.width/event.target.height; - - // Resize to the image to our bounding rectangle. - resize( boundingRect ); - - // Trigger an event that the image has been added. - dispatchEvent( new Event( Event.ADDED ) ); - } - } - - private function onError( e:IOErrorEvent ) { - // For now, just give out a trace that an error has occured. - Utils.debug( e.toString() ); - } - - // The current loader variable. - private var currentLoader:Loader; - - // The bounding rectangle for this image. - private var boundingRect:Rectangle; - - // The width/height ratio of the loaded image. - public var imageRatio:Number=1.3333; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/Menu.as b/minplayer/com/mediafront/display/Menu.as deleted file mode 100755 index e235c0da..00000000 --- a/minplayer/com/mediafront/display/Menu.as +++ /dev/null @@ -1,54 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display { - import com.mediafront.plugin.SkinablePlugin; - import com.mediafront.plugin.PluginEvent; - import com.mediafront.utils.Settings; - import com.mediafront.utils.MediaSettings; - import com.mediafront.utils.Utils; - - import flash.display.*; - import flash.events.*; - - public class Menu extends SkinablePlugin { - public function Menu() { - super(); - } - - public override function loadSettings( _settings:Object ):void { - super.loadSettings( new MenuSettings( _settings ) ); - super.loadSkin( settings.menu ); - } - - public override function setSkin( _skin:MovieClip ):void { - super.setSkin( _skin ); - } - - public override function onReady():void { - super.onReady(); - } - - public override function onResize( deltaX:Number, deltaY:Number ):void { - super.onResize( deltaX, deltaY ); - } - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/Resizable.as b/minplayer/com/mediafront/display/Resizable.as deleted file mode 100755 index de0979d7..00000000 --- a/minplayer/com/mediafront/display/Resizable.as +++ /dev/null @@ -1,51 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display { - import flash.display.DisplayObjectContainer; - - public class Resizable extends DisplayObjectContainer { - public var resizeX:Boolean=false; - public var resizeY:Boolean=false; - public var resizeW:Boolean=false; - public var resizeH:Boolean=false; - - public function onResize( deltaX:Number, deltaY:Number ) { - if (resizeX) { - x=x+deltaX; - } - if (resizeY) { - y=y+deltaY; - } - if (resizeW) { - width=width+deltaX; - } - if (resizeH) { - height=height+deltaY; - } - - var i=numChildren; - while ( i-- ) { - getChildAt(i) as Resizable.onResize( deltaX, deltaY ); - } - } - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/Skinable.as b/minplayer/com/mediafront/display/Skinable.as deleted file mode 100755 index f1443699..00000000 --- a/minplayer/com/mediafront/display/Skinable.as +++ /dev/null @@ -1,123 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display { - import com.mediafront.utils.Utils; - - import flash.display.*; - import flash.events.*; - import flash.net.*; - - public class Skinable extends Sprite { - public function loadSkin( _skin:String ):void { - skinPath=_skin; - if (skinPath) { - if (swfLoader) { - swfLoader.unload(); - } else { - loadSWF(); - } - } - } - - public function onResize( deltaX:Number, deltaY:Number ):void { - if ( skin && (skin.onResize is Function) ) { - skin.onResize( deltaX, deltaY ); - } - } - - public function loadSWF():void { - createLoader(); - swfLoader.load( new URLRequest( skinPath ) ); - } - - public function createLoader():void { - if (! swfLoader) { - swfLoader = new Loader(); - swfLoader.contentLoaderInfo.addEventListener( Event.UNLOAD, skinUnloaded ); - swfLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, skinLoaded ); - swfLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, errorHandler ); - } - } - - public function skinUnloaded( event:Event ):void { - loadSWF(); - } - - public function skinLoaded( event:Event ):void { - skin=MovieClip(swfLoader.content); - if (skin) { - if (skin.initialize is Function) { - skin.initialize( this ); - } - this.parent.addChild( skin ); - setSkin(skin); - } - } - - public function errorHandler( error:Object ):void { - Utils.debug( error.toString() ); - } - - public function setSkin( _skin:MovieClip ):void { - skin=_skin; - } - - public override function get visible():Boolean { - return skin ? skin.visible : false; - } - public override function set visible( _visible:Boolean ):void { - if (skin) { - skin.visible=_visible; - } - } - public override function set x( _x:Number ):void { - if (skin) { - skin.x=_x; - } - } - public override function set y( _y:Number ):void { - if (skin) { - skin.y=_y; - } - } - public override function set width( _width:Number ):void { - if (skin) { - skin.width=_width; - } - } - public override function get width():Number { - return skin ? skin.width : 0; - } - public override function set height( _height:Number ):void { - if (skin) { - skin.height=_height; - } - } - public override function get height():Number { - return skin ? skin.height : 0; - } - - public var skin:MovieClip; - public var skinPath:String; - public var swfLoader:Loader; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/Slider.as b/minplayer/com/mediafront/display/Slider.as deleted file mode 100755 index 6f344819..00000000 --- a/minplayer/com/mediafront/display/Slider.as +++ /dev/null @@ -1,126 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display { - import com.mediafront.display.media.controls.ControlEvent; - - import flash.events.*; - import flash.geom.*; - import flash.display.*; - import flash.utils.*; - - public class Slider extends Skinable { - public function Slider( _skin:* ) { - super(); - setSkin( _skin ); - } - - public override function setSkin( _skin:MovieClip ):void { - super.setSkin( _skin ); - - handle=_skin.handle; - if (handle) { - handle.buttonMode=true; - handle.mouseChildren=false; - handle.addEventListener( MouseEvent.MOUSE_DOWN, onHandleDown ); - handle.addEventListener( MouseEvent.MOUSE_UP, onHandleUp ); - } - - track=_skin.track; - if (track) { - track.buttonMode=true; - track.addEventListener( MouseEvent.CLICK, onSetValue ); - dragRect = new Rectangle( track.x, track.y, (track.width - handle.width), 0 ); - } - - fullness=_skin.fullness; - - dragTimer=new Timer(250); - dragTimer.stop(); - dragTimer.addEventListener( TimerEvent.TIMER, onDragTimer ); - } - - public function setValue( newValue:Number ):void { - setPosition( newValue ); - dispatchEvent( new ControlEvent( ControlEvent.CONTROL_SET ) ); - } - - public function updateValue( newValue:Number, setHandle:Boolean = true ):void { - setPosition( newValue, setHandle ); - dispatchEvent( new ControlEvent( ControlEvent.CONTROL_UPDATE ) ); - } - - public function setPosition( newValue:Number, setHandle:Boolean = true ):void { - newValue = (newValue < 0) ? 0 : newValue; - newValue = (newValue > 1) ? 1 : newValue; - value=newValue; - var fullWidth = (value * (track.width - handle.width)); - - if (fullness) { - fullness.width=fullWidth; - } - - if (handle&&setHandle) { - handle.x=track.x+fullWidth; - } - } - - private function onSetValue( event:MouseEvent ):void { - setValue( (event.localX * event.currentTarget.scaleX) / (track.width - handle.width) ); - } - - private function onTrackOut( event:MouseEvent ):void { - dragTimer.stop(); - dragging=false; - event.target.stopDrag(); - event.target.removeEventListener( MouseEvent.MOUSE_MOVE, onDrag ); - } - - private function onHandleDown( event:MouseEvent ):void { - dragTimer.start(); - dragging=true; - event.target.startDrag(false, dragRect); - event.target.addEventListener( MouseEvent.MOUSE_MOVE, onDrag ); - } - - private function onHandleUp( event:MouseEvent ):void { - onTrackOut( event ); - setValue( dragValue ); - } - - private function onDragTimer( e:TimerEvent ):void { - updateValue( dragValue, false ); - } - - private function onDrag(event:MouseEvent):void { - dragValue = (event.target.x - track.x) / (track.width - handle.width); - } - - public var value:Number=0; - public var handle:MovieClip; - public var track:MovieClip; - public var fullness:MovieClip; - public var dragTimer:Timer; - public var dragRect:Rectangle; - public var dragValue:Number=0; - public var dragging:Boolean=false; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/AudioPlayer.as b/minplayer/com/mediafront/display/media/AudioPlayer.as deleted file mode 100755 index 82bcfe65..00000000 --- a/minplayer/com/mediafront/display/media/AudioPlayer.as +++ /dev/null @@ -1,229 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media { - import com.mediafront.display.media.MediaPlayer; - import com.mediafront.display.media.MediaEvent; - import com.mediafront.display.media.IMedia; - import com.mediafront.utils.Utils; - - import flash.display.*; - import flash.events.*; - import flash.media.*; - import flash.utils.*; - import flash.net.*; - - public class AudioPlayer extends Sound implements IMedia { - public function AudioPlayer( _debug:Boolean, _onMediaEvent:Function ) { - super(); - debug=_debug; - onMediaEvent=_onMediaEvent; - context=new SoundLoaderContext(5*1000,true); - } - - public function connect( stream:String ):void { - SoundMixer.stopAll(); - onMediaEvent( MediaEvent.CONNECTED ); - } - - public function loadFile( file:String ):void { - removeEventListener( Event.SOUND_COMPLETE, audioUpdate ); - removeEventListener( Event.ID3, audioUpdate ); - removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); - - addEventListener( Event.SOUND_COMPLETE, audioUpdate ); - addEventListener( Event.ID3, audioUpdate ); - addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); - - position=0; - duration=0; - vol=0.8; - loaded=false; - - Utils.debug( "AudioPlayer: loadFile( " + file + ")", debug ); - - var request:URLRequest=new URLRequest(file); - request.requestHeaders.push( new URLRequestHeader("pragma", "no-cache") ); - try { - super.load( request, context ); - loadInterval=setInterval(loadHandler,200); - } catch (error:Error) { - Utils.debug("Unable to load " + file); - } - } - - // Make sure we load if they don't have meta data in their audio. - private function loadHandler() { - if (bytesLoaded>=bytesTotal&&bytesLoaded>0) { - onLoaded(); - } - } - - private function onLoaded():void { - if (! loaded) { - loaded=true; - playMedia(); - } - clearInterval( loadInterval ); - } - - public function audioUpdate( e:Object ):void { - switch ( e.type ) { - case Event.ID3 : - onMediaEvent( MediaEvent.META ); - onLoaded(); - break; - - case Event.SOUND_COMPLETE : - onMediaEvent( MediaEvent.COMPLETE ); - break; - } - } - - private function ioErrorHandler(event:Event):void { - } - - public function getVolume():Number { - if (channel) { - return channel.soundTransform.volume; - } - - return 0; - } - - public function setVolume(_vol:Number):void { - Utils.debug( "AudioPlayer: setVolume( " + _vol + ")", debug ); - if (channel) { - try { - var transform:SoundTransform=channel.soundTransform; - transform.volume=vol=_vol; - channel.soundTransform=transform; - } catch (e:Error) { - Utils.debug( "ERROR: setVolume: " + e.toString() ); - } - } - } - - private function stopChannel():void { - if (channel) { - try { - channel.stop(); - } catch (e:Error) { - Utils.debug( e.toString() ); - } - } - clearInterval( loadInterval ); - SoundMixer.stopAll(); - } - - public function playMedia( setPos:Number = -1 ):void { - var newPos = (setPos >= 0) ? setPos : position; - Utils.debug( "AudioPlayer: playMedia( " + newPos + ")", debug ); - - try { - channel=super.play(newPos); - } catch (e:Error) { - Utils.debug( e.toString() ); - } - - if (channel) { - channel.removeEventListener( Event.SOUND_COMPLETE, audioUpdate ); - channel.addEventListener( Event.SOUND_COMPLETE, audioUpdate ); - } - - setVolume( vol ); - onMediaEvent( MediaEvent.PLAYING ); - } - - public function pauseMedia():void { - if (channel) { - position=channel.position; - } - - stopChannel(); - Utils.debug( "AudioPlayer: pauseMedia( " + position + ")", debug ); - onMediaEvent( MediaEvent.PAUSED ); - } - - public function stopMedia():void { - position=0; - duration=0; - vol=0.8; - loaded=false; - stopChannel(); - - // If we are still streaming a audio track, then close it. - try { - this.close(); - } catch (e:Error) { - Utils.debug( e.toString() ); - } - - Utils.debug( "AudioPlayer: stopMedia()", debug ); - onMediaEvent( MediaEvent.STOPPED ); - } - - public function seekMedia( pos:Number ):void { - if (channel) { - stopChannel(); - Utils.debug( "AudioPlayer: seekMedia( " + pos + ")", debug ); - playMedia((pos * 1000)); - } - } - - public function getDuration():Number { - var _duration:Number=duration; - if (this.bytesLoaded>=this.bytesTotal) { - duration=_duration=this.length/1000; - } else if ( !duration && this.length && (this.bytesLoaded > 0) && (this.bytesTotal > 0) ) { - duration = _duration = (uint(this.length/2) / uint(this.bytesLoaded/2)) * (this.bytesTotal / 1000); - } - return _duration; - } - - public function getCurrentTime():Number { - return (channel ? (channel.position / 1000) : 0); - } - - public function getMediaBytesLoaded():Number { - return bytesLoaded; - } - - public function getMediaBytesTotal():Number { - return bytesTotal; - } - - public function getRatio():Number { - return 0; - } - - private var loadInterval:Number; - - public var channel:SoundChannel; - public var context:SoundLoaderContext; - public var duration:Number=0; - public var position:Number=0; - public var loaded:Boolean=false; - public var debug:Boolean=false; - public var vol:Number=0.8; - public var onMediaEvent:Function=null; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/IMedia.as b/minplayer/com/mediafront/display/media/IMedia.as deleted file mode 100755 index e4529f04..00000000 --- a/minplayer/com/mediafront/display/media/IMedia.as +++ /dev/null @@ -1,38 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media { - public interface IMedia { - function connect( stream:String ):void; - function loadFile( file:String ):void; - function setVolume(vol:Number):void; - function getVolume():Number; - function playMedia( setPos:Number = -1 ):void; - function pauseMedia():void; - function stopMedia():void; - function seekMedia( pos:Number ):void; - function getMediaBytesLoaded():Number; - function getMediaBytesTotal():Number; - function getDuration():Number; - function getCurrentTime():Number; - function getRatio():Number; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/MediaEvent.as b/minplayer/com/mediafront/display/media/MediaEvent.as deleted file mode 100755 index fff080b1..00000000 --- a/minplayer/com/mediafront/display/media/MediaEvent.as +++ /dev/null @@ -1,49 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media { - import flash.events.*; - - public class MediaEvent extends Event { - public static const CONNECTED:String="mediaConnected"; - public static const BUFFERING:String="mediaBuffering"; - public static const PAUSED:String="mediaPaused"; - public static const PLAYING:String="mediaPlaying"; - public static const STOPPED:String="mediaStopped"; - public static const COMPLETE:String="mediaComplete"; - public static const META:String="mediaMeta"; - - public function MediaEvent( type:String, a:Object = null ) { - super( type, true ); - args=a; - } - - override public function toString():String { - return formatToString( "MediaEvent", "type", "eventPhase" ); - } - - override public function clone():Event { - return new MediaEvent( type, args ); - } - - public var args:Object; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/MediaFile.as b/minplayer/com/mediafront/display/media/MediaFile.as deleted file mode 100755 index ae21501a..00000000 --- a/minplayer/com/mediafront/display/media/MediaFile.as +++ /dev/null @@ -1,73 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media { - import com.mediafront.utils.Utils; - - public class MediaFile { - public var path:String=""; - public var stream:String=null; - public var extension:String=""; - public var mediaType:String=""; - public var loaded:Boolean=false; - - public function MediaFile( file:Object ) { - path=file.path; - stream=file.stream; - loaded=false; - extension=file.extension?file.extension:Utils.getFileExtension(path); - mediaType=file.mediaType?file.mediaType:getMediaType(); - } - - public function isValid():Boolean { - return (mediaType != ""); - } - - private function getMediaType():String { - switch ( extension ) { - case "swf" : - return "swf"; - - case "flv" : - case "f4v" : - case "mp4" : - case "m4v" : - case "mov" : - case "3g2" : - case "ogg" : - case "ogv" : - return "video"; - - case "mp3" : - case "m4a" : - case "aac" : - case "wav" : - case "aif" : - case "wma" : - case "oga" : - return "audio"; - - default : - return "video"; - } - } - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/MediaPlayer.as b/minplayer/com/mediafront/display/media/MediaPlayer.as deleted file mode 100755 index 7b6d85da..00000000 --- a/minplayer/com/mediafront/display/media/MediaPlayer.as +++ /dev/null @@ -1,301 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media { - import com.mediafront.plugin.SkinablePlugin; - import com.mediafront.display.Image; - import com.mediafront.display.media.MediaEvent; - import com.mediafront.display.media.MediaFile; - import com.mediafront.display.media.VideoPlayer; - import com.mediafront.display.media.AudioPlayer; - import com.mediafront.plugin.PluginEvent; - import com.mediafront.utils.Settings; - import com.mediafront.utils.MediaSettings; - import com.mediafront.utils.Utils; - - import flash.display.*; - import flash.external.ExternalInterface; - import flash.geom.Rectangle; - import flash.events.*; - import flash.system.Security; - - public class MediaPlayer extends SkinablePlugin { - public function MediaPlayer() { - super(); - addCallbacks(); - } - - public override function loadSettings( _settings:Object ):void { - super.loadSettings( new MediaSettings( _settings ) ); - super.loadSkin( settings.mediaPlayer ); - } - - public override function setSkin( _skin:MovieClip ):void { - mediaRegion=_skin.mediaRegion; - backgroundMC=_skin.backgroundMC; - if (_skin.preview&&settings.image) { - preview=_skin.preview; - preview.addEventListener(Event.ADDED, onPreviewLoaded); - preview.loadImage( settings.image ); - } - - super.setSkin( _skin ); - } - - protected function onPreviewLoaded( event:Event ) { - preview.resize( backgroundMC.getRect(this) ); - } - - public override function onReady():void { - super.onReady(); - - // Don't load the media until all plugins have finished loading. - loadMedia( settings.file, settings.stream ); - } - - private function addCallbacks():void { - if (ExternalInterface.available) { - try { - ExternalInterface.addCallback( "loadMedia", loadMedia ); - ExternalInterface.addCallback( "playMedia", playMedia ); - ExternalInterface.addCallback( "pauseMedia", pauseMedia ); - ExternalInterface.addCallback( "stopMedia", stopMedia ); - ExternalInterface.addCallback( "seekMedia", seekMedia ); - ExternalInterface.addCallback( "setVolume", setVolume ); - ExternalInterface.addCallback( "getVolume", getVolume ); - ExternalInterface.addCallback( "getCurrentTime", getCurrentTime ); - ExternalInterface.addCallback( "getDuration", getDuration ); - ExternalInterface.addCallback( "getMediaBytesLoaded", getMediaBytesLoaded ); - ExternalInterface.addCallback( "getMediaBytesTotal", getMediaBytesTotal ); - } catch (error:SecurityError) { - Utils.debug("A SecurityError occurred: " + error.message + "\n"); - } catch (error:Error) { - Utils.debug("An Error occurred: " + error.message + "\n"); - } - } - } - - public function loadMedia( filePath:String, _stream:String = "" ):void { - createMedia( new MediaFile( {path:filePath, stream:_stream} ) ); - } - - public function playMedia():void { - try { - if (media && loadedFile.loaded) { - media.playMedia(); - } - } catch (e:Error) { - Utils.debug( "ERROR: playMedia: " + e.toString() ); - } - } - public function pauseMedia():void { - try { - if (media && loadedFile.loaded) { - media.pauseMedia(); - } - } catch (e:Error) { - Utils.debug( "ERROR: pauseMedia: " + e.toString() ); - } - } - public function seekMedia( pos:Number ):void { - try { - if (media && loadedFile.loaded) { - media.seekMedia( pos ); - } - } catch (e:Error) { - Utils.debug( "ERROR: seekMedia: " + e.toString() ); - } - } - public function setVolume( vol:Number ):void { - try { - if (media) { - media.setVolume( vol ); - } - } catch (e:Error) { - Utils.debug( "ERROR: setVolume: " + e.toString() ); - } - } - public function getVolume():Number { - return media ? media.getVolume() : 1; - } - public function getCurrentTime():Number { - return media ? media.getCurrentTime() : 0; - } - public function getDuration():Number { - return media ? media.getDuration() : 0; - } - public function getMediaBytesLoaded():Number { - return media ? media.getMediaBytesLoaded() : 0; - } - public function getMediaBytesTotal():Number { - return media ? media.getMediaBytesTotal() : 0; - } - - public override function onResize( deltaX:Number, deltaY:Number ):void { - // Resize the skin. - super.onResize( deltaX, deltaY ); - - // Now resize the video. - var mediaRatio:Number=media?media.getRatio():0; - if (mediaRatio) { - var videoRect:Rectangle=Utils.getScaledRect(mediaRatio,backgroundMC.getRect(this)); - media.setSize( videoRect.width, videoRect.height ); - media.x=videoRect.x; - media.y=videoRect.y; - } - } - - public function onMediaEvent( type:String ):void { - var dispatch:Boolean=true; - - if (ExternalInterface.available&&settings) { - Utils.debug("Calling Flash Update: " + type, settings.debug ); - ExternalInterface.call( "onFlashPlayerUpdate", settings.id, type ); - } - - switch ( type ) { - case MediaEvent.CONNECTED : - onMediaConnected(); - break; - case MediaEvent.PLAYING : - dispatch=onMediaPlaying(); - break; - case MediaEvent.META : - onMediaMeta(); - break; - } - - if (dispatch) { - // Now dispatch this event for everyone interested. - dispatchEvent( new MediaEvent( type ) ); - } - } - - private function onMediaConnected():void { - media.loadFile( loadedFile.path ); - } - - private function onMediaPlaying():Boolean { - loadedFile.loaded=true; - if (settings && !settings.autostart) { - settings.autostart=true; - if (preview && mediaRegion) { - mediaRegion.visible=false; - } - pauseMedia(); - return false; - } else { - // Set the preview to be invisible for non-audio types. - if (preview) { - preview.visible = (loadedFile.mediaType == "audio"); - } - - // Reshow the media region. - if (preview && mediaRegion) { - mediaRegion.visible=true; - } - } - return true; - } - - private function onMediaMeta():void { - loadedFile.loaded=true; - onResize(0,0); - } - - private function createMedia( mediaFile:MediaFile ):void { - if (mediaFile.isValid()) { - stopMedia(); - - // Make sure our preview is visible. - if (preview) { - preview.visible=true; - } - - // Only load a new player if we must. - if ( !loadedFile || (loadedFile.mediaType != mediaFile.mediaType) ) { - switch ( mediaFile.mediaType ) { - case "video" : - addVideo( new VideoPlayer( stage.stageWidth, stage.stageHeight, settings.debug, onMediaEvent) ); - break; - - case "swf" : - addVideo( new SWFPlayer(settings.debug, onMediaEvent) ); - break; - - case "audio" : - media=new AudioPlayer(settings.debug,onMediaEvent); - break; - } - } - - if (media) { - try { - media.addEventListener( MediaEvent.CONNECTED, onMediaEvent ); - media.addEventListener( MediaEvent.META, onMediaEvent ); - media.addEventListener( MediaEvent.BUFFERING, onMediaEvent ); - media.addEventListener( MediaEvent.PAUSED, onMediaEvent ); - media.addEventListener( MediaEvent.PLAYING, onMediaEvent ); - media.addEventListener( MediaEvent.COMPLETE, onMediaEvent ); - } catch (error:Error) { - Utils.debug("An Error occurred: " + error.message + "\n"); - } - } - - // Save the loaded file for later. - loadedFile=mediaFile; - - // Connect to the media stream. - media.connect( mediaFile.stream ); - } - } - - public function stopMedia():void { - if (media) { - media.stopMedia(); - try { - media.removeEventListener( MediaEvent.CONNECTED, onMediaEvent ); - media.removeEventListener( MediaEvent.META, onMediaEvent ); - media.removeEventListener( MediaEvent.BUFFERING, onMediaEvent ); - media.removeEventListener( MediaEvent.PAUSED, onMediaEvent ); - media.removeEventListener( MediaEvent.PLAYING, onMediaEvent ); - media.removeEventListener( MediaEvent.COMPLETE, onMediaEvent ); - } catch (error:Error) { - Utils.debug("An Error occurred: " + error.message + "\n"); - } - } - } - - private function addVideo( _media:* ):void { - if (media) { - mediaRegion.removeChild( media ); - } - media=_media; - mediaRegion.addChild( media ); - } - - public var mediaRegion:MovieClip; - public var backgroundMC:MovieClip; - public var preview:Image; - public var media:* =null; - public var loadedFile:MediaFile=null; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/SWFPlayer.as b/minplayer/com/mediafront/display/media/SWFPlayer.as deleted file mode 100755 index 59d9d020..00000000 --- a/minplayer/com/mediafront/display/media/SWFPlayer.as +++ /dev/null @@ -1,160 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media { - import com.mediafront.utils.Utils; - import com.mediafront.display.media.MediaEvent; - import com.mediafront.display.media.IMedia; - - import flash.display.*; - import flash.events.*; - import flash.media.*; - import flash.utils.*; - import flash.net.*; - - public class SWFPlayer extends MovieClip implements IMedia { - public function SWFPlayer( _debug:Boolean, _onMediaEvent:Function ) { - loader=null; - bytesLoaded=0; - bytesTotal=0; - as2=false; - debug=_debug; - onMediaEvent=_onMediaEvent; - } - - public function connect( stream:String ):void { - onMediaEvent( MediaEvent.CONNECTED ); - } - - public function loadFile( file:String ):void { - Utils.debug("swf.loadFile( " + file + " )", debug); - bytesLoaded=0; - bytesTotal=0; - if (swf) { - removeChild(swf); - } - loader = new Loader(); - loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onLoaded ); - loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, onLoading ); - loader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, onError ); - loader.load(new URLRequest(file)); - } - - private function onLoaded( event:Event ):void { - try { - swf=MovieClip(loader.content); - } catch (error:Error) { - swf=AVM1Movie(loader.content); - as2=true; - } - addChild(swf); - onMediaEvent( MediaEvent.META ); - onMediaEvent( MediaEvent.PLAYING ); - } - - private function onLoading( event:ProgressEvent ):void { - bytesLoaded=event.bytesLoaded; - bytesTotal=event.bytesTotal; - } - - private function onError(event:Event):void { - } - - public function getVolume():Number { - return 0; - } - - public function setVolume(vol:Number):void { - } - - public function playMedia( setPos:Number = -1 ):void { - Utils.debug("swf.playMedia()", debug); - if (! as2) { - swf.play(); - onMediaEvent( MediaEvent.PLAYING ); - } - } - - public function pauseMedia():void { - Utils.debug("swf.pauseMedia()", debug); - if (! as2) { - swf.stop(); - onMediaEvent( MediaEvent.PAUSED ); - } - } - - public function stopMedia():void { - Utils.debug("swf.stopMedia()", debug); - if (! as2) { - swf.stop(); - } - loader.unload(); - onMediaEvent( MediaEvent.STOPPED ); - } - - public function seekMedia( pos:Number ):void { - if (! as2&&swf&&stage) { - swf.gotoAndPlay( (pos / stage.frameRate) ); - } - } - - public function getDuration():Number { - if (! as2&&swf&&stage) { - return (swf.totalFrames / stage.frameRate); - } else { - return 0; - } - } - - public function getCurrentTime():Number { - if (! as2&&swf&&stage) { - return (swf.currentFrame / stage.frameRate); - } else { - return 0; - } - } - - public function setSize( _width:Number, _height:Number ):void { - swf.width=_width; - swf.height=_height; - } - - public function getRatio():Number { - return (swf.width / swf.height); - } - - public function getMediaBytesLoaded():Number { - return bytesLoaded; - } - - public function getMediaBytesTotal():Number { - return bytesTotal; - } - - public var bytesLoaded:Number; - public var bytesTotal:Number; - private var loader:Loader; - private var swf:*; - private var as2:Boolean=false; - private var debug:Boolean; - private var onMediaEvent:Function=null; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/VideoPlayer.as b/minplayer/com/mediafront/display/media/VideoPlayer.as deleted file mode 100755 index 537ab45a..00000000 --- a/minplayer/com/mediafront/display/media/VideoPlayer.as +++ /dev/null @@ -1,312 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media { - import com.mediafront.utils.Utils; - import com.mediafront.display.media.MediaEvent; - import com.mediafront.display.media.IMedia; - - import flash.media.Video; - import flash.media.SoundTransform; - import flash.media.SoundMixer; - import flash.display.*; - import flash.events.*; - import flash.net.*; - import flash.utils.*; - - public class VideoPlayer extends Video implements IMedia { - public function VideoPlayer( _width:uint, _height:uint, _debug:Boolean, _onMediaEvent:Function ) { - super(_width,_height); - debug=_debug; - onMediaEvent=_onMediaEvent; - } - - public function connect( videoStream:String ):void { - SoundMixer.stopAll(); - connection = new NetConnection(); - connection.objectEncoding=flash.net.ObjectEncoding.AMF0; - connection.addEventListener(NetStatusEvent.NET_STATUS, statusHandler ); - connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR,errorHandler); - connection.addEventListener(IOErrorEvent.IO_ERROR,errorHandler); - connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR,errorHandler); - connection.client=this; - usingStream = (videoStream != null); - connection.connect( (videoStream ? videoStream : null) ); - } - - private function setupVideoStream():void { - stream=new NetStream(connection); - stream.addEventListener(NetStatusEvent.NET_STATUS,statusHandler); - stream.addEventListener(IOErrorEvent.IO_ERROR,errorHandler); - stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler); - stream.bufferTime=5; - stream.client=this; - sound = new SoundTransform(); - stream.soundTransform=sound; - super.attachNetStream(stream); - smoothing=true; - deblocking=3; - onMediaEvent( MediaEvent.CONNECTED ); - } - - private function errorHandler(event:ErrorEvent):void { - Utils.debug("Error: " + event.text); - } - - public function loadFile( file:String ):void { - totalTime=0; - _videoWidth=0; - _videoHeight=0; - file=getFileName(file); - - if (usingStream) { - connection.call( "getStreamLength", new Responder( streamlengthHandler ), file ); - } - - Utils.debug("video.loadFile( " + file + " )", debug); - - if (stream!=null) { - try { - SoundMixer.stopAll(); - stream.play(file); - } catch (error:Error) { - Utils.debug(error.toString()); - return; - } - } - else { - Utils.debug("loadFile ERROR: stream is not ready!", debug); - } - } - - public function seekMedia( pos:Number ):void { - Utils.debug("video.seekMedia( " + pos + " )", debug); - if (stream!=null) { - try { - stream.seek( pos ); - } catch (error:Error) { - Utils.debug(error.toString()); - return; - } - } - else { - Utils.debug("seekMedia ERROR: stream is not ready!", debug); - } - } - - public function pauseMedia():void { - if (stream!=null) { - try { - Utils.debug("stream.pause()", debug); - stream.pause(); - onMediaEvent( MediaEvent.PAUSED ); - } catch (error:Error) { - Utils.debug(error.toString()); - return; - } - } - else { - Utils.debug("pauseMedia ERROR: stream is not ready!", debug); - } - } - - public function playMedia( setPos:Number = -1 ):void { - if (stream!=null) { - try { - Utils.debug("stream.resume()", debug); - stream.resume(); - onMediaEvent( MediaEvent.PLAYING ); - } catch (error:Error) { - Utils.debug(error.toString()); - return; - } - } - else { - Utils.debug("playMedia ERROR: stream is not ready!", debug); - } - } - - public function stopMedia():void { - Utils.debug("video.stopMedia()", debug); - SoundMixer.stopAll(); - if (stream) { - stream.removeEventListener(NetStatusEvent.NET_STATUS,statusHandler); - stream.removeEventListener(IOErrorEvent.IO_ERROR,errorHandler); - stream.removeEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler); - stream.close(); - } - - if (connection) { - connection.removeEventListener(NetStatusEvent.NET_STATUS, statusHandler ); - connection.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,errorHandler); - connection.removeEventListener(IOErrorEvent.IO_ERROR,errorHandler); - connection.removeEventListener(AsyncErrorEvent.ASYNC_ERROR,errorHandler); - connection.close(); - } - onMediaEvent( MediaEvent.STOPPED ); - } - - public function getVolume():Number { - if (sound) { - return sound.volume; - } - return 0; - } - - public function setVolume(vol:Number):void { - if (sound && stream) { - sound.volume=vol; - stream.soundTransform=sound; - } - else { - Utils.debug("setVolume ERROR: stream is not ready!", debug); - } - } - - public function onMetaData(info:Object):void { - Utils.debug("onMetaData: totalTime=" + info.duration + ", width=" + info.width + ", height=" + info.height, debug ); - totalTime=info.duration; - _videoWidth=info.width; - _videoHeight=info.height; - onMediaEvent( MediaEvent.META ); - } - - public function onPlayStatus(info:Object):void { - Utils.debug("onPlayStatus( " + info.code + " )", debug ); - if (info.code=="NetStream.Play.Complete") { - onMediaEvent( MediaEvent.COMPLETE ); - } - } - - public function onLastSecond(info:Object):void { - Utils.debug("onLastSecond( " + info.code + " )", debug ); - } - - public function onCuePoint(info:Object):void { - Utils.debug("onCuePoint( " + info.code + " )", debug ); - } - - public function onXMPData(info:Object):void { - } - public function onTextData(info:Object):void { - } - public function onCaptionInfo(info:Object):void { - } - public function onCaption(cps:String,spk:Number):void { - } - public function onBWDone(...args):void { - } - - private function getFileName( fileName:String ):String { - if (usingStream) { - var ext:String=Utils.getFileExtension(fileName); - if (ext=='mp3') { - return 'mp3:'+fileName.substr(0,fileName.length-4); - } else if (ext == 'mp4' || ext == 'mov' || ext == 'aac' || ext == 'm4a') { - return 'mp4:'+fileName; - } else if (ext == 'flv') { - return fileName.substr(0,fileName.length-4); - } - } - return fileName; - } - - private function streamlengthHandler(len:Number):void { - totalTime=len; - onMediaEvent( MediaEvent.META ); - } - - public function getDuration():Number { - return totalTime; - } - - public function getCurrentTime():Number { - return (stream != null) ? stream.time : 0; - } - - public function getMediaBytesLoaded():Number { - return stream ? stream.bytesLoaded : 0; - } - - public function getMediaBytesTotal():Number { - return stream ? stream.bytesTotal : 0; - } - - private function statusHandler(event:NetStatusEvent):void { - Utils.debug("Video: status = " + event.info.code, debug ); - switch ( event.info.code ) { - case "NetConnection.Connect.Success" : - setupVideoStream(); - break; - - case "NetStream.Buffer.Empty" : - onMediaEvent( MediaEvent.BUFFERING ); - break; - - case "NetStream.Pause.Notify" : - onMediaEvent( MediaEvent.PAUSED ); - break; - - case "NetStream.Buffer.Full" : - onMediaEvent( MediaEvent.PLAYING ); - break; - - case "NetStream.Play.Start" : - if (usingStream) { - onMediaEvent( MediaEvent.BUFFERING ); - } - break; - - case "NetStream.Play.Stop" : - if (! usingStream) { - onMediaEvent( MediaEvent.COMPLETE ); - } - break; - - case "NetStream.Play.StreamNotFound" : - stopMedia(); - break; - - default : - break; - } - } - - public function setSize( newWidth:Number, newHeight:Number ):void { - this.width=newWidth; - this.height=newHeight; - } - - public function getRatio():Number { - return (videoHeight) ? (videoWidth / videoHeight) : (_videoWidth / _videoHeight); - } - - private var connection:NetConnection=null; - private var stream:NetStream=null; - private var sound:SoundTransform; - private var totalTime:Number=0; - private var usingStream:Boolean=false; - private var debug:Boolean=false; - private var _videoWidth:Number=0; - private var _videoHeight:Number=0; - private var onMediaEvent:Function=null; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/controls/ControlBar.as b/minplayer/com/mediafront/display/media/controls/ControlBar.as deleted file mode 100755 index bba44f71..00000000 --- a/minplayer/com/mediafront/display/media/controls/ControlBar.as +++ /dev/null @@ -1,256 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media.controls { - import com.mediafront.utils.Utils; - import com.mediafront.plugin.SkinablePlugin; - import com.mediafront.display.Slider; - import com.mediafront.display.media.MediaEvent; - import com.mediafront.display.media.controls.ControlEvent; - import com.mediafront.plugin.PluginEvent; - import com.mediafront.utils.Settings; - import com.mediafront.utils.ControlSettings; - import flash.utils.Timer; - import flash.display.*; - import flash.text.TextField; - import flash.events.*; - import flash.system.Security; - import flash.external.ExternalInterface; - - public class ControlBar extends SkinablePlugin { - public override function loadSettings( _settings:Object ):void { - super.loadSettings( new ControlSettings( _settings ) ); - super.loadSkin( settings.controlBar ); - } - - public override function initialize( comps:Object ):void { - super.initialize( comps ); - components.mediaPlayer.addEventListener( MediaEvent.CONNECTED, onMediaEvent ); - components.mediaPlayer.addEventListener( MediaEvent.PLAYING, onMediaEvent ); - components.mediaPlayer.addEventListener( MediaEvent.PAUSED, onMediaEvent ); - components.mediaPlayer.addEventListener( MediaEvent.STOPPED, onMediaEvent ); - components.mediaPlayer.addEventListener( MediaEvent.META, onMediaEvent ); - } - - public override function setSkin( _skin:MovieClip ):void { - updateTimer=new Timer(1000); - updateTimer.stop(); - updateTimer.addEventListener( TimerEvent.TIMER, onMediaUpdate ); - - progressTimer=new Timer(500); - progressTimer.stop(); - progressTimer.addEventListener( TimerEvent.TIMER, onMediaProgress ); - - volumeBar=new Slider(_skin.volumeBar); - if (volumeBar) { - volumeBar.addEventListener( ControlEvent.CONTROL_SET, onVolume ); - } - - seekBar=new Slider(_skin.seekBar); - if (seekBar) { - seekBar.addEventListener( ControlEvent.CONTROL_SET, onSeek ); - } - - playPauseButton=_skin.playPauseButton; - if (playPauseButton) { - playPauseButton.buttonMode=true; - playPauseButton.mouseChildren=false; - playPauseButton.addEventListener( MouseEvent.CLICK, onPlayPause ); - } - - toggleFullScreen=_skin.toggleFullScreen; - if (toggleFullScreen) { - toggleFullScreen.buttonMode=true; - toggleFullScreen.mouseChildren=false; - toggleFullScreen.addEventListener( MouseEvent.CLICK, onToggleFullScreen ); - } - - menuButton=_skin.menuButton; - if (menuButton) { - menuButton.buttonMode=true; - menuButton.mouseChildren=false; - menuButton.addEventListener( MouseEvent.CLICK, onMenu ); - } - - mute=_skin.mute; - if (mute) { - mute.buttonMode=true; - mute.mouseChildren=false; - mute.addEventListener( MouseEvent.CLICK, onMute ); - } - - playTime=_skin.playTime; - duration=_skin.duration; - - playState=true; - muteState=false; - setPlayState( false ); - super.setSkin( _skin ); - } - - public override function onResize( deltaX:Number, deltaY:Number ):void { - super.onResize( deltaX, deltaY ); - volumeBar.onResize( deltaX, deltaY ); - seekBar.onResize( deltaX, deltaY ); - } - - public function onMediaEvent( event:* ):void { - switch ( event.type ) { - case MediaEvent.CONNECTED : - progressTimer.start(); - totalTime=0; - break; - case MediaEvent.PLAYING : - updateTimer.start(); - setPlayState( true ); - break; - case MediaEvent.PAUSED : - setPlayState( false ); - break; - case MediaEvent.STOPPED : - updateTimer.stop(); - progressTimer.stop(); - break; - case MediaEvent.META : - volumeBar.setValue(components.mediaPlayer.getVolume()); - updatePlayTime(); - break; - } - } - - private function onMediaUpdate( event:TimerEvent ):void { - updatePlayTime(); - } - - private function onMediaProgress( event:TimerEvent ):void { - var bLoaded:Number=components.mediaPlayer.getMediaBytesLoaded(); - var bTotal:Number=components.mediaPlayer.getMediaBytesTotal(); - var pLoaded:Number = bTotal ? (bLoaded / bTotal) : 0; - if (pLoaded<1) { - setPercentLoaded( pLoaded ); - } else { - setPercentLoaded( 1 ); - progressTimer.stop(); - } - } - - public function onSeek( event:ControlEvent ):void { - components.mediaPlayer.seekMedia( totalTime * seekBar.value ); - } - - public function onVolume( event:ControlEvent ):void { - currentVolume=volumeBar.value; - setMuteState( false ); - components.mediaPlayer.setVolume( currentVolume ); - } - - public function onMute( event:MouseEvent ):void { - setMuteState( !muteState ); - var newVolume:Number = (muteState ? 0 : currentVolume); - if (volumeBar) { - volumeBar.setPosition( newVolume ); - } - components.mediaPlayer.setVolume( newVolume ); - } - - public function onPlayPause( event:MouseEvent ):void { - setPlayState( !playState ); - if (playState) { - components.mediaPlayer.playMedia(); - } else { - components.mediaPlayer.pauseMedia(); - } - } - - public function onToggleFullScreen( event:MouseEvent ):void { - var on:Boolean = (stage.displayState == StageDisplayState.FULL_SCREEN); - stage.displayState=on?StageDisplayState.NORMAL:StageDisplayState.FULL_SCREEN; - } - - public function onMenu( event:MouseEvent ):void { - dispatchEvent( new ControlEvent( ControlEvent.MENU ) ); - } - - public function setVolume( vol:Number ):void { - currentVolume=vol; - if (volumeBar) { - volumeBar.setPosition( vol ); - } - } - - private function updatePlayTime():void { - totalTime=components.mediaPlayer.getDuration(); - var currentTime:Number=components.mediaPlayer.getCurrentTime(); - - if (skin.formatTime is Function) { - if (playTime) { - playTime.text=skin.formatTime(currentTime).time; - } - - if (duration) { - duration.text=skin.formatTime(totalTime).time; - } - } - - if (seekBar&&totalTime&&! seekBar.dragging) { - seekBar.updateValue( currentTime / totalTime ); - } - } - - public function setPercentLoaded( percent:Number ):void { - if (seekBar&&seekBar.skin.progress) { - seekBar.skin.progress.width = (seekBar.track.width * percent); - } - } - - public function setPlayState( newState:Boolean ):void { - if (playPauseButton) { - playPauseButton.onButton.visible=! newState; - playPauseButton.offButton.visible=newState; - playState=newState; - } - } - - public function setMuteState( newState:Boolean ):void { - if (mute) { - mute.onButton.visible=newState; - mute.offButton.visible=! newState; - muteState=newState; - } - } - - public var mute:MovieClip; - public var volumeBar:Slider; - public var seekBar:Slider; - public var playPauseButton:MovieClip; - public var playTime:TextField; - public var duration:TextField; - public var toggleFullScreen:MovieClip; - public var menuButton:MovieClip; - - public var playState:Boolean; - public var muteState:Boolean; - public var updateTimer:Timer; - public var progressTimer:Timer; - public var currentVolume:Number=1; - public var totalTime:Number=0; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/controls/ControlEvent.as b/minplayer/com/mediafront/display/media/controls/ControlEvent.as deleted file mode 100755 index dbc67104..00000000 --- a/minplayer/com/mediafront/display/media/controls/ControlEvent.as +++ /dev/null @@ -1,50 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media.controls { - import flash.events.*; - - public class ControlEvent extends Event { - public static const PLAY:String="controlPlay"; - public static const PAUSE:String="controlPause"; - public static const SEEK:String="controlSeek"; - public static const VOLUME:String="controlVolume"; - public static const TOGGLEFULL:String="controlToggleFull"; - public static const MENU:String="controlMenu"; - public static const CONTROL_SET:String="controlSet"; - public static const CONTROL_UPDATE:String="controlUpdate"; - - public function ControlEvent( type:String, a:Object = null ) { - super( type, true ); - args=a; - } - - override public function toString():String { - return formatToString( "ControlEvent", "type", "eventPhase" ); - } - - override public function clone():Event { - return new ControlEvent( type, args ); - } - - public var args:Object; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/display/media/controls/PlayLoader.as b/minplayer/com/mediafront/display/media/controls/PlayLoader.as deleted file mode 100755 index 5e64779a..00000000 --- a/minplayer/com/mediafront/display/media/controls/PlayLoader.as +++ /dev/null @@ -1,98 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.display.media.controls { - import com.mediafront.plugin.SkinablePlugin; - import com.mediafront.display.media.MediaEvent; - import com.mediafront.display.Image; - import com.mediafront.plugin.PluginEvent; - import com.mediafront.utils.Settings; - import com.mediafront.utils.PlayLoaderSettings; - - import flash.display.*; - import flash.text.TextField; - import flash.events.*; - - public class PlayLoader extends SkinablePlugin { - public override function loadSettings( _settings:Object ):void { - super.loadSettings( new PlayLoaderSettings( _settings ) ); - super.loadSkin( settings.playLoader ); - } - - public override function initialize( comps:Object ):void { - super.initialize( comps ); - components.mediaPlayer.addEventListener( MediaEvent.PLAYING, onMediaEvent ); - components.mediaPlayer.addEventListener( MediaEvent.PAUSED, onMediaEvent ); - components.mediaPlayer.addEventListener( MediaEvent.BUFFERING, onMediaEvent ); - } - - public override function setSkin( _skin:MovieClip ):void { - playButton=_skin.playButton; - if (playButton) { - playButton.buttonMode=true; - playButton.mouseChildren=false; - playButton.addEventListener( MouseEvent.CLICK, onPlay ); - } - - loader=_skin.loader; - setPlayLoadState( true, true, false ); - super.setSkin( _skin ); - } - - public function onPlay( event:MouseEvent ) { - onMediaEvent( new MediaEvent( MediaEvent.PLAYING ) ); - components.mediaPlayer.playMedia(); - } - - public function onMediaEvent( event:* ) { - if (skin) { - switch ( event.type ) { - case MediaEvent.BUFFERING : - setPlayLoadState( true, true, false ); - break; - case MediaEvent.PLAYING : - setPlayLoadState( false, false, false ); - break; - case MediaEvent.PAUSED : - setPlayLoadState( true, false, true ); - break; - } - } - } - - public function setPlayLoadState( showSkin:Boolean, showLoader:Boolean, showPlay:Boolean ) { - if (skin) { - skin.visible=showSkin; - } - - if (loader) { - loader.visible=showLoader; - } - - if (playButton) { - playButton.visible=showPlay; - } - } - - public var playButton:MovieClip; - public var loader:MovieClip; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/plugin/Plugin.as b/minplayer/com/mediafront/plugin/Plugin.as deleted file mode 100755 index d7c64817..00000000 --- a/minplayer/com/mediafront/plugin/Plugin.as +++ /dev/null @@ -1,60 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.plugin { - import com.mediafront.utils.Settings; - import com.mediafront.plugin.PluginEvent; - - import flash.display.Sprite; - import flash.system.Security; - import flash.events.Event; - - public class Plugin extends Sprite { - public function Plugin() { - super(); - Security.allowDomain("*"); - } - - public function loadSettings( _settings:Object ):void { - settings=new Settings(_settings); - dispatchEvent( new Event( PluginEvent.PLUGIN_LOADED ) ); - } - - public function set info( pluginInfo:Object ):void { - _info=pluginInfo; - } - - public function get info():Object { - return _info; - } - - public function initialize( comps:Object ):void { - components=comps; - } - - public function onReady():void { - } - - protected var components:Object; - protected var settings:Object; - private var _info:Object; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/plugin/PluginEvent.as b/minplayer/com/mediafront/plugin/PluginEvent.as deleted file mode 100755 index f571d94a..00000000 --- a/minplayer/com/mediafront/plugin/PluginEvent.as +++ /dev/null @@ -1,27 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.plugin { - public class PluginEvent { - public static const PLUGIN_ADDED:String="pluginAdded"; - public static const PLUGIN_LOADED:String="pluginLoaded"; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/plugin/PluginLoader.as b/minplayer/com/mediafront/plugin/PluginLoader.as deleted file mode 100755 index a485e0cf..00000000 --- a/minplayer/com/mediafront/plugin/PluginLoader.as +++ /dev/null @@ -1,173 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.plugin { - import flash.events.*; - import flash.display.*; - import flash.utils.getDefinitionByName; - import flash.display.DisplayObject; - import flash.net.*; - import com.mediafront.utils.Settings; - import com.mediafront.utils.Utils; - import com.mediafront.plugin.PluginEvent; - - public class PluginLoader extends Sprite { - // Constructor. - public function PluginLoader( pluginInfo:Object ) { - super(); - - info=pluginInfo; - _syncFlags=0; - _loaded=0; - _loading=false; - dependencyMap = new Object(); - - // Set the visibility of this sprite based on plugin information. - visible=pluginInfo.visible; - - // The current sync flag... - var syncFlag:uint=1; - - // Iterate through all our dependencies. - for each (var dependency:String in pluginInfo.dependencies) { - // Store this value in our depency map. - dependencyMap[dependency]=syncFlag; - - // Set a different sync flag for each dependency. - _syncFlags |= ( 1 << syncFlag++ );//From 0000 to 0001 - } - } - - // Try to load the plugin. - public function loadPlugin( plugin:PluginLoader ):uint { - // Check to see if we have a dependency on this plugin. - if (! _loaded&&dependencyMap.hasOwnProperty(plugin.type)) { - - // Reset the sync bit for this dependency. - _syncFlags &= ~(1 << dependencyMap[plugin.type]); - - // Try to load. - load(); - } - - // Return if we are finished loading or not. - return _loaded; - } - - // Load the plugin. - public function load( baseURL:String = null ):void { - if (baseURL) { - _baseURL=baseURL; - } - // Need to wait for all of our dependencies to be loaded first. - if (! _syncFlags&&! _loading) { - - // Set our loading flag. - _loading=true; - - if (info.definition) { - // Try to load the plugin directly... if this doesn't work, then we will - // fall back to loading the SWF file. - try { - // See if this object exists. - var ClassReference:Class=getDefinitionByName(info.definition) as Class; - addPlugin(new ClassReference()); - } catch (e:ReferenceError) { - // If the class object does not exist, it will throw an exception to be caught here - // where it will try to load the SWF file within the plugins folder. catch (e:ReferenceError) { - // Load the SWF. - loadSWF(); - } - } else { - loadSWF(); - } - } - } - - private function loadSWF():void { - if( _baseURL ) { - _swfLoader = new Loader(); - _swfLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, pluginLoaded ); - _swfLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, errorHandler ); - - var pluginURL:String=""; - pluginURL+=info.path.match(/^http(s)?\:\/\//)?'':_baseURL+"/"; - pluginURL+=info.path; - _swfLoader.load( new URLRequest( pluginURL ) ); - } - } - - // Typical error handler. - private function errorHandler( event:IOErrorEvent ):void { - Utils.debug( event.toString() ); - } - - // Called when the plugin SWF has finished loading. - private function pluginLoaded( event:Event ):void { - // Save the component. - addPlugin( _swfLoader.content ); - } - - // Used the add a plugin object to the plugin loader. - private function addPlugin( object:* ):void { - // Assign the component to the object. - component=object; - - // Add this component to the stage. - addChild( component ); - - // Now listen for when plugin is completely loaded. - component.addEventListener( PluginEvent.PLUGIN_LOADED, onPluginLoaded ); - - // Let the plugin manager know that a plugin has been added. - dispatchEvent( new Event( PluginEvent.PLUGIN_ADDED ) ); - } - - // Called when a plugin has finished loading. - private function onPluginLoaded( event:Event ):void { - // Set our loaded flag to true, and loading flag to false. - _loaded=1; - _loading=false; - - // Stop the propogation so that the manager doesn't get the event. - event.stopPropagation(); - - // Dispatch our own event to the plugin manager to let him know the - // pluin has finished loading. - dispatchEvent( new Event( PluginEvent.PLUGIN_LOADED ) ); - } - - public function get type():String { - return info.type; - } - - public var component:*; - public var dependencyMap:Object; - public var info:Object; - - private var _loaded:uint; - private var _loading:Boolean; - private var _baseURL:String; - - private var _syncFlags:uint; - private var _swfLoader:Loader; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/plugin/PluginManager.as b/minplayer/com/mediafront/plugin/PluginManager.as deleted file mode 100755 index 41e3a9e2..00000000 --- a/minplayer/com/mediafront/plugin/PluginManager.as +++ /dev/null @@ -1,318 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.plugin { - import com.mediafront.utils.Settings; - import com.mediafront.utils.Utils; - import com.mediafront.plugin.PluginEvent; - import com.mediafront.plugin.PluginLoader; - - import flash.events.Event; - import flash.display.*; - import flash.events.TimerEvent; - import flash.system.Security; - import flash.utils.Timer; - import flash.external.ExternalInterface; - import flash.display.Stage; - import flash.display.StageDisplayState; - import flash.system.Capabilities; - - public class PluginManager extends Sprite { - // Constructor. - public function PluginManager() { - super(); - - // Allow control for laoded SWF's - Security.allowDomain("*"); - - // Store the size of this player. - _lastWidth=stage.stageWidth; - _lastHeight=stage.stageHeight; - - // Set the stage properties. - stage.scaleMode=StageScaleMode.NO_SCALE; - stage.align=StageAlign.TOP_LEFT; - stage.addEventListener(Event.RESIZE, resizeHandler); - - // Initialize our plugins object. - _plugins = new Object(); - - // Create our settings object. - _settings=new Settings(null); - _settings.setLoaderInfo( stage.loaderInfo ); - - // Check to see if the external interface is ready. - if (ExternalInterface.available||isDebugBuild()) { - // If so, then load the plugin manager. - loadManager(); - } else { - // Otherwise, start a check interval. - startTimerCheck(); - } - } - - // Returns true if the swf is built in debug mode - public static function isDebugBuild():Boolean { - return new Error().getStackTrace().search(/:[0-9]+]$/m) > -1; - } - - // Loads the player. - private function loadManager():void { - // Add our JavaScript callbacks. - addCallbacks(); - - // Load the configuration file. - loadConfigFile( _settings.config ); - } - - // Start a timer check. - private function startTimerCheck() { - // Declare the readyTime if we have not already done so. - if (! _readyTimer) { - _readyTimer=new Timer(200); - _readyTimer.addEventListener(TimerEvent.TIMER, timerHandler); - } - - // Start the ready timer. - _readyTimer.start(); - } - - // Check the gateway every timer interval. - private function timerHandler(event:TimerEvent):void { - if (ExternalInterface.available) { - _readyTimer.stop(); - loadManager(); - } - } - - // Allow external components to load plugins. - private function addCallbacks():void { - try { - ExternalInterface.addCallback( "loadConfig", loadConfig ); - ExternalInterface.addCallback( "loadConfigFile", loadConfigFile ); - ExternalInterface.addCallback( "loadPlugins", loadPlugins ); - ExternalInterface.addCallback( "loadPlugin", loadPlugin ); - ExternalInterface.addCallback( "showPlugin", showPlugin ); - } catch (error:Error) { - Utils.debug("An Error occurred: " + error.message + "\n"); - } - } - - // Load the provided configuration. - public function loadConfigFile( config:String ):void { - if (config) { - var xmlURL:String=""; - xmlURL+=_settings.baseURL+"/"; - xmlURL+="config/"+config+".xml"; - Utils.loadFile( xmlURL, onConfigLoad, onConfigLoadError ); - } - } - - // Load the player with a configuration object. - public function loadConfig( config:Object ):void { - // Set the settings. - _settings.setSettings( config.settings ); - - // Now load the plugins. - loadPlugins( config.plugins ); - } - - // Load a series of plugins. - public function loadPlugins( plugins:Array ):void { - // Iterate through all of our plugins and add them. - for each (var pluginInfo:Object in plugins) { - loadPlugin( pluginInfo ); - } - } - - // Load a single plugin - public function loadPlugin( pluginInfo:Object ):void { - // Tell the outside world what is going on. - Utils.debug("Loading Plugin: " + pluginInfo.name, _settings.debug ); - - // Create the plugin and add the event listeners. - var plugin:PluginLoader=new PluginLoader(pluginInfo); - plugin.addEventListener( PluginEvent.PLUGIN_ADDED, onPluginAdded ); - plugin.addEventListener( PluginEvent.PLUGIN_LOADED, onPluginLoaded ); - - // Add the plugin to the stage. - addChild( plugin ); - - // If this type has not beed added yet, we need to create an array to add this to. - if (! _plugins.hasOwnProperty(pluginInfo.type)) { - _plugins[pluginInfo.type] = new Array(); - } - - // Add the plugin to the plugins array. - _plugins[pluginInfo.type].push(plugin); - - // Now load the plugin. - plugin.load(_settings.baseURL); - } - - // Hide or show a plugin. - public function showPlugin( type:String, show:Boolean ):void { - Utils.debug(type); - for each (var plugin:PluginLoader in _plugins[type]) { - plugin.visible=show; - } - } - - // Called when the configuration file is loaded. - private function onConfigLoad(event:Event):void { - // Get the configuration XML. - var configXML:XML=new XML(event.target.data); - var config:Object = {settings:{}, plugins:new Array()}; - - // Iterate through the settings from the XML. - for each (var setting:XML in configXML.settings.children()) { - config.settings[Utils.getLocalName(setting)]=setting.children().toString(); - } - - // Iterate through the plugins from the XML. - for each (var plugin:XML in configXML.plugins.plugin) { - - // Get all the dependencies for this plugin. - var dependencies:Array = new Array(); - for each (var dependency:XML in plugin.dependencies.elements()) { - dependencies.push( dependency.children().toString() ); - } - - // Add this to the plugins of our config object. - config.plugins.push({ - name:plugin.name.children().toString(), - definition:plugin.definition.children().toString(), - path:plugin.path.children().toString(), - skin:plugin.skin.children().toString(), - type:plugin.type.children().toString(), - visible:(plugin.visible.children().toString() == 'false' ? false : true), - dependencies:dependencies - }); - } - - // Now load the configuration. - loadConfig( config ); - } - - // Called when the configuration fails to load. - private function onConfigLoadError(event:Object):void { - Utils.debug( event.toString() ); - } - - // Called when a plugin has been added to the stage. - private function onPluginAdded( event:Event ):void { - // Get the loaded plugin. - var loadedPlugin:PluginLoader = (event.target as PluginLoader); - - // Set the info. - loadedPlugin.component.info=loadedPlugin.info; - - // Load the settings. - loadedPlugin.component.loadSettings( (_settings as Object) ); - } - - // Called when a plugin has finished loading. - private function onPluginLoaded( event:Event ):void { - // Get the loaded plugin. - var loadedPlugin:PluginLoader = (event.target as PluginLoader); - - // Tell the outside world what just happened. - Utils.debug("Plugin Loaded: " + loadedPlugin.name, _settings.debug ); - - // Iterate through all of this plugins dependencies and contruct - // and object of only the components that this plugin is dependent on. - var components:Object = new Object(); - for( var dependency:String in loadedPlugin.dependencyMap ) {; - components[dependency]=_plugins[dependency][0].component; - } - - // Pass our components into our loaded Plugin. - loadedPlugin.component.initialize( components ); - - // See if all the plugins have finished loading. - var allLoaded:uint=1; - - // Now iterate through all of our plugins - for each (var instances:Array in _plugins) { - - // Iterate through all of the plugin instances. - for each (var plugin:PluginLoader in instances) { - - // Load this plugin, and let us know if it is fully loaded. - allLoaded*=plugin.loadPlugin(loadedPlugin); - } - } - - // If all the plugins have finished loading, then we need to signal them accordingly. - if (allLoaded) { - // Tell the outside world what just happened. - Utils.debug( "All Plugins Loaded!", _settings.debug ); - - onReady(); - } - } - - // Called when all plugins are ready to go. - private function onReady():void { - // Iterate through all plugin instances. - for each (var instances:Array in _plugins) { - for each (var plugin:PluginLoader in instances) { - - // Call the onReady function. - plugin.component.onReady(); - } - } - - if (ExternalInterface.available&&_settings) { - ExternalInterface.call( "onFlashPlayerReady", _settings.id ); - } - } - - // Called when the player is resizing. - private function resizeHandler(event:Event):void { - if (stage) { - // Calculate the change in size. - var deltaX:Number = (stage.stageWidth - _lastWidth); - var deltaY:Number = (stage.stageHeight - _lastHeight); - - // Iterate through all of our plugin instances. - for each (var instances:Array in _plugins) { - for each (var plugin:PluginLoader in instances) { - if (plugin.component) { - // Call the resize function on this plugin. - plugin.component.onResize( deltaX, deltaY ); - } - } - } - - // Save the width and height. - _lastWidth=stage.stageWidth; - _lastHeight=stage.stageHeight; - } - } - - private var _plugins:Object; - private var _settings:Settings; - private var _lastWidth:Number; - private var _lastHeight:Number; - private var _readyTimer:Timer; -} -} \ No newline at end of file diff --git a/minplayer/com/mediafront/plugin/SkinablePlugin.as b/minplayer/com/mediafront/plugin/SkinablePlugin.as deleted file mode 100755 index 374ed25c..00000000 --- a/minplayer/com/mediafront/plugin/SkinablePlugin.as +++ /dev/null @@ -1,78 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.plugin { - import com.mediafront.utils.Utils; - import com.mediafront.display.Skinable; - import com.mediafront.utils.Settings; - import com.mediafront.plugin.PluginEvent; - - import flash.system.Security; - import flash.display.MovieClip; - import flash.events.Event; - - public class SkinablePlugin extends Skinable { - public function SkinablePlugin() { - super(); - Security.allowDomain("*"); - } - - public function loadSettings( _settings:Object ):void { - settings=_settings; - } - - public override function loadSkin( _skinName:String ):void { - var skinURL:String=""; - info.skin=info.skin.replace('%skin',settings.skin); - skinURL+=info.skin.match(/^http(s)?\:\/\//) ? '' : settings.baseURL+"/"; - skinURL+=info.skin; - Utils.debug("Loading Skin: " + skinURL, settings.debug); - super.loadSkin( skinURL ); - } - - public override function setSkin( _skin:MovieClip ):void { - dispatchEvent( new Event( PluginEvent.PLUGIN_LOADED ) ); - } - - public function getSettings():Object { - return settings; - } - - public function set info( pluginInfo:Object ):void { - _info=pluginInfo; - } - - public function get info():Object { - return _info; - } - - public function initialize( comps:Object ):void { - components=comps; - } - - public function onReady():void { - } - - protected var components:Object; - protected var settings:Object; - private var _info:Object; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/utils/ControlSettings.as b/minplayer/com/mediafront/utils/ControlSettings.as deleted file mode 100755 index a07a642b..00000000 --- a/minplayer/com/mediafront/utils/ControlSettings.as +++ /dev/null @@ -1,31 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.utils { - public class ControlSettings extends Settings { - public function ControlSettings( settings:Object ) { - super( settings ); - loadSettings(); - } - - public var controlBar:String="controlBar"; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/utils/MediaSettings.as b/minplayer/com/mediafront/utils/MediaSettings.as deleted file mode 100755 index 523fd84c..00000000 --- a/minplayer/com/mediafront/utils/MediaSettings.as +++ /dev/null @@ -1,35 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.utils { - public class MediaSettings extends Settings { - public function MediaSettings( settings:Object ) { - super( settings ); - loadSettings(); - } - - public var file:String=""; - public var image:String=""; - public var mediaPlayer:String="mediaPlayer"; - public var stream:String=null; - public var autostart:Boolean=false; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/utils/MenuSettings.as b/minplayer/com/mediafront/utils/MenuSettings.as deleted file mode 100755 index d5b09304..00000000 --- a/minplayer/com/mediafront/utils/MenuSettings.as +++ /dev/null @@ -1,29 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.utils { - public class MenuSettings extends Settings { - public function MenuSettings( settings:Object ) { - super( settings ); - loadSettings(); - } - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/utils/PlayLoaderSettings.as b/minplayer/com/mediafront/utils/PlayLoaderSettings.as deleted file mode 100755 index 5bddbd7d..00000000 --- a/minplayer/com/mediafront/utils/PlayLoaderSettings.as +++ /dev/null @@ -1,31 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.utils { - public class PlayLoaderSettings extends Settings { - public function PlayLoaderSettings( settings:Object ) { - super( settings ); - loadSettings(); - } - - public var playLoader:String="playLoader"; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/utils/Settings.as b/minplayer/com/mediafront/utils/Settings.as deleted file mode 100755 index fa5bebb3..00000000 --- a/minplayer/com/mediafront/utils/Settings.as +++ /dev/null @@ -1,124 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.utils { - import com.mediafront.utils.Utils; - import flash.display.LoaderInfo; - - public class Settings extends Object { - // A copy constructor... - public function Settings( _settings:Object ) { - super(); - if (_settings) { - baseURL=_settings.baseURL; - skin=_settings.skin; - id=_settings.skin; - config=_settings.config; - debug=_settings.debug; - settings=_settings.settings; - loaderInfo=_settings.loaderInfo; - } - } - - public function setLoaderInfo( lInfo:LoaderInfo ):void { - // Store the loader info. - loaderInfo=lInfo; - - // Set the baseURL. - if (loaderInfo.parameters.hasOwnProperty("baseURL")) { - setValue( "baseURL", loaderInfo.parameters ); - } else { - baseURL=getBaseURL(loaderInfo); - } - - // Set the config file. - if (loaderInfo.parameters.hasOwnProperty("config")) { - setValue( "config", loaderInfo.parameters ); - } - } - - // Set the settings. - public function setSettings( _settings:Object ):void { - settings=_settings; - - // Now load using our settings. - loadSettings(); - } - - // Load the settings. - public function loadSettings():void { - // First go through all of the settings and set the defaults. - for (var setting:String in settings) { - setValue( setting, settings ); - } - - // Now go through all the parameters and override the defaults. - for (setting in loaderInfo.parameters) { - setValue( setting, loaderInfo.parameters ); - } - } - - private function setValue( param:String, _settings:Object ):void { - if (hasOwnProperty(param)) { - this[param]=parseValue(typeof this[param],_settings[param]); - } - } - - private function parseValue( type:String, value:* ):* { - switch ( type ) { - case "boolean" : - return parseBoolean( value ); - - case "string" : - return parseBoolean( value ) ? value : ""; - - default : - return value; - } - } - - private function getBaseURL( loaderInfo:LoaderInfo ):String { - var paths:Array = new Array(); - var file:String=LoaderInfo(loaderInfo).url; - if (file.search(/\?/)>=0) { - paths=file.split(/\?/); - file=paths[0]; - } - paths=file.split(/[\\\/]/); - - paths.pop(); - return paths.join("/"); - } - - private function parseBoolean( value:* ):Boolean { - return (!value || value=="false" || value=="none" || value=="0") ? false : true; - } - - // All global settings go into the base. - public var baseURL:String; - public var skin:String="default"; - public var id:String=""; - public var config:String="config"; - public var debug:Boolean=false; - public var settings:Object; - public var loaderInfo:LoaderInfo; - } -} \ No newline at end of file diff --git a/minplayer/com/mediafront/utils/Utils.as b/minplayer/com/mediafront/utils/Utils.as deleted file mode 100755 index 616adb55..00000000 --- a/minplayer/com/mediafront/utils/Utils.as +++ /dev/null @@ -1,82 +0,0 @@ -/** - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.mediafront.utils { - import flash.geom.Rectangle; - import flash.external.ExternalInterface; - import flash.net.URLLoader; - import flash.net.URLRequest; - import flash.net.URLRequestHeader; - import flash.events.Event; - import flash.events.IOErrorEvent; - - public class Utils { - public static function debug( debugText:String, shouldDebug:Boolean = true ):void { - if (shouldDebug) { - trace( debugText ); - if (ExternalInterface.available) { - ExternalInterface.call("onFlashPlayerDebug", debugText); - } - } - } - - public static function loadFile( _file:String, onLoaded:Function, onError:Function ):void { - var loader:URLLoader = new URLLoader(); - loader.addEventListener( Event.COMPLETE, onLoaded ); - loader.addEventListener( IOErrorEvent.IO_ERROR, onError ); - var request:URLRequest=new URLRequest(_file); - request.requestHeaders.push( new URLRequestHeader("pragma", "no-cache") ); - try { - loader.load( request ); - } catch (error:Error) { - onError(null); - } - } - - public static function getLocalName( element:XML ):String { - var elementName:String = (element.localName() as String); - if (elementName) { - return elementName.toLowerCase(); - } - return ""; - } - - public static function getScaledRect( ratio:Number, rect:Rectangle ):Rectangle { - var scaledRect:Rectangle=new Rectangle(rect.x,rect.y,rect.width,rect.height); - - if (ratio) { - var newRatio:Number = (rect.width / rect.height); - scaledRect.height = (newRatio > ratio) ? rect.height : Math.floor(rect.width / ratio); - scaledRect.width = (newRatio > ratio) ? Math.floor(rect.height * ratio) : rect.width; - scaledRect.x = Math.floor((rect.width - scaledRect.width) / 2); - scaledRect.y = Math.floor((rect.height - scaledRect.height) / 2); - } - - return scaledRect; - } - - public static function getFileExtension( path:String ):String { - return path.substring(path.lastIndexOf(".") + 1).toLowerCase(); - } - - public static var debugEnabled:Boolean=false; - } -} \ No newline at end of file diff --git a/minplayer/doc/files.html b/minplayer/doc/files.html new file mode 100644 index 00000000..5d451caa --- /dev/null +++ b/minplayer/doc/files.html @@ -0,0 +1,424 @@ + + + + + + JsDoc Reference - File Index + + + + + + + + + + +
+

File Index

+ + +
+

src/minplayer.async.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.compatibility.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.controller.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.display.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.file.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.flags.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.image.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.players.base.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.players.flash.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.players.html5.js

+ +
+ + + + +
+
+
+ + +
+ +
+

src/minplayer.players.vimeo.js

+ +
+ + + + +
+
+
+ + +
+ +
+

src/minplayer.playLoader.js

+ +
+ + + + +
+
+
+ +
+

src/minplayer.plugin.js

+ +
+ + + + +
+
+
+ + +
+
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:48 GMT-0700 (PDT) +
+ + \ No newline at end of file diff --git a/minplayer/doc/index.html b/minplayer/doc/index.html new file mode 100644 index 00000000..91e619db --- /dev/null +++ b/minplayer/doc/index.html @@ -0,0 +1,329 @@ + + + + + + JsDoc Reference - Index + + + + + + + + + + +
+

Class Index

+ + +
+

_global_

+ +
+
+ + +
+ +
+

minplayer.async

+ This class keeps track of asynchronous get requests for certain +variables within the player. +
+
+ +
+

minplayer.compatibility

+ This class is used to define the types of media that can be played +within the browser. +
+
+ +
+

minplayer.display

+ Base class used to provide the display and options for any component +deriving from this class. +
+
+ +
+

minplayer.file

+ A wrapper class used to provide all the data necessary to control an +individual file within this media player. +
+
+ +
+

minplayer.flags

+ This is a class used to keep track of flag states +which is used to control the busy cursor, big play button, among other +items in which multiple components can have an interest in hiding or +showing a single element on the screen. +
+
+ +
+

minplayer.image

+ A class to easily handle images. +
+
+ +
+

minplayer.players.base

+ The base media player class where all media players derive from. +
+
+ +
+

minplayer.players.flash

+ The Flash media player class to control the flash fallback. +
+
+ +
+

minplayer.players.html5

+ The HTML5 media player implementation. +
+
+ +
+

minplayer.players.minplayer

+ The Flash media player class to control the flash fallback. +
+
+ +
+

minplayer.players.vimeo

+ The vimeo media player. +
+
+ +
+

minplayer.players.youtube

+ The YouTube media player. +
+
+ +
+

minplayer.plugin

+ The base class for all plugins. +
+
+ + +
+
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:48 GMT-0700 (PDT) +
+ + \ No newline at end of file diff --git a/minplayer/doc/symbols/_global_.html b/minplayer/doc/symbols/_global_.html new file mode 100644 index 00000000..a40b7d36 --- /dev/null +++ b/minplayer/doc/symbols/_global_.html @@ -0,0 +1,412 @@ + + + + + + + JsDoc Reference - _global_ + + + + + + + + + + + + + +
+ +

+ + Built-In Namespace _global_ +

+ + +

+ + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  +
+ minplayer +
+
The minplayer namespace.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
checkPlayType(elem, playType) +
+
+
+ + + + + + + + + + + + +
+ Field Detail +
+ + +
+ + + minplayer + +
+
+ The minplayer namespace. + +
+ Defined in: minplayer.compatibility.js. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + checkPlayType(elem, playType) + +
+
+ + +
+ Defined in: minplayer.compatibility.js. + + +
+ + + + +
+
Parameters:
+ +
+ elem + +
+
+ +
+ playType + +
+
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/jQuery.fn.minplayer.html b/minplayer/doc/symbols/jQuery.fn.minplayer.html new file mode 100644 index 00000000..4f914790 --- /dev/null +++ b/minplayer/doc/symbols/jQuery.fn.minplayer.html @@ -0,0 +1,345 @@ + + + + + + + JsDoc Reference - jQuery.fn.minplayer + + + + + + + + + + + + + +
+ +

+ + Class jQuery.fn.minplayer +

+ + +

+ + + + + + +
Defined in: minplayer.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ jQuery.fn.minplayer(options) +
+
+
+ + + + + + + + + + + + +
+
+ Class Detail +
+ +
+ jQuery.fn.minplayer(options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} options + +
+
The options for this jQuery prototype.
+ +
+ + + + + +
+
Returns:
+ +
{Array} jQuery object.
+ +
+ + + + +
+ + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.async.html b/minplayer/doc/symbols/minplayer.async.html new file mode 100644 index 00000000..f125a05c --- /dev/null +++ b/minplayer/doc/symbols/minplayer.async.html @@ -0,0 +1,535 @@ + + + + + + + JsDoc Reference - minplayer.async + + + + + + + + + + + + + +
+ +

+ + Class minplayer.async +

+ + +

+ + + + This class keeps track of asynchronous get requests for certain +variables within the player. + + +
Defined in: minplayer.async.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  +
+ queue +
+
The queue of callbacks to call when this value is determined.
+
  +
+ value +
+
The final value of this asynchronous variable.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
get(callback, pollValue) +
+
Retrieve the value of this variable.
+
  +
set(val) +
+
Sets the value of an asynchronous value.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.async() +
+ +
+ + +
+ + + + + + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + queue + +
+
+ The queue of callbacks to call when this value is determined. + + +
+ + + + + + + + +
+ + +
+ + + value + +
+
+ The final value of this asynchronous variable. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + get(callback, pollValue) + +
+
+ Retrieve the value of this variable. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
The function to call when the value is determined.
+ +
+ {function} pollValue + +
+
The poll function to try and get the value every +1 second if the value is not set.
+ +
+ + + + + + + + +
+ + +
+ + + set(val) + +
+
+ Sets the value of an asynchronous value. + + +
+ + + + +
+
Parameters:
+ +
+ {void} val + +
+
The value to set.
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.compatibility.html b/minplayer/doc/symbols/minplayer.compatibility.html new file mode 100644 index 00000000..2f18e9ad --- /dev/null +++ b/minplayer/doc/symbols/minplayer.compatibility.html @@ -0,0 +1,572 @@ + + + + + + + JsDoc Reference - minplayer.compatibility + + + + + + + + + + + + + +
+ +

+ + Class minplayer.compatibility +

+ + +

+ + + + This class is used to define the types of media that can be played +within the browser. +

+Usage: +


+  var playTypes = new minplayer.compatibility();
+
+  if (playTypes.videoOGG) {
+    console.log("This browser can play OGG video");
+  }
+
+  if (playTypes.videoH264) {
+    console.log("This browser can play H264 video");
+  }
+
+  if (playTypes.videoWEBM) {
+    console.log("This browser can play WebM video");
+  }
+
+  if (playTypes.audioOGG) {
+    console.log("This browser can play OGG audio");
+  }
+
+  if (playTypes.audioMP3) {
+    console.log("This browser can play MP3 audio");
+  }
+
+  if (playTypes.audioMP4) {
+    console.log("This browser can play MP4 audio");
+  }
+
+ + +
Defined in: minplayer.compatibility.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  +
+ audioMP3 +
+
Can play audio MP3
+
  +
+ audioMP4 +
+
Can play audio MP4
+
  +
+ audioOGG +
+
Can play audio OGG
+
  +
+ videoH264 +
+
Can play H264 video
+
  +
+ videoOGG +
+
Can play OGG video
+
  +
+ videoWEBM +
+
Can play WEBM video
+
+ + + + + + + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.compatibility() +
+ +
+ + +
+ + + + + + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + audioMP3 + +
+
+ Can play audio MP3 + + +
+ + + + + + + + +
+ + +
+ + + audioMP4 + +
+
+ Can play audio MP4 + + +
+ + + + + + + + +
+ + +
+ + + audioOGG + +
+
+ Can play audio OGG + + +
+ + + + + + + + +
+ + +
+ + + videoH264 + +
+
+ Can play H264 video + + +
+ + + + + + + + +
+ + +
+ + + videoOGG + +
+
+ Can play OGG video + + +
+ + + + + + + + +
+ + +
+ + + videoWEBM + +
+
+ Can play WEBM video + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.controller.base.html b/minplayer/doc/symbols/minplayer.controller.base.html new file mode 100644 index 00000000..f6f9cb7c --- /dev/null +++ b/minplayer/doc/symbols/minplayer.controller.base.html @@ -0,0 +1,674 @@ + + + + + + + JsDoc Reference - minplayer.controller.base + + + + + + + + + + + + + +
+ +

+ + Class minplayer.controller.base +

+ + +

+ +
Extends + minplayer.display.
+ + + This is the base minplayer controller. Other controllers can derive +from the base and either build on top of it or simply define the elements +that this base controller uses. + + +
Defined in: minplayer.controller.base.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.controller.base(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
+
  + +
+
  +
playPause(state, media) +
+
Plays or pauses the media.
+
  +
setPlayPause(state) +
+
Sets the play and pause state of the control bar.
+
  +
setTimeString(element, time) +
+
Sets the time string on the control bar.
+
+ + + +
+
Methods borrowed from class minplayer.display:
fullscreen, getDisplay, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, destroy, get, loadPlugins, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.controller.base(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin#construct
+ +
+ + +
+ + +
+ + {object} + getElements() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The elements defined by this display.
+ +
+ + + +
+
See:
+ +
minplayer.display#getElements
+ +
+ + +
+ + +
+ + + playPause(state, media) + +
+
+ Plays or pauses the media. + + +
+ + + + +
+
Parameters:
+ +
+ {bool} state + +
+
true => play, false => pause.
+ +
+ {object} media + +
+
The media player object.
+ +
+ + + + + + + + +
+ + +
+ + + setPlayPause(state) + +
+
+ Sets the play and pause state of the control bar. + + +
+ + + + +
+
Parameters:
+ +
+ {boolean} state + +
+
TRUE - Show Play, FALSE - Show Pause.
+ +
+ + + + + + + + +
+ + +
+ + + setTimeString(element, time) + +
+
+ Sets the time string on the control bar. + + +
+ + + + +
+
Parameters:
+ +
+ {string} element + +
+
The name of the element to set.
+ +
+ {number} time + +
+
The total time amount to set.
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Mar 06 2012 19:40:59 GMT-0800 (PST) +
+ + diff --git a/minplayer/doc/symbols/minplayer.controllers.base.html b/minplayer/doc/symbols/minplayer.controllers.base.html new file mode 100644 index 00000000..71479dbc --- /dev/null +++ b/minplayer/doc/symbols/minplayer.controllers.base.html @@ -0,0 +1,674 @@ + + + + + + + JsDoc Reference - minplayer.controllers.base + + + + + + + + + + + + + +
+ +

+ + Class minplayer.controllers.base +

+ + +

+ +
Extends + minplayer.display.
+ + + This is the base minplayer controller. Other controllers can derive +from the base and either build on top of it or simply define the elements +that this base controller uses. + + +
Defined in: minplayer.controllers.base.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.controllers.base(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
name, options, pluginReady, queue
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
+
  + +
+
  +
playPause(state, media) +
+
Plays or pauses the media.
+
  +
setPlayPause(state) +
+
Sets the play and pause state of the control bar.
+
  +
setTimeString(element, time) +
+
Sets the time string on the control bar.
+
+ + + +
+
Methods borrowed from class minplayer.display:
bind, getDisplay, getScaledRect, isValid, onResize, trigger
Methods borrowed from class minplayer.plugin:
addPlugin, checkQueue, destroy, get, loadPlugins, ready
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.controllers.base(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin#construct
+ +
+ + +
+ + +
+ + {object} + getElements() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The elements defined by this display.
+ +
+ + + +
+
See:
+ +
minplayer.display#getElements
+ +
+ + +
+ + +
+ + + playPause(state, media) + +
+
+ Plays or pauses the media. + + +
+ + + + +
+
Parameters:
+ +
+ {bool} state + +
+
true => play, false => pause.
+ +
+ {object} media + +
+
The media player object.
+ +
+ + + + + + + + +
+ + +
+ + + setPlayPause(state) + +
+
+ Sets the play and pause state of the control bar. + + +
+ + + + +
+
Parameters:
+ +
+ {boolean} state + +
+
TRUE - Show Play, FALSE - Show Pause.
+ +
+ + + + + + + + +
+ + +
+ + + setTimeString(element, time) + +
+
+ Sets the time string on the control bar. + + +
+ + + + +
+
Parameters:
+ +
+ {string} element + +
+
The name of the element to set.
+ +
+ {number} time + +
+
The total time amount to set.
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Sun Feb 19 2012 00:13:02 GMT-0600 (CST) +
+ + diff --git a/minplayer/doc/symbols/minplayer.display.html b/minplayer/doc/symbols/minplayer.display.html new file mode 100644 index 00000000..3e4d4229 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.display.html @@ -0,0 +1,881 @@ + + + + + + + JsDoc Reference - minplayer.display + + + + + + + + + + + + + +
+ +

+ + Class minplayer.display +

+ + +

+ +
Extends + minplayer.plugin.
+ + + Base class used to provide the display and options for any component +deriving from this class. Components who derive are expected to provide +the elements that they define by implementing the getElements method. + + +
Defined in: minplayer.display.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.display(name, context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
context, lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
+
  +
fullscreen(full) +
+
Make this display element go fullscreen.
+
  + +
Gets the full screen element.
+
  +
getDisplay(context, options) +
+
Returns the display for this component.
+
  + +
Returns all the jQuery elements that this component uses.
+
  +
getScaledRect(ratio, rect) +
+
Returns a scaled rectangle provided a ratio and the container rect.
+
  + +
Checks to see if we are in fullscreen mode.
+
  +
isValid() +
+
Returns if this component is valid and exists within the DOM.
+
  + +
Called when the window resizes.
+
  + +
Toggle fullscreen.
+
+ + + +
+
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, create, destroy, get, poll, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.display(name, context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {string} name + +
+
The name of this plugin.
+ +
+ {object} context + +
+
The jQuery context this component resides.
+ +
+ {object} options + +
+
The options for this component.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin.construct
+ +
+ + +
+ + +
+ + + fullscreen(full) + +
+
+ Make this display element go fullscreen. + + +
+ + + + +
+
Parameters:
+ +
+ {boolean} full + +
+
Tell the player to go into fullscreen or not.
+ +
+ + + + + + + + +
+ + +
+ + {object} + fullScreenElement() + +
+
+ Gets the full screen element. + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The display to be used for full screen support.
+ +
+ + + + +
+ + +
+ + {object} + getDisplay(context, options) + +
+
+ Returns the display for this component. + + +
+ + + + +
+
Parameters:
+ +
+ {object} context + +
+
The original context.
+ +
+ {object} options + +
+
The options for this component.
+ +
+ + + + + +
+
Returns:
+ +
{object} The jQuery context for this display.
+ +
+ + + + +
+ + +
+ + {object} + getElements() + +
+
+ Returns all the jQuery elements that this component uses. + + +
+ + + + + + + + +
+
Returns:
+ +
{object} An object which defines all the jQuery elements that +this component uses.
+ +
+ + + + +
+ + +
+ + {object} + getScaledRect(ratio, rect) + +
+
+ Returns a scaled rectangle provided a ratio and the container rect. + + +
+ + + + +
+
Parameters:
+ +
+ {number} ratio + +
+
The width/height ratio of what is being scaled.
+ +
+ {object} rect + +
+
The bounding rectangle for scaling.
+ +
+ + + + + +
+
Returns:
+ +
{object} The Rectangle object of the scaled rectangle.
+ +
+ + + + +
+ + +
+ + {boolean} + isFullScreen() + +
+
+ Checks to see if we are in fullscreen mode. + + +
+ + + + + + + + +
+
Returns:
+ +
{boolean} TRUE - fullscreen, FALSE - otherwise.
+ +
+ + + + +
+ + +
+ + {boolean} + isValid() + +
+
+ Returns if this component is valid and exists within the DOM. + + +
+ + + + + + + + +
+
Returns:
+ +
{boolean} TRUE if the plugin display is valid.
+ +
+ + + + +
+ + +
+ + + onResize() + +
+
+ Called when the window resizes. + + +
+ + + + + + + + + + + +
+ + +
+ + + toggleFullScreen() + +
+
+ Toggle fullscreen. + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.file.html b/minplayer/doc/symbols/minplayer.file.html new file mode 100644 index 00000000..ce07b35e --- /dev/null +++ b/minplayer/doc/symbols/minplayer.file.html @@ -0,0 +1,611 @@ + + + + + + + JsDoc Reference - minplayer.file + + + + + + + + + + + + + +
+ +

+ + Class minplayer.file +

+ + +

+ + + + A wrapper class used to provide all the data necessary to control an +individual file within this media player. + + +
Defined in: minplayer.file.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.file(file) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
Returns the best player for the job.
+
  + +
Returns the file extension of the file path.
+
  +
getId() +
+
Returns the ID for this media file.
+
  + +
Returns the proper mimetype based off of the extension.
+
  + +
The priority of this file is determined by the priority of the best +player multiplied by the priority of the mimetype.
+
  +
getType() +
+
The type of media this is: video or audio.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.file(file) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} file + +
+
A media file object with minimal required information.
+ +
+ + + + + + + + +
+ + + + + + + +
+ Method Detail +
+ + +
+ + {string} + getBestPlayer() + +
+
+ Returns the best player for the job. + + +
+ + + + + + + + +
+
Returns:
+ +
{string} The best player to play the media file.
+ +
+ + + + +
+ + +
+ + {string} + getFileExtension() + +
+
+ Returns the file extension of the file path. + + +
+ + + + + + + + +
+
Returns:
+ +
{string} The file extension.
+ +
+ + + + +
+ + +
+ + {string} + getId() + +
+
+ Returns the ID for this media file. + + +
+ + + + + + + + +
+
Returns:
+ +
{string} The id for this media file which is provided by the player.
+ +
+ + + + +
+ + +
+ + {string} + getMimeType() + +
+
+ Returns the proper mimetype based off of the extension. + + +
+ + + + + + + + +
+
Returns:
+ +
{string} The mimetype of the file based off of extension.
+ +
+ + + + +
+ + +
+ + {integer} + getPriority() + +
+
+ The priority of this file is determined by the priority of the best +player multiplied by the priority of the mimetype. + + +
+ + + + + + + + +
+
Returns:
+ +
{integer} The priority of the media file.
+ +
+ + + + +
+ + +
+ + {string} + getType() + +
+
+ The type of media this is: video or audio. + + +
+ + + + + + + + +
+
Returns:
+ +
{string} "video" or "audio" based on what the type of media this +is.
+ +
+ + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.flags.html b/minplayer/doc/symbols/minplayer.flags.html new file mode 100644 index 00000000..306920d0 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.flags.html @@ -0,0 +1,550 @@ + + + + + + + JsDoc Reference - minplayer.flags + + + + + + + + + + + + + +
+ +

+ + Class minplayer.flags +

+ + +

+ + + + This is a class used to keep track of flag states +which is used to control the busy cursor, big play button, among other +items in which multiple components can have an interest in hiding or +showing a single element on the screen. + +

+Usage: +


+  // Declare a flags variable.
+  var flags = new minplayer.flags();
+
+  // Set the flag based on two components interested in the flag.
+  flags.setFlag("component1", true);
+  flags.setFlag("component2", true);
+
+  // Print out the value of the flags. ( Prints 3 )
+  console.log(flags.flags);
+
+  // Now unset a single components flag.
+  flags.setFlag("component1", false);
+
+  // Print out the value of the flags.
+  console.log(flags.flags);
+
+  // Unset the other components flag.
+  flags.setFlag("component2", false);
+
+  // Print out the value of the flags.
+  console.log(flags.flags);
+
+

+ + +
Defined in: minplayer.flags.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  +
+ flag +
+
The flag.
+
  +
+ ids +
+
Id map to reference id with the flag index.
+
  +
+ numFlags +
+
The number of flags.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
setFlag(id, value) +
+
Sets a flag based on boolean logic operators.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.flags() +
+ +
+ + +
+ + + + + + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + flag + +
+
+ The flag. + + +
+ + + + + + + + +
+ + +
+ + + ids + +
+
+ Id map to reference id with the flag index. + + +
+ + + + + + + + +
+ + +
+ + + numFlags + +
+
+ The number of flags. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + setFlag(id, value) + +
+
+ Sets a flag based on boolean logic operators. + + +
+ + + + +
+
Parameters:
+ +
+ {string} id + +
+
The id of the controller interested in this flag.
+ +
+ {boolean} value + +
+
The value of this flag ( true or false ).
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.image.html b/minplayer/doc/symbols/minplayer.image.html new file mode 100644 index 00000000..f92da7c9 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.image.html @@ -0,0 +1,677 @@ + + + + + + + JsDoc Reference - minplayer.image + + + + + + + + + + + + + +
+ +

+ + Class minplayer.image +

+ + +

+ + + + A class to easily handle images. + + +
Defined in: minplayer.image.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.image(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
  +
+ loader +
+
The loader for the image.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
clear(callback) +
+
Clears an image.
+
  + +
+
  +
load(src) +
+
Loads an image.
+
  + +
+
  +
resize(width, height) +
+
Resize the image provided a width and height or nothing.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.image(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + +
+ + +
+ + + loader + +
+
+ The loader for the image. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + clear(callback) + +
+
+ Clears an image. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
Called when the image is done clearing.
+ +
+ + + + + + + + +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin.construct
+ +
+ + +
+ + +
+ + + load(src) + +
+
+ Loads an image. + + +
+ + + + +
+
Parameters:
+ +
+ {string} src + +
+
The source of the image to load.
+ +
+ + + + + + + + +
+ + +
+ + + onResize() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.display#onResize
+ +
+ + +
+ + +
+ + + resize(width, height) + +
+
+ Resize the image provided a width and height or nothing. + + +
+ + + + +
+
Parameters:
+ +
+ {integer} width + +
+
(optional) The width of the container.
+ +
+ {integer} height + +
+
(optional) The height of the container.
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.playLoader.base.html b/minplayer/doc/symbols/minplayer.playLoader.base.html new file mode 100644 index 00000000..f47ea649 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.playLoader.base.html @@ -0,0 +1,574 @@ + + + + + + + JsDoc Reference - minplayer.playLoader.base + + + + + + + + + + + + + +
+ +

+ + Class minplayer.playLoader.base +

+ + +

+ +
Extends + minplayer.display.
+ + + The play loader base class, which is used to control the busy +cursor, big play button, and the opaque background which shows when the +player is paused. + + +
Defined in: minplayer.playLoader.base.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.playLoader.base(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
  +
+ preview +
+
The preview image.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
Hide or show certain elements based on the state of the busy and big play +button.
+
  + +
The constructor.
+
  + +
Loads the preview image.
+
+ + + +
+
Methods borrowed from class minplayer.display:
fullscreen, getDisplay, getElements, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, destroy, get, loadPlugins, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.playLoader.base(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + +
+ + +
+ + + preview + +
+
+ The preview image. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + checkVisibility() + +
+
+ Hide or show certain elements based on the state of the busy and big play +button. + + +
+ + + + + + + + + + + +
+ + +
+ + + construct() + +
+
+ The constructor. + + +
+ + + + + + + + + + + +
+ + +
+ + + loadPreview() + +
+
+ Loads the preview image. + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Tue Mar 06 2012 19:40:59 GMT-0800 (PST) +
+ + diff --git a/minplayer/doc/symbols/minplayer.players.base.html b/minplayer/doc/symbols/minplayer.players.base.html new file mode 100644 index 00000000..61ec9a71 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.players.base.html @@ -0,0 +1,1913 @@ + + + + + + + JsDoc Reference - minplayer.players.base + + + + + + + + + + + + + +
+ +

+ + Class minplayer.players.base +

+ + +

+ +
Extends + minplayer.display.
+ + + The base media player class where all media players derive from. + + +
Defined in: minplayer.players.base.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.players.base(context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
  +
+ mediaFile +
+
The currently loaded media file.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
context, lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
<static>   +
minplayer.players.base.canPlay(file) +
+
Determine if we can play the media file.
+
  +
clear() +
+
Clears the media player.
+
  + +
+
  +
create() +
+
Creates the media player and inserts it in the DOM.
+
  +
destroy() +
+
+
  +
getBytesLoaded(callback) +
+
Return the bytes of media loaded.
+
  +
getBytesStart(callback) +
+
Return the start bytes for the loaded media.
+
  +
getBytesTotal(callback) +
+
Return the total amount of bytes.
+
  +
getCurrentTime(callback) +
+
Get the current time for the media being played.
+
  +
getDuration(callback) +
+
Return the duration of the loaded media.
+
  + +
+
<static>   +
minplayer.players.base.getMediaId(file) +
+
Returns the ID for the media being played.
+
  + +
Returns the media player object.
+
<static>   +
minplayer.players.base.getPriority() +
+
Get the priority of this media player.
+
  +
getVolume(callback) +
+
Get the volume from the loaded media.
+
  + +
Determines if the player should show the playloader.
+
  +
isReady() +
+
+
  +
load(file) +
+
Loads a new media player.
+
  + +
Should be called when the media is complete.
+
  +
onError(errorCode) +
+
Called when an error occurs.
+
  + +
Should be called when the media is done loading.
+
  + +
Should be called when the media is paused.
+
  + +
Should be called when the media is playing.
+
  +
onReady() +
+
Called when the player is ready to recieve events and commands.
+
  + +
Should be called when the player is waiting.
+
  +
pause() +
+
Pause the loaded media file.
+
  +
play() +
+
Play the loaded media file.
+
  + +
Returns if the media player is already within the DOM.
+
  +
reset() +
+
Resets all variables.
+
  +
seek(pos) +
+
Seek the loaded media.
+
  +
seekRelative(pos) +
+
Seeks to relative position.
+
  +
setVolume(vol) +
+
Set the volume of the loaded minplayer.
+
  + +
Set the volume of the loaded minplayer.
+
  +
stop() +
+
Stop the loaded media file.
+
+ + + +
+
Methods borrowed from class minplayer.display:
fullscreen, fullScreenElement, getDisplay, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, get, poll, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.players.base(context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + +
+ + +
+ + + mediaFile + +
+
+ The currently loaded media file. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
<static> + + {boolean} + minplayer.players.base.canPlay(file) + +
+
+ Determine if we can play the media file. + + +
+ + + + +
+
Parameters:
+ +
+ {object} file + +
+
A minplayer.file object.
+ +
+ + + + + +
+
Returns:
+ +
{boolean} If this player can play this media type.
+ +
+ + + + +
+ + +
+ + + clear() + +
+
+ Clears the media player. + + +
+ + + + + + + + + + + +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin.construct
+ +
+ + +
+ + +
+ + {object} + create() + +
+
+ Creates the media player and inserts it in the DOM. + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player entity.
+ +
+ + + + +
+ + +
+ + + destroy() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin.destroy.
+ +
+ + +
+ + +
+ + {int} + getBytesLoaded(callback) + +
+
+ Return the bytes of media loaded. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
Called when the bytes loaded is determined.
+ +
+ + + + + +
+
Returns:
+ +
{int} The amount of bytes loaded.
+ +
+ + + + +
+ + +
+ + {int} + getBytesStart(callback) + +
+
+ Return the start bytes for the loaded media. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
Called when the start bytes is determined.
+ +
+ + + + + +
+
Returns:
+ +
{int} The bytes that were started.
+ +
+ + + + +
+ + +
+ + {int} + getBytesTotal(callback) + +
+
+ Return the total amount of bytes. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
Called when the bytes total is determined.
+ +
+ + + + + +
+
Returns:
+ +
{int} The total amount of bytes for this media.
+ +
+ + + + +
+ + +
+ + {number} + getCurrentTime(callback) + +
+
+ Get the current time for the media being played. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
Called when the time is determined.
+ +
+ + + + + +
+
Returns:
+ +
{number} The volume of the media; 0 to 1.
+ +
+ + + + +
+ + +
+ + {number} + getDuration(callback) + +
+
+ Return the duration of the loaded media. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
Called when the duration is determined.
+ +
+ + + + + +
+
Returns:
+ +
{number} The duration of the loaded media.
+ +
+ + + + +
+ + +
+ + {object} + getElements() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The elements for this display.
+ +
+ + + +
+
See:
+ +
minplayer.display.getElements
+ +
+ + +
+ + +
<static> + + {string} + minplayer.players.base.getMediaId(file) + +
+
+ Returns the ID for the media being played. + + +
+ + + + +
+
Parameters:
+ +
+ {object} file + +
+
A minplayer.file object.
+ +
+ + + + + +
+
Returns:
+ +
{string} The ID for the provided media.
+ +
+ + + + +
+ + +
+ + {object} + getPlayer() + +
+
+ Returns the media player object. + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player object.
+ +
+ + + + +
+ + +
<static> + + {number} + minplayer.players.base.getPriority() + +
+
+ Get the priority of this media player. + + +
+ + + + + + + + +
+
Returns:
+ +
{number} The priority of this media player.
+ +
+ + + + +
+ + +
+ + {number} + getVolume(callback) + +
+
+ Get the volume from the loaded media. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
Called when the volume is determined.
+ +
+ + + + + +
+
Returns:
+ +
{number} The volume of the media; 0 to 1.
+ +
+ + + + +
+ + +
+ + {bool} + hasPlayLoader() + +
+
+ Determines if the player should show the playloader. + + +
+ + + + + + + + +
+
Returns:
+ +
{bool} If this player implements its own playLoader.
+ +
+ + + + +
+ + +
+ + {boolean} + isReady() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{boolean} Checks to see if the Flash is ready.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#isReady
+ +
+ + +
+ + +
+ + + load(file) + +
+
+ Loads a new media player. + + +
+ + + + +
+
Parameters:
+ +
+ {object} file + +
+
A minplayer.file object.
+ +
+ + + + + + + + +
+ + +
+ + + onComplete() + +
+
+ Should be called when the media is complete. + + +
+ + + + + + + + + + + +
+ + +
+ + + onError(errorCode) + +
+
+ Called when an error occurs. + + +
+ + + + +
+
Parameters:
+ +
+ {string} errorCode + +
+
The error that was triggered.
+ +
+ + + + + + + + +
+ + +
+ + + onLoaded() + +
+
+ Should be called when the media is done loading. + + +
+ + + + + + + + + + + +
+ + +
+ + + onPaused() + +
+
+ Should be called when the media is paused. + + +
+ + + + + + + + + + + +
+ + +
+ + + onPlaying() + +
+
+ Should be called when the media is playing. + + +
+ + + + + + + + + + + +
+ + +
+ + + onReady() + +
+
+ Called when the player is ready to recieve events and commands. + + +
+ + + + + + + + + + + +
+ + +
+ + + onWaiting() + +
+
+ Should be called when the player is waiting. + + +
+ + + + + + + + + + + +
+ + +
+ + + pause() + +
+
+ Pause the loaded media file. + + +
+ + + + + + + + + + + +
+ + +
+ + + play() + +
+
+ Play the loaded media file. + + +
+ + + + + + + + + + + +
+ + +
+ + {boolean} + playerFound() + +
+
+ Returns if the media player is already within the DOM. + + +
+ + + + + + + + +
+
Returns:
+ +
{boolean} TRUE - if the player is in the DOM, FALSE otherwise.
+ +
+ + + + +
+ + +
+ + + reset() + +
+
+ Resets all variables. + + +
+ + + + + + + + + + + +
+ + +
+ + + seek(pos) + +
+
+ Seek the loaded media. + + +
+ + + + +
+
Parameters:
+ +
+ {number} pos + +
+
The position to seek the minplayer. 0 to 1.
+ +
+ + + + + + + + +
+ + +
+ + + seekRelative(pos) + +
+
+ Seeks to relative position. + + +
+ + + + +
+
Parameters:
+ +
+ {number} pos + +
+
Relative position. -1 to 1 (percent), > 1 (seconds).
+ +
+ + + + + + + + +
+ + +
+ + + setVolume(vol) + +
+
+ Set the volume of the loaded minplayer. + + +
+ + + + +
+
Parameters:
+ +
+ {number} vol + +
+
The volume to set the media. 0 to 1.
+ +
+ + + + + + + + +
+ + +
+ + + setVolumeRelative(vol) + +
+
+ Set the volume of the loaded minplayer. + + +
+ + + + +
+
Parameters:
+ +
+ {number} vol + +
+
-1 to 1 - The relative amount to increase or decrease.
+ +
+ + + + + + + + +
+ + +
+ + + stop() + +
+
+ Stop the loaded media file. + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.players.flash.html b/minplayer/doc/symbols/minplayer.players.flash.html new file mode 100644 index 00000000..3ee49750 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.players.flash.html @@ -0,0 +1,693 @@ + + + + + + + JsDoc Reference - minplayer.players.flash + + + + + + + + + + + + + +
+ +

+ + Class minplayer.players.flash +

+ + +

+ +
Extends + minplayer.display.
+ + + The Flash media player class to control the flash fallback. + + +
Defined in: minplayer.players.flash.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.players.flash(context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
context, lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
<static>   +
minplayer.players.flash.canPlay(file) +
+
+
<static>   +
minplayer.players.flash.getFlash(params) +
+
API to return the Flash player code provided params.
+
  + +
+
<static>   +
minplayer.players.flash.getPriority() +
+
+
  + +
+
+ + + +
+
Methods borrowed from class minplayer.display:
construct, fullscreen, fullScreenElement, getDisplay, getElements, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, create, destroy, get, poll, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.players.flash(context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
<static> + + {boolean} + minplayer.players.flash.canPlay(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + +
+
Returns:
+ +
{boolean} If this player can play this media type.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#canPlay
+ +
+ + +
+ + +
<static> + + {object} + minplayer.players.flash.getFlash(params) + +
+
+ API to return the Flash player code provided params. + + +
+ + + + +
+
Parameters:
+ +
+ {object} params + +
+
The params used to populate the Flash code.
+ +
+ + + + + +
+
Returns:
+ +
{object} A Flash DOM element.
+ +
+ + + + +
+ + +
+ + {object} + getPlayer() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player object.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#getPlayer
+ +
+ + +
+ + +
<static> + + {number} + minplayer.players.flash.getPriority() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{number} The priority of this media player.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#getPriority
+ +
+ + +
+ + +
+ + {boolean} + playerFound() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{boolean} TRUE - if the player is in the DOM, FALSE otherwise.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#playerFound
+ +
+ + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.players.html5.html b/minplayer/doc/symbols/minplayer.players.html5.html new file mode 100644 index 00000000..54908efc --- /dev/null +++ b/minplayer/doc/symbols/minplayer.players.html5.html @@ -0,0 +1,1269 @@ + + + + + + + JsDoc Reference - minplayer.players.html5 + + + + + + + + + + + + + +
+ +

+ + Class minplayer.players.html5 +

+ + +

+ +
Extends + minplayer.display.
+ + + The HTML5 media player implementation. + + +
Defined in: minplayer.players.html5.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.players.html5(context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
context, lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
<static>   +
minplayer.players.html5.canPlay(file) +
+
+
  + +
+
  +
create() +
+
+
  +
getBytesLoaded(callback) +
+
+
  +
getBytesTotal(callback) +
+
+
  +
getCurrentTime(callback) +
+
+
  +
getDuration(callback) +
+
+
  + +
+
<static>   +
minplayer.players.html5.getPriority() +
+
+
  +
getVolume(callback) +
+
+
  +
load(file) +
+
+
  +
pause() +
+
+
  +
play() +
+
+
  + +
+
  +
seek(pos) +
+
+
  +
setVolume(vol) +
+
+
  +
stop() +
+
+
+ + + +
+
Methods borrowed from class minplayer.display:
fullscreen, fullScreenElement, getDisplay, getElements, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, destroy, get, poll, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.players.html5(context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
<static> + + {boolean} + minplayer.players.html5.canPlay(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + +
+
Returns:
+ +
{boolean} If this player can play this media type.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#canPlay
+ +
+ + +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin.construct
+ +
+ + +
+ + +
+ + {object} + create() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player entity.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#create
+ +
+ + +
+ + +
+ + + getBytesLoaded(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getBytesLoaded
+ +
+ + +
+ + +
+ + + getBytesTotal(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getBytesTotal
+ +
+ + +
+ + +
+ + + getCurrentTime(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getCurrentTime
+ +
+ + +
+ + +
+ + + getDuration(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getDuration
+ +
+ + +
+ + +
+ + {object} + getPlayer() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player object.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#getPlayer
+ +
+ + +
+ + +
<static> + + {number} + minplayer.players.html5.getPriority() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{number} The priority of this media player.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#getPriority
+ +
+ + +
+ + +
+ + + getVolume(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getVolume
+ +
+ + +
+ + +
+ + + load(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#load
+ +
+ + +
+ + +
+ + + pause() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#pause
+ +
+ + +
+ + +
+ + + play() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#play
+ +
+ + +
+ + +
+ + {boolean} + playerFound() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{boolean} TRUE - if the player is in the DOM, FALSE otherwise.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#playerFound
+ +
+ + +
+ + +
+ + + seek(pos) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ pos + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#seek
+ +
+ + +
+ + +
+ + + setVolume(vol) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ vol + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#setVolume
+ +
+ + +
+ + +
+ + + stop() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#stop
+ +
+ + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:47 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.players.minplayer.html b/minplayer/doc/symbols/minplayer.players.minplayer.html new file mode 100644 index 00000000..2348e244 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.players.minplayer.html @@ -0,0 +1,1177 @@ + + + + + + + JsDoc Reference - minplayer.players.minplayer + + + + + + + + + + + + + +
+ +

+ + Class minplayer.players.minplayer +

+ + +

+ +
Extends + minplayer.display.
+ + + The Flash media player class to control the flash fallback. + + +
Defined in: minplayer.players.minplayer.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.players.minplayer(context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+
Fields borrowed from class minplayer.plugin:
context, lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
<static>   +
minplayer.players.minplayer.canPlay(file) +
+
+
  +
create() +
+
+
  +
getBytesLoaded(callback) +
+
+
  +
getBytesTotal(callback) +
+
+
  +
getCurrentTime(callback) +
+
+
  +
getDuration(callback) +
+
+
<static>   +
minplayer.players.minplayer.getPriority() +
+
+
  +
getVolume(callback) +
+
+
  +
load(file) +
+
+
  +
onMediaUpdate(eventType) +
+
Called when the Flash player has an update.
+
  +
pause() +
+
+
  +
play() +
+
+
  +
seek(pos) +
+
+
  +
setVolume(vol) +
+
+
  +
stop() +
+
+
+ + + +
+
Methods borrowed from class minplayer.display:
construct, fullscreen, fullScreenElement, getDisplay, getElements, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, destroy, get, poll, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.players.minplayer(context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
<static> + + {boolean} + minplayer.players.minplayer.canPlay(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + +
+
Returns:
+ +
{boolean} If this player can play this media type.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#canPlay
+ +
+ + +
+ + +
+ + {object} + create() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player entity.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#create
+ +
+ + +
+ + +
+ + + getBytesLoaded(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getBytesLoaded
+ +
+ + +
+ + +
+ + + getBytesTotal(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getBytesTotal.
+ +
+ + +
+ + +
+ + + getCurrentTime(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getCurrentTime
+ +
+ + +
+ + +
+ + + getDuration(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.flash#getDuration
+ +
+ + +
+ + +
<static> + + {number} + minplayer.players.minplayer.getPriority() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{number} The priority of this media player.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#getPriority
+ +
+ + +
+ + +
+ + + getVolume(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getVolume
+ +
+ + +
+ + +
+ + + load(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#load
+ +
+ + +
+ + +
+ + + onMediaUpdate(eventType) + +
+
+ Called when the Flash player has an update. + + +
+ + + + +
+
Parameters:
+ +
+ {string} eventType + +
+
The event that was triggered in the player.
+ +
+ + + + + + + + +
+ + +
+ + + pause() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#pause
+ +
+ + +
+ + +
+ + + play() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#play
+ +
+ + +
+ + +
+ + + seek(pos) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ pos + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#seek
+ +
+ + +
+ + +
+ + + setVolume(vol) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ vol + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#setVolume
+ +
+ + +
+ + +
+ + + stop() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#stop
+ +
+ + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:48 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.players.vimeo.html b/minplayer/doc/symbols/minplayer.players.vimeo.html new file mode 100644 index 00000000..ff08aec8 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.players.vimeo.html @@ -0,0 +1,1110 @@ + + + + + + + JsDoc Reference - minplayer.players.vimeo + + + + + + + + + + + + + +
+ +

+ + Class minplayer.players.vimeo +

+ + +

+ +
Extends + minplayer.players.base.
+ + + The vimeo media player. + + +
Defined in: minplayer.players.vimeo.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.players.vimeo(context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+
Fields borrowed from class minplayer.players.base:
mediaFile
Fields borrowed from class minplayer.plugin:
context, lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
<static>   +
minplayer.players.vimeo.canPlay(file) +
+
+
  +
create() +
+
+
  +
getDuration(callback) +
+
+
<static>   +
minplayer.players.vimeo.getMediaId(file) +
+
Return the ID for a provided media file.
+
<static>   +
minplayer.players.vimeo.getPriority() +
+
+
  +
getVolume(callback) +
+
+
  +
onReady(player_id) +
+
+
  +
pause() +
+
+
  +
play() +
+
+
  + +
Checks to see if this player can be found.
+
  +
reset() +
+
+
  +
seek(pos) +
+
+
  +
setVolume(vol) +
+
+
  +
stop() +
+
+
+ + + +
+
Methods borrowed from class minplayer.players.base:
clear, construct, destroy, getBytesLoaded, getBytesStart, getBytesTotal, getCurrentTime, getElements, getPlayer, hasPlayLoader, isReady, load, onComplete, onError, onLoaded, onPaused, onPlaying, onWaiting, seekRelative, setVolumeRelative
Methods borrowed from class minplayer.display:
fullscreen, fullScreenElement, getDisplay, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, get, poll, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.players.vimeo(context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
<static> + + {boolean} + minplayer.players.vimeo.canPlay(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + +
+
Returns:
+ +
{boolean} If this player can play this media type.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#canPlay
+ +
+ + +
+ + +
+ + {object} + create() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player entity.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#create
+ +
+ + +
+ + +
+ + + getDuration(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getDuration.
+ +
+ + +
+ + +
<static> + + {string} + minplayer.players.vimeo.getMediaId(file) + +
+
+ Return the ID for a provided media file. + + +
+ + + + +
+
Parameters:
+ +
+ {object} file + +
+
A minplayer.file object.
+ +
+ + + + + +
+
Returns:
+ +
{string} The ID for the provided media.
+ +
+ + + + +
+ + +
<static> + + {number} + minplayer.players.vimeo.getPriority() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{number} The priority of this media player.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#getPriority
+ +
+ + +
+ + +
+ + + getVolume(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getVolume
+ +
+ + +
+ + +
+ + + onReady(player_id) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ player_id + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#onReady
+ +
+ + +
+ + +
+ + + pause() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#pause
+ +
+ + +
+ + +
+ + + play() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#play
+ +
+ + +
+ + +
+ + {bool} + playerFound() + +
+
+ Checks to see if this player can be found. + + +
+ + + + + + + + +
+
Returns:
+ +
{bool} TRUE - Player is found, FALSE - otherwise.
+ +
+ + + + +
+ + +
+ + + reset() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#reset
+ +
+ + +
+ + +
+ + + seek(pos) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ pos + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#seek
+ +
+ + +
+ + +
+ + + setVolume(vol) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ vol + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#setVolume
+ +
+ + +
+ + +
+ + + stop() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#stop
+ +
+ + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:48 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.players.youtube.html b/minplayer/doc/symbols/minplayer.players.youtube.html new file mode 100644 index 00000000..90565819 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.players.youtube.html @@ -0,0 +1,1566 @@ + + + + + + + JsDoc Reference - minplayer.players.youtube + + + + + + + + + + + + + +
+ +

+ + Class minplayer.players.youtube +

+ + +

+ +
Extends + minplayer.players.base.
+ + + The YouTube media player. + + +
Defined in: minplayer.players.youtube.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.players.youtube(context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
  +
+ quality +
+
The quality of the YouTube stream.
+
+ + + +
+
Fields borrowed from class minplayer.players.base:
mediaFile
Fields borrowed from class minplayer.plugin:
context, lock, name, options, pluginReady, queue, triggered
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
<static>   +
minplayer.players.youtube.canPlay(file) +
+
+
  +
create() +
+
+
  +
getBytesLoaded(callback) +
+
+
  +
getBytesStart(callback) +
+
+
  +
getBytesTotal(callback) +
+
+
  +
getCurrentTime(callback) +
+
+
  +
getDuration(callback) +
+
+
<static>   +
minplayer.players.youtube.getMediaId(file) +
+
Return the ID for a provided media file.
+
<static>   +
minplayer.players.youtube.getPriority() +
+
+
  +
getVolume(callback) +
+
+
  + +
Determines if the player should show the playloader.
+
  +
load(file) +
+
+
  + +
Called when the player state changes.
+
  +
onQualityChange(newQuality) +
+
Called when the player quality changes.
+
  +
onReady(event) +
+
Called when an error occurs.
+
  +
pause() +
+
+
  +
play() +
+
+
  + +
Checks to see if this player can be found.
+
  + +
Register this youtube player so that multiple players can be present +on the same page without event collision.
+
  +
seek(pos) +
+
+
  +
setPlayerState(playerState) +
+
Translates the player state for the YouTube API player.
+
  +
setVolume(vol) +
+
+
  +
stop() +
+
+
+ + + +
+
Methods borrowed from class minplayer.players.base:
clear, construct, destroy, getElements, getPlayer, isReady, onComplete, onError, onLoaded, onPaused, onPlaying, onWaiting, reset, seekRelative, setVolumeRelative
Methods borrowed from class minplayer.display:
fullscreen, fullScreenElement, getDisplay, getScaledRect, isFullScreen, isValid, onResize, toggleFullScreen
Methods borrowed from class minplayer.plugin:
addPlugin, bind, checkQueue, get, poll, ready, trigger, unbind
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.players.youtube(context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + +
+ + +
+ + + quality + +
+
+ The quality of the YouTube stream. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
<static> + + {boolean} + minplayer.players.youtube.canPlay(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + +
+
Returns:
+ +
{boolean} If this player can play this media type.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#canPlay
+ +
+ + +
+ + +
+ + {object} + create() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The media player entity.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#create
+ +
+ + +
+ + +
+ + + getBytesLoaded(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getBytesLoaded.
+ +
+ + +
+ + +
+ + + getBytesStart(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getBytesStart.
+ +
+ + +
+ + +
+ + + getBytesTotal(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getBytesTotal.
+ +
+ + +
+ + +
+ + + getCurrentTime(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getCurrentTime
+ +
+ + +
+ + +
+ + + getDuration(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getDuration.
+ +
+ + +
+ + +
<static> + + {string} + minplayer.players.youtube.getMediaId(file) + +
+
+ Return the ID for a provided media file. + + +
+ + + + +
+
Parameters:
+ +
+ {object} file + +
+
A minplayer.file object.
+ +
+ + + + + +
+
Returns:
+ +
{string} The ID for the provided media.
+ +
+ + + + +
+ + +
<static> + + {number} + minplayer.players.youtube.getPriority() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{number} The priority of this media player.
+ +
+ + + +
+
See:
+ +
minplayer.players.base#getPriority
+ +
+ + +
+ + +
+ + + getVolume(callback) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ callback + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#getVolume
+ +
+ + +
+ + +
+ + {bool} + hasPlayLoader() + +
+
+ Determines if the player should show the playloader. + + +
+ + + + + + + + +
+
Returns:
+ +
{bool} If this player implements its own playLoader.
+ +
+ + + + +
+ + +
+ + + load(file) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ file + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#load
+ +
+ + +
+ + +
+ + + onPlayerStateChange(event) + +
+
+ Called when the player state changes. + + +
+ + + + +
+
Parameters:
+ +
+ {object} event + +
+
A JavaScript Event.
+ +
+ + + + + + + + +
+ + +
+ + + onQualityChange(newQuality) + +
+
+ Called when the player quality changes. + + +
+ + + + +
+
Parameters:
+ +
+ {string} newQuality + +
+
The new quality for the change.
+ +
+ + + + + + + + +
+ + +
+ + + onReady(event) + +
+
+ Called when an error occurs. + + +
+ + + + +
+
Parameters:
+ +
+ {string} event + +
+
The onReady event that was triggered.
+ +
+ + + + + + + + +
+ + +
+ + + pause() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#pause
+ +
+ + +
+ + +
+ + + play() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#play
+ +
+ + +
+ + +
+ + {bool} + playerFound() + +
+
+ Checks to see if this player can be found. + + +
+ + + + + + + + +
+
Returns:
+ +
{bool} TRUE - Player is found, FALSE - otherwise.
+ +
+ + + + +
+ + +
+ + + register() + +
+
+ Register this youtube player so that multiple players can be present +on the same page without event collision. + + +
+ + + + + + + + + + + +
+ + +
+ + + seek(pos) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ pos + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#seek
+ +
+ + +
+ + +
+ + + setPlayerState(playerState) + +
+
+ Translates the player state for the YouTube API player. + + +
+ + + + +
+
Parameters:
+ +
+ {number} playerState + +
+
The YouTube player state.
+ +
+ + + + + + + + +
+ + +
+ + + setVolume(vol) + +
+
+ + + +
+ + + + +
+
Parameters:
+ +
+ vol + +
+
+ +
+ + + + + + + +
+
See:
+ +
minplayer.players.base#setVolume
+ +
+ + +
+ + +
+ + + stop() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.players.base#stop
+ +
+ + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:48 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.plugin.html b/minplayer/doc/symbols/minplayer.plugin.html new file mode 100644 index 00000000..fab92ac8 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.plugin.html @@ -0,0 +1,1170 @@ + + + + + + + JsDoc Reference - minplayer.plugin + + + + + + + + + + + + + +
+ +

+ + Class minplayer.plugin +

+ + +

+ + + + The base class for all plugins. + + +
Defined in: minplayer.plugin.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.plugin(name, context, options, queue) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  +
+ context +
+
Keep track of the context.
+
  +
+ lock +
+
Create a queue lock.
+
  +
+ name +
+
The name of this plugin.
+
  +
+ options +
+
The options for this plugin.
+
  + +
The ready flag.
+
  +
+ queue +
+
The event queue.
+
  +
+ triggered +
+
Keep track of already triggered events.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  +
addPlugin(name, plugin) +
+
Adds a new plugin to this player.
+
  +
bind(type, data, fn) +
+
Bind to a media event.
+
  + +
Check the queue and execute it.
+
  + +
The constructor which is called once the context is set.
+
  +
create(name, base, context) +
+
Creates a new plugin within this context.
+
  +
destroy() +
+
Destructor.
+
  +
get(plugin, callback) +
+
Gets a plugin by name and calls callback when it is ready.
+
  +
poll(callback, interval) +
+
Create a polling timer.
+
  +
ready() +
+
Plugins should call this method when they are ready.
+
  +
trigger(type, data) +
+
Trigger a media event.
+
  +
unbind(type, fn) +
+
Unbind a media event.
+
+ + + + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.plugin(name, context, options, queue) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {string} name + +
+
The name of this plugin.
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ {object} queue + +
+
The event queue to pass events around.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + context + +
+
+ Keep track of the context. + + +
+ + + + + + + + +
+ + +
+ + + lock + +
+
+ Create a queue lock. + + +
+ + + + + + + + +
+ + +
+ + + name + +
+
+ The name of this plugin. + + +
+ + + + + + + + +
+ + +
+ + + options + +
+
+ The options for this plugin. + + +
+ + + + + + + + +
+ + +
+ + + pluginReady + +
+
+ The ready flag. + + +
+ + + + + + + + +
+ + +
+ + + queue + +
+
+ The event queue. + + +
+ + + + + + + + +
+ + +
+ + + triggered + +
+
+ Keep track of already triggered events. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + addPlugin(name, plugin) + +
+
+ Adds a new plugin to this player. + + +
+ + + + +
+
Parameters:
+ +
+ {string} name + +
+
The name of this plugin.
+ +
+ {object} plugin + +
+
A new plugin object, derived from media.plugin.
+ +
+ + + + + + + + +
+ + +
+ + {object} + bind(type, data, fn) + +
+
+ Bind to a media event. + + +
+ + + + +
+
Parameters:
+ +
+ {string} type + +
+
The event type.
+ +
+ {object} data + +
+
The data to bind with the event.
+ +
+ {function} fn + +
+
The callback function.
+ +
+ + + + + +
+
Returns:
+ +
{object} The plugin object.
+ +
+ + + + +
+ + +
+ + + checkQueue() + +
+
+ Check the queue and execute it. + + +
+ + + + + + + + + + + +
+ + +
+ + + construct() + +
+
+ The constructor which is called once the context is set. +Any class deriving from the plugin class should place all context +dependant functionality within this function instead of the standard +constructor function since it is called on object derivation as well +as object creation. + + +
+ + + + + + + + + + + +
+ + +
+ + {object} + create(name, base, context) + +
+
+ Creates a new plugin within this context. + + +
+ + + + +
+
Parameters:
+ +
+ {string} name + +
+
The name of the plugin you wish to create.
+ +
+ {object} base + +
+
The base object for this plugin.
+ +
+ {object} context + +
+
The context which you would like to create.
+ +
+ + + + + +
+
Returns:
+ +
{object} The new plugin object.
+ +
+ + + + +
+ + +
+ + + destroy() + +
+
+ Destructor. + + +
+ + + + + + + + + + + +
+ + +
+ + {object} + get(plugin, callback) + +
+
+ Gets a plugin by name and calls callback when it is ready. + + +
+ + + + +
+
Parameters:
+ +
+ {string} plugin + +
+
The plugin of the plugin.
+ +
+ {function} callback + +
+
Called when the plugin is ready.
+ +
+ + + + + +
+
Returns:
+ +
{object} The plugin if no callback is provided.
+ +
+ + + + +
+ + +
+ + + poll(callback, interval) + +
+
+ Create a polling timer. + + +
+ + + + +
+
Parameters:
+ +
+ {function} callback + +
+
The function to call when you poll.
+ +
+ {integer} interval + +
+
The interval you would like to poll.
+ +
+ + + + + + + + +
+ + +
+ + + ready() + +
+
+ Plugins should call this method when they are ready. + + +
+ + + + + + + + + + + +
+ + +
+ + {object} + trigger(type, data) + +
+
+ Trigger a media event. + + +
+ + + + +
+
Parameters:
+ +
+ {string} type + +
+
The event type.
+ +
+ {object} data + +
+
The event data object.
+ +
+ + + + + +
+
Returns:
+ +
{object} The plugin object.
+ +
+ + + + +
+ + +
+ + {object} + unbind(type, fn) + +
+
+ Unbind a media event. + + +
+ + + + +
+
Parameters:
+ +
+ {string} type + +
+
The event type.
+ +
+ {function} fn + +
+
The callback function.
+ +
+ + + + + +
+
Returns:
+ +
{object} The plugin object.
+ +
+ + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Wed Mar 21 2012 22:38:48 GMT-0700 (PDT) +
+ + diff --git a/minplayer/doc/symbols/minplayer.templates.base.html b/minplayer/doc/symbols/minplayer.templates.base.html new file mode 100644 index 00000000..bcdbc0f2 --- /dev/null +++ b/minplayer/doc/symbols/minplayer.templates.base.html @@ -0,0 +1,572 @@ + + + + + + + JsDoc Reference - minplayer.templates.base + + + + + + + + + + + + + +
+ +

+ + Class minplayer.templates.base +

+ + +

+ +
Extends + minplayer.display.
+ + + The base template class which all templates should derive. + + +
Defined in: minplayer.templates.base.js. + +

+ + + + + + + + + + + + + + + + + +
Class Summary
Constructor AttributesConstructor Name and Description
  +
+ minplayer.templates.base(context, options) +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
Field Summary
Field AttributesField Name and Description
  + +
Reset the constructor.
+
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Summary
Method AttributesMethod Name and Description
  + +
+
  + +
+
  +
onFullScreen(full) +
+
Called when the media player goes into full screen mode.
+
+ + + +
+
Methods borrowed from class minplayer.display:
bind, getScaledRect, isValid, onResize, trigger
Methods borrowed from class minplayer.plugin:
addPlugin, destroy, eachPlugin, getPlugin, getPlugins, initialize, loading, loadPlugins, ready, setLoading
+
+ + + + + + + +
+
+ Class Detail +
+ +
+ minplayer.templates.base(context, options) +
+ +
+ + +
+ + + + + +
+
Parameters:
+ +
+ {object} context + +
+
The jQuery context.
+ +
+ {object} options + +
+
This components options.
+ +
+ + + + + + + + +
+ + + + +
+ Field Detail +
+ + +
+ + + constructor + +
+
+ Reset the constructor. + + +
+ + + + + + + + + + + + + + +
+ Method Detail +
+ + +
+ + + construct() + +
+
+ + + +
+ + + + + + + + + + +
+
See:
+ +
minplayer.plugin#construct
+ +
+ + +
+ + +
+ + {object} + getElements() + +
+
+ + + +
+ + + + + + + + +
+
Returns:
+ +
{object} The display elemnents for this component.
+ +
+ + + +
+
See:
+ +
minplayer.display#getElements
+ +
+ + +
+ + +
+ + + onFullScreen(full) + +
+
+ Called when the media player goes into full screen mode. + + +
+ + + + +
+
Parameters:
+ +
+ {boolean} full + +
+
TRUE - The player is in fullscreen, FALSE otherwise.
+ +
+ + + + + + + + + + + + + + + +
+
+ + + +
+ + Documentation generated by JsDoc Toolkit 2.4.0 on Sat Feb 11 2012 02:41:00 GMT+0100 (CET) +
+ + diff --git a/minplayer/doc/symbols/src/src_minplayer.async.js.html b/minplayer/doc/symbols/src/src_minplayer.async.js.html new file mode 100644 index 00000000..dc698720 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.async.js.html @@ -0,0 +1,69 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @class This class keeps track of asynchronous get requests for certain
+  7  * variables within the player.
+  8  */
+  9 minplayer.async = function() {
+ 10 
+ 11   /** The final value of this asynchronous variable. */
+ 12   this.value = null;
+ 13 
+ 14   /** The queue of callbacks to call when this value is determined. */
+ 15   this.queue = [];
+ 16 };
+ 17 
+ 18 /**
+ 19  * Retrieve the value of this variable.
+ 20  *
+ 21  * @param {function} callback The function to call when the value is determined.
+ 22  * @param {function} pollValue The poll function to try and get the value every
+ 23  * 1 second if the value is not set.
+ 24  */
+ 25 minplayer.async.prototype.get = function(callback, pollValue) {
+ 26 
+ 27   // If the value is set, then immediately call the callback, otherwise, just
+ 28   // add it to the queue when the variable is set.
+ 29   if (this.value !== null) {
+ 30     callback(this.value);
+ 31   }
+ 32   else {
+ 33 
+ 34     // Add this callback to the queue.
+ 35     this.queue.push(callback);
+ 36   }
+ 37 };
+ 38 
+ 39 /**
+ 40  * Sets the value of an asynchronous value.
+ 41  *
+ 42  * @param {void} val The value to set.
+ 43  */
+ 44 minplayer.async.prototype.set = function(val) {
+ 45 
+ 46   // Set the value.
+ 47   this.value = val;
+ 48 
+ 49   // Get the callback queue length.
+ 50   var i = this.queue.length;
+ 51 
+ 52   // Iterate through all the callbacks and call them.
+ 53   if (i) {
+ 54     while (i--) {
+ 55       this.queue[i](val);
+ 56     }
+ 57 
+ 58     // Reset the queue.
+ 59     this.queue = [];
+ 60   }
+ 61 };
+ 62 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.compatibility.js.html b/minplayer/doc/symbols/src/src_minplayer.compatibility.js.html new file mode 100644 index 00000000..8cbb6988 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.compatibility.js.html @@ -0,0 +1,109 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 // Private function to check a single element's play type.
+  5 function checkPlayType(elem, playType) {
+  6   if ((typeof elem.canPlayType) === 'function') {
+  7     if (typeof playType === 'object') {
+  8       var i = playType.length;
+  9       var mimetype = '';
+ 10       while (i--) {
+ 11         mimetype = checkPlayType(elem, playType[i]);
+ 12         if (!!mimetype) {
+ 13           break;
+ 14         }
+ 15       }
+ 16       return mimetype;
+ 17     }
+ 18     else {
+ 19       var canPlay = elem.canPlayType(playType);
+ 20       if (('no' !== canPlay) && ('' !== canPlay)) {
+ 21         return playType;
+ 22       }
+ 23     }
+ 24   }
+ 25   return '';
+ 26 }
+ 27 
+ 28 /**
+ 29  * @constructor
+ 30  * @class This class is used to define the types of media that can be played
+ 31  * within the browser.
+ 32  * <p>
+ 33  * <strong>Usage:</strong>
+ 34  * <pre><code>
+ 35  *   var playTypes = new minplayer.compatibility();
+ 36  *
+ 37  *   if (playTypes.videoOGG) {
+ 38  *     console.log("This browser can play OGG video");
+ 39  *   }
+ 40  *
+ 41  *   if (playTypes.videoH264) {
+ 42  *     console.log("This browser can play H264 video");
+ 43  *   }
+ 44  *
+ 45  *   if (playTypes.videoWEBM) {
+ 46  *     console.log("This browser can play WebM video");
+ 47  *   }
+ 48  *
+ 49  *   if (playTypes.audioOGG) {
+ 50  *     console.log("This browser can play OGG audio");
+ 51  *   }
+ 52  *
+ 53  *   if (playTypes.audioMP3) {
+ 54  *     console.log("This browser can play MP3 audio");
+ 55  *   }
+ 56  *
+ 57  *   if (playTypes.audioMP4) {
+ 58  *     console.log("This browser can play MP4 audio");
+ 59  *   }
+ 60  * </code></pre>
+ 61  */
+ 62 minplayer.compatibility = function() {
+ 63   var elem = null;
+ 64 
+ 65   // Create a video element.
+ 66   elem = document.createElement('video');
+ 67 
+ 68   /** Can play OGG video */
+ 69   this.videoOGG = checkPlayType(elem, 'video/ogg');
+ 70 
+ 71   /** Can play H264 video */
+ 72   this.videoH264 = checkPlayType(elem, [
+ 73     'video/mp4',
+ 74     'video/h264'
+ 75   ]);
+ 76 
+ 77   /** Can play WEBM video */
+ 78   this.videoWEBM = checkPlayType(elem, [
+ 79     'video/x-webm',
+ 80     'video/webm',
+ 81     'application/octet-stream'
+ 82   ]);
+ 83 
+ 84   // Create an audio element.
+ 85   elem = document.createElement('audio');
+ 86 
+ 87   /** Can play audio OGG */
+ 88   this.audioOGG = checkPlayType(elem, 'audio/ogg');
+ 89 
+ 90   /** Can play audio MP3 */
+ 91   this.audioMP3 = checkPlayType(elem, 'audio/mpeg');
+ 92 
+ 93   /** Can play audio MP4 */
+ 94   this.audioMP4 = checkPlayType(elem, 'audio/mp4');
+ 95 };
+ 96 
+ 97 if (!minplayer.playTypes) {
+ 98 
+ 99   /** The compatible playtypes for this browser. */
+100   minplayer.playTypes = new minplayer.compatibility();
+101 }
+102 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.controller.base.js.html b/minplayer/doc/symbols/src/src_minplayer.controller.base.js.html new file mode 100644 index 00000000..19299dc1 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.controller.base.js.html @@ -0,0 +1,302 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** Define the controller object. */
+  5 minplayer.controller = minplayer.controller || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class This is the base minplayer controller.  Other controllers can derive
+ 11  * from the base and either build on top of it or simply define the elements
+ 12  * that this base controller uses.
+ 13  *
+ 14  * @param {object} context The jQuery context.
+ 15  * @param {object} options This components options.
+ 16  */
+ 17 minplayer.controller.base = function(context, options) {
+ 18 
+ 19   // Derive from display
+ 20   minplayer.display.call(this, 'controller', context, options);
+ 21 };
+ 22 
+ 23 // Define the prototype for all controllers.
+ 24 var controllersBase = minplayer.controller.base;
+ 25 
+ 26 /** Derive from minplayer.display. */
+ 27 minplayer.controller.base.prototype = new minplayer.display();
+ 28 
+ 29 /** Reset the constructor. */
+ 30 minplayer.controller.base.prototype.constructor = minplayer.controller.base;
+ 31 
+ 32 /**
+ 33  * A static function that will format a time value into a string time format.
+ 34  *
+ 35  * @param {integer} time An integer value of time.
+ 36  * @return {string} A string representation of the time.
+ 37  */
+ 38 minplayer.formatTime = function(time) {
+ 39   time = time || 0;
+ 40   var seconds = 0, minutes = 0, hour = 0, timeString = '';
+ 41 
+ 42   hour = Math.floor(time / 3600);
+ 43   time -= (hour * 3600);
+ 44   minutes = Math.floor(time / 60);
+ 45   time -= (minutes * 60);
+ 46   seconds = Math.floor(time % 60);
+ 47 
+ 48   if (hour) {
+ 49     timeString += String(hour);
+ 50     timeString += ':';
+ 51   }
+ 52 
+ 53   timeString += (minutes >= 10) ? String(minutes) : ('0' + String(minutes));
+ 54   timeString += ':';
+ 55   timeString += (seconds >= 10) ? String(seconds) : ('0' + String(seconds));
+ 56   return {time: timeString, units: ''};
+ 57 };
+ 58 
+ 59 /**
+ 60  * @see minplayer.display#getElements
+ 61  * @return {object} The elements defined by this display.
+ 62  */
+ 63 minplayer.controller.base.prototype.getElements = function() {
+ 64   var elements = minplayer.display.prototype.getElements.call(this);
+ 65   return jQuery.extend(elements, {
+ 66     play: null,
+ 67     pause: null,
+ 68     fullscreen: null,
+ 69     seek: null,
+ 70     progress: null,
+ 71     volume: null,
+ 72     timer: null
+ 73   });
+ 74 };
+ 75 
+ 76 /**
+ 77  * @see minplayer.plugin#construct
+ 78  */
+ 79 minplayer.controller.base.prototype.construct = function() {
+ 80 
+ 81   // Call the minplayer plugin constructor.
+ 82   minplayer.display.prototype.construct.call(this);
+ 83 
+ 84   // Keep track of if we are dragging...
+ 85   this.dragging = false;
+ 86 
+ 87   // If they have a seek bar.
+ 88   if (this.elements.seek) {
+ 89 
+ 90     // Create the seek bar slider control.
+ 91     this.seekBar = this.elements.seek.slider({
+ 92       range: 'min'
+ 93     });
+ 94   }
+ 95 
+ 96   // If they have a volume bar.
+ 97   if (this.elements.volume) {
+ 98 
+ 99     // Create the volume bar slider control.
+100     this.volumeBar = this.elements.volume.slider({
+101       range: 'min',
+102       orientation: 'vertical'
+103     });
+104   }
+105 
+106   // Get the player plugin.
+107   this.get('player', function(player) {
+108 
+109     // If they have a fullscreen button.
+110     if (this.elements.fullscreen) {
+111 
+112       // Bind to the click event.
+113       this.elements.fullscreen.unbind().bind('click', function(e) {
+114 
+115         // Toggle fullscreen mode.
+116         player.toggleFullScreen();
+117       }).css({'pointer' : 'hand'});
+118     }
+119   });
+120 
+121   // Get the media plugin.
+122   this.get('media', function(media) {
+123 
+124     var _this = this;
+125 
+126     // If they have a pause button
+127     if (this.elements.pause) {
+128 
+129       // Bind to the click on this button.
+130       this.elements.pause.unbind().bind('click', {obj: this}, function(e) {
+131         e.preventDefault();
+132         e.data.obj.playPause(false, media);
+133       });
+134 
+135       // Bind to the pause event of the media.
+136       media.bind('pause', {obj: this}, function(e) {
+137         e.data.obj.setPlayPause(true);
+138       });
+139     }
+140 
+141     // If they have a play button
+142     if (this.elements.play) {
+143 
+144       // Bind to the click on this button.
+145       this.elements.play.unbind().bind('click', {obj: this}, function(e) {
+146         e.preventDefault();
+147         e.data.obj.playPause(true, media);
+148       });
+149 
+150       // Bind to the play event of the media.
+151       media.bind('playing', {obj: this}, function(e) {
+152         e.data.obj.setPlayPause(false);
+153       });
+154     }
+155 
+156     // If they have a duration, then trigger on duration change.
+157     if (this.elements.duration) {
+158 
+159       // Bind to the duration change event.
+160       media.bind('durationchange', {obj: this}, function(e, data) {
+161         e.data.obj.setTimeString('duration', data.duration);
+162       });
+163 
+164       // Set the timestring to the duration.
+165       media.getDuration(function(duration) {
+166         _this.setTimeString('duration', duration);
+167       });
+168     }
+169 
+170     // If they have a progress element.
+171     if (this.elements.progress) {
+172 
+173       // Bind to the progress event.
+174       media.bind('progress', {obj: this}, function(e, data) {
+175         var percent = data.total ? (data.loaded / data.total) * 100 : 0;
+176         e.data.obj.elements.progress.width(percent + '%');
+177       });
+178     }
+179 
+180     // If they have a seek bar or timer, bind to the timeupdate.
+181     if (this.seekBar || this.elements.timer) {
+182 
+183       // Bind to the time update event.
+184       media.bind('timeupdate', {obj: this}, function(e, data) {
+185         if (!e.data.obj.dragging) {
+186           var value = 0;
+187           if (data.duration) {
+188             value = (data.currentTime / data.duration) * 100;
+189           }
+190 
+191           // Update the seek bar if it exists.
+192           if (e.data.obj.seekBar) {
+193             e.data.obj.seekBar.slider('option', 'value', value);
+194           }
+195 
+196           e.data.obj.setTimeString('timer', data.currentTime);
+197         }
+198       });
+199     }
+200 
+201     // If they have a seekBar element.
+202     if (this.seekBar) {
+203 
+204       // Register the events for the control bar to control the media.
+205       this.seekBar.slider({
+206         start: function(event, ui) {
+207           _this.dragging = true;
+208         },
+209         stop: function(event, ui) {
+210           _this.dragging = false;
+211           media.getDuration(function(duration) {
+212             media.seek((ui.value / 100) * duration);
+213           });
+214         },
+215         slide: function(event, ui) {
+216           media.getDuration(function(duration) {
+217             var time = (ui.value / 100) * duration;
+218             if (!_this.dragging) {
+219               media.seek(time);
+220             }
+221             _this.setTimeString('timer', time);
+222           });
+223         }
+224       });
+225     }
+226 
+227     // Setup the volume bar.
+228     if (this.volumeBar) {
+229 
+230       // Create the slider.
+231       this.volumeBar.slider({
+232         slide: function(event, ui) {
+233           media.setVolume(ui.value / 100);
+234         }
+235       });
+236 
+237       media.bind('volumeupdate', {obj: this}, function(event, vol) {
+238         event.data.obj.volumeBar.slider('option', 'value', (vol * 100));
+239       });
+240 
+241       // Set the volume to match that of the player.
+242       media.getVolume(function(vol) {
+243         _this.volumeBar.slider('option', 'value', (vol * 100));
+244       });
+245     }
+246   });
+247 
+248   // We are now ready.
+249   this.ready();
+250 };
+251 
+252 /**
+253  * Sets the play and pause state of the control bar.
+254  *
+255  * @param {boolean} state TRUE - Show Play, FALSE - Show Pause.
+256  */
+257 minplayer.controller.base.prototype.setPlayPause = function(state) {
+258   var css = '';
+259   if (this.elements.play) {
+260     css = state ? 'inherit' : 'none';
+261     this.elements.play.css('display', css);
+262   }
+263   if (this.elements.pause) {
+264     css = state ? 'none' : 'inherit';
+265     this.elements.pause.css('display', css);
+266   }
+267 };
+268 
+269 /**
+270  * Plays or pauses the media.
+271  *
+272  * @param {bool} state true => play, false => pause.
+273  * @param {object} media The media player object.
+274  */
+275 minplayer.controller.base.prototype.playPause = function(state, media) {
+276   var type = state ? 'play' : 'pause';
+277   this.display.trigger(type);
+278   this.setPlayPause(!state);
+279   if (media) {
+280     media[type]();
+281   }
+282 };
+283 
+284 /**
+285  * Sets the time string on the control bar.
+286  *
+287  * @param {string} element The name of the element to set.
+288  * @param {number} time The total time amount to set.
+289  */
+290 minplayer.controller.base.prototype.setTimeString = function(element, time) {
+291   if (this.elements[element]) {
+292     this.elements[element].text(minplayer.formatTime(time).time);
+293   }
+294 };
+295 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.controller.js.html b/minplayer/doc/symbols/src/src_minplayer.controller.js.html new file mode 100644 index 00000000..0d0d745b --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.controller.js.html @@ -0,0 +1,320 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @extends minplayer.display
+  7  * @class This is the base minplayer controller.  Other controllers can derive
+  8  * from the base and either build on top of it or simply define the elements
+  9  * that this base controller uses.
+ 10  *
+ 11  * @param {object} context The jQuery context.
+ 12  * @param {object} options This components options.
+ 13  */
+ 14 minplayer.controller = function(context, options) {
+ 15 
+ 16   // Derive from display
+ 17   minplayer.display.call(this, 'controller', context, options);
+ 18 };
+ 19 
+ 20 /** Derive from minplayer.display. */
+ 21 minplayer.controller.prototype = new minplayer.display();
+ 22 
+ 23 /** Reset the constructor. */
+ 24 minplayer.controller.prototype.constructor = minplayer.controller;
+ 25 
+ 26 /**
+ 27  * A static function that will format a time value into a string time format.
+ 28  *
+ 29  * @param {integer} time An integer value of time.
+ 30  * @return {string} A string representation of the time.
+ 31  */
+ 32 minplayer.formatTime = function(time) {
+ 33   time = time || 0;
+ 34   var seconds = 0, minutes = 0, hour = 0, timeString = '';
+ 35 
+ 36   hour = Math.floor(time / 3600);
+ 37   time -= (hour * 3600);
+ 38   minutes = Math.floor(time / 60);
+ 39   time -= (minutes * 60);
+ 40   seconds = Math.floor(time % 60);
+ 41 
+ 42   if (hour) {
+ 43     timeString += String(hour);
+ 44     timeString += ':';
+ 45   }
+ 46 
+ 47   timeString += (minutes >= 10) ? String(minutes) : ('0' + String(minutes));
+ 48   timeString += ':';
+ 49   timeString += (seconds >= 10) ? String(seconds) : ('0' + String(seconds));
+ 50   return {time: timeString, units: ''};
+ 51 };
+ 52 
+ 53 /**
+ 54  * @see minplayer.display#getElements
+ 55  * @return {object} The elements defined by this display.
+ 56  */
+ 57 minplayer.controller.prototype.getElements = function() {
+ 58   var elements = minplayer.display.prototype.getElements.call(this);
+ 59   return jQuery.extend(elements, {
+ 60     play: null,
+ 61     pause: null,
+ 62     fullscreen: null,
+ 63     seek: null,
+ 64     progress: null,
+ 65     volume: null,
+ 66     timer: null
+ 67   });
+ 68 };
+ 69 
+ 70 /**
+ 71  * @see minplayer.plugin#construct
+ 72  */
+ 73 minplayer.controller.prototype.construct = function() {
+ 74 
+ 75   // Call the minplayer plugin constructor.
+ 76   minplayer.display.prototype.construct.call(this);
+ 77 
+ 78   // Keep track of if we are dragging...
+ 79   this.dragging = false;
+ 80 
+ 81   // If they have a seek bar.
+ 82   if (this.elements.seek) {
+ 83 
+ 84     // Create the seek bar slider control.
+ 85     this.seekBar = this.elements.seek.slider({
+ 86       range: 'min'
+ 87     });
+ 88   }
+ 89 
+ 90   // If they have a volume bar.
+ 91   if (this.elements.volume) {
+ 92 
+ 93     // Create the volume bar slider control.
+ 94     this.volumeBar = this.elements.volume.slider({
+ 95       range: 'min',
+ 96       orientation: 'vertical'
+ 97     });
+ 98   }
+ 99 
+100   // Get the player plugin.
+101   this.get('player', function(player) {
+102 
+103     // If they have a fullscreen button.
+104     if (this.elements.fullscreen) {
+105 
+106       // Bind to the click event.
+107       this.elements.fullscreen.unbind().bind('click', function(e) {
+108 
+109         // Toggle fullscreen mode.
+110         player.toggleFullScreen();
+111       }).css({'pointer' : 'hand'});
+112     }
+113   });
+114 
+115   // Get the media plugin.
+116   this.get('media', function(media) {
+117 
+118     // If they have a pause button
+119     if (this.elements.pause) {
+120 
+121       // Bind to the click on this button.
+122       this.elements.pause.unbind().bind('click', (function(controller) {
+123         return function(event) {
+124           event.preventDefault();
+125           controller.playPause(false, media);
+126         };
+127       })(this));
+128 
+129       // Bind to the pause event of the media.
+130       media.bind('pause', (function(controller) {
+131         return function(event) {
+132           controller.setPlayPause(true);
+133         };
+134       })(this));
+135     }
+136 
+137     // If they have a play button
+138     if (this.elements.play) {
+139 
+140       // Bind to the click on this button.
+141       this.elements.play.unbind().bind('click', (function(controller) {
+142         return function(event) {
+143           event.preventDefault();
+144           controller.playPause(true, media);
+145         };
+146       })(this));
+147 
+148       // Bind to the play event of the media.
+149       media.bind('playing', (function(controller) {
+150         return function(event) {
+151           controller.setPlayPause(false);
+152         };
+153       })(this));
+154     }
+155 
+156     // If they have a duration, then trigger on duration change.
+157     if (this.elements.duration) {
+158 
+159       // Bind to the duration change event.
+160       media.bind('durationchange', (function(controller) {
+161         return function(event, data) {
+162           controller.setTimeString('duration', data.duration);
+163         };
+164       })(this));
+165 
+166       // Set the timestring to the duration.
+167       media.getDuration((function(controller) {
+168         return function(duration) {
+169           controller.setTimeString('duration', duration);
+170         };
+171       })(this));
+172     }
+173 
+174     // If they have a progress element.
+175     if (this.elements.progress) {
+176 
+177       // Bind to the progress event.
+178       media.bind('progress', (function(controller) {
+179         return function(event, data) {
+180           var percent = data.total ? (data.loaded / data.total) * 100 : 0;
+181           controller.elements.progress.width(percent + '%');
+182         };
+183       })(this));
+184     }
+185 
+186     // If they have a seek bar or timer, bind to the timeupdate.
+187     if (this.seekBar || this.elements.timer) {
+188 
+189       // Bind to the time update event.
+190       media.bind('timeupdate', (function(controller) {
+191         return function(event, data) {
+192           if (!controller.dragging) {
+193             var value = 0;
+194             if (data.duration) {
+195               value = (data.currentTime / data.duration) * 100;
+196             }
+197 
+198             // Update the seek bar if it exists.
+199             if (controller.seekBar) {
+200               controller.seekBar.slider('option', 'value', value);
+201             }
+202 
+203             controller.setTimeString('timer', data.currentTime);
+204           }
+205         };
+206       })(this));
+207     }
+208 
+209     // If they have a seekBar element.
+210     if (this.seekBar) {
+211 
+212       // Register the events for the control bar to control the media.
+213       this.seekBar.slider({
+214         start: (function(controller) {
+215           return function(event, ui) {
+216             controller.dragging = true;
+217           };
+218         })(this),
+219         stop: (function(controller) {
+220           return function(event, ui) {
+221             controller.dragging = false;
+222             media.getDuration(function(duration) {
+223               media.seek((ui.value / 100) * duration);
+224             });
+225           };
+226         })(this),
+227         slide: (function(controller) {
+228           return function(event, ui) {
+229             media.getDuration(function(duration) {
+230               var time = (ui.value / 100) * duration;
+231               if (!controller.dragging) {
+232                 media.seek(time);
+233               }
+234               controller.setTimeString('timer', time);
+235             });
+236           };
+237         })(this)
+238       });
+239     }
+240 
+241     // Setup the volume bar.
+242     if (this.volumeBar) {
+243 
+244       // Create the slider.
+245       this.volumeBar.slider({
+246         slide: function(event, ui) {
+247           media.setVolume(ui.value / 100);
+248         }
+249       });
+250 
+251       media.bind('volumeupdate', (function(controller) {
+252         return function(event, vol) {
+253           controller.volumeBar.slider('option', 'value', (vol * 100));
+254         };
+255       })(this));
+256 
+257       // Set the volume to match that of the player.
+258       media.getVolume((function(controller) {
+259         return function(vol) {
+260           controller.volumeBar.slider('option', 'value', (vol * 100));
+261         };
+262       })(this));
+263     }
+264   });
+265 
+266   // We are now ready.
+267   this.ready();
+268 };
+269 
+270 /**
+271  * Sets the play and pause state of the control bar.
+272  *
+273  * @param {boolean} state TRUE - Show Play, FALSE - Show Pause.
+274  */
+275 minplayer.controller.prototype.setPlayPause = function(state) {
+276   var css = '';
+277   if (this.elements.play) {
+278     css = state ? 'inherit' : 'none';
+279     this.elements.play.css('display', css);
+280   }
+281   if (this.elements.pause) {
+282     css = state ? 'none' : 'inherit';
+283     this.elements.pause.css('display', css);
+284   }
+285 };
+286 
+287 /**
+288  * Plays or pauses the media.
+289  *
+290  * @param {bool} state true => play, false => pause.
+291  * @param {object} media The media player object.
+292  */
+293 minplayer.controller.prototype.playPause = function(state, media) {
+294   var type = state ? 'play' : 'pause';
+295   this.display.trigger(type);
+296   this.setPlayPause(!state);
+297   if (media) {
+298     media[type]();
+299   }
+300 };
+301 
+302 /**
+303  * Sets the time string on the control bar.
+304  *
+305  * @param {string} element The name of the element to set.
+306  * @param {number} time The total time amount to set.
+307  */
+308 minplayer.controller.prototype.setTimeString = function(element, time) {
+309   if (this.elements[element]) {
+310     this.elements[element].text(minplayer.formatTime(time).time);
+311   }
+312 };
+313 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.controllers.base.js.html b/minplayer/doc/symbols/src/src_minplayer.controllers.base.js.html new file mode 100644 index 00000000..d6533255 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.controllers.base.js.html @@ -0,0 +1,299 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** Define the controllers object. */
+  5 minplayer.controllers = minplayer.controllers || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class This is the base minplayer controller.  Other controllers can derive
+ 11  * from the base and either build on top of it or simply define the elements
+ 12  * that this base controller uses.
+ 13  *
+ 14  * @param {object} context The jQuery context.
+ 15  * @param {object} options This components options.
+ 16  */
+ 17 minplayer.controllers.base = function(context, options) {
+ 18 
+ 19   // Derive from display
+ 20   minplayer.display.call(this, 'controller', context, options);
+ 21 };
+ 22 
+ 23 // Define the prototype for all controllers.
+ 24 var controllersBase = minplayer.controllers.base;
+ 25 
+ 26 /** Derive from minplayer.display. */
+ 27 minplayer.controllers.base.prototype = new minplayer.display();
+ 28 
+ 29 /** Reset the constructor. */
+ 30 minplayer.controllers.base.prototype.constructor = minplayer.controllers.base;
+ 31 
+ 32 /**
+ 33  * A static function that will format a time value into a string time format.
+ 34  *
+ 35  * @param {integer} time An integer value of time.
+ 36  * @return {string} A string representation of the time.
+ 37  */
+ 38 minplayer.formatTime = function(time) {
+ 39   time = time || 0;
+ 40   var seconds = 0, minutes = 0, hour = 0, timeString = '';
+ 41 
+ 42   hour = Math.floor(time / 3600);
+ 43   time -= (hour * 3600);
+ 44   minutes = Math.floor(time / 60);
+ 45   time -= (minutes * 60);
+ 46   seconds = Math.floor(time % 60);
+ 47 
+ 48   if (hour) {
+ 49     timeString += String(hour);
+ 50     timeString += ':';
+ 51   }
+ 52 
+ 53   timeString += (minutes >= 10) ? String(minutes) : ('0' + String(minutes));
+ 54   timeString += ':';
+ 55   timeString += (seconds >= 10) ? String(seconds) : ('0' + String(seconds));
+ 56   return {time: timeString, units: ''};
+ 57 };
+ 58 
+ 59 /**
+ 60  * @see minplayer.display#getElements
+ 61  * @return {object} The elements defined by this display.
+ 62  */
+ 63 minplayer.controllers.base.prototype.getElements = function() {
+ 64   var elements = minplayer.display.prototype.getElements.call(this);
+ 65   return jQuery.extend(elements, {
+ 66     play: null,
+ 67     pause: null,
+ 68     fullscreen: null,
+ 69     seek: null,
+ 70     progress: null,
+ 71     volume: null,
+ 72     timer: null
+ 73   });
+ 74 };
+ 75 
+ 76 /**
+ 77  * @see minplayer.plugin#construct
+ 78  */
+ 79 minplayer.controllers.base.prototype.construct = function() {
+ 80 
+ 81   // Call the minplayer plugin constructor.
+ 82   minplayer.display.prototype.construct.call(this);
+ 83 
+ 84   // If they have a fullscreen button.
+ 85   if (this.elements.fullscreen) {
+ 86 
+ 87     // Bind to the click event.
+ 88     this.elements.fullscreen.bind('click', {obj: this}, function(event) {
+ 89       var isFull = event.data.obj.elements.player.hasClass('fullscreen');
+ 90       if (isFull) {
+ 91         event.data.obj.elements.player.removeClass('fullscreen');
+ 92       }
+ 93       else {
+ 94         event.data.obj.elements.player.addClass('fullscreen');
+ 95       }
+ 96       event.data.obj.trigger('fullscreen', !isFull);
+ 97     }).css({'pointer' : 'hand'});
+ 98   }
+ 99 
+100   // Keep track of if we are dragging...
+101   this.dragging = false;
+102 
+103   // If they have a seek bar.
+104   if (this.elements.seek) {
+105 
+106     // Create the seek bar slider control.
+107     this.seekBar = this.elements.seek.slider({
+108       range: 'min'
+109     });
+110   }
+111 
+112   // If they have a volume bar.
+113   if (this.elements.volume) {
+114 
+115     // Create the volume bar slider control.
+116     this.volumeBar = this.elements.volume.slider({
+117       range: 'min',
+118       orientation: 'vertical'
+119     });
+120   }
+121 
+122   // Get the media plugin.
+123   this.get('media', function(media) {
+124 
+125     var _this = this;
+126 
+127     // If they have a pause button
+128     if (this.elements.pause) {
+129 
+130       // Bind to the click on this button.
+131       this.elements.pause.bind('click', {obj: this}, function(event) {
+132         event.preventDefault();
+133         event.data.obj.playPause(false, media);
+134       });
+135 
+136       // Bind to the pause event of the media.
+137       media.bind('pause', {obj: this}, function(event) {
+138         event.data.obj.setPlayPause(true);
+139       });
+140     }
+141 
+142     // If they have a play button
+143     if (this.elements.play) {
+144 
+145       // Bind to the click on this button.
+146       this.elements.play.bind('click', {obj: this}, function(event) {
+147         event.preventDefault();
+148         event.data.obj.playPause(true, media);
+149       });
+150 
+151       // Bind to the play event of the media.
+152       media.bind('playing', {obj: this}, function(event) {
+153         event.data.obj.setPlayPause(false);
+154       });
+155     }
+156 
+157     // If they have a duration, then trigger on duration change.
+158     if (this.elements.duration) {
+159 
+160       // Bind to the duration change event.
+161       media.bind('durationchange', {obj: this}, function(event, data) {
+162         event.data.obj.setTimeString('duration', data.duration);
+163       });
+164 
+165       // Set the timestring to the duration.
+166       media.getDuration(function(duration) {
+167         _this.setTimeString('duration', duration);
+168       });
+169     }
+170 
+171     // If they have a progress element.
+172     if (this.elements.progress) {
+173 
+174       // Bind to the progress event.
+175       media.bind('progress', {obj: this}, function(event, data) {
+176         var percent = data.total ? (data.loaded / data.total) * 100 : 0;
+177         event.data.obj.elements.progress.width(percent + '%');
+178       });
+179     }
+180 
+181     // If they have a seek bar or timer, bind to the timeupdate.
+182     if (this.seekBar || this.elements.timer) {
+183 
+184       // Bind to the time update event.
+185       media.bind('timeupdate', {obj: this}, function(event, data) {
+186         if (!event.data.obj.dragging) {
+187           var value = 0;
+188           if (data.duration) {
+189             value = (data.currentTime / data.duration) * 100;
+190           }
+191 
+192           // Update the seek bar if it exists.
+193           if (event.data.obj.seekBar) {
+194             event.data.obj.seekBar.slider('option', 'value', value);
+195           }
+196 
+197           event.data.obj.setTimeString('timer', data.currentTime);
+198         }
+199       });
+200     }
+201 
+202     // If they have a seekBar element.
+203     if (this.seekBar) {
+204 
+205       // Register the events for the control bar to control the media.
+206       this.seekBar.slider({
+207         start: function(event, ui) {
+208           _this.dragging = true;
+209         },
+210         stop: function(event, ui) {
+211           _this.dragging = false;
+212           media.getDuration(function(duration) {
+213             media.seek((ui.value / 100) * duration);
+214           });
+215         },
+216         slide: function(event, ui) {
+217           media.getDuration(function(duration) {
+218             var time = (ui.value / 100) * duration;
+219             if (!_this.dragging) {
+220               media.seek(time);
+221             }
+222             _this.setTimeString('timer', time);
+223           });
+224         }
+225       });
+226     }
+227 
+228     // Setup the volume bar.
+229     if (this.volumeBar) {
+230 
+231       // Create the slider.
+232       this.volumeBar.slider({
+233         slide: function(event, ui) {
+234           media.setVolume(ui.value / 100);
+235         }
+236       });
+237 
+238       // Set the volume to match that of the player.
+239       media.getVolume(function(vol) {
+240         _this.volumeBar.slider('option', 'value', (vol * 100));
+241       });
+242     }
+243   });
+244 
+245   // We are now ready.
+246   this.ready();
+247 };
+248 
+249 /**
+250  * Sets the play and pause state of the control bar.
+251  *
+252  * @param {boolean} state TRUE - Show Play, FALSE - Show Pause.
+253  */
+254 minplayer.controllers.base.prototype.setPlayPause = function(state) {
+255   var css = '';
+256   if (this.elements.play) {
+257     css = state ? 'inherit' : 'none';
+258     this.elements.play.css('display', css);
+259   }
+260   if (this.elements.pause) {
+261     css = state ? 'none' : 'inherit';
+262     this.elements.pause.css('display', css);
+263   }
+264 };
+265 
+266 /**
+267  * Plays or pauses the media.
+268  *
+269  * @param {bool} state true => play, false => pause.
+270  * @param {object} media The media player object.
+271  */
+272 minplayer.controllers.base.prototype.playPause = function(state, media) {
+273   var type = state ? 'play' : 'pause';
+274   this.display.trigger(type);
+275   this.setPlayPause(!state);
+276   if (media) {
+277     media[type]();
+278   }
+279 };
+280 
+281 /**
+282  * Sets the time string on the control bar.
+283  *
+284  * @param {string} element The name of the element to set.
+285  * @param {number} time The total time amount to set.
+286  */
+287 minplayer.controllers.base.prototype.setTimeString = function(element, time) {
+288   if (this.elements[element]) {
+289     this.elements[element].text(minplayer.formatTime(time).time);
+290   }
+291 };
+292 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.display.js.html b/minplayer/doc/symbols/src/src_minplayer.display.js.html new file mode 100644 index 00000000..fb8318c1 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.display.js.html @@ -0,0 +1,304 @@ +
  1 /** The minplayer namespace. */
+  2 minplayer = minplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @extends minplayer.plugin
+  7  * @class Base class used to provide the display and options for any component
+  8  * deriving from this class.  Components who derive are expected to provide
+  9  * the elements that they define by implementing the getElements method.
+ 10  *
+ 11  * @param {string} name The name of this plugin.
+ 12  * @param {object} context The jQuery context this component resides.
+ 13  * @param {object} options The options for this component.
+ 14  * @param {object} queue The event queue to pass events around.
+ 15  */
+ 16 minplayer.display = function(name, context, options, queue) {
+ 17 
+ 18   // See if we allow resize on this display.
+ 19   this.allowResize = false;
+ 20 
+ 21   if (context) {
+ 22 
+ 23     // Set the display.
+ 24     this.display = this.getDisplay(context, options);
+ 25   }
+ 26 
+ 27   // Derive from plugin
+ 28   minplayer.plugin.call(this, name, context, options, queue);
+ 29 };
+ 30 
+ 31 /** Derive from minplayer.plugin. */
+ 32 minplayer.display.prototype = new minplayer.plugin();
+ 33 
+ 34 /** Reset the constructor. */
+ 35 minplayer.display.prototype.constructor = minplayer.display;
+ 36 
+ 37 /**
+ 38  * Returns the display for this component.
+ 39  *
+ 40  * @param {object} context The original context.
+ 41  * @param {object} options The options for this component.
+ 42  * @return {object} The jQuery context for this display.
+ 43  */
+ 44 minplayer.display.prototype.getDisplay = function(context, options) {
+ 45   return jQuery(context);
+ 46 };
+ 47 
+ 48 /**
+ 49  * @see minplayer.plugin.construct
+ 50  */
+ 51 minplayer.display.prototype.construct = function() {
+ 52 
+ 53   // Call the plugin constructor.
+ 54   minplayer.plugin.prototype.construct.call(this);
+ 55 
+ 56   // Get the display elements.
+ 57   this.elements = this.getElements();
+ 58 
+ 59   // Only do this if they allow resize for this display.
+ 60   if (this.allowResize) {
+ 61 
+ 62     // Set the resize timeout and this pointer.
+ 63     var resizeTimeout = 0;
+ 64 
+ 65     // Add a handler to trigger a resize event.
+ 66     jQuery(window).resize((function(display) {
+ 67       return function() {
+ 68         clearTimeout(resizeTimeout);
+ 69         resizeTimeout = setTimeout(function() {
+ 70           display.onResize();
+ 71         }, 200);
+ 72       };
+ 73     })(this));
+ 74   }
+ 75 };
+ 76 
+ 77 /**
+ 78  * Called when the window resizes.
+ 79  */
+ 80 minplayer.display.prototype.onResize = function() {
+ 81 };
+ 82 
+ 83 /**
+ 84  * Gets the full screen element.
+ 85  *
+ 86  * @return {object} The display to be used for full screen support.
+ 87  */
+ 88 minplayer.display.prototype.fullScreenElement = function() {
+ 89   return this.display;
+ 90 };
+ 91 
+ 92 /**
+ 93  * Called if you would like for your display item to show then hide.
+ 94  *
+ 95  * @param {object} element The element you would like to hide or show.
+ 96  * @param {number} timeout The timeout to hide and show.
+ 97  */
+ 98 minplayer.showThenHide = function(element, timeout) {
+ 99 
+100   // Ensure we have a timeout.
+101   timeout = timeout || 5000;
+102 
+103   // If this has not yet been configured.
+104   if (!element.showTimer) {
+105 
+106     // Bind when they move the mouse.
+107     jQuery(document).bind('mousemove', function() {
+108       minplayer.showThenHide(element, timeout);
+109     });
+110   }
+111 
+112   // Clear the timeout, and then setup the show then hide functionality.
+113   clearTimeout(element.showTimer);
+114 
+115   // Show the display.
+116   element.show();
+117 
+118   // Set a timer to hide it after the timeout.
+119   element.showTimer = setTimeout(function() {
+120     element.hide('slow');
+121   }, timeout);
+122 };
+123 
+124 /**
+125  * Make this display element go fullscreen.
+126  *
+127  * @param {boolean} full Tell the player to go into fullscreen or not.
+128  */
+129 minplayer.display.prototype.fullscreen = function(full) {
+130   var isFull = this.isFullScreen();
+131   var element = this.fullScreenElement();
+132   if (isFull && !full) {
+133     element.removeClass('fullscreen');
+134     if (screenfull) {
+135       screenfull.exit();
+136     }
+137     this.trigger('fullscreen', false);
+138   }
+139   else if (!isFull && full) {
+140     element.addClass('fullscreen');
+141     if (screenfull) {
+142       screenfull.request(element[0]);
+143       screenfull.onchange = (function(display) {
+144         return function(e) {
+145           if (!screenfull.isFullscreen) {
+146             display.fullscreen(false);
+147           }
+148         };
+149       })(this);
+150     }
+151     this.trigger('fullscreen', true);
+152   }
+153 };
+154 
+155 /**
+156  * Toggle fullscreen.
+157  */
+158 minplayer.display.prototype.toggleFullScreen = function() {
+159   this.fullscreen(!this.isFullScreen());
+160 };
+161 
+162 /**
+163  * Checks to see if we are in fullscreen mode.
+164  *
+165  * @return {boolean} TRUE - fullscreen, FALSE - otherwise.
+166  */
+167 minplayer.display.prototype.isFullScreen = function() {
+168   return this.fullScreenElement().hasClass('fullscreen');
+169 };
+170 
+171 /**
+172  * Returns a scaled rectangle provided a ratio and the container rect.
+173  *
+174  * @param {number} ratio The width/height ratio of what is being scaled.
+175  * @param {object} rect The bounding rectangle for scaling.
+176  * @return {object} The Rectangle object of the scaled rectangle.
+177  */
+178 minplayer.display.prototype.getScaledRect = function(ratio, rect) {
+179   var scaledRect = {};
+180   scaledRect.x = rect.x ? rect.x : 0;
+181   scaledRect.y = rect.y ? rect.y : 0;
+182   scaledRect.width = rect.width ? rect.width : 0;
+183   scaledRect.height = rect.height ? rect.height : 0;
+184   if (ratio) {
+185     if ((rect.width / rect.height) > ratio) {
+186       scaledRect.height = rect.height;
+187       scaledRect.width = Math.floor(rect.height * ratio);
+188     }
+189     else {
+190       scaledRect.height = Math.floor(rect.width / ratio);
+191       scaledRect.width = rect.width;
+192     }
+193     scaledRect.x = Math.floor((rect.width - scaledRect.width) / 2);
+194     scaledRect.y = Math.floor((rect.height - scaledRect.height) / 2);
+195   }
+196   return scaledRect;
+197 };
+198 
+199 /**
+200  * Returns all the jQuery elements that this component uses.
+201  *
+202  * @return {object} An object which defines all the jQuery elements that
+203  * this component uses.
+204  */
+205 minplayer.display.prototype.getElements = function() {
+206   return {};
+207 };
+208 
+209 /**
+210  * Returns if this component is valid and exists within the DOM.
+211  *
+212  * @return {boolean} TRUE if the plugin display is valid.
+213  */
+214 minplayer.display.prototype.isValid = function() {
+215   return (this.display.length > 0);
+216 };
+217 
+218 /**
+219  * From https://github.com/sindresorhus/screenfull.js
+220  */
+221 /*global Element:true*/
+222 (function(window, document) {
+223   'use strict';
+224   var methods = (function() {
+225     var methodMap = [
+226       [
+227         'requestFullscreen',
+228         'exitFullscreen',
+229         'fullscreenchange',
+230         'fullscreen',
+231         'fullscreenElement'
+232       ],
+233       [
+234         'webkitRequestFullScreen',
+235         'webkitCancelFullScreen',
+236         'webkitfullscreenchange',
+237         'webkitIsFullScreen',
+238         'webkitCurrentFullScreenElement'
+239       ],
+240       [
+241         'mozRequestFullScreen',
+242         'mozCancelFullScreen',
+243         'mozfullscreenchange',
+244         'mozFullScreen',
+245         'mozFullScreenElement'
+246       ]
+247     ];
+248     for (var i = 0, l = methodMap.length; i < l; i++) {
+249       var val = methodMap[i];
+250       if (val[1] in document) {
+251         return val;
+252       }
+253     }
+254   })();
+255 
+256   if (!methods) {
+257     return window.screenfull = false;
+258   }
+259 
+260   var keyboardAllowed = 'ALLOW_KEYBOARD_INPUT' in Element;
+261 
+262   var screenfull = {
+263     init: function() {
+264       document.addEventListener(methods[2], function(e) {
+265         screenfull.isFullscreen = document[methods[3]];
+266         screenfull.element = document[methods[4]];
+267         screenfull.onchange(e);
+268       });
+269       return this;
+270     },
+271     isFullscreen: document[methods[3]],
+272     element: document[methods[4]],
+273     request: function(elem) {
+274       elem = elem || document.documentElement;
+275       elem[methods[0]](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT);
+276       // Work around Safari 5.1 bug: reports support for keyboard in fullscreen
+277       // even though it doesn't.
+278       if (!document.isFullscreen) {
+279         elem[methods[0]]();
+280       }
+281     },
+282     exit: function() {
+283       document[methods[1]]();
+284     },
+285     toggle: function(elem) {
+286       if (this.isFullscreen) {
+287         this.exit();
+288       } else {
+289         this.request(elem);
+290       }
+291     },
+292     onchange: function() {}
+293   };
+294 
+295   window.screenfull = screenfull.init();
+296 })(window, document);
+297 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.file.js.html b/minplayer/doc/symbols/src/src_minplayer.file.js.html new file mode 100644 index 00000000..05ab45fd --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.file.js.html @@ -0,0 +1,175 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @class A wrapper class used to provide all the data necessary to control an
+  7  * individual file within this media player.
+  8  *
+  9  * @param {object} file A media file object with minimal required information.
+ 10  */
+ 11 minplayer.file = function(file) {
+ 12   this.duration = file.duration || 0;
+ 13   this.bytesTotal = file.bytesTotal || 0;
+ 14   this.quality = file.quality || 0;
+ 15   this.stream = file.stream || '';
+ 16   this.path = file.path || '';
+ 17   this.codecs = file.codecs || '';
+ 18 
+ 19   // These should be provided, but just in case...
+ 20   this.extension = file.extension || this.getFileExtension();
+ 21   this.mimetype = file.mimetype || file.filemime || this.getMimeType();
+ 22   this.type = file.type || this.getType();
+ 23 
+ 24   // Fail safe to try and guess the mimetype and media type.
+ 25   if (!this.type) {
+ 26     this.mimetype = this.getMimeType();
+ 27     this.type = this.getType();
+ 28   }
+ 29 
+ 30   // Get the player.
+ 31   this.player = file.player || this.getBestPlayer();
+ 32   this.priority = file.priority || this.getPriority();
+ 33   this.id = file.id || this.getId();
+ 34 };
+ 35 
+ 36 /**
+ 37  * Returns the best player for the job.
+ 38  *
+ 39  * @return {string} The best player to play the media file.
+ 40  */
+ 41 minplayer.file.prototype.getBestPlayer = function() {
+ 42   var bestplayer = null, bestpriority = 0;
+ 43   jQuery.each(minplayer.players, (function(file) {
+ 44     return function(name, player) {
+ 45       var priority = player.getPriority();
+ 46       if (player.canPlay(file) && (priority > bestpriority)) {
+ 47         bestplayer = name;
+ 48         bestpriority = priority;
+ 49       }
+ 50     };
+ 51   })(this));
+ 52   return bestplayer;
+ 53 };
+ 54 
+ 55 /**
+ 56  * The priority of this file is determined by the priority of the best
+ 57  * player multiplied by the priority of the mimetype.
+ 58  *
+ 59  * @return {integer} The priority of the media file.
+ 60  */
+ 61 minplayer.file.prototype.getPriority = function() {
+ 62   var priority = 1;
+ 63   if (this.player) {
+ 64     priority = minplayer.players[this.player].getPriority();
+ 65   }
+ 66   switch (this.mimetype) {
+ 67     case 'video/x-webm':
+ 68     case 'video/webm':
+ 69     case 'application/octet-stream':
+ 70       return priority * 10;
+ 71     case 'video/mp4':
+ 72     case 'audio/mp4':
+ 73     case 'audio/mpeg':
+ 74       return priority * 9;
+ 75     case 'video/ogg':
+ 76     case 'audio/ogg':
+ 77     case 'video/quicktime':
+ 78       return priority * 8;
+ 79     default:
+ 80       return priority * 5;
+ 81   }
+ 82 };
+ 83 
+ 84 /**
+ 85  * Returns the file extension of the file path.
+ 86  *
+ 87  * @return {string} The file extension.
+ 88  */
+ 89 minplayer.file.prototype.getFileExtension = function() {
+ 90   return this.path.substring(this.path.lastIndexOf('.') + 1).toLowerCase();
+ 91 };
+ 92 
+ 93 /**
+ 94  * Returns the proper mimetype based off of the extension.
+ 95  *
+ 96  * @return {string} The mimetype of the file based off of extension.
+ 97  */
+ 98 minplayer.file.prototype.getMimeType = function() {
+ 99   switch (this.extension) {
+100     case 'mp4': case 'm4v': case 'flv': case 'f4v':
+101       return 'video/mp4';
+102     case'webm':
+103       return 'video/webm';
+104     case 'ogg': case 'ogv':
+105       return 'video/ogg';
+106     case '3g2':
+107       return 'video/3gpp2';
+108     case '3gpp':
+109     case '3gp':
+110       return 'video/3gpp';
+111     case 'mov':
+112       return 'video/quicktime';
+113     case'swf':
+114       return 'application/x-shockwave-flash';
+115     case 'oga':
+116       return 'audio/ogg';
+117     case 'mp3':
+118       return 'audio/mpeg';
+119     case 'm4a': case 'f4a':
+120       return 'audio/mp4';
+121     case 'aac':
+122       return 'audio/aac';
+123     case 'wav':
+124       return 'audio/vnd.wave';
+125     case 'wma':
+126       return 'audio/x-ms-wma';
+127     default:
+128       return 'unknown';
+129   }
+130 };
+131 
+132 /**
+133  * The type of media this is: video or audio.
+134  *
+135  * @return {string} "video" or "audio" based on what the type of media this
+136  * is.
+137  */
+138 minplayer.file.prototype.getType = function() {
+139   switch (this.mimetype) {
+140     case 'video/mp4':
+141     case 'video/webm':
+142     case 'application/octet-stream':
+143     case 'video/x-webm':
+144     case 'video/ogg':
+145     case 'video/3gpp2':
+146     case 'video/3gpp':
+147     case 'video/quicktime':
+148       return 'video';
+149     case 'audio/mp3':
+150     case 'audio/mp4':
+151     case 'audio/ogg':
+152     case 'audio/mpeg':
+153       return 'audio';
+154     default:
+155       return '';
+156   }
+157 };
+158 
+159 /**
+160  * Returns the ID for this media file.
+161  *
+162  * @return {string} The id for this media file which is provided by the player.
+163  */
+164 minplayer.file.prototype.getId = function() {
+165   var player = minplayer.players[this.player];
+166   return (player && player.getMediaId) ? player.getMediaId(this) : '';
+167 };
+168 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.flags.js.html b/minplayer/doc/symbols/src/src_minplayer.flags.js.html new file mode 100644 index 00000000..22c13e3a --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.flags.js.html @@ -0,0 +1,79 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @class This is a class used to keep track of flag states
+  7  * which is used to control the busy cursor, big play button, among other
+  8  * items in which multiple components can have an interest in hiding or
+  9  * showing a single element on the screen.
+ 10  *
+ 11  * <p>
+ 12  * <strong>Usage:</strong>
+ 13  * <pre><code>
+ 14  *   // Declare a flags variable.
+ 15  *   var flags = new minplayer.flags();
+ 16  *
+ 17  *   // Set the flag based on two components interested in the flag.
+ 18  *   flags.setFlag("component1", true);
+ 19  *   flags.setFlag("component2", true);
+ 20  *
+ 21  *   // Print out the value of the flags. ( Prints 3 )
+ 22  *   console.log(flags.flags);
+ 23  *
+ 24  *   // Now unset a single components flag.
+ 25  *   flags.setFlag("component1", false);
+ 26  *
+ 27  *   // Print out the value of the flags.
+ 28  *   console.log(flags.flags);
+ 29  *
+ 30  *   // Unset the other components flag.
+ 31  *   flags.setFlag("component2", false);
+ 32  *
+ 33  *   // Print out the value of the flags.
+ 34  *   console.log(flags.flags);
+ 35  * </code></pre>
+ 36  * </p>
+ 37  */
+ 38 minplayer.flags = function() {
+ 39 
+ 40   /** The flag. */
+ 41   this.flag = 0;
+ 42 
+ 43   /** Id map to reference id with the flag index. */
+ 44   this.ids = {};
+ 45 
+ 46   /** The number of flags. */
+ 47   this.numFlags = 0;
+ 48 };
+ 49 
+ 50 /**
+ 51  * Sets a flag based on boolean logic operators.
+ 52  *
+ 53  * @param {string} id The id of the controller interested in this flag.
+ 54  * @param {boolean} value The value of this flag ( true or false ).
+ 55  */
+ 56 minplayer.flags.prototype.setFlag = function(id, value) {
+ 57 
+ 58   // Define this id if it isn't present.
+ 59   if (!this.ids.hasOwnProperty(id)) {
+ 60     this.ids[id] = this.numFlags;
+ 61     this.numFlags++;
+ 62   }
+ 63 
+ 64   // Use binary operations to keep track of the flag state
+ 65   if (value) {
+ 66     this.flag |= (1 << this.ids[id]);
+ 67   }
+ 68   else {
+ 69     this.flag &= ~(1 << this.ids[id]);
+ 70   }
+ 71 };
+ 72 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.image.js.html b/minplayer/doc/symbols/src/src_minplayer.image.js.html new file mode 100644 index 00000000..1af20e8c --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.image.js.html @@ -0,0 +1,152 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @class A class to easily handle images.
+  7  * @param {object} context The jQuery context.
+  8  * @param {object} options This components options.
+  9  */
+ 10 minplayer.image = function(context, options) {
+ 11 
+ 12   // Determine if the image is loaded.
+ 13   this.loaded = false;
+ 14 
+ 15   // The image loader.
+ 16   this.loader = null;
+ 17 
+ 18   // The ratio of the image.
+ 19   this.ratio = 0;
+ 20 
+ 21   // The image element.
+ 22   this.img = null;
+ 23 
+ 24   // Derive from display
+ 25   minplayer.display.call(this, 'image', context, options);
+ 26 };
+ 27 
+ 28 /** Derive from minplayer.display. */
+ 29 minplayer.image.prototype = new minplayer.display();
+ 30 
+ 31 /** Reset the constructor. */
+ 32 minplayer.image.prototype.constructor = minplayer.image;
+ 33 
+ 34 /**
+ 35  * @see minplayer.plugin.construct
+ 36  */
+ 37 minplayer.image.prototype.construct = function() {
+ 38 
+ 39   // Say we need to resize.
+ 40   this.allowResize = true;
+ 41 
+ 42   // Call the media display constructor.
+ 43   minplayer.display.prototype.construct.call(this);
+ 44 
+ 45   // Set the container to not show any overflow...
+ 46   this.display.css('overflow', 'hidden');
+ 47 
+ 48   /** The loader for the image. */
+ 49   this.loader = new Image();
+ 50 
+ 51   /** Register for when the image is loaded within the loader. */
+ 52   this.loader.onload = (function(image) {
+ 53     return function() {
+ 54       image.loaded = true;
+ 55       image.ratio = (image.loader.width / image.loader.height);
+ 56       image.resize();
+ 57       image.trigger('loaded');
+ 58     };
+ 59   })(this);
+ 60 
+ 61   // We are now ready.
+ 62   this.ready();
+ 63 };
+ 64 
+ 65 /**
+ 66  * Loads an image.
+ 67  *
+ 68  * @param {string} src The source of the image to load.
+ 69  */
+ 70 minplayer.image.prototype.load = function(src) {
+ 71 
+ 72   // First clear the previous image.
+ 73   this.clear(function() {
+ 74 
+ 75     // Create the new image, and append to the display.
+ 76     this.display.empty();
+ 77     this.img = jQuery(document.createElement('img')).attr({src: ''}).hide();
+ 78     this.display.append(this.img);
+ 79     this.loader.src = src;
+ 80   });
+ 81 };
+ 82 
+ 83 /**
+ 84  * Clears an image.
+ 85  *
+ 86  * @param {function} callback Called when the image is done clearing.
+ 87  */
+ 88 minplayer.image.prototype.clear = function(callback) {
+ 89   this.loaded = false;
+ 90   if (this.img) {
+ 91     this.img.fadeOut((function(image) {
+ 92       return function() {
+ 93         image.img.attr('src', '');
+ 94         image.loader.src = '';
+ 95         $(this).remove();
+ 96         callback.call(image);
+ 97       };
+ 98     })(this));
+ 99   }
+100   else {
+101     callback.call(this);
+102   }
+103 };
+104 
+105 /**
+106  * Resize the image provided a width and height or nothing.
+107  *
+108  * @param {integer} width (optional) The width of the container.
+109  * @param {integer} height (optional) The height of the container.
+110  */
+111 minplayer.image.prototype.resize = function(width, height) {
+112   width = width || this.display.width();
+113   height = height || this.display.height();
+114   if (width && height && this.loaded) {
+115 
+116     // Get the scaled rectangle.
+117     var rect = this.getScaledRect(this.ratio, {
+118       width: width,
+119       height: height
+120     });
+121 
+122     // Now set this image to the new size.
+123     if (this.img) {
+124       this.img.attr('src', this.loader.src).css({
+125         marginLeft: rect.x,
+126         marginTop: rect.y,
+127         width: rect.width,
+128         height: rect.height
+129       });
+130     }
+131 
+132     // Show the container.
+133     this.img.fadeIn();
+134   }
+135 };
+136 
+137 /**
+138  * @see minplayer.display#onResize
+139  */
+140 minplayer.image.prototype.onResize = function() {
+141 
+142   // Resize the image to fit.
+143   this.resize();
+144 };
+145 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.js.html b/minplayer/doc/symbols/src/src_minplayer.js.html new file mode 100644 index 00000000..882363fd --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.js.html @@ -0,0 +1,360 @@ +
  1 // Add a way to instanciate using jQuery prototype.
+  2 if (!jQuery.fn.minplayer) {
+  3 
+  4   /**
+  5    * @constructor
+  6    *
+  7    * Define a jQuery minplayer prototype.
+  8    *
+  9    * @param {object} options The options for this jQuery prototype.
+ 10    * @return {Array} jQuery object.
+ 11    */
+ 12   jQuery.fn.minplayer = function(options) {
+ 13     return jQuery(this).each(function() {
+ 14       options = options || {};
+ 15       options.id = options.id || $(this).attr('id') || Math.random();
+ 16       if (!minplayer.plugins[options.id]) {
+ 17         options.template = options.template || 'default';
+ 18         if (minplayer[options.template]) {
+ 19           new minplayer[options.template](jQuery(this), options);
+ 20         }
+ 21         else {
+ 22           new minplayer(jQuery(this), options);
+ 23         }
+ 24       }
+ 25     });
+ 26   };
+ 27 }
+ 28 
+ 29 /**
+ 30  * @constructor
+ 31  * @extends minplayer.display
+ 32  * @class The core media player class which governs the media player
+ 33  * functionality.
+ 34  *
+ 35  * <p><strong>Usage:</strong>
+ 36  * <pre><code>
+ 37  *
+ 38  *   // Create a media player.
+ 39  *   var player = jQuery("#player").minplayer({
+ 40  *
+ 41  *   });
+ 42  *
+ 43  * </code></pre>
+ 44  * </p>
+ 45  *
+ 46  * @param {object} context The jQuery context.
+ 47  * @param {object} options This components options.
+ 48  */
+ 49 minplayer = jQuery.extend(function(context, options) {
+ 50 
+ 51   // Derive from display
+ 52   minplayer.display.call(this, 'player', context, options);
+ 53 }, minplayer);
+ 54 
+ 55 /** Derive from minplayer.display. */
+ 56 minplayer.prototype = new minplayer.display();
+ 57 
+ 58 /** Reset the constructor. */
+ 59 minplayer.prototype.constructor = minplayer;
+ 60 
+ 61 /**
+ 62  * Define a way to debug.
+ 63  */
+ 64 minplayer.console = console || {log: function(data) {}};
+ 65 
+ 66 /**
+ 67  * @see minplayer.plugin.construct
+ 68  */
+ 69 minplayer.prototype.construct = function() {
+ 70 
+ 71   // Allow them to provide arguments based off of the DOM attributes.
+ 72   jQuery.each(this.context[0].attributes, (function(player) {
+ 73     return function(index, attr) {
+ 74       player.options[attr.name] = player.options[attr.name] || attr.value;
+ 75     };
+ 76   })(this));
+ 77 
+ 78   // Make sure we provide default options...
+ 79   this.options = jQuery.extend({
+ 80     id: 'player',
+ 81     build: false,
+ 82     wmode: 'transparent',
+ 83     preload: true,
+ 84     autoplay: false,
+ 85     loop: false,
+ 86     width: '100%',
+ 87     height: '350px',
+ 88     debug: false,
+ 89     volume: 80,
+ 90     files: [],
+ 91     file: '',
+ 92     preview: '',
+ 93     attributes: {}
+ 94   }, this.options);
+ 95 
+ 96   // Call the minplayer display constructor.
+ 97   minplayer.display.prototype.construct.call(this);
+ 98 
+ 99   /** The controller for this player. */
+100   this.controller = this.create('controller');
+101 
+102   /** The play loader for this player. */
+103   this.playLoader = this.create('playLoader');
+104 
+105   /** Variable to store the current media player. */
+106   this.currentPlayer = 'html5';
+107 
+108   // Add key events to the window.
+109   this.addKeyEvents();
+110 
+111   // Now load these files.
+112   this.load(this.getFiles());
+113 
+114   // Add the player events.
+115   this.addEvents();
+116 
+117   // The player is ready.
+118   this.ready();
+119 };
+120 
+121 /**
+122  * We need to bind to events we are interested in.
+123  */
+124 minplayer.prototype.addEvents = function() {
+125   minplayer.get.call(this, this.options.id, null, (function(player) {
+126     return function(plugin) {
+127 
+128       // Bind to the error event.
+129       plugin.bind('error', function(event, data) {
+130 
+131         // If an error occurs within the html5 media player, then try
+132         // to fall back to the flash player.
+133         if (player.currentPlayer == 'html5') {
+134           player.options.file.player = 'minplayer';
+135           player.loadPlayer();
+136         }
+137         else {
+138           player.error(data);
+139         }
+140       });
+141 
+142       // Bind to the fullscreen event.
+143       plugin.bind('fullscreen', function(event, data) {
+144         player.resize();
+145       });
+146     };
+147   })(this));
+148 };
+149 
+150 /**
+151  * Sets an error on the player.
+152  *
+153  * @param {string} error The error to display on the player.
+154  */
+155 minplayer.prototype.error = function(error) {
+156   error = error || '';
+157   if (this.elements.error) {
+158 
+159     // Set the error text.
+160     this.elements.error.text(error);
+161     if (error) {
+162       this.elements.error.show();
+163     }
+164     else {
+165       this.elements.error.hide();
+166     }
+167   }
+168 };
+169 
+170 /**
+171  * Adds key events to the player.
+172  */
+173 minplayer.prototype.addKeyEvents = function() {
+174   jQuery(document).bind('keydown', (function(player) {
+175     return function(event) {
+176       switch (event.keyCode) {
+177         case 113: // ESC
+178         case 27:  // Q
+179           if (player.isFullScreen()) {
+180             player.fullscreen(false);
+181           }
+182           break;
+183       }
+184     };
+185   })(this));
+186 };
+187 
+188 /**
+189  * Returns all the media files available for this player.
+190  *
+191  * @return {array} All the media files for this player.
+192  */
+193 minplayer.prototype.getFiles = function() {
+194   var files = [];
+195   var mediaSrc = null;
+196 
+197   // Get the files involved...
+198   if (this.elements.media) {
+199     mediaSrc = this.elements.media.attr('src');
+200     if (mediaSrc) {
+201       files.push({'path': mediaSrc});
+202     }
+203     jQuery('source', this.elements.media).each(function() {
+204       files.push({
+205         'path': jQuery(this).attr('src'),
+206         'mimetype': jQuery(this).attr('type'),
+207         'codecs': jQuery(this).attr('codecs')
+208       });
+209     });
+210   }
+211 
+212   return files;
+213 };
+214 
+215 /**
+216  * Returns the full media player object.
+217  * @param {array} files An array of files to chose from.
+218  * @return {object} The best media file to play in the current browser.
+219  */
+220 minplayer.prototype.getMediaFile = function(files) {
+221 
+222   // If there are no files then return null.
+223   if (!files) {
+224     return null;
+225   }
+226 
+227   // If the file is a single string, then return the file object.
+228   if (typeof files === 'string') {
+229     return new minplayer.file({'path': files});
+230   }
+231 
+232   // If the file is already a file object then just return.
+233   if (files.path || files.id) {
+234     return new minplayer.file(files);
+235   }
+236 
+237   // Add the files and get the best player to play.
+238   var i = files.length, bestPriority = 0, mFile = null, file = null;
+239   while (i--) {
+240     file = files[i];
+241 
+242     // Get the minplayer file object.
+243     if (typeof file === 'string') {
+244       file = new minplayer.file({'path': file});
+245     }
+246     else {
+247       file = new minplayer.file(file);
+248     }
+249 
+250     // Determine the best file for this browser.
+251     if (file.priority > bestPriority) {
+252       mFile = file;
+253     }
+254   }
+255 
+256   // Return the best minplayer file.
+257   return mFile;
+258 };
+259 
+260 /**
+261  * Loads a media player based on the current file.
+262  */
+263 minplayer.prototype.loadPlayer = function() {
+264 
+265   // Do nothing if there isn't a file.
+266   if (!this.options.file) {
+267     this.error('No media found.');
+268     return;
+269   }
+270 
+271   if (!this.options.file.player) {
+272     this.error('Cannot play media: ' + this.options.file.mimetype);
+273     return;
+274   }
+275 
+276   // Reset the error.
+277   this.error();
+278 
+279   // Only destroy if the current player is different than the new player.
+280   var player = this.options.file.player.toString();
+281 
+282   // If there isn't media or if the players are different.
+283   if (!this.media || (player !== this.currentPlayer)) {
+284 
+285     // Set the current media player.
+286     this.currentPlayer = player;
+287 
+288     // Do nothing if we don't have a display.
+289     if (!this.elements.display) {
+290       this.error('No media display found.');
+291       return;
+292     }
+293 
+294     // Destroy the current media.
+295     var queue = {};
+296     if (this.media) {
+297       queue = this.media.queue;
+298       this.media.destroy();
+299     }
+300 
+301     // Get the class name and create the new player.
+302     pClass = minplayer.players[this.options.file.player];
+303 
+304     // Create the new media player.
+305     this.options.mediaelement = this.elements.media;
+306     this.media = new pClass(this.elements.display, this.options, queue);
+307 
+308     // Now get the media when it is ready.
+309     this.get('media', (function(player) {
+310       return function(media) {
+311 
+312         // Load the media.
+313         media.load(player.options.file);
+314       };
+315     })(this));
+316   }
+317   // If the media object already exists...
+318   else if (this.media) {
+319 
+320     // Now load the different media file.
+321     this.media.load(this.options.file);
+322   }
+323 };
+324 
+325 /**
+326  * Load a set of files or a single file for the media player.
+327  *
+328  * @param {array} files An array of files to chose from to load.
+329  */
+330 minplayer.prototype.load = function(files) {
+331 
+332   // Set the id and class.
+333   var id = '', pClass = '';
+334 
+335   // If no file was provided, then get it.
+336   this.options.files = files || this.options.files;
+337   this.options.file = this.getMediaFile(this.options.files);
+338 
+339   // Now load the player.
+340   this.loadPlayer();
+341 };
+342 
+343 /**
+344  * Called when the player is resized.
+345  */
+346 minplayer.prototype.resize = function() {
+347 
+348   // Call onRezie for each plugin.
+349   this.get(function(plugin) {
+350     plugin.onResize();
+351   });
+352 };
+353 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.playLoader.base.js.html b/minplayer/doc/symbols/src/src_minplayer.playLoader.base.js.html new file mode 100644 index 00000000..f65cb3dd --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.playLoader.base.js.html @@ -0,0 +1,190 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** Define the playLoader object. */
+  5 minplayer.playLoader = minplayer.playLoader || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class The play loader base class, which is used to control the busy
+ 11  * cursor, big play button, and the opaque background which shows when the
+ 12  * player is paused.
+ 13  *
+ 14  * @param {object} context The jQuery context.
+ 15  * @param {object} options This components options.
+ 16  */
+ 17 minplayer.playLoader.base = function(context, options) {
+ 18 
+ 19   // Define the flags that control the busy cursor.
+ 20   this.busy = new minplayer.flags();
+ 21 
+ 22   // Define the flags that control the big play button.
+ 23   this.bigPlay = new minplayer.flags();
+ 24 
+ 25   /** The preview image. */
+ 26   this.preview = null;
+ 27 
+ 28   // Derive from display
+ 29   minplayer.display.call(this, 'playLoader', context, options);
+ 30 };
+ 31 
+ 32 /** Derive from minplayer.display. */
+ 33 minplayer.playLoader.base.prototype = new minplayer.display();
+ 34 
+ 35 /** Reset the constructor. */
+ 36 minplayer.playLoader.base.prototype.constructor = minplayer.playLoader.base;
+ 37 
+ 38 /**
+ 39  * The constructor.
+ 40  */
+ 41 minplayer.playLoader.base.prototype.construct = function() {
+ 42 
+ 43   // Call the media display constructor.
+ 44   minplayer.display.prototype.construct.call(this);
+ 45 
+ 46   // Get the media plugin.
+ 47   this.get('media', function(media) {
+ 48 
+ 49     // Only bind if this player does not have its own play loader.
+ 50     if (!media.hasPlayLoader()) {
+ 51 
+ 52       // Load the preview image.
+ 53       this.loadPreview();
+ 54 
+ 55       // Trigger a play event when someone clicks on the controller.
+ 56       if (this.elements.bigPlay) {
+ 57         this.elements.bigPlay.unbind().bind('click', function(event) {
+ 58           event.preventDefault();
+ 59           jQuery(this).hide();
+ 60           media.play();
+ 61         });
+ 62       }
+ 63 
+ 64       // Bind to the player events to control the play loader.
+ 65       media.unbind('loadstart').bind('loadstart', {obj: this}, function(event) {
+ 66         event.data.obj.busy.setFlag('media', true);
+ 67         event.data.obj.bigPlay.setFlag('media', true);
+ 68         if (event.data.obj.preview) {
+ 69           event.data.obj.elements.preview.show();
+ 70         }
+ 71         event.data.obj.checkVisibility();
+ 72       });
+ 73       media.bind('waiting', {obj: this}, function(event) {
+ 74         event.data.obj.busy.setFlag('media', true);
+ 75         event.data.obj.checkVisibility();
+ 76       });
+ 77       media.bind('loadeddata', {obj: this}, function(event) {
+ 78         event.data.obj.busy.setFlag('media', false);
+ 79         event.data.obj.checkVisibility();
+ 80       });
+ 81       media.bind('playing', {obj: this}, function(event) {
+ 82         event.data.obj.busy.setFlag('media', false);
+ 83         event.data.obj.bigPlay.setFlag('media', false);
+ 84         if (event.data.obj.preview) {
+ 85           event.data.obj.elements.preview.hide();
+ 86         }
+ 87         event.data.obj.checkVisibility();
+ 88       });
+ 89       media.bind('pause', {obj: this}, function(event) {
+ 90         event.data.obj.bigPlay.setFlag('media', true);
+ 91         event.data.obj.checkVisibility();
+ 92       });
+ 93     }
+ 94     else {
+ 95 
+ 96       // Hide the busy cursor.
+ 97       if (this.elements.busy) {
+ 98         this.elements.busy.unbind().hide();
+ 99       }
+100 
+101       // Hide the big play button.
+102       if (this.elements.bigPlay) {
+103         this.elements.bigPlay.unbind().hide();
+104       }
+105 
+106       // Hide the display.
+107       this.display.unbind().hide();
+108     }
+109   });
+110 
+111   // We are now ready.
+112   this.ready();
+113 };
+114 
+115 /**
+116  * Loads the preview image.
+117  */
+118 minplayer.playLoader.base.prototype.loadPreview = function() {
+119 
+120   // If the preview element exists.
+121   if (this.elements.preview) {
+122 
+123     // Get the poster image.
+124     if (!this.options.preview) {
+125       this.options.preview = this.elements.media.attr('poster');
+126     }
+127 
+128     // Reset the media's poster image.
+129     this.elements.media.attr('poster', '');
+130 
+131     // If there is a preview to show...
+132     if (this.options.preview) {
+133 
+134       // Say that this has a preview.
+135       this.elements.preview.addClass('has-preview').show();
+136 
+137       // Create a new preview image.
+138       this.preview = new minplayer.image(this.elements.preview, this.options);
+139 
+140       // Create the image.
+141       this.preview.load(this.options.preview);
+142     }
+143     else {
+144 
+145       // Hide the preview.
+146       this.elements.preview.hide();
+147     }
+148   }
+149 };
+150 
+151 /**
+152  * Hide or show certain elements based on the state of the busy and big play
+153  * button.
+154  */
+155 minplayer.playLoader.base.prototype.checkVisibility = function() {
+156 
+157   // Hide or show the busy cursor based on the flags.
+158   if (this.busy.flag) {
+159     this.elements.busy.show();
+160   }
+161   else {
+162     this.elements.busy.hide();
+163   }
+164 
+165   // Hide or show the big play button based on the flags.
+166   if (this.bigPlay.flag) {
+167     this.elements.bigPlay.show();
+168   }
+169   else {
+170     this.elements.bigPlay.hide();
+171   }
+172 
+173   // Show the control either flag is set.
+174   if (this.bigPlay.flag || this.busy.flag) {
+175     this.display.show();
+176   }
+177 
+178   // Hide the whole control if both flags are 0.
+179   if (!this.bigPlay.flag && !this.busy.flag) {
+180     this.display.hide();
+181   }
+182 };
+183 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.playLoader.js.html b/minplayer/doc/symbols/src/src_minplayer.playLoader.js.html new file mode 100644 index 00000000..512609f4 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.playLoader.js.html @@ -0,0 +1,197 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /**
+  5  * @constructor
+  6  * @extends minplayer.display
+  7  * @class The play loader base class, which is used to control the busy
+  8  * cursor, big play button, and the opaque background which shows when the
+  9  * player is paused.
+ 10  *
+ 11  * @param {object} context The jQuery context.
+ 12  * @param {object} options This components options.
+ 13  */
+ 14 minplayer.playLoader = function(context, options) {
+ 15 
+ 16   // Define the flags that control the busy cursor.
+ 17   this.busy = new minplayer.flags();
+ 18 
+ 19   // Define the flags that control the big play button.
+ 20   this.bigPlay = new minplayer.flags();
+ 21 
+ 22   /** The preview image. */
+ 23   this.preview = null;
+ 24 
+ 25   // Derive from display
+ 26   minplayer.display.call(this, 'playLoader', context, options);
+ 27 };
+ 28 
+ 29 /** Derive from minplayer.display. */
+ 30 minplayer.playLoader.prototype = new minplayer.display();
+ 31 
+ 32 /** Reset the constructor. */
+ 33 minplayer.playLoader.prototype.constructor = minplayer.playLoader;
+ 34 
+ 35 /**
+ 36  * The constructor.
+ 37  */
+ 38 minplayer.playLoader.prototype.construct = function() {
+ 39 
+ 40   // Call the media display constructor.
+ 41   minplayer.display.prototype.construct.call(this);
+ 42 
+ 43   // Get the media plugin.
+ 44   this.get('media', function(media) {
+ 45 
+ 46     // Only bind if this player does not have its own play loader.
+ 47     if (!media.hasPlayLoader()) {
+ 48 
+ 49       // Get the poster image.
+ 50       if (!this.options.preview) {
+ 51         this.options.preview = media.elements.media.attr('poster');
+ 52       }
+ 53 
+ 54       // Reset the media's poster image.
+ 55       media.elements.media.attr('poster', '');
+ 56 
+ 57       // Load the preview image.
+ 58       this.loadPreview();
+ 59 
+ 60       // Trigger a play event when someone clicks on the controller.
+ 61       if (this.elements.bigPlay) {
+ 62         this.elements.bigPlay.unbind().bind('click', function(event) {
+ 63           event.preventDefault();
+ 64           jQuery(this).hide();
+ 65           media.play();
+ 66         });
+ 67       }
+ 68 
+ 69       // Bind to the player events to control the play loader.
+ 70       media.unbind('loadstart').bind('loadstart', (function(playLoader) {
+ 71         return function(event) {
+ 72           playLoader.busy.setFlag('media', true);
+ 73           playLoader.bigPlay.setFlag('media', true);
+ 74           if (playLoader.preview) {
+ 75             playLoader.elements.preview.show();
+ 76           }
+ 77           playLoader.checkVisibility();
+ 78         };
+ 79       })(this));
+ 80       media.bind('waiting', (function(playLoader) {
+ 81         return function(event) {
+ 82           playLoader.busy.setFlag('media', true);
+ 83           playLoader.checkVisibility();
+ 84         };
+ 85       })(this));
+ 86       media.bind('loadeddata', (function(playLoader) {
+ 87         return function(event) {
+ 88           playLoader.busy.setFlag('media', false);
+ 89           playLoader.checkVisibility();
+ 90         };
+ 91       })(this));
+ 92       media.bind('playing', (function(playLoader) {
+ 93         return function(event) {
+ 94           playLoader.busy.setFlag('media', false);
+ 95           playLoader.bigPlay.setFlag('media', false);
+ 96           if (playLoader.preview) {
+ 97             playLoader.elements.preview.hide();
+ 98           }
+ 99           playLoader.checkVisibility();
+100         };
+101       })(this));
+102       media.bind('pause', (function(playLoader) {
+103         return function(event) {
+104           playLoader.bigPlay.setFlag('media', true);
+105           playLoader.checkVisibility();
+106         };
+107       })(this));
+108     }
+109     else {
+110 
+111       // Hide the busy cursor.
+112       if (this.elements.busy) {
+113         this.elements.busy.unbind().hide();
+114       }
+115 
+116       // Hide the big play button.
+117       if (this.elements.bigPlay) {
+118         this.elements.bigPlay.unbind().hide();
+119       }
+120 
+121       // Hide the display.
+122       this.display.unbind().hide();
+123     }
+124   });
+125 
+126   // We are now ready.
+127   this.ready();
+128 };
+129 
+130 /**
+131  * Loads the preview image.
+132  */
+133 minplayer.playLoader.prototype.loadPreview = function() {
+134 
+135   // If the preview element exists.
+136   if (this.elements.preview) {
+137 
+138     // If there is a preview to show...
+139     if (this.options.preview) {
+140 
+141       // Say that this has a preview.
+142       this.elements.preview.addClass('has-preview').show();
+143 
+144       // Create a new preview image.
+145       this.preview = new minplayer.image(this.elements.preview, this.options);
+146 
+147       // Create the image.
+148       this.preview.load(this.options.preview);
+149     }
+150     else {
+151 
+152       // Hide the preview.
+153       this.elements.preview.hide();
+154     }
+155   }
+156 };
+157 
+158 /**
+159  * Hide or show certain elements based on the state of the busy and big play
+160  * button.
+161  */
+162 minplayer.playLoader.prototype.checkVisibility = function() {
+163 
+164   // Hide or show the busy cursor based on the flags.
+165   if (this.busy.flag) {
+166     this.elements.busy.show();
+167   }
+168   else {
+169     this.elements.busy.hide();
+170   }
+171 
+172   // Hide or show the big play button based on the flags.
+173   if (this.bigPlay.flag) {
+174     this.elements.bigPlay.show();
+175   }
+176   else {
+177     this.elements.bigPlay.hide();
+178   }
+179 
+180   // Show the control either flag is set.
+181   if (this.bigPlay.flag || this.busy.flag) {
+182     this.display.show();
+183   }
+184 
+185   // Hide the whole control if both flags are 0.
+186   if (!this.bigPlay.flag && !this.busy.flag) {
+187     this.display.hide();
+188   }
+189 };
+190 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.players.base.js.html b/minplayer/doc/symbols/src/src_minplayer.players.base.js.html new file mode 100644 index 00000000..fef984df --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.players.base.js.html @@ -0,0 +1,599 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** All the media player implementations */
+  5 minplayer.players = minplayer.players || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class The base media player class where all media players derive from.
+ 11  *
+ 12  * @param {object} context The jQuery context.
+ 13  * @param {object} options This components options.
+ 14  * @param {object} queue The event queue to pass events around.
+ 15  */
+ 16 minplayer.players.base = function(context, options, queue) {
+ 17 
+ 18   // Derive from display
+ 19   minplayer.display.call(this, 'media', context, options, queue);
+ 20 };
+ 21 
+ 22 /** Derive from minplayer.display. */
+ 23 minplayer.players.base.prototype = new minplayer.display();
+ 24 
+ 25 /** Reset the constructor. */
+ 26 minplayer.players.base.prototype.constructor = minplayer.players.base;
+ 27 
+ 28 /**
+ 29  * @see minplayer.display.getElements
+ 30  * @this minplayer.players.base
+ 31  * @return {object} The elements for this display.
+ 32  */
+ 33 minplayer.players.base.prototype.getElements = function() {
+ 34   var elements = minplayer.display.prototype.getElements.call(this);
+ 35   return jQuery.extend(elements, {
+ 36     media: this.options.mediaelement
+ 37   });
+ 38 };
+ 39 
+ 40 /**
+ 41  * Get the priority of this media player.
+ 42  *
+ 43  * @return {number} The priority of this media player.
+ 44  */
+ 45 minplayer.players.base.getPriority = function() {
+ 46   return 0;
+ 47 };
+ 48 
+ 49 /**
+ 50  * Returns the ID for the media being played.
+ 51  *
+ 52  * @param {object} file A {@link minplayer.file} object.
+ 53  * @return {string} The ID for the provided media.
+ 54  */
+ 55 minplayer.players.base.getMediaId = function(file) {
+ 56   return '';
+ 57 };
+ 58 
+ 59 /**
+ 60  * Determine if we can play the media file.
+ 61  *
+ 62  * @param {object} file A {@link minplayer.file} object.
+ 63  * @return {boolean} If this player can play this media type.
+ 64  */
+ 65 minplayer.players.base.canPlay = function(file) {
+ 66   return false;
+ 67 };
+ 68 
+ 69 /**
+ 70  * @see minplayer.plugin.construct
+ 71  * @this minplayer.players.base
+ 72  */
+ 73 minplayer.players.base.prototype.construct = function() {
+ 74 
+ 75   // Call the media display constructor.
+ 76   minplayer.display.prototype.construct.call(this);
+ 77 
+ 78   // Clear the media player.
+ 79   this.clear();
+ 80 
+ 81   /** The currently loaded media file. */
+ 82   this.mediaFile = this.options.file;
+ 83 
+ 84   // Get the player display object.
+ 85   if (!this.playerFound()) {
+ 86 
+ 87     // Remove the media element if found
+ 88     if (this.elements.media) {
+ 89       this.elements.media.remove();
+ 90     }
+ 91 
+ 92     // Create a new media player element.
+ 93     this.elements.media = jQuery(this.create());
+ 94     this.display.html(this.elements.media);
+ 95   }
+ 96 
+ 97   // Get the player object...
+ 98   this.player = this.getPlayer();
+ 99 
+100   // Set the focus of the element based on if they click in or outside of it.
+101   jQuery(document).bind('click', (function(player) {
+102     return function(event) {
+103       if (jQuery(event.target).closest('#' + player.options.id).length == 0) {
+104         player.hasFocus = false;
+105       }
+106       else {
+107         player.hasFocus = true;
+108       }
+109     };
+110   })(this));
+111 
+112   // Bind to key events...
+113   jQuery(document).bind('keydown', (function(player) {
+114     return function(event) {
+115       if (player.hasFocus) {
+116         event.preventDefault();
+117         switch (event.keyCode) {
+118           case 32:  // SPACE
+119           case 179: // GOOGLE play/pause button.
+120             if (player.playing) {
+121               player.pause();
+122             }
+123             else {
+124               player.play();
+125             }
+126             break;
+127           case 38:  // UP
+128             player.setVolumeRelative(0.1);
+129             break;
+130           case 40:  // DOWN
+131             player.setVolumeRelative(-0.1);
+132             break;
+133           case 37:  // LEFT
+134           case 227: // GOOGLE TV REW
+135             player.seekRelative(-0.05);
+136             break;
+137           case 39:  // RIGHT
+138           case 228: // GOOGLE TV FW
+139             player.seekRelative(0.05);
+140             break;
+141         }
+142       }
+143     };
+144   })(this));
+145 };
+146 
+147 /**
+148  * @see minplayer.plugin.destroy.
+149  */
+150 minplayer.players.base.prototype.destroy = function() {
+151   minplayer.plugin.prototype.destroy.call(this);
+152   this.clear();
+153 };
+154 
+155 /**
+156  * Clears the media player.
+157  */
+158 minplayer.players.base.prototype.clear = function() {
+159 
+160   // Reset the ready flag.
+161   this.playerReady = false;
+162 
+163   // Reset the player.
+164   this.reset();
+165 
+166   // If the player exists, then unbind all events.
+167   if (this.player) {
+168     jQuery(this.player).unbind();
+169   }
+170 };
+171 
+172 /**
+173  * Resets all variables.
+174  */
+175 minplayer.players.base.prototype.reset = function() {
+176 
+177   // The duration of the player.
+178   this.duration = new minplayer.async();
+179 
+180   // The current play time of the player.
+181   this.currentTime = new minplayer.async();
+182 
+183   // The amount of bytes loaded in the player.
+184   this.bytesLoaded = new minplayer.async();
+185 
+186   // The total amount of bytes for the media.
+187   this.bytesTotal = new minplayer.async();
+188 
+189   // The bytes that the download started with.
+190   this.bytesStart = new minplayer.async();
+191 
+192   // The current volume of the player.
+193   this.volume = new minplayer.async();
+194 
+195   // Reset focus.
+196   this.hasFocus = false;
+197 
+198   // We are not playing.
+199   this.playing = false;
+200 
+201   // We are not loading.
+202   this.loading = false;
+203 
+204   // Tell everyone else we reset.
+205   this.trigger('pause');
+206   this.trigger('waiting');
+207   this.trigger('progress', {loaded: 0, total: 0, start: 0});
+208   this.trigger('timeupdate', {currentTime: 0, duration: 0});
+209 };
+210 
+211 /**
+212  * Called when the player is ready to recieve events and commands.
+213  */
+214 minplayer.players.base.prototype.onReady = function() {
+215 
+216   // Only continue if we are not already ready.
+217   if (this.playerReady) {
+218     return;
+219   }
+220 
+221   // Set the ready flag.
+222   this.playerReady = true;
+223 
+224   // Set the volume to the default.
+225   this.setVolume(this.options.volume / 100);
+226 
+227   // Setup the progress interval.
+228   this.loading = true;
+229 
+230   // Create a poll to get the progress.
+231   this.poll((function(player) {
+232     return function() {
+233 
+234       // Only do this if the play interval is set.
+235       if (player.loading) {
+236 
+237         // Get the bytes loaded asynchronously.
+238         player.getBytesLoaded(function(bytesLoaded) {
+239 
+240           // Get the bytes total asynchronously.
+241           player.getBytesTotal(function(bytesTotal) {
+242 
+243             // Trigger an event about the progress.
+244             if (bytesLoaded || bytesTotal) {
+245 
+246               // Get the bytes start, but don't require it.
+247               var bytesStart = 0;
+248               player.getBytesStart(function(val) {
+249                 bytesStart = val;
+250               });
+251 
+252               // Trigger a progress event.
+253               player.trigger('progress', {
+254                 loaded: bytesLoaded,
+255                 total: bytesTotal,
+256                 start: bytesStart
+257               });
+258 
+259               // Say we are not longer loading if they are equal.
+260               if (bytesLoaded >= bytesTotal) {
+261                 player.loading = false;
+262               }
+263             }
+264           });
+265         });
+266       }
+267 
+268       // Keep polling as long as its loading...
+269       return player.loading;
+270     };
+271   })(this), 1000);
+272 
+273   // We are now ready.
+274   this.ready();
+275 
+276   // Trigger that the load has started.
+277   this.trigger('loadstart');
+278 };
+279 
+280 /**
+281  * Should be called when the media is playing.
+282  */
+283 minplayer.players.base.prototype.onPlaying = function() {
+284 
+285   // Trigger an event that we are playing.
+286   this.trigger('playing');
+287 
+288   // Say that this player has focus.
+289   this.hasFocus = true;
+290 
+291   // Set the playInterval to true.
+292   this.playing = true;
+293 
+294   // Create a poll to get the timeupate.
+295   this.poll((function(player) {
+296     return function() {
+297 
+298       // Only do this if the play interval is set.
+299       if (player.playing) {
+300 
+301         // Get the current time asyncrhonously.
+302         player.getCurrentTime(function(currentTime) {
+303 
+304           // Get the duration asynchronously.
+305           player.getDuration(function(duration) {
+306 
+307             // Convert these to floats.
+308             currentTime = parseFloat(currentTime);
+309             duration = parseFloat(duration);
+310 
+311             // Trigger an event about the progress.
+312             if (currentTime || duration) {
+313 
+314               // Trigger an update event.
+315               player.trigger('timeupdate', {
+316                 currentTime: currentTime,
+317                 duration: duration
+318               });
+319             }
+320           });
+321         });
+322       }
+323 
+324       // Keep polling as long as it is playing.
+325       return player.playing;
+326     };
+327   })(this), 1000);
+328 };
+329 
+330 /**
+331  * Should be called when the media is paused.
+332  */
+333 minplayer.players.base.prototype.onPaused = function() {
+334 
+335   // Trigger an event that we are paused.
+336   this.trigger('pause');
+337 
+338   // Remove focus.
+339   this.hasFocus = false;
+340 
+341   // Say we are not playing.
+342   this.playing = false;
+343 };
+344 
+345 /**
+346  * Should be called when the media is complete.
+347  */
+348 minplayer.players.base.prototype.onComplete = function() {
+349   // Stop the intervals.
+350   this.playing = false;
+351   this.loading = false;
+352   this.hasFocus = false;
+353   this.trigger('ended');
+354 };
+355 
+356 /**
+357  * Should be called when the media is done loading.
+358  */
+359 minplayer.players.base.prototype.onLoaded = function() {
+360   this.trigger('loadeddata');
+361 };
+362 
+363 /**
+364  * Should be called when the player is waiting.
+365  */
+366 minplayer.players.base.prototype.onWaiting = function() {
+367   this.trigger('waiting');
+368 };
+369 
+370 /**
+371  * Called when an error occurs.
+372  *
+373  * @param {string} errorCode The error that was triggered.
+374  */
+375 minplayer.players.base.prototype.onError = function(errorCode) {
+376   this.hasFocus = false;
+377   this.trigger('error', errorCode);
+378 };
+379 
+380 /**
+381  * @see minplayer.players.base#isReady
+382  * @return {boolean} Checks to see if the Flash is ready.
+383  */
+384 minplayer.players.base.prototype.isReady = function() {
+385 
+386   // Return that the player is set and the ready flag is good.
+387   return (this.player && this.playerReady);
+388 };
+389 
+390 /**
+391  * Determines if the player should show the playloader.
+392  *
+393  * @return {bool} If this player implements its own playLoader.
+394  */
+395 minplayer.players.base.prototype.hasPlayLoader = function() {
+396   return false;
+397 };
+398 
+399 /**
+400  * Returns if the media player is already within the DOM.
+401  *
+402  * @return {boolean} TRUE - if the player is in the DOM, FALSE otherwise.
+403  */
+404 minplayer.players.base.prototype.playerFound = function() {
+405   return false;
+406 };
+407 
+408 /**
+409  * Creates the media player and inserts it in the DOM.
+410  *
+411  * @return {object} The media player entity.
+412  */
+413 minplayer.players.base.prototype.create = function() {
+414   this.reset();
+415   return null;
+416 };
+417 
+418 /**
+419  * Returns the media player object.
+420  *
+421  * @return {object} The media player object.
+422  */
+423 minplayer.players.base.prototype.getPlayer = function() {
+424   return this.player;
+425 };
+426 
+427 /**
+428  * Loads a new media player.
+429  *
+430  * @param {object} file A {@link minplayer.file} object.
+431  */
+432 minplayer.players.base.prototype.load = function(file) {
+433 
+434   // Store the media file for future lookup.
+435   var isString = (typeof this.mediaFile == 'string');
+436   var path = isString ? this.mediaFile : this.mediaFile.path;
+437   if (file && (file.path != path)) {
+438     this.reset();
+439     this.mediaFile = file;
+440   }
+441 };
+442 
+443 /**
+444  * Play the loaded media file.
+445  */
+446 minplayer.players.base.prototype.play = function() {
+447 };
+448 
+449 /**
+450  * Pause the loaded media file.
+451  */
+452 minplayer.players.base.prototype.pause = function() {
+453 };
+454 
+455 /**
+456  * Stop the loaded media file.
+457  */
+458 minplayer.players.base.prototype.stop = function() {
+459   this.playing = false;
+460   this.loading = false;
+461   this.hasFocus = false;
+462 };
+463 
+464 /**
+465  * Seeks to relative position.
+466  *
+467  * @param {number} pos Relative position.  -1 to 1 (percent), > 1 (seconds).
+468  */
+469 minplayer.players.base.prototype.seekRelative = function(pos) {
+470 
+471   // Get the current time asyncrhonously.
+472   this.getCurrentTime((function(player) {
+473     return function(currentTime) {
+474 
+475       // Get the duration asynchronously.
+476       player.getDuration(function(duration) {
+477 
+478         // Only do this if we have a duration.
+479         if (duration) {
+480 
+481           // Get the position.
+482           var seekPos = 0;
+483           if ((pos > -1) && (pos < 1)) {
+484             seekPos = (currentTime / duration) + parseFloat(pos);
+485           }
+486           else {
+487             seekPos = (currentTime + parseFloat(pos)) / duration;
+488           }
+489 
+490           // Set the seek value.
+491           player.seek(seekPos);
+492         }
+493       });
+494     };
+495   })(this));
+496 };
+497 
+498 /**
+499  * Seek the loaded media.
+500  *
+501  * @param {number} pos The position to seek the minplayer. 0 to 1.
+502  */
+503 minplayer.players.base.prototype.seek = function(pos) {
+504 };
+505 
+506 /**
+507  * Set the volume of the loaded minplayer.
+508  *
+509  * @param {number} vol -1 to 1 - The relative amount to increase or decrease.
+510  */
+511 minplayer.players.base.prototype.setVolumeRelative = function(vol) {
+512 
+513   // Get the volume
+514   this.getVolume((function(player) {
+515     return function(newVol) {
+516       newVol += parseFloat(vol);
+517       newVol = (newVol < 0) ? 0 : newVol;
+518       newVol = (newVol > 1) ? 1 : newVol;
+519       player.setVolume(newVol);
+520     };
+521   })(this));
+522 };
+523 
+524 /**
+525  * Set the volume of the loaded minplayer.
+526  *
+527  * @param {number} vol The volume to set the media. 0 to 1.
+528  */
+529 minplayer.players.base.prototype.setVolume = function(vol) {
+530   this.trigger('volumeupdate', vol);
+531 };
+532 
+533 /**
+534  * Get the volume from the loaded media.
+535  *
+536  * @param {function} callback Called when the volume is determined.
+537  * @return {number} The volume of the media; 0 to 1.
+538  */
+539 minplayer.players.base.prototype.getVolume = function(callback) {
+540   return this.volume.get(callback);
+541 };
+542 
+543 /**
+544  * Get the current time for the media being played.
+545  *
+546  * @param {function} callback Called when the time is determined.
+547  * @return {number} The volume of the media; 0 to 1.
+548  */
+549 minplayer.players.base.prototype.getCurrentTime = function(callback) {
+550   return this.currentTime.get(callback);
+551 };
+552 
+553 /**
+554  * Return the duration of the loaded media.
+555  *
+556  * @param {function} callback Called when the duration is determined.
+557  * @return {number} The duration of the loaded media.
+558  */
+559 minplayer.players.base.prototype.getDuration = function(callback) {
+560   return this.duration.get(callback);
+561 };
+562 
+563 /**
+564  * Return the start bytes for the loaded media.
+565  *
+566  * @param {function} callback Called when the start bytes is determined.
+567  * @return {int} The bytes that were started.
+568  */
+569 minplayer.players.base.prototype.getBytesStart = function(callback) {
+570   return this.bytesStart.get(callback);
+571 };
+572 
+573 /**
+574  * Return the bytes of media loaded.
+575  *
+576  * @param {function} callback Called when the bytes loaded is determined.
+577  * @return {int} The amount of bytes loaded.
+578  */
+579 minplayer.players.base.prototype.getBytesLoaded = function(callback) {
+580   return this.bytesLoaded.get(callback);
+581 };
+582 
+583 /**
+584  * Return the total amount of bytes.
+585  *
+586  * @param {function} callback Called when the bytes total is determined.
+587  * @return {int} The total amount of bytes for this media.
+588  */
+589 minplayer.players.base.prototype.getBytesTotal = function(callback) {
+590   return this.bytesTotal.get(callback);
+591 };
+592 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.players.flash.js.html b/minplayer/doc/symbols/src/src_minplayer.players.flash.js.html new file mode 100644 index 00000000..a2b560b5 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.players.flash.js.html @@ -0,0 +1,116 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** All the media player implementations */
+  5 minplayer.players = minplayer.players || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class The Flash media player class to control the flash fallback.
+ 11  *
+ 12  * @param {object} context The jQuery context.
+ 13  * @param {object} options This components options.
+ 14  * @param {object} queue The event queue to pass events around.
+ 15  */
+ 16 minplayer.players.flash = function(context, options, queue) {
+ 17 
+ 18   // Derive from players base.
+ 19   minplayer.players.base.call(this, context, options, queue);
+ 20 };
+ 21 
+ 22 /** Derive from minplayer.players.base. */
+ 23 minplayer.players.flash.prototype = new minplayer.players.base();
+ 24 
+ 25 /** Reset the constructor. */
+ 26 minplayer.players.flash.prototype.constructor = minplayer.players.flash;
+ 27 
+ 28 /**
+ 29  * @see minplayer.players.base#getPriority
+ 30  * @return {number} The priority of this media player.
+ 31  */
+ 32 minplayer.players.flash.getPriority = function() {
+ 33   return 0;
+ 34 };
+ 35 
+ 36 /**
+ 37  * @see minplayer.players.base#canPlay
+ 38  * @return {boolean} If this player can play this media type.
+ 39  */
+ 40 minplayer.players.flash.canPlay = function(file) {
+ 41   return false;
+ 42 };
+ 43 
+ 44 /**
+ 45  * API to return the Flash player code provided params.
+ 46  *
+ 47  * @param {object} params The params used to populate the Flash code.
+ 48  * @return {object} A Flash DOM element.
+ 49  */
+ 50 minplayer.players.flash.getFlash = function(params) {
+ 51   // Get the protocol.
+ 52   var protocol = window.location.protocol;
+ 53   if (protocol.charAt(protocol.length - 1) == ':') {
+ 54     protocol = protocol.substring(0, protocol.length - 1);
+ 55   }
+ 56 
+ 57   // Convert the flashvars object to a string...
+ 58   var flashVars = jQuery.param(params.flashvars);
+ 59 
+ 60   // Set the codebase.
+ 61   var codebase = protocol + '://fpdownload.macromedia.com';
+ 62   codebase += '/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0';
+ 63 
+ 64   // Get the HTML flash object string.
+ 65   var flash = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ';
+ 66   flash += 'codebase="' + codebase + '" ';
+ 67   flash += 'playerType="flash" ';
+ 68   flash += 'width="' + params.width + '" ';
+ 69   flash += 'height="' + params.height + '" ';
+ 70   flash += 'id="' + params.id + '" ';
+ 71   flash += 'name="' + params.id + '"> ';
+ 72   flash += '<param name="allowScriptAccess" value="always"></param>';
+ 73   flash += '<param name="allowfullscreen" value="true" />';
+ 74   flash += '<param name="movie" value="' + params.swf + '"></param>';
+ 75   flash += '<param name="wmode" value="' + params.wmode + '"></param>';
+ 76   flash += '<param name="quality" value="high"></param>';
+ 77   flash += '<param name="FlashVars" value="' + flashVars + '"></param>';
+ 78   flash += '<embed src="' + params.swf + '" ';
+ 79   flash += 'quality="high" ';
+ 80   flash += 'width="' + params.width + '" height="' + params.height + '" ';
+ 81   flash += 'id="' + params.id + '" name="' + params.id + '" ';
+ 82   flash += 'swLiveConnect="true" allowScriptAccess="always" ';
+ 83   flash += 'wmode="' + params.wmode + '"';
+ 84   flash += 'allowfullscreen="true" type="application/x-shockwave-flash" ';
+ 85   flash += 'FlashVars="' + flashVars + '" ';
+ 86   flash += 'pluginspage="' + protocol;
+ 87   flash += '://www.macromedia.com/go/getflashplayer" />';
+ 88   flash += '</object>';
+ 89   return flash;
+ 90 };
+ 91 
+ 92 /**
+ 93  * @see minplayer.players.base#playerFound
+ 94  * @return {boolean} TRUE - if the player is in the DOM, FALSE otherwise.
+ 95  */
+ 96 minplayer.players.flash.prototype.playerFound = function() {
+ 97   return (this.display.find('object[playerType="flash"]').length > 0);
+ 98 };
+ 99 
+100 /**
+101  * @see minplayer.players.base#getPlayer
+102  * @return {object} The media player object.
+103  */
+104 minplayer.players.flash.prototype.getPlayer = function() {
+105   // IE needs the object, everyone else just needs embed.
+106   var object = jQuery.browser.msie ? 'object' : 'embed';
+107   return jQuery(object, this.display).eq(0)[0];
+108 };
+109 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.players.html5.js.html b/minplayer/doc/symbols/src/src_minplayer.players.html5.js.html new file mode 100644 index 00000000..a22b2288 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.players.html5.js.html @@ -0,0 +1,351 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** All the media player implementations */
+  5 minplayer.players = minplayer.players || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class The HTML5 media player implementation.
+ 11  *
+ 12  * @param {object} context The jQuery context.
+ 13  * @param {object} options This components options.
+ 14  * @param {object} queue The event queue to pass events around.
+ 15  */
+ 16 minplayer.players.html5 = function(context, options, queue) {
+ 17 
+ 18   // Derive players base.
+ 19   minplayer.players.base.call(this, context, options, queue);
+ 20 };
+ 21 
+ 22 /** Derive from minplayer.players.base. */
+ 23 minplayer.players.html5.prototype = new minplayer.players.base();
+ 24 
+ 25 /** Reset the constructor. */
+ 26 minplayer.players.html5.prototype.constructor = minplayer.players.html5;
+ 27 
+ 28 /**
+ 29  * @see minplayer.players.base#getPriority
+ 30  * @return {number} The priority of this media player.
+ 31  */
+ 32 minplayer.players.html5.getPriority = function() {
+ 33   return 10;
+ 34 };
+ 35 
+ 36 /**
+ 37  * @see minplayer.players.base#canPlay
+ 38  * @return {boolean} If this player can play this media type.
+ 39  */
+ 40 minplayer.players.html5.canPlay = function(file) {
+ 41   switch (file.mimetype) {
+ 42     case 'video/ogg':
+ 43       return !!minplayer.playTypes.videoOGG;
+ 44     case 'video/mp4':
+ 45     case 'video/x-mp4':
+ 46     case 'video/m4v':
+ 47     case 'video/x-m4v':
+ 48       return !!minplayer.playTypes.videoH264;
+ 49     case 'video/x-webm':
+ 50     case 'video/webm':
+ 51     case 'application/octet-stream':
+ 52       return !!minplayer.playTypes.videoWEBM;
+ 53     case 'audio/ogg':
+ 54       return !!minplayer.playTypes.audioOGG;
+ 55     case 'audio/mpeg':
+ 56       return !!minplayer.playTypes.audioMP3;
+ 57     case 'audio/mp4':
+ 58       return !!minplayer.playTypes.audioMP4;
+ 59     default:
+ 60       return false;
+ 61   }
+ 62 };
+ 63 
+ 64 /**
+ 65  * @see minplayer.plugin.construct
+ 66  */
+ 67 minplayer.players.html5.prototype.construct = function() {
+ 68 
+ 69   // Call base constructor.
+ 70   minplayer.players.base.prototype.construct.call(this);
+ 71 
+ 72   // For the HTML5 player, we will just pass events along...
+ 73   if (this.player) {
+ 74 
+ 75     this.player.addEventListener('abort', (function(player) {
+ 76       return function() {
+ 77         player.trigger('abort');
+ 78       };
+ 79     })(this), false);
+ 80     this.player.addEventListener('loadstart', (function(player) {
+ 81       return function() {
+ 82         player.onReady();
+ 83       };
+ 84     })(this), false);
+ 85     this.player.addEventListener('loadeddata', (function(player) {
+ 86       return function() {
+ 87         player.onLoaded();
+ 88       };
+ 89     })(this), false);
+ 90     this.player.addEventListener('loadedmetadata', (function(player) {
+ 91       return function() {
+ 92         player.onLoaded();
+ 93       };
+ 94     })(this), false);
+ 95     this.player.addEventListener('canplaythrough', (function(player) {
+ 96       return function() {
+ 97         player.onLoaded();
+ 98       };
+ 99     })(this), false);
+100     this.player.addEventListener('ended', (function(player) {
+101       return function() {
+102         player.onComplete();
+103       };
+104     })(this), false);
+105     this.player.addEventListener('pause', (function(player) {
+106       return function() {
+107         player.onPaused();
+108       };
+109     })(this), false);
+110     this.player.addEventListener('play', (function(player) {
+111       return function() {
+112         player.onPlaying();
+113       };
+114     })(this), false);
+115     this.player.addEventListener('playing', (function(player) {
+116       return function() {
+117         player.onPlaying();
+118       };
+119     })(this), false);
+120     this.player.addEventListener('error', (function(player) {
+121       return function() {
+122         player.trigger('error', 'An error occured - ' + this.error.code);
+123       };
+124     })(this), false);
+125     this.player.addEventListener('waiting', (function(player) {
+126       return function() {
+127         player.onWaiting();
+128       };
+129     })(this), false);
+130     this.player.addEventListener('durationchange', (function(player) {
+131       return function() {
+132         player.duration.set(this.duration);
+133         player.trigger('durationchange', {duration: this.duration});
+134       };
+135     })(this), false);
+136     this.player.addEventListener('progress', (function(player) {
+137       return function(event) {
+138         player.bytesTotal.set(event.total);
+139         player.bytesLoaded.set(event.loaded);
+140       };
+141     })(this), false);
+142 
+143     // Say we are ready.
+144     this.onReady();
+145   }
+146 };
+147 
+148 /**
+149  * @see minplayer.players.base#playerFound
+150  * @return {boolean} TRUE - if the player is in the DOM, FALSE otherwise.
+151  */
+152 minplayer.players.html5.prototype.playerFound = function() {
+153   return (this.display.find(this.mediaFile.type).length > 0);
+154 };
+155 
+156 /**
+157  * @see minplayer.players.base#create
+158  * @return {object} The media player entity.
+159  */
+160 minplayer.players.html5.prototype.create = function() {
+161   minplayer.players.base.prototype.create.call(this);
+162   var element = jQuery(document.createElement(this.mediaFile.type))
+163   .attr(this.options.attributes)
+164   .append(
+165     jQuery(document.createElement('source')).attr({
+166       'src': this.mediaFile.path
+167     })
+168   );
+169 
+170   // Fix the fluid width and height.
+171   element.eq(0)[0].setAttribute('width', '100%');
+172   element.eq(0)[0].setAttribute('height', '100%');
+173   return element;
+174 };
+175 
+176 /**
+177  * @see minplayer.players.base#getPlayer
+178  * @return {object} The media player object.
+179  */
+180 minplayer.players.html5.prototype.getPlayer = function() {
+181   return this.elements.media.eq(0)[0];
+182 };
+183 
+184 /**
+185  * @see minplayer.players.base#load
+186  */
+187 minplayer.players.html5.prototype.load = function(file) {
+188 
+189   if (file) {
+190 
+191     // Get the current source.
+192     var src = this.elements.media.attr('src');
+193     if (!src) {
+194       src = jQuery('source', this.elements.media).eq(0).attr('src');
+195     }
+196 
+197     // If the source is different.
+198     if (src != file.path) {
+199 
+200       // Change the source...
+201       var code = '<source src="' + file.path + '">';
+202       this.elements.media.removeAttr('src').empty().html(code);
+203     }
+204   }
+205 
+206   // Always call the base first on load...
+207   minplayer.players.base.prototype.load.call(this, file);
+208 };
+209 
+210 /**
+211  * @see minplayer.players.base#play
+212  */
+213 minplayer.players.html5.prototype.play = function() {
+214   minplayer.players.base.prototype.play.call(this);
+215   if (this.isReady()) {
+216     this.player.play();
+217   }
+218 };
+219 
+220 /**
+221  * @see minplayer.players.base#pause
+222  */
+223 minplayer.players.html5.prototype.pause = function() {
+224   minplayer.players.base.prototype.pause.call(this);
+225   if (this.isReady()) {
+226     this.player.pause();
+227   }
+228 };
+229 
+230 /**
+231  * @see minplayer.players.base#stop
+232  */
+233 minplayer.players.html5.prototype.stop = function() {
+234   minplayer.players.base.prototype.stop.call(this);
+235   if (this.isReady()) {
+236     this.player.pause();
+237     this.player.src = '';
+238   }
+239 };
+240 
+241 /**
+242  * @see minplayer.players.base#seek
+243  */
+244 minplayer.players.html5.prototype.seek = function(pos) {
+245   minplayer.players.base.prototype.seek.call(this, pos);
+246   if (this.isReady()) {
+247     this.player.currentTime = pos;
+248   }
+249 };
+250 
+251 /**
+252  * @see minplayer.players.base#setVolume
+253  */
+254 minplayer.players.html5.prototype.setVolume = function(vol) {
+255   minplayer.players.base.prototype.setVolume.call(this, vol);
+256   if (this.isReady()) {
+257     this.player.volume = vol;
+258   }
+259 };
+260 
+261 /**
+262  * @see minplayer.players.base#getVolume
+263  */
+264 minplayer.players.html5.prototype.getVolume = function(callback) {
+265   if (this.isReady()) {
+266     callback(this.player.volume);
+267   }
+268 };
+269 
+270 /**
+271  * @see minplayer.players.base#getDuration
+272  */
+273 minplayer.players.html5.prototype.getDuration = function(callback) {
+274   if (this.isReady()) {
+275     callback(this.player.duration);
+276   }
+277 };
+278 
+279 /**
+280  * @see minplayer.players.base#getCurrentTime
+281  */
+282 minplayer.players.html5.prototype.getCurrentTime = function(callback) {
+283   if (this.isReady()) {
+284     callback(this.player.currentTime);
+285   }
+286 };
+287 
+288 /**
+289  * @see minplayer.players.base#getBytesLoaded
+290  */
+291 minplayer.players.html5.prototype.getBytesLoaded = function(callback) {
+292   if (this.isReady()) {
+293     var loaded = 0;
+294 
+295     // Check several different possibilities.
+296     if (this.bytesLoaded.value) {
+297       loaded = this.bytesLoaded.value;
+298     }
+299     else if (this.player.buffered &&
+300         this.player.buffered.length > 0 &&
+301         this.player.buffered.end &&
+302         this.player.duration) {
+303       loaded = this.player.buffered.end(0);
+304     }
+305     else if (this.player.bytesTotal != undefined &&
+306              this.player.bytesTotal > 0 &&
+307              this.player.bufferedBytes != undefined) {
+308       loaded = this.player.bufferedBytes;
+309     }
+310 
+311     // Return the loaded amount.
+312     callback(loaded);
+313   }
+314 };
+315 
+316 /**
+317  * @see minplayer.players.base#getBytesTotal
+318  */
+319 minplayer.players.html5.prototype.getBytesTotal = function(callback) {
+320   if (this.isReady()) {
+321 
+322     var total = 0;
+323 
+324     // Check several different possibilities.
+325     if (this.bytesTotal.value) {
+326       total = this.bytesTotal.value;
+327     }
+328     else if (this.player.buffered &&
+329         this.player.buffered.length > 0 &&
+330         this.player.buffered.end &&
+331         this.player.duration) {
+332       total = this.player.duration;
+333     }
+334     else if (this.player.bytesTotal != undefined &&
+335              this.player.bytesTotal > 0 &&
+336              this.player.bufferedBytes != undefined) {
+337       total = this.player.bytesTotal;
+338     }
+339 
+340     // Return the loaded amount.
+341     callback(total);
+342   }
+343 };
+344 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.players.minplayer.js.html b/minplayer/doc/symbols/src/src_minplayer.players.minplayer.js.html new file mode 100644 index 00000000..6233b9db --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.players.minplayer.js.html @@ -0,0 +1,283 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** All the media player implementations */
+  5 minplayer.players = minplayer.players || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class The Flash media player class to control the flash fallback.
+ 11  *
+ 12  * @param {object} context The jQuery context.
+ 13  * @param {object} options This components options.
+ 14  * @param {object} queue The event queue to pass events around.
+ 15  */
+ 16 minplayer.players.minplayer = function(context, options, queue) {
+ 17 
+ 18   // Derive from players flash.
+ 19   minplayer.players.flash.call(this, context, options, queue);
+ 20 };
+ 21 
+ 22 /** Derive from minplayer.players.flash. */
+ 23 minplayer.players.minplayer.prototype = new minplayer.players.flash();
+ 24 
+ 25 /** Reset the constructor. */
+ 26 minplayer.players.minplayer.prototype.constructor = minplayer.players.minplayer;
+ 27 
+ 28 /**
+ 29  * Called when the Flash player is ready.
+ 30  *
+ 31  * @param {string} id The media player ID.
+ 32  */
+ 33 window.onFlashPlayerReady = function(id) {
+ 34   var media = minplayer.get(id, 'media');
+ 35   if (media) {
+ 36     media.onReady();
+ 37   }
+ 38 };
+ 39 
+ 40 /**
+ 41  * Called when the Flash player updates.
+ 42  *
+ 43  * @param {string} id The media player ID.
+ 44  * @param {string} eventType The event type that was triggered.
+ 45  */
+ 46 window.onFlashPlayerUpdate = function(id, eventType) {
+ 47   var media = minplayer.get(id, 'media');
+ 48   if (media) {
+ 49     media.onMediaUpdate(eventType);
+ 50   }
+ 51 };
+ 52 
+ 53 /**
+ 54  * Used to debug from the Flash player to the browser console.
+ 55  *
+ 56  * @param {string} debug The debug string.
+ 57  */
+ 58 window.onFlashPlayerDebug = function(debug) {
+ 59   minplayer.console.log(debug);
+ 60 };
+ 61 
+ 62 /**
+ 63  * @see minplayer.players.base#getPriority
+ 64  * @return {number} The priority of this media player.
+ 65  */
+ 66 minplayer.players.minplayer.getPriority = function() {
+ 67   return 1;
+ 68 };
+ 69 
+ 70 /**
+ 71  * @see minplayer.players.base#canPlay
+ 72  * @return {boolean} If this player can play this media type.
+ 73  */
+ 74 minplayer.players.minplayer.canPlay = function(file) {
+ 75   switch (file.mimetype) {
+ 76     case 'video/mp4':
+ 77     case 'video/x-mp4':
+ 78     case 'video/m4v':
+ 79     case 'video/x-m4v':
+ 80     case 'video/x-webm':
+ 81     case 'video/webm':
+ 82     case 'application/octet-stream':
+ 83     case 'video/quicktime':
+ 84     case 'video/3gpp2':
+ 85     case 'video/3gpp':
+ 86     case 'application/x-shockwave-flash':
+ 87     case 'audio/mpeg':
+ 88     case 'audio/mp4':
+ 89     case 'audio/aac':
+ 90     case 'audio/vnd.wave':
+ 91     case 'audio/x-ms-wma':
+ 92       return true;
+ 93 
+ 94     default:
+ 95       return false;
+ 96   }
+ 97 };
+ 98 
+ 99 /**
+100  * @see minplayer.players.base#create
+101  * @return {object} The media player entity.
+102  */
+103 minplayer.players.minplayer.prototype.create = function() {
+104 
+105   // Make sure we provide default options...
+106   this.options = jQuery.extend({
+107     swfplayer: 'flash/minplayer.swf'
+108   }, this.options);
+109 
+110   minplayer.players.flash.prototype.create.call(this);
+111 
+112   // The flash variables for this flash player.
+113   var flashVars = {
+114     'id': this.options.id,
+115     'debug': this.options.debug,
+116     'config': 'nocontrols',
+117     'file': this.mediaFile.path,
+118     'autostart': this.options.autoplay
+119   };
+120 
+121   // Return a flash media player object.
+122   return minplayer.players.flash.getFlash({
+123     swf: this.options.swfplayer,
+124     id: this.options.id + '_player',
+125     width: this.options.width,
+126     height: '100%',
+127     flashvars: flashVars,
+128     wmode: this.options.wmode
+129   });
+130 };
+131 
+132 /**
+133  * Called when the Flash player has an update.
+134  *
+135  * @param {string} eventType The event that was triggered in the player.
+136  */
+137 minplayer.players.minplayer.prototype.onMediaUpdate = function(eventType) {
+138   switch (eventType) {
+139     case 'mediaMeta':
+140       this.onLoaded();
+141       break;
+142     case 'mediaPlaying':
+143       this.onPlaying();
+144       break;
+145     case 'mediaPaused':
+146       this.onPaused();
+147       break;
+148     case 'mediaComplete':
+149       this.onComplete();
+150       break;
+151   }
+152 };
+153 
+154 /**
+155  * @see minplayer.players.base#load
+156  */
+157 minplayer.players.minplayer.prototype.load = function(file) {
+158   minplayer.players.flash.prototype.load.call(this, file);
+159   if (file && this.isReady()) {
+160     this.player.loadMedia(file.path, file.stream);
+161   }
+162 };
+163 
+164 /**
+165  * @see minplayer.players.base#play
+166  */
+167 minplayer.players.minplayer.prototype.play = function() {
+168   minplayer.players.flash.prototype.play.call(this);
+169   if (this.isReady()) {
+170     this.player.playMedia();
+171   }
+172 };
+173 
+174 /**
+175  * @see minplayer.players.base#pause
+176  */
+177 minplayer.players.minplayer.prototype.pause = function() {
+178   minplayer.players.flash.prototype.pause.call(this);
+179   if (this.isReady()) {
+180     this.player.pauseMedia();
+181   }
+182 };
+183 
+184 /**
+185  * @see minplayer.players.base#stop
+186  */
+187 minplayer.players.minplayer.prototype.stop = function() {
+188   minplayer.players.flash.prototype.stop.call(this);
+189   if (this.isReady()) {
+190     this.player.stopMedia();
+191   }
+192 };
+193 
+194 /**
+195  * @see minplayer.players.base#seek
+196  */
+197 minplayer.players.minplayer.prototype.seek = function(pos) {
+198   minplayer.players.flash.prototype.seek.call(this, pos);
+199   if (this.isReady()) {
+200     this.player.seekMedia(pos);
+201   }
+202 };
+203 
+204 /**
+205  * @see minplayer.players.base#setVolume
+206  */
+207 minplayer.players.minplayer.prototype.setVolume = function(vol) {
+208   minplayer.players.flash.prototype.setVolume.call(this, vol);
+209   if (this.isReady()) {
+210     this.player.setVolume(vol);
+211   }
+212 };
+213 
+214 /**
+215  * @see minplayer.players.base#getVolume
+216  */
+217 minplayer.players.minplayer.prototype.getVolume = function(callback) {
+218   if (this.isReady()) {
+219     callback(this.player.getVolume());
+220   }
+221 };
+222 
+223 /**
+224  * @see minplayer.players.flash#getDuration
+225  */
+226 minplayer.players.minplayer.prototype.getDuration = function(callback) {
+227   if (this.isReady()) {
+228 
+229     // Check to see if it is immediately available.
+230     var duration = this.player.getDuration();
+231     if (duration) {
+232       callback(duration);
+233     }
+234     else {
+235 
+236       // If not, then poll every second for the duration.
+237       this.poll((function(player) {
+238         return function() {
+239           duration = player.player.getDuration();
+240           if (duration) {
+241             callback(duration);
+242           }
+243           return !duration;
+244         };
+245       })(this), 1000);
+246     }
+247   }
+248 };
+249 
+250 /**
+251  * @see minplayer.players.base#getCurrentTime
+252  */
+253 minplayer.players.minplayer.prototype.getCurrentTime = function(callback) {
+254   if (this.isReady()) {
+255     callback(this.player.getCurrentTime());
+256   }
+257 };
+258 
+259 /**
+260  * @see minplayer.players.base#getBytesLoaded
+261  */
+262 minplayer.players.minplayer.prototype.getBytesLoaded = function(callback) {
+263   if (this.isReady()) {
+264     callback(this.player.getMediaBytesLoaded());
+265   }
+266 };
+267 
+268 /**
+269  * @see minplayer.players.base#getBytesTotal.
+270  */
+271 minplayer.players.minplayer.prototype.getBytesTotal = function(callback) {
+272   if (this.isReady()) {
+273     callback(this.player.getMediaBytesTotal());
+274   }
+275 };
+276 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.players.vimeo.js.html b/minplayer/doc/symbols/src/src_minplayer.players.vimeo.js.html new file mode 100644 index 00000000..92dab40c --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.players.vimeo.js.html @@ -0,0 +1,270 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** All the media player implementations */
+  5 minplayer.players = minplayer.players || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.players.base
+ 10  * @class The vimeo media player.
+ 11  *
+ 12  * @param {object} context The jQuery context.
+ 13  * @param {object} options This components options.
+ 14  * @param {object} queue The event queue to pass events around.
+ 15  */
+ 16 minplayer.players.vimeo = function(context, options, queue) {
+ 17 
+ 18   // Derive from players base.
+ 19   minplayer.players.base.call(this, context, options, queue);
+ 20 };
+ 21 
+ 22 /** Derive from minplayer.players.base. */
+ 23 minplayer.players.vimeo.prototype = new minplayer.players.base();
+ 24 
+ 25 /** Reset the constructor. */
+ 26 minplayer.players.vimeo.prototype.constructor = minplayer.players.vimeo;
+ 27 
+ 28 /**
+ 29  * @see minplayer.players.base#getPriority
+ 30  * @return {number} The priority of this media player.
+ 31  */
+ 32 minplayer.players.vimeo.getPriority = function() {
+ 33   return 10;
+ 34 };
+ 35 
+ 36 /**
+ 37  * @see minplayer.players.base#canPlay
+ 38  * @return {boolean} If this player can play this media type.
+ 39  */
+ 40 minplayer.players.vimeo.canPlay = function(file) {
+ 41 
+ 42   // Check for the mimetype for vimeo.
+ 43   if (file.mimetype === 'video/vimeo') {
+ 44     return true;
+ 45   }
+ 46 
+ 47   // If the path is a vimeo path, then return true.
+ 48   return (file.path.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i) === 0);
+ 49 };
+ 50 
+ 51 /**
+ 52  * Return the ID for a provided media file.
+ 53  *
+ 54  * @param {object} file A {@link minplayer.file} object.
+ 55  * @return {string} The ID for the provided media.
+ 56  */
+ 57 minplayer.players.vimeo.getMediaId = function(file) {
+ 58   var regex = /^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i;
+ 59   if (file.path.search(regex) === 0) {
+ 60     return file.path.match(regex)[3];
+ 61   }
+ 62   else {
+ 63     return file.path;
+ 64   }
+ 65 };
+ 66 
+ 67 /**
+ 68  * @see minplayer.players.base#reset
+ 69  */
+ 70 minplayer.players.vimeo.prototype.reset = function() {
+ 71 
+ 72   // Reset the flash variables..
+ 73   minplayer.players.base.prototype.reset.call(this);
+ 74 };
+ 75 
+ 76 /**
+ 77  * @see minplayer.players.base#create
+ 78  * @return {object} The media player entity.
+ 79  */
+ 80 minplayer.players.vimeo.prototype.create = function() {
+ 81   minplayer.players.base.prototype.create.call(this);
+ 82 
+ 83   // Insert the Vimeo Froogaloop player.
+ 84   var tag = document.createElement('script');
+ 85   tag.src = 'http://a.vimeocdn.com/js/froogaloop2.min.js';
+ 86   var firstScriptTag = document.getElementsByTagName('script')[0];
+ 87   firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
+ 88 
+ 89   // Create the iframe for this player.
+ 90   var iframe = document.createElement('iframe');
+ 91   iframe.setAttribute('id', this.options.id + '-player');
+ 92   iframe.setAttribute('type', 'text/html');
+ 93   iframe.setAttribute('width', '100%');
+ 94   iframe.setAttribute('height', '100%');
+ 95   iframe.setAttribute('frameborder', '0');
+ 96 
+ 97   // Get the source.
+ 98   var src = 'http://player.vimeo.com/video/';
+ 99   src += this.mediaFile.id + '?';
+100 
+101   // Add the parameters to the src.
+102   src += jQuery.param({
+103     'wmode': 'opaque',
+104     'api': 1,
+105     'player_id': this.options.id + '-player',
+106     'title': 0,
+107     'byline': 0,
+108     'portrait': 0,
+109     'autoplay': this.options.autoplay,
+110     'loop': this.options.loop
+111   });
+112 
+113   // Set the source of the iframe.
+114   iframe.setAttribute('src', src);
+115 
+116   // Now register this player when the froogaloop code is loaded.
+117   this.poll((function(player) {
+118     return function() {
+119       if (window.Froogaloop) {
+120         player.player = window.Froogaloop(iframe);
+121         player.player.addEvent('ready', function() {
+122           player.onReady();
+123         });
+124       }
+125       return !window.Froogaloop;
+126     };
+127   })(this), 200);
+128 
+129   // Trigger that the load has started.
+130   this.trigger('loadstart');
+131 
+132   // Return the player.
+133   return iframe;
+134 };
+135 
+136 /**
+137  * @see minplayer.players.base#onReady
+138  */
+139 minplayer.players.vimeo.prototype.onReady = function(player_id) {
+140 
+141   // Add the other listeners.
+142   this.player.addEvent('loadProgress', (function(player) {
+143     return function(progress) {
+144       player.duration.set(parseFloat(progress.duration));
+145       player.bytesLoaded.set(progress.bytesLoaded);
+146       player.bytesTotal.set(progress.bytesTotal);
+147     };
+148   })(this));
+149 
+150   this.player.addEvent('playProgress', (function(player) {
+151     return function(progress) {
+152       player.duration.set(parseFloat(progress.duration));
+153       player.currentTime.set(parseFloat(progress.seconds));
+154     };
+155   })(this));
+156 
+157   this.player.addEvent('play', (function(player) {
+158     return function() {
+159       player.onPlaying();
+160     };
+161   })(this));
+162 
+163   this.player.addEvent('pause', (function(player) {
+164     return function() {
+165       player.onPaused();
+166     };
+167   })(this));
+168 
+169   this.player.addEvent('finish', (function(player) {
+170     return function() {
+171       player.onComplete();
+172     };
+173   })(this));
+174 
+175   minplayer.players.base.prototype.onReady.call(this);
+176   this.onLoaded();
+177 };
+178 
+179 /**
+180  * Checks to see if this player can be found.
+181  * @return {bool} TRUE - Player is found, FALSE - otherwise.
+182  */
+183 minplayer.players.vimeo.prototype.playerFound = function() {
+184   var iframe = this.display.find('iframe#' + this.options.id + '-player');
+185   return (iframe.length > 0);
+186 };
+187 
+188 /**
+189  * @see minplayer.players.base#play
+190  */
+191 minplayer.players.vimeo.prototype.play = function() {
+192   minplayer.players.base.prototype.play.call(this);
+193   if (this.isReady()) {
+194     this.player.api('play');
+195   }
+196 };
+197 
+198 /**
+199  * @see minplayer.players.base#pause
+200  */
+201 minplayer.players.vimeo.prototype.pause = function() {
+202   minplayer.players.base.prototype.pause.call(this);
+203   if (this.isReady()) {
+204     this.player.api('pause');
+205   }
+206 };
+207 
+208 /**
+209  * @see minplayer.players.base#stop
+210  */
+211 minplayer.players.vimeo.prototype.stop = function() {
+212   minplayer.players.base.prototype.stop.call(this);
+213   if (this.isReady()) {
+214     this.player.api('unload');
+215   }
+216 };
+217 
+218 /**
+219  * @see minplayer.players.base#seek
+220  */
+221 minplayer.players.vimeo.prototype.seek = function(pos) {
+222   minplayer.players.base.prototype.seek.call(this, pos);
+223   if (this.isReady()) {
+224     this.player.api('seekTo', pos);
+225   }
+226 };
+227 
+228 /**
+229  * @see minplayer.players.base#setVolume
+230  */
+231 minplayer.players.vimeo.prototype.setVolume = function(vol) {
+232   minplayer.players.base.prototype.setVolume.call(this, vol);
+233   if (this.isReady()) {
+234     this.volume.set(vol);
+235     this.player.api('setVolume', vol);
+236   }
+237 };
+238 
+239 /**
+240  * @see minplayer.players.base#getVolume
+241  */
+242 minplayer.players.vimeo.prototype.getVolume = function(callback) {
+243   this.player.api('getVolume', function(vol) {
+244     callback(vol);
+245   });
+246 };
+247 
+248 /**
+249  * @see minplayer.players.base#getDuration.
+250  */
+251 minplayer.players.vimeo.prototype.getDuration = function(callback) {
+252   if (this.isReady()) {
+253     if (this.duration.value) {
+254       callback(this.duration.value);
+255     }
+256     else {
+257       this.player.api('getDuration', function(duration) {
+258         callback(duration);
+259       });
+260     }
+261   }
+262 };
+263 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.players.youtube.js.html b/minplayer/doc/symbols/src/src_minplayer.players.youtube.js.html new file mode 100644 index 00000000..aa599ebd --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.players.youtube.js.html @@ -0,0 +1,354 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** All the media player implementations */
+  5 minplayer.players = minplayer.players || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.players.base
+ 10  * @class The YouTube media player.
+ 11  *
+ 12  * @param {object} context The jQuery context.
+ 13  * @param {object} options This components options.
+ 14  * @param {object} queue The event queue to pass events around.
+ 15  */
+ 16 minplayer.players.youtube = function(context, options, queue) {
+ 17 
+ 18   /** The quality of the YouTube stream. */
+ 19   this.quality = 'default';
+ 20 
+ 21   // Derive from players base.
+ 22   minplayer.players.base.call(this, context, options, queue);
+ 23 };
+ 24 
+ 25 /** Derive from minplayer.players.base. */
+ 26 minplayer.players.youtube.prototype = new minplayer.players.base();
+ 27 
+ 28 /** Reset the constructor. */
+ 29 minplayer.players.youtube.prototype.constructor = minplayer.players.youtube;
+ 30 
+ 31 /**
+ 32  * @see minplayer.players.base#getPriority
+ 33  * @return {number} The priority of this media player.
+ 34  */
+ 35 minplayer.players.youtube.getPriority = function() {
+ 36   return 10;
+ 37 };
+ 38 
+ 39 /**
+ 40  * @see minplayer.players.base#canPlay
+ 41  * @return {boolean} If this player can play this media type.
+ 42  */
+ 43 minplayer.players.youtube.canPlay = function(file) {
+ 44 
+ 45   // Check for the mimetype for youtube.
+ 46   if (file.mimetype === 'video/youtube') {
+ 47     return true;
+ 48   }
+ 49 
+ 50   // If the path is a YouTube path, then return true.
+ 51   return (file.path.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i) === 0);
+ 52 };
+ 53 
+ 54 /**
+ 55  * Return the ID for a provided media file.
+ 56  *
+ 57  * @param {object} file A {@link minplayer.file} object.
+ 58  * @return {string} The ID for the provided media.
+ 59  */
+ 60 minplayer.players.youtube.getMediaId = function(file) {
+ 61   var regex = /^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i;
+ 62   if (file.path.search(regex) === 0) {
+ 63     return file.path.match(regex)[2];
+ 64   }
+ 65   else {
+ 66     return file.path;
+ 67   }
+ 68 };
+ 69 
+ 70 /**
+ 71  * Register this youtube player so that multiple players can be present
+ 72  * on the same page without event collision.
+ 73  */
+ 74 minplayer.players.youtube.prototype.register = function() {
+ 75 
+ 76   /**
+ 77    * Register the standard youtube api ready callback.
+ 78    */
+ 79   window.onYouTubePlayerAPIReady = function() {
+ 80 
+ 81     // Iterate over each media player.
+ 82     jQuery.each(minplayer.get(null, 'player'), function(id, player) {
+ 83 
+ 84       // Make sure this is the youtube player.
+ 85       if (player.currentPlayer == 'youtube') {
+ 86 
+ 87         // Create a new youtube player object for this instance only.
+ 88         var playerId = id + '-player';
+ 89 
+ 90         // Set this players media.
+ 91         player.media.player = new YT.Player(playerId, {
+ 92           events: {
+ 93             'onReady': function(event) {
+ 94               player.media.onReady(event);
+ 95             },
+ 96             'onStateChange': function(event) {
+ 97               player.media.onPlayerStateChange(event);
+ 98             },
+ 99             'onPlaybackQualityChange': function(newQuality) {
+100               player.media.onQualityChange(newQuality);
+101             },
+102             'onError': function(errorCode) {
+103               player.media.onError(errorCode);
+104             }
+105           }
+106         });
+107       }
+108     });
+109   }
+110 };
+111 
+112 /**
+113  * Translates the player state for the YouTube API player.
+114  *
+115  * @param {number} playerState The YouTube player state.
+116  */
+117 minplayer.players.youtube.prototype.setPlayerState = function(playerState) {
+118   switch (playerState) {
+119     case YT.PlayerState.CUED:
+120       break;
+121     case YT.PlayerState.BUFFERING:
+122       this.onWaiting();
+123       break;
+124     case YT.PlayerState.PAUSED:
+125       this.onPaused();
+126       break;
+127     case YT.PlayerState.PLAYING:
+128       this.onPlaying();
+129       break;
+130     case YT.PlayerState.ENDED:
+131       this.onComplete();
+132       break;
+133     default:
+134       break;
+135   }
+136 };
+137 
+138 /**
+139  * Called when an error occurs.
+140  *
+141  * @param {string} event The onReady event that was triggered.
+142  */
+143 minplayer.players.youtube.prototype.onReady = function(event) {
+144   minplayer.players.base.prototype.onReady.call(this);
+145   this.onLoaded();
+146 };
+147 
+148 /**
+149  * Checks to see if this player can be found.
+150  * @return {bool} TRUE - Player is found, FALSE - otherwise.
+151  */
+152 minplayer.players.youtube.prototype.playerFound = function() {
+153   var iframe = this.display.find('iframe#' + this.options.id + '-player');
+154   return (iframe.length > 0);
+155 };
+156 
+157 /**
+158  * Called when the player state changes.
+159  *
+160  * @param {object} event A JavaScript Event.
+161  */
+162 minplayer.players.youtube.prototype.onPlayerStateChange = function(event) {
+163   this.setPlayerState(event.data);
+164 };
+165 
+166 /**
+167  * Called when the player quality changes.
+168  *
+169  * @param {string} newQuality The new quality for the change.
+170  */
+171 minplayer.players.youtube.prototype.onQualityChange = function(newQuality) {
+172   this.quality = newQuality.data;
+173 };
+174 
+175 /**
+176  * Determines if the player should show the playloader.
+177  *
+178  * @return {bool} If this player implements its own playLoader.
+179  */
+180 minplayer.players.youtube.prototype.hasPlayLoader = function() {
+181   return true;
+182 };
+183 
+184 /**
+185  * @see minplayer.players.base#create
+186  * @return {object} The media player entity.
+187  */
+188 minplayer.players.youtube.prototype.create = function() {
+189   minplayer.players.base.prototype.create.call(this);
+190 
+191   // Insert the YouTube iframe API player.
+192   var tag = document.createElement('script');
+193   tag.src = 'http://www.youtube.com/player_api?enablejsapi=1';
+194   var firstScriptTag = document.getElementsByTagName('script')[0];
+195   firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
+196 
+197   // Now register this player.
+198   this.register();
+199 
+200   // Create the iframe for this player.
+201   var iframe = document.createElement('iframe');
+202   iframe.setAttribute('id', this.options.id + '-player');
+203   iframe.setAttribute('type', 'text/html');
+204   iframe.setAttribute('width', '100%');
+205   iframe.setAttribute('height', '100%');
+206   iframe.setAttribute('frameborder', '0');
+207 
+208   // Get the source.
+209   var src = 'http://www.youtube.com/embed/';
+210   src += this.mediaFile.id + '?';
+211 
+212   // Determine the origin of this script.
+213   var origin = location.protocol;
+214   origin += '//' + location.hostname;
+215   origin += (location.port && ':' + location.port);
+216 
+217   // Add the parameters to the src.
+218   src += jQuery.param({
+219     'wmode': 'opaque',
+220     'controls': 0,
+221     'enablejsapi': 1,
+222     'origin': origin,
+223     'autoplay': this.options.autoplay,
+224     'loop': this.options.loop
+225   });
+226 
+227   // Set the source of the iframe.
+228   iframe.setAttribute('src', src);
+229 
+230   // Return the player.
+231   return iframe;
+232 };
+233 
+234 /**
+235  * @see minplayer.players.base#load
+236  */
+237 minplayer.players.youtube.prototype.load = function(file) {
+238   minplayer.players.base.prototype.load.call(this, file);
+239   if (file && this.isReady()) {
+240     this.player.loadVideoById(file.id, 0, this.quality);
+241   }
+242 };
+243 
+244 /**
+245  * @see minplayer.players.base#play
+246  */
+247 minplayer.players.youtube.prototype.play = function() {
+248   minplayer.players.base.prototype.play.call(this);
+249   if (this.isReady()) {
+250     this.player.playVideo();
+251   }
+252 };
+253 
+254 /**
+255  * @see minplayer.players.base#pause
+256  */
+257 minplayer.players.youtube.prototype.pause = function() {
+258   minplayer.players.base.prototype.pause.call(this);
+259   if (this.isReady()) {
+260     this.player.pauseVideo();
+261   }
+262 };
+263 
+264 /**
+265  * @see minplayer.players.base#stop
+266  */
+267 minplayer.players.youtube.prototype.stop = function() {
+268   minplayer.players.base.prototype.stop.call(this);
+269   if (this.isReady()) {
+270     this.player.stopVideo();
+271   }
+272 };
+273 
+274 /**
+275  * @see minplayer.players.base#seek
+276  */
+277 minplayer.players.youtube.prototype.seek = function(pos) {
+278   minplayer.players.base.prototype.seek.call(this, pos);
+279   if (this.isReady()) {
+280     this.player.seekTo(pos, true);
+281   }
+282 };
+283 
+284 /**
+285  * @see minplayer.players.base#setVolume
+286  */
+287 minplayer.players.youtube.prototype.setVolume = function(vol) {
+288   minplayer.players.base.prototype.setVolume.call(this, vol);
+289   if (this.isReady()) {
+290     this.player.setVolume(vol * 100);
+291   }
+292 };
+293 
+294 /**
+295  * @see minplayer.players.base#getVolume
+296  */
+297 minplayer.players.youtube.prototype.getVolume = function(callback) {
+298   if (this.isReady()) {
+299     callback(this.player.getVolume());
+300   }
+301 };
+302 
+303 /**
+304  * @see minplayer.players.base#getDuration.
+305  */
+306 minplayer.players.youtube.prototype.getDuration = function(callback) {
+307   if (this.isReady()) {
+308     callback(this.player.getDuration());
+309   }
+310 };
+311 
+312 /**
+313  * @see minplayer.players.base#getCurrentTime
+314  */
+315 minplayer.players.youtube.prototype.getCurrentTime = function(callback) {
+316   if (this.isReady()) {
+317     callback(this.player.getCurrentTime());
+318   }
+319 };
+320 
+321 /**
+322  * @see minplayer.players.base#getBytesStart.
+323  */
+324 minplayer.players.youtube.prototype.getBytesStart = function(callback) {
+325   if (this.isReady()) {
+326     callback(this.player.getVideoStartBytes());
+327   }
+328 };
+329 
+330 /**
+331  * @see minplayer.players.base#getBytesLoaded.
+332  */
+333 minplayer.players.youtube.prototype.getBytesLoaded = function(callback) {
+334   if (this.isReady()) {
+335     callback(this.player.getVideoBytesLoaded());
+336   }
+337 };
+338 
+339 /**
+340  * @see minplayer.players.base#getBytesTotal.
+341  */
+342 minplayer.players.youtube.prototype.getBytesTotal = function(callback) {
+343   if (this.isReady()) {
+344     callback(this.player.getVideoBytesTotal());
+345   }
+346 };
+347 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.plugin.js.html b/minplayer/doc/symbols/src/src_minplayer.plugin.js.html new file mode 100644 index 00000000..3f7d5d12 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.plugin.js.html @@ -0,0 +1,557 @@ +
  1 /** The minplayer namespace. */
+  2 minplayer = minplayer || {};
+  3 
+  4 /** Static array to keep track of all plugins. */
+  5 minplayer.plugins = minplayer.plugins || {};
+  6 
+  7 /** Static array to keep track of queues. */
+  8 minplayer.queue = minplayer.queue || [];
+  9 
+ 10 /** Mutex lock to keep multiple triggers from occuring. */
+ 11 minplayer.lock = false;
+ 12 
+ 13 /**
+ 14  * @constructor
+ 15  * @class The base class for all plugins.
+ 16  *
+ 17  * @param {string} name The name of this plugin.
+ 18  * @param {object} context The jQuery context.
+ 19  * @param {object} options This components options.
+ 20  * @param {object} queue The event queue to pass events around.
+ 21  */
+ 22 minplayer.plugin = function(name, context, options, queue) {
+ 23 
+ 24   /** The name of this plugin. */
+ 25   this.name = name;
+ 26 
+ 27   /** The ready flag. */
+ 28   this.pluginReady = false;
+ 29 
+ 30   /** The options for this plugin. */
+ 31   this.options = options || {};
+ 32 
+ 33   /** The event queue. */
+ 34   this.queue = queue || {};
+ 35 
+ 36   /** Keep track of already triggered events. */
+ 37   this.triggered = {};
+ 38 
+ 39   /** Create a queue lock. */
+ 40   this.lock = false;
+ 41 
+ 42   // Only call the constructor if we have a context.
+ 43   if (context) {
+ 44 
+ 45     /** Keep track of the context. */
+ 46     this.context = context;
+ 47 
+ 48     // Construct this plugin.
+ 49     this.construct();
+ 50   }
+ 51 };
+ 52 
+ 53 /**
+ 54  * The constructor which is called once the context is set.
+ 55  * Any class deriving from the plugin class should place all context
+ 56  * dependant functionality within this function instead of the standard
+ 57  * constructor function since it is called on object derivation as well
+ 58  * as object creation.
+ 59  */
+ 60 minplayer.plugin.prototype.construct = function() {
+ 61 
+ 62   // Adds this as a plugin.
+ 63   this.addPlugin();
+ 64 };
+ 65 
+ 66 /**
+ 67  * Destructor.
+ 68  */
+ 69 minplayer.plugin.prototype.destroy = function() {
+ 70 
+ 71   // Unbind all events.
+ 72   this.unbind();
+ 73 };
+ 74 
+ 75 /**
+ 76  * Creates a new plugin within this context.
+ 77  *
+ 78  * @param {string} name The name of the plugin you wish to create.
+ 79  * @param {object} base The base object for this plugin.
+ 80  * @param {object} context The context which you would like to create.
+ 81  * @return {object} The new plugin object.
+ 82  */
+ 83 minplayer.plugin.prototype.create = function(name, base, context) {
+ 84   var plugin = null;
+ 85 
+ 86   // Make sure we have a base object.
+ 87   base = base || 'minplayer';
+ 88 
+ 89   // Make sure there is a context.
+ 90   context = context || this.display;
+ 91 
+ 92   // See if this plugin exists within this object.
+ 93   if (window[base][name]) {
+ 94 
+ 95     // Set the plugin.
+ 96     plugin = window[base][name];
+ 97 
+ 98     // See if a template version of the plugin exists.
+ 99     if (plugin[this.options.template]) {
+100 
+101       plugin = plugin[this.options.template];
+102     }
+103 
+104     // Create the new plugin.
+105     return new plugin(context, this.options);
+106   }
+107 
+108   return null;
+109 };
+110 
+111 /**
+112  * Plugins should call this method when they are ready.
+113  */
+114 minplayer.plugin.prototype.ready = function() {
+115 
+116   // Keep this plugin from triggering multiple ready events.
+117   if (!this.pluginReady) {
+118 
+119     // Set the ready flag.
+120     this.pluginReady = true;
+121 
+122     // Now trigger that I am ready.
+123     this.trigger('ready');
+124 
+125     // Check the queue.
+126     this.checkQueue();
+127   }
+128 };
+129 
+130 /**
+131  * Adds a new plugin to this player.
+132  *
+133  * @param {string} name The name of this plugin.
+134  * @param {object} plugin A new plugin object, derived from media.plugin.
+135  */
+136 minplayer.plugin.prototype.addPlugin = function(name, plugin) {
+137   name = name || this.name;
+138   plugin = plugin || this;
+139 
+140   // Make sure the plugin is valid.
+141   if (plugin.isValid()) {
+142 
+143     // If the plugins for this instance do not exist.
+144     if (!minplayer.plugins[this.options.id]) {
+145 
+146       // Initialize the plugins.
+147       minplayer.plugins[this.options.id] = {};
+148     }
+149 
+150     // Add this plugin.
+151     minplayer.plugins[this.options.id][name] = plugin;
+152   }
+153 };
+154 
+155 /**
+156  * Create a polling timer.
+157  *
+158  * @param {function} callback The function to call when you poll.
+159  * @param {integer} interval The interval you would like to poll.
+160  */
+161 minplayer.plugin.prototype.poll = function(callback, interval) {
+162   setTimeout((function(context) {
+163     return function callLater() {
+164       if (callback.call(context)) {
+165         setTimeout(callLater, interval);
+166       }
+167     };
+168   })(this), interval);
+169 };
+170 
+171 /**
+172  * Gets a plugin by name and calls callback when it is ready.
+173  *
+174  * @param {string} plugin The plugin of the plugin.
+175  * @param {function} callback Called when the plugin is ready.
+176  * @return {object} The plugin if no callback is provided.
+177  */
+178 minplayer.plugin.prototype.get = function(plugin, callback) {
+179 
+180   // If they pass just a callback, then return all plugins when ready.
+181   if (typeof plugin === 'function') {
+182     callback = plugin;
+183     plugin = null;
+184   }
+185 
+186   // Return the minplayer.get equivalent.
+187   return minplayer.get.call(this, this.options.id, plugin, callback);
+188 };
+189 
+190 /**
+191  * Check the queue and execute it.
+192  */
+193 minplayer.plugin.prototype.checkQueue = function() {
+194 
+195   // Initialize our variables.
+196   var q = null, i = 0, check = false, newqueue = [];
+197 
+198   // Set the lock.
+199   minplayer.lock = true;
+200 
+201   // Iterate through all the queues.
+202   var length = minplayer.queue.length;
+203   for (i = 0; i < length; i++) {
+204 
+205     // Get the queue.
+206     q = minplayer.queue[i];
+207 
+208     // Now check to see if this queue is about us.
+209     check = !q.id && !q.plugin;
+210     check |= (q.plugin == this.name) && (!q.id || (q.id == this.options.id));
+211 
+212     // If the check passes...
+213     if (check) {
+214       check = minplayer.bind.call(
+215         q.context,
+216         q.event,
+217         this.options.id,
+218         this.name,
+219         q.callback
+220       );
+221     }
+222 
+223     // Add the queue back if it doesn't check out.
+224     if (!check) {
+225 
+226       // Add this back to the queue.
+227       newqueue.push(q);
+228     }
+229   }
+230 
+231   // Set the old queue to the new queue.
+232   minplayer.queue = newqueue;
+233 
+234   // Release the lock.
+235   minplayer.lock = false;
+236 };
+237 
+238 /**
+239  * Trigger a media event.
+240  *
+241  * @param {string} type The event type.
+242  * @param {object} data The event data object.
+243  * @return {object} The plugin object.
+244  */
+245 minplayer.plugin.prototype.trigger = function(type, data) {
+246   data = data || {};
+247   data.plugin = this;
+248 
+249   // Add this to our triggered array.
+250   this.triggered[type] = data;
+251 
+252   // Check to make sure the queue for this type exists.
+253   if (this.queue.hasOwnProperty(type)) {
+254 
+255     var i = 0, queue = {};
+256 
+257     // Iterate through all the callbacks in this queue.
+258     for (i in this.queue[type]) {
+259 
+260       // Setup the event object, and call the callback.
+261       queue = this.queue[type][i];
+262       queue.callback({target: this, data: queue.data}, data);
+263     }
+264   }
+265 
+266   // Return the plugin object.
+267   return this;
+268 };
+269 
+270 /**
+271  * Bind to a media event.
+272  *
+273  * @param {string} type The event type.
+274  * @param {object} data The data to bind with the event.
+275  * @param {function} fn The callback function.
+276  * @return {object} The plugin object.
+277  **/
+278 minplayer.plugin.prototype.bind = function(type, data, fn) {
+279 
+280   // Allow the data to be the callback.
+281   if (typeof data === 'function') {
+282     fn = data;
+283     data = null;
+284   }
+285 
+286   // You must bind to a specific event and have a callback.
+287   if (!type || !fn) {
+288     return;
+289   }
+290 
+291   // Initialize the queue for this type.
+292   this.queue[type] = this.queue[type] || [];
+293 
+294   // Unbind any existing equivalent events.
+295   this.unbind(type, fn);
+296 
+297   // Now add this event to the queue.
+298   this.queue[type].push({
+299     callback: fn,
+300     data: data
+301   });
+302 
+303   // Now see if this event has already been triggered.
+304   if (this.triggered[type]) {
+305 
+306     // Go ahead and trigger the event.
+307     fn({target: this, data: data}, this.triggered[type]);
+308   }
+309 
+310   // Return the plugin.
+311   return this;
+312 };
+313 
+314 /**
+315  * Unbind a media event.
+316  *
+317  * @param {string} type The event type.
+318  * @param {function} fn The callback function.
+319  * @return {object} The plugin object.
+320  **/
+321 minplayer.plugin.prototype.unbind = function(type, fn) {
+322 
+323   // If this is locked then try again after 10ms.
+324   if (this.lock) {
+325     setTimeout((function(plugin) {
+326       return function() {
+327         plugin.unbind(type, fn);
+328       };
+329     })(this), 10);
+330   }
+331 
+332   // Set the lock.
+333   this.lock = true;
+334 
+335   if (!type) {
+336     this.queue = {};
+337   }
+338   else if (!fn) {
+339     this.queue[type] = [];
+340   }
+341   else {
+342     // Iterate through all the callbacks and search for equal callbacks.
+343     var i = 0, queue = {};
+344     for (i in this.queue[type]) {
+345       if (this.queue[type][i].callback === fn) {
+346         queue = this.queue[type].splice(1, 1);
+347         delete queue;
+348       }
+349     }
+350   }
+351 
+352   // Reset the lock.
+353   this.lock = false;
+354 
+355   // Return the plugin.
+356   return this;
+357 };
+358 
+359 /**
+360  * Adds an item to the queue.
+361  *
+362  * @param {object} context The context which this is called within.
+363  * @param {string} event The event to trigger on.
+364  * @param {string} id The player ID.
+365  * @param {string} plugin The name of the plugin.
+366  * @param {function} callback Called when the event occurs.
+367  */
+368 minplayer.addQueue = function(context, event, id, plugin, callback) {
+369 
+370   // See if it is locked...
+371   if (!minplayer.lock) {
+372     minplayer.queue.push({
+373       context: context,
+374       id: id,
+375       event: event,
+376       plugin: plugin,
+377       callback: callback
+378     });
+379   }
+380   else {
+381 
+382     // If so, then try again after 10 milliseconds.
+383     setTimeout(function() {
+384       minplayer.addQueue(context, id, event, plugin, callback);
+385     }, 10);
+386   }
+387 };
+388 
+389 /**
+390  * Binds an event to a plugin instance, and if it doesn't exist, then caches
+391  * it for a later time.
+392  *
+393  * @param {string} event The event to trigger on.
+394  * @param {string} id The player ID.
+395  * @param {string} plugin The name of the plugin.
+396  * @param {function} callback Called when the event occurs.
+397  * @return {boolean} If the bind was successful.
+398  * @this The object in context who called this method.
+399  */
+400 minplayer.bind = function(event, id, plugin, callback) {
+401 
+402   // If no callback exists, then just return false.
+403   if (!callback) {
+404     return false;
+405   }
+406 
+407   // Get the plugins.
+408   var inst = minplayer.plugins;
+409 
+410   // See if this plugin exists.
+411   if (inst[id][plugin]) {
+412 
+413     // If so, then bind the event to this plugin.
+414     inst[id][plugin].bind(event, {context: this}, function(event, data) {
+415       callback.call(event.data.context, data.plugin);
+416     });
+417     return true;
+418   }
+419 
+420   // If not, then add it to the queue to bind later.
+421   minplayer.addQueue(this, event, id, plugin, callback);
+422 
+423   // Return that this wasn't handled.
+424   return false;
+425 };
+426 
+427 /**
+428  * The main API for minPlayer.
+429  *
+430  * Provided that this function takes three parameters, there are 8 different
+431  * ways to use this api.
+432  *
+433  *   id (0x100) - You want a specific player.
+434  *   plugin (0x010) - You want a specific plugin.
+435  *   callback (0x001) - You only want it when it is ready.
+436  *
+437  *   000 - You want all plugins from all players, ready or not.
+438  *
+439  *          var plugins = minplayer.get();
+440  *
+441  *   001 - You want all plugins from all players, but only when ready.
+442  *
+443  *          minplayer.get(function(plugin) {
+444  *            // Code goes here.
+445  *          });
+446  *
+447  *   010 - You want a specific plugin from all players, ready or not...
+448  *
+449  *          var medias = minplayer.get(null, 'media');
+450  *
+451  *   011 - You want a specific plugin from all players, but only when ready.
+452  *
+453  *          minplayer.get('player', function(player) {
+454  *            // Code goes here.
+455  *          });
+456  *
+457  *   100 - You want all plugins from a specific player, ready or not.
+458  *
+459  *          var plugins = minplayer.get('player_id');
+460  *
+461  *   101 - You want all plugins from a specific player, but only when ready.
+462  *
+463  *          minplayer.get('player_id', null, function(plugin) {
+464  *            // Code goes here.
+465  *          });
+466  *
+467  *   110 - You want a specific plugin from a specific player, ready or not.
+468  *
+469  *          var plugin = minplayer.get('player_id', 'media');
+470  *
+471  *   111 - You want a specific plugin from a specific player, only when ready.
+472  *
+473  *          minplayer.get('player_id', 'media', function(media) {
+474  *            // Code goes here.
+475  *          });
+476  *
+477  * @this The context in which this function was called.
+478  * @param {string} id The ID of the widget to get the plugins from.
+479  * @param {string} plugin The name of the plugin.
+480  * @param {function} callback Called when the plugin is ready.
+481  * @return {object} The plugin object if it is immediately available.
+482  */
+483 minplayer.get = function(id, plugin, callback) {
+484 
+485   // Normalize the arguments for a better interface.
+486   if (typeof id === 'function') {
+487     callback = id;
+488     plugin = id = null;
+489   }
+490 
+491   if (typeof plugin === 'function') {
+492     callback = plugin;
+493     plugin = id;
+494     id = null;
+495   }
+496 
+497   // Make sure the callback is a callback.
+498   callback = (typeof callback === 'function') ? callback : null;
+499 
+500   // Get the plugins.
+501   var plugins = minplayer.plugins;
+502 
+503   // 0x000
+504   if (!id && !plugin && !callback) {
+505     return plugins;
+506   }
+507   // 0x100
+508   else if (id && !plugin && !callback) {
+509     return plugins[id];
+510   }
+511   // 0x110
+512   else if (id && plugin && !callback) {
+513     return plugins[id][plugin];
+514   }
+515   // 0x111
+516   else if (id && plugin && callback) {
+517     minplayer.bind.call(this, 'ready', id, plugin, callback);
+518   }
+519   // 0x011
+520   else if (!id && plugin && callback) {
+521     for (var id in plugins) {
+522       minplayer.bind.call(this, 'ready', id, plugin, callback);
+523     }
+524   }
+525   // 0x101
+526   else if (id && !plugin && callback) {
+527     for (var plugin in plugins[id]) {
+528       minplayer.bind.call(this, 'ready', id, plugin, callback);
+529     }
+530   }
+531   // 0x010
+532   else if (!id && plugin && !callback) {
+533     var plugin_types = {};
+534     for (var id in plugins) {
+535       if (plugins.hasOwnProperty(id) && plugins[id].hasOwnProperty(plugin)) {
+536         plugin_types[id] = plugins[id][plugin];
+537       }
+538     }
+539     return plugin_types;
+540   }
+541   // 0x001
+542   else {
+543     for (var id in plugins) {
+544       for (var plugin in plugins[id]) {
+545         minplayer.bind.call(this, 'ready', id, plugin, callback);
+546       }
+547     }
+548   }
+549 };
+550 
\ No newline at end of file diff --git a/minplayer/doc/symbols/src/src_minplayer.templates.base.js.html b/minplayer/doc/symbols/src/src_minplayer.templates.base.js.html new file mode 100644 index 00000000..e4bdb5c8 --- /dev/null +++ b/minplayer/doc/symbols/src/src_minplayer.templates.base.js.html @@ -0,0 +1,66 @@ +
  1 /** The minplayer namespace. */
+  2 var minplayer = minplayer || {};
+  3 
+  4 /** All of the template implementations */
+  5 minplayer.templates = minplayer.templates || {};
+  6 
+  7 /**
+  8  * @constructor
+  9  * @extends minplayer.display
+ 10  * @class The base template class which all templates should derive.
+ 11  *
+ 12  * @param {object} context The jQuery context.
+ 13  * @param {object} options This components options.
+ 14  */
+ 15 minplayer.templates.base = function(context, options) {
+ 16 
+ 17   // Derive from display
+ 18   minplayer.display.call(this, 'template', context, options);
+ 19 };
+ 20 
+ 21 /** Derive from minplayer.display. */
+ 22 minplayer.templates.base.prototype = new minplayer.display();
+ 23 
+ 24 /** Reset the constructor. */
+ 25 minplayer.templates.base.prototype.constructor = minplayer.templates.base;
+ 26 
+ 27 /**
+ 28  * @see minplayer.plugin#construct
+ 29  */
+ 30 minplayer.templates.base.prototype.construct = function() {
+ 31 
+ 32   // Call the minplayer display constructor.
+ 33   minplayer.display.prototype.construct.call(this);
+ 34 
+ 35   // We are now ready.
+ 36   this.ready();
+ 37 };
+ 38 
+ 39 /**
+ 40  * @see minplayer.display#getElements
+ 41  * @return {object} The display elemnents for this component.
+ 42  */
+ 43 minplayer.templates.base.prototype.getElements = function() {
+ 44   var elements = minplayer.display.prototype.getElements.call(this);
+ 45   return jQuery.extend(elements, {
+ 46     player: null,
+ 47     display: null,
+ 48     media: null
+ 49   });
+ 50 };
+ 51 
+ 52 /**
+ 53  * Called when the media player goes into full screen mode.
+ 54  *
+ 55  * @param {boolean} full TRUE - The player is in fullscreen, FALSE otherwise.
+ 56  */
+ 57 minplayer.templates.base.prototype.onFullScreen = function(full) {
+ 58 };
+ 59 
\ No newline at end of file diff --git a/minplayer/README.txt b/minplayer/flash/README.txt similarity index 95% rename from minplayer/README.txt rename to minplayer/flash/README.txt index 944acc3c..e3515881 100755 --- a/minplayer/README.txt +++ b/minplayer/flash/README.txt @@ -1,6 +1,6 @@ The minplayer is a GPLv3, minimalistic, skinable, plugin based Flash media player. -In addition to being a minimal Flash player, it was built with a solid API so that any +In addition to being a minimal Flash player, it was built with a solid API so that any JavaScript widget can communicate to this player easily and effectively controlling it from outside sources. diff --git a/minplayer/config/config.xml b/minplayer/flash/config/config.xml similarity index 100% rename from minplayer/config/config.xml rename to minplayer/flash/config/config.xml diff --git a/minplayer/config/nocontrols.xml b/minplayer/flash/config/nocontrols.xml similarity index 100% rename from minplayer/config/nocontrols.xml rename to minplayer/flash/config/nocontrols.xml diff --git a/minplayer/minplayer.swf b/minplayer/flash/minplayer.swf similarity index 100% rename from minplayer/minplayer.swf rename to minplayer/flash/minplayer.swf diff --git a/minplayer/flash/skins/default/controlBar.swf b/minplayer/flash/skins/default/controlBar.swf new file mode 100644 index 0000000000000000000000000000000000000000..95e2653b63bfe847e9f4cbfda5124e30fdb15e7f GIT binary patch literal 13678 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 literal 0 HcmV?d00001 diff --git a/minplayer/flash/skins/default/playLoader.swf b/minplayer/flash/skins/default/playLoader.swf new file mode 100644 index 0000000000000000000000000000000000000000..521c405e9a4532b283c777b5a7a15f6d096ffe00 GIT binary patch literal 2723 zcmV;U3S9L=S5pdM8UO%zoUND(bQ4t?fM@cWJo==~v`q`753mT$lNJ)%LTN}Tn60IC zkwunHGm~^A$%L6nn+ht5C@el!9x5wOaXH|+96VK5g%uRsg7);`@u(oKVBPIGyY0aq zI28o#-kGFL3SokF)8wCf|NGzn|L41ZZ*nIHNmoKp@?Hqaf+1UKCImr`rb(m_R7&G6 z>k^w?8}xd7j1~0C@|sxIZ`JEtT3U21W*tSl^+t=uqBofICQ}ixC}LWDEEX*CG5LAr zTHb?=V4O7RXGzMZ<@#776=2Kq^1^O|UjL|DAEU!?s*%t+DX%_=`SnJfLC^UCM%GH2 zz*vf|rzlT(1!twTdoZR+TUj?#doNA72!;V6Fi)xeX6vZ=gbjSkO$MW($Y3fm7S|hR zTTL^q#j}bGC02tWYHr9fG}S?{7>==6)MRs!(Nu4=SWPA?a1=FpjBR*2g_EwEPZ7T<}btH*fjYgZfqGV=;VYbOo zGTUgh%&I816x-%k7F!lrY<63z{+6jD-f+qp;2?*+;lIFJ)YK7g6ivEGP|vns?=^-C zEnjG3IYrpr8mhunY+qn1HX1CUP_ykNCcDXAQBq;D&z@zj7i=79&Q|PCgE?(|g)_Y^M89tePvzXHZ$^a9`v8+#jDg>RZ;|F_;j% zWZpA)Zt=uj^F}A)mtTicYSQUuL-DTNsQ~ZmLU_s8cn1aX%H!dcjI(;L z307~l0NxF;@$M7E`>_Dt=5gU|jfppqDu`DR53lqVyqY^^%;Eh}5U)c3@21#z_Y30v zKmczr9^PX@cz49cTPuiH6c4X#oYnjP#yf3&*G%_|&0P=lo$CEr_0lJ=u9a;YG%Y_qyQTTO)vXb8Ng%2;w~{fR~Ji_mmLc zL$QB37zOdhtzP+f@d{RNtpMIC*Z)>!iDzx^x4(-|gDeej~&9;=-Ypt*ex!?!wwV&#Lv% zzJ6PE%Qq{uOQ#H-Jhe$OVaeL`jP#kzc%1Fy1M7OxU+froRhomfrb?UaEwzy>Clrh84QkZ&^++BK_-U5 zS!1**jx;5arZm!&MVd&YDUUQ2k*1PwatFo|AQPYnvbD0$C15o8{Q%s>Z(Ht|32 zoXGuZ*8AJ5)~=j;<-Yc|x@n8o0zTYP2}0F_fh4E_GC|OvH^QM9DT$lsLFJpF-6tTZ(6aoA3sTWKxO;EfK>!4q z@yDHT!x3n*9K_)23%-}Xq!yEfkKgFIxTtTna%qt#oJevg5fKOxPDITmA_fCFTh1Q5 z;P+sy^8+kP`M^*rHzWhhbN+Jn@&ylt;RFpGPk&9you0uf1=4XB3nXc#NL==tfVYvL zRXD~ptqd6_@(-cFDWBo|DjZZZNmP1Be-hWdhc{UXOcERz>8mHbgopGI*<;77(PK)| zN3ta5As-@Sp$G}l^puh8<&0wEqDl`;eNe`12N(XZ~xyPT4q=#f%N0<@JDwgt(Buvv3%_N08L6Dda^Moy3 zz%4;D%23ZuP+nE2=_POyQ-s<+f(_3G$@)MV?$Is<9E>g%gL(a+7Y@s`GA!W@duBo0 z)JRiD_}t+3t5y5EhJ8#>PE)tkEs2lr7*SCwlp< zH!Z)CU%;g#&NfL~IH}?l3klNQ#LAlZ3mk-7B@9@XBn-#xTxHeqPoAcrFe=TIph%`7 z13^=zV8@YXqFJa0%|>(3iRdJBGO9&$(L6LCEkLKBQ_;K7LUbB>w??6vu9=}J(&#jL zjX{$lhT(iUtdPi*s)R&Q5|W&fIw37xjb>zKX|i*q6DLj9=H}%W=>0f7?{I0=y@D zn+}#rU|0cxk5b%ir~>X`SgDeA8@j6@&;w?$;;wGPiiCzlLqn3GA=%K7VrWP;G)yow zNWlAkXkzHqBnIZU{;G{a9vLg>tG4 zUX|7DLc&%^#0m*pAtP2GlvE;Cs+RJhz}uzn*~7qGkd^Rfu=^oF+s$jpTZMbkzD|FyHqvVBA}OtSrO3fSivK#q`-V` d8n;P{z%CxOF$2xmZB`e(&GO$2{{vbxBLN>EO<@24 literal 0 HcmV?d00001 diff --git a/minplayer/index.html b/minplayer/index.html new file mode 100644 index 00000000..c5146343 --- /dev/null +++ b/minplayer/index.html @@ -0,0 +1,63 @@ + + + + minPlayer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

minPlayer

+

Below are some examples of the minPlayer in action. It is creating a common API to interact with all different types of players, including Vimeo and YouTube.

+

h264 Example

+
+ +
+

YouTube Example

+
+ +
+

Two YouTube Players on same page

+
+ +
+

Vimeo Example

+
+ +
+ + diff --git a/minplayer/makefile b/minplayer/makefile new file mode 100644 index 00000000..3e4036e0 --- /dev/null +++ b/minplayer/makefile @@ -0,0 +1,67 @@ +# To run this makefile, you must do the following. +# +# 1.) Download http://closure-compiler.googlecode.com/files/compiler-latest.zip +# and place compiler.jar within the tools directory. +# +# 2.) Install closure-linter tool at by following +# http://code.google.com/closure/utilities/docs/linter_howto.html +# +# 3.) Download the JSDoc toolkit found at +# http://code.google.com/p/jsdoc-toolkit and place the jsdoc-toolkit +# directory within the tools directory. + +# Create the list of files +files = src/minplayer.compatibility.js\ + src/minplayer.async.js\ + src/minplayer.flags.js\ + src/minplayer.plugin.js\ + src/minplayer.display.js\ + src/minplayer.js\ + src/minplayer.image.js\ + src/minplayer.file.js\ + src/minplayer.playLoader.js\ + src/minplayer.players.base.js\ + src/minplayer.players.html5.js\ + src/minplayer.players.flash.js\ + src/minplayer.players.minplayer.js\ + src/minplayer.players.youtube.js\ + src/minplayer.players.vimeo.js\ + src/minplayer.controller.js + +.DEFAULT_GOAL := all + +all: jslint js jsdoc + +# Perform a jsLint on all the files. +jslint: ${files} + gjslint $^ + +# Create an aggregated js file and a compressed js file. +js: ${files} + @echo "Generating aggregated bin/minplayer.js file" + @cat > bin/minplayer.js $^ + @echo "Generating compressed bin/minplayer.compressed file" + @java -jar tools/compiler.jar --js bin/minplayer.js --js_output_file bin/minplayer.compressed.js + +# Create the documentation from source code. +jsdoc: ${files} + @echo "Generating documetation." + @java -jar tools/jsdoc-toolkit/jsrun.jar tools/jsdoc-toolkit/app/run.js -a -t=tools/jsdoc-toolkit/templates/jsdoc -d=doc $^ + +# Fix the js style on all the files. +fixjsstyle: ${files} + fixjsstyle $^ + +# Install the necessary tools. +tools: + apt-get install python-setuptools + apt-get install unzip + wget http://closure-compiler.googlecode.com/files/compiler-latest.zip -P tools + unzip tools/compiler-latest.zip -d tools + rm tools/compiler-latest.zip tools/COPYING tools/README + easy_install http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz + wget http://jsdoc-toolkit.googlecode.com/files/jsdoc_toolkit-2.4.0.zip -P tools + unzip tools/jsdoc_toolkit-2.4.0.zip -d tools + mv tools/jsdoc_toolkit-2.4.0/jsdoc-toolkit tools/jsdoc-toolkit + rm -rd tools/jsdoc_toolkit-2.4.0 + rm tools/jsdoc_toolkit-2.4.0.zip diff --git a/minplayer/minplayer.fla b/minplayer/minplayer.fla deleted file mode 100755 index 23954bff3da714ebb5e2d8a322c76db17547a2ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73728 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 g!LPf!$8)FtKl8f7!E-+lu0dH+?2LJ#7 diff --git a/minplayer/skins/default/controlBar.as b/minplayer/skins/default/controlBar.as deleted file mode 100644 index 8371e3e1..00000000 --- a/minplayer/skins/default/controlBar.as +++ /dev/null @@ -1,168 +0,0 @@ -import fl.transitions.*; -import fl.transitions.easing.*; -import flash.external.ExternalInterface; - -var mouseOverVolume = false; -var mouseOverControls = false; - -var mouseTimer:Timer = new Timer( 4000, 1 ); -mouseTimer.stop(); -mouseTimer.addEventListener( TimerEvent.TIMER, onMouseTimer ); - -var volumeTimer:Timer = new Timer( 4000, 1 ); -volumeTimer.stop(); -volumeTimer.addEventListener( TimerEvent.TIMER, onVolumeTimer ); - -var controlTween = new Tween( this, "alpha", Strong.easeIn, this.alpha, 0, 8 ); -controlTween.stop(); - -var volumeTween = new Tween(volumeBar, "alpha", Strong.easeIn, volumeBar.alpha, 0, 8 ); -volumeTween.stop(); - -// The ControlBar object. -var controlBar = null; - -function initialize( _controlBar:* ) -{ - // Store the controlbar object. - controlBar = _controlBar; - - // Set the y position to the bottom of the player.. - this.y = (controlBar.stage.stageHeight - background.height - 10); - - // Hide the volume bar for now... - volumeBar.visible = false; - - // Set the full and normal screen buttons. - toggleFullScreen.normalScreen.visible = false; - toggleFullScreen.fullScreen.visible = true; - - // Add an event listner when the mouse is over the mute button. - mute.addEventListener( MouseEvent.MOUSE_OVER, onVolumeMuteOver ); - volumeBar.addEventListener( MouseEvent.MOUSE_OVER, onVolumeOver ); - volumeBar.addEventListener( MouseEvent.MOUSE_OUT, onVolumeOut ); - - controlBar.stage.addEventListener( MouseEvent.MOUSE_MOVE, onMove ); - this.addEventListener( MouseEvent.MOUSE_OVER, onControlOver ); - this.addEventListener( MouseEvent.MOUSE_OUT, onControlOut ); - mouseTimer.reset(); - mouseTimer.start(); - - // Set the size. - setSize( controlBar.stage.stageWidth ); -} - -function onVolumeOver( event:MouseEvent ) { mouseOverVolume = true; } -function onVolumeOut( event:MouseEvent ) { mouseOverVolume = false; } -function onControlOver( event:MouseEvent ) { mouseOverControls = true; } -function onControlOut( event:MouseEvent ) { mouseOverControls = false; } -function onVolumeMuteOver( event:MouseEvent ) { showVolume(); } -function onMove( event:MouseEvent ) { showControls(); } - -function onMouseTimer( event:TimerEvent ) -{ - if(!mouseOverControls && !mouseOverVolume) { - controlTween.begin = this.alpha; - controlTween.finish = 0; - controlTween.start(); - } - else { - mouseTimer.reset(); - mouseTimer.start(); - } -} - -function onVolumeTimer( event:TimerEvent ) -{ - if(!mouseOverVolume) { - volumeTween.begin = volumeBar.alpha; - volumeTween.finish = 0; - volumeTween.start(); - } - else { - volumeTimer.reset(); - volumeTimer.start(); - } -} - -function showControls() -{ - controlTween.stop(); - this.visible = true; - this.alpha = 1; - mouseTimer.reset(); - mouseTimer.start(); -} - -function showVolume() -{ - volumeTween.stop(); - volumeBar.visible = true; - volumeBar.alpha = 1; - volumeTimer.reset(); - volumeTimer.start(); -} - -function onResize( deltaX:Number, deltaY:Number ) -{ - this.y = this.y + deltaY; - setFullScreenState(); - setSize( controlBar.stage.stageWidth ); - showControls(); -} - -function setFullScreenState() -{ - if( controlBar.stage.displayState == StageDisplayState.FULL_SCREEN ) { - toggleFullScreen.normalScreen.visible = true; - toggleFullScreen.fullScreen.visible = false; - } - else { - toggleFullScreen.normalScreen.visible = false; - toggleFullScreen.fullScreen.visible = true; - } -} - -function setSize( newWidth:Number ) -{ - var bgWidth = background.width; - toggleFullScreen.x = newWidth - (bgWidth - toggleFullScreen.x); - mute.x = newWidth - (bgWidth - mute.x); - duration.x = newWidth - (bgWidth - duration.x); - volumeBar.x = newWidth - (bgWidth - volumeBar.x); - seekBar.track.width = newWidth - (bgWidth - seekBar.track.width); - seekBar.fullness.width = newWidth - (bgWidth - seekBar.fullness.width); - seekBar.progress.width = newWidth - (bgWidth - seekBar.progress.width); - if( controlBar.seekBar && controlBar.seekBar.track ) { - controlBar.seekBar.track.width = seekBar.track.width; - } - if( controlBar.seekBar && controlBar.seekBar.fullness ) { - controlBar.seekBar.fullness.width = seekBar.fullness.width; - } - background.width = newWidth; -} - -function formatTime(mediaTime:Number) : Object -{ - var seconds:Number = 0; - var minutes:Number = 0; - var hour:Number = 0; - - hour = Math.floor(mediaTime / 3600); - mediaTime -= (hour * 3600); - minutes = Math.floor( mediaTime / 60 ); - mediaTime -= (minutes * 60); - seconds = Math.floor(mediaTime % 60); - - var timeString:String = ""; - - if( hour ) { - timeString += String(hour); - timeString += ":"; - } - - timeString += (minutes >= 10) ? String(minutes) : ("0" + String(minutes)); - timeString += ":"; - timeString += (seconds >= 10) ? String(seconds) : ("0" + String(seconds)); - return {time:timeString, units:""}; -} \ No newline at end of file diff --git a/minplayer/skins/default/controlBar.fla b/minplayer/skins/default/controlBar.fla deleted file mode 100644 index 5262824c6e3b1000691902c032657d6411339734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2148864 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 z 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

f4fu?E;e> z#~JKtpz3X>dDNj^f^Q9HbE|FR zX3VJwtUkBv;$wNf-ciP;v4yo-m>DmNeOAe^OHCvH88zcomhCof+t{p*)$m~tGCJSZ zduUU2tImlsW5X&h6khGCzhI~7Jm;OpcbqM%UQjq##Y4HpP-oNFGNr?9^!(4J&Gd8J z*X!nYw~mcnuy>rXk=F3k*awN#d(=BVx2s&aOy!(|>0L9Nx-W8>w!pmj_1m)!Y55l{ zqRR5)tX}5nCMTu5%qm=#KKh`!R+Sko7vM}^h=H0KQ^DQDi4@6)#(J+<14HwMj%+Pa4y?J+rL>EU)K z&FwE~nQ3YTYONUJ*?o$)<1_n!Lwkq08ay9!F2C}{d#jG?-CGqlN$ZTiYEghm;a&Z^ zZ(KGXRoXLgWvG{n6<;m zY5A+2cCt&iDxENmy;=FZyy<-H3YYZKGUvo=we~tJRJ5*KIAVfp*2bC#78JU-&~odj zxK(3;UzzqmopmX(w-tX>ZsB8GE}NuPd^OtqXzSn;O?+-vI&o>i#hWtEl`31yq}7b- z@UW>;*)XN#$Oio;_-eTo1ozb1cf0lLp?QVZvK+mhH5|C?K%;oapRn;U(TG=lYuHrLUydQy?iVE z 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

hL) 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¬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�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%0D4$)t3SP{S7B{k*dpAV()5e^K z*y#o?7cPH6mz%FY@gaQC{2SEYsuO|9{AsQ`gASJ5N49;cY_Z2}9#1QR_w?`GSX^}V zW-}5aThTuUh`o=@K-$r>c4Y0@^(&HE=Xj8o8kf?CJG9&`t611L#8#Zt=q;#F(sm0s zFcNngL4weZf5lSL`*J?(c@S~COJjsNACei|jXebQI>s0lVKn?1p5N_0G9+>}A{ajw)sqh_Q3A*&qy0EC6lbW_~K0Q?GTH4VbnuV@>EbNkES*W{>`(8U7p0$E#?B znV7J@e8u7n>szi3df*AUUFQfqx6`53QO<0M@ro#uxyU*uydsM}u?)+iB#&2|BI0T6 zqz!V$r7S+3&J+AbDCJ9jv2?{;?&grJkpwz!|Xe*t~u$ddtlUxLJhm z5&i_H1@7X12=VE6|LL^lw;f;u%uW%xKD&ftLc&lT-A%Chj;}@ak10|?Y_H|o zV+pqmG^m6gHmI~m+p|Gi9=!7GTP>F9>&bs=wum(>bXJwLXn$IfK;4VhlRsU4{$+E^8fC_PE~UKCpGf|wc6R=h?CnF&<>P&qEvxBT&4qsxvtA!h&+gXSANFu@tE>qA}Rz?XC+wpl1Ik*$Lfp0)@ zYHHWn7Fd~d?MXfsk})5$!gImb#|aOWnBqxZM47t3HKk-DXcp6p7#HXkR7FB34d) zQXA}ix~d%H9U@s7C7=KGZJOmvf}-Ce1rDGW(=R&mUjNrA<7<*}y*tVV7s3zm&zoLB zG1b~A$p$!-PW04C#d<5_cVQ{!|Ml8a>(sXDRJW?LaJQ1Lbg{Y1Xw_-M?{ESwv^*1w zj_%a_mH_3If66Avg+$=J&tIeGdNJL_3XdnwVTpz=W2s1Bt{};&= zMZK6Nyb$L&A(^n5=p4r<^yxEO@BzlYXFD1jIWtI^D)6cncRu0MoeRI$B>vT4c*kTg zw@&DERQ1uk@NEL>pQ-}kUF2bz+kaNAngu<*E4s?AIBBV!;U;^W_te)z(rBYPt}Rw) zfm4N=_HltHd*=s|s;JKyFKy>(^_m7DCuHgZ2%XPU8Aqo>j{OzRwbpb$5}&%rQuF_i ziBK*a{FnM>edTHWjx;a+Iw?YBX;%-})}a~3WvEI&)D*QwTdVSMaiX~ys3f$Ps6!=D$NJ-o=3 zS#Yh%CvG9t@$v^SIoxKP;bPc?Z;)SSeV8jsNH4vRr5;5MWd@$hqAH}u|NJPaqtTOv zO=;`>$I@CMBce^$wO&0T&QWWM`XZ^KXLYc{&6cLv=~e{OJ6Hg*!gSfVUx8kmTfcfC zLPkvzlKcMr?Bgx-Pu0TP9h=^Z{Q0xY8im*QwtwWQ)&G>gIN3!a2`*Pd=h>fot+mb; zXtN?>ofK6n4IK|XEWJw>-}p?9Nh%Q|lLc0cRk$o|T$Xii!`tL>-Y~ZMuwq44EpYCS zjZ1F>Ijqum;V@lPgz~XYF>>|E{rlRrLk;b@XlRF$zK7=zcUj{nLY6o4dkAB>N7R*t%?7uvC#S$=hOD_MZ>y(4wUf9G)!?7n}2 zCCReC%p7VyFmsL1Lr$^M#1qsW?18gfm_(5Ccb4dNIlM5ep~Mwr8%z#(NrojaY9=JE zX6-;&D6gg<^4YY!#;gBk4Tm%ffu5=(pRfb%FGZyi9cmR89z43TyByLt^uG7bhWmkd z`R9B$z0ibyzGRxbxn*F-J5BFOUE1;GUb%~ZczQ&O0_QKbljXUDsZ;XjS3LE|2}M^2 zbI;4wmH$)R@|!@@sfRx)z>@qL>{g=oM2K9K32)wk^B|{epap-*z#7^5!oBGVcCzmg zaosG;-ZVin1pb-qyhFJi1K@>dLV0j#b)TV-Cxt#TF#jkIFMLn>Jm`xEFzTyMjZ2ST0}b<>edh} znOYG^4^4%U*^^z-?PyJc_Yjm?;fb4P=xqoSgPsKq*_6S*uktH-i7-B91C~3D6Qh0; zFClxYFp$@b8^MqW9A+nr7s#%I9;EPc0*DhFOx8TRi&BqX=#%j?eHbqWX|AfxQoqd` zp_GI~ZOWbbfJOUF1S&lLty6=}NTBewJsLl9B+`qDZ7$OUL5moX7-$Cf)>naFu><$WQ?lPyV0(sInAIj3yHJZNt@vCp1Kff(S1$C6#y z@(TvNmg9%&n|>39J&lZ+28;?@rN+nW3GNFSBGuZ$4~t56)Y7mx_95bt#@2yB8u{6P z8cHC|ds%E&iOkH9Ai0xnp$hkyEcT+cFGzltY3+eqVM{`Dm&ne8NQ{-UT`>#YW`uc^ zDy{pBI_Iaeb$|S8>vt(!?Y-LPWMSW9eTF910(K#;5)bq3qqcx_T*|2Ti zvb%OdEF9OS9*yD_k{!BJ6OkmCmN$5pbdB8*R1IPXd3pZq z>CAO+lZ?VY+_*l_)@bd06gRIWB-e7?WzKfdx!=;h3pJQsC(uwPbwg+>4y8O^Kq0FC zUdNVhkG;N=@-`#>0tMYRqa2Y459R51g6{0#i`U0Ijx1dDG9$EJha8XkPb@1FRH&`SluXFKnDq#J>crQp*RP+_ti1(>Kf?d2c?KJx~8Sa^T%D+6cd~` zy^~iCccI!yec-+`Uq~{KS${@~GEWfgoN?vkkzJ%5MU{jP0UmCUIP+!B@6sSv{9BVQ z1`$E9CqNBhSwCp~n^r?Gv>NHLA2LWAuOmK3%>e2@;+l8(c*30JHUG=Okk32s{Zgy=LtV z5bo4p&=E&S$2pdJmh2>3q*vVjmC#C8uXSmADX_S;x}e_BvPg}g&67g1W=ttb|0wdm z7l@`&?7(UYHmI#Tm)8Kfb5>}COhnK%b6anec@Mt0I5aEEfY^)(+iwHXRe))b?R^Y| zBv$aHM9KtM>FhGaefS&%nh*5zw#~~$YZ15fuDC6LhUPfPIm`u02lLGR-B+mcWf@L4 zvyMjKN%Pa)&bdZeaXQ2h#L{0mhy=*Fe_9Mv`JR40Gy zV_4mbbM^1C(m(cAhzye!)O^LB2L=PyUE6opi~E}>*)0d@TBeVAA6Ra7_E+PzR&vHx zt}scI{gWw&r_#0GGhV(#3frujGQ{+MF`ZbheH*|p#@6JA|6bZiOJd-mr6wJ2eGr|V681M z6P^gZzKd46-Cv02LOU|?o}d;9GfuA!=-jz;i21I=OTdX5+_Ptg5{1lyF@)-`Gw2)^ z#^DRkwlfl&4S!9N*+YIQve{!r4sot=D<37K#sL}k7xi}1bCy0i3~l7-{Y6PN`KV?3 zC?!FJ0qVD&Aj<$OA~Q#S6iRr!Rl5(kKpA8Zx8D)p;3;JIdaJ zpRlCk%X{jp_&UEk>KpVgr!z-@KvbpRvTjJ1k}tPs6tBl*+xbyJs&b5UTi*-E6uG~i zVSr+;LRQCMa-a2@J+H7vSaU(nFw)_3YlovpxA{Fu`DKQPFEad= z6o=wDZ5g30PJ2%jf9{6G`^GVe%HR)0=;}D?{T~;jjUTBjYd%-*70y))L%(!J4t?#d zzc!6FYdc#2{~pfhk8E3LN`VAaR{%x}n9{EO4Zm{~H3ed|f+G2^@_nmEZA@53P0WT& zdeAysbegzLU~>K3vy9%lK7zaXVA3ZSed~x~)|G{2H^20w!R#0Ycn=WtS**ycw$)5w z`)aU)3xa9Y5&`avt;dh9o1}b?^+xQ|H;KBSoH_;X8Kh(r#l;QHmZL8bKH3c-hkkz| z1{}E1Ndke}I^Ti=7lOr!V#d)i3g{2_cCojibMn@FY4UUMuf0u zVsAKo&oU)H|GD*r74>E{QS8l$i_?UJYh+=?TxpD8&TuJq!DdmJU!ILAjV`w$22>7{ z#CJ)*6<*qe=jlY>U!VD0Iu9DRm3bNQ6h~6FOk!Cga@UW9f-Hq)?|&u8Dr{G0G{ZeW zzqzh9tMm?(@Mea@1SxPDP*1g^->9!eaDD~9g9`5hz9_D40JjJ9!lKy~3jl~O`7ww% zlxN#W*yOAzIn{Oc&EeY1KXZ~T)8VMr5~CeSR;TW>kjN0Nb0;k$sK?z=FVnH(BSr45 zt_vJ)JqGxDW{;#ws`$C8x+Ti+mfB;*aMF=%{IOtwn-R*yHr*>F%Y?A56N>QkyIX;M z3~VPVm7LX#uF9v#RKnuvxQVX~iBtIr))HndPfmSl-k1K;YR9ix!+AcX>XZ6E0$-lpx*_)b>e2?XPDU$B1>~? zEujl_B1Pg-F{?SU=eH*MlLk=R4)`m1|-zvb2OK`h&f-!$!dm zUWD^UywXSXjJ}Yjj!(rHfn+YzekT;9svigo_r&dNiu8tmVon8iG;CZbc3?wpNdDm- z{+7N#ow3a}_Ls3pb4e%}x#!+9ct4u$bu4l}y#sTi%4f{ud`xVS+w3eNTIZy=PRBUn z=1-Lr1&XE#bEVfDi59A2@aRR-x~{ZGz7^X^q?PWGmIkyb>4_1+$kr}MGa--H#vTuV z@ub^?-hAAJE?Umue&9LN7ltF;HY-49@9Gn#nvHDlg~kJHI5ZO0jzn^hA_BtWwqi!rm2Ke9lUEY z1V1`Lx^Jzhaed_RvP%?3N?w~-S##(4ptX>j?=e-+T1^(b!`6Es z<9lSpvI_BFIxeevprU zBRo3oTqXrp68dfiB$Awkt(+>=DjU=@!|u<_w20iJ2wb`igAED3n7sJZeg-D#mk_5| zZUebo8)CVuwpkf+RkX~Hx7?WmZ#e5qWO2_Z^L@)ZFVEu zqvLisGY*my3da&%u7F8yDwwd|*7g6PKIKi}ex?@gu}#ZZkEnjVeBzFg)o$Drm~M}w z(FtR+GIC_EiZzf}4HH-BX+6$_%;77wgWyi4`_c#@1kzcl7oEzE&B`7w8WGl3CO7_= z6o9uO5R5Izqt6z=;@i^tt3xL0L?IeAr#>Q?X1oLZR(4s>vN7e*R090@T6o-m!Q9!< z*s%Jo6M3?oFBj}exDC=@%Q>1tp(52OHMGaCPEOxb!(Lh2dZbcK3|##tx)ErQI(mG_ zY#J$r-<3zS&Zg%=iz5_SeZxC5U%8wOdZ|mgekaw277}=A_D#Mu9RM0dm-38xG$w%9 zXgeXxVk>%LV(V|f-By#rbE-150cfwnw}jcLmmk?zApcDZ*VhYG)^BayZE)@Y03~s@ zRN$$0zyk&PBcNCf>!w&efNV`vef%Y1psRc5U*XLgxK%7xJK3HY`ndKYUQHHvZvpy) z5<0EF$mn8~lu_2nbbb@&aYDroGjfOnMO^UumO-phiWC)9Lbif&kVixrrvPJb)z$Pm z9_ozKh;6lb$P8y16Nd9~uS*k8EL-Z3vRKC;?A}0J{GupquIU%z$jX%1%=wcDBoMfL zGJpKN#EY6yNU^|PwMKfqjiblr_E6%wLSpvWnMD6vGFIj*96@Ua3b0NDeolx^@TPpc7&tb3R`I_9^%{nuqE<9$5LL_*ERYhn9h@D;|*g_TxY1N5TG*$qOn4ex&U zU$3A;4>e&DPh5}Q>W$i26D6S>q~ix%FN{}Ytb45*RNM~>rrEWIH9gtrlBsAZuU{u_ zV<+HArLttS+6BwI9B&9N2;$J1`*~fE)VPmGYG8-X17oGMvJjX`8ZMi348`8wan4mc zfd5d!*`xvduq=i!|3s(FFshT$8im6|US#KW5!dy1SHUlAhJgHepxOb_SCF2*eS}vE zvThMSmOdo3bq_=6gG{{du97vt59OERBtEOrW4EKzs*Md)xuz zx<>=qo7M+cUjX_VZ+WTUP;e}-(1#v31!64rt~6*BqLBtf%FW&-g06F{1bk#1RX=MM z2L@7Epv$~3-o7n~e%cMWLpgK|KFe25sCH>QkOZ6`J3M6V(Oc74wtLZN!zzxAle52Z z=Irr(S@F_1AG)B`0!`2mcPkHF-hmVZ-e47=e$ud#&FXX;I`wX#LJ*eO+7WF+ENVq- z(~xq&-Bz28tas=mRq$|N!oLe$UVq15b*nk;4eyqc2hBA_USH7K*Wn|oJM7oQ>((z~ z18r$Fpqwzm#Y$VTGDfYytN52u-l?XI)-D?U#HVBbq!kT10e&udW#qtK&P zQ%xZ}7*X+1gjslwbm9Y;o3n(?5YO^7CO~jiZ6!IpT+Bqq-5UT6?tkm_X?jk5=7?Kf z{yZtrHVJ|JRs3#ia>HjCqZQ2k{;RBZb({&0e&thjZ5W1?+*-KUU*b^QO<7y_N$9EZ z{rKdrPWTw2YyQ{U@L(c%>)7zOvo5{ewhnzJ8L6e-=MdrRJO|@?%SRf7XGwV3se9!; z?Riazok8y4F&q9Wr#WTZWnBDHH_kH#0Jhlc<7MwjBsiNJ*ta)Zo2<GrD4Sq(QQWU zwg+<$8*qF4#vJa8oX(m{@E$!RUdfBeHP*vOm5Ftoz0l!`sUGE@E~?!=&*BNJL}RMs zq|_HHD}qL9t-1hS0}E3$l=jI_<5R8)GPMKJCqj&f}Dl{9~jOzjgGu>B( ze^()SH~!XGMLcWi<29?q9RjTO09@j?iY-A^stuD zJHtL~QTu#8>N%Lj`+keJ;(bH^l#ge3118k}SHU0Nl?6M|Yn@KFrikg;<$^CKs!U(~ zjq(uNk1TDXdfauQbA^6MU)pr8{M4|=a#Av$00-rYND}@D3`8+rDe$#PmoK)Ki9LR7 zDe29Nw8Fig+}Oz(8>~^LvtEQtGpUT{L}0Gp)>vu0lo}s+aClujnE6^yVD)DcvdL@? zSlYN?-zg7#y`b~58-+{Wkhu!$HBAuJUlH9tqA#hwp{h`@Wz#x4xVoM@XYPs(M=dfQ zeF`v4*mN59RQ7`yZb15$8aqPss@mjcpx6pkdOIUbApMI|qec)Is{@If*pmRsl8Lr*Z=G!&0>AcT;T+tK-nO+B(8J&g!7q$BtH9z1(OjK7M|_okc6IZWJal#cRX%i;^-5lAl{+I}YgKS0 z)T1$=%piaJtm>3H^YC$i(~76C58z>s04zJ_7rL}j=)cD%e*|7wZdO)7w>dp(Z`584 z^5*MAogemx4y8WFs>2^QVD$b4?TmuE{A7XS{gl)Q)H0i&Vz>Bbz>>VJ)59sghZ^E8 z;*0zkcfP{IQ46YUR)52fUU)A%F22=tj;2botGC&(vmZ8X^(mLEdA2~@_thq-^;RIT z410(8W_TxCHV%kk1v#JLnaGSi6wK9cneQ<@edyperTcZ#d%kj45zQ}l9hRYweox1f z!A%*AA{6YKljr5Sg_O3ocYDN=Sh2760<&dpcQ^aj_3L`)d&cd5{o;GaQO@Asw7Vhy$9ZKqxGVTnD+ z;AY5-lW#F`$+m(i@?!B5pL-`D;R(%=;E*7m6VQo(84uSXdT)1G&M1Z8?mGPT9Yuko z;XNE=rv*R%d0k)DiUps4zCOCL^eq7WCWQML0hiku(d)p`Wg7O?Kl&y3EkQB8zG98G zc%XB3=F+_$|BacTBvgxcRhl&BXU>pv#HN(9o5DqTGCB$JO;ucxgjI6}VHZw&g7}hb zH}V#-5aM6?m5ExxXX^lJ*p=f#aOvAO!5bccsGpQB?z(IeuI3n1e-VfQb{U#O;6zfwAn!Qx>B9W{9oTG- zpv?D-=|E=Kz{@G>xpNshjIKKD-&PN2;IRjA!IZkC-vbHB3`xU#$#j%QOY5_BeAXh9A4o;O zD`BRp3EG(2Oj2u{L)GbQsTPrv4PpCMmPX|H^5hp^NFNngpvd}no*scV8lMheA7Ukx za&Gq$Mn$Y3eu^ckE%d*L2X1De8ou|R#tCX_6FAP4=m`nQmBf|uvm6O2PvK}?`*FCR zFJxN88s0waXV+Wgb;kW^HE*V#pc3|I!QP>lE;4RY5}OE3w$rqeUZ&|Y_Jnqo1j1OP zJz(rsRxY~QSM2wnLN3R9>cSGfV9hw*;(LNKW2G6w#awptxQ``b#|l#~hp^=WTiDWr zXI`7@MQ%n^-qQ-%y?;XzCOF`6tSU>}%<;#)jp^^)QFU8w--<8Gx}SAGU|BmjPf>f# zG@#e8b4|`8+bt_-rb5BWSuqHco~2I)Ech8$77pHNTfj$^X z-T~xUOyRt~lLrK^O)M3i?E1G0=pAIKlE%IFuE{EzUi_AXuG|A%M+4Re40zMU;Y;(t z-5#!nMNs*-uu6OPjHr7H7Y)$oY;Tx2}i?0I+q zj*J@boZ7Sg69gv$1eWD#d%Nm8L{JI$b79O%>}53-=l5IOD*K)DRA@tY=`+@@D+jXT zguhj6t7p!lwVC)(P>-xxWMt%fXk|Fpl`B`=$IBe*hg=H?jjZj3^u3*dlfo}pxwRFD zo7ioZGe0?LzcD?XBPj|-|K3;6!_L$DDFf5;kOPTfS|>N9K^F>Z$+CHjyb^&+qgW*Z zRx8B1XO5!$%6@gMTSk2V%G=A6F2|p%H%Z-nhOByYzt5~RcI6O9f z5;&7)%bVuD-l%!i{`;Yai@f~1ld@EW=>S6W)93N|dU<4MYnHs3zPElinD1bn3desH zig~BoIV&PU&7Wx=?qdPB+0cDv?C6-+D@K;&EDsITjxGU`)rQk8K0PbIiG#0lXr!f) zC@h^T2@+6cNfKYcT!>~W??S#EUbfOu)HVa}FpkpL$)kKfPy-gb?9&or!j%~{v71e2 zm5FPRp<|yY+d>EX*jEt{N`xFI0tOgZ-!QrQ(`;O4!m!@`V6ViWzZKWAcr5WuNI%8Smu|{Yr_!9^bL_S0 z54l(*GtSj?l%9mH*jiHOP*Mbr%kmObVQIm$4P8Q!n1?l>Jen5SoF8x(yIu}|bXcs{ z5jA~KdPeA1m8+JCd+%Kp>3dwBPoLcx=P1wh%Pujq2Aa_u%T~@(_CFZ?{(izHJ+CK| ze``P6M-JsonE?~4EiKxr6XF@s{#yUO@)wSs@6<^DlHDoxqt&D#;LHv>8lrRKpyGMO zn!}v>8b`tx+Ezx-Ro%FR!_Y$$8KXyQciMS;!5P$C?SC?EKYK6s3Ci@n1&i*G<5Uj# zEZhVbkfC8IOp#NeCjwzIs&l&3_t?*`>K{|By&hM7ZCf{eCS|f{tf_gI4aZlVZ{Eo5 zJ8bVU?~VLjZ7XAcugW6N@oe$>T)*>Q$oR?HT=Vthtri~lgVFy!Rn?iY7_5n$Z>dy; zWR)K7DSV&@)ct@&<2Rv9G^;n{M%Y@cGWT5;{@ zQ{4aPHV-t}jU97pqa(ndOcYys$hEPZ&T^q2x{k#T9=tHTxZydgG%67gTpYsnEo=Xo zc9&=5L9)UNl-=AqxtN?`%En46z}?d^D=bn~8rqHE6{!QiEX@EP6nX_&v~h2+Of7?W zvm9Us7Q!8yP1P$SQ37F?ac$w3>BrOZ8U~nvW%&3~n8pct-aZy-CiA(=RIR%N0A1XD zx1>Hnq?~{?2`2$dN3=l{uOB1&mB*1UOTWEYuxw3lqUP_*%yDLLpEAfVGB7V|c8v`X zcxztSMX%ZvaDK=bVAm;=EuRPJ`|$xdjV8|vG$R>L%H9td85v3c5zfv>HG=rIjVVq- z9=7G~Hy+i_Q&kCe&M-2vrO2iexlH3{B+-oUHcW|Td}cVsDi7{-WrBkqU!t+M;MmA_Luo-|0Uc|-(%^Wg@%n&)!2KmgbAD!P!@MG8iB2yzwDhThp zK}IBKR1)`m$>AHb*N^+pjt^X&c$L((X=wjr;zZJL%Xv* zKZcI@Z+G-&bEi-4ABil<6csAe})%0-Xo! zp0%5gbEU}*b;nifzw9^dG`V1);{){s9qjol4^_CJ(`cqGlGy-!P>DD!ed**r#9>do z-pX|j90FX}0}r+w9I~6tSy}%FYO=kZNIN}oam%YWQ*)vR=_GwC5<2L?cCbx6k;2tagE{o*r1I9I!`)?le^K z{K|$L#X?KSE)BulS!Z3&>~V|R6nG6}o-j6+o!j7zKG^6sdKlV4)d!|OsZD3s4~&9* zvH@s4R2Juc8j0Q87n^UD6*!PtX9Q196$P>Q8Di{_I=kj5K@--kA5C^dme=rfE)`nJ z2h>O^KGin+pfS(59Za#}UJrv?{+W@nZzb{E+h|G>V+5WCa|@Tu^@n%6Z??>@wjhTKRtj5}~Sc5CDbzvI|u%8q976#0C&$~fX0U3=2U4Fb<(5s;Lv_)F6Jj$hqJAjWgA1CR7_8>gC z$|w{#J4BNt7VdQVV ziFZ@(9e9GrpNXVIm!nTRFFf(M%M8B!?26I}B_5fKaW_il9pg_nKS}?L{v#aNtpVTP z!mc!;7YqtKxczx5?c|_hknkw+Ib1@uKm!P^68OW-^=7)#JfK4tYVpZ1h3#yKY{KQW z8PbNJ-&9y3^!+Fuo=A>9lO*^_!HoIzvt0#--90a*fkJYpDBO>_>^gg-ftk^}J3+GC z!m?1u1U42>QwKLTK8w3qt*MU7ubehxVaohA#F~GyI~XbEm-SDD@G(A%L`N9YqXTpkMwDkrl zo~+qza~`L4Mt`krBgE5ino6rvGFF>#4?i`H&j--PWC0e$L}cu<{D-#`%U2M4m1r~J zWv0veEs{c_n8Jv+&sD2Ol3fw8NSPDQTVh4IG_>Exsf+ImcF}MBL-=){+6$abd@{&r z8vXJ-zx>|l@d>wrBC(d|XLeW)A2J&Z_klP65r%|JH`MmZ0@4q|k6aphDrZosEp^L1 z7o;a;mRJh*gv=Q`!?w-NZk$G0<~Z8-nKD1B&_m0s5jP z=&RW-J7iDZc)%6s)I}x_0^P$lO!N~{LyD(m#jbw%-6b|9n?QJf^S}CpsT6bh-F>W9 z;i=oQKG5urXjlpv9Y-eoXvn8u|JN+_@WPXVOk3;Mk&L_#({Nu94=0vBE+Egygpy^f z%IT(ZGgOfD17EqI!30X3A)IZ`|G$M++XOx!RSy&ceAwg+%~wgdt;63vy7@I6zh4~# z2M|yVGh4))D)9n;bW9$udW}Jf!`U51xNVlj1ZS&Wz;Q$T!T2WY5qo1n^J zOGTa+W?;ZsrfGK`*k2^ji#)Wd*KqJkd8Gx%=yc=&v66WJ!T%)s_f(lcy552ntrX z*=+gN#B~b*)Bd$G5)q=Jbuw{tcHSKa~0Y~-&7PwyL&CPJkic5dtMtgkw>i2N2%(hgaBG>H8f zX*L@CDc~RZLq)HZOV*W&s8x7W#huf>%$f+a(bl>&s6nIZVt4Q;7lP0>kTcNR2H?$+ zz98QVMj!mwUF#96yo({@n9*NXNEEWbOdNGHuh1L2_czJ=#o&%;DsB(VSIfasy-y;V zM~^M;l7~OLs5PMFL(x)uVy{qa*>SEz6mDQR1f606QcH7rPgL+$k{|R!W169K^>Z`f zDxtg))^l=;dNjv*$f;qP&O&ymI^NUk64!aP3QjEWrtep$7loXAS1?s5mR%9~OH3qo+>azU_i#8l19eCk=~Z{9nR&d^Gy$2?A%4 z9z|C^&%f+fUlBz+%=VjM@oadrD`CCV@{inX{E9NTjQTvO;xH7Duof} zpf*bRHvYZ?4mhFge~scwjpM3BQmpEhrX_Ej(oT-6}>=u zCWfu+XiqYE`g7r>v=PX}FK5;kM(5@p?eMntbu)uR>3%yOE4NNN--TveABBvUn}5YA z?}Nm&mouLBP2|Lw=h!I+%o(RhvbpJ1yam1yItSc$=337g)%jk$;UBy6vFF4C_apNk zjvZBy;^-Px#0Qhw%2oxmpt?LoX?e7t@b_=7UE?n`4Nnira#*mlhlUTUaz@d8&(%OO z;)%I(Bq-cg#tzHI#Q?4Wp>tQQJ72G=uMh>MAE5GvnXU#53IA8IoXT1(0{DU(ZUbL^ zRInTMnR|4N-FRSAo;4Lml*r3R0Dr2Xrl?os0k*LrMkht{=52h~;xDmX!0yFGe{9zw zhdsgZd4aD(1-)V&sw=;*us1F1uL(a*$j$qHE=W}mb?xc{(okgQ-!>LyZ=YUI05#v- zf;YdsJH&aSmh8(#necW;LUQeZL)IIKZ0fTWN3%T03vwdrX2hGJs1BFy=6mx18JF@G zXrQ>p0P*#gfv;C& z3{?MPz-Cn!*>!M#s-x=m1%taj0!_guQoxrcYzZPmcNy*fo*ZN5SU)q@8*)ctO(t_C z{(EQiNZoh4?8i5W^c^$4D01WEYfD(uu5aP6M0xId=S&;aP{2(W2^1ch^muSJbWq4$ z;bMVa{B84z$#1fb@2YX>rd|G}Z@QI+M2t;8!gj@ldeZwn4XK&zG!vNxa!(rdTZxXT z-&#Cs5Rh?vdldM3>)&_jvPs@wr`v>g$Pea6OkK312DM}-zlrxYoLB4d+^xU0GXA-G z9?(>O``*#emRgU$=t}#Tx%+f#q+E6-fLt^Z*|Ef^Kp`H1Wmy%^lP5NUlZgSEPZEA16cN6imZ!u(A2DX7=f1 z34EWbb1Q;Z!Ule~0q`B#cFg;p8-%Gnk0>Wv1cT4tJAZ2b=IJ$3Od|s4r5oeW+8hCfU`W)F z2?ejV=r{(?hQtsoJ{+oTR@T9iU{J0?Ir2~+x|diFCVRJ{-=kA9Eei5 z8Ce0t%Sg!!TIVHAh>Fojb9cMaE1DrYE8*qyLp&0HuReB1uUG+fv#JfGb=^?CaQ<(%c!<-@dlXOlsEg@a2uIawD4 z4%X^Q9C^Nu<@erO3UAPGJW7gPUB|~z9{!wysG~99(S5nxQL*8B=@#v;pxXu!Ttx1k z`CrpE+i?}j@uENicl}WyZ`Stfu^pVW?9bAV{1Nk+g2pc!&^qEnl1bd233EO_j5cg; zb}T>Z9;K&Wp#-?NU)#jq^$M{Mf&WXXihZj|Kaj>9nM^YXI1+o0XY zx5WJ0@EkQ5VkR&^K5F*<%r40tQKi{h|lo?s-@sO{TeP@doD zJsr?--r4s%AlI#Y#P>PIrU{q6!+2x6JZoyONEIg`Z${ipCH!+aSn;}rMq`nf7(iG- z+5^NH-UU3GXR6X^&WgM*+FN!Z^T;mI z|LELe_+jGj^FvazjK*Gyno$RDG%^WtZbcxRGiiG;@2Omd_VAB;-~W2U`T3g^?pj-j z!R~;_nvVKF_D#A{GW0F)Dd)Zl|8q7(Ek?|q5yl4$_Y&f;I6&4M9mbxq+6E-H2?jjB zOu(Oe)MPQ+$Vk|1n%v)LGZ%qV+U=yt%wv9PCm)DEWPHjZU>IL|D)2N_4tK~&xdD_s zIJ?Ti9SO7oCnSNh8sQww-K{sxgcpqD1bDN%YVkCD0Ql?;-=XmX6{k?}aL{kswIS^H zWV}=*jKjkBvjpq0ZH{f9ibZ|!nqa-JmTm8y!*=OiR9{E~j|eI1y~UeyL@hND6&b_m zyw&T@70qnD;@n&rAC7hw=Hpw^aBlvIj(JP59$n_?b`yLrdu@vU%^g zA8BiDm9k6Z-pOx3s+VVeQ(La{IHH(~b`t3MAEw^>k?Q~d|3Amc-ehE#iiVYBgrihi z91W3mjAxO($vDTzo-L!SijZ-Pgp6YxBphUB9sAga9L_$E&w0PTzkL6P`?%e1*X!+a z1)Y^IEOCB$-+LpjLN{W6lv)$=PM}fK_J_C8Ye(ulF37jK_g`tORa=PMlEgqy=hM;Q63gJn#mu2M2B6Hd7K^Tq zFevB(mc#9)cf0vTF1rM7oN33HFK+S6uHDEd3oi5}jKx}A@49eC;5kT+gwD*G+x)$V z_lOW;h5>Tb0`+06rn~pnIEYWKU2jbScTcVG#To2n2f;`p+k^ybj~OIawVMK#sSfY< zIwFo76tvLoHn-(!#TBTADhCMW&I^rp*-a47WBI}{+%t}hg;xDrJ~nCHTP9r$le=|l z3?`LNegwpY?SGRCh|_p>ZIO{SD;)n#5Qb7vXX40zg`W5O-(@UZ(M_7k?R$sJ@{cRZ z%y<;})@10^2aT84@AGB$sCLwz@xA@oB_0EwDFsN51H=g&?jj~4^S{*X@LH4_7lzJ+bae`vWJGmTUkf@kC!)A20C630N69`cnv z-jd83;shf8(OHUe0P`-sca}8(&y?Bq|DF?pp`F4ZHbx|1a$QclsFv`eOtoZ5HQ&UF z(@Q_wj?uD`Ceo)0ZhPWt?V83oR~&h?7=y;AN*8G{UE1fXp6#42}kk`Fkd0oE?LFs6}9B2j1kOxohB0p8A1BAn(3l z2Z;>QB4!3tHyPh%z|5V&_gb|Vv@uLy%G{7EWM7WDf?)=U@IIyp#pGRZ{yY5jHsh;G zRqSEMTg;-em4;OML`n(g@bTjwxv%;>Th&kf;)QdBIl8``cI`aD{-Xl8nlsZ?8-2p< z0m-uAhp5XAlbz6dD1J8LKS2<(A1)DmwvSKMq}D-x5ZYOZle%vSduRqWS3k&h zkRiN_<_nv`T{x`zQ)N-*`p^n8T!XXXRG8$(SB8SE3d{pROXw_FsH~cLLa6=opt=a*$fQCUaL^$ua`LO3?L|XoCl^i73rF4jOr(2d%F8*lYrw zjC%kY10k(1`X@Ic-%d(oC=P3n9B$~bC7!v#smzQLfy_Fl_l6)x}xY+5}_yp4XVzu^X! z^k(VcyvA7W{j8J_L`<++4SboBx@Hk!>|hgfWYh&!pEbjh*jg z>Np`=gqiMvpbm=d`zXQNUa8Qq&cP1$Lw8EyGY9F%j;*-b@TWZj zWAm05DnV`}o+J*mCU*MkwWe9D``%`Hc``=K9vuGx-%Vu_oo{E~3D^r0{x@a7WeuIyi`Id?LS0UQi}GL_DLr{Tz7 zc>ddKNa?fH8}#7l)+T;y&W88`Z;-9b+}@Ep>dVvRxar9#tDnxx))hASk*Q<{F%mK^2b|lts z`MBO2w#hs#H}XAFPq4i))*x*VV&i{hDB`HATHNTqxSY}Vu=9cdh5Z@`^@eWm1ls@i zo~d6ZtMA|uHW>*}#<=H8g3NW;nozqGWPuDbRez0;!hUS@re>k{zlS`urmV?Kof|FS zgAK8Z5kPI#Fz@j+?G2O!! z&F7u-Hr5Wa4#?vCpBK=E^6M6>AeILmdNC8ogjO5_Qup9a0nYr9X+U=v7$bUHCz5ZI zVOC&Rsei3O112;(Ss(fL?^EiFE$tnNv!j9z7EeA^!B%PAZuF&%FOAGW-MCyhVMl4V zJd~xwEaw(90U{A6s^K9>PcJpn(s)UAL0iOZaz5;6X;kqg^U|_p{oTti@2b#!4>OaO}Jc3r~p z7!tR|w#&9wqB2cq6tgL4Ze2w4U9m*qiBE}He^e;#E{4JCYoDC%v3NgoLUHUgr+GY? zFlZf#+5_2|ZY)b!)$3o^=_)CHsvExK7A1-c#27e51i8xR=8egk^agd-)Y$pt_v+Ts z799uhjj{~(vkg`8sOZ^W;6^7&gD5u7oCBMw&X}6SM;6j7PfVKX*0v`^>I)CMxe~7t^z+2mcMGQe^(Qn84N3t@!a%dQo>83rB$`ig9`AC zcoT(8y6wND_v>R-td(keOPM?SAJ9Qfe3W-+AG2CQ@_eV7y%JtfSN?WE28+wuEya?f z0r6~lmm#ZrL4pDJV~F}1=mxK{Esk=4_f7GiJo3AeKxR`d{-K}UM0i$Qyu(F^)mv#L3X~|^72<3$}l%Mp4w+6>WYIv@grV-gm@1z%Gy@#Q$pkO3| zDa)TpZ;J!|%%F($0g~ltopR=o=3c)Fv8mv?EKWfulaMz3JRfD>yT5v|@T|pobpoCbirsr* zy2CWt7X4+Tm&<+hc%>JS_K_EQYvM8W5HTay4CU>#$MWhQ240xWh8}x*z`1;Nf{7Lg z=#@aIlC!DkuTP$r+6@ZG{ZOseu8DrylvMq-Z9cAb>6&4_dii5+V;b?=Ql~n`*xi9~2bO7T+;7eGw&7f}7lh7=l33hQGjwj2I`knj`hJE8+>oNV&|xO2ODm zN25PAB0G>Hm071)YvFs7EufT_pbi6GY|{(O|8)&T;)VX;KcWi`?&-UEp=Fexg7R-T z3vu}?htUKn!M)__Qm+iU)eBH5B!k8q$D4WJR$ta)ze>HyGEC$@*j1t;UaD?rkfWG4 z^i0~*MckiMbid;k&89s{)(BRe)W7%v4N8{etSCJ49!o&&PvGW@ZvBH;(3CroeYE;n zIG!1-{uMxbEwL+56*ky24r0eZ#M~u|(*J{|$cy(Q`{j?|UC5C>ChFoc?!~^2(Pn7p z&IxyLH|PE5koC66nwpy566Vii>G>*gRtD~?&u;wbhrJ{#+o5|%_fUmtq?9bDKU@aeJ~~^3ueAT|JS<-xATslbSG$Jd`ud>32<~zWtkdVJJc(Xjr za{O4uTywIW%?9UXq`(u5N=Gz^>#t_bi@CcuusN|kUiAxGyD4(AGtN`PC$n!1E_`_P zEL&ZddnXLrF^tOk;yXHz`HnuXYSRS>?i;=o83Dgrb~!B*sWAck@ztHs+D<$`@JkyX zu#0#*#6YVtpot*YO&ni58ro0MH?JqrR&Y0ml(Lz)sbj!RhyqF}A`%KbCVo3dJfQ8) zj0`YJF2I1MI=lljSN&q4nzP5_(}y4ppYL_O&|frnE0i;0#6I*C^Y_pD5o)Nk539wU0p2lwPr8uk4euxh8soBXI zc(wf=G@o=16EWV5T4Zs)Gk1z$fZ_fII{kWKK=zsdiI(N;|>B+BBYq;FT+&~zgOR7?l5fJUtQ*X-nPLnanh~^>tx%!2GmkR zSC}84KE7@vEgEpj64y1t#&EajatOBJtMp8JWp+3?( zKZx$y#rcA&Q&0o3y0BxP3c|GbP9Kp--KM0v75 zn$WITTzU)vWUd_ZT|5}6ed+(0MGu$KzMKR8cpE=a^E{Pl(w2tMbI zHL297thq~?n&Sk7whMRG0`e27z~NrsksFeY)s(y;qujws?yP~eISP`X)R+so!7Dj* z@Y)qTS@o1rTk=|BUhQz5AIsVH_}8I{m>>P&vP&BbE^C07P?Ikssr`MEYNgr{VTZT; zp0&lNi^j0~U8GfR&t!G?bJy~HV6JZOi=yYxjVKM*^ge9VL)-)Ms|F}DpW|M*Oi*aw zq|hdZ4|0+B27(pWCi9}G{LjBQE>m1Z8bKW@;-3O%tR~8`zC0^OjnqE#KX&El=6KTT ze#eaW(p&>Gja2ppNg70JOa>aKU&$N!^wK22bB5hhit?pC7=ry<$07m{s7+%oeCBy% zZ*cSZ@dYE#NE3=*5`kbp$^)6*QGb=qNGyT06$TGUcx6s$*GgxIC-&MrUmA%!7gFmk z7eBDBN%C?ppgqDaw)zW&gy&{?FZ}w+#rNW|Xsd16-*PWASyq!gd@$5En<;4@iyEBj z8k70a(k8zA+Iqaat9Mj1BJ_y$=TDS9OtTuwzP1MHy9nyPo5C&$d3^ecE9w}oyY zH2Am^<41tyoRDR;XaIxgKvt19Aj*2}q{hnv3+x*0y!veCGf{r`NoHXd>KEZUY}LZL(Dpxq&lgr z7G&S{`fu}9Vuqx{+PgBYGlJ^r8X?Es0XeVTkY$v2DcZCe-V5N5CjIyY4U1af}a^=oMD}8N4YS(YmF&_ysocC3A=CvD#$JJYDud*Nq_x=Ow&LL;(dM z+pw{6-=(A1MIc;y=;qt62g1rzLx$~7JU@?=^`CbFLdY~qVOfFN?^crFyHoR7Nc80< zzfhDWjIp8|sWZisO_}yz1cBaH@NaP;aveC;CHlY0dM^&WRil|J&Tu=pA$3{<`pk1OZtQA2# zmLXYqg%RO4s@B^-7b6FaaB#86i-Xoq!6Do;AA;;*!*j%>JeP{Xb-!13Fw)?`SKGCDHYV&LLF}CD1<- zGq0^h-U*i%6JyVTy!r6qn_J{Vh>&OXF68tfl41Mr+X58#C=tLF2yMgnlvn`Bd;eo8 zg@IXPLOPc9{uS^mv_*E;M=tRb!+wlzw|>YBcrAtOBPAXVP~KOu0)*37?S0@jD`a+3 zszgnj5GiMwl{DbHLaon*@+RtwM-=!lMr>4_*Rvmw9em(uPJ%2vPGlN9H+U?M{<;Mu z=>t}47GwL9ys_S2n#TSO-871fqYXxje|~AMbN#ybCr?_j>!e2JzL7Nf%HEAw!TBie ztv^~7ZtWwr;uYmnBTBs@V)JS+13N{c$Echvy$`4pEPOPY##ONeW3=+)cdkTw@7!`- z-AT7svHs#bn(4Y^Ey(Xa84o=ePg?;vfBsz_<)~M`G|Ugz6i8UV%^y5{N`FQ=O6i3# z*%#+@L>}tQH{5oYhYB@`>IgQ*U$_((vcyb6?fd^AF5&$&P>hY^Ylvw%6-mfgkwnz{ zM6Lb&UdY9zAC@KEItjB$P zYkMi+x#9D+6KzPp0{m)jc@xQY_h}fa^=SHQMWAFCF42JN=*eDi^;zajXVZI)&WP3# zw2y*2ga7?JEE!zHY4i`-0Zd9=HlHe?g3G^yq8V;?kdgU@h3xw*ltqs4>FjlkKJ@%) zk#BPCk_x#OKD$X{5!a9~xE~n%3+s`t9kip!x%Zap0VE-hk=)^Jp9Fh5T4@@MjmKKU zh}WNPD5OZ~@vU~5ToRXx-CuQncgrbl4;XcM=q~)_`Kc>sQECMyd-gMKQ>bRsNrJqr z{doFQnxLf}5OvU*saaLfPPn%R4>8Pv`2AbCvkE?4Z?t$!i-DA7LOB9Ay+WvgRv%0j~cGNWKEgONsZg{}G=bd3FBfG13_T)f1tDoAg5j z+UZ1|N5KC@JZ-5Orv^@;`YGDO4c-Umu*_v=4wyk~LNTt(5vqFW`3gIJz9+W`&r;n*g$Qe0fq(ywZLDz&m*kQ1)~ z6eQyWu-zRat<~u7qO2xT{|LRbNP>@&yjA9<-lt3d6(DH(~YEc z>UtbZ=?zY*gyG*Jaua4gbwSTy=$IsMu65!h{NBVsm!k`I=uc-f9o-~A`uMT^dy|G1 zcyRx><~HT3zc@7GDgwW&Vv7#XXA&=HBpgI(zI~(K6s`lkr_i z@t1ee6{3c?C9mq;13s#>E~P>AXOCmGpTl0o0ky2sec;#|y-4sDq$ku0RRHj=S*n%s zKJEr_VD5=Ji>`7XmlifwRge+RJ)vN;A(p_E+5I81S=(0Dj^)-!-dNGto&CuWWT2TQ z@&P2Q>?ZmAaCsOkU~nrM9Lspjr~W-aJ?_yc)NkDz1O=!I}j1{$tvvyI$RWiL{g7Pt{m=l`M9ZoDqdgdznto#yY z<-T6?1(tYEg%=@Ln+XlgTK<&iQhWYC?=Z>$A`Hv1}=ZI(Xz`Nk&W&m=mw z5gldE5Y4hT_UrL$oKE{{=`GwcK<$h-ptn6)A@B4r8YAudNU_W5iFxVdV{6nz484f` z_FemgqM}#~5Sx%*e#6$|%$v7a3Y9w|uQ=H2m~)Y{q^&*0Op{kU-g%uTt|s2*O}y#mpw9@B4QZC|G;kK${7r`{fb;&$_+stB)T8bA zH*MX@>$B21+p+^^UF>hn;mntSbuR7j+8}+z)fO(Cw@kdec6u-T$NipYubk}nG6|^O zH8xI{OXJW!)Xgjp1nKD9to)p?rN8X{K8EiuSYT=Dx1Ua}z2h|k)Lrp{7H4}emUnkW zEmuWGSK?PDy~SW4mEW<~@EY#~yY&bOMh9*jxP0A1pQ#t%UubW;)im4sGIie2(svEx z=z(h#h-elotUyBF9qlIGhQpj%W%WHPOT8EP7Bf|Z7dH8zZXkwj-mhkz&SW{vj}%^g zkBgGLQ|GJD4~+YK%P)flf)6Q36^`MTZ2EfgR{D|OYJk@)LAjJu;rVZ8dMkbE%ZYL~ zw%4D8d4O06^9vX6dKynDEp$+Rwe1?Z!pvB`Go{gQ{}PP}OrvkhCg3ReauhQ`+7k7s z4rY3zfazNBKH02ERu_em&;^*v8}Jkm*R`7vjaPwyV@#Ynhq5yh`auiWP*yn~ol}|hg6xQ8WWuR6VuW{H1e^PIcg|dKxmZ#Q|GtD3Cp{_qCB6*cu z!z{Qzn_yBJd@&FJV|1Wi1}qUR?StMM%Le0j<-FF9{Ka=R;+0{@e@r>9len=0vTSxv8Hoc-<-P)zzQh)YB5zC+mco zPUyPM=*gaV;mO+057>z^WN&3Hs>v@Qp?urgpkhdp7^eam>N}v5qAZ=nDtEiX#!!}U zSy5fNpT+&ORn4(9@X8c7Q!N{YEtz<>Jgrr+5m4mfZ}=6KmtsLYo_{sDKK5zd*!IvD zll1c{k@U4QB#B)(mc5hTu#!CFZ)L{-&=LoS(3hByD z64CKw>5lFe?dINP;aRmPRNx8v_O0@8TyKtC>)0VDyAVxrO}(K2)fK)*>$5$Fp&##K z^d0uTC8a-`FKDkE1HXABu2?_#aAj@hw01`P-mp66))`T?hdQF#`Ax`U2bQeX6peS< z;o#(T@mu?$?tQl{N7pMd26Af7KzR2SEOb(5rQ|<_U*q77Pj}X{vtxp4WHa98#?uFO zSJ-&^2E}X6&Wbku-5D7i6%NK9XSqZc;tdX_NKjcF+eC&l)xp&X^gP&`Wzqklae9m+ zX4bU&()@|uY2C&7LRWgVvrciO5?SlPWKH0yw(QsZvop~@7VTa4w(o5le?O~D=wSiQ z-<(>?kd%v3Mk1ZQoQnwgr7h~7%J*SJsjzqnc;@cma2w|Y3E$fdBk$7)K8N%ZwtD^_ z?4cjc@ABKATJ%G?0P zog7@Aa|+sE&lD*|6KNL9&;$Fjms>=n-nQijBdmD_B~s5ei{3WzCz;c23G@$=0=^-k zj8gOWd$lFOn!VmJ&qZ(F(-)FB(KV&;q??mFcQxY%%Y&R9!iu;&`C&RueImGX3MMIa zTP{H(e@x)i(|Z|sr5nA9XAJK+wyn@8vj2vQAGu&pZpY=Xm=w+9vTCjY^AQg)p?A3V zS?CiD#ao}8&B9iL=^_SV-N0>i=7U+5ee0?7argEZwVML{xfKc8?8e~XUL+P51!*?Gks_!)N0oc``+xN}cWn1ul| zw8>Bd9!d_-MH4BOt5i&QA8k?tCt(Uqj24(1lT|}Acj60hm)(BFwfDbchEH^5Z`H*Q zg&t#s-Fi!q=j}jvOHhxhOVr*>6|}d&tJ?zaim?U}{@h2scMOa!gJxkXo)1NDn_0g~ z83_FK+iqY!QfOQvODHP|Lk?K76>*EdM#J8o6_%F4=z@v5-+wI4 zI)t(dJ4fUkT(z1ymC`~@NffOP*|puC`F_GOO|GM6t~ul5I2ilGYfQ#!V+{~4(BhBu zI7713h+G0mo%ddtEaSiII>vRY^Uys6{+_nA1h!+M(pgNv^Y-TT;2v;plrl;sJ<#9J zf`Ygke(BA!NQUGYEBTUYTOa7TD^d2GiI~Ixu+XBRM@~EpVQYVZ>rw}_E3PcSsjOwt z%th+I=NIzP&Ssn|^#n}IRrolyIe0fNx@yj12mTLOLfn+JzKccfnXkNkRQ=5K=JUfO z7j%o7N-y#_aJU@xq4(D^JcRkOhYwX=u-Z(R?X5l;Q|dC%e$^ZICA~f1c%7igErNDiUg8stBMa6eE+KmjE>0h& zb%wBT&*O*ez%%&a-o3V=`q$HKl@+oV=MDt!o|Q2U=)B%&#TV1u=WsNhdYS`f9zt-p zF^j;thLYabeZ8NKn7qSv8ZUnb3twemf;yNJog~rax8+YBvby0CcGmbgJF*6R0Bj$9 z6wb1$AiK%?O^ytZ{=CtJC@G&1p5Gt98~?qE?>o_i9fSDn>eIj%Ka4mxXfXVz6c@an zM;Y}x5P$C`F)56Zl1EVDj_v)yuoJ)U#yS6r>>$pa>sDCnDrQg}g-D#l^)!760hP*+)L=VklM#=9wx-Wpg3;0?1gGNOjz0R8#fB#m=5uzoBAf5|l3J!hN zs1F+ai+A~@-}Fq>xSKJF+<%6>>GuRjqhYe8Em@pQA2sp8oYbH(hFH+`-6sp6CLAAK+Q zco3o32X5$&s$wT5nmwvZlxndq@D*%L6WiVLv5Tik^=$o%VA(9^O7S;){#)T$NLqPgbpWK0Pzw<|#SBD!WgH+fb1wz;lI?{|WG?6T6CM9M^h^e= z#&`LavdY4&E>WFENpy~Em5zK9b)#vi60G&>gS& zzaEmUp~)Mg7Y-vPj@S=&de+6aKy7JXat_ihbCEvnd^c)JU;&K2PQ2)(4KKdnJ{^BI z^JcC@MV2iz$M+iB0W)NTbI*6fGxMa9w`g?qhS-02Ga3JrIByedZi}y#`_Yd_nrm+p zxKKLGIit{J>O;IZn>Q!2afVWhQ;``#^zHpPFiwzWkT83MnMv$s8l&Vx6?@rJFjs`h0lMQ=J?-tEo%Hv zXTB{E?;l81s_0)P(%66mD`<<+jG11%E+HSTk5cmSWJiRx&$pvs%O82~>Eha7g-E1z z5b6Cd-lm+HQmFZi{!5 zIGsmk&*(%fD6b9KqyaH1PpKM4ivK_=2?tt%AlV6bNfs;X$M>1B zOh(j_#8ir{k!H_}&ovT!SFT)o(s;2o>J6dc&K;$mhMOGz5q8+24~D+*@uQ}}(?>4# zeW#f&!hnC@@|GXqMX@`MhyVJ3l=oxK{bOM`?+W}l+VsBD1~2G+>LkfO>aK3ze;DYS zu^XgvW!M+^m(NaH)hhB@+TOko|8}{^|L{NhRI9thKajDGi4QBSmUo*%-GUMn_>yJY}~`!U{T*|7q`$`_tL!Zw9N z7M*X+HVCyLb?6l)o#`5p1+H|NY(lcP8U+DI^;Has&=m1+CQ%A)qrEJ*?fJ@rPQ!oncukJmMyF}i z>$AodDhloI4K>F&;=<0JoK|{ofZVuC@^*Jk{fe3}KJUVQ|6IYV*9^`&7ccdnfyy`1 z%^<^C4N3<4eymju*#cw{G;E)fPVK%!rwZ557!WdjMIH-qPtxO)M%v)>8g~% z-rE?WFYyM?LWQiF_tA}z_M9ek#04t5c`z=zsrhEIcy6*#^!?DOm0;KOe7m0y@rG=5 zO0b@#zhYLcuIxb`Q&Ig&YMd*k2pnM~_L#SDcuGRFikW*BN9%p}A&^BKa0Z6-} zgR~dXmRsY-t(Nu=3eX+p{0oGwd$7&>?@1Czn~C!VVGm)`(pMY2I@C8A>?~?Nywyq9 zh0hc7vBAr4eo}6gRJ_Pq;A7o6Rs?K35U5N$E+3`G1T-j2Trzk?o6#s~GzuP@U`tXW z|E+WRG{`0Xe-3Fb_+C*Klu0?c=J_(YHIleo~ZRE1yq#As=!MhYsQ)F40L)euh1g^ug;9eBGnK7wfjdeARKBI8{PweDBw#hL1$v za3tq*;^4ymVKKp0cf$Xu-~f{SWAy|gt3?O+Y%wzb=j(|Gp!t>_!TZS}!u};itcCvP-fz)s zOWY&IJr7H!43$h4+Z>Pu^R45|!YGJF>S3PT+)pPF1LO?=9ZWK#O50lI1Ap)rG}`t6 z>NHx9ZrQZ@h%X}0JJqC604M+fS^`GN;8*xjmO9uLIqkvHRw_{J6%`ea4?zaiRC$7Z zBSUQM5{DI%Y~b1zd1>DoKRYW$aQGioE~5DjrrsKrK;Y2}--XYrGTvcURqvk+=XVN0Ey< z$8C7@E8??+WzU+NZJ^&SEu&P`$6p|-T#Gg_bpb#8rf#hjl1)2Y2-{Z}A|$(dAF-=X zrVHFYJE3&)cY~G_{pFnY`$^FaS{DMGr7WrCm6TNw#(^?C;KWqV>pM;zX*lfuk%h#x_cLHr|9SyI#$XR9HOTn52q#VS@$7php zcB0}A?Yp-urqr}R5bT058W*RA{`MVoX^RO%(mA#=)q0||e>gASJ-Su&^;81ISLnc2 zX^k25Ra|l^43xGzl{P0maREjHGiZ+p_OCkaTQ!2nKG+jyk>4X^Gu5(V!L7Vj(g`av ztN#srxFYZQNb_BMD}oiJYNW+!9(zdjjU4E-*as~`IxH3a1f=jNPx%f+F+^eQ!tA6Y zdI{{dhz{XjUy6Eu9%-o+tfKm$<<;2PU#1Bp&GgnE-y3iCkFOeRY#vH6-KXpW8QzZQ zpQyymry0)wc-&vBJ@|4iKcTjW!vXvAo@xzRk@B7yK~>%+;7T&IBCE31gZNxzcOKM7 zZah+Y05k~A{O~9$>3E5y>Qo^{mndpz|5PB$pCyz{E&@Ol*B1c*xJgFILvGuv$waoP z73L~lX1$MbDkZ4Ci$_9e)71U9_K5Ibi1tbh61)DijR2;m=p>kj5}K`3o!VH#E$F>} zw23bP^@xqFy65^1_XOInv3`CA@qn8rJ8F30DTets!D(Jz^d=PA$GC}8szWx@WW%!^A{v)UF9dM7Cak-kC0EbdBYuJmoLkxfE8TZI~3{vAthc zG=Ub=+9m!HBoQ591`&UoW=rAeN6+Q0jCht}YO_ftC(nIXd=vfeF~7n)jcW-uA`w1z zi8ZLt=lrkpJW_A0j@Jt>m^X+iFA-R(JTTeosN|hOM~Lp)FXU_e*iwL~)W7hibr zXEtcQO>}{GRcHE=bU=PvbiD-AU{-GI|UC|vu~P7qhQhDj(RDQUO? z20i*D_SuERwkey`r~TNW>kSWa{Y|~n8;;M^g zJ~|ttE_)dz^RH;ViV2bZY#h2DE0IV!3~Yk#vp91e;O)7At*L9P zz|Ao#FF}nJUKFN%Uj{1hnIy0AoiFAdr_*K;_f#W7MK%9ws%8o7T)JQm?GuIBM`#lO z$`5`65Fs+0A`hHrnT#sdj{jt5{>|GwMtc52p4` z1G(r!cE3=soA*0UtxbGc^ukh_$Bt-E??x0f4$aU#daDZxq@XryjHB%>mpt5%I}iR7 z)<{wVdMdnXiT33`FF{6lHyRdBzgz{^r;9P`CRmYBeWVf%G|au3Z-aQ`d2bu$+RTPn z;nNTA?dl3Ut>5|eWCmG2ukP6EM8-PHjc6F?O`X!|%w+0b$xYpQVT#ko?rDjnHO^nC z)^U8M5$w;u$D}Oe7JiTzzv2*sPp~jC!cf+<& z+Nq{}-KoYvHWJGI2D{6qr~T7JC^B3g9WnUws^CWJ-oY8UwPt0)+xQv{Gpp$l zu%?LVYv(_bbGfF~EzSxPK?gTXCcmz4I;ZZuWM)e{r#Ul3qHMPIXLfe@6t65T_BD|m zH!@k4H0sq{?N=NW*ylNuz&&i4I7Na|{ED z&Wdi*3W1ApK3-+AoYA}PGg1SSzL4?BGG15vSVrym(ajjkRyk?N*aFL93O^~Sd>I+}F^~-HiU}xr0{O~7;*87`D5Fxq3NHWxU`f-Kr zPf6bMYmUDPA09!>ia8ukm=)+)%MSGutXt5<0E%@cS!UAW-G2eBT9OVZ?ZL|-x8)-z zcninD-w{R|oZ>L`KEd5u*zL8r#3OH3U`Ixi(Pwu3?wk%_pg6GoST_1GNS+miMG5yz zphZ(Y{J=%YpdkkIS(d`;a{fA7&Q|=;tpJNEH96*k0Saq^g-CZmKD5Y#`$d!;BxBVQ zrxD$x2AfZ0=IMEfu23VLEVVFR{V(`V#Q>gJNN#5(_ zc(DxPYKxYu_?X?#O`oG~s@hwg)+oRChwSjFpB@(Y7<$7Y0_M%f;}Y>fGf;e$!|7$F^qSK2 zf`_j@!cd1Fw<8&a9u{0!+~A=P%p3VUAFedG;N#kRWmXCB0WP*e1igAwyPEgb_FHwn z2c0tv*~+9Q0k>1hHrlA=l}{0p_L$tZdve%aTvWLU>GhWU9n=h4it0}Kv%0TKn5x0X zAfkfm?o4XLmZkGdQn6K6h%Zt7$RLxileq8f>qkLG?Z*%7|BBFm<8O866&mt{k%u^3r?8AVO zTzER9v@`rY;9k=X-v=QTIfi}gJp-rIW@9m2oo9a0B-(&yoAhHe_{*nmOuc#dk3&iS zpEU%O4IcaJ_wVb_HF_~5nI$6J1KJ`U%Nwx=>eYqZw?x_YAl_a(FCavRBFL(_ESwL9gvsvINdO>0LeoMFFU-auYfQtD@(R$E4WKf zcb>zgGr)2y)K-d&_Ys{^3u`a%jrRT%9&%-mN%S;`V`+zUL*g)|z7mwWAvEnb50ODtfA;iq~@r((OJ@F4Z+# zzDxk36JvOVuF*-p{~YOiQav}HI;6n;@81sS+VnbUHQvQNI+Lx~xbH40?wOuy5Uo*H z&%ajfvhbENx4%>C6khiu1<|qMg;l}8@Zyf6(HkK#x!4WuD@)UhJ34K7{)-bAyI-qp zRj0H@5#}NuMYQ4&hphM=0L@r>l%h}|v%3-d*(=X?qutEoWE&nI_!%b{2qMy9iAn8a zHC;YFTY9!mDLx^ip)%9o!84YX?QfEra!=@R&pfHbG#PW2nM!!afw+EDD26zkV(dM1 zS`KIhrIv?+FVmF_S#sw>vqOZ|yd|qlG);ztpvfGMK$O!ST2oyD$r0ItHwwo4|+Tk>W|8tGqSL6Dvwo19?# zEi+PS(_naxUXD+_Fb_JI{5v@m+D2w^Oa3&cGY!7A!DcNfhQ82D20fbbnUE#caV8Mh z%g{Y9kgzrj%~@4q(9V;T1Tz%EBZ;J%33){=L@1anbTDUJ($VF8an|^3*VRvK;1t2n zQwI`#s~>*~Av~Y#>B-CI_RS+;0@`C41B-fBR^>0|A zZtK4RY3*pJyhOWh*hucaH2xk6gp#~bt38aHZ0;g4b|d#-7&<2_XSS7M~bN_gJO zWfP~vZDHlxrae0OD7;3nbl+d~w>>HC^Of$tYkT$>s>vyA@_e1we8?KbQfT%Y`5!C@SUKEZ&;5H{uq9EGEi;gaA^yjkD=h+(Upx^K5}>y~x#MiBl(2 zKE$_!x&ir_da?Kh&z}E62XBxmBQ8_9_C^!i@431gYei&c8+n?asC518es2Xc3)Ka1 z74|K+U$Cd|7)0JY$hzdMa_jjFtMZw$TSXuK)hr1BVItlG{ZG0we&)&Lzj2p$`wTkuCV+I;~JuM((@C^Ra7N#~<# zfj9UwNYjzi8I}o@H!~NuQNI~C@s?dQbWdn||F>QE-8N{t=10y)k2InIIEMz1C1sTE zHJ4%Lx%O+(n3YDLY5=%6*-~7O*zTX^RL}C4R$J<+FLyg4bSFz#M8HA}Q-MhWW0Ez> z@6t7QOAUucgqVqYi|@M%qr~?;gbCvNJ{qecFp2#j;dF`pP~jnoeT1-}H!QLTYe4h23X;Om3Hgm;h~i4W%%@@+%Jt0u{7d8UcsD7BI4v2y^m)tFlR$a-{`nI zStA8}3@Apyz9W6d7~LWy=h7{~yG7VYndmUg{g7MOvH!=?S%)?GzF~hfiU^7bQo}C_ zDlO76uuzat6p$Jrpmazx1}G(^B7(FcAky884vEnXqel-I+Zc=I-S2(h|F#{^UpwyO zdanDr&hv8~QM8JQy@QWAYd~Kz6@+W&9X`r3v+h=NR|ulpqw4n`!m_z2o-KtWteDCE zn~hJ#gQ)bD$AA)zxLtHSgR|wziA8G25*b+X8$6C z_RQznPjR9i@}3dix-32P6aHL4yj5w`tK{*c;Rwa@U$!cwHMET=a#sCVr3&hCnY6!E zwR`oGDN@smEo9JrmP0F8|e8yN6_&ofHg&~R~}h6MLs&6ux>C#tB2__}q?5#?mO*M)=eM^QUP zuZX~Y`spEc-n8P)r7^C{m$r5i!tu(*xU$ZKN!`L-^U!x(J>$E=LJ22ywRu9Q`K1`D z*6S`H&);tUj>Hc|9=2`4`fsMyF>pW3clL$S_DUvQrCc|)psA>15}{WPsZq3cROA7T zWnz4AQ|RrVZcybU8Ym(ZDbcs|#yl>+lr5erF;nJA->9V788SPyPT^xYe6o)?kCi6_ zy9?0j(6a!98x&9=s*OQsG>>8Jun@q^9r2wo;8U_xHcp;4$8fy+!TITIlJH||A!}?Ix9+2$dzESEx zokJ^l$O0l0s1aTWB<2l6RJ?Bn(<0*J94;>8I<$+$_y9^%bgQRxuf=0XyO(|-&b@>A z{ReB)xZ#t*;Eq&MN;B`Qd}K89d<|{yYQP~3Ia_G>+n_WAb&vZVpVl77>!yvk1~>QX z8s+L69b{+z#pW``NX;nX-&uYt6xs^P5L`Dfu;w~u!9P|wyodehYNXr4HVA>bMH}+? zEwq-i`00ZU)!%CqTuor!dEI$^(Rl;`G>3LmgmAxNbQ)>XKc*pv`-oOvFNi!Sky)5$ z9k+WXE7EOr-(>lW)G_A>i+Cobg{rVBi> zf;y2q=+@sj=IRAD9+ScHw)JC7eS4^*wH^S;bz|9JwBZ$1Xv44F|CyQ0S=XU>OiZQ`C9^s`v7PFc2L;DyMI(nl_Y zp(lF{O#7cun&>ZLUuJ`pu>hmee7zyo{iE?of$Rox{zHg#yFN9;4xz8pqqD zD%SGm<$W+M0_#CrJxvWltegPVX^GB`?If9ZU7W$XOHe6PFj4uy3K7n+6u_^IKX|C$ z^z0$?$IkAts~>_0UHKbqGGAMQe?i10wi1e;En&c#s5j!n*J_2qBbTXCQmKjo5~V`3 zQ7!z_l|8ad;&;%t$o!faoy@sAXN)B`qsjxf>EnL6XD(x7Ghz#Hlg=~Jrs6Z=gji#J z9+s_L(1{bh85PRS_Et7jO&gz_nA1f+=9sg}W?Q=)$W1kwX8OApc4xt4+K0qP-Q5AL z-u%-E4^UsZ^D+A~0%!K&?EG#rTsiofyR^bCDVrs-KWDDr`j6;PH4cy)C>x?)2_ zHn`7v7`I>S1@v?Edgph@408$+w3p>YueJ)~VnOggTmL;47C^UdmU)sD5TU+#H+- ziP`>&P{lD6(^Y$gr!+KuVtUpmGQ)4yR&T|1cA>Vz&I zNaC}vE%32~H~aN*Rm6Ooz396ypQU&4T5Hr+@OaMdZKrDOw;OQ4U!w9S z08}fC0Su{6teU_RmMsE)h-^98$38)UiVHKMjzprodennPg1mcdjG6BT2QNDeg*@fg zar8?7-YKPp!&GeeJtp>;yvj6F_+Bv85W9?Y6ES=+t z#H81|_K^0CtCANcUFBs%h0xOe&<&24LtHPr>BGBejLt?N?GwxUrH<8okrtN5dQBc0 zY7Vt8f(x=TQ9=^LGCt-%|0Vz>UwM^*(8$jS&qdHQx;Qt0#JgdN(Eog}6i5LA4m!=ZUiQps` zZcq+j;uV+L=4za;o3*tB5j5zIr`7B|+L=wSahMPh>y!?LCz((sI23t%g5}xfcU@bM z6%Pgi2?U5<0cZMQDX53_ECvx`Er5FAF2UviJm+xx2(ErP$mQ`}EXjZBR76$wqOh2- zGW_wV+iz~S2WHv(eS(!>%Ynq4H~5?1hEzY~d@l9yW{qmOSreGw{#}?>h@`C461|<#;ONpQD6isT>eLc@r%|!tW&4Ed z#g{Jh>E$@8;nw!J!9A~!L?SuGQWML}l(JP|XR3p#ANzBoR_mZXLLBgXp_4T~RC_PR zvvp(z#%p$$^Jt|a1BZT6+L<8mh~wpOswU;NV<6?dv4AFXOwEQG(L7SO>k%FxTC3SBegZb#Jy(h^5ZmZr_G|N}{mqPAN>a?x#<4DOj`I=n&c& za&*X(i1;2U`AQIaXfa7(nr9-_l+*%EsZcJt=M&-?n zT{-jZGttUyFQuAa4YSG?vs;=5p~J;Li!B@Occ1^jl5&e9lnINzO+hWH)?K%CfXbO_opO|O|MZI~2 zBCNWgmgBgiZw&YP%zsp%`27;B(1<06%+qxRmnt+b*=%XmjFB++A8!l2zvg`*!bsod zxUp_T6#iec#p;UFE)(|qri>#Bp$yy9`(3KLC+{)?x+uE2*Uw=mn2}g@SfE|bhV>g} ztX(G08`GxSAKMD^MEEX=@m2ZFhnvxv1hOhum)pZ~uGcAeDEQh~Xi12;yG&Q-9kcv0 zy+$`&x-~Exl=-#lv!EW-#_60$Auzxi^U(LrUDz4ar140!i|Vi*J=8CMBlVsZ82O!7 z$UbcJX!F*I+{4tLbb-v~b~i{MmXB$|Q~AoP9rs5vgQ`^S;$A{dFv_#a&aIoVV){=F{&^%||fPtdjBD{RRNc$V>EVl;X1INFu`x zu*p&A+>RYg5B$>ulqeA*U1JB5ygK5#;XdKPq%wHbUC452Db(E3B8R3EDTmsAZ`A6iRS~&ElO+tn*(lYQ+LHJ_0K)Dw!p=(FpWW&+}1cLezd$~xzG^sp?Ohs1AQIVlEzZ5L1p8)70^CzNJ=3X7SPzy zh{nbLRn299CLy_ZQL~8Qe@ByXB$zJZ!9*|}kCa7pUNIA^mD;v_Pv2s39!EG0i=0So zspH4O@Qi25@e$c_XmaByxGfzPq>;4Tf7Tk*_uii=F3M53hHPWBA~d|DvAu$JL6m1q z-sw%eNv*p%g_c3MLw!M+kHK2g6}=O8QvK;+V%hgoj&u7213|>Kgk1E;B;MLX=Cin2 zW`n>}k_U5WYz>Qqxmo+~LRmYITn}g>?h*r^QK$Xsne*WG;-$6Z1ewG)t<$E%3<+9) zj0AANZI6QCvPTbwBUY3x$*#|0jE46_Tpn=8$iKcUUkhWzuvVW-cs}s4F`RilK3xth?{vy%cB$8eU;h55*K$tu z@y{=hooBL&jJ~T7%1&Atca6W)f2wKwd1A)@Rj0Jn-lO4Gj>h*padZ)|3YP;3JXWsm zH*{~No#7}2gUDq+azCZXtd+A5A6P)(d}vbyB5?JVsA16e4y79%V$t3pwF>{K_fuH3 zjWxX0DnxsI_e!N$AR}O6PQ%Qmi|jz^v`f8G4l^N7-!K=6)tM14 z3K9l^syTZbZsl;BiSvU=A#8Y;EOj3NaCwL~WyjuSuKJvIqEN(EK=+z%I^A!Yatr97 zQ`0*|5?)LLCQ%eGMyl&6Fm3=@0no2V1WHg1NRpW|vwVW?9#oSiFTt?gGHY|5E>*ux z#+m}*hE1axU}T79A)zTjEbF`X)I~IJVY!j#oMUSA(?O$Dp+9N3Ke)Pof{vc`}G z@!1o^+(M$Wo)x5F+W0rm{(Wkn$krgamF=j7a3Xgr3noNy%+P{vk|+h)kB~89qdp7g zPJVc$O(Shie~Gik4~if#12YdcL8SJ%uB$!k2YP={&QJFgzVgWutr)V(B-8jtn?{nV z;ASEk!YNDeYkNdpYfO&f;DxwJ7jvfb&w6};*@0be zOL;wZX|Yixdr4`3ZS3=wUZx zA^&a8?tRjEI#&^TfKO`%XeJcT^NC1GO>?#!@V6Wa2AsX%?4&%DK>=}^c*g3O(-N5g z`3#7JQyfa3c^uE!tm4nP>(lzHEg!of>kB6w~l3{s8=Vl%-yWgO+Zn2yjy&rBrEjRKW^ajPl6m6v{$< z^*`+s5J3w;q%oY!x=j2j+Pi`o3gvLQ|i&8wy;wDH+#@HPgWUimpKWK~0+(mq>sNuS1V_Mvty z&41Qkg5++ouV2szl^P@laqR{fXvB29D|oJkRy!L~ilzP7lnBvZM7=)A4CJHaXKIZO zdh=H8NUrlpe`Iq$4VfS@)kkt7I+S*&1iwF?%J4Q2HeMq!KjW`^vxE{Dj-zu)^Ul|V4P)g9;fXL% z_?GHIiJnO{o57>>a-}KI*Du`NuTR3xJrThOwNpvcKLGP_@4oavMro;8=I745bH(R6 z%su8iKsFXJ4nr%w8gx8t=I?JBEHr6zeDi$l{&;sP!!CPZR*fQ)>$vnSCRN?@ z9`ngooPowffNHSF0tW$XsOp>My)kUmxyGc9k(tTt0<-R0Z=E@G zdl-lMxSNf;C#QRY_Zw?p$!hu>AWeTdK|Lu8a7KWbrb3&;x%6x&J^u{?0DGI#%k!dH|Ee}{_-=t*2&t$QH?i~Q)wH}?ee;uc`f;%C? zOa7{}Y^s>T@z{^VyxcExAmS>t|n~PGZmB zb!`8a!$P)*dO=X+U9x(xvMooyv^w2MR1YVOAu!psytHiK-8G49PPfj&{aERlPxm%S zKW+w%B&1RC6DR0Im5w>8=LPF5h)es;3nk4TZIV--|KrV>{%y3SL&j+9TQBcxHH2MC=2<~!_XH;kgo>@oWO|qRde`9oW7G3qwsXSjN>^`FX&Z@-LY9-L>z;iv8E}b~sBv@oM_)a;9$q5Y zN8FP)l-2yyaOtZ={PM$AwGnj?Q)bi8AS>+)zl|ZeKIR|G6XC2ugl=uO)l}INH2A}7 zuHIk2O%xZ3jsZ#<8E{+&FsRmqstF)-7GRbV()gGZA0uad|2tL`sE~jN*kxX$8^+uOyh3|n$~41;QY3qOA^KwEP)R21N)(ae$32GP{mCwqX?9 zv<@JK@QEkE`Mlr(96m(AD7ph^sCyX&0HWj+Z0I3~rWv^D1Bz$hL>a=Mn#$R4&D#FQ z#K>9|W2Ya^Ze*`IQ}*!Ve+)z2@@F0?Q+!KL3EE=Obc5WoQ*H_5sYr3>{xv(zgG#Dm z%!|slfSWs!D_JlPwA*1*XV`wCU$&-Ib^|3RfJeq{*5{eIH=B|1Vq0priR{~9rU+sO z`?sTz7*IgKx~DCmP7tvXJ&mW$oCZ(X9Xmd93zk!(V|T`4u`VM|K)rX9v-_5G><#D08a9 z{NI8)ub}OG4lMX$1w`nn#?KSb+xX(GmpAO0Gp(OVO?q|R{0W3xKrIn(NP zv!}{kxXDuGSk)mn$60%dca96IzRkWD|8}ZMgwpbde?6{U1{%m3bbY3iuDhkl+GSSr z*)_{ZAMs7Q(Tsjm8D{}1nd|T%h2{lV$uvN8ia}o__3V1RZgml~y3Qi(e_P2_pFNZd z8{!zGolK(9*d*Js<{rNOU+ld7f=Wqz)KQUVrKGvojy4|v#gvY$DV8%aY>}iS*=~Gz5 zDST(<(%xcA(u~zVm0``iBk|I|D}7`X6-K(F?=W$=;w0LZWjX({`B0Xa4!N7q)Z-5u zN|Qei-1JS!vTBD9F&K^m5XlBaB(N|wNy~FcCEcTJ(5_w3E;w-!QhJeQ1{~uuo#!!3 zza*g^dRN4>IZKFRqR5M`vd@3LJXc_#D+JE`uMeah)N#d85Jk^O5$>^>6iz`I_ z&trZpbL>lr5~GB8rRe5S?JtU}oQ=`L?&NdFB(Xo+JbRGD>)0Oz>H6^PU3a^w$oV)1 zH`|WmUEbE^%71`vAIme-04^>Qi{3XqECYDhN3A5kOD6YM+%|p%5`wp}Xgz3-CJTgd zd{=BxU7-K^{%5|l`1Kr@-w}Rqmds-;&1-)aL(pYh{9;v#AujK(-CcX}9MgcFY_L)s zPnKuEXSN)7uti_AhC<)o{g3iuR7!<^-)`BARUEjKA_ulD^#NrNVX>0x6UOiGRJi5>Hp)|;3I(rw6Xmf+p7*BQ#yJSho+ z9k-|G^*x4BC%28Z(Q*ty3Z?cG_|}-YCJelz4u1B! zrGS6}SPzD!c1&CQ*2FZ_!m*|L!~YXKr38j9IM6u85rq*u+%mG?v)VWRrXXZV_a=*l zW0;)QAcz#iKT45jQzT(}<4C?4(cx35{IbPrzcK7PFi;!v!6dm3iJb_#ikA>RfZ8v? zBVcEa<#xNG#b&KnNQAu}N|T=lsYl*oecw@Es8eUjO5qJBNixzae^qmsvK{4COd@az zvUme8mTChie9wL;X-!^~l1m^RV-1qC$JvJ|+$gE-#nD3q{z7QM7vO*U)^p)NE+&uG z+;*Qz%hral)3p8TYP9290}G>hS#dBr`^V)TpjGMP-zi}D>AA41TJa5i%C!wf3Z3_-tS)wh6nv-IfOCBRbxj57jxQxYV;SI z7w5NhT-BnCm%DkaUN(Eerq~v?c{n$<60>OuZTtO0Q8$D|gc*NaUwO-u+@&OZp`@?| z8KeJj*ANe4j1Ugf&}=`+d1@OE`7WS&Lw4lHS*28o-RLZe`*yzMYm(yQ{8&NTtzJ93 zne*GvFHP)lkDB}63OGxMW@mqJg~F)Aa-!{ty8nzOS866leMyA02?aL<18B&a^Ckej z^q@3DV|W&k!Snw9`_QOAOiH08U1@sjbP82|IbQfT$D`_BeteCVz!Q=^ph}^dJUkx* z1MW((YB{~XGG_Pd%a13Lb}xC4?~ZM;$V6aSMLmrV)iP8=SUKd`&(%QT*QxL`qTlKA z8e}E5ETj#oVor}+ie#7S^hT1ky6JF*1&VGq7qt0<>OTV}ftq+G(;w&XRqh`s^pdYx zWL@0;sKL9@22KoPs(%8RW*-!;F}}A5z1UPJGBJRvS%OF=n)pkZN>k}R8U302ccG)V zoAXs5qa->dAmrD0${ATO5PKesRGm%Q z7XOhRT%aMO9~V^RUdB%%s3ddkHgGRyEe9)lQPiV}FOXoFSQ_I2EfeZP`J!8DqgDYU zA3LX3P%j$q<)%=MI4U;V7$g>suI3lFhCPoh{gojf_G6v-yNrUV_bF_zfyBArhzt`~ z2D!6yG*hxBqo`*ZQ~-h9_hg_e?VPH98W5(FIYQ8zXWrn zUdAwc7-OETc0^Zd?eXl!{pKAO`}C%HB#e*zE992lLH*m|XWw3Q)_L{c$63L1#0C|i zu%A;O>fF}$!Yu3CRN4Zj@{vLdi4@h^yT&vB8XhI5LY(jXi{j3G;LGeaS8YrLM!tqT zNsPUJ{|W0?5#HX1kAJ!btEv31d(>O|<83-;ln{tj&`Tx~ORrdJ5zQ5a|5J|@%RhsV zPvu&P;|~_#0Dmx*+i@Jo831q%dHj3Ip4C-GvLJ((=gZ9b_zJB+v~Xe(YyE6cKP5h( zX^{Fw*pjF;g&1SNFtErRDU41a5XO8N#3Ow3Cim1RwiC{>e={qS*OMv+iz2YAhrJgyU zvYYL>h7)6t$I}Zke@vqQhO@hbf{U6?ba%N-)xz_=BEP+5W&|L15=RO+fw3|X8mVT_ zs=@2g5a^0}*(RMu6kxzLG1-#REAYSjm?BO6O*e7CGV&e-*JY~@A{;nD+j95hsE$&L zEG|)wXXkJ5xM}lG;pO^qe!QL^=UUi!2Q#d8@UX&Ju7lRNwARa0hp~=O&He=}uZ|V` z%2Dvbm~$5)y$dFYfmRR|jJXJPnG{}CBs{XDK%?teogf<(0KDv>lbc@ZnEQaSUOVFO z*!cjJf%mdIU7Bl4veLZEGLkM3s@j6dw4W;Zk(UTX-dJMW`40z99f$J_X(O6q_=AqDDxPMQng3eN2Z>K;u`By3&Dj`Tet zBG1KYHkI=ZYYXGY-ODWfFT4nTt?1_$C1#fh;^$}N^TKlik>E9uAD({31MxuT#zmKm zC||d!^Q7D~{v4w>GTz58-|OhLj|Eiy!0^}z%ZkYUM=Qt|lu5q4BSoAyDI{AyACl3m z$yAiOJ%UV@3kf+DX{D~pO@TCwF(1u-Ki<~v;tpeQD zyvDec5uY_c``%Yr3?Hi7INg9~zc}yA7GZif=py=JNyksu^m6!aAh&Aqx?1RmW~r*k zRv@e876*LI_JDvbyL0jMOGW5OG?hHyo>(GTg5I6QrarkKtn2muXv0K*0N16&2nsdU)hc~fl{d@D41`RD>SpvNmiZrY` zUGPS>Pfl_drAT*@_Ii2Tpxb90f^DM1#%9gd8on|F;P3-Wm-A9@TAS+>(vwP$<9D1l;zDg=7bipP*N*jXo!RXb}tkz4V~@WB3B z1H^MuZ*ak1d-BY&xFsfF{Y<=eVdeWN{Lpf*{_xsG3*a(K87yMoQKS7Ij6kyu>J84n z=NHE}#|t__+Gjb0R#(L!*VS6V7Ov!FyI!iAs{1Cn3+^fPkT zXK%{Z)9F9gaKy6Ca-p?Q6Ej<%Zd)H#ud%VBqr!G@)`Jg@&==E5O78V~PZZ8q1^sk= z!ux9*NO@fBzJ@8QErBt7S>KNLS2SO8>+(%(bHCRqg4y0tL|vg)r&v=JvL z9DAtrdT2EMBzISjz3tD>Zr)eMpPt%1{%MQ9Cjm8$iO=8<_CSjYrg)ry+(w~q!BF%< zVeVhN!3+=S=T7V%B>0pKw;ZTwj54Pc)F_I`)y>J?*PA=%6j9$=zTDkKex~@CQOmH{ zvZJGvW~g~u0gyXWhNM%=Pt^24+(D&W14$bd+`)0 z^kcV&fTuzR+en_0B~`*wm+KTmDYW6EE_(QnMMzKe?Nnvhc|>o;XR1aaKP#2v1^}HX z0|(x<8o*4%P@mdWgjRh=k4T?R;RfyiZ~|4m8H=C)OMsH$zX5|z_z`X@o6e9{McHUo zH1Ype(G>u-3c6a?OLq-tGDAZ5MEG@JZ63o3+doj}3iJg`P%}K)u)jN_ zaPq46Lc@C@o*5SZ{gZPU1w11$3=^eUFS|s%}uPd?gpj4FJ?BBe9~P;Fgj4+7tUB#C(ay$Foy4kwqs8pjpJ;mQdnd|9g=Fm2bQKD}oI7GhYE{ ztf1}>Btk{FO1z|bEe+Yw4*!Av31QF-nf`^lv}6zh0NZm2GNthhuroYF5c2=;H~^TV znQ<7%xn`QKkIOTlzI!ua$>JvW9T=Xt&`kW`5HgecV?pDyX4&;)F_}7^Me2mSV)?h! zR$FPG;5ddmb*Rq26pS@3=dlnYjW+W+4Eu-MI6KS5*ipU^%6HnDOgnq`g=yQ15_b>s z=Csnlegq3@WhB%6HP0zyQ2-#SLG8PM78C1FG}0Gg+ElES1NHBSKUzmODS? zQ1PN(Jz=^hCv!iS$Lf)t*O}n>3r`oMeny^EP}k=b4>|9L^FZ%XK-<$-Ru~9^JZbs> z)ACfCvs~cLzZMA`?HMUozirpoDp>#)7WKeQ zwCRcO>yJKC*(s`WL6}Tc!f-QE85uCFoI;hi9>H>;;D;|3d?xd1gAcCo7o@4AO#dxY zLGaA@pr7(fLn!&!ojG>)-I-U8+4k^1mc3F&95aYJcz9ubSgiBpXk#lSj~d|Xmb_#9 zv9;pg1L+&B4b3iLtN*kMG}<=uKFu;k9M9MIIR8N*7gzc9YYGmUdX0xNE(L-XLIzxY zclGM#a3+g?RNBTQH4Y7k$z$IU$7$-g!w>BS=r@YR=KSOr_ujqR>WjQs{Vq4jWpn0> zg3jq86>G4!nEy{XXpfGhSp#S|&00_#q2JVxKFga>9~5o6&o&KN@f;xR_BDtjjlM4v zo<#Xhm3Xr}VEb~fJX3qV$f)_)5RX*}!+=F)W9EO7L>XQ&~DEAox^E*O_R=woOc9QC-%X zvY!iBmeZE`1xb=Ib{reNknz4FjHXf;aPVd`?elkR_!h_kZ zLomJPsYXT?*cbl+n3P!Js6kd6V9^8k^DleUgmzt83u5e)ubmd?ZGHew+>^3%D6UBP zmJSrkP{%Pm?nhnrqQDPri$BBMhp@dMf;NAfcO~a;xZ*T z`7CR0lXO(5;C5u3UirQ#o|{F+xBV)Al}9XlW>t4!!WRX@qfk1d>DgiJsp^1aFG z6(qgNo?+s-dT8Tcs1eesu*}^a$Nb9|ew{Y!aP~+zUW=UZ-)=lW;Djcrw;dnpt4-=( zmTJcDu_^fM@tRATzwJnUUJDyAo3C(faka>Hm?m$ls205mSb<44t^A7Jn~OxxCjU+L zb6uRPWE!p+;FhC$w={MHZH!Diy@eYNE$V*T#iJW>`z{-`nW9UBjtlr@eblI!H9DsVvGaBkc>wb69v^f0`aFkqB~}n(7k9e z1cxgiK*YVJ^2G9(l`Z_6>~IYBDTlZA4C(%RPaR>&Js4(f@pUwOU>%g3I2EUwIzC~GS{na6U(8bW~8mN z$N~!%kaubD`DTE6rA95E<#+9p=sxVto8#ypfV%m&6kt!P~va~a#Q%pdcfB6qsK za>oBhq_STDOb#eNa4#VRrLXQhf2!_(epYaL@sE)2{vKEnWfNhbB7d4D#!6@pIi?I3 znoV9EdTB}5{qSFwS0ni_$aSUo$QP-n_?C2k?DF59&u1H!LB5hrzpMnCT5VvY`3Cm= zoip?d6sdtKy(;bTh+*Tfh-W#khJOz8cls-Hd8B1P$OCcVI5D8)m)G0?D}WsUAkQ;2 zYwk030q82{;lECnD#0!{^PVg11N!CD+~{l#w~RB;V&N&k?Yo~mJtsMhdJEKJG5@AX z1u~nDg0xM?scXiy2Ba4Z8Om7U z!9af5tcV}#XDf|%bMG>Q()9s9R%P(S`|yt~8}h06;olbNpq%()>f>m!AFB4@PHgNI z%73ME>bTHBGtgKUm(yH%_o>0shBGHpQlKQ1+=McxoZ(6wa63OAYxb{pCyN+Pe9{#& z%uoyaZ|t0oDyNmm)QiHeX9kMZu~JH?gKr_>DnXcguz}XS8I3qkyRR+@7{A2ke+E8h6dL>kRS*Yyf0&T*0~@=^M>5 z=zYTiP9p?b%k8j~!iTWw!}N;!Th`K9w0msdjS(#^9%)T_KwfJ#7mWuIU=Ni+W#=@dKq7LI!s_8-dTCdV<5u`p zeRkfwr7OIix@iAYr?F;F17b~`Ufpbp8HhrH6`YgwE=ML_$pU0#hnRqd+zLA5$Hab6CZBe;2xvC}(w#xj_CJnMGra zJpVnnpRdY%BQjrYs1+3mw4FIl)y;A5{w;77bUrZ^X~GOQNutUOD#jylDO2v&21|g! zh zwo;Q;Dl7$R4>v-f#Q81WrcA3MsWX~HZ+7Wg$be9N^{_Ht8+TL11V?iF5`xJHbewfJ zP;0-#Gw6Q8s6l!84z%8T)i`0Lq4Hcvfs*D66lP+)zBH2xM^xyHNj`fih^n)KjZ?jd z-1xd(ccY7Kg1+fWp#@<0e-mF}PjF#b+#v;}W|!P%AKN@}`gdo(T(tXziA2RE%Gn)g zSrY6H|4*zV_&mY9uNOX4PPgQGtg{Tt3S8Inq%Sj*>jo_|Sq0*szGFlg!gKN~uW8g? z+#!-)MM=AuqO5kLm8NQ4pZ^3b%<$qVD@h#Y^Xxl89`V(@b%oRwOE}O(d9a4@Td;wf zV49mIz+oCHiR$F?KoOL)f!gug`l|*-3ipjp2rOg_$HxkAAt2>*7B#^9%K(L#a4aw= z%c`{=E?(|68c3WYC5a`ZB-}rR*qXMjOQug6T$k@QF0&9ShmVpQezrximT&(h%j!1OmPPcR&Z?*iuYWXmcHwxg60kF!Q#k=AMF~H1t?#gL<#P@X-;CjkTD*3?zD5Yv>fDv;n!H6ta{c2^P=p zaZ31=y*guOi_@-ErOz{~~`JpjaG7fb#N=cZZth- zy}=as1t#N-)1SXZMoG>R?co6rRoc8uN(1SqOK-7jHdMV_!`y6I`I{b&02W&O=HG0* zGvJe3dSU$gZ7cM*hA&E7y0k?7{qzI;svUARa~kU09f5?aV359^mMce3#csQ0Bb}~F z=LXW(lq_!(i?wFI`XVuWGdJa({!N!T!(SM*4eVxuov7rnW_UMMy2v~0{RjDd9b%~; zDmYW=V-h_EqyF|dhCvfJ?s%jMuliXtKZoRCa+EF9(g#i;f!3* zq~~jDrX*49O36u>ZiD^#Is(CWSF(Oon7^ck+NK4lm3)z$rt9DenwiKh~ef#-zF2f57Eze{U^e9<7?oNQ?5 z=X*l(^Zl_iRc@h2>P?<51cqjfjm?fxnLdSHEINho!)wR0*dnXYz?03=G)sUD5wDIh*2i%mHc`9ynWucqf12l=AEEVp}O5Hr@AiF-*!$>1(ML#4s= zw+dRd%@tg$-JAT_G^m!xm~0b$5g#x2)}#DT!U;0qw4G&r7iE{Ie(cc(yN55yYap4D zRU2VDTQJEbAweh&sZ^5g0wTkAu)l`Drw_6Xs~itQsalRHH>9ll+NiZ2R2N-TZMVWL z?W>D7G~j@1C}m%=acK2N}JmApK8Nm0*`8v%GA6&-lxmiC&XXVFjE5vJ2j;8$rO!pt%y6m zKfRcTODu-m8ungHp1bp#iimiry__+kohlUiD1vhH-kqxwPVzd&Y$2rnf($3xX>*4c z8uv@xGFjM3kt|tz$+M{oK%2fF14XlsCVgBsKvq8buqM28%Is5whE@ynB-C&QsySl- zo7?FC0t+&2;csVzyJnDOLA4u6nTE^X#$P7Yg|TC>nTvr#INz8Zb`-vDeiD4kfkEv( z0KYJ7BdGBaE2Q{@4#YRBg8o2P%beRoVW zx}qHx%R(Au2&W`<^9Sc!!2B6b81^-s`Ges~p{W?@C8%eV;>)sY0Llk0z06`UPcYqphWgXv_(r(gOc4rQ3xOwFLOY&qh%Y1qmtoqe%-|C`M>go9)yqiqy6fdr zKyDS1v24&yM|=4=(~a^IcBiFJgu@)tizuj)*r_@VC0RwEN&`=38c?T)4uTD?sM+7}z7wFTvYNwQh#fZ+Gs~)|2iu2s?v!YYDQdF?G>KWh`cAmC{`7v(a_M}YHvj)2>Mg^XeBb}^ zdrTNe3`IeyfrUz0APQ_KzC}eDiiETx(k0R?02M?58&3C*xaK3I?MFSsZw$NqA8hpQH*954)p$7kou}-EdCPomZ~>W-`|hY**tmnGUnbV`Vj7otL+*Tz=dUEzm zBd%2MHV9h9K#p+06q0k===liH=pYDhhFmGbcS5d&?NU)uN%nwDD*O}RqpJUqUZdK5 z2QTD{=)a4*qfIUU7dwgmfPnj;oSdJlTM=9DlvB$B4u*Lx&edu2tt#52{JWkJbiFK zeMPR~eKP6xtiQjO-G8~Wmd*FWvQ2M?uvnK1Nbb$X*=fF*ygRwomBEX=*uheNcg}?S zhdl42ov-83b=-{;+NM{Qf8LNO-&EcA@AxBP-krZ1dDbnR>JB3srWmlT^ZhN;@7Y^; z^Odomxp_t1e;{lHP&DUQ$A3$rR<~;nZkGZsY0l2y&Z>o9g{&X=FF&~cSBBA~U2eZ+ zX5^A+?i|goV!}NkRt7iQd^J~-UCOeUCb}W*9c;J~BO^TwJ=Qt* z5Ao!JGM^V!MeGHHiHe1oxMIaxcv8_|&r^2ax{bP59h=j~kwb;P#~el|*nG)kGUH>T z(&dhNgY!kra7EbvPM)*4iANf&y!3v}GZ<2lYK;@o zk|R;w%(4VmZzU+|U$!ee?bLFBTRqqQNoooF0x}eVJ|KPyoTP15)$zx_O?m!x20cmx zU0OgxKfoIrjC8y!`nxttnzmd-Ebl_HZ}-unqI%Ik!?Ri{q1&ti8n|*uupmtbfBB+G&gEzMS6R6hUrhb{ z0Kt7xrg8XcmwV(jyA|}(`QZDFFW*ZsjrxV^&$>?LsN?1fDn_$%r<;D9b*h;HlbZta zjulVoPxluU4SRH*=%V^9a@Wjo4Jzgi#bxJ!jshFlxC?7+v4=Q2aM@1e)E6HrwJ9S= zI3Z;1uw6K3$-J#OIhcpH0HMUeWewYGa7P8lmDjQELcdTe z(w5M)pyiR~izh&#Q8~Gkos{11w?vuL9b!8Tw90|JC;fl75(@f%XyWP~`B{LbxgaPu ze{JQ>fg=Ie{t5iL^(big1QvT^$@@O&ZBu+dL499~<~s+XJ(GCrVr}V@bs)6U|fx4oRfPaKOhF#Hmk# zfvmp+rXkbjvHRXo9j@?G(fnqU249bx<^?O~Iau2o%-)Dy9DLnjI?;LO79sa&Uy(Mh z!L+vme@bub^9OYUJC;D!>`&`&FY^!v_iENweoR4c+^gIBY&9VuZlZGKK2xrpSKkT!i>?}&=fs;gilsq)UnCKoH$lhHMOwLevzRmwOu4UL{wYYj-qOsAV9@hbn~F4{li!DiJ0QY zRRw$3rlT5L;Y(z6I7lyF4x9Ahr%{0ZpRC%1n9DZzrtkpS;)*)6Pcs)Tftu-os9(3X z4F${yPHVP{@DGHyYVi_v5_Nja@du4zJVZIxo6SH4gs+u&)?VQ`q(yCbV$w68gMTj^ zrJg%|Xi#a##@XBP3LW?~3^1jQ&BNsD_l%#mHmJO|B*0sC0C!_Y?%&$}IinGUuW>-SpJ+`N}(lkxVdV4j(UJn>Xg8h-z|Tz5k5l!UuSjdk-^ zZem@xL0#x_qIo{?#(%oRzn?5BY^#bfx7Pu|C~^FEs@OU^cRlFpCDp>(h>w|kiQy4<{fsMbK>ZSp50?X4E^ny%!J|b3bOY*^W^8x^e~n5vYfoH z{$_Ez=+MyFdtUy_aS_mk(L6TVzH!AH?@(iRV3vn@61P@RF~!>IIjDl;<(ViLs^KDh z{SqF)hMKqC{X}2I0XMO7PZ>uT(O=m7cs&coE4pbPn4U0kqhOMk z2tyzyPyyd|=)VhrO*8t%5#$a%<6t_H#JEUMbO;hbqUKwc$7=#aLUwH}3bGF_0H`-D z{KZ!mNzILay!j{=axSFt^ED8xe)7T>aOA0K)~4%`=2z{8g&nS){q2{S>(c$BdDBqr zLE;i)!)8S}ECxB|>Ju$?@PV)I(B#bA-o#8Ef=T5OTfxkFuuC6yjE1t&`D7V%gM!A>+ro%N;^fCS2ZyW#r2RQBi%5klK<%lVM@ ztLbRR3vqv^z&v3vPx?f@e8XFdiYKSnng5x?vXfGAkK8;=tG-s^e^?l|=B8i7e%n{0 zsWzrkNN~XF0m8DVt+3{AD#wq!DpHf1iu~K0e`!%*V3lj>^`{bPVb|JsB|Ys*7HmR^ zxCEI5W%`kQ0&0hO8I_*+$2(%*`dhO}e~4u*Xw`W;KhT4hTaCB0a|#+e<^?T-tW}x? z#4DCyYW|3hdL^5S0vPsA*^)@{$$MH7pNG%q!rt4woYrFnzMM&9Z{8f-z`QW~+Gg_U zB#|fT2kC8I#tm#s-CtDQj@{Zol)E1cUH%sxeW|Ffr@4E7)%_0kU1Hy$RMajfT+VfC!dGT&{Hm_ z&P)SIFKK6OMRh!fieJAR%P@>i7jz`9XxQ{4TAGL1>u}`=wcIU-NVhd)x)Wl4iEmrZpyjsM~kiFzl@Z> z*1=E38ot-C{(ED;Mxl-n{|`yEIapIXF+7lokqf(Hg zuU#+-T?`*u;!65ci)!`V1t?DMMvYMQ*dB?}aL~?e?ejCFuHD1dcFPq60UH?{PW!xr za=;8X2*H`kTkD36VBCXcE}LGGk-Ki3rd*F9Vbj`7SeIDJ3wue}aO}h&zvv5a*j@8t zJcu*3`I-YFWT28 zrPgN2JG0_aP}CZs7FCHW1)FAm{KCzHtOA4=;xLa}*(JgQD_i*~E|CB2>C?DJ+JJw2 zmu|a)H#~{z zVpCNK4ortjN%ke#rNGpBp0p9vbS(FUQ<24&ha}K_O0ctUdH*wTKSlIhH}Hj?cPuR9 z^L8G8oa~mko2coK_fVNGu9iD;sYm2vqKU!h$fagcRd3VZ{3k`WNBr*bNG#k0NOe%t zevP&z6*aRh&1xr0aAOY$+L*t{aQbbwQ{%%}ZYe&aHY-hmzWUgs z!E-e8fSKMvD~ene=JGoSn#Z!ax>GI*b;ul&3fB+tRY4z+dV)LrT;d|-9YZ1|jMVdy zDs&6U9Q$chfp6|(WPFD++n1rUZBgr#^E{+1(wz;L(=&C#d*XT8RwY<>0s3GdDu&%E z9mC?14`>Ur1E~XAeS5AHfgdKKhA>&04+2CeKsGy}AX0zt2CxqbY?9ptV6@Lu{6->9 zs|ATM&vf1YTYuJmJhm}*&6 zK8|CgRt0>5E6SuQSnGR=ol2$tJGs8LKGe18wKJ;3nq1gn{B=1>#*duu8#|0BG_2{0 z6!N**6GI`s+e9nieV(?`sAR0dW?RF2+OM5@GES~^XJycm{zl+CV{!kAkUKk~st>$0 zYLt&iMaZM-c|l~X)WD_XtkqE5;Nd=5gJn1aJr3Cc8cvWPB-QW?hKMZC|DSuFyur>s zQ&47fmjY?@7Wv1qScoJwTFzCS4Rqqi8qQ&^79(!8n7GL^SNF`%pWolXGGf3O=vr}g z2`)a9N%+LmI5?-kOuhB}XD&ChCe zv(2SHT1unv7}HA$FQ9kdN+8sM6a(>oMviP{)a5CG-7l$@YL{BGPbgCIA3s~wo81`? zwioPI(0EAP|9n1CQBoWz!yX(0Xh0uN^<;{snhhRH`nFa3Je+6zGKYWpN136`iOO{r zSNs4#*q3-EWA6`W?7cnf2m0FxZn)Zo$NiesE#CE$$2<;mSl_u>J;2z5^LY*vPC;NJ z^6t%$+R)M6f&R|JwIS~+Hz$+}<249Yx(86kwOV!lXB%<$nXPu!^&Yz4!ZO!1t%>K> zC%F%u%KPRIoPPLv2@n^p)vMQKqQ_CeTi#1?Q8 z11~w~t6*u+A_udXzG z_#CH-ie4e;q)emepe-mv2U+?mH1Ha~pH;_bVfPUlc%TV4C(;TsbqvC9;j^W?mj&L! z@We9?n>{6^D|@nvLmC77eTR>C3}2+1nQMM6ZCPG+9&K6_5>^$LRI0OIYWgRhRF0K$jOgzBh%}Fm!2K^AzE6P z?RU%;m-Fkd!ts3h%grENmd?#yG>f@Nl#OROhLWB``C=`jP%^iVAY@J_#E?%~nN zbHftP9>VvTi~pJud}(z$?vP;YpYOk2T+9pZcDc5C7Oa7RX=a*MW}Fn6lZ=G zq$kQP`xl8-xb$y)yM)3$r1mE?WIdnv&J2A@rY|Ul&NX;tYFd>C-==K+{DreOV$?go zbl>+bS&0x_@+7=(;F1a~FhL%9#8Dd=8pNVFsaz z9OyMMAnp(gxG&6DXP3b1m&TO06sD@vZ{w+ypH3dQOr}6p*$n44)#t1G-LNq-21i5a zYw(DJU^9rOfO{_IG~Iu^{C|hp0D>Q&j^6j<{nV9Mt-f#jjwoNfp8xjZx1l{K#t$4B zd*9@_JKr=dK1?sS!h(7%uD{E-Kl9d^J8mapb2Q3WF9WmTH#HZjX!u3;MUtmox?SB`{Oy_p-@|^ zmgmJexSS%3`!OHaXi}#<<-M9?b^OJrs}>%>X^3a zO@O^Jv^j5eI_MmIVU4e*R4uslycAaxRd4sXm?Zdm^Sqrb@(Fd(rs8Ss759yN+cfzn zp<8p!s8)u`RmAi{4Xi+4KQQ~J=v-tYlar4!(?DV`a13Pp0LM`Hq&wP=;Tfe41V+u) z&5W9%bsTF~cI)6Lc96Qf&5NT?Yf+eEIzYmCN5j`JT2W_eBoEKv&s$xQ8vF&n;8(~S znQPRD1ZyIq^HZ=OTixM%?XLTv#X3*-Yr{~c;w}HV&Jspb*J~R&IyZ*_+m>QPvyIsE zOf)8*xdRT-L_k!9lA7O`yluoT9>S1+NsE)l_H;o^&HBpl6NeA1p0+;n-~*S+1NJ+ALFa-IyG_W5Xrw&YAf@8+RX46geD-5KwxcRa&D&j+=PDlUaHSSm7rs8)wvgl)et#0l?7BF|ZuJDh`Dj;knWEI; z<2m%IA4hZllv6HnpC4#`kFv5_zMOlsyO>Y4EmqsCq7%V>+3Z%|I_rSTR95?1bJ}>5 z;m6S#zsx?yBeO@z@&g`iAJrr(qvuw`?l06{=!MSJbuZkT^n|gN>b`oRe_ZIH7g?3- z^p$6|N?_=L3%dX16KWZVeKJak1b<}}96fdx!j>^co$}ch>)-k0c=!Vp{~T`noo6C* zU*mKjC!FKszR@!(L#~eNgpI)x{w-j}>3OGUqfy>y`qpJJ1D>9(02AI4MaLYf1uw}N ztUu>xcKYL?G0l){K8b)zhvISgymZuU8y1+q2z#pjbRc2#t0ts;H~j_We7P|DPuNfa zyMelUg20pg#NyF-6jWe^2bic~jux0CGC<=Qa31)yw?;8e^)(4}k_R*W@WBee|Cp~y zh3RF1FMMGnqlvaDzRSGJLQG%>M^%y?D?*Hnbq#9`>6JXdL?(0k?Q>|@pf)b zt!kDXl^>Rzf1atWeda1`)#pt7T%j)S)y* z&c<+Wf7|sjHu$4G`K<1cv}QI!6SLf)%k*`pbtP+^Wm2eGK8j4Lw_Uv$^P-u2!{h!9 zBY3ez9c+@h&X_-e_G#*FfO*gwqkoR;-9Hi%!VSeC+^O;1CI6P_i-NpXonS!tlwvB5 zLV+`R6t3m3pyI?qeGB-+=1>(7AAwGY2hB2D=%VDS!5W&a!9H+>ClS(LWrRqoN+Y5KFshm73j zv8gaJ0vVSgdk$Q$M~(5@fnT&nfPG5<_-Fk342TdvZd_}mT}Zm!h+{T4F&8}mn52R$ zbShrsLb4}1OkmjFne{V*7*a$z{IYXUR%s-n%|?kk+)X&$|YHMyBJ%q(g1 znh{>-O!3aUCBHYfnOV+yK4_F+drVhp_`Auy0&H(Xo5S{G^4FFIy0eQm5!@h5uvh-#?Ie*Bf;K zr0qW1Bzj6u2;fE0VP3#I|DA5l&i{;aE<#^gQqQ}z53&N*tVokIwH?q2Wxrik#s z>8i@I?K`h_t95}`k(&o(rXewV^6g9RRY#;=eWj-rkXJXhAb1}G(Y>`pBJ)sjQaERq z6q>58U4m%pwj2v&y@#8cmPLGJ^nSLl+gi(@!t0U2ilM-gpI`Hyzisx8Hs=Iq18g6N zToOHSidT_4EB6!Dy*&*^Gw}m7*f+Yh`D!D1_X)7bwLUU%NhGW3iReXp5Q*WqJ7f#Z!m__<~N-Ww_9Q&|NK?pN3o|MD-#q9 z>J{m@Vpw(sxhiUjiWxaZ2_@NwhsVV)eG^@KY@+{y8^&?qVP%GQH^C{Z>!1^s$k=*8 z-`7&VkePG^H48ey@nD0HBm=J?*@j~7q~C(5{4*mIv_g>SFIQfhTs$8POaV>6)dkL^ z{+T956!)}xQz1<*)WI);&xG5ktV?eV#uU+w+Q}sdGJ!mnK|{&1(G;BGm4DNW!+Z+x zKr5JijI>Us1HLcQ;0E$axq??R`5MLXz19Xo{#|eE1M^I}tF@*I6Fp7CadtG8%T092 zb*TrzD6bo_9Vyk;`i^Fo>mB|ssZSXX4qM&lc2636Z7s}dyG`X5b9W5`Qu`5(Had~c zFP&JByoY97e~1)|(t4v>&_gEj>2GzSWR+#oliWol5lUEJylS_06Kp|Tc&)V*1j`{LoM&wH zU&QgFij?zwJ-#pTsr&BoP->l|ao1YF_bkm6cHax9sBI0N&f+6Rgd=7Xw(qHrb z(X!y|uxJPLD@3~y^i){&(kME4Z|IIB5s_XEOg9OdX1dUT4LW-lZem?w0#Yk+5y#r< z+vQp$8%+s_4kW+`csNgWeaE7tI7tq67=D_k zWWkU2hc)1a5BiGR^~nfNAmnEGy2G6EOAa#zoXGOhD{sb4r?2_Lz3ycW?;J8rCJV25A z6!hD&MJ6JPzgZUw%4ga`jNCJ*GI`T+PAEbk7n)|%a)C`{7xjC zbNjIMAn${Z#!bRc3vREOSMZ(3-JGLG)qkFNXPFbd;!b~gOM1KLJ?gXc7N4Gx{ws9N zJQe?HwZ@b1V2b@vAm-7jTsfcKX@!6A&1odPW6_8FKVm+7ctV3%T*zhp+6naT_?vs; z$>($2zQs3zXg#DY>C>+@*<8W9w=y4n`f^FrDw3E1*P~1~%1FX|$>hPIJuGvX;?fo2 z4w3s~N6B(Loh;FiAjiE(=6kOHvh9kLwguCJmS!uy~TP0Zp z?sS6Q-WA9|0&?qh9nXClU)R?UtypJFvU8?uTn0_(3KQ9BQEmG{2btiAqklzLibnLd zsGqdF9xtpKCOGU+Z|6lLiJ8yE#d)YuymHh|&Q%-{U$DRfgp1){kQcSsF))%iJByP^tP3|fd{jHg< zqLi{LMRZpPW3AXQ}Te@O7^?5z`7=z37>K67D@@z?ppj}A;EUpiNby!W|Y#OdSc71p+| zKxS)x@%CHmoyI^(|^kI9(giHqfH8 z3-ZIU=kU$@L(RKX%->;*F^a0hi>xrzi7m6?S_|eX^9w`)k2skQsN-Z zuo&`4cyN+qc^wX{`Sb=oU?6g6hR zdmZBlw>s*T|B4*ZIJFRMrH=B1`VuPjf>(98QRU8I?rf~;1d6%+%cqzFD}Z*2woPsy ztPLs_d7?NZSc@j%6bOtcqOca!S$EehQpLd0kJV<@yZLCYz*-}QvKhtY#4~R_ zv8>A~sB;bmlyyTZ`JX(t{@6Bpjo<;+ZNr)9a0%UUT#X2)OX%{^ zz&{=T8|J?q$7aYf7*0m{aUQci zpSYx2d95VkLeK6y2-oBt$%eC@cRQ3G2=&s_dOsYlyc@8qe97kva5-+uu7+V#9lF>1 z4)IsP!IA^5E?yHA#+^mZ=k3?S@*JvyY1BUl^~?^SQ&4@PcRSKIauseC80>IANR$Zl zi{2SGaNp?}jgHVaZ~%4$(`b1Pu$3b70{7pVy21D3DNq_NsW|KUyJOoMZJIXIEpe;s zMhNk0{U+5hO+7}6zB(3<)KRP; zoC>^~eg2e7%adl-JS;47hqM4@vyI{?RX@%bLk~>1rX!My*yoNlEll!Cpe;*2O`_R@ zqS1tNPfUYNcz`xU7Q*rJgq-?3=#&x>3>_AT($dMA(08KaLT(aKp1Tql@I9?~@k>+$ z4P%OPgKzOBb>t1TZ;^1T##E(wnc@o&!qVtpJds(1cl{B z-**Z_mn3(gz%gb)_jL5c=RVeS&c8v7On=Y9F!)X;F{|FHAt z>!7K;!6QF_bD$LOF_3>DTd*nUlBjUvVgTgN{`R%Eg(G!QLTbVX2R&%U(>Ja?Bo&}V-?kbRs;um)V*`_%I$@ca8zD=&-O$L53R)gR3TY4({# zKH1Bf1VkM9VD5M(+42BY3#VI?NL67#ZGP+G_%VD?9+5Sd+!AakZ;&~kW{%}co&H)L zCcGXCf3lNoP6*0e0nV*;#lV8?nB=>oneZcgAt3~t-mJS-?Y8HXAAV!Bo7k0f<`2JI zO_7OD=SmUrJp4pZANPK0wYxKAx5aYZFf2d1D9awPBQPb|w_jE%Tv6*Xax>}8{Z|SX z^oAfb3CD96pZ>ev=-Efh_#ya!1$ESCZw6JevEBG#MgU2eM$98C7wpaHopxt`EV!q@D&9jM_K4K*k=Zx;?W0f)g40I z0yRgK8PKx}WafYk->IB?Vep5uF`E(v|0PS@7w$fg|4Hl4D_r3Qx3`4eG+vZQjE~3s zRO~f8Fd?sCz?Z-XW4u4t_cwj6A8wj3C9<;=abx!H#n-=tN@`)(o73mBTHzQ-_Q4p1 zVpCgzYVhdaOGl_apM*SwiZYC?aE(7s@*5^bl%l z=D59;qx=!DfGZs6m3RQV`6(M2Dl5frCzVLAryQT;Wgi(ZG)z@a;NKLIy4xg2DCs}a zQB!J6lAv{@$*L0;74Y2R_eTgj=p`fTyC(7A6qn+U8gA08r(KR=;kN!6WdvCi+1E)7 zFc}l||8#JDLcSc8iend8nSK_ePDSImk9LhZ554mw32F`bwNcr&h@TraY<7sGn zQ~zUN#%2 z2+Fa^6S!o(y)q%EgZCQ!I(dgTxg)OYnfh4h9x|NxsXx!6#k*=JVY_DJ!)0%!dQ>&e zeYcDm4;w;<8O%FeXGNAZ!S0^8XB7b49W>fOa?^fQZUxDR5L%u)DK3JfOzP}rB(*OY z5{)$LkX_O?4f>cQ&UhJqt^#T=`RJCEW@?GPexJldjDnInu&fX}ttpM1W*{?z0b2vU zmhQRz`FuJ3%rW3TXtRW4I;qjz?IgoOx9cd-GB>37$2iMtNjFN?VMkTFEwyC7(W2}o6iucd8_c+zfKUox= zgddATc)a`Sf=3zT#pnYBygnfF`s?SYS8sCl-ybmnbb%FWj-JtD?r-JvIY95)+j1i# zk!>>vzrn%-+tV+jy1<$ z&b{?f{1Tk<>DP{5uGFc}(hW#ynx?&DPPxOo+!4=Tobj;jXW{tOU+mNk_9Rg5J(4lF zecZdwkh839^V6hSwM_q-eRlK;Nr?zIaOb_4hL_AJ?U%a6lTvUaiPTI9zleZrTd5 z$8*k|i_oVBxewg=iT(Ltn}YHKO2cimeRh}75(z#JHQj4-f-m#`1D@^Rk`|Cbl@ZK0I&(Fw{s_oSu)Gr=WPKBt;HiZXTCzd?fI7zN}8HlSO@ z2*peDvX8~#GprCy!-XGqB#aPIoWUxAW_K_?cs{)vC;N=Kd+?oyG4bXO`^eFwf)fPJ z!3R7?{Yq-1A9=8em&1lKs3lNFe@H)yOHD zz#WYofX6v3UVdh1@A#W4vo?>KCEJ3H@G(vBw7yEBN*l&fShYK8dK1T-jGnX)XU!&F z3K}p9h^jP-f*A)DMM#Jz$H|*)M~IRfnja}y7Sy;;6ugmE8Um8F|4Ix=o{Ml5$Ua(Z zr89nm?wR&MgYqA%#wQO+3sawvxB$78Tzj9obeij%d>q+r%OM#RSU(THu#&bo#mIr4 zvJ3!di!vPqDViJyZU4hGAYu~uZDb|uE+jPOP-R<|YVp+e*}g>~i=x-e8T=fTWOAJgYuQTyX1UPK)x3Nm7$({{Uw_+JSyO|~$lXsh$|3pkAgA8neIFueL1gHsIy)5IOPVCWczDO<9!P zJ?+NngHuXz^PA%#qXo(zQ^!3XXLBje)d8#S)Y?rGlJCyhfW0zN`U5pVKA8hz^5Ow< z*^}**)0KVvP-aI&`nV%%MQBQJNRnFasxdypNr!%Qfe$4p6yL5Aa1}hCe;Doi9`iM= zVn(=jW8>w3ZMoqx{3-5lT$ZIoS%`K0;4fI1v}!>0i6)v&pLoMumkAuJ~$%l z>jo%D7L=kN+EmIvbhs<5w;TSpC_TcCRIUmLH}6q%_!3&>y1Plm*E8O@{eC$U&leHA zJN7gQ2!O>vp4y`5a)*416L#Qt1|?Vd8ts*cnQz8VStW|knXGtj{^ZoVCw6kGi2^G) zJ6qwQu7H(Xb_8aB0To?HXyr6uTX76l1GYlExZvG>cGjBa2#OzK$U_*9q5OsUXTEtX z$z|H?D9wQ=f|Y4){4ECloC0E?e4_~ySt$6hFv{jw{i}(CxDz#^^&lzYWn?|vj=Yu5 zvN;;(kXva-XY7X+p9wJ|&3YZIQU4Fi3ZLZ3PwFNSUZtV6c0~@LPd^=wRmtCXzWCmO z&X85}e~4hPj!k*Y5Ry=GYPC0hN9@9G$&$2xo2mioe1b-QL}llNckR;NS9#o@a=I*fK3a$LaCS7odd+p3$jD4}DF1zwzfuAcA{DM!@K zjbemc(lWg3ay#PItNEP>dOY{jBoWmA%s>>dWeV6hwGQ?0+fqz|_}BL28oqWyrvXba zlo;eYdv`h7|3ckYgrbv{V*;kw`2T3B!*+qfz0vT0e$A{*L4Mm}6i@%?9*Aby(B2;EiaaGLk6 zts*92TnXi$H}~UsPb>02j;cBt)Am<}TVQ8ZRG#Wk^TY0L#oPY8J7Xr6hzK(iy@m-) z*1bR!550EY=zxR^d=5X@^m*}*fre0UyiY;`HDr#N>f6EmAhveU&vmEMj~pXjtU2_| z9*}6AhWJ7pf|g~MP~Ia-`uI}ULh)ViCLu9yug{(e|E+X5VZFaab2#~yJ-iN*(~DNH z^ZjVcxo;@+G)b2g)<=$TNSLMFmT|P|UXfzAGSDAUI8&A5#I#D(5V}r4D8VwPRdTeE zt9e_&@Uc(~f|e8>`KJeLp5o=6K2VIZK;wf^BfCO*J%;JYo^P-Bm^_s4W{7kNoR=;p zR1QsyXMF$nYVquf*X&Kb!dkw@AapmAI|eUAV7L_9-wDkvzt(ullDg15^LAfJr7_ z$rP)n%;R<2aj8wHY2&?l?Q5622!1`w8NG)!(B2bg+*mS;tXe@i&+W)KZLjiTZ0E&f ztuU_xz2CnL|NfUNl3tA$HSf~w+x({|!N+)hlF#g0Cg-H^UcIU-Hwggm@I!@5LOn=) zT945v$l2$m{8vfM_qUenhw|tBc|-R;s6L&z#6s(z=vyMI)$5)AnAEw_Mxtkq&&x(# zSlFR#sN+y!+;ItjN3gyy)Ai06?WN#*Kp)A1OwS~~i|R7S zGRnu+pNrfQ5w3z-OQ~9kWue;*LN76~Q#?oPZ>iTs@c9HD+)H^3<)MSy090ZcNuUuG zJ&t(1GlJ!0l(~)Hm}jMK7)rl@{uSO<);>gpVWE@fGqi?`YnN61j==S|()HfZcnI3k?Fg5F3=O3a~dL? zLCzj7MjoE)XZNc0Wl%tEr?9xV8U;Csy*N=XjFDGljAQiw<$;+0q@%=>Cpxl_Nc75=Xqb@ zltU&4Vk)_!M_eSa5saqRXQE2=r~IEU2^HBN^?DkrfhZN6d8c{|Z{axDDK@I9yVu6C zr8H;2vYce8pzB%+FME>REGqF1EwdzKk|r4nO&8roPP`#186H~D;5Ws{muV}+L(?np z9^l6q8LM+XfiZNL1O=~Ppm5n!#2s+7NnfOPn-Gk&uh(=T_rp)?G)a)yrX&@Hr=qB$z_1>K+DaWCAX#Scz#`Z>h^OWhxl(>4b2a|RBb2!^dQXH z7s3O_Ap!O z2^F3nxko!cW1*-uvJab)6aT|ALhx6hJD-FgB#(futJx)J4q-^IYNz+1Xtx~S))9Vb z1rmvZ=@{Y`V*ZIF zBOtCJte)LjusQCKx2$Dy`hCz>=U`d`3`$00$$3TfvhK(BAR=%Pntnvobuy+l}15F zUT|&ePMkLSbzLg4#i--Y8S4@5{p)ScP`(of!#nnS9#Iqu^zHiI1=j*Ck0<&>JzyTx z4a}=Z-6<#iXZ&y(0+|94Q3tQkYDA>#5On9Wwybh^;_UFr)*0;9v^VTWyrmpLMFkVpXz?? zRK%iat)&hI2qlx$))1}7(n$JE6-O0;d5SG?8d9X%SK))0y{jQs|K#@`B{aYx=h|!W zgQY?*4?)5!{PTGDO>kFH%;8M<@3kLx)+C;xv|J$R$}Dh) z7%h9r6=GR5vUh1KV%pNRwX zNMmrELzbpPn(dZUf_|*R%6mn}iVcBawU0V8qAPvmGe2Qd2_MGiZPB64wcPDdWu63a zC4{qO6O*tWg`m9jZ(+v8vnen?S)p=S#>)mLA?h;)yf`q2NBIgb47{Cb`*QS(jBsbb z%Ft=w@iFwuo(BSAI*?$Im1lyRG7Ee|q)$bgh5!iPZqhYX2`Z{L3NNyCpa%1!4fZhu zJ!8r)3Z3RT$F^xE=^9-?Y^*kmJpGK#oj0U93Y9zy`GHu_OgUuNcy&=K=g)j=yJrXc z;`YxL!ko1uaj#JZuYt=T`@m70V*T|dsqK_dg}RN{P^DOEG@G*NuTC-2Bfj+zoTr8w z7b-KFFJKt#62UW#SaN5G+?sOvL54UPw3_2d@o%M;yV5(UvTg#s`w>GYy>Ppehz~p{%=tfL z!k3GX!>vtE@V-L+-{7`iM)1oI5i57S2;)6GDtOzZUiy;3Z}B0`G{lO_iXi(LyXM^Q zJ?V-{`mur6bg$i1Ixp=T<1rVobGGqQcHygKvBD!Nt?o_!+>*wz!Gs6M(71M?a$xkn zisRXIDIiKm+p2|~A-Zdx;#X`~nYb{Hv_L7Z08;{DOkZY%JsBh8ewi}rL%ynbl>WX? zMw3F+@l3eCy!imO%LWKD7}P&oi|i@7z{~P6=Bq~NsuzQJXJ%;RFlt>7Lw{c-&xL@| zcIDV7c2Udrk4Z<#C|?!mYSxN88?o6+jfTE_KxFgcxy&8TIBckkTwKSo5A8$+zF6kP z_Yd)1M+x%2b8qB8}Lk=zQ(sslpy` zcHm6F()*~A0AH=Y>S2mR#;b%D=D&?b%P2OJpXVAS=cvmNlIwt3O*J|=$(277rCCYn z>_SGw%?Ob$ko0wAy04EIPVE_j@Wp0GXc!+fGy&MNVSdw1r*$+Z;Bt-$DM%Hs-{Hte)L`O`@yBWR_NgIS_SFqrIoMA%A6 z`u}6^O`w`ewuaG!2+>9jiVDgQY+BJ)CJ_XIgl=2VRzbxU2L>S`C^L~c6HcH4vD*Qa zAtyAgfS?P5CR#{&gx87G-b@r*+yQaN& z?W&wpr;2BoPqs$8L&8>~49zvjwAu)g+~1^*ke^>$!*@R*lAQFrD(_MO*PV$pPbW$1 zEU_%4RB|E-{3AN?&}beQSp{JX()Y1}uoQp~zIw6(N7`F9`n0QkJH|@E_mH$-ZSDjW zRRwle8~Q`ewVe#Hc+yRIv4N)kyXf>|ySkVnc$2ex5C;5|Ug-5g46f?FboJmpkxfHK_;D-N=WQc= z%hdMDn9w6jkF-SP!uJ$y2!yp+Yt`~=_tD5_HkHAJY0MQ(z+O>jA%=cA5)#d@Zz9yK zOZ=?bTPFE#($>u#6{bdouV4RCF$AggrG}g#EEkoguu)`KCcq4c&7gfE_+As?{3I!t zvi-lU^|xLQSt^sj^`mRKRXpltK0cZt!~4kCRMCOP%)!j8%Z({}vHK5RkzVq+SV2IG zS`(ylJMz3jUj%-jF<8Mvew52|GL~pX1TH5m2Tkq93u77mRymL|5D z27_P2(F35m==MxDirB{3&)*&uWO*bIqfiK0XIE>6=+T=5D z25*}f_0naqk{X8tWVWyUhWaut*GCR+;P=BQb#Z3t+9(uZjo=w;k3RaLBK4OBtttqS zB3749uit&0W58O4M~hVPkVp-y^)c(G4MP=;2Wqh>bp=ZFy~O|}s3J8*9(dCpE^HW` z?j5wyxIJhQ7V@|n_*Hy}(_}6d8cm~lkm!}@{VKpP?rxvBRWBLi$fwXxc0*d~TKZc~ zw~UITTfmdr=}gs;xk(e-#$K1B`n9v&6M>gzpb6WW(73Zj$=Uhj@cB=A5I>q*wDTQ( z^)ocHj19z3AEw5Ld09Z%&P89?hxB|5#Ejesggn3WbzRj5nb z%3URDp32JRr!m^%rcdu@6IULw;7x)X?Al!dT2znd7>LizG!Nm;3Sctt0hKhiS>1M@ zN8;p`(Uy;5*X1b>`hA~%hKeR=hb#J6#7FttpYNm*cH_6+k2H$byc!_5*iD8 z@+7eE!`;u`#Yd=xvEr;xy;y^M^oS^1q$#{Tk$SpWCK0HVWo?A3^Hc4K%W;DnViekn zZDNR3h1YlwbShK(XsLP2LOl$q+ai|(;LVqi&yks7ELk=rv)}BUPGKuLa2TpB5*A=Ek)|DKR91#IW5WH(bw^Nz}I3H z0%>K`k;$kw^nl1~^NT0FkqJX`NzGY!D!CISI|u%=iGtWAP`--?V%7kN1Q>~awPA_H zbO_st-(S0osd5S1?J*5L8uIeVb~JGfp?$35xtz?N7rX`FKzSm-+KdOz4a&a%1Q{3H zT;V{Y$!8`kU7igz6V5l?FK$GPL(L)joF|Ir$>H*KrDxf*k#5qgC(?I#tjJAERDM7B}^I;i7y-a8~82 zwXP*9!HBcI>TDuLJ*zb2X(WsMp1c5kDciCjv)VoyKdmpl zgmE%Q2CLXEw^gmWDiCVZuo{hai5PGCkRUrDkvB>g^~n{v1r+J$%R%WPk+db`T3m}| z6pIo!CKR>T&rDV$XlY9n91TlB8yB>!d&CSJ8+!}h6z6D-+=*m=@4lO&r=yWZ;z8|f z!&I!JsG8&OK{dMsNZyj_rbv}4es|%D+HhpoGL+1+3=@}UPp_pL32XT=rgU5z%vP0q zNpLk`qZ&*LMvKP}&l6AqC3y%|KxlfvDzZF9z$c*dG3a>to1sXVr{Hw_u7Q%SP zY?TR#0VDtVom>S65j|wwFm}K}aK51{`b^kWBzv|DBD3w%{kXEiL!;Ha(GkKZ)YP^U z*0I=vN^Y0?^t|qEi~!Z>t}C$7vQ}@??A>%j+GVNFiK0;AUiqbv=bZ2a#aM-MA^-3a z*^1Ng0r1qJLOrG|ETeMFJ&v2eD$c$>+8txMz@CM{T2l;J3aHl;$F|a!)73f2?PPPh zIr`FdaaBvX*hB2o65s8S2s_L}pOh(%pO?BD)0KR9-4f1xB{iv~ffo&K3g4MTR{sQX^bp@O;hSz1ECccqoJYq;wi0jwN`BDtp|r7NJc5F z_25B%OzDo_ss6F6ylguCLHtOZenvxKEWURVh14ye69$R)iirw@zBLyKDvan##H^=Y+weHG zJ#NEjJi&_l>)wGlIJA;kzgkgkxDGaI8iYH9>7NWNW zp_vA|b)^}mp#$hx)^H3lubg#r7%G*E(rN+S$L9vR?c)Kd2r00#1=nUq{1n#6`J)Br zIQp2opx* zd%SvZ-MrzK;q002>GO3uvNH@0Os94wS=z)ARF;_zaH7zg3|N}9b?KMYNv3e8>`2h^Rr`h>s`ctroSKbLT+1}LU|Nw}Yw25S zbk<6&Q?{hnwiCOZXbK)(e<`kBVnZkAGh#3ejl(EPGx)GnfYGdA@a%|o3OWWY%A8pH zQHr&%EbBX+7dPvv$fvbaFmZ&Ce;AIyGZPGcRcl+EW7wt}Yg05^yxXAchTV>4Jae}l ztR4B6$>P`Jh11)Ls{)TYvo@TEJZnd`vS32&s`<bJZkyh!9zTelFFmN#&E}12Y6dNdL;~O|ZmYz}aU}hB`!ju(f>`+f`Ew z62dR8+$`>6n_Z??H?euB$GuLXx`F!R)1|!#JJBG04ufskGJr`lvqpy^TR6Dv3Wi^3 zA7i;d4^()BTP@p?#hQzMb3?!uf&YZuPtyr>AeY-)D2!DBu!;9$0z}|I<1O>!UiY~= zyaemE#;8v%bSnDzDTkT*K|gF!V1K%|?Jo=j-m6j0c(bv%FO~5_;QAn&Qxj2KNYnMHj5JeI<~vjo&?dWW2{!jgw^h4K?0WOl*9W zG2u6WK9+=xdn3n-B$fA2>Ex(`DL#AG6k{*x@#%byVt`=MwJF_@GvN-2Jb2C>a$+gf z2hI+-{EA&XY{hI&z@Wj=AW(=U4Df9Ut^8rHVVitu;!q8SD*fDNN)MvrI;-2PQg|sM zegHZJIZS*-5XrIO0KvqTe+meP8&?JCoJJP8i4KyZ7@i;7(3%Kg)b^54o}l3>sl z!V|a>h@hbz;ERS&5W(qlwJK;^cP^6wR|jdmkR!NIWV?+IIP1I4h6;A^PvI_v*Su5N zK}Q~FzN9L6@+m-bMpAt)WtTZr+p~2c0cFi^)e?uOm~h#Kq!b^b3_}-< z6CTv81ER_eA9o=*2wsB-GHFDENtr?DJWXcvRMj7cQcsI^>>?}8;tb7x=+Ii&*nzRQi{aw-&`%?+=BA21^@n?B-md(mSSx5f;rTF1 z+=L@;AyOtZMkSS~<@ESHgZSA~PDqYWgr4`bOBvvd*F?sVq#T^X&ds$EVJHaUiWET& zmlvoGe$Ey;*a>YB8X<6N1l!7C4JDhb*PLC!%P$lL$xFo?#mjt~l@w?iqDn1oT_1T~ z*3MI5UW(RcCd6??J^4mVt8$)iupSzmbgS25#phRx0rkQIE3dBL8omU-nbk^8SA&sK zTMDPgLdP51+uyHp0xH*;C5du^y>?Pespm}XEGuA~=5*vo;a-gFNG1^7Aa5!7_6Cr0 zI$>x@ANOVt6kIqt1u3}0Q%QIDur4&Nwva`U?!KU2p;v3(w@&=56k``qmW*Odns@OO z)M3KTHsqYdg9qik;xM+;$pKpO6~2+J$ z&N^yloL^4vtgk+VKY3C9VKRA4@aT{M1$<+R+Mo-`smG0VxzNC_vqp`lydz05jopyjH%<^AhI?cf3n z9fc^j^T8nTTo*&sQHtjZY?%xZMCTe$rP{GtZ@h~k7ilAyTlJ-t_bMYODNSMEtNgzN zaRq2GO;M$uBVg?kdmt&$764p<*}@uWxm^C?-J=wJL2$6i>Bc>?PaoMC)%zpngt1uW#l2xHP8?lPohao;|JH5K8E^_BMF)`tP<|NHdZYEl(2q9p z(WfDqnbK8yC%tjAbK^ogVV8s5n4kt@&7eG>F(i8{710z{kOP(1g-WPbh$mv~P~Zn- zUzx0~Nv5;HoZGs?ND&{5F3S8?E>0yjx>=F-~-n2hcq+7^WqQYxyYsdpU=hKG9a z9~I_LKkHvd(jtY>fylVpupYkc4UWQ^&{|eKCM^&STMvLwn>gYaq8Y0c-?bH|r7Ow+ z!umLI>@p;!KWK2g2Gt`n+QkC*6tVfKrMfgu1t1QJDR)4*$$}i zDKTs*mHa(r_-V>_tbl-)ly ziU$n}_SC9y=KJY4+vbj-85}94UY;9j5Zjs}tj^HkY02#rdefyu1a7Jf!c3WX9ZFa# zy}^TvD7?g86>&e#>#-1`sO(+B-o@IaCTd4IQRu^VQYSoaI&-*+f*6yENP_FknB6>0 z#++XS13UZ@NT(kJALgvG2$=#$qa_OX=~@oH9I6XE;CQINc7NNK5|Y4D<2kR?pPOx0 zdAzKJTZEyvg>Da}%;P_3KW=l_Ng;3eDU*?4x^$(PsEWc7*hi04Fe+_5ZMaSx!gMlY zvLS!Z8l7PzkS-8`=VOff2^ib}+Ga%t`&6Y~ZBG!id{yPxv~im{I|_ryqOs#NOW_qE zXQD1n*W5@Mf!R?*8c@pvzY*~&MY?GscFhjKTn4!H1*6i5S4A8cFJ<$8rFPQm`JkaJ zS3XJE91qYA%lu4kP0ce(nBp3)@qh< z&n(6zxDnl06fzR7Ftq-)A2gJ}18)e^K=D#6z<4X#lCjeadQYL*OCj${eq}JKPd~8- zeExAJfuG@h#0h3%(OG`ncHLg6#rRf;P(fVO$BRCU)+dQw{}b za)jT>KjiHztEB+AXT5ECmq%Vvl9ByXWcfQ4`yb+iBTxUl>aFCMs@0mcd+RWk`p>?l zUpScbv|YRX^NQ<-_9gD`_@Mpbo0_3}p>>-?ji>7^MSV#pK451t(@>V>5RkdL1l(gupbeP?|Lej!X?^eVW8FB>vd1HKy?d;Y?y?Z--N z8l#U#W0ode);|lm!@4t?3n%`>g)NsDz5xu1S zqN#ysTri+F|9Q}clCZf%n#M=R%r}W+XbuWm^@d?14!a_hvSWFvXuc~Si^*JnOOl$J z`i@=7b>$fA&)7)!p_)-=Z3JHC*}^g(r@2Szq-uxCAKKI#vB`tu7TB`epG1=`mHPD6 zf(Tg)?k<|*igIgEo$DRZ71OzoZA+E31EaqHPLo(?ry zw+iF5y__dC^U(5HT4V~J$gyR`d;(@>?5suj4kkk!;^u`;%Cg%Nq-fck;o1q{xG^y% zHT^w=BE(F%aDDTPuMIAveqy(g0C4c(PH>bJcwgby`6_o}eEY+jn>(zsYYs^> zQPDl4CGF?)1@8KcF^iS8Cs1_ zNb-``RsyNj-wA$n*U;RdK4UXBYVu z11pP3qQot$q&Q$?lc};xaSg96SB?@=g%dcJWT}l`ZL2ZN4{W?$8DJ}eRRI>;paQ7Q6A~etE`M%i3`F_v(=F@ZhzELXx@!c4e5UfZ8YGkQ-*@fc; zC!U8v!Xe49X*-BWq<)_S${wvx&@YWmXsoXG#i(aCe3Ps;_fEWhC_@*3-4J z^{asyBN_qixkpp!;gEjKrOfqoBdshKNQXUsWT_b%iyUiySwW$|T-U!X8f65$Kb`sn zMSQe!ZB&e>NpH>^${6pf;Hk6WnaPq6g=og>Wm@<5iZKGjUd!OxZTP!X)3%#)9&)MW z6h7t2@D9f4o8~8-62V31t|;kjhJJL3{mq|=G2ae zfWI5#CO{tI4w+Ac>t~IcGzDaoy%A9H#RGOHuEB*9=OrIy=v()t^Oaz;cNIq@c1%~B zB46h+dRI&_Ceg+y8|29{YAb+;%4&;kHUQUcU8FO$?@!g3hDZV@<0GOC@_Nx|>{v^7 zU5ZovfTl3CYmc`mpN^D+wHC*4?YbP1GZOZpIDf@6QDsOo1RlT;Cgz)K8 z6-&;&34U8E`*tp;`phTnv_fl+1SU-bZhHFk4#XI{M1!z@Om(hlgXPVTd-qX!0tv-+p)4dF! zC2w3j&sLvZMsexq2n`j#x7C8Qt-$SOBIobS)W56Dc_MKk0$t`! zxR;G0th626M|qKXrm@$9;yA9+FPFHT@o3#yS}hB1JD=2A%IWy!sZEy)a|7>n>)!T`P=U-U&yv8n{Q1?z@-pUm15fK4499{AH*FE#k6HaV$DZS%1dJZMB zu01MCc!QC)aqgx{^b|H1k9vdyX9v*DnO38VjoTIRM!&qk*iLVVXkyuW=nd=wml?7( z5%0J$a zdT%B&>^By}+_(-n-{X2TP2lM)_vtE3f`k< zPpa|s`{DY&55~sOzJIPKGB`i2AG1!K>669m0{dbsQ9#_4Dv%kyukYBJdmbN&&o%Bn zI?(dA+Kz5r+b5&EciZsKmK{j48OP)wP8sh)|+sIT+mt2wS>muK`7471)+S>a~qza)u_0 z>HLBx2#N7J8nnK;-^6~gMJA?GG0vawNQkekYtv;RdLqihgjP-Sf#z#p^1No!h0%%# zl7Sy5mfzVW+BR$4AUwzU+N!ab2VdX;%&?&)eb&locu|BdW8op__9qfV{?7wKeCC7%xQ98q z?u7lls5_Y%HvwaYQ>Qp*dk&gXvS^Xe=a*@tBu^x)8TVdy9*|9WJX-x4dWsGmV-qKe zS8=7t6klT8)kR|3P|@@^FoBR+Rx+{JUifCuAX;qR|-8Wa;hzT*)n=tGLQbW zl9jwO(vCveczDKw1{?Hm&(&an0M>>M~sn$E^YA zEc!UM88bJ`b7@-aN|ct-0m5VBh+eVxVa95d%XZ|7L4`BVy9`N z14~)boTby%bziKPyID@z`4uh++O79(r1$5E0o}W3`5719o}QsFjCo!0Q<$JBjDYqO z{irixfP40fP~W(7r;JWDxblhDV_NM2N$x@d7E@+IVV$T18F_%Vq&Kz*zF|>Ih{Joa zKc|(4n_JAh8{K;F`PL9E;91AIf$-ox!;mpxtH-7^d$$E+vnx(w;x)Y?Q~#|bk3}xc zm$p?ut;U0T1wYf06{1@!<2~P)@Ad1VaJ<@8E6W~#m@c`=O2{3qEPv*DC`Kw~moaPe!!nwdD_`x>Szq4%vcl? zsBpdZWV3*{mEk!jf2cIe#E+&8bL+CM1c!gW)wogy&nRm*|(q9ZibWeBa%0gOy zcq*g#+>P=NRv=>hI#>@Dl6*Q4-CfU|J{I)uRG!Jnp@%b__ij%;O@X!40i`kkDImT{ ztoc)Fwa~@>^t?2IieBL&dP}@;%}*9Vu*7ox&OE#f%yO8zuDy3K8d~Z*8o)GaMtNAR zg&{6q(Br=MnR5nkto}|I$wtg5Jgsmt$FDum2Roy1)vQWi9Q{Y1*faJ&0N+uYdY-+| zYz>*>7f!uFTzJ|Eq<)y&?$a7}t;`%qs4o7*Tcn@eR2?|j3LH=b>A??EaIETkfDHJZ ziof_G;Um^%4CvGMXjLqbdbN&LP%qsFOqu&9tR1u{rFr)NU3{+T57G~~abR^d&T8(! z7_lbbs_e7 zbZFB}R()m<=W||U3}P$CeHdb#^t2iy`AK3gTG3+p0KmqCM@Sbe6fq)oH1?ab3a^t| z#=KF}%3OxAEN6*p%KrXVbC51N?5=dtUf)d}+x?9%NQb~C!AfRma~?mvwHS-mua(hu zs6`ejA0)H_8SX6y(yvKaQy=%xp{FD+TTgxd5&W`p`~*qD(u3Ka2w14#N|TW%&X2Cz zBqTj&{Gxa`)AmbSr=P&$cFr^sc?hotz2+hZz+U9uUinhKFeRY9Y!0_q{d4eHg_V{Y z!bZA~WKR?H=?riSbJS%7QSF-Ly8}2~UHU8tw7THL?Zc+HzWUDT*<%uyLnTy-6ZPR+ zV#?E{ekn*Y8t$-|u44Cv8A||L>nl7PK2%EbkJhv9+5P@Bx3pJdThjjMo}@+l!D<_WF+I6oh$crTF7?9Z^fmGyFlSw-i3x&`vFOxL{P~*ERbR~EDwCba zdi?_UWc=Nj#c9x8k2@wQ_Gb`XFsEtdRFBLD=DQ%anvs~UZg9RHydv(Gt|{-RtNogh zAzgBB#8rD;VP=6-z5WWr&J>OJs4EL;g$`HYV?$_Mg~?=3bL63x;#W?}X?@2Q?fVG+s9j7h2BUaE1J>Q}3 zEY$3-{uT-OTy{SdFij8rv15&bwnNr2Cu89YsUrX#qgQx*{k?$}WeL!@Gv0`-H~z(3 zKnrM}&XWS|I2M3(?&>aC1F-Z6-z9$8HBF6m{>e>R` zl)g5YUCL9A2$-D%(tyD~R=8{eB)FjapYKN5^=mZQQf3uiK7(auHGrE8jhxV59(TH{ zsve~wEG)>c0BCZRInzbHzJ~el=t*+S{^)PjlYA{z<}`6Y(XgaO>NW+K+-p3Sd3-WH zZ};<2AYiEa^{Of{&~_q3VS14tTMqtzI)l(<$F~qmUXlU-Y6;l>Pse7E!sgc#*Lr}) zrVQ_CV1@SxxI2rcD-ThnA@nT=5EVz|t_z|Yn}a+|vdV7X1hj|m)C>hj0w>I;^ZZlctJm2!rz@OS)c6qygjf)>aGpSDtpS`?i59WQ14TK z`JMS*!tk4ejtBt_fS1D3u&CbknQB%8o9-`^VZFV~fE=$s6pKn>5eGTsnASdCp75yK zf7gbTd)c2}$ap^cC!0EM*uVS5Z;y;=K^nQ@!GoZX6A=gl#$CJB!WhAStxP3Oh)}RJ zo3I{stmLNbxmb}Yz81eA<*`L6Z<8=AAQym}fF0tYghGM7vnTbry_G&eMK!G0b&z}v zc>hKDot4UOvEfA=;9vD=fYt)YCTU`XrrCVrtDB(GFf)&Hm@h=71gjlsVIg7mpvYM+#ZqfTob<&8iM$-KdZjL>!@i#k_v^l#qmdC&s+F1!*SfOAtS+F!;!Xn_<&YD!FZBfkJ1vpD#*Vg-`nMNP5w(4>x%t)VYxR^ODOUNG=v`u zh|9q*u7t;00Gn=FV^J$Abh)*fP#bn~;vMRf!9(#!vz@D7{AAJYymO85Uf1^HJJ-F~ zi$!Z)Q_Fs(RsZhX&iVKPfwzAYvx`U-u|Vyd3VgY_%_waic;KZKiPyIAia~(<{-6zB zthIUvw1oG}xW=RFHMy4fos+k{Dc?vBc7Y6w?BZRM6S|Ps@K%#9^@^R7jCvGOc-3r3 zbimt-8rWDed3}*tAgg>F=9}DKCa68W>i=y|qT}Pc{$qX(?+%x&Ikfk5`-u{vtG7Qd z+uPs#VLDHW)}pX9u3clTzxK4FY|n7WGFu(TUW6K`>!tjY_tw`Jp50}?TKH=L`6~X~gOb|(rX4X``SYi} z$yeph+F`Od@5Y@%cxtk>QL6D28I!Td$TDr%lT7~l7q_|l;q5<_tV;fATl>Kh%@unO zyov)kDc`5va}(s`7qch2_Nd>#B2&7jw_W@jPyo5SV(2HWJwpL5I@1nr{m(p~VUp%I z^Qz2~?54-eeD>fW<@6a3?|gMbvYl2WvFoz;toc@WwAXgxmL%QTY;Pn&DlwZOd99S* zEpSO#MW^Wt)4Ut498m{yx9u_z-Zcz0?wW+rNtiRH<_36-N&g<$lLUXm4cCu9e&BDk z;l{nk&-}M-xY_x*(m%h83~HbMY^7PLoOi>w#65_(Q~w2M+!TGn1of}Af$o zr|u;8dtHhaU&GG3IvUcEYAb22Ia|96vpg%z$L^((-cOqCj^@bLpKRL?m(2dC-E*Vq zaj6e_L(;lzW&ck;&M8xlLaYtP%j5wPBzmr7BVv|MvCFy%;PH^CCSmNlTc{@jZ^V^V zAtCB<)|36-jl=MI@W4%QKg&X{rgtOX^a_5*K?%gBF2_VCjOFXD`K1az%P*eaF!6hw zzrnS?yC zsUA05wAJXar$b-!>$o6cJf_yXAV>Qa^?ZuZ+yBwURms&F*ZzyO__Lo3GKEwBfk%wm z&RX@f4E->rESv9d|B$$+YtDNpUL1NTcboC?n4VkUSTtPx*=_Dnzb4GDK5^OPSb^J> zcDKg+tN45L_uIAS{DjL;w?#Vk{TfHLOp5;9^s|RIZ<#B2kSlcl#T~>g#%flPdLej% z)|Z;mwQseVrz*^yG+)J)9BpxnLoW8ob*-&a3M_wp&~X}iVPy2T0qb;t(~c9M(+h^5 zwLrlGDMldEUN#PHNJyCAv)TNu`EZhSxC-8&|Bb5`M1FMSk0f=C@{wE{oKgSnl{<1?d^eE&ReeK|$$JCZ-AhsZ;42&fNZtIOBdJ z`WKU10_f z;v8(CF;M);9Yg)+kk)FtupAB8d;2l}jn}Mv{5L(k9{Ko@|JH{$${rU!kb+}`T_d4H zSJ6P2k9nndScYECFY!PuAB9vR9ORHjc-W8CTi_Lz_d?VSb8v^cz`l8PRn$mEJ|Yft zf{Qq8;*hsco_X>rR(E1d8lJ5kx_r_`t!S)pyZzY|M<4&qJzK{(LexJ;qzj_#?h4eOk@h{OyL+yGRWl-jR~}#d@xR;bWi9y+?oAi2d|?G|{B9J?}@? z_Rim={smoRs}AQ04DdkAy;d;MkXIFG=Fs`-hPbDr37m-J|A~DCHIH9~Y~1e#zPKdK zK;~4$P+p*H_aOXD4E8>_9oCM%)YK{3GZP3@d zu=-hH(4pJz4#Tjw%M!gu)!zEvHJtALBEQwJ%H;2w4j8r{JcyC{e}Ap%{n%=2mb%2^ zMRcYgR&`V2aXgV`;1e`JJe}<30h0fSRM;^>tY(>1QfS5lc z#HS-}75g-XpKq*OWVZ8GwV(CYaGu<~Fr1xzfpb$b{-VOGOcIgLIwovTb&(2cKj>x! z*g4>#vz8H~D!wQO+1o_UMnmpjMoIg1lglc+M)^#tOO+(#Kn&`6K}iTSs!VG&fIr+03UJBYJn&A2Hx;vn2zof zUY0BM_iXZq9l4BZH(O+l-Vh;Jz$`+pjP9YqLF=*uG2RTl1HXe;sq}K-@2_6@V5nDc zfLSR&gSJ+4Hd4D*Qh2r|n%wqYar87=BzR7<3Wy5sU2z^zyx~~ffnOUkpx?ZQwcFYh zu73*)om-)ivttyN>GigE3NEb!$FA|4&`(dthVbVIZ{)e{@2BjL?{Q&uf)0M|VY_LM z6g^{(HpYgd#*)U^9hD2EufoP zV5$pCiGQelD>J1vU@k5Zs^FH`AJ*B^6TE%1TprE3jz5dE0gaNYkHcwbR7dU&2vBjSgXxrvJM0UFh72#mKVc|;1`CQd*^5_9n``QW$w>c!A>^U1R`{Y zz*`#XX+#Iey3pkx=(QU+@K`-COa1A&6GZzSH{o67*mrjM2miA2%J(n;v1O}dBLwn4 z@>eSQ|MT((Ab?`gLsTFTWnj4pWH%%f5(x2z#6Wz(6$K`ca|Ait>{)LmH%%J{s@ZjBKT8^PaDkU zKZ>vX&F+1Z3tapU{QFNm?>`hi^pD>6S2_Q?B7_0}_~Zhz=kR&VVQ)WQRj{i;An#_ zfcHuoh_V=^8(IW^LHjRZC0r21R{{v+3+m99R9~So!B-+BRQV_3Zxo36XWq&RDZ^jk zLRpIhU!y>57U;D>=6r=;v;GQIz9JxyuTfwMWu($&EnF8N*yM$<5-y}##ASg%83np5 z(3kud_|LKzQYi@*NtGzjeXZ z*jIu@R2&!uT_92-L6-%3WwoDwfy!$6f&ObUSk@N=1XA$j4*D1J3tbKfmFe<9ugvG4 zZC@x~NwAn+iGu#cATXe;ud*simJ0!P5qSBUgY%uE%nm_b$9b( zUSBK^Xm8M^@HGmI_-b*!LM4&XWi4F)ok{wN z{U=nK7-d)q7s>)5=(0esi~?O2=>KUrl;QuTwMv3T(l1*3)lB{W-TeKBeyHjN4iJ$G ze=Jl%<|%v8c0(l_7v2B#MI|4;D*acejQeW(mGJ+(RsY%tzrrkK6+xG^aQ&aY`1h1S zX(aMN|9@&K@}K)6Ock8{t1Qll!NG6Qfe;G*D~N_p;^Fs??d_Q(==94w`z>>A5SA)MBo{jp+lOD4%1}j0}Wv(hreUYJ?DG&?(~@)|(o%n8po@ z74^rN+Dq40^5)ROUmMmr8YDSbA))<@Blr*Qt1Wk(=VCdp(OngPWcWyfrP+GYDVIo- z5;HZUnGIqu&V~^}?5QG3FOA!e5$T7CB9Ib$-mXk6&z3tuIEIX1%nWqKh*0E*@S%+2 z)TO7DE$_a#WT>CX#j)EoAG&k}a0g}Cl|N%2jQ!X~A)?+pmu60xdP<+`RZWFN>YmcR zoPKdd1vBacHO^%m6&BaO=d*|B?;f63*4c?t$8lrGU;+fS|8nJ zpH2yGz7$zi13z8Fd%`jLERZn(8F>SR4sK9@Gu3yh$;r&&jGxHo2yqALTtOcY!Me=g zlly^=fF~a(h?{u|Ekb3L(rc*N91M8D`gW^zuyhZ*o{LJ~WVtSRfQ%6}n` z&R@%`MyY$b1M+LGxp~H@f+t7S9Wbq#?I`kXMm^Z!`}Vng z?Ckxc*^bHQ5GXNQFNZ>yS8eKOE0P|rCZ&^bBzMxO_-1%C?S^{eF!Uv-J3#+kbr$LZ z_nnQje6gnWhFNhRry@d%nRwG)FBIXE+(d{?d1U_^ee%xmZXP^%RmCqKEN^|(H7G75 zf~TJyHbjK>!jU+LRrqDmKpXE6^=f}P0K7ULYYs-+vvZ#3a@js6}o19~M z5wD(C8&L_YHp;GmNMd87Nn~#yy*l<+)3qDY^A+hiY4y^!-Ow+#!P-@M%vY7MY{@&hC+?Ac56;U{NdA z=s*F~Xd%~E*a(yqP^^|r5k4oSdzlm*H)8{DZr*%GYCXwc|Jy6z>`o%esf*zmNxLaO zB6eBnFzFY^$%slR3+gTNme0=xdKsT6I1>bNDs3Q&g?CHa?4ZvMP?=e=50UjW=Y;2H zoC)F`&Y-t8!?XfvnKPbluUn?HXh+X3x#;z>hU?eQ%Hx{0Qn0WoRW0c=^YGxx*FD)# z0H*L$RinHX?Q@i(*G;hG4Hh4NI21A4a^ZUj4E6^q1my zsvHrWwUb3*6lbMaLTDjiXZuu0d{Sxzeyzev5Ysg8+>ZP2UOcePqQC`L)ywpTN}FwyBWwp@60lB z81#G?>8u3O7S}^9E|XOx-IAKCg9i4|_1W>=wNW z1@%%t>`oe6@=9%*+75F)8+?#_F_MVp%@kpGLR?~H0H``*5n06_x*1?iB?;0R+Opi%`A$AU8!aBPS) z!4WA^MT$T!B1#8E1sh>R#Zjt&bP|v%O{F79AoLz;AmzR%^P6|A{|A?gFS+-gv&-{5 zd!MttW~l~qv|x%ib!rq#6dXr21@EIUTB`{g^k66!25l9EcixIE_<<8TOSCxI{f&=y zDL9EVz$3DjvydxXz6MDoeHGb%4_FvR9$46~`XXklOIEA&IoriRgTcWy?yes+-`a>S z?YyJ2sIgluMu2_Z)@n$Y&oAS&@wIquTB~Io(yVa_K|)OMwJ5-H>vWZEuDwJJJ`(seFs? zv^Y+iA_ST=P%x|U;sKrWhZ4(&z&+YOD@=H<+$kA@0!@vOVUdP)TPie;>Dt414AVmt8e4Q6*zFH|*18}9^=Kxu?$~@seGXLi^~H6i;(&9J53qvE+tedaGi-x| z0LM-G%4hZRYpA_~59lM*eCC2A7!W=~9U@OlETMG4hFhJ2BlUjo>2Vzox1I&a)`c02khtqseQUZt9-7?-6g zv}#Tz74lh~Tt7a)k;6;RrF|ra0G}G=Ci6*rnl4mB-9TNq-=D&{eqv6lh|O3NiGD@0 zs@SnMdfjg(2*+X#6LM3H38M+^>b` zBzN3&_bknu{(1dE7P%Fhx#l0C=ZcnO4qVN07lxJIZR4zvxx>Xd_1~(gMe4aT)b7=U z52$P{Zxi~@_xuu}ovjQ0;u0<@Fcox>0<;m1M2|n-9p!x+gT*5)oKJU#Yhwo8h41BA zrVB?IA~_h2F8tKD$4!0l)-5e}AvC=*EWue*Oz1Ucos}vACVoyM`IG_lQ3V_#=#b^hk3*yX_y|05G_Z?QucBz zvgcTINAwO_j{d`!MPKvxt&(yI6@csU+OmP``PP35dC?{zXj*licckv^qc7O^wEgH7 zgz(nfpkwF-Num?<3bs0#mLfg$%(F5o>*TfaFjc0!Io1m}0Q`1Ksh&u%8f7)2;ApS< zL2Paq4q!=^iO3|#mci(SUgxVn(34$r1?SC}R0bMg_*AV8$C6!n5(SKPK6{BZheHR7 z$pjQ6nYElAs(~OuKn0miK(a2-`Y5mK2UULLquW_fkuo+7pVkjeLcqh)gdVmz0eF}; z`dBdEho0uN*$_7bq`aFEdg}ruE;YGu^S^1+{CUFK6WO6k_2W%zZS^7i!6I~kL-v8X z*XEt5)|~k|LHk^?Acq6Sfy<(ksQ(JJ4*DXX8F1{`MxyLSFB#vIRQ1zrw* zX|{*AmPfugNcXZgWkHerY7lPQicpuerd9t!s==y#ADJ!u2fTz0uy%>=cUmYEdRHSy zHUZ-`D-7&1)gZ8onKP{xXdCKmdp~L<8qL=b47$#GxWVY5IrR5OTnoEIB@T%@*omH- z9;~O<3iAC~f`NXr0%|)uSPTBfp-SAM0QPVSpG*}5H$T~@d9$2~hGxq$yS6;%EVo;< zE6Ch{o-GTXr4maCS|Hoa(H3ZH6^^JP*Mdi{w|?z_V!7l4ed}y9-=E9u6aEqxaCH&0 z)g(-Vz~T<-(SmBtlD7!jSAm=JXr{Mry3abeLLIsz$8&9}H=QRiKZ0-R5*kVe0Vbe< z&5BShYp+?d01W_Bl-DBBW$rq-NCUlNgNHU-d|+;sm?aNSo0oT!jVlguv*JHUE-7ex4b3s^5x|%Iqr^Q8`SCyf6*U)wiQc zYvaSzm;K~PbQzTeqkEo4DDAsi<0yJjC1voOGUI+gH3R8TR&Z^Js@pld4i zZi`#A6p)H%*tB4ZJ=Rh^Z5WorFgHXB<`ROTcj$3-=5WD&$e&NnLJ#4Ie0w$;i>C7} zW@!4?t#=a^7KT3M1(>fZyxL=BQQzu%E^UK8jb;clb+HAPx;WC9SA1|xM8~YEQ=tY1*X9d6J6H*1bwf&Y z_(4v9=77W%QIypwaGoWvgJ`=xV*^4k-)J*8DGyE16zsx(=|pV_&=PbOdu)~N1Ib~D z2W+h?rqHi~wQ013V}a5W&}D3{Is@EqfAdDjPm{Q4k`7*H_$wH5tjc^9p0W^eCO~wr z3VM!f03sbv_1=2+yym_c>J-G@53LJ2_lYyIun%L!(@Y=(Ft$O!)r0ys=-LAFUX)dz zkT7J%f*KC=uO(8$ay-`~KH=ndYvCCwLo(8d)l3;P>v%#Kg2EZT`%jgnyy)cuXz3IM zH@g#%XV?kWKEI$L@)Fd)LX|@^HqcNWVFleJyQ5|blP?d^^ShKD))C2!`--0~gUJVA zy^YkZs}-8XHDngZ!l*21hjAIA?lptJUg5!V&vT)EYszO#qBO%E%c!UJPGn0Xt7IoA z0_}j#qHS>~ZSP-yNTQ7xj%~5NOo{kl_@3Jso;%NR0V8c9V@T15A{Vy!E=!2=+L-;c z-j7!TDrS-|BuWYhG2+Bo`;e;}Pz^kikr6jHOm>4@r62&iXnN2cv^~S(-U7A1*jraB z%o|xg$(fdlcCvKNU0d(9qgo1h>j{rAx%$5@J+#U>TzI^L>-#L;clnNbrHx|PjablN zxKipLK(1{tPb?1GPZs)OE&QTVfdLPPhxDX2sj z`3wWrcF*ye}3)CWMfF zMKHz=+&%_BH}>1P7 z&>(`DpToeX=mLumt6;|vu95uOXinn^UIso<9@`KJ%nAX1jZJpqc}siK96zOjWodzI-$r~mm&HyELc&ikM0+nQNlJ% znlhyWRl-mRuoDEZNs^UznvZmd8lzn$w7@#NVy=9t)oB!3ym&VNfxIt^epCPNNr2yG zEGZuoN0V0I?dfnNX8R@So)(M@){AYphX74OyTp-IdKcWG48`&l1nmkGyV@YeviU-V zEuL8?V(IB{V5{#!_@t!i(nzDMA*FBWX24OP%t_)8qXUDxmGI2I z4fbk?6e2(ZlqqLTiDU3q{{btg3-d~vv4YVux6p+;#N+h$x7rm;2R**)Ziv{ZF}g+ecdv(BZO$0d12`~a%fh_SWzldx zEzFIm#IrbxA(D>eh$o)VMsnbq_t=>YsM&zVKs8ajr187W zoqmn`c&0a!UDWRrV@RV~NP)Dc%3lM%0K9_)L*nqHj)yOO?!%EC$>j?4Pp|^dM4z+$O zL}LX@&tIE-aKPUKM3#THo#5J^T$Q>-oon~L`IP?2SxUoew?>+qUB#UA0IB2aZ#*hf z;-KuYMdb!byi5ez$br9E%Mve25$)6wM`!|LsYWDY6OEu)v9vCB=LP#($8G;u6st0_ z4l#j^|05-L$>PhDbg)}S zO}sBoKs)b68pyn-C@XT=b40#gV}z>!T)W6jkC>MJ*gl4ZaRZ1Ra`Yz&_jY z5hOpyqeLcEd~CJ3K=zZ{s7(bkz!#cCr~b0%DkGP0lsxF$;J|Z}T8JYEaDh6O&*2iy zpdx%C4TKPgwM`MjaN}7Sf_sPz85bU3`Z7gBdCotpG50_FBOLGLxUjw4ZB_YyE*3&n z%?Z0=NHIa_x9nE;UB9MB*G^oZ<=xcA9+Sf!10?% z)6l&k;Lbbgf_hmt`dc7eNh1D%^)h56%lq~Wf8LdI;xUHT`(}iRYp^SpGrQguO92A} z4cD;W&BpsyC)cm<3&$L;6)Clva)WBl4@xtqplFPo;CQ%#fD0zs!yH}68h1<=T78BZ5t?TQ^kAuwGLbwx6^T_S#J_SQm>=)HB@j;}_?6@F<}& zL~iW{OpfNh8*!%=DXhLv#wP+CVF(R*nDCPMYGBz`LLXwac)-%##C-NReB^W2(A$_} zZ8BJ*!4}Q0&cBCaf-gTk)ZV0B)||Cvq+YbN60pRP6Oy>Woh*O?P{TI)oz_-(rs87M$Szr-<3yhALtP*60|<%L#f53xgMwC8k9{+F(uyYZ97s_GWE4 z_smit!Gf@HzWYl!!!a1FVW9W!;HB6&uwsnkBBZ95Zp1yjaaMgbe24F0leX+f!)QrU zo|fH!x>)xIW?57d0_Cha;I_S-i=kkoae5(Ctc^_L8YHlmCtiMn%?$8gI4@(gf5sMf zy!kB~C=Vj7xh!A=ibwCDpG$E0s3*F(M0}VITET4SyB25*$^NQ5TOoe1d}+X zehy3VLlo!h6#+C&%oABg_lYM40*A0BSXCk?#vmzDG4nPs826dYgL6H?-({cv zvd|QX{r1`FR40KEVUjWO+fXM+lIt^m;mOI!+hy8FTT+Fbzxv~ zFBfQ)P%mHVXm~jU%A{-XG(T>Dya-3W!yHqmki~r=MQoxSK5hQ* zwrt}tZS(sH)%FG)32cvZVdT^caM@lMW`qLa>?c!%!Bn{J84SI|NX)BIY~(OheX>?0 z5_9c(+Hwu_7Ef{lh>yqv+F=YDiigNe7G%C$47^~3JX1(Zq10g#WqnUHs4d&ZM*wQO z#gL(U@CavI)ex-88HYLPRkZOsikpsqgelfV0Bcb|FREC%&FkP9EkJ;98zRrT)j`Fp z0ITaFq4>1*!75`$u=Fq>28!5*u_>s>P=6c+x;`d!YD zf)~wOc(nKb?*REocGzJK>5`${DPg23)3+2R?iJwfCKLs95<`6RL7V|9UAZ?Vzoi>N z>;>A2C{?gNt|%}EqwlbZ>vG z4o>rfuEn$qoF$2D6r?NzbxL3i9?RK20U1d*R2zK$0=8VbeEY%&xl(bkl-q%D_+`Kl za+$2A){1N>gOs^X+_JPZ2EauL^dDFTy>4qJfhz5zG&@T&*&|T&#aBPlN+WpX-iDL` zP!89u5xpv*UrioO1h!85&6k=R$NFBU+1|5#7+Tx{0>GjaP(5-|pdm5~Rx&rAQ4pLt zuDOas3wNYVUrLsySWVSKI@m8+0Pd5W#FW;|rHJnhAtRg-;;Jy=yDRi-Fic2L)_XVC z>r7JvTLI@U=zTN&&l$+I*`emr4X{1%w13WEBCDx=?a?qXn`B>Uavqz=neT$P z3-+xgOhaGIDFiZ`yvql5(riD0VsXU2TX>JPke@90%;UuwUhv)BWxm>(S|#=V@Kk~-5XMiN(MVD^Ki>z zhifs##*Bvh8q=a`%n_)3VGmXJ|G%_YPS{~pMlF?wsrf`T!0Vir1S3wloSfpIUZETq zM9;*`bU{QCvy`eWC^M#jDKlew#i|rz3KOEIEPXnt2n)lm+;eWYt?G3Jnmg;k7JTAY zMQ94G3H?~$1C#)r&8QLxRpf50fVb4<#GzHII?P9I(b)SA!~43UgKWjEC>*@V&1w&I z;<^fg-#gv$(cUeP0IPpt~1bE<|STZsV8Adiu6?Wq*9! zWbNS=m^GSze&ykrQ=9a!GL?pukB#dkZsA?XVg%?S-6X>^7Dw<7 z&v#tJQw~g!x~|FcbM#!Hf~4C({FM3VuKT}V2Ep`zX#}tz5MrcL8n6sQ$OqBl+H>aX zp<+Em@i-7?8<}J$czwNi6Sp%%8SC&OjRAiUyBQ%JI3wh>K;MfP6F9gzzsP#=&gsQ& zL76wwI1GaMt7Oe;YTcI-BS>Hjc}P)!oF+xg#_r}>_~F6iExZF8iVB98so$iPZy-+f ze=ls-y!s!G7nUG4+hUZe(8Ib=HV`2%%-NXmF4&qX0D3yn1^KXPg3vnjI7-{^@@J;D z_X)^w(R`J@k@*dt_-=XP&{;b$cj^rzh`aBJQ_tGnHR6G{74=bv%@KOYcni+K`;dPov|p}jct31%W2ex=N) zrglNw0SG_Xv18@})x-#y9zT|W&%MQ27&3JuBtVhXyAcewJ&`2a&A?y<&*CsvTfMWvm*E zs2b6{YWVl1zy76H89n{9=+$eS6BpnA4%E1$7TAkzKMj30&-O#k9UqKCec6M6c<4dS z%_&MH+QMv32C*POl~IV6(0(XV z2&lw0hXo(&&pa(s{G?ar{+U)EV;rGh6z#LluzSxEVA3_iQt9JYf5dEzK zZnLvzRp(g|=x2DlnVT9Yi^al;g844!Pbr5<^zNujvolu=guhY?zw+m(G8_8B zI$+l$9h>o$NYb{G`GafnbMJ-qb8-**Yk-uhC(vk^ETIsrheU;2V;mYE{IW1h?S#@$ zvMD$&PZaK>A>#9s>^dl>7SCN)#pk;9g_E!97 zUm`%V`c?{N6VwF6%Rc0P5ZR*2jTykAFQbP!^LB&%S*bLj5!I^P;ZL*PS#RKp<*M%25ZS_Ge(w4S3sB31u7(wsp^0V_~tAaIPFUi5Ja_hEQtCduVA7H z`_+H4A9&UA?FaOOlVe?!{z1^w8{}E4zZwy=cz~_ki$%R-Dy#16?DDzTbbU`wVQ|;GRG-hkR=trd|JeppA0YKg z0e$^f#%r`m;EYeR$9!o)W1`VBQUH}c!UUB63kc)vACicss*JjcfEvuT?DO+&qb7Jz z&N{5YwBJ|ySVTZz*{Heq$MzOq?jKILbaVl<7918(|E-9`cAw$V+@?!!X1m*TLPG6y zx4?pvqYSthXQSRNiJxP(&ks2<0v)(3sr2BYF*Lik_3P7|PVQ156N>smG8wZcmB#N? zL!Y>*fG$5TsVh9?$ojagY?0w)LvUoF=)P>OxQ-Lla~7lZ2PS|OXW;1V`3*gXxmPmp zfd`EDA?B?jr3*Gx-=H^X0!t0SgIS2xrK0rw>7LhH1-pLOa&lBDK;{H0Uj_kD)!3!q zi%zBAfLx)|#+0Mr^rUPu=9p$w1_q??f}1){?-iYDt=`kEocg!1as=1n@~mPTH!Ado z=*!kEgHPM|KLo#k@_l?fLJgVN_`34Yg-z}CYn7sLM?UqQ<+q#>L!&^w*7bWdJYtMg z1H5#2CIf`M(#$@vg8QCfiu*RP$r`E*AIz|@LaiE+k?Z?hNR)He!UeRG*0(T zeKiD)c1sqtDVknD{k!4wvj@7f{oJ6>0{hC~z)U>2wj@*Rn3U-*VS)i#xebZ2BBpio zHe1#V%d}cIMuK-VOLg>Zs)Nn0m@ojC4|z6@lTc+EV(bIfdxZ6t9lq3eeXoXm|9WBe zz>cRmwi)FsQo8TP-9wwboqTLaQso5scx0LCFXb>=v<28Mpe3V_t6CZ;YB_-FkfM>#cK0~d z6hWMT&rSEA{{h5#Z0XI}=y$;V_oDC2U^r#Ud+FGt*_wMr~6%Q%kQyH zv!I!otDqO++@y2{6XVLm**AI5YaCsP%Mm(j7AbA1DYUoidACO}_QC8U?oyXsch4F6 z@Fos5LRb#60`KirNDI(j71-pkpu3v$5);anIn%$?pkj71H^St~#J|O$9fH?reGKfi zgz}Xs--PAeSrC7nd9*ToZWnw-Dy=a|(`mRSO7XzWnbSPN{%c=I3-sg3+PXZ??rgQb z0+;afS=O~+@WkNT(;B&Y?maS6%KIY=H&&+8?J9!IFAbFXRh`c`rPh&c%f0sg+r>&Wb?zY5TwWnb{8mg}L|Lg>RFcoq%rwAzIxR8sqf3s9G5vZxCRDCXu*_oNft&@#?odEiotus)lz2M_8R z^FGiJ-4F_dRM>;#Ky}h{?T9R#>U{s{I*)ehg>kJJiLcZgNHqWX$38P8jzi@vT#m$j zv7lT>*2L|I^1S)Jbp3Z!m!k~XY4C=fl`*Gv#2mWIv zbJ#NSk(@A)0STx=1VC|KE1A8`Ot@Ib?_fnhKhH;bOvTOtA^06H_q1DB=SrV>sN-cjquF>ze{4 z1EuR@gJ3-bTwZN*7ab8Ffw9u+Chu?yfs5%N08QYIJ;pqDO{%mfPzvGx4e06jaD1ZO z!{(AU;fm{Rok8Vl5eHA_7ZopDonG{U<^ghFK>@c{j;o0l`t)AO*}V2>sqHB>bA7sx zyIj^jM{^EDN8paGDE>Dz>RGyZLcFkNrU?aXYk3X)$D&VTWfYDb#Vv$jhD8>okI5dp zD}6T0TJH^Md8T*Ys;QFnK{7-ojY&R`&AqRYm~`LMJ2>4CGZ~ zt+?;1N>s`G_v=>5`1M-p4Rxc&KRlAkRP#_uz-~UO`5bqc@Nw3Bjq2oSpv?&LiW3v-w9p zjW-6V{k$2CSdU&gW6^)1nKl#L_oC*O{>JNp(!vi*E=iw@EDk&dLBX0F(m5i!{MQoo zALo2;dtH&5y`v?+8hACQeAO+_SZx~{M!)=hNY{(WND%;&X&Wd4Jq9(QdbRM|wL-{| ztOv7!*ll1&sf2sc8J0KX9j1jRh7z^YQpZc$dc+ph#>~BD)}Jk`4b7X|QD!6jON5rM%Jm25< z^z*nsf4xS<@xXOU#{(r0J2I!SdwiUE%a=A@qxnj$*yOkAL9Oh#@~~2JUV=Bei2B+a zA%36*jg*#HYj0l)QQ}f6 z?(m|FC0F24{DJ`}Io$i8+wYS1U<5MYjTz8E4bvB)_wH_65ec?O%Fa_Bk|@6P!FsW{ z1xmaUj2cLDXg>qRD<}U)W$QcLHSYma`MRSJp#{Alpv_Q+se4t4>e7+*Vy`x7U7!RZw@#?byq4Cw%4qq;tMGO} zLejp(!7m2CwcKGH)24*h4&F0~BG*AvM?GNUM#yUWr%kV)sPQXsS|x?8| z7=~1RR{@yz3u%e#yc17z1f>md?~@#^A$7ce$t0tGRMYELE$*1c!aBke@vzWNb7G6D z)lY|>B5N*HzdMj=B`zh|){O=#VI?lxgvO zBqHc6zLU%E7JduCfR_=k2oU($V(|x~u#0J1Ep^D`*5wMfrY4Wa9whEX!?wUw#hsw{ z)TY%*r~X8oIioHTA0aiJ8!(y zyf3FfiNDoN!781^=mzEG-|W()PW1@f{tNJ_53UDVTL-+jU*8_Xt_~b_`Z?DBdSG8* zjfELa@i@Iq$8Ngot-tQzfWi-MMFRTH_P7)fNe0bVsUJ9P^9{wAP`hM$WLaX7P#x6Y zfUK~HZfNYSBx$5V1#?Ua(M8^2YD}P7__H(xpLic61rMT`Os!Zj;db%Cmp?|O<|+e3 zZmpHKNj2bVFe3&;=`?%9nlk$Nk&|EI6VG2;?p3(Jvcdxod%+PHV}ABB{Q>5=Tgxc4 zj5+L$95#ZhMT&}&H(kQ3!fOU&p+X(u*926lihUT>h)wt~^w-j7O^cbB>VWl8+XJbJ zZ6#0R^!w57X>w%e?VskhCPc9sJ+#NlxMp+Hh7}wO!tJT9`}cC+sLfL23H9bIBCmVx zjW~t-aPZ0CBQv*dETa^*Nx%2ej3t-=E%ar6NF-|0eJ>Dc#-xceeV}YCMV*mCp|6hz z&d_`V!#POPreF_ZJactK!sKyi;@gB_sSy#^Z(Cl;Hh`PJK=h2>wyUl#!Ec*kk{qr7({e-vHtl|Am_ESs>;$@hPo8Dh=J zQH1&g(XgDL9ScOjQOuW=?JP`M9bpthBsi#nJ$s&A!bySld2HvC+`Du19UYr8d}qus%c$D9IbpTeQp!>J}&n_F*YP zSvW@**x>U>))D*-(P#0l&@%kxhjS{yNdStYY}$CSyv~y7SsW4yO+lHPj;T?mMcOrG za_(!sJz{#VoZ=mEI_P%OroA6Xf;79FznxaJsYH?&_%P8$T!SWs3Qh-1$TEv9am4Zc zYH2IA3iiSC1e9amB@W{3lqfea%)^A}TmB#m=jD_B7f9Xz_A46;G{buv&FX7!QtcH< z!4^%AlP!MK23*Kd@MwIjS+{RB{-X(d{>zq2sl~Tm>MJY_gban8CE+Rd;nQdWDAx!; z<+cZC?~4ZQicNwwCny+nQb0;Ytvo%@*!(dgi^OwQC9ZA50z;expGBlXZkR+|ja#ry zoA=sEuur5`D6xWKebBn1K$M`hNvuEJz0O}>mkSfh86f2>8IqM6MR@u$$53ZkUB_a=^U=1Ma&_XXaw;^qp=Pr zh-iWd#Rdtc#BCsD^Xf|`3B8IIX*=SHw%{1wFm~pjpC%0Nr-Hv`N2!+cKAU|+lL?X1 z92<(RNC##_*2@V~+*bG~&N;-@ZFiR$IOnsqQ{2)djeb7S5gu8SQe~KbejcbQWXRjW z?tNDZjL)^Lh++37o6b9xzwhQMk}6X5%ied>*>zOjt8dfm%Gq`nk}ap6C9KbRUuDuA zA-wg>V7zpZ6KmsKfXn3B=F|?{xu$K^z80egd+%i*33F>>bSemHy`0a)9w;%BjV~Mq z-A5kU4&){{jYjjP)=)u9R{*6G<8YFg3{Ffij+%nbs93GU+n~9^1>w({6P7%dErflm`x>UvxCL4GxZFdiVI$NpR>{0kmv*BVzAsfqi7f0VBuxJJY8t z66PEG78@s4mYZaKZ7KxJsy3%Q|6VDUEPIQ>Jf9!SL{kUK76b=8nJ=<(hI<{4oPK#M zba~ch%b~JIpVCgXIi8>`eze~l^4&CQ=WEZy&)ylRfa|c(%CVnq0)L>6&2OvdUqJs3 zWAHa+;I1W5vzY1u4|mX$6a-r6-9$bJvRp;p?||5`Le@|x25goGsjNf3VjT@qypUAi zXH6%wxsHC>1 z*UBBOe{Mu6KSn@FS{y9@`Bz2#m$H_mYqsq3CXcx$Bc&5(I|B0-NUm@+y~G>go%{#R z&B`yl6IE41bw$s-IT5v<(|ZQzpg|%^Ct4uZ@DheY9>xrdj))D5k6>L#HVxxWKMynf z)sDH!b7w2Bh$WMcd0Ni9N(m}?@~2G>*@T%Kd`<~wjEVsG>ck&H3v%U&1qdoL-}O_hXyeeGel>|zIP`(xy{A2#DZuaR48YUT=c z-ks6w2>OZiIBr+?BaQc$-D%bVAuT5$33n@f^}ld@+_^snV&7|%F$&Lp#jnOrAs5rX zJ6h(~e<|#>4D*vy)f$=&G;??5%GuM5aYCuXi{)U~fV^ORMLpafeQ5&*Hp{@E0X zOO$>arI4snd~!bh$N1(EF>M1cJu!d#O6=q&c2KhU;n|oAk)&LIJqZ__86nLqEkI;S zBvwgAAyGYz1C2`dSe@DfjvM?EBbG*B#EDtjLfz6tDP+35Hb!hY?{@v=rXLzi^iBOq zRQe-z@gwy->wveNB1y&UzNg*OiUWfZMIrWx?88owTrsaS7WcmtPO_pCyb$N&`R%qW_f;D z!q{LJGUi99d7P}^xbnayMK4fh=fiSosdsXWePTXC_b+MJyy&(?{PulzVE1I?xjGu{ z|COrnPN58w|D7DxnVwqz&buvrG^S|iiMfxHEB$j%k=p@%k{WW_bXVGMCHM0FYHy-1 zzzqOcGu*;BIYFSvu=|wh)o1OMnq&E?EwM`b99zcW5fP7AVj%Kekwmd00w0eda4I+= zfngi~z^yBm#fsJn#c5{}j~563#;Y2Y__pnp$}vr%LYj7(qDZY$sRJbZ-AceG+ z?r)!`L`Kkdn&8Hhs)th|I`Wp&qQ4S|_X(5~#*g|K1`OJH3k9AG)P9(H)v?^}_|3BK zO?Ulo5vD`Xa`!-T-H(;ot=&c$`HdtCGh&6AM&WhYbjQ|P%M0C)-KY*EyTRhE?V6HR znZNUOJpc6U*oDgUbqA^z9v{4Y_uSmke;$;a{(Gk7+Ig1zjdy3DrF(^S_uf3?gd$d; zmVsSFYzZDmxMK;99ms=;p2gG6>fPJEpO3A&8R1t(uG>iT&+%_+fOGleHHF@>DyPm{nLtEviI@IuDeG37{{hQqltb_;QlQB z_RakvzwStwUb9z*_|QnmaQL?nfd5&K_4T};+aNt;x31kOSJm9UVK|DXX|D#5c=or*QMnoSL2a^Xy0 zcx;>2Jw~VKTU^gNU;pFE&pfcX#dcl~3B+qquL_W6CPU0Lvy&&;RLuhdTzW#Gf8M~L zLLF|fw<$H@9=l+4GRfk2PVye~c!dC}EbJ*u>((6G!M#~=Z}j-sOW!j2YZvK~9!)QB zv&wRZXjhL|W;Kv?{%#MMxX9hHKV;~9!TWV$sovhQimxoieXq7|+}wG)v~V%~kM(D| zK9){1>k|V#&yHNC$AA+%D&2c(o!0E*@9L@7PNa^`g#6(cOy8l{`&v%?BPmLc_1S6q zn|d9#)QSImF-1Rf|ITe~5n;9}PMw@m#olH06Pa#ok&tMI$zlbaLf?ZYuDxjEp+)H) zlffza?|$m*`0VU`TQ5Ev`^v4c6KdG@8rF$V@|zC+_vl$HCRah4D5S^J8sJ`pfP*F; z%tZ_vrfZTHo)z4AYgc|SVbZER%(QLN>S?%Pc+euoTV&;%w9N~~+O|aLNSvjtWtK>t zStdHS26%wB;1RSr=8EMG zeK(2zxDAa9JNd`(6KwXU+hKp{6iu2%vFq#r)^>ryFe05G-Gtj zkkZaG>tqsDz@_`ycPRsm(M{jB4zHL|BaKhhXud3lS1|S@5TMN{*D0k?h*+#rS^^_Z z<%S;25+OG~Ge{_eJ&pcU`Lcr9{tZfzW>`^rZ-0;qX_hcUW}3u!gMZTVLYGc7p=6~Q zblI^oX132?_ebq|Y|moH^tOAWQ!CG@QA-716_eWrcTB9%k#5v1H?by%ZhXg+Uf{QI z)1&tGMV4-<#jP0Xt|*0=AK~H_1Cg%MwqdRjIfuS~_D?^vQhv>9>Zn|kKjzI^cI=w` zGUH?5A$DtYRLWq^&yS_D?zmL^;lwJ}w%Yr0>-pH6d+X`b=|#1jo%`%>)jsHc>3h#7 z!0*#HRIvNzj*C1^?8KlBL0rEQd+D+Nr|dnlxqo?IC^xAvI_e)J&bsxm{!&w!<0!|N zb8YEb@Q2P}_Pz7<$m8`dQ?-}AuC8Cw&1?;^GWlCsJ}y8#KWJNB3O?cGahB%kw~UjD z1M5cI)FQ{uZ(^1w9WG!Z7lC3g^C`-|=Bg{2DdleHSHMn*E2r2nR<>x_0gN#&YGxoq zPP-~oD;=Cl+4GZ~tf!^L52k)MX~=hTvSu-lVzy~gZ05C+*K?ce$a6{`;<&j{>@CQ` zTBi^&M+*CXHz}=JSb=QyS$n1>S(=wW z_5Voe%GxX5bxRK8IvAsyMWaMy_@>(@-8(&88Pnp?dT&jklM$Pp;5d2bXisUe?3i@+ z-Q>FcRT(6y`YMCR!&wpGxdGP>HBX&Z`YykcU;p&U9@}lcS+u>yW?gNwk$=zP($B=1 zSndBHa{h!{+#Z$3nyQZigs0ykQBRLvc5+3OQ=edUrWER@?Gcq za@eDM?BAD?UTOu+M<{;HIJtZEP+)4bRHxof^>+c3Z0v~>8g<|5G*?Mhxy)*W8*0T6MT#O0jDPq3&a2!hOH29S(Z! z`<46S@P+dSxgWYOza5pF<1kGn=j||ApU3JL=iBNR?7MTHNl$c%TAC1-;3)foM^U{s z=#d!tT4guUyd!Mb%%T(t7S|>b6^I6r!&q$#FQeOKB-60qs)4ojaO!TeEjbCpk|Ue7 z4I;lu*__OYHLD{ztfwygJnUc(*?eKeMd^qOLJs;K-HL|WHwNt z_Pr(5ejjz~QNQbvZ?>h@u>5Ue_Mr=I{WnG@AD_7(5tz-x8K0}b`5ut3X_yN9^0Ha2 zC-=twDJyayMXXtUStKaMzLM69=HGjGuw}U0ap+E6N)O#cy=;D`jn@Y4^!`D=l>U;P z;`*eRtB+zFZ>()xyO<@q(=>$e2RTUPvq>uUHG$sCgGmmJUp`xP-`3(@saRUHnn)?Z(FjoIc5!AXI8*unbG1eo)~0Q;{OOC*iM? zF0o#_#OXR)=}Eq)YF=Fn*qW3n@T42BrG1SF%nf$D9y@2L7`IElI$Qcj?cR2%?_pDf z_%GR?TBSb{MxnXFmTCQH5E3IjwFM-*az*!Hk-mibO>aT{Q?|HeTwL4ySdCQ8mc4y3 z$2lQ#$zFQc3&*_z!{(jR&J#~j%!u?b4pIP*sYGK{8-L|>86Hcb@>qme%z_>Q`q2MY zr^tu<$XD7j&>O>4xmDcS>%lTT?+1CKj}Do~YGRq_g5Hx|Z9#_5%Rb3dMJr7>zpe&z zjP2}n)pj{c)qa>Xl}vtrxi4`lr3)21F~{DotWYMtve`Z%_1t`&tiNq+Q|mhJom}ar zq)R4IwQnLU<}BrK8)h+8cYX7p2~-MGOQr0sJ$@X`A5}Q%8P%9ReVH=2d7|%iW^d;I zqv)(3nriznPNR~F(xDFuDlMJEf=6jlx)DJ}Bh46ybQzCyh$x`s1V(S8RbnEYqicf! zV;f`j?)~Zf1LxfL_gvrW`dnF7^{4yQC;j-gVc!*kKc1TqAewB}ROC@Tck(P_%cy2A zr~E**^>bh%=XjM%oawG#duTF=Dhf#WdLQWF(>J8t;pOh8bG)tX=)kabR!*&0e5;_QCLC-%S^Gp- zNl7AUe`|Oa`jS1@445r)-?cw|uJ7n9`B}ayR6+DSR6_s1 zdkf89(^mVV>%BV}Q2;w6=!khgL#Rr3)M;Jeal6WhBcnHi{CE;^-=|nC(6MB-@vn2^$_q%EeRCcA2~_&9kdD zOgeW=GQquDtRe#UM0lqA&LCd7t^>%!eem?Wr;gxYe}IL@G~#dmB3eXV;wcAL%12}R z8DE9-TqgwdNCM+D#}+dkHh3u`4ePuacT#7?FPHpu5EF1?WT;H);XxNSSa*}}ChoaQ zZ7G0BZi^Su99*a3=>Z%mUcBtwnRnj{$Ld#n!g9E;SnH@J2@(aQJ_6OcjD5Ky$Y;qD z+6hR#k(ja8=fwkwNSs2JJ)I6gAAbt{XskScOv}x|CQHG{GBhFcwRe%HNF0pTu+B<0 z7}OPeu~t!6(-Nt8|iox;xc5w5YP>~sL!=tx4mBIgmLCs>}aoD`gQX6hEu@mFzt}}=mcDezg1o>zlj(Q`ID2D?F&00~% zi=iAJRk>^43=FakMnqj|GULpjY*EudR%d5fe|O6oXbLQzV8fAZ?~yO?xqA$~-*Mc& z)^&QA6}dB?VRgD?qVnb0MV!bW>}HvbNP8Ms4kzvtg$ z5ylqw(BONSO1ZIL%tui0_w|rH4XTJZK8MvG^rr^?S_xc9BT5~moY2e3U z=~af_K0IBwz)epXTsumu=m&ey80#yKZbB5MR9e$5l*EK*e))fNUi2|rY0i+)Umfgm zS~CH}yLx;sPqQuh%?W#+fTip^^OX?RU}nZ=d(3=xzMu0ado2hUeYXZ!-!4N8jKdWT z^GrPDGeonN25eKpnD6O-62Cwrv@pblG`iKSg%rSF!UM3~ssyLp+4`_uECxN5HY{c^ zf*KmpCHP2UmThC)rrt!Jw}&siP}rMxcu^wVKCAP1XSw?7i|m86hZD)3Pjdz%{Wnc1 zL2vPaykgT*EHL^da%&)B*P8K_wT8=pE%j0bH500rVdMYC3t=XUa>sg~;8>x#7 z$T+H#G(z4cDR=o_91*cQAIf3d>nP{2KKgL~aK1}sR=G+gStE{nKVvDm(gKzKXg_^H zG>Yd>h3Bmktd$@r+F_}98Ch;V*A;nGP^1#&BPU-tdtR!(I(AWA0-NGAQ3y&XM8-~bb`O6KhkQ)qg05?TquS?Qo|1!Zygcv=?oq&xW`6-N#I4OLv zE}2l9qiLJfyZA24ucYkr&SYctropQo;|4XWQ3qo z8TsWN&NX+q8hGsGB&nU|JG*#MS@L9}b+&Q-)snWfO6XIdeAyzeiP3cbbzDl0A4yna z6q}W|jqf`yNK^*dsmfzqxf@KsCqMI)hx>U5neIR9Q9iL6*>fIQn~GW4ZU|o;&Or?b zkq!FGb6VG}YeGB0$duFL2|ft1u4R^bfS#rIa7-}$o+Edqwg^_xr(d5%zKne6CyKhP zL8E>oftx1Cm-{+OlT@1H;<%xO#8BBO zL$Tosr9-S-@bWI$FzYY-(L|oqs#u1SlkQi=W&0=W4akPns4XF^)B5@51{%Lh$;=>S z$1`3E7S4IYnyC7kzEOn&;nX!63bU!$`rg00pg(o~>dpRk%+@KbMs*>?&$j40!V9gE z>3Sim0dP`?Q}j_mn>x|U&fqIMQ~{mo!5%s%dVfH<+E%yL8O9XY4P{y9oNn#t4;)fc z8R)JYU`|au@e)9#7W9X$(f$uw%%}`~8O(CTa?Bjzx_Gr)-&NKs)YXD=)e0NJ8O#>U zLJ;RWVz!n3W6++U#!@D5bL*`rGs*BjMYmIU&oNW!|92|&ckDIWr>%;5XOXv-^#*?{|F;%z<>0{{;Fy8 zUy>gYo;;`T@ZUpXa*l`3hoN!Uq_fY{ohPOkdx;c49IHTwUQRM{>9th2f`(LRguJ?` z_ThowNucYM8J9yjQ?(N6NA~;U)r-!;Q_xTDd$^sYPw|^S^He|3xnd#YI(kriH`bAI z#w!kO34s|L-ZCKXD2OjoIpQd1@h@pxWGNR>;Lx+d%H1i**a zk(2i6+}Q0`12wATm7zY@l`Pxb&yM?KNTlTz?#2$-x{e4@7$ukjSB5_j^m7G~S(j1N zFnOW=P1b%=WR_DHSvT;rb<+i(XISl50i=Ik@V4NYqHX$8$11~`;{=@@^-?Y%g$$_| zNS6Cav2EL9;MF6R*0q86?3ToV*FLD)&vW#wKW)+O|HYk|XYRW4Vd414@|;GH#xCPa z!SS}POTrV?48z;}RE_P>e4#op`v6xA#xM+dEO4fC?Hvi77A}av(0PXVh>WTonnbI= z!Vqb|ot8`ZjSFjR^Rf&HC@732n01$pK~=r5ID3DW4Q60y;8utT7``I!rNTtN^C>l* zRnJC>fuoYuBliD48UJbx?m>NtvRwEA_&}rCx{#1vdF&IQTsY&`f;lDv`@`WC8uGGb z^;OkbzAi-8#a{2c+_t$9P6z2=HcLL-k=R~E3G&fT;Yx<-RZV($6Fy>f#dzWH7uhjrrwLS9Bh}y2E#+X^SqFHo?eB^~W%w&u z4E`S9gv2@UbZNtxp$d&1M2Yl@C*@8)PjB-@PlMS^&TpOmqndNJ851^_70CI6CUMb^3fstyW~}qMW~TiJ}7V8hzBe ze9}|%v+Z`r7VFvV;kb&a1=xeWRjG0(BC*jM1)erH=i_9k6575WNt!Y|FVjA%%8vyH z-9JHFo|l$Ky5FIyI6tn~3T>@e6lk|NZq~rB2b=KULZ3wMo)oAU<<6@?(%XzPZ;aK{Id=;F|6-o5a}+|iBSU=+ zWdG3LDWyuKTI^_9A&EjcL1lS6>L)H|0Ju<~8#W}l`SkTGwqw@ptms{KMX4Y>v*y^_ zE(HEczDCebUoM-*XvB=@NuwabYkE-&p^C{DMYz_IfGiAx#(dDHbDl=6K`4-@rMTa(L#}b#vY5g99DQFi8K*9-U&@VPI#NBmlTO}>m+Q&mTDH0ZoP1gs11=V9RuHbY!G{8 znj0+06@7W|`#Ud)-vjk7?J7kB=LJ!dkurlu(8HRK6IXz;(?c=C^N#zAqLJgvbPAj* z*@?1G?0bO*!y;r2n!>_hi>+d1F!=e-<>h#)E@}YAhe8Z3xb|&J1@xjbI^9XL7X(?| z=4qJdS)GQ9Ms{OMmmN91Gd3X&qLz{Z@>_vj10vkexZJ57*BPQp?GAx$t2K&0v~V%Q zD91JVfakZ{(0f`WGKAT{L0_V*wk*xRiToLub#Di#5~5!y3XY0O*aZ||Q8^L%{>!v0 z^A?L)zp3G$dJgrgRaT^5mA1((i6U$To1RpdGB?-auSaWu=lA%8?!uv)DjkkdBjQd& zAveV;XrWP7$Tf+1NPY0c6FZ&pw%-0^VHEk{3DBNxf^(`j*?!cL_Nyki?^&LB)`w@Y zwXw`c4E|?_05Y|tKYXoQw7q4X;h4`kKo^%92droWzo`z5mM>VQ(jSlyfWZbUkkeFD z=i+NJWqIwqqVbAB)N3`i|Bs~%ZKf`s#(H2a%h06F4YLN$q)b_>qgRuJwtlqhs>U)I zB(qUk6Gml<=nL!=V&vn?H0y;8r$JHg+V0ku6P2_2XM2Miz}A7HnH(ZX3Vil!`hAob zwi_mjtIQe73{F(;2vp6)IGiVLcS~-T{?1~~s^c{WPk)n3D-EM%g@uyW4@-H3Cl4O} z2RdVJ>UPZ_EdgRZ>*_e^T?2hfY1vStrJ9M`p2<@g_R5uonA9ERFf!R-z5RBy70;DE7%iC!f&74N_a`oNnEf4b?-%Z?7#Uwt5YKiRlq#g z-jR@xfGOX;+{TnwOpb^J?Wo2^_yBlgPfA-_j|w)a;NxW@@p&BdB@=cHkv&t_+TuNf z?0G%@tTE`6i_pHeLj7uE9r5^CO}jM+Pvgro-Tu6gl zp&OFz=f9S=@l1^b;yk_$Sq_}uo%<)ss=dFY`sr;c(WgRU^)LS>)~>_Ai{_)0?C?J3(gS!H}eKm06o{{vSQTPI!iV~2FDz| zJ|V1K43NUApTt?^py?l089V8}f|D71Z91=qd46)v#+ox^qi7PpR{aLcdQj`|< z*V8#W>#Z6kUOVU3h*~K6-bBR0)xZOWVSIv??#<51OaqwnAuy#RlXCj;6ykXpn^R5?Pz){#Ot zp2ZP{XFI|>rfO7m7tfXi>G1We%~`^4dGW}=Tj4MmTZ5u#D!X)z2Yy3Tkk!W^-oE81 znRH3RqK;wKH=7BtIVa&dl9S||;en5TFFbQEvZO!TcS z*=G03)J)OGk0JTfRaXMKP6Acx$OxE(Js}hhCn`q^AK3201;SD=I_YGEL5vCoCD2Eg zk&dW%(y$-tIi%#tyf(mesJG5EE0ZJUqXL@w{B*o?{QFVH4r5;Rbrhw=BO417*LSiRr}d!YapxVn%PmR&Z>)=hj${ zC|m}zR~h~W#PSs9my4DHS2dN(4C@$360A&L6|i=klV6E%|G2qYGW>4Ma`L+??4#ocHnxpxS5h@gBs^GZY z@@)=-bbE>(QfYkQqNWJS*sLtD(Qjb38SzV2SKae$nj2_!3cW}>SwOA6>!hc_%nme1 z;X>1+KHmAu{9;3SgC-NYZk9ROJNDSS8A7f(Al=%^@s2cMHxg!DfiG^TqbD+KH%PwB zvTtuAw-1JQ{!`(?ycoOBUj5`cU$~-gTKML%-F~OBe-^2u+EqtW=2fh?qxaKhQGIq5 z7@F1Y5B6fFABZpDY^cEJDIt2Xgsis+%BU-e!CvvP95a|0F@naq-0x}+(VCVQcMoRC zIQ-QKJX{sbxYoSbVJ0WzHZ(nT>PH@q^lquE(5+*ZA>K;+NGO;_Rwq7WHF3xP5o!#0 ztT61_ke!yh0B8wQ@ssd8N|1I%e6D|}JZ*sLnc?uToYJ-2ndVZC_?Oj<9x@_f!+RxT z>2;Gi>54gdqTx?_#ZkWeJVE@F_r6eE`W|b?QndA;Zll5uZ{9*c!ucV81>PH`I&QnSXPB-P1uG zAFw7Bd@^P0N^LNzGuvJQm1Yd_QE+EqdhCy(GkWt`^^5?(O={rcPrg_xVw;t5DN4Pj za2`wi5ezPBW+_!IeKxvA573D9;6?!IoL`J)F)%z=H96u>EnI`{s4x+l8@&?$&oQ}9 z14?>232ZC)=A96mi~v}BU%%S!qwc8<bwd`0#Fx>^A2ULMc9!XJqgCds>LZvX^i@NipHHkdHJe=)Fsu!?^qR(R;Pm7d-K~) zz2%~fMPS0izT0k}2BT_@rOQML{s2#a3mbd-Wgg zKzu$aR$;I^G>qGidR@c3Msm2J><>b+hYEj&#*-yE}Qkm>Kj--p44*F^Gh zXhd^|mBJ+WP*M69mT`QqfG1kVPBEeZ?KBUy0Lz(a0j;+MfWXC>dEx*uzbypd%RB$l zKW~m0GaiBgH`4?$ErA{24C%V|ReaM3&rJbN)@hTcresk#|OGJySJ6J+@=4kP!ySSBx-Y zP#eI_xT9kxkT_%Re*$J``U*RAUa8a{RA&l<7)z0Lm8Gd>lQNWGsk&9N(JQhac-l&l zRZ`t)tBKK{Y^H8k+iaab34A8*?6*I+XMu{p1ck*W{bTDHQpKr2=u#8pjq35;dfKQH z(b5!R;nZyF}sJ9o_A^bg+MS4i%RgaLzlM8Ja&hJi)P2P)jy z!^<6NO3ziIY~A}Nbt*q-wg?|4v>hck1><3G^Ml(X3_e&d2m;x6m3 zTgJck<=R z4|D82;mJdTi6x8sG~Iec43NCGq@D-~MPKS_3cv1B;NQ^tQicF;x}3rj0j(2GowD|I z8=aibEpn9@9(+3RbeN1%>rBY9KcA_-@4miqVdr@m+L!5EUaKBrb@Wg56Xu$`UM`}nI6p)_@fh?*Sx1|98P+$ZZ^juG2(ObYTSf0V-o{N zr#F)&76TtiA*^`aU

8@`5X%+PL)|f!D0pIJ21($|FUep>3z;ePBt}6GLF$qXa zf({eVsgr@DM{G0Km=e90b@rdG!h>Gnwni=2I}&{LszCT?$r!1kurUxXv4S=O&d$a= z5q=dppJG=)3-4=_{8OGbwm~oCFE(+@gn>Dz zX04KQG!aZ>JJ+(yL{ zYSA@efniRiQKvd5j3n}l0t4mdhj&j}?b=#C?78EbFZfu|!n>NESAxD`>vBi!E`twU zbB&3Yzv~xqetf)`ZkxQ6Ji30N9HAiext~?jEq$t^=ueAQa*IMXB}x&3KM3d-?8A>% zUhylOm|i-XL6@;6AqLzl-YkG|5RVzA7T zQ(<*r6m}Ua)1DSs-2Vu3c?go_=+wB|tvR8~F~Pv+e!qI{{L`CzSFcarc*=k7{2PA! z-IL`EL-ui9;q_x0ss)J|cbD%ur`!W8+@3=kgl>)aq>qv6S_lr<-rGc**|smbymi7^ z5*Mi}cg?y-c7ADrgR~XJANP*SOJU5zDo0h*XkhUGSG^PyCxM?!tt>_P!>tA{*r2jm z1KDq^YH{9K_bjDGL>-uU6M^oGqgX!NXS9XKR^DFi!Z1s<{(qNVk2IfqkWBs@y-yV0 zE=ye)DUXzF<>Z6)eJ`2GA1?C_0v99^e7CNRMb(UoqGm|mUzcCv~IW+EAOd~_*$%>)fK9)QRj&&eJHIQ z6Ak{?b@ilqsx5}7Sno2DGAU538!9TBBVk1mim_W@+QKs}L?VvXhpt9L-#5vOT;lb8 zaRGS4*pP1*q;UTLZ4Y=+I$Aruur*Zne1U*1KxM?~FL<8B>7$9Cz5S(k=KQ36VhkH@ z%novl5dHmG{DpSf5*G8;wR5h~YXmO8XT7PzgbmsekB0|2HZzFQ@b$Oi@u(n%<)(=B z6LsK+xM7?&pvO^!UKUT+p#{3o^U%2)$`Whpzm^>xF#lXv!VTW?t-2yU|1&I%aH=03 zA5F;PS7}um#8>~M;9i`xcDil-Nw(9d5@-h`&ug%*Xf~#YVizNbW^Oe$izn`E+3o5|4y~0ujRTdW(>+iHbvLydSxA^0t@**{ z;J3owT~uK|pJ4sAt&wvuqG80Y=bX6NdNlYB?x=zThd*ezLSDf`_IfK>KHc44IOYe&<1b&kWfFs3G+w}{0Q%w=2gxvqTm+^Dvg zM3Caxfi3CFHWFiG6r#L-T{q|zN@jo-OWAp2UkrCoNYmY8lZpZhwSPGZ%zq8X{lBAi^Cnti!<-U|bPu@@j(t<3%%E5RZS~9Pdw3idviJX!JTS zb-S~B1r@&^SP35fK>-hk{f@2st775|zfQ@cfVGj=hip!u1A|avxHg?h<2re5a#eo> zHH`Si>i7;E0ysvN8abtM-MQCct=gb_@7GJ@FaKH1@N;@UpUV0Um(H&xeGuDnd!F|g zGxNJN+;J&5dP46q=CChqMEhR?+N6}PpMP&Q;u}uqQb7gSD?{MYR?D?2=W6udD~gE* zpGw9rO`JXTrh%-V_am!p_SLV;7i0odk#+w^i_-AcZJ{*&0~c-f*a)7q1lIAkwVIv9 z6Oh(Pv`}ZF!Tlw^xci{|+gg`Z&ket(PP->w{l@%FYny(|{J{e$;lTJb6Q_>L-i3_-SD;xE;`&qn_ZH;maa* zh4t-FKgU~P#3mPs!kc16ZqQa_MBf)7`dVGmJfy1XI?G7$@mg8!W^XygtPGXyV zop|vz^eb0>Q+b_~jq1`jp8+!0{FvqYlF21YbsrdmcEmhb^tF9{1I?VedH2nBQdkjzD`A7DbPPgr_7)3*B?xicBf9RSJIQF~!STLP?#8 z@5=U*iZKIP-E&0-l*`YPPZ0A1ptmAA=hA9J7bI0K$UPqgI|=L^Pe1sJNj_J$B$~jx z{|9&9O)h#@{35vH?q{FMc~-OMN{vhg^WHL^paSSL6%`~0?s zv#^6Y`dg=gIbu1Zcb6K2O#MxFYz0)4)xVgHXNDz@t{i&ta0eVqeg_}kW^vZ>3{BT{ z8d6K)1hQxhnGel5U&B6@J*Df%6rLn;0A@I{%bAjVW-9Bq~ z_$O}(xp(Awo40e~y8MJ;&{!{h{<-zT?Dru|VLb6W-E&(^zJxpyT}f+23P<>TNONWXU*Nc^#0wR&2~gt1f4(e}IFzKo6U+Ru2~ny4LYpIy6O^k}KGJvAI#OF5vv zldfKPB9OhY-*ro3{7slY&Ko~K?NXcPQ*F!r!#cNG(J1qY?;m{~RpKXsO78j$^=o~> zWQ0?#{olMZMNENaE2qrKcaEIpsf)YQ=f}CCr6Y}iY$LTfJmZ-1rdJm;D?NMGt&5kXAP`Fxzx_#ys%BHPG}2Oei=z9C1|AT*LdqYCBx?j)2gb2aJkVC(!C| zNJOk)oFi{IBZ7PhW)AnHmc&up(26WL_DgJZ;!$t7{kE+}g7Wg64dFfxe%*NK-*-Mx z$L@U2=i+~#QQ+h4ocH{4C4o zueTiHM=Wer)Q@74(t7_@{jgd5p;YV++P^(;xk_rHX&;BDfrtF!l%NYQVm^JzPk^$H zK;FG4{EF~_UX+KtQP}`X{J87OG^!o{m(PyKa(kWbxk6HnY|Eru`~=&x{y77CSZ4^P z_~e`L#ybJ_yB{ivXY|eenk^B@?iO2rYhu>j#R_}}pOD%Xo&fw_4jb#+lXC^g4kv(s zh0>AcnuBNCPx|VmJ)Cq`Mg%Qty}-ID7x5~AuUMb|>x^hdLO$ppbVX|z4($c5^C?k9 z>5+KwVJDr$*9;sNZl8oKe7N%Z@d%bs4yB4V1lVnlUn1L#dH|e^AB+T~d+~-r6hA41 z%RW-L=lsQ5z-Ne}c<#Am&tGlVtEJF;#m3U|-WH3V1x*lza-o=wuB@qylxs;*s{xa# z=W&?CuDa4%cu{<>pX~HHpP|j9;nq7%!_LZ&5U&CG;swF@TT9D584c zq2FL6u?^8+6-|vx#2L4`kv`x3sayK%><*wFZ@flHxbCD=nCyrl$Kam|1_bHfh#9@J zCHx#>5OgcMo>8sWR}(~}#1VM3a%$R*gM)AvHpJ&Ysb%j|vq}kV>+Hmz)O*}jaHT@f z`{Am&KsYp1_98r}PrbIk{1r9{ zu*%jMuSn*xVfX-;--}iIGeKCJ6|SlqE1Z>H8fzYt4Gt<`NH; zCyA^adDAcYft!Au!hcCd{zq>hDQ!dg=bn!~@yNq8{6a5CbiRXlC2{iB1@{!x(X?R8 zA5_4B8-YbbtG~nvklV1b72J(%@8~}>0l!aU^uH+jrrf_(v7*|}dZr%Dx7))S6j`E+ zo^|x7361e1?z|q^-B+&g4149}0*lyA-$8Zh%^YwxVW~_6__x#u7chI0cIVrVqKR?- zfZm_sQsts(7{?ESzH}P{0dDhp9dZ2cVYSILyT(QCt`z|xwZ*y$Pk+5IXl1+%dZo|3@4)`d z;8fSMpPsmGA396+zFfbc^>5Z7HKfkg5rXFcl`F_hS z1GazE{Vo?5MDTAf6ai(aBuP|-jk70awzzi|$LO5NtmsFu_`;z-Z zfaXCZSobMaPztrT;CLDs<2ppnm<2B%5)~FBva}nHxt)H+*%B_iSAVm6O}j0&4_0W{ zZFDu5@jqK&3yl*Y8(|E`5==2>5q)W+ckM*Xd2XYWRN{3Ws~V{z-bik$R9i+YA-$d!3Q6vT~Wg(-o|zg%W3+k zdc2n?6Xjlc*3;}ifk7TICMkl;Len%) zr>%}9ID!K`6K&mEDRoc36Tvus7PT&?dY<4C7o$Bv8xO=yC5@NLN`L+mPAbll90|+l z@BLNs2QvZgP18qfD#r!goDkD?T&l*ZvaF7ot!l5So*@H0-N;19Y#M}RkEzN?+s$zM zaggXD6Q_-t*OL1cwQolpEwAIUO839_g?Vr;E*kL2=`DEDW;rHVeRHnvk(H`w2zIb&B41P z+s_|LSo64e0zJo8ZjY!xck!6?8>A*r_~I1r>2dyW(U(9ikUjM_gBf+{i9c(H zg$0U-?vDQd5UO2JZM9fxRd&$|6uF&iF<7(i=Ruh#wt6v6fax=JviAql8cvJ`3!>{4 zfJ^mRyfjX+f)SDv_mDku%d|p6308hFH~-gs;a-EQleD^#8!uB#hS~yJ##n*xje3zW zSN{PSBm5&7A<3g#G3P-{uUX#dNx{zcV3=X`p<>3O0I^kQ+|k7b$m z;U}H)X!_iVGp5_QJBZ`j0d++?ks9*3%CZTj`&nWg%{vqmmr=(-~>NbdJen-ZBt=sq5Ex(nMiXAcE1wl5@{y(e89)FV$Ti z*c%q&$XK6p)d;Ju4xS~D)@@!Zb{yeSH|PE zSH996YUSZ>6Cs%Z3a?Zb)wtLVT;{1e<557@nr1b<-_NqgW~KDfaqkJnL2L{Lt_sHb zGQ&DbEfkWRPYLAh`?Q8x&8W?6VCIo^r|ea1N+GCH3x2%s-_}5|kBuFTk=Td-qN63K=pRBg}`u(&O0%aqd=Ys#&Y^mIgnqLOn{+VpKMP>)TiT>!i?(hfv37DtY2ByP)FiU!K zrZNVq_@{&8*UM}?m_q{2qc`*>OfQ>XxIfyJ=Om5;E%=Wv8jo&m@2saUR7uH=)}oq5 zEbeSH4dYHCt~SNWzHl^LV7rsSG5Aj6E!9qm6Tu0 z3#}-PzJr~Bfh4D`g@=Dk%+{vagUi(YkHarQmZq-s zC_1kg`Gba-!~S%wxhhwH6{h(yJtXOZw%Gr|qDOW^#b#2Ea5YY?OUVKYp7Gd(PA9nj z$IZK=D;HBe`Cuz)_!YfR7eYw}#=VQvld%PATVnSBXbH92V#PDh|FhD3TJO@@=9+4KgQf0TOP(J z#>(t{ym!hL*_f>ophMYu<-Lz!>Sr_Gw590Rmn|d=dqYF~`n>ig7Q5biV{Pe^Lre56 z-P+|a)`@SeazM(2!o0qbB)on}C_8kaH@2V!?z%A{hCWLt7Lo-~%b0b?0_4!i8Ep0c zCl`U#f>MIPPbmj?JaAXY`aY~b2^#}WnwnE=^Pa4!5_ZoxbTb zF*4;Oc!0h}Xp_vDuab)SYfnqovxTR~7T~vUzRX3QwUz&W*!N4BWxsP02SOc-tI{8` z{)?mg2NaQ+UeaCFn0~7&1$(JrFk2r&kCK4JaLy<` zar_g*R)&j-ve#%2Z$B-b?S6v)5G=aPA3CU(NSuV$%7WR^ z{}@Y0{}S#`GEdV+O|cjxSytLrIa$tm0$JDwSOHk z*uO9e-eq>%qC0lEUZOLaC<^HGH;o|XGMhoVHv(*L`@zo3#wPbK(_3N2i_-w>NJ+at z-x!<2JTXIuPt^<2&%S%UH8;#b0pJhQ{Rn{#WL1K zRKEoSnA;aXLHO%49Su_6aRkv<^<-}YfH-QYJ2|uZXru_6I6PzvL5;Z(c%5EH?w!Oy z$^t*#zkfF2Tzx~2yS%BW;!#V;zv+bum`wW};=oY#@wn?ngdX!R)e#3B{){SU|Ld0$ z!OFpGGWfvMT)e@98jdnclN4%ff$rOTOLx;0ikD$*oD(mCyA4E*|5kZepPu_7FVok} z@nootGdD8!Jh8xe_1AuLHDr>Ged8?WEnVUen+UJX457z<1db?J!q-r51@BxsU+y$< zu9z)i8&(_Tmvd#A8tfM;Tn`~&JF%FC)@EYFt=%?f*+9>5Q`p}Fl{O2M%O1hYZk=L; zaUq}mZUEneDb2@Tn%E8&9}`>_LZeM$>E+iTacAT^*WngzfnMQ zi3*{2F&cIcAKye|{!vXGx%vJ4f5P$l!SM@B=Vp|eh)BylnQSAvBu{lg*X35l5(K`h zq-`)Pk4si_b+-OG=J$nrUr_wMEP+kOu6|7V%?fT}LT~3qzkPidr}5rVjs__Bn!Hs} zKrj6DH)j21a$JeGN|ArU-+;X5x;se4rdifAT}X*KdbCMg8u^acyUj%xdu!Ya9%oVm zGJQOvv$NrIPICV*angXGAMYvPI_8^bUk6sh==`K4D^+?=;(Pw%M5?MR!B7pom)%hE zhzHDvaaAepCczM?0ay49;o7>TVSYs~)+yn9*Om4%XW1vAe4_EB35VX4%uM?~S0E=f ze3oK#pYZCvs=S>AiM)uhfjMg0Z{E|h`SXN@g`wr1nnv9|sr&HiepswjpO>GrU;0i~ zOTvh5knd{|kX*{?7mL&y~ zsK7>4f9xp89%Xx96_vk~kCq+LY;*k-3CN?t8eJ)I79p;)*pEJ$->y|bc2`G?Wr3HHOog+&PfZGMn zGY*~jojiHxj;DCNCLuH6`nE?*uibP_6KB9*pFKRG(rEdn)AF{7Gm`~j0-dDhd-ml? zhSD^dYwwI`w9_><$#F2aXh_)j%Dckt%a(<)zvBG!l_r6UAUq6%)=FuWjOz7t-x`^7 z`DN#SS)Eqp?i3Ny9pOJBx+FRdyZ=^llC{TL^q>INco1Bez=gX)RKO6oyse~F zqzoQ4^W`>~yU*Qn>Li7I^Jm&6Mg&>QzfUy!hi-TsFOs;b_f0oCyf)33Vz!{!kf5!~ zA^k4e%!99}fL`qnVbni<{&pk0rP#Gs!@a!VYvEAg%pDWVr?#W&p>$o?7tj_QueNZ! zJX-cJFt0ymfeKY&8I4$&BWOh-V-@!4wz8#?n{*%#;tmZyD-Qk}VLJ#GTh9BB)oqME zfu@IKy~UY?0Gl}seSN>L!HZFZWpk`^O$h08eomgbv(q?Aw^f>75|cF1U=pUqb0*HL z3PW^!y${g|QoGc3_BO-XvT;ekTXU>`On8g^dd}e6v9faDaC(sNeCiRyOj<$bz9=c7 zQfV6%sSAD3=&h;6UBgAcWme#-Swaoct%0>UddON2x3Zr_P|hg;Ki-eHr!dEN0snYD@Bd*`+u@b!534!!cRku2(kJ$Nq{Ba!o+r);%l z#cWzhe3Ztf$fFECge%vt$JpIBdxLII*{41(J8PrJx%L6@|4^x+`NH@1CEZ&kd%Zmwoq2|CzPYjFr~!uJ}M$dqUvB=C$op z^H>l);Rka+@1J!mjrfhp#|Bv&OpoKT3g{sL1#`d`Et8x7sbTc%zibP&q9}#`qv*=x zng0JcDJoYb_f@G>%0kX!`gZ7>q*4f(E99CZw{1#Du1X9>fBCM{h#PIc5^KL>E_QC(}n?R33|ZejK5w0IFp;qK7of0F8+XwfP3$SRp& zhZ8pgGe0wN5=3^%r@%Givxt3R+;Od7)^(rLpDcnshTPay7O@LIi@Q*#c2k3t$u8mzA3aN7%=hcnX!uL{x5DEdl(GU79eeU}|1_x4_r%Vh;AvT4oM#q! zyKmq=`>}f}lVCq$M0S^z68lRq<#93Z7`0t2;-(<^9sC!Gym_i5vwD>1qXwhU??+?E zylh6CRtf0<)tJJ3=ONH|P3id<#{WUWcnZY9KLn*$KzBTmVAOhKLZrI=rYD1$`lVKM zeYzp#UM0OjW?#bEU;4&$nHHPbCLf0oNChc?s{)7fE3~E+6(I}XuuuOu-%0|3Wq`lr z^Ykd$Ia}+q>$Ka2 zBZJkD#;L5YgkWd723s#Bdvux%ZU*Qp)T;-SpR`{7y1o5c5rw>sU zE_xm19nu+B_mTB3njO1J@K}F{Zw;7g$jcPV{{$M4l9Jh&KoN8Q^OpEKnkUR!oofSb zbDa)&%0cZ72KrIXwSL{g5g$QAztPiijf!bP1Smbx5e-3`*iyjw=+UD>xUH;ZEFaJp zPFhbZQtI`EIZuHlLy>Cn_zjrH8z-?ty1Fvo8)V#QYfB8t-R_w83%knp8Q`=Ex<@QG z`o({aSG`0C_?0>#YOyPXORCJiM|a7HkutV8Lf~HdG2be1GRD#5KV^dMN~Yj%Mtv39 z(6K4o;|zVpp8dGPk1&tfq9%xav#Zp4q!v*ceA$*MmP`9BmqB)NWAiOK6nTz0_lJ13@Ke;h+oHt3UcmeXj2C)uv3aq7>Aoi(-EqMAlK;DF0e3|2hVJfrr_ZFjf^s> z!)p~93VxA@(Sm;3uqpC2$x29#!ewwk4+a}EhQ1?0dfT0w^HLI1Kg?d5q+JgbQ=7<7 zdh2c{&x0?he~_+Mr^tN1rDLM5lWlX+)Gx7n|C(5aRM(1LwzCTrIa+r$RODfx zbB~Bd7YY$19O1z7Sn%5Y{gd9zzS<=KgJgW4XTvglPo)DGqR2DBLp~~`K8SYyBpLUf zUpF8+LR4yy`8P0qMC6y#LvQcmKO)zzosAiturBfP+r}_yDPJ-MDzx0CGB9DEb)obf zId+*ou8K>GHJ;M9zt}JN*Uy)*1=JrHM0adydNE-g@#u9wicui7m zLdfR}FdA{mJ3~=^z8Y6|Ex8wWk&O9q9W3M8^r)6OqQB5NKy>RtkC<0snKv9U9ndCxnWmO%~HYArW8W<>I3h64&roMLhzF>B&@yi`C zB{{iI<>AaNs9~JKow0lxTO2xNlJ&%2+n~}g!la6vbSNvFUSe-^>9dt{!2Q32!iZP( zaUSx2{=&?oYto81%x-bZ>Z1!+zN5fPVMx=EF5g4qwG`4l^nZqL0_=q7#3d z)jnM~DXlvHzQR1>c!YL;`>!jPDz*G}WH-uQ9?gXHtnMlMUE5~0+dXi8eAKSOJZP^> zG4GJ!V>P2&$+O+xP8UGyUz@e$eDhpQ9N5#Z=oP?@o(30s$9k=PijXzrUEOu38vbr% zOS#!0T9Ccwfr#01)pYJei0syXUn!aZOfBifJb*23yo;i>lfk^RDPs&3i04g^v|0D- zF!Q_vWXel6_I4k9fdRccti6eRPqq@`eadmKC_M~hIURBriE|e_T|}bQy`IWByh_=9 z<82_pzfc)nw~$IerZlx$JDshM2}50CK`^)_X5Cl=k+5Mu^kY$4ehs;~FJ2z_EH< zrZRGp-*CN8*rN_XXZ0NHK~0O*n*cB{u8o0uEQEoS)NrjB$S^21E!^hUjr}30h!cA$?<=M|pyFVCh%qqa!LxK@% zgS)R3(Hx&eu`b&`)sZP~bSGEsNi#@mGn>#JzFK>cs32cyJRqIoy85@rLiGInad*_- zwP%Ld=dv2f50sHES~8ypH5tz%;oTvj0D+;yL|(Cto??wf&l|L~`yu1K)2iXG-|7tlJ^H$&?rnD-1OyGl{feD$R>RK_c?C}3PF}&9*ojEs@WeEPd1N!n}F*QB)$nX%~bTOjH7%fxp@#Y*x)9LBR%O~4Bi8*$* zrC0ah)goKf)#sX>F3lMuyI0%!%`qlbK{8>$aX0wF7~$|BkC2VWDB4 zd+HC-eu@{2UwRNf{qL&kwb+MF=li{NFAik7b`6&9oHDC>>;3blMpn1R)5F&!!@aPU z4xg(XW>>Ch_eU-#j*}-(u4jHK1fnu}FF`4>`K`?fPp-L)$w{9Q%F|1J^l*1dj9Pz% z@nna1sebiwA4NzT6T;@8$qdr*NXfG=1W_ePDYB?JiB-kI?{VfeGY~zH*fCc{V$YIh zvHeLH_#nw34mq*Qt7YCoATTwtx`nNGVcc^xM!@LCVP1o1KL ze7XXpfCTe#NO#-|P8QFeIn1itLK|704HQ8?tKRMS%2N>tzhG(5e3l|&)MZ;#Tq7q_ z8V0Uq{xJ3LdAEC=t36vVTvB1(P$9uI{O{^WCd5L?3 zh2v{$!wW|&UgGX|1KJlC@mr?gm3>{<7k-T>vSQJCN9-$C!~oJdGr5Owo7eB#&NpG& zy5pO|T>79*(YgXQ_S$D#baj`cGx@%iRe9meeCE-Wxt=Q7!H=gSPqWri+mh%#nO)-nP#2SfS8Qqn;=+TZGrV+LYrVA9CX|xeJ*go_&hKrA_2AS!)%!3< zy0uo8GlpwX$=~^4A?&N-HTB574b@10WvYzdr$DmpY?})08gBpY2->d9l(pHPjh#jV zr`)g6t}0E`Xn4!`TDHswjVLN5G-RoKx;R>Qwlvb_hDxjOiJs&p!y$52aJ`UQ-$D60 zofUlX5!0sF8}0d7nw7Yj$NPoLVYe(HewUiUI+50CAja})^uXqwu>fmpo}b5xsSSo1 zkTw`+rW8?VEaJ8Xl)-(2fqkAVskiO+N5cp#h6?Wg!sY_54WTuNq4Ey0&h$G>5s|nT zJXIu)Eo@r==Feq3#^&S>JK{>%d6onGdGEiEY91x35)6dZPpIe5-&d>;|04N1C(WDm zf%>INR7TU{GhqaDMEi+61LL-G=r^lx)t_{ctEG;YPJXFlobLI%Ht!v%m8&_-yKc}I z8~xfnQ{62#t<3z^A4D{erul{gK&=aMxR?Ilo3kO5mj$TMjNb5T<^MK{-|~3dD7#@q z&>fHM!<$RzgxKs`8htvzQ?%rKpVuK;k>}T87Ee->@4RdpRaG5BMLHMB ztuK5gv#&y2#x$QguIw@7ZPfiI?zSVAAxa_#wYg8Z4Upvh_CJfsY#$su{L>k#;hN=q z#N0zX;!FJzQ@5Ql)i*J*`KQ3d&HduFnD~K^EDrZlWdPFn^t<7MIyq9$Fgap->7lEF zQ{WRWNM*enzPYARPP09@ZUwtl;NZ{Ab8n5?JXR8_q+h1 zGj0%hlD@Q?Ud(0qrC>bjNY9_Qx#;`|PC@edc% zWp80t@^?p2yJmJ(heR=U7K~lcyhz8ksu2!cX502mPa3ZZ_JR+yI%mBD!g%^;{q~ek z0cpG)xk&M6>S%(s=tB>2Zw{YEPhLS{k7YnYknel6k=U&@$Pi9ZlXM|1&)gmRPLRim zVLG~YBDK)A{!GVu__sN^b!r?^ox&h>|Ff&UFoi0yM4mU&er8hB=8xm;;_dj+`K3j)UnltDf!O7p17F)>Iwo@U>P2N9 zMrmpL8yR6X5>h*)Ol*~3jN6HS`nP3EX{bg;pX^hW#iL03 zKi;jgp1h0O#DdTf7 zU3khNR(JqxbR)$ccd{E)MFnx@-}5X&VLjYqbub=Z9~5s_SOz`NTS*JN-WX`KX6YDc z>6PaV(|duq(+_m~rA(hcK>G+%UZiqze!%S}4tQbqxXZ+AGRtLqUYRTZ%7{{94P?Tn z8?P*iJnt^<9AAi&0{~JR@TdF0He>$EyTzDpe+O_pZ*M*{Upr?LP~L#?_k+-u{kdH9 z#M^ulC2rKA$81%!PoS@yB2tRA<`g2CJ|viZ4FfPVI^VOrZBnEs4t z4-xN)d0<62z@7iqpf%RmF5y!re&|=&iCB(MGX0b=F%Nog99?oiJo5WLfOf%`(i(vg_kF^AFcnCQvG-Bsq0u*ZdYP;(;DY1ej#@f2Bus%mwWJEUsz$L z*h3mLJ(-+=$$4Tb2F~XBy~mlXhoN6Jl^C)Hgo0hFGpgY+FF3F3;Jwpz`sh*ztc3tE zhkb?92HEBfI`#!kb=5cwR7N$cU{RQNV8Qk-*6D*U1#x~Xc@9s(25Majs{}t_D77x} zN-$5?!J(&Qy_-ShGlc`$zwVq=0ey36H9op>M7+O&GeomLKp)`Y5W$)f#z|y;?|T!h z`GI@~2}M<_v-Ft=XM&)*s_Ko*%K&R^dN~j~BSbyoz?sUfJ5@iV0Z`QlXsYbi6dOff zvfZ%a^~Z6esKEW!6_C1o}4~J=k9<^Wc@T zVF9&7E7*^EAg;@$`AwG`XeGtHynr#sex)m@^%z~wyovr8G#aWjQg+~YwJY>+yX;|& zj<0nc1=KhH?k*(k++UcGn@UPId{#DR*r>oYM2h8PeAb7bRcf%(KZ`s_T$vVc4Rmq- z;df{MTb(xv9UI3tBGxl|#i;Xy@tPHN&AywhbEh>6W|W^gbDH*74M`g62-P3$33~4Q zOQo}AJd^E(XC9tIwiEnwf1E>4L0WGt()#3QxDA*6SmotW{gV5My^+qY@vAP4;yosKial3KR_PB25mx#<#<84l=57rQq*{sNP zMj*bBJ?F5G(qSB4wj*wkmNOv~NyUT4WUlD_yt^A$Cn z6rkO~01ZyA9O++TF=$iS{>r!#eE_&WL@xnUK>DFW_cuT1e)+M9Vq=WxvWmz9v3kGJ zQ=<|aD{sF;>s_;dkVD({Z{be)@fY#CJ%RUAYpGu;is{2VVw-y>rL;{oGth+>scA16 zd#BiAZlrtcoxVhgfq4bQbAR&#pF{m$z4v4% z-@MEX^(lQ(D6;$M@`sS+sahFV!7w@)OkI6#F=#*n&V)ZAt~F&m8d+CXzcGLfu9{h) zIoCs2hO{%)sh|Y}J`L-PyO$47-&C~#3QXp(iGmlLs|BR5qdG6>s#Fd*C0I*2u5^hX zYkoJ5G*62SA@t|CHiNwhoA)Qnma#}icExrf9(2H+CKXBON<>&GSb6s;it5l5Mt+0l zwHeh-WCF)~-MSq2|L2*&n-D+5>jf$dqaClRy50Vxyz@)JomJiSo--+=Dqvx5?dNsr zPZ}TOWN4H2r-arQEFX(pfjLt|UJRVU;-pMv2e36uR5BO|;DadOTtF#I)?&Vsh`6w9 z{Jm}fZBdW@t$l(F7|i3!MPC~J3Y@IH$Q4OWOq}cgYuEMQRO)mj_1DSM1w#h_o+dEh z0w|1SEj<}_PN+OpA$z1bhU~WF!dzWTx0$>2N}ixPnO)mPc&PQN%J)EANn{fKnbVm1 zsNBh!zp)B5L;+7Slaog_C0Eq z76eK?O!#Ng<$Bvk3HL(i)?KLRGw!$oha$1hVIs$v$D`NtfV}T{P5MyD48RfNjzo6_ zQt|ZDl>YwWGMU z^X+tXh((LomXWO|ZAK;6Y&9%ydywi&n$^smD%oK#o^ds@TPo%UKOPweKmDF4DLLj@ zXV-_{;E{ydM#l&KnW#!~DdU95q_=rbHYQY#YD- zYB~YZ&$s3}pl&yC++1U_bu(|tnk}FSB_RSlYW98IjHOa|dLbo{S~(e91hY8xRm3hQ z1rGPXZII^sK&f@UX~2T&na6974zj*L>PIe8dq4x>61M*el~c^dvf17+Xyr>RR?5>H z#z%DEQMtTdMD58MUCb8a43>783;zhK*suIN|E(jhRxC=K}McA6JP&tVH&1X7RDf z9)dgM5&~D6Nv%O9024HP$DeH%t}t3bsJaTPwP%K?AL5$atUf+8lV7_F+ZZO_d-zgC zlqWe~VZ1dI@ zW=w0=&daW8ZSd8@kzjNN*AUt|I}`ZoU10!=5~U!aVHWGa8P*!lx2mU|n4)l7R20^A zn8TUqfgZ2twh+%+l`E`=f|)CNqz&4G-tD3>?0#~j7VFD#(glqr;jSphd9F7UrO`n9 zmXyfKHbnTBA@6+rvn;o+sE7NBcfew|XuUC9y5CD4fsg2$zV97M=*w zFL12CrQ7!Zr{AY?*a|Pa8MX;4V<}dG*JT`Vc9BK-!@^%Nsp~M<+ShzaLNZ&khX_MC zub{b>5eHm)MlS^o-tGcuSOe~!N2(t`b5!t#rX`PM;yWjQh{qQsmw1TakUa<^V1PVxitxWF;D!@vM=NG`hBC~BpnbvJHy8BTN#6I|oe39L_ z&fHPKVygSUFJXCr_!hW~w_iNlNKW3JJNn8T>HN{3x&^8bt%E~_yMtHapY4LV0l)UF zej>8VZM_6`w3yVJb6~4Ky8~codb(H zkqOtO#Rflz!-LWO+!V#r{kYa#r2B0b^d>^9)^;h2XW`1FEWD0;PyNj4m% zDTD70VhG#!TwwFO_PB3kVoh8O0&qvc>M>zFL)Nh#+eMDS42Ca!yvaIa0reRWoaJ)c z1!rYa1d_ZCgHD;BiTEwK=gyIXGpM!X4C_qR)d=tA3D%nNF_wzaeGmSB*3ZFX+n z!sLpYNSM?tpbxB7LP0jWU=Pm&XaM!jHk7H)cEgu7zlOnF0ceSO#}m2U@_Iz%xOUDU ze0{W7{AvXE4fle^n2Nzp9YpM*sT$L&*H@2tw~3T)`F4cIpBmW=qU#wXvq&8N4>(DOGH~}yW;1`eMm`q4(wbMC`=Ac8#_XC^4er&yBWu@ zn0j#Nzn(ULu!n+3Jr{ow2CF2s$IW5A!I6*{GU6CL%tpMDI*(f z$G#YY^ee8pS_f$gVm-@n*YLJw^zUl83;qc7FP1gf&&>s7flRqqoCpqfu?3?jD~}U(e$G;OT;s6JBe_(qxJvG81_>WkXLK={wfPRs#v#y@sS;br|7ocN`aDGyi)};7lZ``A zhZ}S|R3_`#oCA2)s37uKvTfJ)7oc1(Z3^+e!xn~)`@e*s2YbX+ZB`Um{NA`1W8u}p zWQC`};sjqBvG@gAvL6~YFKCZjWGR+$tfedio@~@m4)V0#s0YhfJD?LISM{cv?YOQt z6FH_Q`k~1ZFjP7m$03x5EgYo!hs(s5);vKj}UYw1=2kG0mlkUer} z)jB`@ObGdYGD(T9ZFKQztR4H0%tpxi^UwDO=FDsMV*|Rz5HywN4E1NlO;Ww6-3v{eD&7Ggr0bHX{qI3sP-pPesBNb|W z**H8S$?GD*ygabDVAm~1gKceU(tcuHIW>!Sr_SNrX;VZV<2Byr#b#;*W{_6B1bPX7 z5gn-fB}ZIEVZTo~Nng2LkUR!KLL2ai{b@XBiM9CWhLnB1!uolvIR6iw;M5a$<(<;&ci0(@? z{k#r{%olJAN8ei@RQ^cZntxLyx=%&rKf)f3@COFa?63gEJK1IxP}yhU;OOSoLg9+@W zJ33Ljxe;GqWR&^Y4cF;-X9Og?)5&Ep-+CsDHkNR6yB^Tw&( zFx~E*OPQrks}*MQX#?aUn5A;(m%e_ z{7`SJdWdlW5u1@b&+Cps9^#bOaMLazwQ_73E0t9v8?zxX`X$_1LAVlXm)f8~$LumticdskUSH0SK)#ya;0v-{%s1oQ?A z*W8|mvpw4oX?Qxe{#Z#Pl*nza47#o-9&bwv(qo(!H<9@u$o1-i73&2?SCYRu^9w(=yJ6;Z$r;+AA( zd}+@3218Q0FUP%e`{5*BpYI^=govF({C*jQP2?4bm33?|z9?e!j@Cl@>w?iCi0X*U zmC+6a!3?=Zb@s`^f#Ug9BuPKW8G+QHq=$p*+Bi{h(CWmDDnE0nc1%RSh`4wpuSK-k zBV+Dv+k;qOpsdH7&9%^#SD2ldKL64cN_w@K`C`ZFM2+=0;f{|M$H+`#s8saOrm3>` zO$*tpK$9?u6J`SSd|lrPyu22+E6%TEb-ZVbDuoZgW0j^%f#tOG~RkBe*rD zC3dR2rf=5>L$;&fujd91A`scVW6?36X8c|Ls*LYoGau>rmnfmLgQtha?b@oI4)Mq` zrivu%2mo@jktgre65aGiJGb+%qx?i>j9|LLtn~bG>Hm^`X#&dOe#GwX@Nb#1s`%AS zi3KE~Eq`PQ-}5uxVC0Ona? z%VXGiTnea&)v?(x7*qE27pWVyQYq9_G!)jwl3v2w9%l9O6AKbSMMVd4VqLL|(TnJc zm89EA_QooUv&2lDO>qa!VgGDZj)`=~VCROdT|pGVVP~7*0{ZrKr=IyB5H8pF?04>`=aC7C6 z)cY#&GL>lZVA-EZ5!U)l`)FTIFz`K=y`)DKdCdZo(+-)&134U+N)vhT{do_?w`Bm- zX9)WNRh|Y!Y{3Tg0-dQ0l(W#<;@ z{YK4P^dcQ+`IAow&Yco1k)fR$Sp&{T$fn7Q|(X>*%YK^v#|lHpMFw6 z=u`bx-EBO3rpa&2kD+1|zmD@6p&6hv4f#n5xWF_RKMvHVw&*SWQzdX($6*Vs2AG6L zDO;s5k4UoKqHVE~bjDf2W^Y^-^pY$o`X z%iFIxdAt||C~?}ahfO}G8)U*lNO$l(j-Y<|Na6%DEW1FsTUh}G(?eIrp8)SAii3p( z>k%5p*0e@L-94Yo<38by&cXMm*^)v!Ny2K0n3~|IB2>P=gD$zd=6nCHdJI?0TIxeR zxMs?Ja*=KYjsZBZOinz2@#{d&r(_maCLUid`ljaJ-zWDEY%TWXXqle; zc9+*JGvehzQ_0_9v2MNF1jnF5A7VD0G3T-&a zrlKN}fadx;0$g9)JPUT}Lgx88_P(R%ShS|3q&&|w{&91)<-}lQ@zwu4!)~nGt7}Z_e0VU5s>r~J zUYO>3VC^DL7yJ<|{G_U9JZsa;PX(UR7r>i@DhZ__H*#kVc%DZ-+ck&?J_*lkL2bQL zs{>Zm-^xM%Kozqb`zRZ?($GS)256Mi32__O9YnUOUm$qn5-q?}V0Gsl)Q~r-g7e1q zPx)+<3?6f8ZqhoO5J^UuKjeokg(KAOhRFLQq8?Iz=K0^OO)s3v3ywGlvm_lJbROy3 zusOyu<)7|ASI=8CXq>pj;VP^R^E2YX+lNjkma83Nu#~VQ34~=VLRNF%VHKq0Z4HX=Mqf z$UfsGEq5`V>}9pi=ON#RKCJJ!%O6sH3(ZYAr8a6&0CsmK^VN|hvul9h!1+4$GYsHO zCz#ez4`~$1c8Q;N_0psR$8h!(5nuJzD#Q35qHgvkVETvA1=xYsjDLhwLy;8GpW#+S zP!twP6}P;tISYT$^hUl3-|^6FVw7{fK!T9qkH^p2n$J$i15f@fl~6M+J*H64?ChUQ zzqQVQ&cRD}J$D+DOKmyt`75_E82x)!lhM&()G6i{)SLGuduhKjbvvJfx5V8kV**QE zD?ANd6BCj%*T@%7I^X@_`r?GrTvc8Gu5^o28ZA&*QnkP>;o9Q95HXKqHJ7k#K|69f z(!qaAHO9QC2mYJ#R>h*6V(p54vH6`5*Fl6`gTj(LTEIFZjikO{wIfhLJj_!6e#@D@ zTT^xY6F6fN_&he_Zx+Q2i!*tjmgBxjtwBRda{>nti<8ctyg&I?vY()t+ly}}5Mc!* z6|ybV=Ns8Ll*@?0RT3aVq(;#)9+WiL@bL`$P2dQ#2ZO(|r68P^*VgmCbIQqxaq0ba zjjy-cq(`Co>3MG{74XlhD|f@K*8bD@dVfHj1_T~)y8B*u8St-zPj@nOaz@N7|22Hl z(9biVh+LZ*Fp{wJ7g;tu|IT^~Or%(YkbzX$MG9L6bU>wnou#H*Z&MAc*5C8M0R&I$ zyq}bJ1RxbiZBF%O%sjzaJKs>9JfLe}R`ehtb8`!WO2Gz_{_%5jU=OZ8pLWiM){5*- znwVj^;X@S55$UZzQvDDp{_D6UwsLdi2olwQtiBUwH-+9Gw~stEJgXF=g054IkAS7k znwfKKr#0qq);FGPtv&e5qZVGc{@sDQy_;2IkM881F%x*BN&odi8qHsDwmA)fBkRtg zoHK@TcfiROkkWU-gF^;mU`Cs#VFP{+BLVe{4~7mXJt>f<{hgFJ3AoZ{^h>~JJvW(( zf-8H0on^wNhuE{yxkL1UfVv=zAv5_kuRZ3WY%sbqaFfvh+vYqDLYtP5Hh47vd}Pzw z2F>RDUcmjD2JNipudnwZd)GeEH1P$(&u1w6v0N$dM)>8D!H>Ro`&6aBM;G0;ft)K} zOH4APd~`npS*KWJBuzPB2p9Zp`n#w&brIsXzEzGfw@uH%Q7+1QbZ3>u2c=8)=K_w_ z6`QDwRCXl_z?|oP@%j|-FtcjJvQaAyo3O!gGV(g+?{z*!x3GR!{Tt2SjKuwu$bwy+8RVE$ z8;jhk7IbD^^;`PKpr!dBm{Xu%aHge-^WLUX7@hQb)+ z{X(4qjZl&km{8SxRT_62=d*zVXZ&)0#>!N=hQM;+%1{0(x=V$^Hib`*l|u?}mc@!5 zn<{;$C-t9k>}UMfRZETeu?Yfuf-@o(#8M_O%UacDkpED ziKI>08$KaTj)|O-Xe|;usd?;dYg;Ro*j+tPgSnJbOd_WQ1ho`D%Z{iL{ zq+pYNo;Heq2h2zQG`z+VJt!>_COv!DZ^uNe9N-g!i}{(R^5mX1&n?B%dM7?$7p?cq z?}q4I+y1=$D-J?Q{X0+B5WPO3Q)RKFLwR`!PeqD*+PnpC>wcWz$hu;?-uwl%_WNYb z&>iF!W6%DA(d7}(3lrfh$xCON$e9p6%PV7ftbj>+cnvKa2OK>bSxy;KA8~ znmDEp6OYF4_nJd)Aqz*jmBh*NS(Pd-xt$sYQY6%(?bhx zHy;K&uZJD2%7$dHrsE<%#L|36FpCL!{j~3PUFy>R;kAHXWXAFE=HEZcWgBoJYx$gy z(-fiaZ?F9-h6R~1KO|QOLe%Q}T`u;~On_CF)txr|V!G_a$wQ}3D7<)j#3TMe?g^ua zkGpFh=S;tcc&;i>R<^AV;(;(MtAV}T*ko|N90*UM)cDX4x{TS4DOL*J)JMEDu=vw; z&Z`qS)na!bfKXjjUv`!d?k8GkZs#Q8j@=~htyk4Ts$+k=L;PvdUe#39ia{)K z?oYBZ-KSxNc756il&7Z&%%@9I>RsilFbTC=m?s9;5B6vNT0B+cE8MZMs;?%LWPJjj zc|BG?D8;&YX?ArrB|E5P*1%|oohRz*tzY-=g~^UfpPmvbgc;+CGB@_NQPD?&83@8Q z{54}jO0$=NKWG;g>qRP8p!MDM!4c~4rigwH{+=Nsh11IqH&!O6KAKWwmV}}C4x25V z>>n?;$%a)^t*G#G9@r-g6`J9aPPQceo&{_^X3iY(^zo8^CGy$Ab|OdBklEMZB3Djb zb>Ky%ZS%Q7u4kBvFiSGl19y86R*9CXOrs8J-#kNH}vHr%@7lei62-P2=VV=$W?l>1|J%lqm3yH(zW`^I6AP z^qHrq$EU91q0jGAT|Zr!bX~Y8Ha20>T9tk5zc=6G_jXwqMPdIrk$v8HuaGUaSMXB) zN~qVRZx&tt%?NQ{guDI|ub!s9jPmhEN z6~;_q7CFb3Y-eKRt$zv@o66n0G`OdGwe`TAaOdDvFPmlKTTH3kYy&qu7b%v)ct?S| zS!>3Jv|O47m&IgOLVX11!g3R{(RPbzwC0Dh}Tl>!t}OEYcc~!V*?M?3=;sf zWErdz-#ZIvF5o(qy3Iw}Q7sa;yx;t64*e^7<9SX?3{J4WtAU@;;^#IcqN6q`m*6n< zj?2*~m=4?8f3@rLfA?EDw7e8>mBqkuPt+Qxb0Jpgzz?q#e->>8F&**_J)24bQzc(k-{T6?{who`2sNdsc93(|lDAOB)t31tl?-?{}=#6Ro z!dR!8^NTjE(W4~;%cES@ST(4Lbn@GUU8->9G|INfBW%T%8(n1fjA9{HMp$) zJ&SugfAo6<;}yUy)cDQ)HwcO zqb^R#AHVn?RWX#kGP+kTc=hKfNuYh21LQxVEs3cTMUM)J6cN6TbZc@W4ytkq)eA$n z0g$JCXzCU34M28-_kRYqGXX1=f4y8zV3dpuq3l%3+MHuJ&l_B$-e7)#aEXn<_n9r zjzBzxPZMu{J8B9mR=crv(6W-BcsJvN)8DPH?bLhMbFPl+FTT5UHaYx^B%$z%>|Fek zj7+Xcr1}x&jxZwhmJ@Qc39lhEEx>14l-M#h|AycW<829&yi2|x^QCHEHJ2m`5*}y| zW9W_D{9t!%f$A7wLFwh&h%+UDN3T{+M2n=;Z!ffXG!G)gXveyVW4adca~A}8LOs*h zoOAE+JlB3m2u_c8pQl(xILj1IdIblDj$ z$r;nHf7gaxn26GDPk{D(ykeq4_i2gSoaDJNaJ=M^iEA3OUGyA3+u8g&r?BsAVxzca zgy?cpe5WSSU!>9ASWDu=qKG~lXc*#N;TK2=QAdP*=2lz4>x4Ismq}u$t5FYSD^^8g zx*eB1Wm6t~#{bJiUu&kn;0>WI8i7h%0p`K^xVb&Nd3d|e+&w9B=}gF`eo0QYD@9S* z7lfrMsl+L{CM>m8PhR`+_rk#k2*sj{)#YB1qUXNB|1CDrSDf0pXzgG*qlvsMEQr2! z*1?r4a{TL^(xaZ-I~C=3;$#%YLlc8hn>16^*PZNv2fg z+b;5?S98J;-lzj~L0@EvdoMv}w`-iprR4IfIX5ePNoEIwY!r)jk$K+XB_E?(z6A%J zRX?L5{z*9;Ve|E`|39P;w*})POdFpED19o=?)T^40ribZMd~=KZ4@OPqzbA=w$@@r4QYpJ*=)mCnYgCuK}Ow_o$zZ^C1-#C~cDK)?8Ad_!#x#&veU zKOOkvPuG*S6bDF)JZS$tuMHq|c8e183Jtyk2*2cS#{QeBZP72f8w6jix^9D^u)%rK7n{EGfcd>G#)J7faRVK(TC(W7;- zVE^n_9dS3!c*E5P7hywg$!o(~TnJPEnm#SbHOJ}}n9VKqWN4Bh}s>6oNe;I-3nf6RpL-8oSQ#kdFxsAU$P{Z>CVD!@z?CD z#c{b)<{S)CGmZ<3=039zc0JT8#R!nljA{b**_zAdI5%koaf`fkDmW6~gZJ5gOH<=jfRoJvs5)q3u&KTw8BJ{jXh(`6%z; zs3I(7N%`VDKl)A8bEM`<{QYHDcdY#NM`cQ2Z0?r4!NCv0FL->?=(8B9Pi}V#Yzo~l z{7Y6<2hL#x#@(X5AiF-V;B{1?$y_6>?)6b}$j|xNfARh>-=c{t`7^YiS@yYZ+HLoi1>U085&7J4=>|y+G-Lk--hg)sniUjjfGgGYUDAeBX&|dEsqXI1bsDw2Qyq| z#0Se9&qjoG776P{=1p1^S~MT7@s&L!O7jb=%*W?LuSVje8z|HL8a8YD*?t^^cx_bw zWM|vwNSG1TIROgw>gD9!uwls<*X4B&TD&sY?z^398Z3;?NAhax8h3vm4JX@&cI5nM!z zt#tH8T#BD?7J5-qb@!Y^nI z{u&Guu}XZLD#7d9%SpLUetivC3-Al{X>W|DjssVsgKvH~EWOcf1iQ0@`ykx8Be6nw zc;(115Enjiuh3p*mlD+d9s5pux`@B&^4I*fA4eS~Guz9ai>GdmiMSu4ddN*3v1ksy z=1cpw72tgY&2N@@+4H24w$%W(@kCTht61}Abv)(N{1oYIP@lI34pFftC6D+%55Y~OIKG2XeEp(|Q@u3lY=y<{_skt98y;uP#dyasa?5>) z?(1r%8_@yD>Qwt?fK21vAI5ekTDPA;SuaS0r{1t$&2`boxiRGN+b{nGX;YMS<~ukn zlKj{CA*B`pu6A$s9H9mo^yKly`qU5<$`k8G(K3k;Ef+hqN zYxTl$knjA%kRZ0HSMG17Qur>A>ZP;51@iYHHg$PRg#HeGA61CAUYh;d&FNxgFt~zP z<-rZ^M{dSG=&Xs&ZLM&x0U&pjIRl`#lmKU4dr8L9a%XjzPwKLr`q5QT>R>JC&rfIa+qU*sHJ_(R{!^8|sj;!ABc7~fm!AlZr38ww2xC_^G)o@+#uUi-lkV+apsnev_tvGh* zFmW^Xb~RhfFkHH8mz*F5Ma0Y)yRDo1HW*AkwMV<$aC`TBNen!Cc-<`wcgMbE{osNq z+HxtaIcYp3v61a~aaM}7aV`St+zn`_+_1<6w!kO(4qqMhmDmHTcIysdbvfMwLU*I2 zx@2w8->Sj#y%C*|ZGlt>|7S8UkN<2PO_Wv%W(rCpIJQZ|M8!CNO-jx3wTDJ^Lj%dFVeyk-qOE*7WMi z@$qfZ^wp7K;OlY9lX5@*CENqC@JvE)x|(VL0fXh>K~QpNtD~A?W`=Z5?ko^ z-ojLa)yuzI6H_gPC0#{>t7+2RFyfi!SYPK1qc(Aq2=zcdy(EHjiDOOMJPKb@J>%@z5yS2Z;OTb@jp zLRJNEow39Z3Y;=&ncJjvYPL)RSAnTZ;<{HLbone$U^rcZhhZhNJ<22A)|m?2ExxL8 zIp}rFEeV?mfDeEDm;QPEXM8_Cl^#}m5Ew)yM&J7_bXGgU>}s4x`&ZBBdjc!*)eqba zvL9X5^yK^TivV-2$5y_$gMI{wRL?Y&$#c++LpWL}GihDzTmIv%VRGO0JcSW;{gp5O zN&mSc8$UQR)lp>WPBK58ycJIL@ESbrecHk8Z>pHO;n6>2*xU0Az7H7K_es=C#uM6D zBNAZQt=eR!{drM}2RPQxx@yMMZ5|3dzvDzajXc5)9&&>;N;W^j)=Go7^D*#|ciL#| zzO(>kG3-=I2|~;&y(qg6S7; zsp>lNpze{)@!y0AFPRph@~iNtUfO;{Nt@?ntB3yt)g8kRok@9I;872)tgF0!1pB&& zW1$zt-3;ydXeb=;0(WJPV0i``u6_+%d6=4SIgWpIzv1v(Nxi}v}x9Wm`Zz`kt1FnPmA%wRK1E zy~FnfaEiOOxoaEPIc`SuGH&lQ4`TG)=gzYi+^f)7Xs_vdEB8`H5FQ1&sQCd&kAl~a zNA2>n&Q^RSM`cZvtkHw^%EG|QY^noVl7?P{{`f}8m;~J}qgb1o!`aV)$lQ`MuFHYD zc{Q;{T+I27$l%(y-_Bb)gO!XUYhGYss|B-}px|Rpc{%MmK)H6$4NZ~ej@8xBhjHlhsGsj-_(o<`z!mL zmK3GEv3uaCEM(i39sgjk)jRMY9MEpqE3P%_t4#Pe>h4@1<2BP-`HZXdM?NZfH7|5k zVETSAWN>?9I>SAJ%n^z(>!t9XpQ>l5OFN(t*+w<1I8ntGJ4}XBBcRVIdW*M?zGFI6 zfC;ES^p5cU%OusU@B~|2=;S9|y$k_|4gK?BE&8qDwx_m(2y{%x^ zJoN3Pzw$Lti9j~v<04rvNP`NI)e2a@b5NZjnDW*3H_YwQv_r6!B_ntOw$BfGhP~!P zxaQKyxT-auEA)CN^eB15Z5ly~D+Ai$xAdtGjgFq(687i!T zV;rt9M;5QT#6nboFL&RkWXLF=jO&?3AYf+S0^YCb|G@eEA`B~Gm#r-k;dZ^SEF6#- zo@%oIc~0Kpyd`%qXr8PH&FES|1s%KMbl z+<|RLp(pksMehY7N0Q=X&X-Fe1B4S@-+`Nd$h-d%V{5LHJPb2@Ke8a z3FLIiN;0heRs7mwLZP>kY*0;U?3sRIrGcy5$8Y-ucJ6`u5lwCAYT=XTjwjSZ9vx(g zb|t)jwY4!LVZCyvEtB6=3sVAMga==%W{3>b_ypT1=<};Vp(*wnaG)Vf?Ev*S3zUP($c-9@LM^z3CozDKT5T3jiZ2c(^nr31vc^gp6>I)5Y0eWBgcO*y!u`womT_XS;GE$X`Hc+5? zfAjOfUB<5Dq^*c}w9PzMXqk*J2&IMX7Q5K)6r*hj-%YV=8O&90w*0{K|6=`bnvL#7w;=^L1dg@r9nu4_)(g3F*Djs)a zDjpv`!Tg}(sQK(U-b%8InuYFrV^f2{KYxrvbN3>ntm-@%dOC}2^`5SX=;5O^QT%8m z1DcJzo2gT@65~$&7d(8Um$HCLx(*0d6pXJfBb)$4D07~ z*iI9#=cu^St6RHxg@HkUb9(Gx$iOT4lOn1JNy?5nqUSlh7uX96=CiWg>{>cmmm%Ke)-5g7au}CWr zBlm^}N_2=m`Bf?x?R{J4lN+}FR#pH;=;2C*z3it8P6-_I;Gp%@BM6_o%HXM^d!MGB z{_Xi-|KU_@Td&1neTGo3_wA=H6$a?8(^VW(F_RY62;JJ>TYA(JdJ|H{Qn#<&!D6hXj=6CS7zeg58{X1XO!G&(wZ_o>mm0fZ z7OA#r!nDQSfKG@2H=fx+U-EWq_TV5IStrkRKJDXj@=T2jVR)#tPLy)&ffr}K7`b#fvO-6QTQX?fzvvo zX3m{+`mO9R(51hsZE~{l61OK3dgoM6U!;!5UY+k|!rxBo0{bi2b+!8mf%J=CAAg>l zrdgS~rbs5Gxa>$IH2ZFb8*U5G#Hq>+Mw-#*e(kwqNWl}7TgT-@r3y_7Vb;Ne*SYz_Ocd?A+; zh9%4EJ{MwMv?%?M!%uNYckK#8*R4tC!&jjH4OS|0H9VQWr(dft24PpdOk{sL0t@ni z$4r^$Iy@8?x%}3Hzda0__A9^P+`FNDgYK)RZH`UGg`cnzleg924jPB;irLo%$zr@5 z18sln_h@9d9w?ueU5L~GgCBMh1mDohnbxf+gHYYZ#+nx*FU~&pBXn-NgBGt(>Y70J zlN?$JVZ5ANnte-$7nTpoyp=Ogo5wTQ%`|^MJpZ*JtJSG8(Z8S6-;vjZqiFr1Vqo*# z1KFZ&asrSK)5Gs?+&Sa1=Ok^05pDi1durzAt{_VXV2)da?3;0I7uJBAUdkK-8KKQ3 z^gZ7ziCX3z-J`jHS@9*8!fG&*ve5|b)y;o~0n)Pcea-OGC~N(E_v5t5-KQ-e@cSAv{^M`}0rvrcyZxOEY!ByJen_c~aWHEBg)djj4(x)X z5kNxUX!kb_+4;#z&6WQAgyJe;?O=?n`V*~~R#?BEKNL2dCYMYpRPuisE=KYZ>CBP( zMcY@|+C79Vhj(R9{Pw>v2*^3WRE)T0yGz?MZ+@|7a8mnFs9yX$@$_Cpy|+Nl`nlXV zonvJNu@|;W5|i){$2Iyjys9pT7P;38*#Ya6F3Q$GIzla`f#I;uC;?ul3VnW2$Tf*) z-`pF~MZ0+@JusR6S+uQan1c7`ZK#*#IVf3Hi<-1l3p_AnF>^ySHjf%)?`Rtn-+7HR zS}f{{4a2+1m8+|6(XS2b$qEHB_=639qZTegT~MtIm@#}k<1c7efojj2veo)zddiR|VKL#t&#O0?CO1Bs{<*wV3`L|g zu>o|vQ`7;%xqdCkzf;7CI(a)R*nGXyx*=fxq-HKtg78WTo7b)4f)3cebRYTOg2Tm7 zs!Masl)leAwts4vj_(u*;BNo!CTD^8n)~FZTSw-XPM7OvCEM>uMzH7H%5beK)WZlE*fp(5Krt{(q$kKyA1o zcMd!dyu)_Dg59{iM}w#=xcP3Z8AApESBr9OACfuXbhRkpP`@ zeK>}ByAyr*c=YuU4FfLvY{GG(sOoG9MXQ3cL^LBL+y`uju})agF8u(mqZD1RuTvD&v%$$j&|4YU2jy?log^UuUUKHM6z{h~J7=VX@0 z(>8W-Z*}`7v4iu#a)`1_ShFOhq#B`aM~5U+B?!7CYbe-;!e5h#H|Rz(`R*@fuuVGH z$wXwJ2RTn8a(~1Aj-~uYX=QaDzijiXO2v(z8#dSFN0}SrcZzPu6zfj-8XkHa%({p7 zzvQuZu)XL(!(R%`Jr(pCb3HY)L87R{$4ZQ_drsXjMkEL8&W(APYf2N7D^00ji&39oc^#H_RDRtNiZIU)5$ORLZFQ8^FtOsP9YUd|xtHxst7%?CA$I;9FT zOVd%cogdTj@ZTO2Zm>ZpQg9T-HOLqhdG8vZ`wzGA_ z1s#>4`kpXV|Jog79=U$J`bTc`j=(BBNmP-}7Y=EB<=oo*qtX0p_X+2;s&jY81XvP~ zXx`a!8^ig8=3TNxSo$x}3KZ)WMQt={$ZGwqs%`#5CgiyfnGi7@zW+AzMK7d_DR7F` z8=1WQ2!(Hh=EDmUe9POF5nR#hd$1nvHme0DNkK1~(Qys1lM^77HKP@usQAb7haMmi zap8EI;n3$-{6}A==y3FVJz_f=Cx#Hn%xt=2EHv7Zy8hh(b=F4BzN4>Iw-)yNsY~er z=0As`Q{<^&PshS%?E#sFm1?n&$hNQLGF{C^2NJKw=%{V&jn%gOUUW)3&rX-qq;yqU zt@V3P&z?y6JjB*&MF=$+j>M$DlCUBEJ8-io()D%$Fe37D_unTLCk)+>T@MTyXwpdh zUIvP3peCLO-8XbIRMN_3*+HV7p|wCpdCWr`O5-eAH5fYIx@8*E^4KcBTh=CpY>D%5 z1%a$~m>tmG4KIe7C$l%Km_VpineJ{5zz2`+HzKu221a{Mu?&$F?K+PZ9HhDKSxX)} zX#C!oM>h&(r1#9MfAYnp^4FQdl}~5!5z6Jnt^(B1v&(^5w{L?F)5x8Lf%xSuDn98| zO!J8rKhRYfO1CP&gFAcS^$hfczK>_P8VFywzry8ItnYRF3wnog19|8y_u9Ve7R7XD zbZU)m)O(Ld3q*#v>j#G#>-ltGH5{vayYIM6Sp(+y(&UX&#k-+hYm2J>q+J;eA;0;v z6)sJ&UUox%rkh5Q`x7OwMLp7NQ=e%D%>cA&rZBr$4xI;WZpT?&ROJasRN;T5!ZO^A zcZaS7?QT7Eh%28~b=E@cO8*lr5LG06HLWS!Q&cg0LSMfGx7Z2ks^%RwkB*kBf|*}F%fM8g_D+~Te)OZ@@!H8u zOjPTuiTmF@URnP%5C4<4ne3mhaj!V~$eje{{3e61Wn4VXE>V1ov3skfu|~ufpcNxp z%74SD2ldy(BgU&aTIpU`=3L5%l0!$Mn^~q5CJpt@=EDMB(5j=$wZ+ydl{jl&TD{|TKn7W_f?-cl<6l)u=5+$%er%7`<_O92(1l(wYC%LCK%J zaBdpz9IB(H8)5dL7O^XiX=^B6DODQ;zRsfryA8d97q#od!q9G)cH$4R`3~Ps zlkk#S^v7vknajpEULE)Y%gD_m@!A>Xf7P{+#l8TGImSunIReUdv%Zpb@)wn8BJ^Aw zHSF(%sr8=U3-GGMJ_a3o;+}&#a*Y`@+c$WAb}S3$mt38~~j{}NltE|%rp*eck3i{KL-Y+6U-Q6)RQ zEb14jkz0?Jj?caBx&1Es2$H}&BNQkocsG}^`9iXGpsqsKrctTj*UcxG)$xPa+8=H8 zuS|DLWN>yiohik zVm|V8ngL#N)e(IZb8E#4GW2W9^PZGNQ%(CRWLH~$_>Hx@qVs~6=7(FZ+%VkBHRb4k z=2h8Naj62wK!TRe9o|?w7lAT(3WD%eUGqFp<79sNj)Ae1+uxiByzvFkM5TB*>-KEaD!JjUU3LE(CpHAZh2wT}s zci>cg7Y}++D7L8(iq&0|jm$5Kv15_|W-AaU11SyjvcK`tP}%anu{* zm_662QE&U^0Ex#M;F!E&VY%htUeUvg?*Pc}C!)&3kRu0zz~(y#7G#rLexjqNJAo{+YYnzM%aw6HwbfDAN z1}mZhjF?wqoJl@mMsVLOWJ*hh2to)SnE!s;YM_UAOL1)dWk^(d=g3N~_JUDt8lt z<0|w<27X+(baFO02>f_%p);W|3>ADL|7TvjhwRFHXIgxXmF(m+Y_xUl>NOu!A@0I;6 zQVJBDwjhwy+qk=hV%?Q`*U zCJpIs1#3%a)MdLD{1NRO);ulYU3i7N?Wb4X%9aBOH^_de0QdDU^ex0;*qh>f@sX zXSMOwNHpWE=^=bk*x*;cay%c3mHp|DGDAdv2p{4LZtWbhg6op-ur|Z!nr6(5T66bw z%$IcQ<|x50wf*~SE*90+a{dOuoFVxvKYIU?_f$vwLVg3YSM{2)s2Ru7u#0-WYmJX?mN;#wV5Bvh}QcPyuXuXL`%tyQVkwV*{&-O~CE;u>KgwauKJ_Pw_(Yq|bb^Ip+3`zrKM(&rz7q z&^!wxvVL{$)to;Dh+2r(ubBvSNX)$!y;yBDAdvGrOUMQr-41T9MPtaB%Yvp8t0T#9a8;W`bogDLqC`zuv3|qo=AaA zHr85R_Sn?O2LV!6`Yl#F;**@@Vl%h=lm}GbJG41;ahVf=^?{TZZvuQ^-Fut&nx65F z=Rgd1FUNP=)DW>2iRI2?+Asl_Pftv_oM!UYh#eSB({0?ZU!4B$!h-w4rx)fhz+1_= zcIUmN_w27S4WZ2Zf1+;_=0vFcJKOor&9dwF4c7z?bJv6hj%tBMCW|GWsS?OkevXVS zx@P15&vj!Si|FBgZidZl{YjcIvlt6(wouVOPw<^x4ZX##px}*3pr1J6A~9cUp3}_Y zNC&W;F}`yq$Te-45lw}F+~F|pm2H-pfx1}a6`IT#^8uc^%L8yPL+_LImsllR2Juzg zhh3Zwj!d7A;xmF{ki6DAd?jPS2E=?j za<}%S;SPes@80%t_e4|XqiZ&>(4gg9eD!mG|?M+p4Lv=_(7M(|4WhTI|fC zPf(~lmNuLYt2+40X%~8tq`DYSIf<8@dTXj*`DGg16~#S<-SD>H!SsS1u}x-!+l~&m z?;An~sZ-;Z$hJE5XSluW$@0yyUt5c*orM^o{r2J1TBs*WqjbC8bsGFT>fjGY+iPm% zXBc}wzNwI3W1FK7wB++S?}zGHfuqh75BGk2d4Ai;zMRk#%<0qCZv>a$xOdD$)b(&9 z;If)ndrkP2c6)=dIe|BC6gAJD+_2MvBYvG?N99GLzNu2dGPo4}?w94CF&vq(7x<)x~hn4KtlR6d?~H_srTgu!zSh>mUflR`fy}r@E^Ald z=u%J0rSis6_4{JjkspQ9pnPUxd5=67OA<|PoOvP8$t;;GSmqoU`u_065zdZk-tbfxSbd~?r32s0jIL=gAGwF<8u zC(3N5Eu&2=7D$c`8sPm3iVK|16NUJohxrWp;OBUbXmo2L`VBF|5Mso%BefPTuxo{U z-Jv@df@E8cieziJ9*6PFXP-f4N-N!>e0|zyA!WTpLb@4hZFozEQ!iu7fxA_}4tic1 zl>(S!a;s35dE4Kg8%lom8q_b)Y>NwwTCtS>eXfgLf}QCuDnXvXNJ%~BC6#sDvDOie zVvp2cBxM*z@R(y{)zj#x%lMc$Emf`ertI_+TF)=OxQ&RJ%Q^&b#X9}bt_Oy5wUw@K zZ3ur0WEck+32zvKo)w<^1a)<2TA6MZB#iqX{^WYZ&vO+xDXVoT10jnN~<*Wb_+$ z{UcEO?X?SYf#LrtpSvWwCEz9M0E-^xTcRcb1_r7=Ov>yQiWYeBbIQ$ls0!$aK35&j zv)F+>MYq&<;xp`dlqaCeOWk|HL;FB3zOkl+C*yElrVDA@={)brJVlA8HGQC8BwwLb+sfHPVt7ua%dffJOt zKX(Y7xqE3ztLq6GN~JVkLM$20Q1~1`=&%)!oNIuE%1MtZG#_eq%Yh5m?Y&BSXPPsR zTUiDZC+@vU&4c7tj+MyliM~u5DwQ&$_oQ~-K+(%{`=9z#&J+hMt}0rUgL?8?*tFijb^0+nq+e(t47svb z#y~#>0O*LGeemAa%W&8)7*4l*x{qPD$bMA5ZB=0gpP$Yfn%4bP3t4A;U#u@qz}K1K zo{ZJI5jBbR9~;e<(9iRdmpBH)6*{M11RG2tvG%94eES1)v|IF!k7NmacZxi=ZUi(( zevqxoWXCq|mCWx7a&Cj>qD&8QjcC*&j;d+Ys#X*g1}=4I&}McDoo{O}uqBzS4pf-F zcuyC<&UF6>3e~uinIw~5;yPNhc2QJJUZGbh_-*cBxsKrw4PVB9?hzfLd^@tPoSR;D zQUpUi$vbBNglj#Gde%3h(qhj)u93dwf9Kf|LrJx?Tg&50_iK&hHa7}U&dv|Z9%eO9v1NV4D3KAe6y zc)-)l{0iz@)XP3b0&)F)He&bCTaq0~81@37$m5_&2Ejh!7lFO7aF{U7lAuaJEc$=Y zVZJ~%#LQAOOD9Z=zJA}(@pCcuY=nNMz&{2iZ)f4g!jS-~Ni_7-PXG?zzoqSlUO;W( zUqXRAU>TZBTNARmW7GM}@N@&v2u&NeaQIMu-peHWk(;^Epr>GtgydSX}XuT5q}0NvZX}e zyB$#X8}}gMX+6?-l`S`37ex!Y*%^;mJbg-L_7udTYnj*IcksjK1r-*sk24s&@Sqi zqI)^eXv1*dGmU&*%ntU&m0fnKuE7xwSCB z`l?DjP>!>*fqWE|pU%l!CGHS#B?dqpx(aU^u6uc`FXKX)8)yB|kB*KSNt(q}$LQaa zdXithdwKnC?HrD-Otj4eqk^71ENjae9Pw(KoIcr~Syq2Z-$GklyjbG>WHg5&ywsQ2 zFRS+he9w&|`%2%yan)!udtLt&$o!h9v7ycl&tryJ$d3*@SUL>z+sO*s{);sLn^O3M+k)VE@XzT6)c7;?eSM_?2u zbCmox{KIgwHtA4k`(SbM4U@eCz0DP6*{I183y$zcZ439g22ah1UfsX8fezAl=RlUs zC_H^0qHa~OrNImNq)+Vf>q|n^)BV>37<_3ap>sAoxn!SOYm{DyPF7!r5h$2bzBX2; zNGaXc(FO1*c@B?<_q4~rag(UOwN{01N5U?9N~K*9uXi`2um>;X&R3JOycHtdKvDcUs^Tzi&gnof`$mOHw! zxiMaFqL!nPt+$NglM3^zh%RYv{(9QDRt)q<2a8(Iu<=NavApM2N1$E4zw+|F%{}ybku~7PA1`f&U#3v^YU#QdHZ0bngDurJ2jy-+g7MOfge3p*k5+GMj{ktlwp_onZgLcVUM;D2;7wsU|=G1GQbDC6LdL_~0G@pQjZHguk2vNF%~ z>wJwT&br0xz!p(I_JEbG8=j5h;4|?%j@l#CGmN#(jBV82xx_Ofjg~oW{dhpz~wU5PD zVP;obl;PVo`1Rvy`+H@+pAT^?`Vm`|*Q!oR5Bu_MaN@Lk61(~1v|bO0G59Tbh6wRl z4@!zk)6*9=@o0uIjm!Z&Vd(!dlSQ%-+47&#x$o3I191*0iPOdgZSk*thkmI{kdFG= z+J=P^4+HlO1$h#Vi|Xt1NOq|&?ug6}M;m9$>Mc+tSLX(g&$P4*)O*tvKIF+b;%!;3t~%uq zvKnb+wldTVMA6rcKQl9O6PNgx>@!ifoL-k_Z>t!&CX4(L+SeKV-);G31Kopu4ra*d zi*#6z`o~q92KmkL>G^$GW7`fBxNq2xw~a}za|>$!tLEPlG(2?+{`mFSB9zy4iG<+! zmK~vE-Me96IF(xThr32B5mnTMLZFBx22bq63?|72u+tY*#%y(VcguLW&Hr=c>=zT~ z$hvW|KJrYM8o8G-F8K+KWxi*k2;zJ2tog`GiXbwRE+e$!!2w5b0@Jy487^<+1y3LR zhB@LvUx~C|>WjZ&8>y^Qf=;bvQRAG%R%Q-1?pIm*tc)9fnkK)B6ER(X>TMVKUrky3 zDbc_`=~V5CRC=D8Ta~qhy3Zr|d-57pO?K{b3KRU1Ld|EsXBnOwx3lsK)REhzwowM2 zwncbyu$n??s`G2vuRO00S4h-|>I>#y%Ir-@XDY`h%L`x-ptb9c_^yFI= z(5m18xGSBfn%%O^FWp#yqKBhwbje+$tG?HPX`Ws#a zcWFp{eO1=^vV+so)lcxh4(2Q0xP47yooO@C=izzX8;}KLWi;T2KV_rWE$&t|0n4*- zG5FLO`=;#!dw|yXnZycrdK36WGx3ufx8Dj`=ux3OD#d)yRx_-&3e$*WJk!k2ey7Uz zGr<9=;VVAMWYD;WV&jz6=7h|^m=&GhLP+G>q3G85x{$Y3Eo-Gk!^8&$T#r-)fFc-I z1>JO5k;X0<)-I!|+dG|sJM@#siTG}r*5pjH@UyTGAWG7fB)s=b6s(Ur1lXq^pO=f_ zY^~27NpYy1!22FgY}(7U9>|7T`;Tc-OiqVwYDDs!n#~)4%!EJB$ZgabFV9)m zjW0h}b)w2Rrf=A8^ZqIY4c!*% ziTq3+Ys3}t$Qd3WUG}cvDXvH`^fN(!pU(lpbtZB(S29p$@0de9ks2#fd4NFPST?r6 z$?AYQ6vS`?ANyS=K?}UC08!nMKAJ03%10(WOW^%DPts}xN;%Lt`2FEidr93ZAIh_| z(C-8nj7FZ@_{Kb+6{!q=ufv!eiGGzYH$L5e)UidQs>0g4eCKlKI(Ef=X7Jb%pGRUF z4iefLYKq^2Ro;Byp7>cd1g~s!v(vGuDtnt;SFAn#OS)^~a}n&WY+1A39~AUNzwwd(Gm*_>q>z1_7k4##170pPO;RWX4EX^h;V7WwCGTqi&pc4(-e~U#P&Q z&4Wp^WZEM*;t%Wkw3Ih~VVN+1hlx8hB(^8(gyz&8{tpYxBq9>KGh(s z9hCT&1DB=sjt{wFXH6gM?TlU4&+NRx;9r7KpMJkr2)OuA=Gf5n>N#VGR0yCkInYjF zkyvasz9&uqUISSCi@**&$AV$2M18Y$fKHjuUuVPNXYXllO`?iM4Nm2WV^x)1=3SiD zChEh{5-VWWEJQ|)>AJi1!Sfs(%f7F2%kQzDD2cEPXoJmfzqL-n4#DlSKfSrR*tHY9 zdyPz55ZZNDaBDECd*;#}Ybp@@#Nwqr8ud@|hN*dk;8O5$B0*q6Lp?Gvo@v*RayLy1 z2fj-=utyv(W*jJ9DcrY3->88%mOkAaEzbFOAW7jaBlen-a_!Y#8BVoB8*DO>#@+ZI z-}(QwOPSuuKC$cR8g%J=NVlt>v=n$TxSS2hrd#2f5i8 z*>Cov6-PhzaHTJSCgYp=r!Oisc|ZD7i%h<|ayk{ClQt0so~+(31&Q=+9Y_^|K&(jzSmN0C_NIr{8GSd)@8ZQ=Uj z*wzQka`iXZoB~gJlMi4rp4TCEX~lkN_<&?uDOuPtkpFjsaeZ)!^e>3QX(L>$do`be zKqdhZpU@vS*OQBWkkYv;c-CIn9s}2ytEE?#9B=!fkM-tkqAg9j7%eBuwp!p@!+0{$j(iG7u%GT{aED)&C#kLVN4=JgEpt*8)+5mEq3(^($g@p7P@vGJ4WZg*3O#n zIq7JEZNBy>tP_=GHx26*288zz)w7DW*NdaDYFNeneF9|3dI(tT+#35x?Mqb%pl$LG z-@b^!@#}UzF^hi+hVmD)vXFzaK$Zw5hSsS^vfFy*Q z;7qT=wg34VaGg2W|LK9Zz%_5~3n$MzDNSsvY{v}qD+?7=gAqboXPUWEBrh~ow`cYe z$4rLJ+xBC*RlIG#A2uNpu{C$)^=ymGg$oywk`8k%9NM~him|XikM`qlMgeu98d!iD zMyg8PWHb(WFXJ|pI4H3_=3#`?5H0Iycp#H z8Q2I-raziSxk~Vv|C*dNLQ75Z^XSDD$Pex(_t4W9)!|2$F zS4%JjGhokY^X4DLT6M`XA0sA}P#FRzo9^~?hd~=7bq^XmG>89k+|_tf}htIgM)-AX^go`V^`6C9!LKRz>=qgJ2a3 z(36W=WtLoopj&^dljd?PR)AlDm3$)E2aBNTjYNS=0b@_D`o`@m-c$bHU+Fq@a=+<9 z?p5ChJXFKWN_ZZ(s;)>*nhKNg@I@UgE(+UXX;cKJ;luafMAuf3Tc^xxP=q-AJ5B2A zIvu(V3KoyPMRbTh{Vun>Z&e#DCoCJly+r6P%vYiiO*4Hxyz|Rxq}6!Myq3Xq|4QB? zs>fRpOq6Xu*H;S;I!pX5(|J;{!Ot`(L5GAee`DRBb z_q$hR?XT2`^Bsn_)IZe%rXo?;jfOX2)o-XdLG_<8MB40 zOImx@Z32Dt-+Ri?`YEfc8%OO&V(8H!Eu(cuzl7Z#vl>-x^1I_(_SgO*l;7)sbq}Z5 zrS|X6&ih`IgLtxSB&sRMGiwW?k2VJh`w>PwGY5Ai)-_Ah?^VcmI6tF*Qe`ZRkC zcOvv$NN4r)VS#DmJJ-Mc61^M5XT801irpHgZNS=)SLc3iT}UL~8?xe%hgaz3U+aJ$ z2t#Mn3j5yIzFd=u>$*SXE1!DKXLzUf*h4zYXm5Jx0X#CIu?Ux-6Xjh>uJ)C_Cj7=( zNuih1Wb!vSncGi1_krvFlov$z?K9+VaTMU;um2v}(5 z&)0KoC4>$idtOn7V6NGJGLMQiu`?XbOpa1CMSskv6ilGch6}nja9q61o(2uZ5OISK z$@5ZAcsV{lTOGD>xuIg`-m2lJYxmrnn^mH@X7x6;vA@BI&|l>aO1I0MZIPVaKKrrS z=1`(>zWG>`cMt)Y7!ZxV=sOcdA5OHw&WHZ;-g@*{sRq;I{#fa}NGw~*UFc^C;r5?L z5#qv@B}44L0mdJ{I^7#99hFJbvMTT@k6bZE=qx`k>li|+At+o{G$sYDW`wiSg2!C{ zu>x>(=pcPh$E z^pvw9N#S%`w5yxvX~(9=U~0nM0HDjDc-J#D01cE?o(h zhGgw~D1>KU6LmjAjBm_M=UOZ3X1XN=_1^i`U9L+gAOV7|I0Uapf?mW^D{%*g6ulRl zhfr?`g*58t;q4JGlu7_^(kg7}K{ii7|Db;U_GfqN;GX_ZoyZtIK?~a-hUdjw`j?-G zGs4{X8-Frmg_l;*Zw|6$IVAGz^rD(MYEn^7S(hss&$c(OovcaT!pZtGONk~~Z6U)i zu0EK-lAR>`He{x2y~nr@Lj`e)Q&r8oDY6jLDISycIX%f*-W53g68 zknHno!mR>w;#+94k`v*NvEXk z2mCpUE)b!D0`67cBpZ|md~LyZM28opvJT#(jsEr|kSV z4~di70bJqEb5rqgH%msmTd)6EJ+JuF%&KkVr;=9lgSINd$z6H*7qgc;Mxq@L#q^xJ zTz*2wcjISsylq1J_rAk*5w=~61*ay_D|-GEURq{f5IsG;YHU;0%KE0%oS>SZ;OB#H z%%6S#d@aCZ*0 zW2t9CqeX*(=ovLuwK=MTZQjjNN@ncMns=f6SaF=+1T`Jt5sy4eX4v1Ef%3}3cyjMb zfNuvq|4#2pV03G9y}`dp`rJ}9kh6exTjs<8mi5GP%py-7B~SQz;Zo6RGTAro%o^>Z z)2P%YboF2Uvni_?Cisib45A^%lP5phAg|OEr~Y$c=BF22c>br&$^PmCAO2)|aB!NQ zW&^iK4hKUWDM}PavCBWNM`-fH6TV8@<7D}A9D4M6eoH@eJ5;6M@9qGTn#muLv%ADG zl+(Vs3Ys-HNjAXOo(Ghkk`hRB2zA!|Pl#uAz?Plk{cZ){PPZ~xKFt=~U{n~i!JTFSvTcCncp zhq~P@{WL<%Q!LK{rO!M->t#j{yAjXM11V27hIFe5cHF@73W_b06Gv@FPi^G1KoWGy zT!O}0kL0HS(={RX%d-ulGp^I^$>vXEO#L&1?vysOeo0Q4ehJOLsmV+gy@-7!GG}1) zdYgIeQ|W9{v*3+|-~X*gv~!IkOQ%CXc})J+kHdQO;p-OSxGn@m?ztFb*}VdNbon{i za*pk~rBHhy4|%+`D_Z?sM4IJg+N<0k?f45~VIZM*;&EYBZ7asU7w!hmB#N;M7o12vlbX!Zz9GLSsyM>$CGb zKn*AHHoK9y7x~tHpq-XX8V!nL@3@J%gK61$#*ytS=cp_@sld9fNSMRyDEDC`ig#$Y z^T~K5c*m`am9n>FIMfO}-pt^1>#|0D=rTLpcGS0_@+Hn4C=eYC+e4Pp{AciMZ1qh$ z9~g_Z>w<*1)QVA+&eqn@4u1R;@C>h|Q0 zc1xVmgT}Wf`kRk_$fjkTk#-w6P$l<@QTF-BvddAC zcbT2Jr%!3)9_l=AQEy4R7V`1Q;akP9 z#|=#yB+8i4^B1>3ruWRG%7+ohE!Gs9%$r}Ep_8{`(4bi|Hhm16?mp7Jz9oZ`wEffb zq1al_8G(XJ(1f~KV_Wqje>ANi&PYGTM$VAEOSwHPaod#2lkNKWU93_R*O&mS65zEr zwNrIL?|vo(e5}`A%Ex`ZOZ@legOguF#SoXvRa3-G;#~`s7TP;%e;Cvu08vzPM-(pG z7swVd9AKbGbap%7MKNprYFtH`A5_)-=kyopM&(4khsWOuy-0i}B)mVHYL@v!=k(2w z-EKD@DGOb_N%piRo61IaiQPIDeQ~7dpNZQ2=*_1ZUgx>58Os#aTvDVNX@6jEwrbxk zdZW5e(B=IWg|}yL3eR6KZT=KQ{k{Uq=N7Gk7jtBf8{5pk8>0H_U@kx$^n#YZEPq9p zU0#3UOZckwC%CUgHxiTi^RnJ7Iz)O8+4`xX*%7yKEUggU-M4#vana3(%Sw!DLH`^e z^*piw>BP)AP<7_kEv2>33m~mEFQpH+Yr9`jwX$=HEkCWVFR}>~tL(I&w83&gssQXekj#m$V7O zIJnx83B!{_pcULCOy~0IwGMIt^Hz4O8PhHa=$6OqGW(n0BVZvxWn;|bq~jG!D|OEI zTs!o@6Kb38A$V?wQ;V~L#S-f^NiK7db5wjq9(`gNmPJdRC_h8OGq_1)YR1&XhOG2< z)a91)P>!=5*1aX3)g8u_=^swWH&-X&5%3W79g;yiH?nWH`qk$Ocn8vqmhR3~s$5n7 zQ2V!i?W5gD!yO@WHp{=1mGwdFB^Ndb#6c>w-~yXpmbA;f6$T4};E$!&7>!2fd%{oF zQqmlEIJ%HL?T=2jF{FUl;?xqav(exTSXt~Hq|1?EXW-J%O3q5ai-YE0vS&Z3AAf?d z`VC_8$Cw>XX8mXzoUqj{bUpl~+BdP-*6i?Xy9nv@eot%>6yYCr6wTdmWi)mDUse`cn zZT&zQFt(LZWEV(Cu159k<*lckGbFyxt`V5fa8!F&BW$7lTVdT}noKZP?f%xzsRdxF$=Wc_k^_wM zh20b5Ei!jA8~P~@V*Urj`&d$hnZ(%7+&06MNOUk49uh4TwR*LMaQf4DsLdMa#(qsj zMM&Fr2LIK+uTtgkO2^SmbbZXan2*z|DkZwUKUczYdn#gQM;AYrBcq{x|GM7kpRPau zaQWqpGvhv&&|Vr$CVx~rw{XQ+C%c|gW7eY`xv3r^perMia_L`Mr4X6<&H19M+6V9Q ze^cJJfc*`=c+qCB-*;=Fw$r`D(YU>}h@!Wb&YR3p&_Lr0@F($0?5C$FFf2-dl*l60 z;i5A*4ZFs#-wMeJDpv{rh~)o}lY4pi^0vUaAu!t+){5&O0QlN0-pF~V4NbsO3p>yZ z&MNN&?95@Fn)U8n_|4jdO69aztFobsE~j$tWga+duCj2e-q>_<9ttrgj}4hU$*N zec8tAqrUbGx6(A&Qe-tkIf<9v4hx}5s(z7lUuv61JgKmJTRV$6>%)1+Yfx`>EO@YV ze(S5V*okosuLmsW#Ff<-lj(jZ%Nj+HoM!D3CoN51;xon=zot-dceh=R`!p=J!uzU< zA24(H@5J${B5KaESG>+%i94S^pGQD$<)?7%TihwB!sFN5+g1s4h?O&+)CN1AuBrt4 zgi2RLE9QTDn`ZrrpzQxhi3jK<4GIsvH~4kN^dITCo^2IFlZXSt3+9$6wpuGK*${`) zjhQ~JTxVnYEMpfGIJDf-}BhSpLy(=}pIZ$Qg zuZkIxm|5;a&k~BCRC#2_ZA`#F~8UM@dAV`SQy1w##gOOc>L z|3=1B7iq(XNp?%e<{XzH@+~jZiDQslPYUo>qX`;>>t%V9V3*50{zkDSP%mc)FOTz_ zkZjm&Opfyt=8XC#e1Ns*)rQ7K%?{G03%sk2yPWXt%7x!;JpRpac-w3+w^rLloly{a|-qTi7=cjsJ@G{UxG8kjJZp}95fHPmT9OHsc z_bdz~RnlLuUfC}&>a+|)Psr5<5;|U_vJTIL9{nSpYpdmPC_Z(OqZaTX6QS~D@NepW z>nl&|woSc~{Odw#ucFYuSw%rUqjp|lzi+Ma#nO#@jX?wf(PISk(|X*Xm}#`Sf=@4F z>9?Fam6>`?@C-INo^wm2sG#Y{pPImr%ve>};bugz0;Y_g4*v>%GY3#0gRseuzz;eU z=jx?^83JF0T7-mrUjQu+<(24}G3%FrhOE)w5zDJ^%cUYyTtzxTnk7QzoE*gav8}>T z3bZ>z@Wm;Z6YpH3Aj9Q9IGsFnQr%+y6X(#x(iew|(s+R|?p&%7Ai2YFNb%!19NQOJ zhTfM~)(5sy9d6G;>w%MHy;_T)8aK=SQ|@zW@CDZi@bzAnjcCEiW=#J`VRPl3NP3kT zAmJIla2R@J?}=3mw&5zhSFq|?ui)d)o9RY??Eb+(*_GIDO8Bk?vFcy#HAhWL-dq$E z)J+j9O}o0!wG}H$S|ux__%6k&beQllvdWlJvMl?N)9dtg6u9O=8^P{w`W_K1grM2fTM|*{e zh%sN+e*J_rPp>ZQjiO7O)5Q)qS({^LS`ciX5D~-*+m(F39KANbe$^yWPE8t;`~Je* zHY2H+&X_^XJ&rN^kCN_2;S8{Zza-)k&d}SpxSxA$wa*pka3W*xDXUf( zIUjgfa))}H{F(YJsaTRq6%#!1>>Hu08eC@CrZT zL8inJ+Q(YusMRO;@9WeI)wkuMq3tIPJiYooMR-*>CQ7S@%TkIMlXn<>B_q zg-2pmub_sn@>8`;?1+tTi=}l=ND{7JZQG(;IHAWQmgDbLXzxpBs$n}8ysayvh!1n? zdu1@t$=63Eik_ZH#TzNjx%%Bq=Xnz!MS;(dVUfbCYB$u+%^mgUJD*H9n=Sm%&(UXR z(TmmnA#w(Rw|S;QDM#9YF)AQ6kL%A=c}%320I?-b6S z!4c+x4iE#GOi7@FdHva`X8jr!z9T0~ovU~FeX_D}Yrnb@q-$QvV-TG9KP_uZ8lA{* zSU8@($}~@1mrCV{fZJ(Od(>n!<$hUvF3;kxF{4HZS|Lg0!}q9ibly$aGsdNHLh-_z zBu~Xkw0S5xj{>ilfAO0sxy%+AbeP1wog9|zV#D6CmIM`5f=Q8+IiaVOtGyQZ|NSQl zZ1dl`RF+H~ZSNt9Qhpu?c=9jQ^aymtA+fJc;R0lU}M+pyTSgzf!~Fm?%P*<(8~j} z{|I?1C|8(yf!abman{5s1T{|pFOV^byP#M$wo@PV>m%VmE{FU#JoGcVT#dxI;E7YB zzzxm_Du5`eI0w6JDt}ip$>z=x(Z{nsM*_ z4tez*P#4QTCMY7)S9=K^{m)WBC%Sn{G)LgH%HHiU!nZVaZL zOUrAx`ghJ~Nb3vGU3usecA)K*giNASjS}&}Bg>uT(B7fZ=ez5NCG-g; zGZZgd2erS`@~O~c99!;DxcFP3TcR*%;bI$Akx!gHt$1O@OP`uhcy%!Mfsw@RJfO$-mxVC3^P=iLWBzzjxp~$Qe6m!S7PAX10NNPr8zW{Ch-P7YDODLy!)I zf2O)@({4QjaN^p4dpdV?0p}+8%Lw#W+yb?}0BJ#SqB?teR5UdYWlh4^(KSZvOBo=fOjErSKoC!Y93tus&u3*4qt}WB!w`AiJwDkoT-R z!H5JLhvXzN>j*ZfyI`oD`k~i_DGqUSQE4v^AgD;qiKc2QlMFm5%ts!s2bUG%SvLfOM##Wnhp&eLkRu5=rw}mYh3D zWoJlHJSaC&Uv}9X?xL+9NO6vB>xo<8N<(v(s4jy@jE##!5eMCBjCqtQtM{Bf@2|Ug zf8txq4;fs|-I^CvalfOzMrO7m4xw&k4+8s`QO4~=F)vD6@^d!!Elmnp*1iY$&Vf-2 z0Xa4Kmme$#tof7^kLl14NArux58bYgOcG7Y8@xmLhg%<91!9SLd;RS0$n|KIj>bPE zUmIv`u=P2NThJC$Xujq;Z@=i$XYJUD8qBU0sV|keE;b#9Qkf{Aku*luu_asMZ*Hf& z&4@Rlp<8EFA`{_Z0)6+O+uQh}^>NQb#H-#GgqCZN!*itaE#OcnFxqniq0rN(((@`K zQl|1|^7gV^&{+Vc0C<0yk1mZn^np;hcpysDBIduxP!Q3)^(Y&?5$5R?Y|4mjTTha2d6S&m(woGE_Yp?xailp)S1@H1}EVc zHU4ASTrVY}gT*W!@bz9-o(J9i<{Wo*4fOHD$w+lQ^O9rv6K-qD2`(Ex$twptQLU6- zaIgATiriz)@6p1{6C?*0Tp4wA2dO|iMZt#x56KkXe3>&+63mHzYu3pkAqb8Hs1Yoy zpV7BrGXz7MF;Hc3-xFE$gMfYuoXD0W1ht~tV){5zqk@L-Sd(u|EA*0$f_WTz^9@l< zH(;Y+;feW9dGpLD{oaIL&l*}l1%-jWh6TOYyWDI<8HV&h^0x0>)_tD+U&rk=`pKx8 z*6#U$ir{SV2P`MAC=hi&ACs1L8^JJD8k% zFWI*KgF+8Ve|=T_qF>W<8!B?0s@!080)Od*yI!IK~}YqmZB;dY&g?s0@{ zoO791@piIRdikwi2`x;G8rRlWB8!`=M2-69Mfx+w0wpwS)|{5~m!>#EB$-EZgQ{rQ z;MT5OK||#BIk8bH3BlCLZMk0RGx+l2(40IAVmB)8xCO{o0_MT?_c1hzWWm>B88cv| zqthJs;d3x(A;{myJ}(!oP1@AAbSHv_=6T3D+!e|M3(Wu7Q>ygi7|k?s4oBiC3o~6V zxyD&>x};FV(jNtg6v(BInENSAaGUeW#t^k2OT4O$jR=FX9a6a_(hT70rG&C~)WU`+@8f z&8*0x66qd;$7nwAzEm)6Ef}(>g|-*9CKE_rn-o z{hpL7w&nm!{~LA==Z@=VouZLm=b}fxxM-2o_C+=|$b@Tb(u=>{ZzCVlD&`-9W19Wi zevI8KvVvKN_<>6*1%E9f_aPxxFGVAtzWTY!pgGxS%8eb<5M(KDtN09l!cvYc?`o{# zYyEF)keOf4W{v_us0z_#z0l5+e*9k1f}T^Y7sf>CD$itFdtW-IDE#pX2b6QAk0!2X zOcU3BJSp97^su$L$5X5%d~$nwl{}x2o#vKJ_;C6Geaby0LFU0&NjyU|prSq;;*$S6 zDSabR#p_R7%b*Fp>9RffdUn!BlPB}*K?d(@hGWLIguN*FrACOaa>CX$r=ocsIk8P% zdr!1*F4^jR!?;vM$cI97RUG|(|HT;7N2<$OFI0NObJfDpuUwEr-+Jo)nL%5$o-2U= zh+y?awGtasAc0lofH4tM(z!?WKTlIrB2_6VQ~#*kw|UgchGkSgBg>@+uX814NLvIp z-_Kp^n9XaWxEl|qd~?w^4=HC^5|`cm(+`JmpRvHZfT-_cd1jTpRtncolM_-9!l;r8 z^k8j1ess+&JVnlO>ORz+{MHOL1E~X@=%!U+LF-$qWLm5$eWfzgB z8*_hs_H)SsXu@9ZRpe6~Ma4RaV~xmNKNJSC7MH*OjUcbIRh7{M_XLgbU2RhB87LOa z41E@?#A`r3(}w;}V=a>RD;Np>av$(R@pS>XU7!aR!!0KQAfe>PAkt8teFI^Gx1!`# z*Eu#t=q&%tNw!XhqgslMx1~89de1|nLbcDIwvMD9^FX~y$4-nEdbGF^dEELl;E(z) z}Q!up0Z{1w9MEm zJ(rPau}YSJeiWnAvMuVZYk<4igk zIfHva=gnUljq=;A03AK6PuOa9@;xRE``8F*6s!%2FE`KPpTVAyS#s``|`^y@BO&s=sbG7b2_`^7zpXKQd}S(XML}$Hse85X&Z$uR*eK<`t+M8| z(Z|cK(HI#KF?Y(m>2oWE_lk38JTv7lyDS8+h2D6NseImIM)V0^?}kk5QW49lr2Uzw zM2#%nv7a9At0cL@BBJ&&K+@$-)EYQl!SssaT*Ys2g9$Hv31iF^*-RGr*AS!41S=VZ zTv-y}6~$8y7lV(b^B#2IC>I!i&Va`_prhDXgh#<*%DTGtdz{VbTJfA-(Q~d1$3%{6 zwl-Az?~eWq`a>}cQ^H!`pErrk$5mw6k(f>tsTq6)EK3$yXsAQVT7Hmd;#0?2n6!UFoN}2Rp52##h%ECXY5|AuRSa}qsN;wpn}eEap? zCB4YFMCCQ1C_M{iXWEJ-_5+T)6qMp*e#KQ{U(5Nn1>Qob)LA>Vnt%KG>C+_Fo^i5i zRNn(n0xF6|HcJazuk|9;=#l@tNr}COpJSJ$I_jZ?cNA~Idg|%x}Ifc&ZDVBg!8rWxBTs#2;Mk6)jjxvPe?T-$u4T15(4{VqWcGE5yiHe@k_l)>*PB3kCs zbD>3%%ADTe?b&a9E`~kyB|ZPsYD2^XL55?aUv)cxMlof)o;?~DL6BQd$aA>LUYOXr z>u~qgq==l#3>^U4qx3ytZu-?nt|jE(8S%P0v5LCQ%{%oj?ErA{I9Dd>jcs z*rtTxeB7Io#1qTbx|A%=Q3$su2p7L70h@39g*db_EjfGPGy(|(ZJo}acrW#`dJIw| zvRkE@UT5d*xv@2rxUQ6#eQq`};HI3-Vg zB{$Z4-jI+hRkf@5Y8x;}D}8}j<6VIXD^t$%eX#)k(!8f?8ZBK(6ys2Hgl&wKn{xJ_ zXAgh6=oq((dCC5=J~OEp%4eA1j_`Vrlq~c$k@#nw>Xs>tcu{>jrV9#oiFTsCte}NVXH)>-yszeBhxLOzMf- z;hR0t+iMaOl#^`yfSbugdB(c;s$u#4@DPSWOL*fGa;IE*b6MRwX$w0EPb!h8qSZ{S z@9?}KxL}A=OYY}&QA)!eBB`Dmwg8NmFiJyVs%f}v%25<|YuhDPZ6Dr$5@(kN2*a{i z;=+?1cEhL+R!cMv6LpcB*GXD8*jWX?v>O8Q7l0}!NN+)U`qm*q83_6MKzFgOGn5d# zcF^GSedYAMbk|PC*oKVZXv#CV80Q2Ux*R05FSE-ZIH7kqh`V9CfAu9` zp!rsi4h{py3W|N`c2^?BV(-X;Rw0^cK$ODV9TMmo&q^Rf#nBD2=5Syjl>@pW`10-B z;+UshklVBaN8xiqWrQl%hJ9(k<+0O4&MvbhjbpzXgEp$<**JOo8yDUl-;Wb7i}PiQ z+7KC{M!1`K=(2XCDDWRv3FjyS~VyqoN%$i zUb2)`Bl0@_RkTm4d4sL1W&r8w_+MG&`dZlCTa?-wALR?$G{PA4u+4O1r~pRdco@PW zB1bmy0nFV+%5F$tc?J_Gx~jI498o4|CgjHI zus6HzyNuBe;eY>4UZ*O~Ou(SxsfG>=!%1%Wve;MbRMbUVTlY=quJ-%*c!_Mc=_qOW!-Igjfm|*{*ZAy z;mUjSD!41S_@yqK*E0avS-3?PUCOlJEvvq+Z5LAK2RK>|?ELM~UkJi|9 z0)mEC=4dG6lfUMtTr*^93lg71noT=RV$uP$Us@{``qLbOZqemuk%Htu)i#mO zn|lQ`Ewt(>FLY1L|LMX(W^_&6 z243f+y3O8}9F4mA4n>qjd)Q%55b(ip%IfGIvLAq`KT9Q zj^O)E!SeU@ebc^PUGvHCbu?`cJf{agQ+{FS zd9KJdHsUmjc8e-SrtJj^5tyR$#BorylawPaN@NHd-OH?r@H+NyY~iYKDj`;$u&~kd zyL|4EmEt*X!ll_%)(a9a-)C=na-xJDAGCjP{dfrbjlRh0&qidU#XPV?HgW7w1iqQ* zzUo5ZlF4#cVLj#v5(X<0TZas!HOQxw3O4Op<_1^SbLTI+VIxqBtVf>$jS@EQ4ST8h zLyX9f-lc~2u)NAvg;^-J{1mf|6|R(l8)%o@7s|d}nwYln=frxurTq2jgxKg&1jc4x z>IU{SK(S_{Z9H1$T86-Hyf`=~_rtgB?M3u4xG&(B#=KQvlX@<0n-#HhWuY-I;1MX| zDK4k4zP|_F!;On?F`s9gqBzvqksTa|&0BoSq^qA3Nqc@e1ht-W1eWFK6yF5z;L67V z&p5#@>H?FQu?Ir<`mFOkXJ!uU-=cNBNqR3-=5|Eut3$hW*rSn|cq+ItgH?!veZS{* zrIwh|+WKynR2(b$%~52owDrzL-?~9<&qDWv05G>|LIuRnb(vE?!}g6 zF9q_{g#R6GGxYESkp%a5+tqH2Yfn|5Tjz7F{EF7-lpvA9cdf28GIK5GY{}uR?Ag>{ zWcUHopBk+>sIC*c>V6&41xYgXFTQ`C_wCB zLFGVP)st1F4*GjNl9E6rp3UOLe)^2wmB02k7Si~;B9wTy8@yZVmC9WeceZ6)5=857 z^q`4_8m=$r{O&q?4S+5@Oj-p z-i8BTc(FdVvh+O={a+~ma{?~6BeKVdr^__zt$XxK^m~GGdR_S%V{u>i-0Y>h-2vp; z;3QPDPi2}c=4Z~3O5}!&i@VZAMJhT8^8M6tWeQf!1%xG@^#Tbc*^~1Yu@KT9#g)k# z(dX*`YS@kELU8TfGs7G0gXj_ffy=rV7m4eJym3&p5N$?|#UP3W-I^k9=E=E@2|DIN zehurC|86+|z&-T16kPRDw!tFs4A^054S^FW34?+Y$fv}Gh1;;XZc(`(88bob@PSv; z^z-L4bXlFX*gq|vF2G|?;LuyV8q*wthZ>@+{^!#>1Hoy@t_Ll`?^1Mycb zKGn?pgLvR>5vJ*P|7o14mJWgEOo^G4l3qz%DLcoLkP3Vmt8F_5_xFR$9I=JB4f{Lv z6nd+BJgpMU)E7O8JzTJR;FYVK`?S;sLW_HE=AM40`E%~1PNfvW^hjIa_|2?bbd{gv z$nP(F&UZD$rToBJae_s6MQ6uLGQ^Ac92RgNizSbKNxc%vRS0V4$_}c(xvU?x5m|9p zJ9Ov%b!nLBfalT5EFBBy{=4LvANpMFl{ArLo8ktqAULT4wuH1ao8_O+6Nic9iNJY_b_XF|^%+xYq@8 zN&(;h=g~HXBT=}Lmu+*_BaCHC-z8o&M4wk+IcB{2uRHQ0>&ZsuI=w& zI0+zdtj{_+RNW?liuqrNV^(6XsHwWV-{e=_>sX*e>$^&xb9UT#kQFEXy?jd}a}KS; z#)pBr<1a>Nbn7RN=HnzYxD zp3ajLg`h|FH1eG5I=f2=_NJg*&k??Mvizjo z2z);c;fQ~cCWpdKFXMl-A#`;I!ymWxw;p$#(gbPTi}19hbvx=;7!3`wrH3c%1co$; zFM7)Q%z{zef9EVz8(57URh~`WW-6zYif?vI*31}%qUDult~*eYN%SNc{)8deG)XAW-plLvEHC{ z)$zxHhl_&3J5%y>rI|oN)6*C6`TBWOXiJu&g@KPj7g%V2oesx;6MObfuVe1W5qkb? z({L{bxW$F;v17-^y`H~=kmDZHw zM2txcTV)6G{ot~Vrm~I&c$;;Y!A%|$>PHP&?QqXZNs3owRL5>Ko>L*ML57ZgqHT%o z?_pm@LTHf+ya*UzV4ZAs^{2&z?xazj$Np}yVP6ZbdGVk9qUt>P*1+ofZUuDCD!rV- z4``J*Zz0VrWsw)Vl=M_$|6JLL1(M}04svnrzH9>8{}er_6`eGm918kCl~lkWPz}&6 zfn`ooX%(+^OlfkPcMX0Ow6>s%C!l6EzgCEnJr%q+Kz~{MZGaquXNOqi?`4}?^ zUB0=b!K0)IJeTDqsL~SAs})^LlUjh)qdXfIxx626C$~-ke|T83#~C%VU!pGdtI|!| z%%kUys_b1pucyy%Pw*c%v;{D^ z+T5&jYVvqSOn~;^Z^B>3FLY?8f6eZY>~Arv4^-bq$3S$i@0Y(QUvrw*SmR0f!dgq2 zxu?jNa2RG-B5Uk$&32oBA2@@atMgaR{b$d`UQxN;w_u5FYMko6kd?a#3o}w%(5`zO}BKKbJ9EG}Y3&!-eB3FEo*Jdk;E#F8Clvs_f+) z?^asnIiD+9pYL<|1DQBolY4nRd9zu-V}I=5PnEUi92RFX=X)w$DOt6fe;Oa;3H8{g zFoex$lT8}+xsmo(tL(j8oDiT71ucPnU0wIMXUVktTsschEIq2oewzO;)9!&5x1oJr zZEO_yor&Vg4!Je7F*&Zx1J|(F!Tpy;7s+08C$LyAKAzGv+{*Xi_%+D}$`iE@}< zrxsB&%(+-;CAddAW`#qkOhda9yrXpCS7ce>{V(3ZR;~PGj=6QPV3rfi&`P|0qp@mb zG+HG53a&Nc3iDW6Ui|!P%x1oDov!ha0-%dK@0K(sNwgENM)4$I z>5vYH=G{MPP;m_Ts^t5BMC+FHMtc69+&pgv_br9|q5=!@7XNSof?)M)hnQ8n0^Sc9 z1MJ+(*<5JXfm~(?vyvFbcssUK6FxJ7W|IfMXF173kFU_!n{e#T_7RGkE3roww+N^c z3e(fud29yYia%m!hGq|$LS{)kX@g?sW`D zxF};gUCsL(SY`v~dCibx?<|KRd$*&#%x#gqE4S$JnzC zChwGgJ*%2q@%Dw+^Z9+}b!6JRk&5jL520w90wt($YW+e-G6}xLIh#$UFVt2n} zR-7*u@ag8$J$=1vA##4QHd5txO`z4_voo3p)4LizmsEI3!OU)f8T=;(-(kRanui)LiNm58 ziTh9h6YhC;+>3=yrXjz^`n`VJx(m>RKPd zpLNbveV6~ZU4i#N<_S|%`FXNn%s#ox_+eN(-2j;Rq&AaXH!ueB%?6-#P^{yi(_*g_GwOKwb(WCfi^XGvSoF)pgIJ1qJ!QJN&T@cxO5@ac%b>NnL- z?>xkhgV)8f34;!o9bjZ^?^JL;L4BY5%^hZ8 zSPj;_*Qori9vOoLU3t7y(4(aPv{_cUEZVi3KTwFW5GU=4_9Q&G%K9R5ZipdG`m)=e zwC!5)35JY|*Sp-GeXg!P>L`;waYZ|nyDxUk!J%b(Z`YxprM7c7HVI!m`EQrI z9Lay8KSx;>hWq#!-VJRn^56vfcAOu~)fU*EKSGb0)ONgGCM;(!GWl-Wqa9E1{5_eJ z=z92RhshJqJM54v&n-`$I4K~PG2u?jylwi)?kDB1@xO$9hc)2GTbN}7nrK+y$sZt4 z;h+GOghWIipT{LsiPVG8szLqkZa30TE&#erv1Z>4bJ+Igkqx+_4olVuG(v}cfxaJO z!V{@6>Pe!Xlq}d!KRc9TxLpe}nkXcHiqie)D{ga#>e(4RJChXaO)Lj>RD?`KP48bP ze?IPRvvz7iapkN92UF@#mTdaTZD*xizG84DOehliT>%zy3>mfCd2yLJZ4lIcfs3-A zO0NtUwPFG>>2~Id&kWqqmpftAg4UrNgUmSqItL^hg0_LfqFXoC;y)=N`d**%GoO2qZ;cwRc>;u`r2V{f zCb;D#$)^SWi6T`-NTl$zE_Ax^X6ULL%Jf_(Z})$slqMC)@I`VK{>o|5?FOMco4W2W z2D*4};Ds6iYoTbtr2mM4BY2baQgpdQRgn8Qt+p=E^A!FCGUebCT`TQ5o@mlfM<9`) zJ~`Y3M_{Ap!FS0IHgP2NFIHGy9F9)WL-Rv5pG`*5I5W;OR%=hN^6BcGR+kAzN6fd1 zRzf@jr*(35TFzzz?&+_l`FS7OkSxN1m>n7atoY$A&H6ROQ8mUwe3|XKev_h?>L_3)`|04Xm&g=%wB|aHsHI99KkzaOq?AWAx zL7`;x3-xV|(}&D@qdnlie+ffk=47?q(!lhC@I#k|o+=nt=*Zmk2z^U}eoE(NRTSO+ zkAaqSbU5FWbva?7>O_Y&+WE|rZ-h%)7V59FzO}a-QI8mfADPg)XJdNp1e&{!1OuBU z%f3PBwM9V5b%hUUjNgJ=>|pODe`qM^v*5pxK!hIy=b&K6gqV2Va6GRguZ~5t=}srY z;q1NPn>pbpVtLh9qohjOra9vYuWsV6#W?5%tQEoV=>|O;`2c;{9Q@5NE-kN_{1J}xlN*o>BCdWzRgSs4eH&o+A ze(Rb&T=gD@6h&~`jd5EXt4ZEgz1peSvJQt~w9IiYsRZD@P*u1#Lx9UHwxlUWm4x3x zjqFIRvKCYYeuW`Zz{mD8C{if+7TU-N_@pNa@Y6s-lKW_=X{)H}L2G5YT_9ZBts~lu zf*Xv1CC8x8A;D!Q9#0uPCg&&qndtCvXb^D_BKPYhAnV-?Z~LapE)!a(i_bB~%Paz5 z)#yboiFuPnu`b7bnMm{tOz!$NDeRF_wuEOQp&i1NP^N|selRBYmj|Q zD!3Rrff@T{Nug0iX5;7^d0%|6yMK~=UJhY3%6Y4t4mmt6Du; zF$^uUEBPA5m7m}{K;s97L(wT_Ahk5t_ar5slZu1hXiO87sd0WbLN!b<(so{9QJ>+w z068NZ>kqT87*=E z6y2OF^+`;bbFp1q7SDV7a0szhEch~z1#|*CBG%SfTm2GR}i2Z4qIfw3o`W zaaLmvjveRZ2f)Ivee}}p-LofJr@?6(4zjQ~*8fWwkB>n=Jwf0t(xaIw7lfDn>&l}U z2f6;U909Tqw>*j=ieyJYu{DKdusfr>Y8ClVrg`zG2-hYLmQ;_M145Qr8vFirIG1x2 zkC=)K8sQupR!K-)w^JR)xy+*!+wnf0TfN7|ijCqKC@Dj2LM@bVw8oq7X7i)N|HssM zKT`Ss|Nk5(qinKglZKVdaFj|D4H0t4D@69pIOiZMGnG*|ilU5TkBnnWILOR8_OXwB z_PM^-`}5QHe|TQc>-o6f?~mJk<3jZ{rJ<(np9eBOtv}_y`cdd?v6SEQl8WicY*ROvo~Jmz^yy!sCx4BeA(A4_OevJ|35<<=9Pig@zM4w; z+jgXQb#v(J9f^O>0Z6epuhaJ4s!LzU$}NM{pWD`*5q%eHS}JSn%a?%?O!w zs%ATierFgqT4Gd;J9PjNQCof=_IvzuxY1{eQ|@zm@!~9YS{Y}K%WL&R_Q!Kgmvn1f zuHJKt*vaiY;b_k@|5ZppP6Es|o)+zmZ7y2nR#myok)N1F?L&O|c>DITLW960pR}h7 z7M3c3{b#^Y^uS@&W6#sy=u{9S@R5`ShJ_0UY~B6lZryMDuzF#I$UWtV%<5;@YSYEs zQX;_0T8t;~6W8Aiz4a<*H~1U-@EYsap=n9lWF%26E87$JTcKirOxf#U>FJ==f+A52E;ll%5CWngu?|gJ3-wP+;TB7b z&T$o1<6oQ#(jXkTL+Cd!*x9_D=ZGjpt(vr;ly~Xnd863WS%ZbJCGW=eW9`)IMsDyK zG|=O}XxA~Lhv(_-M5}1!x^I@X@7eYqOtzLiyrOOH%w6w&A|85e{1HJAZ%%KS_7`G& zzW>HZ18*OS(f^kzX7)+<)diRBqCe$gNjrvI!F#{{eK3aC@49^N7c0qJZ<}dW(c!kc z9146t^6$ChEx%qqd%3GQ8c`38#{ZQ|TYaj)B^k846@KhEi5Ju}$c68U@^vP4JLphS zS&8~m3wxc3l=2_y2Ci#S$X-CoDnkG$elT4rS@e%{;9N8R&Yt7^kij$6;9gbff90ZG zb(#vD4!gAvRz|;7%mYdnGQL>pJfhT&U3H*s#xosx=1(q^dAeV2b;Ng7c2^WYV>(Ag z)(ea$A5iqWaR6$JEoRxU^yfZZPEpo+mqFY`=87BcLzjA<7;5-%Up~&z+6L9%znrsH z6{2guwA#Pqj*T0Uh23Wa;D&vVu-o?~Wu_dJksyPS!RT^{Jv7myVDttVkUUZOaYQA^ z-O+1Y+_I83G}Z0o*ZOg)_D(N8M{GdnIq=d2Vgf=m#|pF>TBi^}Y>R3sq#mC?XMG~& z3nq;6xWoFRr={&j>cFxGzodxuA!(m(b62mttq({PM?pt93` zcLg_s_z4sDfq>(4YU=l8*qT){*BbOj55u~qFjMe~fx&wu3#@W3+>!FcP@5JRx&-j1 z8v$i)Fo4196U;L%_o6u@lFqRqhKEN5s;C(jwKB!%wO*P6&{} zs`QyGgJ8L~z94C~@V0>xy8O7s2~+0Gm4e=kmX8L3{4WBtSzVLgwoi~R8Q)qyN`0an z2jTkOyY%^U+EwnuwVEGR9K|EqT~C$*>n>UekRn#s$HK`k`zB!*P-y7zflTJGNdJ?h zn=L6S+uE<$i0qy715>8kk=RpF!ay{8tpJcU`>0rG2PY}rSD1V3^?WL?-n%-Kx+q>e zmfazG&iRk-hN(&G@|%ufTG9=&`!oC7n;7#KK9)X+>G-mU3?#}ye7P%S3?1zZY3UJRE4|mz%+5cu{dpvj>8+T|3gs}u|B<-wwhWIWLRLdNo zp(?t~<-J~6uES5%A;&pqzwAJ4x3WDe=jfaIY+6r8f3?UmCwueH;KXDNiTeqJ>1T&4 zFCL&!m{4>$z%M8H9Ma-&c%&c`6ReXO6u!^8U5wZYPHJk_`XN{QX9jnn9e6d*I76e_ z$a5yQH15LYL)(STXzU_m{lq~{yu>X1R~K19x0N#_G!}Mgg*yM;PT zh(rWJ2C294n98^@iBdSI!gn)yYcb7M&3OgF&SOeYjbh{GFE#O?u49`%gJ|mea~Yxsz@hv zXNXo7_(AVzlBOx!VSn4f{UNoVKQ7$V#75Y&l*Jc~7&Qev*7LO>IoLcyEBG&Wt^20r zd4j)JY1eK+q-9f}?7UcSXY13UfqaXA$KP1}Df*Dqv*vTo_NH*i1w4n#4UcBCi(JoQ zjuP&-40{pga<`rhelh35U1~R9uIO43O!hkm%MjC^Ty~kc8~PC$xSy<#S~ACe8ZPVT zx;X;jk!{vp79-qM$$5DOf7y;7z0Wo(2JSIKWJ|WX{N znt{?DlC}9#tyyLba_q5O&M@HxNAhf=-c3*I#Ey02Hm32N3Kb@c#v?Zf;llT%WCEh} zV_P;TwDls#f1{-Sc}=PkvH+eeE7k zYNv8b`5CWUU!9`cp_2sw*}ivwlt8%H9-6Q>HV5^WP{i>=?lM3}*_U;P z*fj+T;HlDEK9w1v?evobAn>9kRu2jWZ1_oCi(0z>{B@sKh>L(i91?`c=FU6Dg^tGi|^ZKlIPkd+bhPRoAgJlOCmscar*5(%cHmZ4Kyey#tR!wRK8z*(%leTe8e5RhiO&?Qm3&#^YPPlMT^0&mi z#QC8mY@m!_$tgc}lvo@DwZxeDLFREK>;mr1lNC_?L+sq#sRG&h&szV87>^jJt-uj3 z**JfdXm!?>s)9u*5^T`*5NksCvI!|n+4mW`+dA?*O2QA

=NQtCkEzbG-MQm>1^DeyG}~ygrUyJ^<^4mW4J{+Cz;%Qa+1OK0kcEm8Jb0)gZ`n^@FrfZ9c9m z2=3iz!=RNrN8D)r=wIE1q_?sNF~dxc6yHO!{l zQy^TVI7zfTeqezv67MW09bVisUv}<96cgAR_;Oz={ezl4Z_fFj?_dQlmaa1b!W-*& ztvG9b>FMo5S8VRng{XiJh2u#OZ+-ljJmomy}DZK}#*A7K`EFM>Rn69x-%MMneb@`iX zBlQ#eVAejG{h^0#rJ{!SL}d*tgU|B=RQ9V7Yzo8nIb>(|BTMgxjGo=A;4w5n9X>jf z?{B8fR)^i9qA=2|1ifWaJo}NM8|pb8yAO}i>(a(jwXZio_f|zNh63d!1KcYoG`N4n zcN3%V*L>Sge%nC^ozoYME4!#{y9#m9)}EK4F~z(9U6yO`oY{;+*6Q*>+8#xe_v#B_pX(d1!V?gb$88>O4<4X0X2@vhibmF)a1|)7uOGCbIaJX9&e2(i+yA+1!iIrmDe}iV3N7V2=604YNYn^c2s}du@tR?gt4HK ztk3C>IGs5r&p#=3;%)xMcrk=bqgoHLSM1dZV^+rRXcSD-lONf)ZX8&${ndO!Qo8iYL_ ze%(V+olW-AcLAlV1`DyDU&BkW9%7F7KfjH6y>DSzD)68PdOg}$K9ym!`}X6?a0$3l zZEGQYd*>6*zmA9c0q1E_PKujpRk2kd^6SXm!X$%S)(%O~js`^28EppO^n!u{h{rJ1 zWyp1IMH>QjkLVTeGj`~$8AD-H{#LD+N&MXL-~sL~cOW$gdRD>qp+2*7!k`#~(E*Pi zFFlTe9HhRqg7cDdxyuM#u(+?KA$K?AWB zE`O|eg2z}G7gazq7dx<7JCXB%%PP|MX4;cY%L}E;dzLwgAKB|*v@PqWJ9SDQLNE_t-H3e7x9& zO#I9Zzd8Dtc7U9et%q~B+TywO4*V`mrNfUr-Q!%iGRng7`F4pRl_}{o-1jGr1<(5U zWUG}+waUVu*1awL-ZT@{IDge3Tea}JB@aCJnccqv`RTbBqLiX%2MBT>BaTGJ*KZIiqCMJoP%HP$%7$0bd9^ z?sjg<>0VAq@awFtx%>rGN^58_+2hr?AVuS-1IZTdLjRSMdfQ@HlLRBX7{$_0#e6*V zpbMGT8e(y{Tc0ddu&%+4WN{1pJt^o0dex#QSkB|6f^4u)Lq_l;NZW+L7(L$#+Wmp{ zM%nNcV`9(KE4y!Oki!s`LeM@C*H+%bdZBt!Y6Mkt<(QpPDYOMOYG?+;Fs8wO0~}@&CF# zeK2ozZPjN-?D!;w$PwYW10_uFHx)zb zANhg_*5EmPNG4Y<=ozX90grFo=e{zJ)BkCnCp*yoX3RXyjs4N6R?*!2V;CT@!BtQT2Ol6I6IjnbVW{HVejO;Sf3G36)cX} z*YV~Z!sq6uXyBMXI?m6WQmfrk9|g0bYh9}sZAstXRGdMb=uC|3sCg8y=d+oFV;*R9 zIDxJK>pTTe-T`1Pr@s+!+RHe_v&q?E-Y)Lho`tR)Z`+Mx9*7$8wC( zS`Vu?p3DT9p6h#0Yor|MDMBOqXAl$()ar%E3j!NyL1D`Wx%&HRYW`0{8rF!P4PIVy zyq^^{Afc`nynIoF^Ws+yRozQM2l|b}nR3+l>jdDdxS_Ui_GVcEEi7&NlDhf`3903D zG;J33g^aPg+kNPQVgrYg6bjZA`qmW`tj(~n7=_wQ*mZ94{=Ik3(6N%I%<}wqVlyfS zE4+BlrpLbzj77W|4;P%8Oc65rL@^b)A7qt(DG8R!Euqhd7L{r1JUX~`cJGVy;*H6) zj-I3CJfB!g8#}_dnR9~*17%$gYju%#f$WlA>g3m`mrkQp`cFxm@xg;k)ZN~IQ_Evn zVKiRHT>Ay8vrsLhMM?CF-=yW}kF?wuh1kLJ7d}Tc4{waTUD|1x^q8NnVI`7(Re#Ct88@diaOcd6+?f7pKJ6H z2n@+g^O*hpi;L&wW8p@dAO8y7O=Q3!d0?-nFp7hIkYn@%}^H1ls)kF?ujarv4p|=EXBGq_~#zqeU3mJh6D&aso zvISK_UWF;@Hj`^F^UboWHFN8+olnK)EYIrv)A_1aCm}a@L_AfLn_^Z!7bWS>C$48F zuI%Kj|27H3xQ8?yTE=b1G306=_VFbD3VU}}H48cAV4Uz=X$g~l%l*H#H?hg$cFP}r zaGl{-O;QUy?h44dZv`%3JqmF5OA%cF@lY<+JoI=U42D>nHkj@Go*kR zXBdc-8>XW4F^b&)!cCPS+*JR6GEEQZG0?}7Hlme8mcljpuG=2HGQ>#f3^gX8{V`a6ygL}Ov6p?&qP>DZizido!D}Hjf-M_vcN5Z z{bz`}BxK{d@?5UzXm08z*JG8jh#7{=gSPAaRL)C8r%((PDO0n$c+aV&%ZV>Us{h9O z?|XuZ%4=o>ZZ)?O_Y3&t^WS$ zt$%5+`cEok;)jaV4Aao}EP$i8aZg{iaobjUkw=EE&&$t^e1vVXa#<%?!bYLn0 z7aTfkat*>Iu7ghhtyuXVD#{KQqO5zk9t>J^Jwekbr2{csb!_U@W%TV3IS~=|3|Pvi zPd{DI4`BjsrCYGm2Pme^?$22`;ZZC=zzA$0wiQ4C`K$d=t8( z3O&!eA6z}O(fBFV_njoFn;d)4OZ`{^76>OT*?JOYpleP0LO>H(I^=EFN<+>su+b;G;; zHw@8H^uBP>udmItuU!-U;zs}GJf@bqV<<(@+`b;kKNEIz{jWxmOY>m4Xi?$#phB0B z$c&1q{KylDG(P{`$8t#8IVsX@D1@&KI+Ci#K56q~4@dn8HgziWlMeA*H`H+hD_04lYn9 ztj%8=ec@76;5_RscE_iBf1c>AhGniEUq(*IDv85}^TfhF#%khDvz&+h_uySuJMgmzz|m`J1`F?69Qf5DHN?_>(5=f( ze`AFn8rc#I1P7E zEx?%MWwY^o8nmzy63%qFjY4M|hdhL8DA2W zjNDmr_;B-i;x;hk^w3o>*YTw0S*!}ic-wZ;WgJ_7e~ct2V>^=cl+JJQ3<%q6O;s3VFQHZcAW3`d zHdjeyIzGzY)!+tzTcNP(>Z;=&r$&G>va{5OiD_0;mo^WWLj z%0yz~oCs2T%W=dEm~w|})miie&&Sg(=p?j<%(zgi*eoeyPB&$^MKA!4XQI%iAA zL>w*f%JLu07;df`?l#gBZ@Nw>oPcFL^cGkU>6IRrQA3{NI^epddk~g2R54H=%zxZ> zBdRFxV&2XCQ+@bj(>A?ossoXAIEARFy7}LwdNf*bGe0L$4Zy?^`0yPqgN>!QN?~w_ z)H}q@&yf*BWDlho$&X1=|M)1cu1O+ww30F*u278ZwIo9+?TSvj`;40B%A|omLb9VK zo)!KtOmPu!p_x{(V~D$>y>0eR`2N4G;S5|IANlj==E^!X4QSuaAN39D6(3P}@)aa; zOUVWolFiz`pcb4mq2(hfJGQ<^#ySEi&gHe`CwI@w;I zCYa3wD_mM3<^FoeD-B!(59w$*t)wnQ^}Wt;_l)$9(lOYsWj0QyOC#`Z?2WWnNb=#i zDY%`Ki=Bqw)R&^aMx28G&q~P@Z4LADw#^sI%2<584dcq3B2}Q z23NU9*{uf2rVQZvp40bj+?gsq-r44+n{`u-uM=hrEWDQ6?OzdU`9kYOa*9y!4~JW^ zw-Bb!8)fv|iVHkudFE1;1ZUTH;4ToRP1f&v?bbNi_Ud?Uy;m2-xyR3!;2s!tdlg=W z^adPIQA!*Gui5l;?CQ zVmbgzaTO5{;ktSQruN1Uu#bpR>j#3?4Y_*ux=VtW7T>p zU-O)s9SD62azhqA?*cW`9R5 z%fclB*vN38(PDiY@R-FRd2$Z6T_}jpumKwM2Df4p`jQkwn;5q>QN>;Olo!ed>S<~r~)+f`bv`4oHsI(Tq93#BwhGa@0xtRi&~|OO zyFO^5C4SOPv8XZnP{?id$VYT@HCoXWwab#_I0ioea>^)*v5 zb5$athI=7n&uMn<$3Mo|nPr*?VMae(YM+DVDe3UW^ziFN1vU;94LeLYdobjc;Oq*o z2MwxS?JX}h8*d`9y6szKtbdqVqw3ref@uUoirA^(FZfAc`~%XzG_^1dmpU80*YOnp zqg~@oEN^?s6_ymH~A4;~b)UwO2kxEEp7+?jXg)o&$jtBKOIzcR8WvYr(I(HC6z z@K1`M>DJACe>17YCVLhUz$Xs$0a)wXaQJIN(`8?mip)~UX=Q*{%uBX6uvx#BAf>Zr z*7##Cov&NMKUVMCrx<{img+G%f%{WwB5m1M2amPiyk01N)%|@JwKiDIecRaP`bGUW zy7t4Rfy?>LhfWCv{~cUb=zX`M#TB z2JDUCqMF=13eK~k1^EVhE5a#HfqV68$16&`1)sYe!NXV!gp9C`?5}S<^dUOU5JFdmY~%0&C%XXs)Us*~2HO_0Oz*Zi*UmWJ&FnttdQVPzF@tF?9)_ko z5sFQZJSu81I^C)Im9u*1B~eBs+}I@h?u%xdTBY)7%tw7OuFjnSwvMK!?@6=>?^_;Eq_Qu@}qsp^dq)rfUo^o<+Irwm~n5%kSzN zY|>ho?-$~`I1MV2^H92!G&4FZ6q!};K+Sxe4);4><{|&J^|_ssBPYK#{!E@i_&(iy z0lsJZS#dgxT(10E!h~g>|wr>PwyrZ6|Q%k zI%9C#zG;z8mDwHm_Q(l;Vk0Vh(Kv60kXCjTmFX8I{Xs{V!8hNNE>V&m09>`k{o+u839_xK-*vLoVVi2w2H5f z`=eSXOx#|o>IhF96c=$#GK}De`7abzS#vIxU1H8IT**K@JDh;;|8{fsG%GN@tS#&| zrDyZLv()_2T-yEFm#gT498aEe$~Q6iVa7XLsixZv{L^jRm$g0Df7b&c&$d*?JzfqU z!wo1b7pfR^ZMs^l>;!X3{a~(7DNDTwr__HPuT^r3p#{m>|L=OKN;UZ zi;op94cxNXn5>krNR(|Uo32m(JOag6yAMlSt}X+D7!6+Zt21N^HS|10^1R3F*bm;z z&cj?cTMt|V5g+O6^U!B3Y!b)>Ja21O1?_}phACo|lKgzU&8f&cA(v7Xgp$S2Sjy#> z+IYgxX@=Qy#@@% zh(OlsP9AI_W~rVu)m3^TqQI%Q`HBZ2H>uh8c!jdM?|^)~g#N=3=;6jx;=#Ihei+Vm zhm!I%CxzbQftU~05xeDPh8HxIVgX>VX*YXq7XZLvkF^aR>ws+pjw8nlk`xDZafQn1 z1?J$nzj6zO4jgVyp0F~UgKRatCdL|}F)N{$P+j^LCk_%@13}#L$N@X>0&%c?x2eDC z-9%Gyk<7*EJ-$0hj-kl(k_~ARxPguk3fv8j~=V(EXy zhN}VUU(@XUKvFO?l!ej3B`ORo0a50DP$gvnSwn_*9?Fmc**PlEV0zc3*wfaV`d=jT zw#Ilr{qOrngHZ>G@xz+G@AVkg@ALfURB7byh+o*j-3>VIPx|JGFmT0|u6Cyol)|79tuL8Mmm} zi#BffbXqj9#6`cqxJazlc0MShP}U-}B+4eC_LHXu@zV08rSkc5qW9eH;<4Gciz$|S zKs*^c8@l<8iL5G)0)!^-#$#Wzy_800a#l*T{NJHxG3jMq3pW*&W~X%aRq51N2XxI0 zAUZTU{eapOczB+~vZ}?IxG**r2-mVvybkE{mreq=-Dm#25^oHOTOGP^5ITCuzPH)A zBDxM~O3cmJOR~sBc{cN0FUvReWp=j`g~zP9iI{r~;+@nRnPNq0Ht-Cut89C$z(LM! zuT{6y6AB)};o++y{}D~3eNGTOjPaQbUY4$h)sNJd-^XxawOP}KK?}5pL{T;mPE_qA zwVa?NJ&5eyuHG|>kz!I-wbUyS612qwWAa9}qSWQLdK6Ed=bMOqyEE;q)~!&r7aIj@ z4)jTW(p(ySa(k~>>Gk#h0u&@N-e=L-dKG_u0 z6rmn5F?UT&E<_Kj;OWMW3~ruj#+ojC=Dw>#XnqqYme{h-=y~}*{*3zBitlq##2A2g z9ryNZ``mIu!Dk1#Mzz;yF<@Iym*{VXZA=pPo}V?4o(4FUO)*iU!^7;s!S8ys9ORC? z=En<{e?#`+KQzHaM>lG?Ee;Nb-<c@Ek4>^Zj z0B`p|$sG*ohccj`I`V978>cx6%=q!rUsy{4C{u35%$#11f@1a$wvY^w?S7ln`PgxP zj4U&AP~omO(wk8(GDWzl4~Tj*-={qT3&IL#9UtNALSSYX@no!z|BIDL1H8jSV zA)QW&^H8B85!mjcej)lPV#*j+zG#XeUq*k3guTs>HitdCabxMg^nPP;Z`WUeIN{Lw&tm?J9q?1>45 zkNT+9J7f=6=Y;RrQKR!t?Dx)L-n?USRyet<{_<12o@4?W(5O++-|+@lHDoZTJb3U9 zCxg~;n?VySqcdR?#-dPstY2&Ue^SRet?j-2Pp10cZe6)`;o`BHmi%wG7imrqe!}9| zp3;n!hHUVq%{@(y24MmvO~Z~L#D?V|L=x3vopE_ki$6+Y5*f|18Y`@Yxy^<%R|GAbU2*8`g~ z>TsbKXzXSIgz&oh8*!qUaRTA@g2opEoRhMj{d!0=V5?9t?VSH7V%g}-?*D2$tVcoR zi)+5}ovyR#*d-u5sTI0%89mSbI07hF(L=Yxe)5@tp!sY>mx>u7Pb#CxRyfR zSDL25pt@wtu@k6Zia8h7uRG1(>Zw>fZu z5B%o93fO4CPmz9HE=-pNs8LyjIOw7lvsT=22s%8<_Ev%Nufpj|AD8I=64G3V?YuNN zi+W<&?R8uudVll8R$Mj;M%;JP**Wo_N&klz7Vj)-MUdI=SH`r&ZHve2Jxr!*E)I=Q zGRQsgvhd(hhK%v5H^{XtsM95A+pj7b;#B2T_?TgD!%vLyc*3~NqH8tF`OuF zYZcBM3nw8i}y7CI)!tfOCi|?T%&RO zkc8Hvf?>3a@#5N$3WbEWHL6c(>K?S(^X4pmq^Ini&I;|!-LhA<>`#6nMacr4hHR-2j$a@&4Z07#H zm?gxMN|x6+IyfGSx7Fj!>!0ZzemwWYfZ()Kk~q=E7G?jPZ+^G64bIv?hb8z>mhHQAvs zGmRsxoG_SL!a(&>d_-PrL%Xl_D&AQBl$31BiYpO^#$+%M@9@#9@h|=)d}2?Xee| z^q_7N+=bh+(+|AFq(-+EF4<8s9`$>ego0ONCxow;oK>*nvlwEKR<`Yr;X=sK$U@{c zBc~rhsC$(q(Wdz%>^v=!q_D-k%stw3XUW9~MewC@{&Jyjy&hKx~}UccCMmQ{0twwdHobPMv(a%6&C!DniF zBom(pHJSIp^VDkTO5kj)!Vx7GIZMpCsCX0K_`T@p2z3tfW?0mLZO6L#xQYe@hMyJ0 z5u#LZKPw@Z)>)<~2FH4;N@ti>wZp=l!<%{EPsUKa1omtcmRbJaMa9R1A&Fb#iPKV} z7fk6;CjAk~_D!p8qnba(6EATVRT(Ois*)ZFZREC;idmFi`mgtsrkvX&^$*dFNU%!P zP=nJf@_^=r?rk;Sfh@pUEKYgzNfNPcaxKVjF!|*RQ)BkHd8o@AE|7O+KFskv%0eSR zN%=v;o8hy+@5hkUlNzflYj5<7Ea|VV9Z0fV$8G(X9`?9j*x0qF$qu{6T;HiY$UT=G zQ=Z3RhyQg~xeRxT`jHh%Q`{gC@{={tCF!dEJWev35310sj}#sNH3E~>uk!L+UgK%n zCCH(9stV300Z8)!jk2*h00`sCg>{R59;zTsI_J8w}_w7yfL;uxH z6(Euh9px+ykIhGvr<3zfoU1&Q62AMGSN?tQfJJ3W$<@=*_>zlzjuWAbkg9u%i%E=N;k8XsgV z#n?Q8{bwnzE*sNP>1z=mTiy}%N@b(Zw=L^xEQR%(CnVr28$8=O9OF^anlvxvo81&% zqnT?w>B+M(dh}*HoVEM|N{MKlC9<}8Yy+2H`&lO^VS+Gnjb!B=)X_w_i3sz!|VbmFZ(c&CE(`_3I z;lK}j*jSj$E~=QrEQ|iW5IZyW95QoOmMy8|`<*NDy4RlSHjEKQ_t(Z|QA!)A)0)Zj z%kGA8yo(xdA_8T;8U^h{ip5e7{OaI4AZP9sbYr@Aef;VYaATOpO;Q2Ni-NW8NyGWR zlI7GYc_Qv|K3~f_I$n!ZQqI1Tpq_7fE{Q*b{)NiwCN=Q^g?oPhm;eRA6a@_k6dHIa zR!|J1=<^vOxD}^zC~PiPhC4iyrS>pUC9C$T~o(lxG zf3254A^%x7>~zqK@nC?$8y_}XA|q$azIE!Cfm(H~t3gu`{bb#a&UkH*+Dt#n2N%hB09+)olcWj#oUNWqR9 zx48I?Y@Ah3GDCl_2Mkehg_m#d3J z7VS2_cBJ2PGvw|R?AHgv6X^=67xWE_#SM1>V{M2C=WshDJT1IVBM>3N`FM#1CZo4p zCnbBwykH|^Ke(N3BbntRhc_ZD8fB$m!?R$-81R$Mk>h{72`-WEO3w+M?gy8jc9B04 zV#LbbyF(Ul{&pGT+njt9J@5sl@$tr6n1E~!ngVy2cwA)jOPu@svijJgikhl+^KX@# z-dc`|J@fzzJCf@Rzq0FfWV8Ui-~5`7q~jh#n{}6=^3%MAVcjm zm0)hYTw?1f-(yp-t`>dYON^n^Q)NBp->3up+a`8Xf?UDsoR;c9jcOj;HttFMU7J~= zxS`TB?om8qR&RQFpRr?M3zY41Im=}KKbFor9_k1F<7X?0k|^VpqOy}cPK!#MQph@^ zD0^f(hqAINiR=i;PWCvPGR{8x?6VK&oSUEDeSg2-e|Puz{P}sj?>%0x=PTmN(5X&x zzUQv1W_z7<5zA{!q-aTcYI}Q5{=eGT1FyZ5#4`Jd*P&2UCQCD{tUAO z4Q%3*Mkuw1;*TA9L_WcOxqX7kIM<-^TCz9G&MEmTL#NXN@7chi?x#*V!qXIe&ablD z1$-4+lbl{~@ze~_R^`U*2!)QTXU&$YU2l2-iD&@;7-{FGRof$3qqJz7buwp&pr!DZq@)_nh*`35! zRRv3(Wdn7-hhnn3Gx6{(Q~Q|@`DPvdo`>>BT3=7KAMV?GdJ$!R?c zjnrJvIar+KN6 zkYmO?USDzx^mHa@Zy{_G;G?1s0WZUkRGq#HAyCspT$2?!;W%sa5P+)40*&)l|Eqri zz>6S;p8B-WAd8na8$1dKxCK9E&C`+_lE^ z#ApRC&1`8}zo7(c74Q;^HWI~pz+LrPH_M^6A#9iH%T+;c_TyCT%xuI-Qg9JLUsEhZ zyQnDkc}w;qYNGudCXvP@x zjP#)9x~ zr}O#OiT44Wt>gXt2GQxuq_ODQU`AOm0{xT-@tQQsXAx8@ zIaQbd?kW{RKj+EmJe;0I0$j%^{~wI@(u$Mv7RW?!(UJFdcNROM0GJFd)hZSTHs$&# zsH1tC0YP$LMNcsQ6CN(LsMWqsEyl)6&4cjhDKsju<(R=O8EH(UYyE10&YF_6Jt1Fd z)NooZE``7Cst>UDQSHX*=(SnMw^d0R^ywQl_7K%3SPY6 z@Bda759E)5q}x-X9CGZIR5u9|i`y+$bzUAEWg^pIbNv(*xw6*WzsvjDTM#eOC>pj% zj_^KyuO7M@D{%QzTv}8ss0#qkRP#sGx^}+|9JqH(8g`t_u-2K_PUh^Y`+Zh;w(ex3 ziA+aBSF#z@Fi;J^lvp=Cc*B;sqZN7|pK{Y(M%Q76(fLeTts)6iiiK}Mo$zF!&!h`9 z#?U|jxhzBb067rkV==ybuek8Qd2RC|R?dQ(62UjL$O!RdEYJ}HOk-oz=iH%nR(VWA zt2lC9IkNmMoqCF_#I(WvkvJVX{n0d<^m#^VyZj&RKGw8@g6s}#?fbP0d(;9+R7~eE zHdY7+VC)J&%0-<-x4Dmou4}!EcNu8}vRZ(noh9k@5%c3K9P%mNLUK#p)x}OnxUN`% z=WwXMc07Q_(a?-leutWoQ+zN4?r(VB{rvvxGv(*^UC!Xn?|Ue$o`nkR`<_V@*bh8| z64(zp!y~vKeg-PIA2}RscMFp`?cW|XW|g%hZbYGswCL>w(Nc~9s>&i_M^I;rgF&4? ze&?(ht|aq+J?t=}r+g@k2&l9Xx_^c)-Q;t@JSD z(irvc$u*yE8nzd!=N8YSAA_O7;X$2`{dEV&_G!0E zNIm_!yw#vjnaW}{GY;<+*g3cU@K=gp+oI}r?!mM9Xr9eQ6uhMA&db#gCjFT7W?ev) z!ExA5@>5p0|0U>LyVg@1_d8m`&b5P)-JE}Z>wVD^vkTsk+RDzQg0?ND+l~nm9!j1O z-ufKf%wzt1K)iKX)br%g{lN&8id;K&$}-kg0yU*|pk4*@I7``Cui85Q!3?G2#TC-; zKElaR4Dhbz)FOFdH`5_ zY*=5P2V#a*`ii!T13e_T=X}OYRXj;uE5z5WbDE?m@4X@xe6%06S^S&??4%#>(Pzvm zU!ED^J9}n*Ga>v)t%OkCkua`bv}F!($Vp0*?Ijx1ufgr2=nnQN2j8`q_|GcBPc`X8EVh?t#8BZzi015?} zfJTftqZi<7dVkdTbqBKyT4`d?#TZh7{!_z5wsVXLpXE{FWRkVRS9iT)0j`AsZF+0# zx0B1_sWYZna;N_=iDSP71YF?Eq07m?K5x&O$!=5^%GnK4=-)9;?W=WY0S{P0c>0A@3}x%gH{^*oaKFp&R_!Z387%H7 zRn;_$j^FoBd!zG-!dM=?#t5;$D$!|_HUF6U9R7Vqc|9e5w^V+1hI7>Zv4VKlS(;|L zr=bnV_vk9eN2~!xOkcX+qibeVW3iT&B*@X<)<$}lDwJR=M|W|7H4Ag7l((HY0&mY% zoQ!oe)Fris94}Qt$IxT~HhXc$0==i;d^^2J913;NT;55vQQ>j1ya`_JiyE0}5%exJ zxSef1W>6Q@macUWcF3~#$6F`Z?3#&5f7`d_#>&r%uO$+NVw02kSGbiIhb9arL7Wc~ zH}aFYo~Svp*Y9YK_Yj3?JNXH6RUX`|#CnEHS~&T_ZAL6+?H=Pz{bdI-P{|372*}h!V6r-u!*I}3Q;09BUY`D57I_IDe;*0lpnYXs zcK+%?FCirXh-3h9=uBU_zSpmaYL8XCs>dx98Md9-yES$uuP9ykzBSB=+Rn7{(lO5< zu;G9TR@RnF7}~P!1Hx|B$VVcm)2lm|rbT0L5nH2ZpfBLI26Su{0Oo8c z=R(Mg8HO;PYCo>va7Ti(de%)3)yA zdtQNMoOUh!+x!WTFX(s74kKGG7pXs44)N&;pl;^2OAQQtdSYx2yL=iMFk6D3^MTK= z@XUrE`*$-{icDPkz9n%$apt|})+*(x%{+w%KPt~Q3Op6LT6W)sIPhS*o^9s?MhE*z z^3zn18XjO(ovAazyT3O%EL2z}&AbbdYcr&0*yHpO!F+$jcx*=MF7&HOq9Q{A47(*d z_jw1~_wy$(p_6oV;SCLem&={%I;=rVc{Yx(xkkGq_kP<++pfGfDLIjPP_HX@@#Bo2 zBe?a6ba865?9NU3fc|Ue1P<@%-n;mj#h$n0Tj$2@CwmLR+3aHx522~1-YkbpnxRkS z#J_OVc4oZgii6&2Z_P0=8@kTRg%6gm&SZ(~N>h+vY`6aI?2jJVrmEBk=I6gND+U|D zT0G65A=XZS23oqKeIrT!O($=#{ya<;6HHRuwMK^X%m)bR9qryTYGgz?$MZO_4(6rQ;Ds77@X%ShtZb@EfOMJYR8+GN`ggYio74@g z9jc&u@=@mW4Ki!#)u@WV4d%F9_sj)+Y({J$VcdCA&P-}jiWqBRD8RA41v+$MHmAe* zxn3)TYU&*&C+2iAk2vNmaoN=@1oG2O(QLn#!*0x)qJ1bA>06tirK>+X5CK|?H{NG| zL=w#3kxy)>kaU+yp8gI7HGC8h0}dbR6PSEQ;Ni37f7fKE&d-8v`*eF=}^I|BJB?jZC9<*Ojp)JoAGE2k; zgI|O_<+3T^71V9XLg6KN7WB$6;=vMIl+gv0nV5t-%h^De+b-DneuAk~3*=go5`8fJ z(~!52UE>h09Ci97_jGKNEyokht+Nf>Gwd)-%^`i&MT1LYvgVe415&|YV!q}IE{~7du#nOAW6I22n_;D3DY01 z@Ra(-4{VQn#V3W#TkEX($fs)BJ;*GFPATu{bAgxS)cEQ>FFZJ%Q}!_}yno2QGmvx^ zfE8HBWx)xm978`(oU}Z(!80lRiXJHlb`Sskpc`acV>UF!V_dcKL>I2(S$Dy~q0R;! zZFv++e7RE>S4AqY-HyKb>~VUhppAA-rGV$u_D1UMoi->B;u)r348XL&S-_CG#Hz6) z;(}$sH}Q3+SFsN;ppv4DsD1G$uWqfNp&;*WTNCy>!NCg-10fHE^!ZsP1(lau_{oIz z4@vG7eha-J&ow5yQ|(b}gvlQB)};W&BJQ7^)|)3DeOo?IDNpBlAU*E&rY)px^}Nif zaaSdUP*JR$KWvrf*#O_OF6Qtq2BWh9Nc+I?cD{XSN4%M%p-xADftthYh!cXWO;u4u z$&B{}PreAlsOO$%p)6rbx8_EU*eHa(Y$XQOYfBXY-*(TjV-DCJd$|0hZ92w-5sdp= zuBoM;C}a>PC-m$N9U?HbePX>^4J2gdeqG4&!@qzkg{%;r*!5-)67@yXU-g6qWIyQZ z1qLjQv5rRr=v5%_wQ()wkH~)uEP*9p*$y-y@W6|CfKNx2;Y4s!42M<#xOkQM*6C{J zOXjW3K}2n)1GMHVk2ZF*3p}PI-u=bO z3Pa-YA1>)PDDADg*0O81KP4LiYCr5|LjcWuA+` z_AJMVY%^?>>e3pZF%`zA7@eKnd3O3UI*D+R#tTc52~rt*%BZO~-|5M8`>O}1Y~4&R zq>FDop_aG7WdOuC?=aS7f*QhV0C>*NQjHpXsz`G{WqjWYS^a%AV@uIugDmko+e@`N zw|+{^a%x=%8ai0=y~L{iPS?qI94Xg$LfP=x>om-qM(rhQ>jMfukJuuC60pXJZ-oDkTJ~R?%1KWZZcDP(4kkL+)m+OvZFA!uAaEss zk+ZSEbm;pXEf>TL@1mgMV~=qLBB7>xkNru8p(!Xqe^R174D<3ihPdQ{S%~A0zB1V3 zGxJ`V=9eo{sU1rVnPKV-E>murw_U$oJwn0V(cKVzd%^ougt4LRK|}431mbd&<iKZIxVrb{g=mHBqOnEuTZao3-33`TC+f%F=1@C-?tX! zi(fn=d9liGCfuCKG>}v6PsJ;E&ZSyq4`p9l%iGf8?k?y*`3D@iW*3+S%hvm*f-*l> zeH1Z(**cvNF9P~FWA6FBya^}6OdIwkI_VB8(F1>#uB6_&4Mu$x6nzyoyuWtsQ1M>s zccwsg3;Qb+5Xbv8v55k;rS>~RnTi4IM^aZ(G71C#N~R>*$RN+on8>!Z7x5{)S&^q6 z&6Har7f}dm+B7n#?l%2+v&eq3*;8w}Uc*q3O~+Xwo(m|c?7(c))PRS|cp9`G*Ntom(> zdHRc3LCc$FwmGj?A}r8vjxC08Xik~0b10GJ3fOc%bb8YsZUFx7 z0ZNn(k*l@`$($c@U3DMxU{miu?=EUJKObsgWtqd!iB!Ps-e25Cd(s=UA&Z`Wu*HIR zn|0xYdKxXb(su5~8s7Pr7rk;879W9^l6UUD)y2j+uMe?NIg0xr_py`dCcetvK zI;~U8^53h;Iuy(lad#}3NkG;zI=_UC(^_-mRd?@PNj^_F1B;wUYOWQ+!;e_WYVi@- zidbsHFt{}x9;BVL@R!^Y)ce+-EiTGYteR?TyeK+2uf4H|bwO5SjNj-#-xaLMdDDF=DIB7q>%azY;VeUf0!9y>X1iX9qwOz~h3jjiU8 zwlHt|QKVoGQtSqe#hqcfXx#DYnC#rYF?VJ;IYB=0WeeJDkR{>vPh(*MaNVPDu>Ahr z!H7jQE2`_`7~{chahLl%V$0nFi*8HzPq%(HZZ!U(MET>_NF4%QdDYiQNd(#u7Z)fdhtkqSB?^> zT7Dd6jxM$bX)%U+)f{$WzM)Yb3agDtUudZrR|U2CTAea#T$59W%n4(hw$XN++EIl8 zM|X~wCKunSRuH*MEUG@k;T>NR5HkhwX5FIy{(Yzy)NuGS!u$xAEnJw;4^&ORvgKC` zw;em#pA^D%ZM9HWR&(ST_b z&5M=pdJK$0A&UU^IfY0Iss_oh^JZ3zG2MdcFytjTu50G4&ge3&>r}iM5N^~soB>9K z=oAqf6C|^~dQY6j((2h%I%)XC`ksS7!J#qNWD-DgZJD%CPRQgZFjk{>6p}5@4ZiZAi0LcC+&z#8C;pq80@dh@dv+NGs2J31ovGa2c;@R`6 zJIf;<*G1X|#m>FCJ^Y_x(fJ5eXEB|l9RxDpBRn?Sswt3*W3lJrDO0rzsd4pwIi+Gu zLUQ0@Z#tbUl!#Zo`}f4VB7V8`kr$<5OF}(@IX|JW$9Cn%PMdpcUcQ*#-1+0RExB<& z(m)D~7udM{fV-6>et49}z5t>jD8$`&HYm_>y}u13q*24HFS}2@-I9zl%&XPuDS7O~ zT5@J#t+z+jh_6kxb?R$N!bGoO!tKJEnDwlrgb>n{;8>$nkkDE6*p@`>GAA#)C>qEXX8e?xQwi|KPVy^as-^^wKlScn)L;`K_bsu zAWp|d{Ng1Hyox`7I2h)rd&I*?H&g-m>5wwI95$+Okt#{M?{f^}pg;dl`vgQVLJ%1Y z=khKPIZ$Un$cO)b1+ zv_ob4NkM#DK~U|O_BVx3G_jiG0o7Q>kBx~C!#T{0!_2^ow1Ujr!~NcZRhu#^0&?%U zoR34sC~S3+yvTOdtqGB@x)T}RP?3vTh&098^DqRtN^A`KzdK^@HEI=bz ze3pj@Hq!7-^Ijb^ZuIlQ2u-$Wz8z{k`{Qb1ZZx&+^Z}tGawxWdp&L8@*yc2BFyQYJ zeC53uk7KveY=g!pjvRa#U*U1otH*UvsjAIG1(>Dcx!hl6Sv^^~Y0 zIB$J-aYK=LehJ+{(h8@HAaU6>f{bk7t!3$KUbl{-omjca54YAR->wD?C8W`h#tyNG z>h05X&r>#85SO;Ar%IdN+a{+x`6rlz{$afSh>FuQv{~5p?nHF6$Fb?k)`y)*7Ffh) zcLyg6hl($Q0_jl=dLt-EOf8$I#7C{_V2MM*RZPEkZU1pl>AZgDYKkrOVsn@oh4_0f z63)eOOCs`GvnalqYVMe_8q(3Zd_4Q zvp{orhJXJo@8(XVd>L;yGhMc3jAhSTLa(?9;s4~4R;d0uk1AJ{MBKf?{@2uvM%@0+ z-GxjjJv;~uyyrnOk$J8e3zD`KQ9lJ+r)SR|Dc4lg*4WbBiy43H2*)4}RZl5}@XnLr zxbUgp{Qc-2cr`3y|37^SrkDl^2R>6w?GedGiK=q`)`{8%zmxrSjyYY&J3$R;VVZ^& znDMC#Tj-MZQs)%UNT2g^P{pY5f)C=-yFER zdTsCtGX5{gFI&etyPlR4ARzBH<@4CWo6Fc_t~IsGRN?g?TLh_{`^$bv4EG}`*_`0N zKK-*)(Wl-~-rdbYK5nvmwwaJrPn}c?`D&mtgEYhLNxz^@%g&dRHaEMjiCCS&j@45y zWT9Tom$%^uhSvjFl<<0M^}mGol@^(-9l05FolRuNY_Po3p8T;o`{h|JK@q!|9C+~Q zN{Hw~?eB-6*YPFm&wR8LrN6>MKmBtYifHnEjF))e{3i5Pl|;0?oXxd>P~NgzTVEek zyTn{m6jvQdQR$Zg?J%GQbT`pzTb7|PA3GKDIp5V&0pHLXPOmR~H685EcxW&0q9bRS zi!HaLKXyG%$*uz4kt@CRzESuPgP)_cd#c0cwOGgkwo8+qlPzvnyQ|#A8m-h1G#v7B zob@IIr}^+&8{FIRuP3U+Y0W={R^r;^VS$`MmnJ)yx|$npT&8p$U$Bbwky^7K&iHF4 z?<`EG^6l-WFuVYZnNVbhBTBTsgKduE&&3QX8ldY{SorDrbR zJ3<1oIziL;S1>Ytwdy@P$09j7_HZ2;?p+A|ISu@K#ZY|69m6Az5u1}|w&$9YCawRe z59;LaOO^dv?4@GpaLNrshq1jyCyCZ9tC?p_dkUm<$jyYtZh!bdn$k(&s&7h`bsJ)U z#b^|O$kZbvf!T?1MxH||lnM!+cjjI>thO>wh7p~b4p ztACS2bpkd{re5S9E=SzZyj(C^>@M1rBz0!qQ;S5CiC(Wey+{)JIO4}K%{`weJxq*O zjcyv&`=qkO+YmkIPCaozk^H$KunkGPg#SjAs|(-Qa<`v|oQY#`vui)t5^P!c{SVOZ z<#=osz{h85+4HiSqwfg*{&tez8Phw9ZmYS0#NZ7))&Q2H!vSF(-IDCr68?K>=i|k+ z_>~-&9}#{p=PhEaENZ@&K(OU}LXuS~Auew&++2S81Xqt8ueVkiO;%z#%4|Mp=ZZdU z1B1Q3d71WfSXNzV$A0=ICQ%X%HW)yhyV=h7k&nMG`HoyG>&u9qOPyi#z?Cy+Q*nhx zSa1*jaNHym)jm<6`=Hh-;))$2wf=g5ACD7X_!&OlIOa_}`=P8(IfH_L-g}zWe3i!a ze8*pc(r?q0EBx%OfGypa#6V8Xu9RKK$c3(YPAVPtgbXd$qHt z9!r5EFD&cXbR0Z#!S;vp%s2Ba(vYNG$zWnicCzwHBM#ACiy*&fE+k?A&fP)TO|zEX zWl3$#aD18J;D4g0l)%tg2L{JDq9|gMUtZyBR@>UI6r=*>)_93n44cz31et>TM=SPh zj3lC0_m!HE?LI|n&zh}w8p6H;eKjHPOp|L-__3h#N77=uuvhbl2sqiX!hTDl#JuGk zg}B{KYxMJ=bSqh|>^K^Vc08K5R({D#k%{ywSkf7!ZA7`1P>6gY9Nxgw`I-RQ#mC=N zZ;zjrRZO59;GxOcquhfuevItK-0&Xq=u~LoC*Z$(>xpn650}qqZo7`<6ly}a8QT68 zO~&h64G&{@SqX5aSGpA*pe4D3A1PqO@rkgkJe!XB5FRgDNJgKe65WGLiq0zEY1MkI zp8!d!!@TK#^43(7eqyC^FdH@gZW5Dej%1#8`v*IA^eDW{pkH99gCLz`UZRP!d^^(9$`x?vcB zHy`ulwg}doe~7lC;Lx%c0qdicQo83xVUC7ZO{6VDx#OaC=UVQA=VsO)xoSq4EOZH2 zKWp-YPjJm{2=K1mPRwQ`wC(&Ih`J&sF2?%p(&B4@8`Ks2Ib0TSiA9)(EjM zZJoBmoQHPtkgvizR}_Z6k$=mU+7C}*_^%hpyr8J)7Q~9!t@qg5PoCU(a%OCkf7rtR zS^zmAnw$IXIU4IDjzc|9%$>&!xl$7~>Qf@5RW!Ih7{Ef7o!0=^nY(2f+JjTb41u?I z-iAi~WK#_-?MyRRVN$O0%kesTc`&T?>D%XM=_6vY2TV0oM?m0xV8BgT&f89J&yCpU ze){%6#{QY$!Of9%4*3W?r-Y};o@Rzd2q%vc_las4;u0M}CixvNEJGG!%R^dG>K4p| z`ABZr4sR6ob{7+&s8Get_LQDbP~AtsG*IV=&FtHWqbm1zG-jC>911ROKQ$3uSf~@r zh{n%AwyC>C%dBrLLr*sriI4SRs^=jxiKhOtW^#0<55_;I|D9^@>EeAJ$SQ+P2?)s@ zO(9c70`Vu0vQ>k5H8#Qy*|rGaW|_>MQ~rvmdPWG&P)-k!wuSo-H9jc7_mrRR5T9_5~8{ zc1I6;{u5nqFk)0#s0_*VW&{EyV6?{4Tfh8J&O#X$S=1r8M1Qo#xZ>Y8KnT}|{3Qfc zxt9x3i0a9FTlM^NSqs4`UNo&}(o+;zK9<3Fz{-dE&_3yx*=kn8sRz!fmGsjl+j%Lp zeV)p-Ru<{m{qqGSEn!b$%W^Z6!oIDrf0b7@^FD@e*Hd_R8c<zG46`7tdLZkNkXX3--q;02qISa2HgUoQ&uzwvJLlmFx z*_GLv;%ogTJGK`?wD?gBImI*Hm7WyqMw0zQqSVpJxp+qm)fI$ z-`*D3iu)lrDEZ-K(@@w&YHr9i``x> zYgKOzm?%Jr&L+|{YHpfL{;R*AoCE6KWX3D=Q~R^ z^^Oo^xh4nM-(Nn9v)%`d1#CsI?Fr<5$?z05kUqy+l!-q*=NTAspSzL2~#XhsjPY%`YY2bGk*As0g)^3l7 zr{sT{MFA}2o5aG?I!;VC`OGxK3%nw~yk=(wAokMx$^_w&a&ZQ!X4|^n>;3@foL2c7 zlVubD&+v0(G=fqOI%vZ*@?YaN0`pvS-jvQYs9(z;Mo!9PGWi| zTm%QJBq^Kl5otZ_PuDxz{aBesdNXK4UWk;a!dC%P0?sRRL1&d zYx^7T{beGefM_7t@UlvFS12I`=6^zt58w;V`wP_GM~@|}pUaN)JtUz{#OgFw2oCCr z9gVt|Tlt@Q8vH`V&o4^SJ`p4&#Cp-|h!=o#$cl9wiw zWBgLy`{3EzM+R*p0af2{0=8lb;tH1;1^JX3#aD2snD;7;Vt3JpVmxI!5vBDCNu?@= zgdB^v(3cb^K-$KNp>jzSNR_)J!=nXNL}~`ufD>VmlGL%>Byf$f zt2c@OZm_@pQOC5%@r(AJp@N0w9I{?KGPP~_b@iGy11(@x3cD4GGO9YB^+vUgkMkF& z$aPS*dj#BI8)P1lR*69q^ClZ@UwI<1_l~2}dA=vD)pdgP#~N(#LZ3aUIZj4SlAf50 z!|+a!V}Q=!wvb`!L%G)VCmqk-TMvtpiY}-Ys=iOu4(1_ZLi9;*AH^FUsxt(Si~Kw` ze}QVz)&?q|@YC3DbkyrV036~3aMcvBVA!h|R|NL2O^cr9tqi5>uM2HUC&VlnS1ws= zieOf0%B8%Qa)e;LsUAsMprnyHky)Zr7m@}icL-Rwaki28Rn86e?JUF##)NshZivug8cztL?hI3#ToCvmE8{h#g1mwtsLU!!~HpKl4^d>ZmDR#1Yaq z#Ur}3Bni2s*#fq7r7qa_&^0yO*QlKcr@oyHE|-ULqKbo{oA$DA#>YN-)7BrNe_kMv z$~!7VmqSg>?R>iId^o*EMvC`~+Q3kJ+!pR5Y{?)pG5cLPY#EpcDQ zmDiNQSw5|7#QUpQ%sX}jFqN9QGpeZDX-B(wF3}R_Ss& zlhw(NSM1vByvPK~VrQ1fHc{&G1o3WEhIHqd6pfpr8)*IG@k1yZfPicZ#q!j{r zljSHT&4NT759AF@$_0>|ap5(5&=t|j+UoC;IGyoEIqP6Q_c^0LBtt)TeE@hU3f({n zl+J4q=Q~{|Sju4a@Aa{RKP^ML|6EU1gP%n9RDPsu7YT9Fd9DDkv2t+WP3u0~SPcE4 zePw9XSL~47@dTmo27n;awVLopGrx#1D&hwK?Lh1kCbF4~7*&*uQAHE~zltsbm?h9H zD9C{88kTo}!S`o%Hg9F)GNa5_w5+XAS%X%+p^5+|CM(G>mnVSEv^^vDDn#xgy*_={ z=7vvjIH4+<5bKNS3C|?f0R_L7Q5gF98-H=8E&+V{X87{iN5Pn24riX`sAkia_81jp z*S-a8d9oB@hg(He?)Fm5nzlquJ^~m|x^V`>7@%p>9AHDbG5Lbr7Tbi(&XgpCj-{pl zu9?lq3N={Q8?9s9@LtcquU;jW=ZRKY)dANM#kLDE0x2-b2s3Lhc&(G+v00{1rV@vKpl}%|IvOZm%@G z+i_WVq?OJefVgW16w!x{l98|kM=gESVSvyF9c~b&rZT0Q=bqdmE z_witrZTTfF<|B_?)L$Biv(a;L@^+KYhH%2}l;Ip@Uh)`rfQG*KC#ojZttTgsJx@)3 zo=Er_8OQdgUhDUB#YlbtKu^kPB9!R*EwI(AX3fbNNT=(WIyCec#=qty{wgk|p~GmC zuxr#ol=a>#)(i=!`MFtlyjsILo5*&MstWh#vRl4mnelI(XseYfe@U^sxcJN&(p<9r zQU6BjE!(CgknW?M?COgmbRMINI>SsK5JeY*lpxSP!WC>ivWWa)b)-+tPEF= zm$9f}ARF2c->}~yEIJ|RT*8@oXb1poOe3kZ1~Oo8w1*@X{O>vdm}Z!9Sg3jCIo3<4_p`~esBntO-onAgxsXCav&*RD=A&>n=?Y+n%qfb3uP=*=#)Ck*ubt#pH@Ax#ypeA8%Kzuy0BR1@!^IRT0T9%*DZO|7Jx=6{%Ci#V96_Hq7+LCq}*8CDnWHujhdWSj{E&4%>3`feH2P7_S$eyX>Q z$Y}3DNy#H$kq2p7guQodQ0z;U5(^>f(_3%etoKHq{_`d;$z^Twlk%hEIXWJ?Jy-Bg zEohsGqEiiMJ55>A9ARIy_CG3_((e|pxlc6?SPSeT?RT_ELk+&q5*|ePPLz6c+~xXo zt0G$_Q(>wg;evydY2oCcmInaY*#b9xjPkE|+8nFxLI@i#5BmBkX`=>2AX%cYf^@Ja zeAR?5FxXe?2V}wR>qCBR`FTl4CEDA&KRXNT)uy}u=9x#J0)2t$J!H&k-m16+u%iOg z&%+q(Q;&Z8MNS32k&5Bi^HW7sKprYEIRU}PxAmP#)?6E;G!BgggK_JS`&#K)#)+NS z>>%Zmfc{p|*Z3z}6?5x97Tdl)u&N%ZW9Jf(z2)?_ZQwgg^b#VN+a?6pbCPasY>9t* z8Nj8)l7^vKt$<}W;4ie`Q61WOW;uwpL#YNW+|zUyoVYD(?@&^i@+BQ8lBbX21m4JG zTW^)0>%j$q$~CAJoh{G%>5aq1JB^jsCyZI7aVoD$g9GAYoJ-185ma*4^crQqNZD=Q zB>nf>;&^@zdEd74LRB8I+?iEffeD|KjrK#CjL}mi1c-T>A?<6U^>avi)hm{TwLcviOQXq!vfXIs!h z#^QB*>XRCHpZQFsYqP6mwgZ~Fp{`N|8i~0czk%y%hB@kK$VhfAk?^tGM$Y7#qxFlR{nd&-DEe+sTVnX%umU=&owUY zKdxEh%o z)GBXmi!dRnce}CX@&0b2dG+t&d^PDOC9hlkdOXX~eLg=7!5uJ-=OLQ2Oe`gg1AgXD z&v2T#X5T}}3_;a!49x%g+*=x9vyWmjG?yr%)gE|s+%2(beg@lvl|=Hm0>UK1Yq~(J zfO+}szwvg*V4n&^OLq<(9-f_u!7ODuFae7+jMG76^LKLt4`7`NYAVCc2dYa z;a|P4|9uUj^zL(t?C+JUv91vb5ZCF$J&hlRJwKo1-Jyf`5jdt5rO<@xi=Y$K#CD7v z-IEzeyh#V2=HM;m;w+4Izip-SCv;5c%}hV3XI zG0!#W6;nd4ozh)NC`7VjlB%}N|gl-gX>#Z!ciyV&ZpMS}h z;#T$M?}oD5yn~QZ&^v>(bbF3dS{@eeComPcGhHmwRqyeFs~?$4c%E|cio=K#}P z+Bd>8NMYIY8&4i;`JbE;LC^gZ_1)P9t6*#+pz2D;X_B18wvYqbV3GOw`GIFvOkMZ> zWqCDF_kvs(OZI(H1}d*9cSg?s>i$SxwF>f;Y0R}2X>75DQ)cS9cQ(n`Nf=5SQ+8g? z<37vkUa`PJeznjv?iczqdqt#GK*(Jwu{cSfG}mjoj}yT60gxvdI@NdBIst5z^WZNh zEA?QPtNBkG(=>y+z#_8 z7m>ETxE=|As~RTDHjj;)G2%Iwt`yp2E~&6^oaUq=7*gO4_ati(s>ufSHunN6J!<|Y z(mzzITTX`=P`bU8hdlxj;rG-)yRrN#E;(TZ(-iRA)l);okD@P*;DHHBC(0KqlK8%EExzb-+MUX}d z2YGQbbD~Yl%2K}s+tiW=E1l(0$H%VBm|9v8)P*vwC1~)cZSC&afAS)k@$UJ@~f~mEJkJ7zJ{71E0?#8EEMSRm$ zLkq!(%VVG64+vpd{2_&9=4afdbZs9v{kt(!A<^~JRJ!sEjeG-Eo&>)k^d0XAK1sCb z?LiDwFwMIjJX!!{1+LuoWG**X>;f&YSqC0He8Y+{LgW>Ddo~T8w z2o%RSLp2Xx*PVwJE8j6bByv!3Jnt*PMS!diIjWC67m7iSITk|8vubPxOBQ;J`x2)q zNsxO zK!3pt1S1GXT|gnbhqxzblEuA={9$-YfF|Da;#*T^fkBpy)Hzcf4Ael@WuJ+KU9edr z?-&eYpvOY%wR(gH_xBlWthw|BAkouC`%z&^E07mTqsod<;PKoZ*F->c7SDTV=9@@) zlsx96cieg2T?I*fjAwCaN9)Ud{PhX(H_1Lwb6ZIC3`d8gj6p5a0fplPuIEHwVQ+2r z4~09vZSosbJ&q7qAmk0bI}|8+#j;1fGQ}1*{G0EygImQVWAwDmDqGwqxV$&PaON5n zBQr&Mg$TH(-s)Xi7RZb)yT+|kU-fJmceQcxS9&-Sm~Hl(dAa%qdQoxysmYJmEwCTj zz8ERFvQn+L=(|Tt_Nb{$G|agx0)ADt;T(3UM*Z;1%fp#yWi6q(wS z#pBLL9f{kXgp=eNeY8hkjoW;#aHvnsEBLQceGAvSi1k;n;DeSWy8Ey0VZ9?#kIc?8 z5mTvLx?28W**!O{1^Q@fuUiTg6`}+C^X8RE@-kX~-@}QEVC+hko2jmzkil@PCMV(k zho|q1OY(oe2T9RPu`D$gHm#g}%26sgGSo`5)XGfDfoA4jxhJ?w zbMJ{Wx400HasT=L9{iv1;vuj5eRI9fb)9pa(}G$bub|Ok;cuxm%)Je=D_-GYC~<7_=}{zG>+Duy4J# z)p@?xL$5gerU`7^L`nWR%l<>_4``qerGs&Uz+jbn;J;Ckoki+1kGkWVz<6QJ*ugE% z=D}tub&oNTV3v9$jf({wY4oi*JpfJv(&-d65PcFZj9A=L7hoap{tgVTHRJ+#D9d3WziNI^M(k}edMOzrSd|tE5gvbJ6W)b2Yd1=i zI|M)Pj!W{y3YFrCJm#GNVg6`i1zK%OKw(?~+LWJN{Jn=aGH8u4Fy6kKYk zT9E5lrPH?>tU^;NK%CiEfEuVbE`Cua;{!kf2bz03*){P=3*(JA>;fARST63>VTCOCyJA9TR zbDw+usEbEd;bX%ZMs?zPND#cJ#yuXMxAk_rjr;`;yeWMa> zqUBaw#>}d!%dzEIe@H8wbA;a+A8x;j8EQqu4FOT{DS}t<-M95e*2-G9smPB;)0b9H z|E2WRCsQAC$g0%C_sHKcMoXFX`c~?0r5-hYf(VYyHickrbjs(2NB!1MJZ-l-fZhO| zUnSee=xlqEFqil8Gpd*tEUjwH$`VFtN>&EVwN%PabOo_+D?8si;dDKMaf#z5o^#DH z{xRT5h(X(?y z@Nswh+=5JP27)%=U~XkbpTzLQLPIvzx%VSzN70^8lMyCFaGE8s`x;8z^eJ8zFZ z-Wj6AMI)QeDvi5)_xXy}0U_7Ge+UpCxX)pM?@~u1FtJWS23S9WXA-;a7Kb_R0pCF6B`I>#^@&z$P zXSKU#f>`FC%p_;-+vb7GHv6M|&U|7eUMYX>q4+-o0A2HC8^|5KIq2iM0J8Nl!qn`k z#E;$~BCgf(4Wf-l(7Gci%-BjJ5SW?#1owPIu6d-pFsOVXHraUkbN|EGiVz{nPV!`6 zC)M}uiV%6PVtf#O?iob;C4kxcRJouvuhE?#vC3QOvvYPC7`g+iG?LbJUfQCuVquo6 z{|YS^yOE#xQeXQ#XQp9x9JH9bVSa0r*)tnejKHAnkRS*Ee7_9pJ}*DLQw~@7mn2qK zs=vDxgWNDDj$ckZrzqW1Sb-szg!?d83|8}!!c-8vKblqeo!O~!6GjW@UqcZwtB-WVqY9uF4i){a?G~&cSlCc zeM&rWB@H|2>sES#{2V7C3{5OEr{yP6M?%+vMXLB;zuURwTt^! zCP~T)uu#q1diiE?-t7n-xHOAQnntyNxtEU%xL1m{I;^rQ8xo$RePw7|rzRG$#W+2) zcdlhg|2Iy42&rINwQofmfAW!9^1yer)+fj{+SdNBRn7Rbys5_~X8bhsHU1>dC!v}_ z6W^E&=e()fw!ZS5p}fnBHGAt7?{_( zP;Z>-9L~Rt^DEV`#hH}txt9sL+)YFm|FSVQWQRV~SkiW)y0iP?d9|faGZuj1LgS_j zU$U~M8XPT(SvT{o(_XCfo11vO9&7ZV9x-Fd!a2X%GuF1-&#X;6xVfHm&|y8P{n)y7 zbgrz1xM}_qahIf1Dn3R+F-#br>7WBN_C?PX>0Z@9iaeytXRSN6h$A z@s+$Mo806h#gW|Kb>lQr75Q8sy2C*KrlN1hICRdY;1XMJ0$mwh0EHQ`FN?*o8E1o$)y zNFq6;jBA7d`o{rS3;0GEz6*RK=zzSue4-0@My8jCJ5}vPxQ(k19KVt$pc5PQK%G+F z8##lDgTp+K_6~29EQoCn$|+?&$AjFK|JA8;S5?$Wc@JGfCTA|HlkVxDiyaC*IXyn} z{{@V1_LW3gTK;Jq%>NNgWv$GZq`y2St*{F+y^<;mHx||$l+3NXV#Q+T(0|>t`E_uI`;N? zb>kbWC3nTkcNC8Ho_j{jebBC)YuVbRgdS5i#sD2%pAC(FX6@ol*CtAGatnL@fSEFY zVD{P0n=67A_iJ_Umx3Hq92_z(DF)vHZ%N$D^RI7A)1R@)88lB1T@lRrw`o%`LHB5-dmCyi(Df);;2qD*Y)1hQciShixC)64vCLz=6K& z&&imbxD|ecli!qQa+!H&nvIs}y%X_Yj`wHs{>`*KG^ZaG)i^(&@lH=V>1q%+bdo=S zs&~v!;ya>Muce=PTTbjbNbys&hF%Zn<&kAV1z zvIUr^BH3D4Lg8@VE9StKm6BT>lQqDSLI!@uoPx_(eNU&;qa(vorA}{X#>nbi zw<)-2-zveb{`dE*=nC*1pvi&;K+&_n%;rv29T)!XNOQ{>3WVrtj-c_vF3U21?nf4=Na!l7yoMPzB~Wwm{Nfy=~#ZwDNlg&x-Yr zu~47<@@PE(|0zeo`~cimo#Zsjv$-JHE_UvG6!7{N*!{W1lybp?zg@Y;eO)II#@{1s zto4h-`cWmpnXQ$OJx2Z}uy&F+KSdLN{i;#+_1Af~7&&I&jlH};yhp=~qwv*^kH{M~ zYp4|s|Hn=5K8w=z2l?tRJ)g-|!Y$@kjA!P|HUGL~Uo#6NHv8nBEt=Jt8!Rjwb?H9e zP4QZ0ZU>#y@a(OH+?9jmy|68St|R(E#V<%{A;;nWBg@WPBZ`_bM5u{tCRR_U^YhC0!c^ zPv%02WyZT)xbCBxjkRC1kh_oSj=Wxv@yQ*hbmcqlf3)C`Z!gNTGNTQ{zVog(K6#yw z-&46z6Dp}2m!YP3a{Zb>3+S%6;?Id!(7fE;fW_p=9%Td}36H!j>L06SmI8}^vVS%UIbe+%|m13+o?Nq}oPh1;q<2a!&2p2tGA6uK6Y8r#N zYA#V$y-~2FpsrINKgyQ+4Uo?uqCHU7c)HdY`+N>j%dPK~abo;L zRn_d$7V~YIis)V;{|HfWX)lbTVgv_dYf&x3=C)7YFUDhvUR32D*_aD!YJ;tiQNh5b z@lH%q$W&eZ;9NnP7^oI0O%h*W>aESp4Jn0f0GKUcfStzawmQK9?vik-aGUFM;^;$L zpj}Y2V9^P>v|z@0i~5&uw-2djq5A4m%iMDPt>Tq!uCtWxSXu{yObGTH*2}Os!Y9RO z;X2_uZTjSsrXUWy9P7@cA$@{3id}1OaL_4X+pd_@^fy5Jl{1vf7f%k$?OQpx+ufjo zzK(+EVg{x`()EWYFIwtW-d^G1tfGN~*s;fkdtY5k)$NI$aVQuU#aHV~sBqBrxYmuj zaty6rM9?CQ&bhnA)6DDZc%;93z6i;9K%UZDco$#tpl{1mZ0}MIe|PuMJ#&@&_vmQr ztMy0BYVJMCwMzSRi#ONAOq!^gkb*yUImelhGb`-uQe)ZjgB@Sjqgxla8gH6Myn9oN z*#6b5!n&#mbAJoO8zzMRNjbE|%-Qn0bxon5He_s;qf%hj%6V9l=ge6&*TL`PN3pi9 zF5J!D>nU_lIS19P$DP^YJOllT?dw$<8+pa{gobC2*t z$Deq5j?B#eI})GHfzv4*VjGZN4|MB5&u${EG{2hr-JQlAh>6+rxTL`HlafQgNpqk9 z2_GdnA264J{`WmeQK9^HTc+%m({kUoQ=WOW934d-IW!8Add0LF(7?vL#OOQUL3I~7 z$90S2Y;Uu0_o<+BC%fv6r$Hn@GUM*^&!v)Q?g|h(ew!}_{JoWmvbz%1J`3dX1G!@7 z^Q0R-nN_^JxJAEd3e8GL#yxX#F|PViiT`D0(3X>W6`OIiMn!Q#zJP$nYJ>PCk-I@H z8S>{&zb{mjnhkAl$-B19Gqlb&cl%R`FtceJxRIK2BNI9$M_d8V0OEs)0UpIuoU}?; z{EPiV8G~(Eq(8*6R+Pe`jThj;$*IPh+t~X}oOOegfj25me4=HGF*Sb#$K4W51wk0* ze%XpZ(S=89!rw+Ua-g5B-py$_zTw!^@qI2d?&phhHnKD?Sy=BVY7%Mth;#X$g~+4&j&(;Z|~{^q83Lz?J!}A#()V z4_cIBiwS$!T|}XgM|&C|^Guo$BjmY2!xE)OCX%L~3GdKOr}8NVweykMn$ZAzgPKI6~LRpE8zcNQ?2Lq782d-7lNjhVI>fgm;^ltOYe)M~XhY zn@H0OPvx~Et|?m$!k<%zlFRQ@5+B*G7U+B_Kx|F3ZN1n*KXxFeqIX}6lVy!3**s=O znE4KuhYzJwf3bpQL8b-~<1lqyr`$)?rK+_*OvUAmGtP~ReXdKT6IClBH);3sSML(h zdcjzmmaWw<=YM|V%nIK<*1Ou0!B)5sjjz03Oyd3gnJ=}nG&sWnW+(pe0~-CQzGRlM zL%0wOU~zWY`=RVT z`$Lkgj@J}TjSi(_q=Ft;;Fc-M!t9Vj;{H{tVD0$Ems^`1dxUU~85b0Z~s@ z*-UD2TF#b1%87am37gVk#JI*dv2=ul4aQClbA!G>=z}$HC;eEnJ0FK+tR8y}9Ge!r+ynYf%{?2G_H8eh3nzPoAI7VobDy4| z3MuA{UF#G05^tpYEp(+tP{G~!H}^`B>=Sx;E))wh0wtpr)jy!DNrf#;bCcScV%)?N zf;y%h5lp?$v~RlVJN73t>z3RV-dWHOJ;f7iDyF6H{qdj7>iwN^EptApW!b3ga#jbc z>YSwzF7W_|c0$avsZ8Ts0gz?06W?J<_Wj8|SDTq4LtTI2(%?FtE@7fQ)P^LN1v&oC zhU7A=Zta(gK+x$UqQN>op7JOO(U-VWZ-lQ-$I^t8f=GQ|D13$p`b3F-1-@l~mi7}y z|GNrV=m^`I*5Du{5zb7Ql(w-w-WAVLwiwbvDjvh zF=gBh*e|OU7cSG@)kSTxa&;5H`q9AH+Q7{peRnW>u@y> z_bcBP(iS@H1zKTW%Dmyi+`+G*Tb`?0!n!LlTTZQgPA+z`f0OZZ zy@yrRbvHii$?JLVc+sEn=>;*tjP`9nL2&W-v0clXTWfKp1t;A>tisd6sY#l^_UpGY zx5M=TyB6V`gX6gdP3V#zEDVD+jWJzV9~}C&sAgaQH!hBF1|99+I(R_Z?{8)od3lz; zY$HAk$pIVJS4Jz<%pTeT%m;GaW2QW-;*R)vzUhje08U1pIchGfD=;XhX!_$voRZmC z`%&e`i^+qeg8fzWIyaTEqJhjZpt4h7R1l?Vhq3|-CMKH~mQUhn$yGjIVY1@MGL|~7 zhg6d(y%)ANwnn;l-1f)i7&A-zw06fcWc--Mz{DwdfnH5_D4)l@zKCgJ><&r>@A0Z_ zlS0PI>~u6NrZn!?lW|g|`)kAI)Q>zrY0Jmf_?(#`RRh4aas51aGF%#2&+#K;MTf4f zX08X~hEEMh>aN0Qs7dfXsNp;bOi~C=qX|fY25&m&O6%?)H3r1T56Fy=Uv?z? z$^&z`5TFgjacl+OaKoR2;)U=962QqE-rZ{ab8zpu`-$4}2Fllo>$k~g>V}_Ll|K&) z&MzzXpSd+&)p1l5cW!{KVw#nzxqH1G`dKDbZKUg5=Hh}{57Siai@6vQk1@U$^A_^( zlQ3Kfl%y*(NXwS247)zdbMPI-T=804)_K|Kyce(6wHNj${cU*%Wt5*1kG)xpmlY8L zm0^#MfHpw`9EA%>DvDNkEGc8R_DwLy;9WMi_=lOGOo=Dz%x-vrK>VJ>8)-*=K_VX= z-jW#XAUNS_mtG92RJXd<&zyBR#bW$qXZC?6o@nHvr|kWJCd9*g0kwhS2YtOAMr#9N zD|e<&6htc%EVLw$2DNH+-j|wiw&`s))%7k~8A0hADwf2{TQlsZ_T>YM5*MF-SOEzM z)@s*l(NU8~|6TW$s4$%HtsRLV5SL84RS2896hWOE?uX(n5Wd&YI`Y^}$cReaq=pU0 zfs7m18#h?R*%2v07dBuOsl9q_!t_FW64=iELvGKE?jgA)5Mp0-Np#93Ev20f^npIW zdREx9r{cA6`di_?LtO+drd@v8`}e!4Z8tlBKW%U*#;rR=2lkIuMM13*G?V6#RKOY# zrveNe`Ay(9H=k8gf9c@qO+ca<_fMb=plj*|8{)IXdRBQpLGi@@&^vv_rE7;XivpT_ z2R%p6b&g)8nwYA@IY_;}lQ^h>36GMzLf+2(GIbuHDJ=9Zm?-L|8)Fp|CX~aTsQ?}h zqDT3?f?fi}BgiV;YX=BFO%IW}0>1DCrf+=5_uA`|zXVGQvb@e(re}4XUbTrL>j048W>qD!B=BR1pxRQpo8=>O)vnbO`05x7})w}Reh2!9M#x*4F zDP=IGA@j|mdwSq2GIdEd@Lz*lx{5`)|NZIRl17}ZKCRy2o%7MyL^*@=dzM;TTEyXL6&HTvk)W; zUf6?g!Y7cbkuoG)xk9Et@cOx6Ces@7K93H>6u1-MD-2_Jo4-2B~w-sy_z$Ue8Ly;-cSW>e2>R zO{tK7?M*4JCam7(TM>!(!;XfHB;qAy*{b4I?G5McJnIzcmw~(gT99ot`CIV0r5b3y zj*f3uiQvD`CORt*X`+n4USa8qdx7i%VKdGsFPdwZ6391fp>BTM1f^+LyLM0$Kedn0 z;_O@^GR z6Vlcp2RLv&ZjlxuO&sn98=DN2;ipbXtY5S|{Unafq*b_2R*z<`RD>!|FIx9ite3Xz z3@eBSN4=;Y(07;#oZ(0=yv~1U8}O^kzkPJ|oAixI-p&O| zM2~u?1h!_+LLTO#l63EQfiju}KZl5u_5-m#Qm7yNhzLGQl$kJ;u53g%9`!pmeuPo2xAR{c7Y^QV0J3j2*j z%V(s8#p?B(Gd)FIs%^R2Y8@313`%CTdDdC_T&FPpZnUIKHtT&EpZ7{1pgl8rmMA^s z((y%6xHA0TdeGyg+AIB#e|0@ek7itL6i zQC-jpXiV=CW|Eq#x;Y-^j-u{fKcvgiw&tP3TEnQAleNG#Dc!9%T+dE#JS3t8oW&&( zkf{(n4xgKfyl=$-@|K~mlwJ+R?EFvxmmj3Qoz^JlXZ{Hq$!9iD4o(p`l3y8|P0lpZ zx55R8S2jiQ%n)gS!91`C`g){BHcH_G39y$2(!KEhGNAu4Uo$dut32O%pK?w*PCr)( z`mA4xb*tVlFNm$j7;Z8byC0=jJ1ZQe*cNCPKTJd@4Yo$xIN7%;ns-*ltvHnYS6lx~ zDB!`_LlSlsQ=aM0l;r0`on_$BMe5Y~g8L83N!Jj%ba>EvA-M_jDZ5Ac9lvksLP7t` zP5%vWp7wXXQ2#!vU(rBiWRZ6j|2xX#Zfxoe3uJ>u=&E ztr0PmEVv40wLy#S>AcyUsCJ1yO;PiZrBmE(>JQPcnn*Xi7~Ix}6`9pRXXsnB#q%hS z=AH(q%Vtw}$)xt<(*XhOKpfne65UhWyFy*&<+N$~gZNctlX272Fgjx~mlS%C5qlga1xkh^qLL&p16%dT z32r*@+qMv3UXi#Miv=~!<`w)L_1df70#@b=jXRScE(7K{QygJ0PDgC~ z=@Jb}69jsCo@BIpBlT9Obi*3QDIleQ1vJ<v+YG=+d!+`l|5>d&j{O?jP*bjdzo-9u^rE3jy*c0AzWQAnC?;H=b6$BVxPA|2oiR|)CIr55u6O@fNO)p@OMcZl*6pvw7Eh$W zJqhtSaKzy}+u}#nA<4JiYpeO>)=ez&KE{Bx4EIT74l+s<=ir#Msi0*OBbdA=#Q+$e zVaCQ~AwOvS-)!r4H_|AudW64hAZW$QtL1QehpnB}W!?oJ>n8%&1SM2C6*&u1CD5L| zIUt;lAKHXwP%TZ@o5%;x1BK7)Lw#2SGMirtUbO`f7|vpc;opGCZ%4gOr0Xe>^kn3m z=&C^*%b9D{xrN6#}-WN6N8n+Gxt+j>DU21y>qlvTnbR44aho6+9Fdyp6^m% zy3%qvyf@Oh8pX*Ymb!f2-5+gzbB%hc)n*IgU5$frHk%B`d#K_&qEGyhZg(R)ld3Is z>`boLquW=MW(|f%EgrLbW(?eRmlo8WW^;>1$PrzWmr(zzN* zwJ!q_n$W>%#gmvto4pE`!e2oib=P!gU8TXlAVy!vm`|>*aC(SU)6XK}}&H^HEIjkpMp+~(Lx+KKE(N+ooi65cRXik<+gTUz zN~ha`^_|lwV_7GXY&sXB+DjRf5#IpJH_oj$&K?+zDFoA zWA~f5`9FBk!#Z1+;(+*zVBZl})tC`blF)Q)*vtlzwoJ7l1wVl{v<-W6 zS`m3+N^$^4ZZ8bDs<9%pMLPk(@mm~UyBX}@+_B?^iRwZO?0nDO`uOmtPfv6>wOxccL@m)9*s1~s{!ROD(E)FJ z;y7R_PY1O5|BcdbbBAZQwvbbN5yRl8tzds#>fgWv>AXL%SHAs7QbZo4UF!2wK-Atu z0Jjzl&u60QfkTh!ONR}9EXIF9(-B)iu7^!mIm-5({Zb#OLW51(WVIzCgl) zzSHjCFyDm*@sR~_HGU2jF$!8(AjdMHUGWN^kh}b;>L7JpH7YYdFBp3n-*QxHGnjNT zWE@EXKS#RqM=w<3uuXj6QzhCTU0GlyQ27D2BQlmeHXo(ox|jDgO<(q60GAk>%0O?@ zi__P?$`eX63Biq1!Rv87}~o}a}f>rNo$nkRn2*!2YxVH%v#n=S~RGzDGk>aQ5D-w7qJHlIwBH?5R zv@jyS8pJ{CfFY@3{wVhRnup7J3nO+hoXxY*gqhw6W3!^^hA++Q@`lm4PRnexZd}sOvGr&7P#Xjnpl%OFM+FOOP2y?_`p(<_el+0&__0#v#W50}TUK4a{-fYR4 ziFJL>*j&gIB)17r^zZCweB&<4z*Bz6s_t8jnES)XNH5k4#<%m=6e@2Qhg|79_yGPq zabKk2lIz1xxhH)6)Rg|XQW4wSEWdVrruojlRkZvcM^8gGaS274cVf@(ZFi_x&9z3YZ|TE@s&!uOXXn~uyx&5M zOWsub8f8EMG%R(wp4gRA@lOt=A{`oM5}08BJ+Dbwd(v z-GCyuC|-2sYGjO@^0ivrEZr*-*HT(G%`s|u#3fmFuR)+W;g9WuP{oPeNMM4V-!m6J z^=*JL=QochQ0u>1@>6Wn3q7({RS57X^6{L>bh5bw zMGdD_6Hk$+L9Bjj;kY(@5Dt;?FR|5MPg*y9F~t4Rpgb)(R{@WM=6_&(39$iOj4xnNnf>xi9%kB{HWT+to@ZwlL8zWS>7PLu1v zX4)^_Ck%+44s*w^l8Gg^JzAmEqvj$`nvdN%}M^z>M(!hH#i5}#Ld1oB_PC?!dXP{G84?>}+VK=GAqXF$`XP}3? zJ+Ajow3Dr6Rto%;SNz`%;EH#UojAjtu4{7O?R<8!-ZI>tukI}O<7-W=a;gjXE$_7b zGr!|n&Rx zAET})e6PfB60t3xe2wBBz-BqrVQVFHfRnGv_z4>1(h`|IWX0W7 z&bc!D%fWy-9R_QZBpwZR9?JWw_TW9PV4K}vOl_Vlj3-7%V@hQE^(3aGWpud`7=DcV zxB9{6Z}p?iQ^rJQrYvs4_OsB|_dpRf>{d(aVrCl*1I{`gAyZ^*%~K7WX}@-w;_;Qw zg|9Hpz#>P@x9OhHHgB&ei2t;KhN{8Uh6V_eH<&N;xcyUzv5DQ@ZuW^UATyYZM8EJ8 z=)JF5h(JkEZaS%OYW?)N8BW&eAw9k16EWOMA)>WMvV)LrlFk@YA`*BlLygw$u}Ggc zX1~9HnSSqRnLkyC$7k8o-pJ8rmHN%=5e(dJuYQ`JS)py6@DQCgRo|oA{1EcG!pgT_TjVJi|0~Mwn!h)GDFlhQ<*g3qi&kS zS*u!gTmIGAcO=W5+hmr4=UQ`=KSW=$vLu;yXx#BDGPoEbv+b8{mCJL@a&K))N)zuk z{$u6=XJ%hW%Qg80-y=jY@#|o&S*v^1e#~CYSlo4Yxq4(Z&iSCY2?rZMh3YP%?=V8k znxPNRKeF%vJsj5GN3c^GD|h|G1qiKg>}8h$QaWW}CzLXf2o6V>bV{zM8~c4p5Td;c zzFYyZ6?tYTs*+r+qcb2p6(J+11X`7eoKq1)%+V0({vc~zu9ohNtwx@dPWlAsF<`ZV zqvgEd9d$4D6nDqHS>bdgUo_nBI9`pq6sCk95($zUIk2<1T;D0E-tb~ZryP`Y?JvSY zWQF&Gz9z2gZxK=w;u@B)F47^Nq=T_6k|{d&?{A-d-Qvq-!5P@uD7Z`P4@W#wH#b5D zM8NBS#6SG_7WV#Qj?U-PMj$QF8YNp>{{{Q^iPV1}?c1Nq_4NhzOweA#1rmF6@4~u) z{S}3v8O9={;`(0#OCr!w=%J!q3eE3t+wkH=4sKU%lg#97)`W$5vljgV^BBPY5W$0g zoi<14IO%Bs#T_+A3?B&XZ?1Uj4BkRV*f%Ym6p$;4kA5gfIdUhJjaABGZf+pkR9 zDd@BjP9%wj`bZWYQZZ%2U$W@?7bnaq#~IwsrWqBnMWnt368j>@@Qctj*!0)NeXkr* z)xgqiaA}H)tzC9GIyPs_wUIR$wD&p~zuw49-e%5#%H7A(hWF07*XglV)vZd5sujv~ zZrhgktwhj(u*-N2v`^Jbki!p11oh|z)5__PU|na<+c{VnZfP#I+X%U=0j9kZQ$8)j z4O2fSyRvVTq>5PTB>8y4^MJdR2VfvE40F9AE#_3=W0-Lp*cQ*ad^tpi>gPQ4pafg; zWN#Yj1u6};QujDmyctjMc&g%Do9%y{`v$z;$47mJ)00|rqtL?EU>`YX3Z#?J!wdIb$PM!|EpqC{Y-ip_^2xXz8bm5AUXPq^&0MadUJuz5xRrs2vj z8xn?(C`4lvL$W$)ajvg!MM=J<9~_Q#F(BUCXP!QDhIfj+UwpTkT;7}=?JcV$|E#D9bwAd1^Y-|Ky?by*}WmC25tkO2^AUSnI)t?{*FD* z5%QL~D!+eV{^_H#7rBNeYuJGVivqYb=X$VT%WkI85nnio6);N^kLbu0vx{`z|DdIt zhYWb_3|1UF+E0C*pqum0c7f+E{I|uA_5S9a!h=5e|DMjR6$@=|nK%gM8I1o74A@?7 zW_no2=i^o3$#UbFccea)t3Mmp_65k?WRRmZ+cCrv1?B9*DcqURAy^c8`TA=;Tf5&B z@r^~~0@)g9f=#FZ7j@+0P9n%|JVPgtdX7}UV8Fhp1= zF-qEKFGP@pZh0nWo?qiUmH$ypZUmI5-Yz^MayjHVPu7_t3(d*9RM(U^<>{M@8joDW zW{}d9@D;FOV(nwf%0;$k;yFZ*HH)O5Z}}$p%38|uEG-+NYVHHtTo&&nh;B-;P`1B} zeL`kHzx6F7o%#4C&{fuD$!4#tUmsoOGb@Z71wTJnbojRw{*v4m(pHwrD;ZteljJF3$?Z?s2OH>O>qZ4?_=6c=ZKWT6fUJQxN<+c59s_>AX(oSyh6VZ@f@9{ma9AD`memS${*o;&q#D_m^F-~ zc^sr0DbGA?q4x?HiTLSSgQAey$N*4{@B00Evh5c0cn73>eQp z@g;fEt=#aFKk5tyo-|35$16)&PJ9z4( z9deCtmUl#iQvO_da-Nk6`QZo~iIFL~U&ZsBS0nEf%JVbkM@q#!f9>}6yCLgxy;ayN zTzgcexo}y4W&LoYrHj<;qUVwgaYaHi!1J3XNFB5f(&WV1A?oXfrV$Ltv`%1iDfiG} z&!PQ2uup}lAvUCP1rUGBVMX-!z^dm5o8>)SqYeH(E~n$UB7)enuM$8$&M+XrcgCyshc? zA)sUy6anEbn$QsiyiW_ltj^ZIpE`~^Un5u#kV4*t*28SbyQvJTGg0WAN*gNe7_{iW z029)J+wmHun^;Eh3`crKD}nGn1*LW%bO?3v)o7%A-cgOBM-p8D>!!VMf1r*z{es3P zEN9J>oyv+hVR_6jPmW3~dYm%NWjK`R+!3}x5aI@^NSIlW0O$q}u zunS>kqQ2$@aqQ^@Yr_=H%_osnP?k87?<{SJ6Qz@*&Hqx=4!M7~2riYd3hTc97jF1| zaX*9_&Hg$=1a!X9;Q37Pd?rq@Qz`hqD4ihm<8NXOS39BEfFo})EE4ium-axyw9B4Q@xklwlfex2)U zL)>I3D3LK8?c(fw8;ip7WOU6hn}-#j26G=w7@5OEOpLS}rZAb0e32Z~hK9a`up{gr zez^JD@*iDgKL2Qsm>5dHKYFrfCq3@a#&NIb`(0k-2%#dCk=M2$;kG%jCm8LwD!GDm zACuF;mp(5LIuJVpj&S;LNj3Pl+^LwY!B&;gL_=Fx9XPumC1d0H#hUe4kMC8279(hY z9DiOd3Kw~coSRYzKq@rz6khcLU8Dx zKA>fmlXFp`2x*4G`yRV0gKc$RvpZd>G0<&|>X3yo5DD=)%!T}@OAa+B!)nKAmiH%B0~ z8ZT(ttunCFt1Zl(@syDNJGx5FPU5_OUsrDA13ciG3Ks{ukhruSt%;X))a^vOoTBG% zHHEnHH-ot&kKz643+VON&+r?<0}77>{)og_(r z$;|^nQ4RLCkf5Ue-*cdnN94zjs3YBoT^*%xI*kjTqFfDtMiS>FlQJPzOx*`V3TLnz1xy6?Wvo=7ssT zTRSWn?q1qlF>-||FAvDmQ19hs0i65an0h3cdVu2yIluEyS%5XnI?TpM!(#rYU=tF_ z7tmc3RZ3li%$hv=$@>b@`6slH_~1(5`NpM|?ar;m%t(MB=LTeX<^EVU*8#O0ID3KM z@mUqud~T3enmG1P>0v?X3N3Y&d{zk%)3H_Az_qNnl^ahqXpf4NWSmd>&pW^Kqs+B6 zBo_RS*8XfnehNp>C1{d1>X@dYa%Nio00-lny$_y8E}QS++LvqoMIr@FyyauyQ{wKt zh!hqk*w9t+32RBYvWuP=eTBX^jnL$AzmF6fZ-8RYND8@Xc=9KmG}1jJpCfqMQ3M-8 zYi@fjC|9rQ{bq%)(Dsbmt3YLVDeru&!vACMJ)oM*qDIk#2+;uviV8}Jj-%)(O$0$8 z!BJrx6`a8ll}Eb!P5= z-~YdN*Inza`|i3Y>*Rdj+55D;_u1!sr*0*k@ak??>o>Mu?dsKB^0dpPtky-(+P?%* zdf~4oRrT9WTAx)MvovC1*{aK!X}_py;9_6Yg^dXFv|92>uZ~Q57&DkIaXTpC>3oVsOet-HY zwL0AO9sEdoDP(z9^N}M(ziR##_~-QHbH!axX&r){PT--JJ6f5=0h9@kd_?3RRLL%` z6jy$KQINInJj*ZUrmhs~rqtYPyZ+8YZiowMaZ#Dmn)F77!rpmUo zKOn%+v&;~Q@M+4+z@Spjs$Vp1+v8i0_Jfr$f2i(?y+cyox5v6gK zvL;m<&tnXPzwDt zLfL2paX@o+;*4J!gK`i9MvL_6LIpDG_E##7qXuWmh^YYBa z7X^LiZ>-sIa;r@4##0$>)JoE&y|q`BCVWst~WK*Nk+q%4n4|Q&gpza~An!LM-DG;;F zXEVDaRMKmA&LZhsvubS{%eUx5*eo}QDYRh6hw>2Q_;DjO>V?;hIEDpY4{-uLmbXq&8ttQ2hbm$r>lbUJs?n8Fw#%9FqC?9R;K6>L> z$o#7dge=cDQ93VFPov8lq=e{Jq#M2LI-S5}V&r+1QEtRpB)F409+1>NnbO$C3+5|s)c*o6WHg#=% z>+nSB_b$hJj9Xne6x-{1(|7c}%IB1#ccxm7sZM`j?ka|lknaw%-JD{Zs%3)yO>%YG zbc}S~HIdA_gk;^oHj9!|BrJH?29>f6!W(rM70wks(n`n#2_3q8vg_7Z%cCs^w3fF= zO!t_E4h}d?ukuk+vxG*kn7*RS*O~-3M23{N7%2e=L8J9CgQxZw+jd z>=hI@QzlM((N;S=l-J3G%n$@xT4>8_)D&dI>eb9$kKK5klOSR7v4$)M8``Y^Wi}`F zaQ-G?lNDYlDN^3mKw!4V=*(^^TQ6M61Wr!KHRVM8eKVVdriwA0QN@@}zVc;q(gbXm zU;MtttU9uH!&POEJC&;vY&fUXxfa>;V-WGXdo-T_mWcg^ zNqMvvx|!a1ffTBOeT;B>)JK{+gPcAdL>YW9=K#MtQrGRXd%d#9I14%LH?1tWBB|Q_ zdR4amM%(L=KU@ENWaFN7p@{(#5sPLG_y5XIno`UE!GM0g5i2Wd80aSZpkk9-Rmvd! z-UeP~*_x0`mKG=`o2DTnN@}7|QM?BeuXX+>R(}Z7UVqEN zoex^ZEShB?*?Wrb17GF}iL>jrHLFIwFR+s5h8zZ0jV$cg8ztX0#%0EFYTgTN*Hp;; zD0mBhsYe=vQ@VCw-6gF}_DYN<^NVKjd^#rqcEg7zk*CN+i_$@O4})1)BlU=FM@L?p zlBay^0e2mdbwelq0M|~S5yJ|yCcIa=bt#3?SbfMS)^VLw1}=l~|0|VtUV5vb+$|Or zE~o>K@+=BR z^4|mFUArPa-?>y25o-R{FixK)Od>anI_4T&E=fe-d9IgqysU*PI&JWiBMqJyow6&c z+>`2-%TV#jV=A>)wYHX8?+*3tA6eA{1s9v4U~%A}p(8{x9v3#+XliLZgwXLKPuJSU z`Gf`1iCw@%iLdHqCc*-0aVqe@42k<-_Gn@E$$$euRxd^{T#PYz7&V|ujS&tI9?o6oZnk1<+ z$1;%;@yR6cLv-qa!6GoW3c?ts|I7lyQUD$}^<)9Iv^TBvX;%hzO_YN3khDLn?gYK8 z3hb@k><>BHek#Q5aWCb?2Ab-hLf1z&bulmD&5mwC7;r1S!1IL&T-AN?%8^v${u$bf z&oH$oIiGF>t2~*$ML`y;`e@&NvoGcK;TQw)#F&E_93+w{m^{4#M}{ z+MbzHdSuD3tx5JL19-BhJGm$63wt}Ce*D< z{H)wxCjMdC+QkhOrb30UU;j!z0;%<-hIkRwgrzAg6d9HUbO*#{(moMU7TdF~pOT}>g=-SyT4)qcbA5D$#gl<&B4Hu_#qJO8BGM5GAN0Ekzc1!xk=R80Yp6 zn`zu0HVX@RR1N$gI?8S~6$uQuXbvP=9eqd%7{%Qk5Vh$gW9)ep`l((>YhCMLt844H zD7qEAsh!@fJhm`xWZl^B^qYR|eD74?#W`rgj%GCO%**7Q0&@7`Cq0NC%_Z9Lj=riF z%_MUJ@zV#c3x(A7Y~}`s5m2?J-(Z~`fvG>f$XPSN-+=NB-Z@bG>!CySvI#g}ROi@z zE8h6fqBUVlcRNNpt8)?I=E?0HmCSPJqtsDb(JH;*Dscccvmg2^crL`2lM@dh96gc| zM7TK<#qnL~oY$rJPV$k5c;zQqiOiuQ+{o%;rY5p|rBu0B=KjW3zU??lP)1 zYbVv3b2u+^RiK7=xMw5FED|nhU^fh+aimTM8lr%F6&Z{~Q>1tk%A&1kF@!2Uo5;bW zlO#RHI29C`E*`e!ieo}{%ekgr#NBj8433VcvVR>y>r2Es{aX!yDtnlP7EW29OWQuX zO4u@!ox@9Kw8wE>53z{qznXET!2@<}E&{E}zv^rhdCj$q;7tl)Qtu(9be2ioPM?RO z39ePd-D1Q?z5|@)OUD4!;cDmqDw5%*poz_4@W-VOL!dt4%{=VUHgN z7Jaz;*}M2xYEi5x`%^!5V*z?hm?P8_+@4BvZIO!kN@dxb;HtbdTcR3nctea_TfRdC zv8eEz?4#}jS67%=nVZ zs9&d}+R;No&#f;W_eUm-$iy{g;A!M8l=Lk4WfKLlNuc}?55%ki5D736{Yt|!Gj0gW zfj3yYqFd=Aw%45t4h?zw+SV z(PVQ|=1xzCS_tQw?-e&9CZVPfeRi`_@F>y&1Kv}xyP0Di$1|wY42{1Ral9YC?vkv1 zp^8SPEDv@lLSLUr5ubXI({DcmNkNW(w9+d44xPqtgilZ}CX1Q}JaJJzV>pX)c0*b@pVomyIE;c9Yz;)@UjUJo;eF@9FFss@&8qd|2T*Nq- zB7>Ez)vT4PuJ8rgG^|FWO(MpdKElsQNaT#ug#$8qULi&D`BG4ZP$+2)xf<7M9>t`@ zO$dY?^>fqJ2wM6wIa|Y=-#!a!*8L&|j)lDm?j{X`2=(sM?$K*)CoCpxa9cx_DBtOB zv`EUlIq2KjtTv8+4$lskpLp(xSOnT!qxu~`iOYT@(1JT1YlQ0#pP<&-e-!7Ygamrr z_$20vv8o)ISv*~~c2uP^k$B0RrB+5_r-1k0jvT(YDM51-j#R%Q;hp4EAC>MUSeGk5 za)a<7vupd*amQ!34_NRZQZG>q4l`?vgM>lnp*VX>e283n=tRl-&_&fr-0E3Q~y%~v=dhlK2_cW9>%#JK#jdg+I zOK%*oNGczsnKdM~W{0TX5SZPK1)Ikmwx-E$cq= zJs(SHTRtyToe5++tLOtvDn5;4) zF<|6Bevm2QAi@WX>xOnX2+lWj<$w{Zie$@@LZsF`x*ydm+%?)v8|@*CB28@@K^>FD zubl01<1Xsn#_&;%Zn}IcElbsQ&HgRdB|YZ)>?jH)uE{Tjyx@Q*$R{ck3;9QvNmshY z2f))tiuAgrVVRW^ZgH~-%;KDD*7#ocMA$J7`jk|D;+({-%E1w!R^W(4vh8)%=}tmr=`nbDj?bVdkG0ma z*{_L~#A&&4beTR29-f>r1s4uGaVvT7x@GLeN@`MT1%VzyUrCRqOY^#@dI9LGOeZ3; z;;O$5N%9L099x}STR{sQYm6*}aVd4qfzXNz(a_M;cuLzstp!VR^Zro?l2HmPzLr*- zNg57SQ49PLDbFzPuQRml!g!K|T#cTLp6{!T*~7YM3sv^C997{Y|B>>>oRBj7D+R4D z%!%e$kP5^)Zu{0qD%oD>$h&;GqF-oeeGj)=I4lI$8&tzsR?;6p=>Zp{;#N0lfY~LQ zT&h&XDeZ7mO+2fY;U#a(RYKJ6r#!a`j!aAb%rADt6Uv@h)HW~7WtKfBGs%@}UZWci z1+VeAWX$~_dML{9(vTa9Qct0fx`lMYFws^%Re{jAoJE2HBfK0j@1fT|I!Wz_+b|ya z$O6J{skze7oI5VBSJs#sMm4}mxjnc;^)7+Xa=1wS0KA(Xv@8%-u9{&CDIZo7foDb8 zKCyG#v^P34s3#TQLzyDKfDSbr;!-o2!0j(W?+8M7Z``XZ z$utffLdP;kV~F|X%p0RniAI2ljpvOkl55RsgcM^@ktLrbu)r+m@#wI3x|+sd*5 z*ZjD74|xHtgMx`8g#1f!1bR&|cvWrfarR+buCGneZ1rx3vKsc8zw?qdb~gplYIPiBf9#zp_UWck zRQIZB@(3Za5dB=DTa(5k%ZBC%gpfh?Yt694-@)GJ%S=^>>Tp}f9+tDF79@mMT)9;= zz%sc+uWn{>P>=c@gmpvpC%C2k2pi!reF1}Q-8O_tH?c&AB3s$GoC=0t=m0~FuLlY| z!ljmF&SWmczq!t53BfNRH&;4=4&=@D7YSmO0BqvDm;fQz(0EJzX0Q2N8C`~TSz|Du z5;_xo;0GP}pbCP_TqRVh=Nb-=H^_);O(;&Blm0ruHr=ex(VN1roZ#Ox?|+Ht zL5@p@>juCr+&9Q#>sc&9o+c4uLt4mNzNf@)g0$6mRx^)v@%rboU;GyAuXBBpm@psgCV-c~jDRati2z@*W z8TUqp7m6!WQ5oc@BPl)y*A!zf>hb72wtR?S)UzdHGkeMn5_#mT8|372st=qMaH)w^ zJZjP1l7K;jtwEpwOBmu=6WVyAo}*R;lEjf33{~=Zz?dFH$8}Y=TcmJOguDQB3UZX# zL=eib;Q+zNn&kNl$QlyJnr@IaVN$=Wut2Ywdw15tAr>tDt93UkZ(C7BJ7Wzm42a%Y zUHhmx#Ynz_-C!Kthkal4`#Yo6qYfB*wY`UU=W(Z|H=uN|=m!pg4@BB%YWP_<8g|O- z`RL97x(BVfGG4-~SXEOlzb9P4^7wpgWPSo;9ESj}PlxvGV{Mb}J=q$e#2ieEBHHQ$ zz3mP*a;z?Q08VcYB=LXEi`p4gJyDG#4azO`nK=yEJ?ccrG+myrN#YM%LpXeA0ufZS zLp+Tg&;L0$qAMz_M6xm_r1NQo^v7r1tywkYz;Wh7+cF~cCTP`Z| zAAbtaoD)}{4LK{ud9CjO*B=XK#JJvMo+RReTj+Gu&J<7fI#eUrn}f5*El5ni!1!n* z2=!9*3hm|k7n4~=6)S?Vw45@#YFm~rB%rM2txDnu6%#Jqkd)#>lw#<@Ny7b_bwE`4 z=0`mUHiFY2giIUIV3O`2biQVH%S_c@N7Gz|yY`S3YVrHCLw&NphSAhhK2jX0KXWZl zR8U?IO!TlUNOWi|Y~t`l+=XyaN9d=qHdAByfa-&Tb8ppuFV+fLPk26x5;fz9+lZ7Y zjd5`$N{t@Be;7Z1+5yQH2+@lkHYr2w$(qPGl7x-3+r70mA`Ar~T$UiH;j%*I;m~yQvVnydxivZQ4!|GR7&Tf7M?wQp}&QO7o(prnS6QPrh z9UbpiIRKUGOp=7T!JfM*#?-UMHs%#Dc1s5Gqu?M$`fC;t-5_f%{Qf$S;+inBY+&|A z9~4|TIRh!Y!%@nx`>-xFuC|Ctk?cLMTA^2KIEr+{*-GEYHgZBY_<^v$5j>X^+=#CQerg@<5brQM5-NoQ_h9!C!%f#< ztUaa)Im!q2C#aA_d$H^ekI92T9o!Ije%5$kSt;h$no);bbpZ+1p-p2faCO>w&Fr~K zrWS`&gSfIP93{b; z?sd}2M$b{O6?(O=L%GAmTN=kDWIF+ zDc>72B}~M2UpN@XWXI9v)rk^b^sQc7_K-smDLRP6hw{RpmYXaugnqP&k9LJ*Wl2`) zo$|)bFH8z-1U+^(6Z{&CC4+LG#t}AT#)*yFGJjy+(&}vZ%KEQkVJjlnatz+wa^*(l=*t`uTJff`m~ zq(us$1CepHVSPO7>uk9tp{=ZXLQ*IgwHyLRo7kclq6xDU-?JU3r7O$?!UouJtTH5J zFlczP2Gu7t*uws&j&c%P3Sg0r<#@V}~sN?x0q5i--U5yATX zoT>tunZ(>{rhCf)w-M1pvJKdC7;b>7fx-Np4^(j*a=EEW$%GT(eTE?{k2N$ z#X347P+)FUt$v7~7U2sLs^kXvu8kdfZYX0yk3z=}wt?9ZFa(xz2$LDV)T9 zCD9AWRK}<-5B>uJTn7tfL#)4l213UT( z$eZ-QEtQgd{LkIF9Q23-cXHk5;tKzQoYm zLwAN!7V#gnAGO=ZS`>HM{r=nc&eEj7kSi6>(^?l*Rjl+C{JDfr_$RF_N-19-tkQ z`WaoPaPGnJ?ZQg^yk+R&BgOBP-XDes>#IYEGemdR>es^|y)S(&Rm|g_noWvvW4f^@ zWF%a^+47G;P*DQ+y&>Hj<*!71jJLc!8OvqR`-)6n2{@MvDuYo2`iXtu_=i^lFVox0 zy1s?PP%B@-{g?x@VFVVgv}EkPzR-iyO&i5TaXorA@pNgFTuM1Hb&@?lbyKHXbkgeV zKfO%gA}B0x*wvE*jDbo14o2R`ijON>tXX@o4r8wW^n3dGBS}v>v^zep zyms{G#6z7Qv|oHzGm;uww?)|KT5m2K=oXd>34Lj$?7}Xb88hoX=l+exuJ>YFC5x`s>G%<1~|0t(xgke z2$NfTKe|mHPa3o0J-YW$JyGZLvK)dJcGh5HmPuH~V&fdUI&blW$3t1fN89n&5sp^B z3tI81R-W#N0Pls><0gPmnG0hyOZNZ;uc3ebF}Y=NyRAdRxz305l8y_;8-)_IHYF=x$o;BxTSEF^aC{EkcaauDU zEt{uBrtpYtYi7(RU~bOFQi$*DW{5&uJkd$nHv5C*ty?ply8zs5OpH;@U?1TnVlG^; zzGcqWiXlHSo!IntOVg)a1{y7riI}(m1ET#x zkiw>Amba~bu>Vy3i_G|x$w3#PD1ACjSF4x2vxPQp)4i`dyj`^py)NHWj%>m+rDXw0p0e6XAg%fb z{!eZin!8lztR}{dUd+EbEL1&%zPq!HQcUBA=OYXmrVRS)h>SF>_+&e~e(veVqJL52 zmde?nJHd}0zds)iS%CWMZe*&yjuTe8P}tDdQ2$XZ8d3>qvDsW(d=baMN@J2JaVsh* zb{Oe&n)G5^!)tT(aYCA43g?szb#8abyTiD*!~WI8mh=RarswtI>dY>7#CUjjQAIB1S+10Y*iq?3xzv2cwNFyGaf;|M^eWXedCm_Q*X~%nRkP?8F1g8w zp`12i|LBzExsvz-JaZbLLI|whd%y&6SnBZnrN=MMk3W{s@4&{wAkizUhAlbg4B#wx z+Y(-7E;(vh2g4~2jipTup=Nhv*Az%-39~afJ3pr%TmSpnHon+DCg?%+$GO*(R$e)( zMTp_M`HjCMv@GWPzSzP3asT=j*9G3dxCMatVS-8smZt+X(zN`XqRGOO&%+?$kYpIw z1|n3t3FGQV$=TL15YF<;;-rYLuS)v(4fQn+wE_n!W2By~~G4kO`=N#T&$ezqQdpvA$OQaRL}&y&5ZaYFwT z<3wu~Tb*!8_q5q&^)NhLnLdoy(!}bO>_mL@?Iv6Z#OE@yqPlDT5kvG_V#)7$dT*g# zmKb4SW}K2gGmUeeAzbJfVvI^k#7(#be!66EFZFk-uVX-EB=sZK!@08Un}V4j8UP)6 zzopT`A%mLByVuhVw6dKbowoR~a-!u`1%(20UjO#xI3wV_YuaNJ@uB+Ks2C5U z{@ewWA>LQcQDwoilEoo%;hg8I^xhxk69kB@*2b&1;qTIn+ixtm%OvJA_>{+^yBOnd zS{`?a`4=2}q9pT~V&XkzK$Vi8n%$`4$bT*4m+NGs2Wo}${@R3Jn zM@*-}^|Qx~ngcS+-tejT;vt)pSK)%GbK;Lu^v!#c#Y(W)dx|3xJGs@y$k%y{{*^O~ zX|y5A3VEuG+6LgE(%NFH4Zt;PC&^sx`_nbXA>zR4_=xC@`Tb}#cA_<>F2$jKNK+8n zv)@~oFsKvh)Z^}5o>24SbXTEkef!lx?Z~aui-l80{iUY#U$Pp1blM@XJLUPz;p2{o zBks=Z54NUuJ2f;LRZM@%(=cmPH$AX(m2=}dQ~SIZo4M}Sn`}%Rj0#Ti_%3j!u7&|^x3Ik!5A7B%-VKRI`j-LNzjxz%V{d!X2twfMH%r0}t z@~QWIFagQdB;ku6W%QRh)bxMA`u_z^{M|TKKT|Ha@zNkGdZdZ29~bzc#Foz?0+Jo* z{aOVbAR!b?_1K+TV)e?i;oA0o8}Zm}W1hcJ*@x7q{LzJ`dTmcJ;nSxorfl{GxVKjN z{X%ZF*C#AjuC+h{gQf#FJbe0xVho*fxwNT0PT&gCrVOuV-RD~*qERwU1olm%KYQB~ zqe?{#E5jyf{-Tc_`#Ljip8Z!tP2Cy75DbnjBc^<0#ls;R=adL3VQ21*ExO&R_#3fq-*ZI1GVwO z5jj@9RPGjAwFUPHZ!`e~dAbMCs;Vxdjh@Ids!L1N%`UAzoD9>w1fa!loIK7{pIJe1 z8e|JL%l~Yz1##Pe+pos@9n0?KI#-&4`|TnZ@66S|tIT~Yb|L~jrp>rljY6!X13X9h z3-OF&uLZ@iougkZbMbO-+g(~M4Q@Y|)K<#w{QZelj}zrPw#@~yvP?B_b56mTyx^+0 zQxVU zKb5j8!nE9moX;p7HE@3WCyu21w)4qXDn2pl9bH#;CAU=Cy}krhaH1hCbuKdO7L#FW zSO;up+glMt4aoMeUxvU-*uT(So;vm3EYs!&q%nKIy4XhK6ZfR?r3UZoJGbYZ!$;!t4Eui@YJFR6L$|CQ zkW${e?0SrvAaCS^HGM^I(wh8ebXpY@tg8atSx(O`Oxu3v!!ZddO$7D(6JuzC-j4y@ zQRc#5^ur1A8KbY+Gcp?Yb$oOs*IDHBlz#HQIC7^P+ge1ux`|BA)MR!$zTogfVmyBf zT3Z5zTr{QRi$+49TcM2-KNd6R-1^-(Kn~^6c=c=OX*zU*MVu;LH7h};_!8r; zd_ks-yySitlYQm(3mGu~Tv)nL)#aR8^z=#fkA8>yAIz1^zhKk>Tcl~qFSG~# zG!mEHelh&?q+x!SZhR13`>E`_MB}(h~5aE%b+FQ4oy{mEOYbfs1di~`oF3v;Yo-cqKg%g9ZST1dRXgO1oyPR8H z_f>njndFw8Tj`Xb-FDAPa&M6s(7T6Lka_;C>l}q)$mxln!351<__QbJhg}InvuD0C z^^M!?jKS#!XCCodOq(qr&RYt=?3Nl)m?tYiLLR0q>yLd2-|$6Bh@%IwzoeIko0`qN z8{dB9`SuVk;A!W&q441SqmT(;yZe@OTbCtevnNh$eK)Ii4NLm1U1Ua7%756Y@qY%bz+Qjgg2LrU3*B{m<00uAh!Rh9M z&A6)L>uZ>YzE-FAkFguj&xX&b?q~^$fg|bn0-kN>Xy=Hi<1vsjLt#vy-1+L`t$gBk zhR1^JfkG`4KN>eItjoTdyQMP$RgCUk?dR@1bnB!0xIbR#VWn;Y2Ljr+NEY8wZyTWt z+oc?S>qIxGnQ3C0xFxz$)8G5pN|&@9pB~$G-zhK4crgmmb?wxZhP3T_BBl7;jq(qc zBVznInfI51d^#N6Ti?w+9`x>XzR{_X2XkGiw`ZQDz*_5oQYnDs6W=7(Jd;=~Rk3Ft z7pG9sE1iUIiRZ8SNh1j6*jYcX2bX|(cDJr`{~e5mmg=qsFpP>pK2~d~i7VjuxgC7! zmne#1{kQrXl%p1h{ zCtX0=hlQO!ZDCi-Oo4>z;!m6}`14z;1Bcsy!}1_K_%RBOS)B?-gKefDUUb-9$rpWnH*I3?cfKGV0-FRYnWHVZA9!mv5v^Y&k}Y)!Xs=qrZIz!5KdrFPazR*0mV)eWhCZ1C zZeo6O8bee&XZ!8~T&qi;27y`^?6`f{5;sua#hpJcb~;)@r8rO@yd|a_lGk%e3!Y*> zubZ0EVp-yt;dzzeJK8%tN50kyUQ1vV+ytOc1;4ed-6YLDfE|Z8V-u*LRF3jqJ~I5m zyQNBc4;VGy_1H;%Oz!++O8@&kO!~AHDDVG0T7>ye$XHbeHjDO4vl+pV?h)?F_bh#R zP0@c&2huB!7dUQe17d0ANwC&8#9x+2<$_B+XWeS01?04~f#;S8_MK5<>AE^;$n*6T z9t|HV#Rb3BGgEE;e3Dn%udyTPP;_6?7yZF(9gme>d;kQY3iRM7uLG4ONvb>Vs)jP5 zMe#9xd0&yH$EPm#!xr>43hsB$J9CK%{E&(0v{3xHn(sywjrXX_OJN0eSKt#PXk3NSbYDy4(bnQ72Sv9&e@E)?q#Zjhwbi+PNTQ;)|$b03D-ObYgw#P^%&ZXq=ZfBKwVh@hqSPba3+}KnIQq zART*pOV$8PJ;L{8iA4sjz?FitoS~&0#e&!)=+i;+1Wm`#4I{K6@Vs;&_leBu2;QVs zT0q-c^LQx>bgqIp$aC8b?X$XAF0Yt@bGUp}MO)NkjBw6HiYympLck2Ze4AY|Ps>crH&6W5d?kwD$dN~Fh z4b$I~Q1g9KM&THc?lYL)FtkCCV&XHE{*IQo%)NeG8FLvuC=& z+w+2iIPtu@s(490Ucuj;DOsOv|GXoxMB=6m@+xP>-{v$$j8GkrgYkL&C}#LAK*t1t z2Ea*SYM52;`AjvbfpG_mq*!lH6Cl^~FZmatFpGm6wNLMuEKhjY>%V71N@~uh7gCPT zq3Pz%>$dNH_uDV+HY1H)cIQA)$f*d#M#f#6)q)uQf6PoJPJoazHJh>SHq7MaoP}7S zF}@bR#N~-ET;3sOm_g11Hvk*N12KgHeP>G=aCs|vjEZVlx#tM^IPm_f@H;Am-)zH+ zIKaQ^(-5r{kWSM?2u+j4#HJgd&~#^=n2moqbe!_xMKgp&?6xM&tC41*EcqXjh6@M? zxYQW@9N@oSpe{+E<&p$u(B&P$i}DDLC$pGXXg7@Ep_)%cs7PTHE&7RzDai)<_ePE2F9*FyPyVEAUT6WF2x27ELbY7*R7wV9D%t6@)D zJ$hKHo?tjlu19GJnhFap%MSK&LZTYD<4SP66|m~1 zHNI>^g{oPq2()3Rrrx1GZG0g5XtI0tivwmIj=R?w9(3+Fv3uQ%gIKiIRh673t@?Lo zcQ3{l^1c0|x_gLJArq9&nZQ?D+YQnef%~3Xk$7z@&lm(q?+@DGpQTp+kd`3TWY%ze zz2>Yre)sfkZ_0O)BRwF&B6~PjWrQB&RlLQtQ@womG@~Ac6kIVG5gzvTqy{#YOkev# zERa+_c8kq!uM$)qUGe|EFVX(dUH=KchIhwG)*L#siPEZaXCvcg)&z8|3i%6cj9RO1tHG7l% z4$i7?CjN;8FKdAVJ8#j|n|wv)s2wJa^KRTN zfTtx}8l)M{kTIEG2wA2Ldz{5v|Kj%SA$Z4ul2yqEc61ym(Oh}(a8n#eN!icZeK$Z# zepP$Is}BeLE3zc}`#VIpfI`Tnl_LkV_KyTO>2U2_2A_I7#Uw3mERJeD>oZ z<@7ms?*i4$WE-tWV$UV-dDHFiXwRL*ZArTGIo?QwL~Jrg@>G}HEp$p)MW^Wt(!Cok z>`{mFcI??GxVt&juxA=ZCt&tCl4o~{_{``jqv2dq1emCXO7-FLnDQK=7lL(;k&Mg31c z!7fv@Ld*>(%47jzBzmD_6Jnl6vB|yx;PH^CWbVqwxBtTntCFiVuKovY@obO`5`|s=fkTYi$z1iM4E-RbEQjZB z`+&H=XTf_UUKDyXZ-?QDn7*4}TQpky*=6DApeD?(K5@nLM4`*&4wuGzt9bkM57~6& z9>8U)S|jZT{)nTRCq@5h{Mp@`v%(p?$Q8Qy;tt{_V>R=oY7uyY*4LcTwQshYrpZkm zG@If|ert7!Lw>1~>)P68q1) zNJtp}v&rJk#c+~jv=Hs<2t-bw2wX^3)&0&6{4ZD(xK(?R0+@# zTP|x@VNJOzLU+NzSqrKzt8}<3u0C8p)DySW0FTv zX{n+M%hiCrx1I3cbk)Mgf6Iewk&hnwZ+~#T>`~Eu3D`#1G!ja5%ViEaI4vUH(#frpc?A zy@@gDc$Rjk+O(C*%ZZ|$wr5i8ef+ofZJ%HZQ2%a`&I@yTOC%xc);f{S+I=1`kt*-j zHNHBz>bY%D56nH{+2YwOEX3y$b<@b@=uN?i$dR9|NV6+`7@7?Dkq=pf-BHcB;hT&Y z&}z}vemb2tbO_O5Uxec8>m779Z+1#QJSz1~ zM<&mn7y1dJc)$aZ`?;dGo$5Bnx^_^Sh!a+D5`ed=HRQRsLtpQ~>Su>RM{c{>jl$lp zNc0|8dFy+3Gq?9E|5n2)lYeMFyt(7Z5sbwD$E(fnCstd+gxGXskbO=Iide)90z%ub zIT~8od7|y~5#TJ$?8rmo0$)wG-OFG&dDJ2Yo9WI zwt`qao?UsIXy;;N$0RMnUpr&b(69l&vGTta|NJKp596BS5|7i*A_;G#14Enue$M#g z_Nbzb7W@(n;=)I(skc4vEPri>&fT-S4OZiOfI2VVDM7?1xfxFl1^@0sKeyYd*- zF4o8zy%9n%zxyRpJ-Uwu2er#C#AFNf4*U*YsnXMqcc@zZ{zyOnaCfE53vH?5XrOYn zr07gdG`an~{5My$kpG-!5fByJzw#U)f5SGr1HU@5k$xi;YqPyMT>mB(y0B6sch@*9 z%kypj3|vwNwq27qpr4*hjNs1_-pKMg-p|+|-{ZpS_?^7kV>Vp(6g@+>HpYsrpd>Ce zW?u@%n3h5B*AiR-Rs2nGNBMpB!IU zy>`A5!_X@eP`4@_?MMezJ~#bZQI40AdvsVe}$m`f6xCjkPt`| zBp9L$fk2?3jsG6}`)U9=0LMZufEb~WZIJEYw&?#m17aWUk%r`U;QFZAR0F46B4Z@FCcHh z|6=gX1Oh3OgU?P&xW7Ugz-I-{nk82k0`64+-xX%$i}SZ@`}JMnDk+}7AwVEsK}WxO zeslkgq(D~sH{jplzeTX*DsrZX@SD4o)|V8%d4bSu&}xH}`R0C$`kSlt4FG|B^8!OC zJQXH;>Hmv+=Igt{T?+LDmJK=zFVJLzw&Xv!|4w@;lmg)kssaR>Z<+n(W-s~vleW?~ zz&~CfMm1Z1XrSugDU&1Ru(7y=;z9{mm$cn;E1FfPQ*`QUV zuLuVFhVTU?1N8cm{+Bqtzk&5YB5nnNOYkKJ6nZph<-l@Ju!QFzSco^o2NDSJg(!bT z>iNnq1^WM7ja*8Q1pb3|B^cGRa}W&3mS9C)1oHqmfjTIC2=*WS6mW%w{kOOz@b%vod|fh7(t3n5WFur3WDodn z3cBFM2TQIAcv`19Xu-(9JCHDtec&p&@TF!?2MnpCNJEh}*gpMRz?Ys^!}tGudntNQ z{uS=GOex%NG*dHz>;+rMK(OYHQt|Qd~iuf}`Ie z|C>Y#wEr~O|Av4HOodTY<0Zh~!4$rKLlxv)N>1Smn*aPof%SJj{vAXSOcCF|{S?pN z-oLpZ3h6&s@O8=j!zv5Nf66K~1*?vIrRqit(t`%jamL_{4{lt5Abzf)N%@YMef>{ADe^*_Wuv;UlZtNzWtV_?;Y0Gl>n$iEq> z1t#}jGV%)A=I2-tNn!q$XGI2=GO6G&`0!sb^8ZC9X8y&}ztdZaU-;pFgBtn&s601< zEc{>R_kXc>AAnU;YXHYD0^{QkH+=m|C|*X@+Z?7$;Yb#53|{-cRX@$|>DI&cP@0pF}9Sa8fso z|K>7$4*e52J1d>m&a&xYsozw-i7;i2}JX3eg(KxLe*YfYof1xF@A!BXK zj9f{_ojH{26z4T@q@%gpW^GQm)cTJ^^2%n7GB(~kM|b{~i>&G-;d3+Ie)j zYS-mjxCQM0x?e5Vqx?)I@->5QJ^r2Pn9k)w41ID%J%hgz$8fu{_PE%+cPCz7yOz+% zr~{*}?=VF`Jab7Ph+%wpb&6%aCe|;?p8%yY%gLGtW?!&AFm+#z$ucX%)8qHtzT%m=;YtwoZyu>}hJxlU^npmt{Yj13b zEK#g%#cd_q)}3=x)2T;%DVrm&qhr*Bn90!{CdbXqRWQn^StN`TNv+Zh4T!+iM`J0g zxjV2G;*4E-mN8~F8QQX*V-Ql@DF@P>PVjA}YmDxsAj9O_E=Cn1C8aMVrK{tOBNw7Ph55Gcy%5#Zxtd-} zwELcyygo3d&Oy}C_*7bHW=un4mF*eR#6!k3q*hA5jM?ucV|I`+Ey9s8jomV)0i~s( zqY>&$7F;!*?Pu=0v20a28pS!ru+`@oLuayOrx|5r0_8&X<#C*j)TIo}pqo=tSQ&Wf z>O}hENm=G8^N~_B%b4pFhKzR(na_MC8YN7|kul~OKhntWC-q2Su2BXP1Hkntzw)1y zY_ojIck;KSFXd6@I+b+Xrrjf@Jw*qmiNugEyE(2D5Fu|Jk9u{L5Z*@#=yb|c2HdFQb~qS+)(*+|v~oJ&!& zHk^DXRnl~pHHNX}99TA}r!|y9lDKhYEKkM6eVo)UEWYx1hnFI9|K>|kQ_T{Rx<$l1 z6|ss)BhE-0a)f9uo4S&x3>?EAmRLmO@u@ z{R50c{&=HrqLid;^^J4;_40S6zEl{}7)P#4CUN~RnbVZM#@XR4rk%ryfn0OWCB)H! z;c|K~!8oazz|}^yaauqsl2Sy{l=}1i5Jyk1Y0YJ+B%Bsw93z`BrnzMNTV^oB<-Am` zcx1lqSqIs(Wd3qaX`Vrv{c$YyTw~h0@^9s&OVN!~rnAi6)@T6V%lUPjk+%8!ZA{{l zT%9zvF2)kc8LW&i=k3Y!Xp(b|a;+|T<(5l@l9oU7D!netZ!Tl2mu@r#(wKi)DzWxl^)qY`N(xohTz$|=LgJgM#_G%F>0qERBGj83OtPPC;oF(1k| z|9UM&Nw2nTrKoaMnt`?_CuTWgDzT(Jk%po57%FAb%;y38J%_&~$08`3b-5U*M^4Ih zyippjO1cHitte?pneetvXOM?-lwj#|$=b%!FQ?#fGNfG66#bR#UgW2gPstA>_bViw zK9I6Jh3Ta}ku;1vEt@nAU*%y4>l(w7Pm-y#H|8Y9NTF)d6wH`~xBRe5q->aZ> zCP=+B(KxD*leue<%QYz_5_yvU7*-`|uK1gS+0ai)f*I$u$~P(HkT!_UR7=}Ss(T$N z$Ju$t_LiJAOC{4^(ZGzLmb6bR>mo5v^O|@r%b$2uVLCIXlI=}C&ktnHZF_YfbztJ! zTie|2h+fe15q&O4vsjs*ZO;f~esXM!wUs}&IeIK3fut*WIn!Z9{Nz|GN9^&klxE#- zJJ$OyxpHKeQY-b4RZF{_e^d&tgiWAMGvnKF)WcEK#=VT?GHMswxs1Qkns{CrNu<7! z`+22p4gIC$zEnx;a$~uYm09yFRqAJJUAmAvt|Pj+<&xFs-KlTPUj^jcL5@Wcti5$^ z=PK*A^9g@-Y(MrkIXcKzT4dy9Bl)*R((U3e71=AzD}eDvYElnM-7>>COOZISYx!)) z^}tG`)U<)`Rc7>?Ifig1Gl^xD>j2mC+RB3O^APu=lZVo7+splxtHc^x>O!+&fq5pG zYF`PSWxc$X1ou zzFc)m$v3ayWDbdEvdQW)+Y!^(Ii-1KW1i_7*E;4tW!pD=Z%gwSCd(w}?#9_^5&31N z4tt;MEfLh+X5ALS8Ju-(M7gmor|-FVJhI!$T;MgVY-ic?q``ocU}M`-yJM}cC zIX78CxyEuWn=Qxumt~1!SU)&Kk=hLQ4@u3av1=vGF@LFbBiChLTkPB`q(1dg12zmU zb+c}j^G(_3q&!+{Zw~3sKGU8(Gnz4Eo0-Q3SI!i+=k-8RkTWJ3S5k6~X>Ay6jqiKv zq*vIDsKX*Y^B*ON#JEzuFB@i65Hw@-*vv9b7I?4``)%mBds3JIf6`X2mW$4fE3Hyk5u-nboVQ! z2=>xs*G#q=$UIkwHI9qkW2y7me$w*Fbxv(=Lt72+?;IfUcrV*8)N|tG*WOZh&j_MM zl50_;9<^O-1X2dg>n1-(zWPaP`M}ck98vHyCtLaVb-v%%IGb7I=lT42Yu{5OCzJo;VaA88<23V< z`6ZjS4`+ks^~^wHkCJnKxuQw@4a4nP!gfXNZ?EV^T5d7ME9CcXmLbS}%ggzTE&dru zNwm)H0zbmb6h;KQX7J@cu}=3>(rxEEzUyWmS7^3;^?l~xW!u=!Ed7=10c>CS#l=;U zlSL!U-|ozqmvv1qX9bB@m%gH85>J!pfaIVYZ{>Fdb8f~|$*yk9`AAe)(l@T!&HB8U zr+vnXXC%f)Tbe8 z-l+MkR&!=c8fiaopEgNtXZ!Wf-;(&PiAs513TvoYMv^Rn?d&p;Ju`Vc-L>6pSJ=Kw zuvJ!lwxzHwpTBY^ty5$_oyoSBsL^z`fLru7*_B^6W8aZGU(9_-&PL_DRANNt?*)lh zYepSX#9n^Q^8ooZSt7Gmtk^hbsO)*%2(BLNEhc&~ZQ}hlwiZCyjCN$nV%d^9*kLgS!<<9-LZ`s~WWlyrz%I;~K*CEMUqeZHYtzNgz@omfCJB`53@O_ut0FMkI|4Q80cz%*w>qFZS*x#A5mwZZA_7h8m zdFI@VIQIZ!i%ZOYf_t>fJO)>=mn-*D5?~t1+R(XQ|GBr%NLISD8L{MKzi}t7g^zM- zD`)=dSy>LLx!tZdQY9K;o~`;h-?A;MuQMI%XlAiFt?hFk$7cd-`j09 zpzRFZ_x_eNTIhB@D|J9nDS1BMajmoMNa}kJ_MDa+=goGfq?%pY5gAV}vqg4&r`(?N z5c7^QIb(2Z`x)eMEb$k4^SV^-U7I6$CT!;~{*H->k#X6wbDU>e=5KPnIBQBt8$(&H z1(FH7+&srMkFQpA$LgDF zu35#7ELU%~Sa+_Ld_uDY`ROS02h+*;uQ2tWjmNl++IH znoo{g=5f#8)t@VmZ22BY*{~uR)|I4NN%V5>gxr-Z?IW0L2=hxG5i-viQnC&)tGAoc8*lZFHF`PRnIkWh-bm+SIFpJrQm$d89BHK7ie4k-NF(Kr^cpEg z8Yy?7*GM_iNVyxmM#{0Sl#OX)jg*U9NyQo|%Z$u#jg%YHYor`&q%89_QjRrJZbz?? zvMuW(Bbl@DF<0N7vGVO&rZw}*7*x8wvw4wM#_De(#)%PnYORvE@x5+X74!$uu)i!_3S&a|P{LC*MlenVAzQy|=r1jcFw( z&2QJpw^QkLW}Wm(#yYc3ddJf1%sT1aVNDxpq`cNzqey4UuByTdAD8^F78Yv&NQnsyctg*~}8P!;-*m#*%wvm~Xk+SS%8;l(%Y38h1vxbr7 zV~kAK+3PSzmTx8N%-o2S-g{lWvC?~^tJg?Ma?+V~^6d3QeNxID`(2CtTU5x zWu5fOe&i|Z;^X7_Rz7-%8e*s~;)7_q%#yrB@1}`Ry9%z0TEZq%1jUew!fQ z&Z5_ub<(@h`Zm%?d95oqjFj(n^%^PP=<0Q*?Al=^DcMHOtdm|T&&GUXjg&WA)5aPp z%QiAcHd2;tWcE5!wt9_ami@?6)*1Je8(DYWW7f%0MzYRWUuqG0A9VG`O7C5+-Zj#D zv#U2=dRMx7nUjNLTv;c*8(h6c$}%Hk71+u6R<@DZYosjO$m}&zmThGAx>7cJISw%G zHoi6YK_g|^M&`Fh$}%G(Hze11oYxvT-bh&vi{`gR z%2&C1jg)0Z=C?-5_31TIW-k2iaP=A~=XUiPDHnG28Y!1{^%^NhxO$D0WkzPnNt!v# zh8gws^6eVqX!Q->I*GO5mk=bjcELmstvgXF>OBTqvnNhr@0DH>VHOA5EL%wxpog9F^aAl73=m+5_M#jhq&Xlc@jg)0SGN(0Cmi@@=HBy$WGkR@V z$F5Gw-pb?}ha6%KGHo|=hc$a$rOxbiWu5fO$IL6^I4I|4#(dW#$hT6w_n28Hz34sGJis^GwaNxTv;c*vL6}K zCOA{JrZrNQLTDysq%4_Z^s;75Yks8ExoSdVMz(L)7)RLMOlz#*8sliS%UZ!T#?eZS z`(|DlM=LouGxN%Mw6c1Qqm`UO7>f~aq%0f7NIBj}`Jk0@ypi%jE9H12WjQx9^U6qB zR>4flNLe<@C$dozjFgYk>&!Yi;L0{~mOAN`{m7Yh(kq4ENGidZvXzvPvSgi+vMqBc zbWAI&;5qB$+nv_8R1EaWao@}<<7g%4W@cU)M=RO)jm2Pf8CedCX0K}-nd@uJcMsnh z^QDeqWZ6b$F*8z@b2BrqjFe@*=Cnr2G9zP+=wsT2RE1&aR*yfTA!`}(=ilS^X)cHyL+x37-DUrss&gq>~7G;XWvEBa;dP-vk zY4DFc#Y3JATLD+$Umx?V#`o1x12s_#GJb8kbx;@ez+0aP@;M0hIS33o2ogF79Xj}# z-@)xSax&o{r05_7z?*mr2k|!E!MljZAsogL9K|ubhxhRTTCfLxME7HSf=}@o zWSzdCdmLZlE1baBIEioYExyC|_yIrSC!E4*oWWU0TIcAV$1nI5zd?roPWJ--z(xFt zOQ@2~{Qe*Q{uc?5Iz*nFBhzK4n*%vZybnn95xCi%QC*-^P={|r5u?GLe zLwFdE;88q=wOEJ8@dTd4Q&^9uu>sFuBZ{zJZKAswTd)<|@Eo4UcI?0lco8o_mgQx- zuV5Em#cSA&*RcnC@dox`KMvqcyoG~!8}Hy<#N!YS;|Px87~aGC_y8Z`BYccc@F_mS z=lBA$OkdLd3McS2PU1&=i|_C~et?Yo6WvodjWallpK%W7A>*X?rzqQ|7-U&W&@G8l zD2*~GiwQ{2=JvyKxI-xVVpewqeJ9?ledLatE(Fc9e5B)I!12G7L zF$6;~48t)3fo`i<#+`^sn2afyifNdR8JOiXo9-OUMI7c~J{Djh7GW`#U@4YiIaXjB z?AzoebS(m%$-i>>3FIM9|+>ZzFAlBf&cnA;U5j={=uomm^ zI5yx(Jcadm8ZzuXY{awJgw5E3t&rt^4$osdcHjm4gqN@rFXI*L!mD@i2vafPU8&D;%A)0dHjN3@f-4GcQ}5hdjWsoBL2iB{Dr?E&(HgpZi4gg zZ1i7&?8t$f$c@gW9Nrx~PZxXn=-@L?bjt6EsCLG)D`xL@TsL8?;3`v_}VY zL??7c7j#88bVm=!vi71Ih2H3czUYVk7=VEoguxhsp%{kY7=e)(h0z#;v53Yvj7JP6 zAQlrb36n7eQ!x$GF#|I(3$rl?b0Nz(kM4Xdz(Op-Vl2T@EW>iFz)D<;>u^18z>Qdi zn{YF3!L7Irw?pRfAG&wqF5HcKa4%NlKHQH7@F3RUzjz1_L#BU}?qgUBdeh{yi+R0@ z*RUI}V-NP?4eY~y9KbuUFVwpXi^m}x#t|IFF}#QO@c}->NB9_@;8T2t&+!G0<4b&n z6Zje@@eRJkclaJZ;73S)ouYdhXK)rj;~dW87yOFf@IU;H3-|*U@h2|fFZ_*v@GlbJ z$iewPu0VF=Ku%nVT*!?)$cuc)j{+!&LMV(PD2iezjuI$|QjlfWPsYvxxePQuay&3U zTpETLbKMB#gZh9l66@j$q;==Ncce3OqS5OfY}_f|9JXvPVNx$v3F$%EnI?V!)3OI zm4{XjpzVx2-N$TcG?&H6<|ypw*l%F_c`=h`4ww)ZH+jayx#nDlvZ&cybC+2<7sgzm zgT@eZs7#RbV=c5b)J#aWhkPTsAX6HD8|j+kF)X1&p;nHzM4ikV9j6)#96_^0d1Q_( zwluX$__wkng1#7|ZwT?aDB^fgOw*C^Ch<)-;#G1J(Ez%=iK&gJJC%Q%GfidEZ^H{n z#P14I8b83N|BBDKA5*$M^M#Udls( zTJTq6{%u5Ggzdk|#`>8NwM{Lyj#Xesd*e1z#Pi*Qd+g@%ejUd)54Ig8T^_J#-(&SMZ=C?AILYCWm z+DUWK`w~fmWwSAK8@7(TNJmPHY%eJ{ku0rjwHC(TEhs@vjc=PUL~bkeyd>^v`d*GG z)=f%4jIj*S0WV7@t8`auS3go71`|a5E z_;ta2hl2b5Xx{cOIp-;*jGn({-4Ml5D0waiUiVBlYNSBxI%%vdHw>9IWYQWu@OjRq zPFTcNl3U^BX0W+zK`9k-<6z?LNS^BQq_vQ&dkgk5Y1C~#rXz;qjnsJ4sr#(G!Mwd! z8kAdemHe{Lw=&CO-$OjlE$QQ(yEFeb)aX)|);0G07?!Ca>(PK(xDm_;Wp`kh9C@2D zT#lwqjBlDVUNioaV{s&ZcO*M3%;y-F6n04?*Fzj*1+83TTqG;A2rj4zpZl;xm80-Y+~(TAJ2x30*WO~UL4EIy?y34advYJwyuy*?HRoqtms!_qzSbmp z`Onxx{B6aIz4R$vx=`0%N=EYNg47FUEMWoXA`%^Nk82pw3jQ%-6nXi#31P0zjsem0 zC&WaITNKegX6CpF5nZN5&z%$z6+J$p`;52=(;^zwuUkK2+`P%tVj>zhX%Z1PdHRI$ zGw02Si)bCuAhLe5ru7>&Z{EPM@umXfN)7DLZfOZ3*@evLNJ{g@`}Cpan)eh_^-}H-AG(UAIXn zxfb4Oben`Xe?v)Kw@C)N{%>5re&fsL`d>?4DEn)8r_pT^-uw+Eb=@YRO6s9*lMJ)}M>cI3S-*J}+5ZFn z)w4nUhLKGgINoR*wY=nS?JnzIJ+o4&4`p3Knoy53-@-YSZj*54ZfI#=F54s@+ zLB_95w+`x}9_ph38X^*n&=^h76wS~aEzlCJ&>E6fTe|Jg9v#pTogm+Jq1zSR&>cO{ z6TJ|H-spqA=!gCofPoll^HtSbi*8DF6yB^8lWK}u^Nrh1gp>t&Cvoa(F(2625r#}?a=`p(FvW=1zph% z-O&R*(F;-NjXvm$e&~+@7>Gd_j3F3`VHl1P7>Q9BjWHODXpF;n#9#tqF%gq68B-wn zGmY+a%)m^{!fedJT*P4>=3@aCVi6W&36^3RmSY80;#ypX>v02agv{$Ex;Nt%+=|<9 zJMMsde<$6$a5wJ3z1Ru)?tZ!t;6bdxfAJ6=#v^zXk6|s=;c+~HC-D^4<7sTbGuVhC zSLpNK&X5mh@iWfhJS4w=rTZKHhu?7lf8ZkigpBhS-M{gV^gD;ifj=9rKz8InPF#sx z$c;S6i+sqB0w{<=D2#F_ieixYl%QJ@rBE7WP!Xpau)h)(E?F6fGG=#C!f ziC&08Z}dT5^h19Pz(5SbU<|=f48w4YfaK38x}z}$V-byU7>^jNL@Xv^5+-8`reYeV zV+Lk9&89mCa}kGmn2!Zmh(%b8C0L4OSdJCghHG&hu7@mNdVZc{8J@y=JdF*I<=II0 zS!}{)Y{6E@@;`^?u^l_`0)E0v*ol|%3U=XDyoTL)9ec1BZ(twx;{e{oTR4cf@ebZa zJPzS7j^HSc;W%VDKcM>|KElWN1Tx(I`I6yZ;RL?MNqmEE;b|M3V)$vC!CCx_b2yJ* z@GE{pzU-doXP^JSjGF*?hK>C@t3Mat<+gpFpZ)?Uh(aigA}9)3?&5Sypd?D6G_3Tr zt2tohfcx{`)=@?t#}jxGPhmZt#s)ltjd&KDuo+vh72EI}p2v3VzzcX0FJUKM#+wNC z`EPGA%|X14(mB}w>FV>}*#F6kV4nY0hVjdy9Ll2tu0lmbpb{#h3aUctk!p0SqXufC z7Op{U)InX;Lwz(rLqwtx8lwrCq8XZ_1zMsNTB8lxq8-|!13ID;I-?7^q8qxS2YR9x zq9DuIhi+f=Lw^jwKn%iQ48c$g!*GniNQ}a0jKNq$V;sgK1``kqna3o$lQ9KTF%8o( z12ZuTvoQyA5r=u051BqAeLTf~ye(ff4o%fj16eu#<8A$Y4UZ#Fe8qp}@%?-(z(Op- zVl2T@EW>iFz)D<;>u^18z>Qdin{YF3!L7Irx8n}{2Y2Ew+>Lv1FIM9|+>ZzFAlBd+ zc#8jcT2Cwf_=9P|J=YipT>VQ{-g09_J3j^d$1R8U?2A50N%t~IEc6L4&FsP4&gA4;3$saJ-m+( z@F70J$M^)F;xl}XFCfR|FX?`T6Zje@@gu&)claJZK*s%v?kSvxxA>1$zol2VDD_G) z$nut;TN0&E8f9R`f6{CDWWE_C{u4+Zq-FfazC5xGSFz1*!p*n^w?c;BPWKM{2Y2Ew z+>Lv1FIM9|+>ZzFAlBf&cnA;U5j={=uomm^I3(8dB<%5@_ZXHL;y)7W@f830l;NM@ zb9{mC;4l93J>&dR6<4Dgs-p&Kq86?}ZPY{x}qDpqX&9ImNklQZ}dT5^h19Pz(5Sb zU<|=f48w4Yz(|b3XpF&FL}MJrBL))?i;0+o$(Vwvn1<BdrD{jN>xC1heJL%qqyKxWh#cJG#`|$uC z#2Wk;58+`f;M(+2x{qNkNGeS}yO`Ijcn!PpI`&{M-oQTW#{s+p`$E0Tuy`E8VI09x z9K(BfA0OaDe1wnj2|mSV_#9v0IKISJIDxNm65rrke24Gx1Ac_$^(nfiaRz7cGtS{W ze!;K!4gbUMxPU)!5r5(m{=(n*2mc}g4z@)$T!HM!0e$|zeamOweknWtKAcuMoQDM| z4vw6-61k8Yd5{$47z;|Z*X75{mf zzc)bJ|8V|CKAgrGoQ3Q==jfitFZdO|L5BZM_X7UFMf{0NsKSme+g{^88voJwPu7b6 z_-g+nb;2d~eS7<#1cu3hKO3$LL@z|4H~OG2`k_AtU?2uzFos|#hG95HAkg)X zW!#CFgvpqKshEc8n1NYNv+2&kT*P4>=3@aCVi6W&36^3RmSY9B!PE9w#qgVOGc^7a zSow>E3}5B)s}8Mv_}VYL?_61UFdd2H*`l2^h7U2p*Q-VFZ!WB24EltVK9b3 z(i%p0I7VP3MqxDMyHGxHOzSKDGmr1*V*wUo5w!h}nbVhh`yVND8voJwkH&wpR{STF z<49^w6KMQL=2?N5!d0k<2vkC4R6$i-jcTZl8mNg{xCXUR2X#>o_0a$g5s60dc3jo? zkH&vqrF^`G-FO{)uorJ&ANJz_-o#rth_~?$-bFkP;V_QiD30McH2$OUpMk`yGD7>G z)U4aRrKRy7jsIx;$J^eKF@}3P7jj=Z=g)u+sxEE+Lmo(;rB(cAEc1)TIE;t3|Izk8 z-%$>}#}D`sKSA67aQ#O`RU36s7xhpd4bTvgSdGSLf>mgS=4gSIXoc2jgSKdg_UM3) z=!DMbg0AR>?&yJ@=!GcsMj!M=KlH}{48$M|#t;m}Fbu~CjKnC6#u$u6G{#{(VlV-* zn21T3j46n1Pv?h1r;cxroC&%*O&O#3C%l5-i0sX#6K@#ee*@|8YOwhvRRJ z|7iOkz5h$^|0>Q!Le@t?F>Vr~DU z?SCF7mhlK4#gp(<_N@EA+`rq%xX)q}He(C6VjG^r^Vp6ZcmXfsCG5m5SZQhdA8r4m z@gI%<>?Q{GI`&{M-oQR&)#v}{{a^b0AHDx8yw88u_CMPGN8A7C^MCaDKg54?5dTF+ zia%J_fR|G@ko@Pg*Fp1DZT~|abb{oWw*N`}z2qVC)*k;^%dmBL98X|9toV;U|3};Z z)Sz;ziCWP1Kid9h6XjqtwqPr^;W<2y?bv}A@FHG<)a5VJeFeMlDqcfYi~sm*|D*9A zjsIx;N8>;G{O8N#`Om3;_MSXNZU3X~f3*Ei^8F$s4GARvlUB>C?SHiWk3Ih5sq9(t zANTLH{ZHyV|5@q-eg2Q$|E2eTY5Sk_dj7Nh`9EoOj-t>1(dYl@^MCk(jeD~GAEw z@gI%_5QE)EpguGuJ?Z>Bz(d4OV9X^ zY#ojNX#7XxKUpjOG(|Hs$4F$9_|GVoWi-ZM zETSNbVm>LL?G8wVXkTeN`Ag` zSr^h>gvD5brC5gLSb>$e7T4i=+<+Ug3OC_q+=5$i8*axPSc}w(|Ewdew8+<8%;#0S zhTV7_d$1R8U?2A50N#N;qu*s%JPzS7j^HSc;XS;M51`Ng(dYlz%T9Xrr^S91=(>4| z|9G4Ba*6+VTYq1}_5JVq{Aby(&k;*Hk6-XBeuE7Eo$dwvfs6PPmr#X3uY9lZAC3QL z{3mP0e|#M;t8vbU(708Yp$cZbF3%QX8d65tKQ2+%|2!&A&fyRG&aenM? zS;O^xMv4CfvVLh9|M9du8voJwkH&vI$A6-z!+N6+`l28DV*o;Z{>6n3;n1$JxgSm*q0JPpa0)cR=r$Km*! zJpD)V6$y|RerLlK$c`Myi7Sx{xseBXkq`M%00mJ9+WsfCN@sY|31t7VxBtmWvC#HE zy#JYe=!Wj-fu87vDD*}j^hH1P#{dk(APmM3Nd6C_I~*f05~DC0^4(av+WtqM|9p~i z@D092IPd?GT1MkP8voJwPu7b6_-g+n#~E+&AE^&g;}dB7N9JXJ{!b<1N80`;ecS&? z8PWDX{Qgf_Jb*Xx77pTVyn}ZUk3%?&BRGmZ#Sju8lCTS*zv_CNgo zPkwE{d)SC)u?d^81zWKV&*6D&#}2%JpYRfP;$^&oUC`(M@B^1R6}*>``>B*O+HM4`Tnm|sW8KwNI2U6 zJVTjqU+lDO|08u%NMArCsD6C}^N(ADSvq;84U_CMPG zr#zL7w*TSzU*y9Wj72oYVLW0m0kN2fNznE`-2Xv76rruiCc2xk1zWKV&*6D&#}2%J z7x5CLE`OQsE7*ls@ftGf{aHGe7sSmXMkGB8O_CMPGN9uy~ivNUq4v~`SwEd5^|Izk8{IIF*e;jSdgSKdg_UM3) z=!DMbg0AR>?r?wqd${61+WsdcwY&dmHU6XVAOEE!YmE^|{D+@Iwfzry&=K1HCw%2! z+y7|$A8r4``~RqLwf&F7@fi8A7VGdhp1_lM3hVJSHsBd(`yb!We-8EeKj{_!(e^*u z{^v2;^R2}?JPvu*^OJZA>!Htob~t_{AO43^IE^zni=S~0=kW`E#c#+*tm1dN7w`uz z;!j+{U-%mtG5!<2v(D5{Ib89d)Lc?+|C2m7HU6XVpX8+?YYzz|{*zWYpzVLO{g1Z) z(e^)j|Ch#p9wnv|O8h63V^wCl|I5?*h4cA8p5_Z1V~A`*=t*E~(=HbpZuM+>w>E3`(a?SIBG zZA$AQZ_{Un_CJ!hcaR5bky`hEts||+u^#Su^ECbP{x5m%^hP|3P1uYr*otj<4$osd zcHjlPh?lSvFXK%F8~=HWX%6CTl+MBXU+Bi;5Dw!Aj^Y^J!~6IEAL1i?j8E_>KEvnu z0>|+szQPH7jg$BW-{L!bk006bB~c2p>}BYdMLCp5 z1zd%Sh(IM&Mit2TSJSPA>ZpO5sD*1#8+A|@^-v!T&=8SmgvMxsrf7!dXn~e!1)0a? z@(E;JIThFTKjcA2bb{oWKL026_mK2%|MM&b-Pc;}W83eCzWY^U%qX8Ns5{=LpP0$q0&>SO?QQ|+N zSeDTkgRzLlILNwMAASG3w*UEoGI6=I|EbKiXlllPto=y4shX4N{-+mdMWHwPpfCENKL%hR24OIUU?^n$ zhSME^kr;*17=y8h#yF&;{ZCq6=V|;$<3Aez@pTl>INt?QFYuG0w*MgyIzrq3gs<#s z`yYM&kGB8O_CMPGCn4cW4!U3A1ir>e{0MFT!~Gw`AgZA{!$(Vwvn1<vtjsIx;$8)`t z(S`=HfAh1Ww*S%gKVdJr+Wtq||7iOkZT}O__CKB~F}?qb=Rb0g{|kTPAN(skWmbs8 z^!d-+|G_o;Kn%iQ48c$g!*Gm%zdYCbzx4fIQbsiX6JkZ=oJ`|C8vl8T_|{Im41NA{ z=6U{e%JzJn+C2ySoo~308}7fg{g1Z)(e^*u{zu#YX!{>+|D)}H!hODBPhZ>rX!{?1 z{}(@WO1lqYkqMB$v*8M4M-JqKJohIp@Bgyzt10c*_>abaH2#x0-~W};eP5?f%z;4S zKl~J^?SHiWPhz17(_h;DN8A5s`yXxp6VCQO`u?x1_5QCKT%!j1{2zbkIvW2;dHg3# zrv|QMpJaPKh4pwE8z5h9r28y3VKcU1E9Ch_&*6D&#}2%JpYRfP;$^&oT?l9VN0!sm z{a-TN{_%JJmwo(GEc5HH<}H?R-;aRBe& zEgZz#D4m1nf6+|D)}H!rA`E zR^=GI`uv~E=lMSx{|Wy6U;6y#to8ioK+gF!{-g09jsIx;N8>-9&KR@Kut1IlX|=Z6 z{wH*usgpCx z{a>S4meCl4v53YvX!{?B!_)m=+Wv>*KjkCP`@iIv?eC-UAC3QL{72(I8vpTEQ)ce( z134C?)f#I2N8>-C-v5;rWmMxo8vp4;jH)xbpewqeJ9?ledLatE(Fc9e5B)I!12G7L zF$6;~48t)3BQXl2F$QB1jd2){7)(GcCSnpMV+y1$pGJ2&W?&{}VK(MqF5)l`^RWO6 zu?UN?1WU0D%drA0aV@UH^|%2yLgsZ7-J5X>ZpCf59d|&!zmx7=xEuH2UhIT?cR$?+ z@F3RUzjz1_L*qXQ315;AU*QD4#!37LvM$-@Cx)NGX`I1X{ETxr56N%$&+iPofIn~% z<+*meME5WJjeqd3aGxlJe-~vQ#UN>xpj#59P#R@W784+|NzM7%7hBu^X#1b^dj5~z z|CNwXoO?=2pd?D6H0=9mTJ-DlfAsl3`urcg|0^x(nv6V;aGq-gyWSfA(fE(Xf3*Ei z1+G0Cp&}ws36&vrRaLrIqZ+EC25O=fu0d_oL0!~CeKbHrL}E1>qX|}_8JeR7TA~$N zqYc`k9onME62ZRxf{dvriYbb@@>g>F}LLwEE*PxL|*dZQ2eq96KW00v?Z24e^$tzmSBV+2NG z6hGd_j3F3` zVHl1P7>Q9BjWHODXpDol|Ka`*^5H40$J5w=XRr}Pob5+~-Sb~&+E=g(ui`cA#_QOF zy?6urupb)#2{wll614pf`#MDhF~a$VK_!Wj`@23m&5TWdGQ$5VjUibyz5Kv z|1!(S_vFP7_!0ku-v1R`ouuu5wEd5^|Izk8!POdBZ|s!B7*abowEd69f3*FNw*S%g zKN|melsL;{Sc`Rd98W;wKgo}}Kanq|p!a_z&l~#?ZU3X~f3*FNeXmH~ukC-d{g1Z) z(e^*u{wI0en3aZT{72jWWR&v!5bbL;{-g09jsIx;N8>;G{GV_fmo)yP@gI%<_}{ZM z{-g09jsIx;N8>;K>&nbLhQ@z1{*zJ4uf~7${a@v2$Dr{ajsIx;N8>-?I4)`YN8>*l z|M9aba{MVJ4c?^yJX#6LmlwXbiX#7XxKl=QiM~DGx{72(I;W#d7 z{72(I8vpUXXKDOL<3Aez(fE(XfBe^#nRyJ2|7iRtqm*Bb|7iS2<3Aez(fE(P|0`U_ zB#r-Q{72(I{`W48|7iS2<3Aez(fE)5x-v755lH-ppJN@oV!)9dIgk@qA{TNa5Aq@( z@}mF>q7VwB2#TT@ilYQdq7+J_3@V}=%A*3Vf-GAE-Abs8DyWJvsD|pOftsiV8NW8& zI;e|!sE-C{h)6U-V>CfiG($#y|JPWSFB;=89x<4JSWLtuOvV&U#Wcjh*ZaTb@%?-( zKp@*ct;)B?e>DE1@gI%ebEp75$OBB+?UDzcMR#QL@Xv^5+-8`reYeVV+Lk9&89mCa}kGmn2!Zm zh(%b8C0L4OSdJCghHG&huEz~%%!%MCx;Now+=5$?7UvS4-v1?ew2}Egi%r;!E!YZK z{^#&Kwqpme8jsIx;N8>*l|Izr5r`j>=4D)m>v9F!Rf70*$?_-J4X#6K>iF_)Z z;#T{ZufG3X-~X=fe>bl|ZsNdjGj74HxDB`C4#;ukPP%vDZrp==u@my${d6C|gII(A z;vqZ?jsIx;CuxnJHhmiZ(fH4+#7JJlZoG~?*o!x?5BqTdZ{jT+#M^iW?;;+Da2Q8$ z6vuEJQi?VH!|%Vuph}_?N+WId?xb_k_rL4=-}U|P`u_K%wZi4sr|}2XZb_>abaH2!1mdD{L*+y7|$A8r4m?SInaOeF2*sqr6;|D;`M z^F1ex|7iS2<3Aez(fE(Xe|#S)!t<@he>DE1@gH;F()f?Ye>DE1@gI%lipVMmIp61h*r+ zFc5<<7(*aw4Wm08BQO%9Fd8Y@Hol(!Y+u(!%xf{0U@4YC=DmXMN?eQUa6N9ojaY@7 za5HYft+)-h;|}}>cj7KcTKCYs7prj}?#Bao5Nq%lJjH+3GJG8##}il&>-j%V^Y;ck zgN=9=o3I&Muoc_z9G=H^?7$0n5iemUUdAifg;((!cH?#I!Cw4@eaPz1|9Li>!|@O6 z`7aXSpg$XA8)m1Q137UeazTdYp?e(pkRJt55QR_}MNkyQP#h&t5~WZYWl$F7pz$A# z|D+`Tvxzda8C$Rw+wdHuoO=7b%=fQg7hc6{*p1h*2Yc}b_F+E`;7z=RgLoV7;9bPy z5Dw!Aj^Y^J!~6IEAL1i?j8E_>KEvnu0l%Ijv&Me{ zt#38{qwoI;w5<3VPv8HQ^gPeXD}Dc$l@oz=_4&{G{AYdsvp)Yhu-YQ)j^!RRNbj{Q zM+`&T|D>$_&ouHd4!+_)^Z0%~7GOD2tNo9ZB~R^t?q(j^{)gZH$%hZnf?(=LbU(%? z_!OT(^6v|}$MGe;!U=qhllTVT;yZkgAMhi7!YQ1_8JvZrb&l?N{DNQc8)W$JbT8l! zT*RNaget@~wEYk7e6iZT}->M%({r z`yXxpW7eM9{zu#YX!{>+|D)}Hf<2qeT;m6FzRc;q$M!!mZEn8HgS^Ox{3w8eD1^c& zf}$t}Z|#31El=^E2&Soo%BX^>NUQcgX|*MXu};G=0wXaBqak@RmToixY5yblKBRa2 zCnb5N?SIlg{v+E@+y7|%XE}9AW{m$x`So=F*Ym88w_}~ge>DCh(Y50{*%%)Q!>4``@cGqA6?KD-OwF9&=b87 zh2H3czK}fbPj>(YVh{#n2yTO~_)oCQpWgAG+gYDG@E_cXyO7!1|9IOc_OUKm{rNvq z-ZcKB@t@2b{|UCv)cB9af27Q4{72(I8vikCPmTX*`yY+}X#7XxKf#_&X0GwQUF*89 zg|GOJxAs4hZZPeCDspY@DgG0|@JdLJ_CKi^|8dXHVE!JR&POYitkFzaR? zSKI$+`yYM&vp)YhCC`7h*C~PYYy3y!KT=LK{-g09jsKW6rpA9X{-g09jsIx;Cy+D9 z%sY;^ID-2cg&O~HPa}}OJ;i?lnJ!%8q-OlbTl=4(#CE*3|B+`r`&u{q^Pi1g|(q`9Z>{|evppCzaD{x7}%OYi^E z_rC{nZjiKQ_TH!O|I+t=c`qG-f1~gJ^86e#eg9YBWk|-<_kZd0fAsxd`u?xrYK^Qn zb|B|?p~ioL%`I*Jll1w|+WyDkSWEnC9UjLMSPv`y^E7{Nz%$s0XR!&Ju?1VP4S|&L zK+3AN|Izk8+Wtq|{~X|e_$J=MLA;H3@GjzU2#0Y5M{x}A;eC975AhK`#wYj`pW$*l|Izr5#(#pZZ#Dj-@t@#JP4X!; z{-g1qabaH2xEO&5^aH(D;wT(VX~73$#Qlw8j{u=JS6-Ej43V4vqgL z%{`6(=>1>S2ufE+4b(&}T!Y%EgSx1P`e=ZLh{S3%MiZ<;Gc-pFv_vbkMjNz6JG4g! zbcDu#H2$OUpQQD1AblGD(fCgw<;34O8voJwkH0b!$oCrm(fE(Xe>DCRNL`VY$I0 ze>DE1@gIj{BJrq6n2afq{cjrG>6n3;n1$JxgSm*qJj}-eEW{!##u6;WGU)Sv^!Yz2 zt|UO>HS~9l_-t>X#7XxKN|lDuGYwUV+V4M$K`<6`@d2% zM>5*;e^PVZ(&GJJ#`PcDDh@L+6SFWIb1)Y&&OEyFu>i}Fn(-fR@Bfnd-pjmJ<38Mv z2k;=|yT|By%I~!dUkCT+|5)P%`uv~gnErWe#}2%J7x5By;$^&oU3e9*VK-jK9_+B)~y`Hpn*0PB#Z~;!5O#49`RNIPxJs3ZNhgp)iV|D2kytN}wc4 zp)|^%EXtugDxeW6A_A3A88WY`bgzcSe>DE{H059ep20>G;W;*&=x)XqY{fP_hv%^! zJMaQt#7p=FFXI*L!mD@^iCfVb^7jqfsJ{Ks0~jNH8(;y;rA8voJzzqI{N#*F`XsvkA}<0)5y zAExmijsIx;$J}o;{-g09jsIx;N8>-ipGRb-DZIrI+}DAh7d^KB>Bn$i@gMgz0{L6p z|CsOpl5H}Yyp4sge4EJklQ0=mum+hm{_|g!{UNyD|MeLCYq1WG;|a(;VRHZ1dT9F} z-U&oL{Df0DjWak4DMRPzp2siv6~94-|4#P;{=h~2iA$)$j;`&0^!Y!T`Tnm!j%W5d zH8ZvUu`j#yYy8Jkt^_|!<3Aez(fE(K-)Q_t<3Aez(fE(Xe}X@c$V^iNa=sjD{HGAt zl!Z|QMNtgJQ354V3Z+p772zrV6T$FGsEjJ8imM^ZotfJI^kMkPv#aM!+SO)iHu*M6ddppzKf&bu6+=aU#>D^0r zHSWXxcmNL~)OiK6JgGU3w*S%lzdBJFc19O;MK^Ru5A;MYM4>nOpfCENKL%hR24OIU zU?_%RI7VP3MqxC@U@W3B4&xDn35bP0|0ntVU!m;p8voJvze~B%_>abaH2!1Opc?abaH2$OUpHR*yGtV@ETzhk=q3wTCxJiSJ{{-9qN4Dcswo@qWf4r^Q3esDNYjGW} z#|^j_xJ(Y{zu>cHJJ)p zpa1Op`9Hpna~l8A_>UX|HU6XVAC3Q*XM-C5(fE(Xe>DE1@gK83%&PzTIxn`?In?-% zw*N_d{!gg!pRruyN5fP5pNR~&?*FoH$6(t3Slc-@x}nB@Qe)oXPD9)OX!{>+|D*4J zPtWH+d#dB~{x46t68tcY|7iS2<3Hwpqwyb&|7iS2<3Aez3I04HGfiQS8+cmwj2i#( zw5%C*Sg7$IU+ZI!|Af;1XCW~pPxpT+MjTm@W-~X=fe-FI0cpp>W|L*yId42!8_cG(@8-4$~zW-g{|E}+U_f$7rPQwDZ zHrDu0%1eaCe|$gxC!F_x1yaTX*}@wC(fE(Xe>DE1@t;6y%cSFI{72(INlQd%eH#DK z_)lmhC+Sog|Izr5#(y;aleAX2{Q6Ss+SpUhrS<(^vM#l0hmsoaf0wk{l2$vkM+bC7 zCv-*^bVWCW#b#{5R&0a6W1K$!N1y*AM+?3GOYi^E z`@hWdCcXbl@Bh;Kzx4huz5greb!1lS^LK76>&q#0lIK6mG*>b#7jh#H@**GdqX7CL z-0`2xv@HT@|0DS-@Bfl_xm)ocU+ZX(|LFZ+4#y_)ZZozZkh1M7f9>C04)GsZ=YJ&c zkN^iee>UeebauKqkP}xT7bK7K&^?ZP$d3Xjh(aigA}EStD2@^+iBc$yGAN63D31zg zgo=njB~*sYt18{AQ4Q5m12s_#*Pu4)pf2j6J{q7QBC#5c(FCi|49(F3Ezt_C(FSeN z4(-ta9ii=iwEd5^|B+fExR18~(e^*Vl^D-sYx^J1=QVo&m*?{0ZK$^Y(e^*u{zu#Y zc&i^Sm*J^>jqILp;g0`Q=kl}$YN8foT`rgQKU-N}d;G^e@3sApnH$^4Cuu9C?SCAO z-<`vw48w4YfVTf} zI36J%9>rr=i*^&+y7|$A8r5RtB$xFz6<2KIWxt7Qmg$>8)6En`TQSG z@gHC1%ewz-EXxrM`}^NFGECe5B+bER$rHW*%i%anKFEH3j_!HbqPnh8L|D3l!s-+3YKF9R^nP*hwE_z zZp13wgqv{-Zbf>&|6T5f^R$gp|1UBW5&^b7QU)%p^`yXxpqwRlu*AiL(TkG1^*P8OvYS8z8UBfi#5&v;- z|0C;GpXF$PhKNKXG)5CNMKd%<3$#Qlv_@*S|B+{5+uQ$)VVJKx*Y-cYa>w&`?(Kg9 zDc7D;@jg`JKN|nh_>abaH2&kgj`a48#(y;aTvY_!FjsIx;N8>*l{|UY()%cIb ze}XSH$*0ixkH&wJmx|zrX#7XxKN|nh_)qXPN7kAmkn85m9RJbwKMu!iVmfm$7lCZ= zl$7w>na3UY5AMWWxEnIxd+DymeYhVF;6bF;GHLrChvN+Ssn7q>_rK4e(w>P~n2kA@ zi#W`~d@R61EW%_cj@zg^!YzhZuI#-`urb#{*PIM>hpi}`9J#nAASCh zKL00_Gs?^}O(56aToQzI|5vcNP>%VOM+IC3f6M0S{a^O`zk*$cv>e~w{zul=djD4_ z%Q2Nan}#^}djI?X*}DrksjB`Dz-yv{C@6@EirtDJh*&ftAgL%8AV`XID2fVpD}sW8 zAOg}T*bR1fVt2=DqVj*vi+uk3F1yR@%96kJ^LS?NJyUnioVoMm+;jU{-;e$bU?8V+ z26>JDNzZL%p8sdM=bm$$r8$9?#r!`HyPpND3FCj_{O@u8_fyTf$iCW^jJG7cV-uMWjA(b5B6j) z_GTaUr6T)LiOLM43RO9uY8*&)4&q=A;ZP2v1~sWgZQ}T^IQ}b+|4O|?!T#d-uQ>jz zU@a#1+Hw3>?%8(C|D1b!$!lpG{}so7#qnQp{8wK6!4ZR?hspVJ)CZD>o*^S_^BS@!e4r}J|ykMTe0HLQ&1|C;Re zXFvWcjR%VHKLtPkdyM~y{AX1j|5KRnvl#yqL|5MoGzcTp@#Q2}AtY@{m=XjnMc#)TQ znOCU3c2?GF%GY^=H+hTnd3Z-TpLcnW_xXSi`G}ACgira5&-sEc`HHWJ`F~>kPt5<5 zNpH2NPUJt4|D=`>`A_6Ok^d~}6C?kL{3r6C$bTaLS=1k{uK!=r`A_!knp^&pef_F- zxryK6*~kC1aD7!D|1;EUSlP$_WYVS!)0X1+uQ>iIj{l0|zvB3>g7=i|$yQPDC2{;$9RC%^f5q`%1@AdluUlmDTRF!6nEylWQJXr{r5^P;oCX|0 zLmJVTOtx!&$A1;3m38&F-6*R0pEG$*G5#mU|HS-1Sy@NwG@H;f*JIU?A3b`zf|BBmpP2ur;Js($Kau|wywxmui^zX+ z-@l3cXUVpb-;&6GBL9i}C-R^C`iM1QT_(SkBmXH}ONjg@@}D^Wm*aADAf?%i%_&1! zwxAqavK3oXo^9Bl?Wn-^>_F#_sIFp6tcm?8ClPWIrlVnf<9kRSuvU z2U4AbIG95?l*6b&O=?k)`Jbn$zqFRJrp^DnwC%Ah*H5?oXE2jl+(ssCJ-_D=<9}lO zPvk$5|3vR?M!|X z`)BVWJN_&3pEYOxpXK@KiTr2b!tZ=;zvl;jSliEeh{}c27Xa@iNi~J|@pT%wA-;|O6 zEc(vPxeX)#$+<=HzaIHdr7T>S-~7)@ zzxA@K5&2K#KXLq5R#p$4cTalJn?CfVAN?7?Ku+fj25}~5F_^PChjSUiP|hQLZ(N|f zkc+sOOSqKFi2Nrj>v`KD=6_z)r$_!1`OmWWc8~lg@}FhVjw1hw{3r6C$bXhaU$QFS zN8~?o{MSI)*6EzVAkO4026Hy&kV!j9pM%JM;{0DR{wK!&ME(=`Pxk$y$bTaL$=)6c zdpYu--1o&|{7=DJROCOA|3v;1`A@-mjn%JqCco?bGiHqcu?=GU&(hm}3>@cQyQ|JRAupF|tl(vFj9PX|t+ zBc15Xxpbu)edx|<^q?ob=uLX;zRG^|X8@VzKSR_V%6Xj61zgBQT+G$vH~!}u>xXeI z!x_PKT+c{GaRWCpnlaqOSjKTPT73Zy{3GfH+Yk`NYDEn<$T`dJ>KU7KI9`l<`X{UGd|}FzT_*u z<{Q#|#r)54{`Z*w#|L34e|H<;dJp$sydhE-%oGZAJt62P+Gr5mtQD?fxoWV?H{qy*@D`zu@JGhg( zxSM;pm;1P%2Y8U|&pXEd#PMHo{8t?R72|&j-a|+J6ZucUTg{TUi2Ub&_emCSp~!z0 zZ;8yx$bTaLiTo$>pUirT)wfpm-?w?a%A(AFvOi{S`A_!stJ>xK@}CoA3;E?gOB?@_ z-nWkKqZ6Gum!i&phIovjoX7cGz=d4I#jGsHe?8>6#`o}Q;f8HL*;ymQ-YZPIp%*(?cxe;;YzOJYOdif(z@Zw5nRXh zjARrya3iA`!%d8395*wbTbRH^CUGm1DYdraKb6y%&J1QUi`%%J+05Y%?&Kp@rSU%> zd%mCWDWCBJU+^Vg@ipJ@E#L7yX?rJ&|9-aY7k=e8%G+)+{%7IBgKUR`IfO$wj2hIW z7PYBEUFuPv!)d?~G^7!YIg%zcr5Vj>K}(L}Xj*X$$I_bP$o@Vpe!sGp?bSJ(Q|L%1 zI@5)&bmLUI)8ijKmA&XqANtad{tRFsr*j5_IFqv&%uLSVT!t`|D(m?ES6;w{T*SpJ z?YU=v9fiF--s9ZD1ST?xbYGK|Q<%y$rZa=|{AY0+w=r1%4F(uiAO({ib z((~S2S%$J~K{;}J{GwhK`A_6Ok^e;gQ`G&;%6|X3eV62X&UO*A{`o4%TG!=toAs5& z*nkb$h~kuBV@k3Kn^KC>Y{ur4p)Bcs*3|Jo%Od~D`92kO{*&|Za=X4Vj{jNQ#tWPO zEPkDHwb^+*%40mv6FkXNJk2va%X2)>3%tlnyv!@a{69YbI+ZOb$Chlx)|6)(_Gdfd z_%HK+*$(YEnf7$x6gtw0&U7KQ^KQyh>CS1y{6C97y?K|bQvQ?MtH>n($$q=Yf3k0l z|GymhPvk$5|1A1EME)cHl}**4Cbg(d9qLk#`W#LJj-VlpXv~o`p()L1P77Lc6i3sF zV>p)99LMpTz=@nh8`{#2lW9)}P9c5YcT#qy3tj2PsdVQwdeDaZ-1 z|BC#lXg_V)kN;ZS#v}h(^nL!bHv9{}@*BVN2Rr(pr*|dB|M>TR+u|^4P?K8JrVe$f zM|}>b0Y}h~Ml|L~n$VPHG^YhEIf|oc#W5U9YmVc1PT)jNq79M%WIq0=Lw#qoXqNJ;$uGHQ$FK!((juum0$5S-|#Kp@jXBABR}yU ze&!c`w3rP++lDMMMd zAU*djm0Phj<=KX9*^UZq&kpR!;@@(Mda3yTzuf|vY)?NyBLA@sYEy^EfAVg1G5#mU z|7@(oD9I*lN-0XS8Jkmv82=Ob&j{^cSs(wEch8jfn#g}5|4FSQ@}J0mBL7*`Pe%R| z`A_6Ok^e;gllOk(>aZsApA|FzbBzBf+D}i6|B3Uz?<-%Z$bM9!GQ+4sRnDgx2U4Ab zIG96-@ju3Y+YV=Q4(Bq2p`1th-nc+{As2BmmvAYUk=9?KyppT9nrpa=v~IXE@*n^H zXFI&fTfEIXr0w&r@;%lN4$}^Wa@NAbvIb=J z$ZDH)vRU9eI0Ik>|L>mF-nk5S$m-8w&S+>7V51io{VneE|9dS>-d5ENZ*{X;wC&fS zeT8-dE7WX%TDuMv>UC?|yHkb6ZBMSypnIPV-74%?ai5A6+V$<+t$l?mRjXF$)A`g6 zC!f~0d!Gu2RM@X_#cKOitW>#j<*Y{zYkXGOpK838D=$_u%Oi@AhLN$W0G<~ILNT9?=SKWSZ>|K~<>&i|9v-E8@IZXwMDw0QoXv@Wmt zf6}_V=Ko3S?s7kOa}W1&ANP~iJ*dp>_^-6?G3&A)|CNphOUHkub$K2CmDc5T{8w6+ z*YRIzU0%n3rFCC;+}w`;O6&4E{wuA^>-evh_vny z<)Iu#4Qf)0w62b_F7>F-;WQwvYp85QV~(T=O-bvTD_hW#qd1yYq;Dt?R4oN1A7A00TLlv~G~{OwM93 zXLAl|-4Nwa&f|P8;6l>6iX9Q{e^~#Zq;s$PHG-=&U z%CU^&X2x?16G-bPDQ{&mQ<%y$rjypsRLz`0Q$x}SdGd#<4r1dW-U*siT<`rJ$HPZSwlyCADZ}SfGd6%^QedPyy z$VYt4Cwxj;|GDxDzT_*u<{Q2xt^Z#613&T;|KVqTA+7&S`8$8GfIs<*zZ2`T*7N&~ zwONOCS&#Ke>o-tt$VL>W1RGP5w0=`%DN3^$n^T6er1j;LTe1~fQ=VuV@$Qj6Nu zp)U1E>kn5p;0PMhh{haA6PnVD=Cq(CM{zW*IEG_s&2b#hyPU{Lw4p8SIGOfzAU$?R zWhXk*g|2ktRJxPu^icMs7rp62U;5FXRA->_bk1N9XL1&UIh$1HT;&jkavtY%0T*%+ zsm>+JOSz28xq>UXimOR=hAFRQI3u`@>lw)?Qk@%>qZz|ZjAa}*GoDmuf^s60xRuFF zVJg!|b!I4MGK<@|o!QLc4pN=Fly`Fv_i`Wi^8gQ$>O8D`gt^S)Q6A%Qo*>nEO8GR; z@GQ^qJTLGfsm{yFS9q1zc%3(Rlec)AcbL!KCf0vX`92@;As_KEpYSQ4@i|}cC13G1 z-|#Kp@jXBABR}yUe&!c`= zwBi_!r8UQKJST7>C((wswBuyj(}7dyNGCeeg|2ktRJwB-J?Kdni}cxC+TSDU&1D{s@)(cv z1W)o5PxB1V@*L0e0x$9sFY^ko@*1!625<5fZ}SfGd6)NipAYzukNB8R_>|B1oGG@G$GWhl!Qlw(V_Vr$B?4coFE71*8~*pZ#snO)eG-PoNy*pt23n|;`q zitI-vDziUTsLBCU<3Or&5C?MzhjJJ-s7WnqQ-`|LqdtezfFo!~BN}rgO=wCpn$v=o z9L3SJ;uwylHOFy0CvYMs(T29P<7C>?fm7&6Cpy!Gu5{y6x^o&m=t(bn(}%wFqdx-} z$myKHAkO4026Hy&a4tg_%6Xj61zgBQT+Ah0%4J;66d-eErP@*eN=0Uz=a zAM**H@)@7=1z++NU-J#$l1aa|w0>`8T)(q@qg~jQ-PoNy*pt0TuX`WmzEq?V>2*|A z?oSn}asbshkm?*nJu-dG_0`R}jT>3km?LRIQ<~A77Nq(|DUYTV$8apIIgaB=bxu^C zL>t=Dj+1Fm2U4Am%1(5q3tj2PsdOjR>7ndNFM895zVxF%sm?&<>72nJ&g3ixb2h2Y zxym67B?-7|S?r zW<06R1m#2~aVwLV!c?Y_>da8iWEQt^JF}U?9i%#UDevYU?&Uu2=K&rh)p=O?2y>ao zqddmrJVC1Sl=5kw;aQ&Jd0yZ}Qk|ETukb3b@j7qtCU24IyrZ1YyS&Hye87i%M5^4$JbH3n9zT#_Aoo|)j@jXBABR}yUekRrVRrwpg^9Kv~lfU>oQ74_;Yc1Ah9oA(% z)~6V$&W6g3C{77BrX-uNDXC6r7!@g8xKPpj~{YiDIDi5F<2U4AbIG967bq-V3peD7bO&#h|k5uPy zWdn|&A&qFvku)LIX{KyW3tDm%N7IU9NOf8(kK=ew;6zTM4Q)wvPFA+31Edb2jI2E<+f~d89fQC@2=j3CvyUOAFc+`x^DW(+rx>Wov~%y@2L0u!0Ut)x0rlvA0; zbY?JgdGg~=_JGhg(xSM;pmsIC|d-eErP@*b(q2g(omh>!V%Px*|`Np-$de#O^(!?%3L z_xwPr^ON#F{LC->%5VJ6AEY{eD*sBCSx7pu-&(BAI;1-5Dc7eM8?Yf8QJfN_Iwh5x zuqmY|&1P&)8B(1sl;zlxt=O9KY{RysIu(@LvjaP_6FajDyOQecuH1t?*^9l|hkdC? zs#8f>nf<9kRSuvU2a@U>q&%2IIF!SvK}~9r>eNxzr5^P;oCX|0LsFf_$|Gq)Q<~A7 z7PKVQIa=9@V>p)99LMpTK&o?+vJGu%$H}y(1E-McbW(Pv3tj2PsdVQwQk|a4Ui799 zed$Mk29WBUt~`T5oXJ@X=4{R()fu83%6Xj61zgBQTuiESsq!)|=L)XmDz4@lQk`p+ z!x_PKT+c{GaRaH&Xyq7gVl3mhnep60sxwhJiCdY>6s9tb>7+U{m9w~w+nLQA?%+;R zox7Fya4+|9KM(LA50UCTqMXY-9_29}=Lw!9)p=U^4A1f$&+`H=@)D`eE6P`Sjn{dD zH+hSinks zoj+K>pZvw&EKH?3YdNv!+N{I6tjGEkV*^s1jg-YH!N!zi6E>w3sm^A~%_&1!wxAqa zvK6ULdF3{2%XU;?dv;()Qk|WZyRa*}u{(RPCwr0V?4#V5itI-vDziUTNOcZSR^vdb za}Wn}2#1pD)KJ!>7PYBEUFuPvRHuRR2pZCe#vDl#nv&`?SGJ%fM{zW*IEG_Mb&gXW z&k3B!NwlFY?MQXnD?4xs9qB}8y3mzW=Tv2PPNN4s=|yk)km~eP_GbVCIh`{Y#F?Zz zgOz7<4(Bq2p`6G0q&gQWFXCb@;ZiQ+a;_lNxk`C8*D#E08O{i55o~7WoE9?lEfa^xeT#Tcih2td z{Ql!TDfl)k>RZHnQq)_x;P)TzNx`>SQQsoolcL_j1;77zPYS-xiuxAuo)q;KF8KWy z_B~mtj{m86Kpg*5$h>4_egD_;&p?h2&T^PZmSN%l&EozU8kXgsiL?IsXQC`IT~-M; zrX&vi&DxYwlx8zF$6>))Wl5P{IpvmY$JUf*8@45_ub|wX9oUhb*qL3}mEG8#J=l}I z*qeRWmx}C1B`UK&RjA4VRO3LZa}Wn}2#0bQHK<7~YEy^0)T2I!(|{vrNFy3EjV3gu z8O>=yOVaCF7W030bYGq5%(-->8-3``Y4o5cz35GP?7qr=^k)DAIh`{Y#F?DMV9w?o z((Q&QhjJe0a{(7}5f^hcmvR}Ga|Ks&73ucZD2H(^!x_PKT+c{GaRWCpnlYr?73Occ z+sP4({YG?&coupSK5 z{J@X=L|Xo{@)v&PH-6_2;{3lp|7-dDv#QSjS(wjCVQ&-jfBO7uD^KziPxB1V@*L0e z0x$9sFY^ko@*1xb^MCsO*B@?02U1(i-scv!Z5HNsG5@FUfA7JWoW)>fat`M*grQVf z$M?VT0xsktE@pYWZ{t1AElgk{lSuFNWaSj5GL7lXAU*$C+{W$9W)5F)CwFl-_i!&U z|L3AlPR##l|6e<=K}~8=n>y5`9`!k#1{^^{8qt^|X+l$)(VP~vzymeA`rVCx^#;J7YGXL4iEDPbD77Zr1>7Q&;L+vUElwfJwsmeKg9We{rdA4C& z;{3mh`r@MeeuZtviFK6gvL5SG zjI?}1<$Q`$f;j)L{Xg5G2~BB6b6U`nqd1yY9K*4+<~WY$1Wx26+R&DEoJ@NGL!BTt@yA`A;V8B-JVHxAkVEwpT`3mMthpH=XjnMc#-*}&%rCoS9y)sd4se(=ij@QzsLK0z=wRq z$K=*VzO?)+zUCXg%IjQ@%8Kav0V_dlIu1CF2}jcCk@%71e9-9>pl@}J0mGHqXx|Hyy+{%*-p98D{Z z;aDR7$*d)fx286|B}v2FbU$Mm#{{xJ_C(hwaVwLV!c?X)of*s|uk*j$ zY2D)UzdYvhy(~We%L6VyNR0o9{3m;xTiq^4{H|CO^X7IprU^YL=K9^-#j?c={< z{LiX={8uL9fBMR&`q7^O4CHjqU=U|=7K1sPb2yhF4COqgurlU9Q$4R~OlJl&nZ<3~ z&TQsz2Y2!jcXJQ-av%5e01xsI5Az6fna86%#^WsS{fBY^fASZ9CvKPi;b$$@W*ydLJ=Uif8?Yf8QJfNN zOi4CjQ?@44{AU|=)8i(~`|lu+eK3b`D2Gvln$)5;b*M`{>T@^^ID&>WqA^F(gr+p3 zIg$VT`*$?*pGBXKoLe&TpPXAH|Lc+e#PMH||M>owasAF8EZ|T6;%^obpZls!){!sK$XD&&rbjoZz{f$Vs%JE$z63 z_MFWrbfgoV=|We!aVp*E@sFO$Ui7A@kN>*VV_e4NEPfyVO}oi?+sJ=%->#AWTmmv%#=6{a)f6~5ZG2;U^Ap3r33D-BKB%81)r6^7Mt+BbX3}xAZa%8{# z^12-PPvk$5|3vHHqS#^*9T2sdVj5X$F95*wbTZs9ei{|`aYg+!Zvi8e` zeO__=*Xn=#SI)K(4aiSa)xe*DiB-jgf2icI!1bGGZ;uE+SF+_z3a*Y33ImiD*{uAf_TGr=(U(@oRYC5+Asm?(h z%pn}gVbq`|wWv)U>QayTWIF$ICjIQP_{NF+C-R@%=KsmwwpPdEzjEe3*Clv0#tGd8CTWl4`+PPrx9u{Gt{hHXjfD=4>T2XOo)i{vq9K^vK!l4{S4Qf)0+SDQD|5<+L z|BCs4oc~pu`;d?Lm{0hW&sf&^PwLCor1^i+>s?-dMScGFk9E|`>$RlEiTQt)|NPHs zyRQlJKc_i-3Nrss&ip6sJH-4yi^c%0sQG`gkN>&a`B@4&S!b{>@of)E9)-XJiU*@l_R*0 z>lw)?Zs0~nGlrWO%Q$XkJhw1`iA>^FCR569$-=y!tJ?X$V*JmN=l{w%{-+@G|D^U9 z=l{yeI>YDZ-{wEr&;ONk{Ll6Id_G57H;Nm$kE-hHv?f z@A-ir`HAA|+}?kyyO1>LL(X-JugCen%>QTmG~fst(ul?!NfVmVjOMhUB}Z{I ztvH5bY0YsQ&k3B!NwlFY?KqkCbl?=y=ctpiGhOIPH%_HHr_qC+^rAO?=u1EPGk}4d z&KV5iOwM93h54*r=5{x61y^zvS91-+xR&9J;5x2nB%`>2{_Dzrm19WvGnR2oU~$_^ zgPWQg5?82{tn z|7?fHc$_DAlBal@XLy$9c%Bz{k(YRxSEz2k>NVx-yuq8iMcT&iDChGo@9{n#@F5@Z zF){y7jQ=@Br`(ZFbfyb2|Ih#KA7=V}9^-$qvi{J17Vsy3v7*oa{%`01$v*xk^{bWi zxs}vBL7)(TSxw5|6kj9o)>tLmw1_1c$L?9oi})s zw|JX(n9sYs$NPN1hkV4xe8Q)E#^nRm}xYjDa~k3 z3tE!4`3cHa9K*4+CM`c+*@Y81i8i#Q9VgSC4&?T}b+x=3edx|<^q?ob=uNs^Uu8e~ zGk}4d&KV5iOwM93XLAm@Jzn;9wD@v<$A2xZQ_ym(#~;VdjOP|6Fp){z%4DW6m03(@ z1~W;|{UPP;%w`UEa3^YD$=_@9D}|4Hqm!CF55 zG^7!YIg%zcr5S1b&+<6_>)+1*lj-L?eTFaanl9ubF6I(0>TO*#H6z1G71<;;IFxt|#SQ}pA1GI<~J zs}uRpqW&T0Hj4Zw=N8HTdgMPb{wK!&ME;Y1FR}Ws&18SyZfE2_wn1&`u(ISo9X*#$ zbmm-&I{z8sF@|y;=W_uUauF9(6!ZV2_BqylNB*;X#{WeAQ}Fy}_5YU0{S`+3vtrKw zmGj;B!WZ{8xw|B;TZoD<9}lO z&(c06E64iCe^%Y|zvpa0MVjgcKlB!eRXc1 z$)Z{o`A_6OnYOLcYa9PfYQtreW!ZvqY{^!1Al=`JYUh#vME(=`&!SIsR-gYp@kC651!IQ}d5-eJvIy0ra`v?ct^iTr0J%ztvW(ir~} z^Z$IUoqj|5Tz{who*(#;pGeDpR{p}T{KoJ6!Hz!YG5)9E`Ooqi|8uhUr#&6WZT{yp z$I!o>|7Vc~3RL^S~)0x3cW^o(0Gn+Zw!JT}>-Q2^y z+{gVqz=J%*!#u)V=J6i2NtF zJ(5iFpX|3QNdA-kcK_ybG|J>$QOnZ=l_cHzppPlDMso)HdM|h=Kon$di`bdJR|>E{>Oji_RdBAliOA) z__D}-@}J0mBL9i}C-R?y??>yiIN{*!6@ zisQfH_^(XcN`Cd?_^;f*2V(x8{94VD>*DyYIQ}b+|BB zpU8hQ?Jri>dXfLEy5oOh{-2otC+7dj%GzBXwFi5$7cu|O^7*!k{3r6COj}yyKau}r z+E((b7x_=*Kl!zfOxH#J6Zuc%Kau}r+Fz`$^&Bz-;} zRxV&JG5#mU|J0Q+#rePD{9li22h02X@44-V#QZ-=KqQL ze`5ZhnExl{|0(!>#Hw_Q$bTaLiTo$>pFd<qY(( z`A_6Ok^e;gla+OlZ0leS;ZP2v1~sWgZR!x?e-?ckM*b7|Pp11tk^e;glWAMYuU_Oo zk^kh^J~CYw`A_6Ok^e;glWBjky4H*QC-R@jepU8hQ?Jri>dXfJ`{uB96vz-t?g_{pimC268%QFo-ibi=}-xME(=`Pp11tk^e;g zlWAMYuU_Oox%bO){`dS^&64XP|B3u3@}J0mmh2hUtR+j^$4^_sPk}i9yKNBXe~5D)VRbD77ZJjUZJ@A;oU_L!gWDWCBJnauzEqk2D)zRZ8-7k=e8%CDW3^@nl+ zfASZ9C%*gB7ynwU%{r{hdaO?|Hef?GqBtekn38P5rff~7`Oh}$rpMh@xg8bQo*mec zo!FUFXIJHJ?9LwS$zJTuKI}_H_9K)1oS6SP=6{a)pM9|W#r)4P|8va$9P>ZN{LhQ} z!`1cwnd}$Y6^#5R@}Gr6Y=fbk$N5~qgEj^k#=a|;ug$RuuMGET1Gj{ixYnM!^)EAsqXTK<#Q4by!O_oXs|>$skgjN%4vWHe*AiLs31X2x?1 z6PU;(Ze=p1mhyb_dOj=T@^`(S_jsQV_>j-Z?YU->|75>iLGqvMxBEAjGtGa}W2E+x z$zMV9pUT?D{#2nV2T+XzIi8gz|2e^PIgyiSLtEOBwo7~E*_=X0I?m1j!BH?7A7!}wCp7&Gli*4V>&ZP&wm!TaXYh_ z!x!AiUEIw*+)GjBKX17IS9q1zc%8KDP2S>d-r*D8M<; zuqmY|O}g*Rm1QW)7L+5e`!CAnG5)9M$N&7B_iwazF@~EM%Qz;G{XQqUK8ahI%oL_F zjp@u_CbPJW+nLQA?jXkhteWG0c3w9tYZrE9H?p^hxV-GQfZfilf4&M*9QfaUe0^mx zHef?GqBtekn38P5rj(*Io3S}%C`~Y{Rys^%a!cvjaP_6FajDyRsX* zvj=;!7kjf0`%;nps6=Jksj+E<$T`dJ>KU7KI9`l<`X{UGd|}FzT_*u<{Q#|eW(1MANY}P#_#;Wj%!8!Q<(h6CS5K6Dru)@YZK>iE<+ef8vk=SOUr+*Q0Gdn;%crTjT=gB zu&DB%f{y>W%kx=QrtOf zvy_~D>WaSJ&vVaj{^!Bg$M~QBpZ{lhzt55XEd3J_`A_6Ok^e;gv-F-~$r_RWME(=` zPvk#K_6)Hk=N9l&Ao8Ecf8zKrZ6NZW<(L2D?1$3zopeS!vkSYj8@sayd$JdMvk&{S zBFF!v%%G{~(2VA^pe09fG_5#>V`G6y*G0kEoy9 zw#~UL#{c~97MW|i&EruX<8hv#D6*l*fBtvd=XNdfpU8hA|B3u3x4vO%%Od}Y{3r6C z$bXjBPsI8-|5r`F`)fu16Zuc%KUwSgy}KUkQ;hW6cSGfTic^A(Daj^mN-0XS8Jkmv zvTQ*)wqz@|raarQKig4(?b(68tZMns%KH5g?X(fpU8hA|B3u3@*kaHUFuPvlojMP z|If;hBjoJM7hjM3C-R?Pwcp<;Z=R<=lneNizxX>@+*p=DS=wW4M!L^3%Cc-hIksdg zI*=YJ)5necC-R@jewXF~Hs*?Y#4#$7xmH({hZ<84Rv+OgQW%-^){D4QavV1^o?Do}L?&@7lbOO)W-*-^%p~2%L(1Ek%^dFF zPVVAv?%`hU<9;6CLDFp>RxV&J%WD2-cbn_qJ04>`@A4k+^8p|75g+pjpYj=>^95h> z6<_lW>3Qe%x2ohnxjp~YdHhd$&z8sh&uQM9+_r7bWoyFtpWNpEN#mnp{7?RUNY1vh zwCi#Fm-*iv-`0|&IGR=*!?CpHI8q;Qg7QR8q77|nM_Sijc{Zoekxq1`3tj2PsdT5u zKYA*A(VIT>r62tnz(7vt3cVJKDB@%^v7fD5^Zi%HM#Qsre_&J|qA zRb0(A4C7jcGlJ{5o{@~=25w|DW4MX2j3Z?|(wemV zcx4w(dpeNnc2stvGw0HkZuFr$r_qC+^rAQEc72uo=+6KKayn-)h%-5h z!JN%Gq}vTq4&^)||8f2w+u;eG@h!_T z|M|}Sea{d4$WO%hAHQF8XjM6%Y8*&)4&q=A;ZP2v1~sWgZR${v`G4{n|C8JCU+FWp zy#Cgt@juIRyDqEuFUJ2YeM|1DAKi`J*@HdVi@n*0eW}QPq&84lxj$8?$^lg4K#u1i z4(1RJ-z+*^f$8W`C+sl>?~8fmG)p4(1RJ z;y!wV^ng8VV7%~25<;{PV$M~OFI`q8SM)u{Ebo$w^ z=e&G@`?-*dxR^`0l*>qccV2&K-EehAa2?k(l2P2ijf`dtH!+rR+{}1xVFDAG#H~!G zR6fu5HtTO^HgmXxyw3lX-}s;WURPePw=l~i|5^H0i~J|X|HSy8$bXjJQ!H5{@}J0m zBL9i}XUU!+mgL+5c9oaNe{$AY7T0sjf0o7luBiKHV!Jh^8O>=yOVV$M6O=Ljr|6FV z%K4r@WP9JvZ02wWcXAhZa}W1&ANTVB50c)ihm{MM%RCeNqJcn}`!cflRa+a3=T%pdDT*cK~!xYkE7ghc<)%{On zIy0EbJeFnt^QilKjK_I`H2?EcJk2va%X2)>3%tlnyv!@S%4@vN8@$O|yv;j&L|*yN z$JV9om;LVx%f93*zUCXgmjlfU>o$^Ib!@^Wd9u^H(; z%P7mT1?AY1t>{2{m`oox@}J0mBL9i}r!ZYp#_sIFp6tcm z?8ClPWIrlVnPDu?F?gW?sHi$U!BJPEbDDk)c2QH{EQ?@44{AU|= z)9traZbt>SX9sp*kz3T$2O=<9RC&b|HSwozyEX!#Yp>F8!G2hoDytINj70qN>Q54*qkzyWedu& zC0nsIA)#; zq!XR#LRY$RD&0Aa9`vLaz3D?=`q7^O6xH~jy!OM>^5GtL1lMsrBN@dF+{kFga1+bo z_^-Ub-B!*uOUr+Oo^YJ79iTo$>pJku_{P!~` zUyb>Hva)K(lWJ0n+SH*g^{CI`G~fst(ul?!NfVmVjOMhUB}Z{ItvH5bY0YsQ&k3B! zNwlFY?KqkCbl?iBp)967@deNIc^ravD8NfhJ=L`mMCTB62O#9;O zee-2*cN5u{74-6Gw;%J*{ft$PV*=UlXQJzqxRuFFVJg#@&J1QUi`%%J+05Y%BL9i} zCwqH}%PV#Z#PMG-|MRjM|C6&NKP0=0@jr{UO3eSW{O143*$x+9&ny2~ynbaUm&N#> zE9Ey=aW&VF_9v5~%73PMjA=|~1~Zw(ZQRam=5Pmhau;`V5BG8(>G?gNe2|BDm`9k) zJXZAaU!QmmtLylm#qA@;|HS#f#>gOUVl3lGS#{aD6`m#9wYYX?YJm-JT`5ln^t6g?W zWB#8Ncl=k*ckv-@E%Kj5TP55G4P9{;sC|H-XA=3Exze`5Sk zjQ@%8KRNq_Os+@%6Zuc%Kau}r(pN;C<+BBr$M~O|=l@Fkn{ocH)%*PKugZQ_w)`jN ze_nHr|H>_Qj`2T5bNp9~|H*y+=O6te&QC0)Ajf|dHvh@F#}LPV#rfZ_ktGh}T81-% z>$skgjN%4vWHd4UC(i$#vmaSj*CYRl{3r6C$bXhqf3iB?PtNf_>G#a4IQ}Qi!;xG5 zQ&jI=jQ@%8KQG9hUgRZS<`t^jx6P}~#r)6zKmSi|+h|pr|7Y=QXs+*RL7M+3w>)TZ zy_Knq@jo&CC-NWjf9S7kQJXr{r5^P;oCX|0LmJVTBWXfYn$esVwB#s`rWMCF;ls7m|(zTeM`!|1X~ZIs2Lt>TgU*HepjrQJQq$n=8vumMutgMrXhM^12-PPvk$5 z|3v(>5h54kcXI035(vE)i{AaCnJ(mtJ@}HRhIhSU!Fy?>G%6iUc z=6PP=MPA}%Ug1?<<8|KPP2S>d-eErP@*eN=0Uz=aAM**H@)@6#KAT@Ezv64Y;ak4r zdw$?Ye&Rp;%rE@PZ~V?5EZ|T6;%^p`e(v4yOS}(2zznW*Ra6XT^>GiTr2b!tb=f@A-kqe^$)--<#?@BmY_T=6_yx-=2lL zr^tWe{O>XTC+2@%5#xU%|H;Za)NkLzs6kC?5$FHP?7J-TpU8hA|Haeyuo3A}=}O6_CNpixnXbrUcJ26FxuZS zhO;?`b2*Q(q`y6Vt*`BWR_6X+nSbk&zj*che|^t?vaf}bwxv>}byZp|Ls`mEo-OH4 zdR}hV=gyX|%r5N8ZtTt;?8#nKp(^QT?xXI@e(cWy97r`fQk{dTK}~8=o9O=){lA{D z9X!cXJk2xA{uB96SH!=Rt^7fJy&x`SYV*H;N|0nu?t@ub0OSr_1{Kq<|NA&;7 z$T-t_IE%=CeEzc@p5u95;6+~IWoEIg@t@=VUmMT;zf%9N^{xHSDPHqPPUSRCXB1~} zCgWI9{*ykZMEjpryMBoLXT|F+@}C(0d6Ivae2vN6#uTPJj^3J%45vnaiaatKljHN|0l-(`R7)#IL80cP$I_viSd7O+Beq6X)g66|FI4t z|MB_HdWif-`)})ECXxRvUR=llVm5^-LQ#rQoDytKNlLK=r71&M%2A#zslZlLWM8(S z5*xz!&#RLEKk}ayueZp5 zBL9i}C+`2X;v>aBmx%U1(f%je|3v$re;yfPO7=D2V?*RW)4i}{J4`GsHEO8=JM)kXZlpZt}0UOMq_!lvXQ zFZsw%0SZ!x%_vL}in2QI|DH7$%eqZQ{uB96~Gd~-ziTo$p{}}(nd;K_1@FY+1G|w=T%<-RB zNBf^`7@^#5A9{$G**Ec^cNk^d~Y6744QIF(~L zjvgFOPkPat6X-+VrTVG;8Nf*lWDtWH!cc~BGLiqp_|Iue`^&Zv_kYjGs4eTPLtW}o zp9VCf5r=RnhtZfOG^H8MX+cX`(V8|K&Jnbw9qsABk#yuJj^-FT(U~rEr5oKjmXx>l zP>-i4z39ye^x;JM(vSWO;3Nhzh`|hDD8o3J;f&xEMzXxTe8~~%pZ|~hzsLB`asT&! z?icIpl*oS^|0Dm2{3r6C$bTFR*R}RP(f`Z+f4nc7`^+*$oyzUp!JSOwE~axg_i!)w zaX%06AP?~{>6-UZ^)YhW{%3Wa+oS*2lJ&o}_i`I5v8>M^E8G5OMek9x|B3wPVcT2W z|10vJnzD~tME@%Hlr{_ zC`vJkQ-aMYNh!9VG-W7DIm)vQ71)Z3Y)$$-mDFw7j_uij9odPUsmw0y%5Ln=9_-0p zRG}(+)6yTZueu-ma{%dgR8tS4ItNpOn$)5;b*M`{>eGORG~y5r0J#UnH266wdxc^s-|7`zvJW2b-q3U5YrU^}HMw-_` zJ)BmwrVWp91Z`sxs*?7T6@5ki6Zuc%KTGzKX#W%WPqhE>?>~9;|KQSG_fAs&i9!4{UvpI*0IFGT6<9sgQLelm3#p)$o z%4J;66hkV4xe8Q)E#^-#&mwd(7e8U{(GLQMB*S%2vmhbqUAK2Q?{FC}Kzwj%+ z@jKg_cL0BS{1=PK@ckyFpO;6C{$J7l$ENVVuNC$GN()_Jo4JsSxR|sZC6{@8IahEc zS8+Aha4pwyJvT6(3Eap{+{{F7VG_3z?SCTw+0Ah^@}KDcHPv=-J9m)AFPg?(Oy_Ry z;T!JbejeaK9wPFebkvUaKhgdt`hPu^C-R@v;A0auB@cPYM}7)WkV0%mVTw?cX#cb1 zIJzPH-{p1WKh{A#>J#}-q)bH0>SeZ|-O$QZ;H-}3{7eWv|M{h43*mEZWC zMWmmdzM}n4wEv0rKau}L{N>Yj~C`}p4QjYR$Nd>l|BKxupmDrZ;XwDAo$WH7`Wp-g#c4K$;U{Cg< z3RT&geYk}E*q^gFkZK%6bq=NmHK|2y>QI+@)F;OOS#mZUZC#AvY$E?zJy!^k|3v(PHCX%H@6JKau}L{uB96^#5`&jQnTG z`7rXIzwiIPx~>o+|B3u(dD~LtKau}L{l7&_6JE_9_E-AT(Hr}p4@PAA5H{(JnN z?Ct|gW|0nzF%lv+Ij{lSSGqczAW&EG)uRDFezP10!{2Q{5|C~8}dG)^@|9PYX z|EZkD>5SqG&SV@b%731-%*N9H>v@0c3%tlnyv!_K;Z84j-r{ZE;a%P%-TyuE zpPcib)ph^(eXZmD*q;M9kZN>fT^axRD6i#cj-eBs>B1jG{uBAnn$CYR^byP2|7#Q9 zZ%Q8Wl8^Kn3aACidJZe%`=S)1I3?JelBDNsp_Zl$WhqD2=dZ2Dk^e;g6Zuc%KWpoF zvp)YGm!{GF$2zD-jQS7Q91ocE91PL2F0@}J0mBLB(l@nU0M&PSLHI{#Ty?`^dI z`S0%kmHj=PVH=M2KTFn1wEtOqwm-Z<|C`vJkQ-TVVq!j71 zYiYF%WhqB_wxl~1Ny}u?QwEvl8+qj9FnaC}qX|FMv+n7S!|Lfn4{~YaqjQ^)y zQY~szhq~0GJ`HF{BM#wE4x=$mXi77h(}I??qBU(eoFiyUJKEEMBk9Od9L+IwqBC9S zN;kT5Ea^DeLp`3J^rAN>(1#Q0OF#NEfRh-=AOhBJawi1D9e{O1_|Ir9pB zO&V&jI;Zjw4+IzOVMA7ri-wKAcEj z`q7^Oq~!;ygBZ*ZhBAzk8O{jOa?$_G^`CX|I8X2-Pw_O*Fq3CV>nie}$bTBk9-7dU zW;CY-Eont-+Hg2W(3W4Jj-*G%d7vl`XVp!GP8JvS9y)sd4o53i??})cX^NZ z`GDDc$VYt4Cw$6he9jkq$ya<$Iv&hX=Q5A^EMOtu@*Usv13&T;Kl2N}@*BUih(Gv~ zzgSG}-Sr(Ngy*Dw7!>)@(y1wq-lECoR9Dx)VE7 znXKDHJYM~4U_;M;R{t7X@)M)|PqhDu_CKqB|M#5s%V_@-?SF1|LYl}eOyX81v$@YJ zQ`D*4&K=yzH11+LcXJQ-av%5e01xsI50kDj9#tPB+W)xzvtBnP4|&N)ehN^KLTpC# z|BCiM=h+U%GLG}PfD5^Zi@AhLxs1!Xf-AX-tGR}2iS|GK{oi`{m{0hW&xrOvIb9X3 z{IvajzCVBism4K6Cms81s5PlYZR${$=>L_w^&I(6wEv0xCwKeG`mmJC;AsD29n_;f z4QNOs4&hJ^qcKfr%2Xo%`S0?d+pYgQxRW=T!MZg5&s$#4+q}cOyvG7oXaBE-e%`ly z$M^ie)^_IgW&EFQyw*x=%XTzpeanAh{AZv4yl)qAG3oj`xy<9sxq>UXimSPXYq^f= zxq`HyuF`H%ZQTMuV)7NZ%%*_^{goX1$kaXuGtA?ZAFv3d!Y zav7I%1y^zvS91;5avj%`o;O~dz>VC*%}nGLCUGm1xs54IBl4fcizENh|HHwnDtogJ zm#`oEa~20ujf1Gp!PKB8wWv)U>QayTG$8taMgOm?pS9Qj zE2k^482=|DqlZ30$J3Ku^yUQm(08eRYJUcB5(62;V1_W1VVulxMsNxvxs%g4ol%^@ ze%b|`rH*C{XLAlImx%sf#(%XgUS<}r@G7%;hc|eWw|JX0?OopEeLmm|KIFgZ|CRQ& zX#W%Kf1>?QjQN>Yj~C`}p4QjYR$Nd>l|BKs2kzcMm9Sr47*LRY%contwUwEo{$*Tnt5R&Z;H-}3{7Wp_WRKl2N}@*BUih|GO0@}J0mBL9i}C-R@{R~;MQ z_b%b1{ZF+2iTuYl5bb}A|LTAc`H%6xmgXFXs)x~-CN!lP=~_C*|B3u(Wv&<^|B3u( zdD~0$|BC)!>AVu-|157WS@FE+{}uheqW@R)|61{pB9`z`Ci0)ier*Y#8}ZzoP$F^#97p_))*D=>L`V z$gtwak^e;g6Zuc%KPx^`#1fJJME(=`Pe#U*(f%je|2P;nAjW@=_CGUi2hsi~BcqVd zpPNybA{3<<#VJ7rN>Yk+9x1Jsp)BPn&z5wjB59cz|0n0`&S?J=?SIn#5&ge%-am3X zHS(XxepF9o((f%j$pUiV%wEv0xC))pHWE?89I*i6N zp()L1P77Mniq^E@aE_oY?PyO2jwGFDm-iLpU8hA|H;Ux?_e11f0mpNBmar~C-R@jf8ze{85z&Z?q1+U;{Na2|GCdt zaZ0c`B}vziTd1WeLs`o4UwpcX{3r6C$bTaL`7e$=>)Y>){3r6C$bTaLiTo$>pRDJu z$bTaLiTo$>pU8hA|H(Wr6p`l?CGsEb|Ez}=w4@cSX~W?hL0j6#IM~>oXj-eBs z=|We!(Vb&S*W^9aDiSA0$SY&J)o%RJ_@fQ5X^cYMze{K!xI%rE@PZ~V?8{@_pkVlmPF zXH~Y|4eL3P|3v;1`A_6Ok^e;gll9CN`A_6Ok^e;g6Zuc%Kbhx+$bTaLiTo!c<7L^& zEMDPNUgLG%;7#7*ZQkKs-s62fU^X8T`AF+(2(>R?`q~k#5SL8pD|3v;1`A_6Ok^f|# z6C(eK{3r6C$bTaL$vh&i|J7xG#-`|!n1+M;-)DgQY5@vTh|MTW5sFfb;*?->N>Yj~ zC`}p4QjYR$Lj|^?B3qL_YgAIVWjnTK2X`hC5$iC`+ z?9TzD-%(9Hi0T|n4Qf)0+SH*g^{7t+8q$bEIF!R^OcRe)MMm>3IXyK@4UHLm9@& z3}*zVFp^U_jr6=x>KUBLS&U{3XLAl0aUNqC$N5~qg{0?StX{&UT*l>G!IfOa)m+21 zT*vjK=Z#k%jWp5-~7=LKHmC0=G0ukb3b@j7pC(5CwTs&DfS@A4iC_<-4b$VYt4 zCw$6he9jkq$ya>MH_Tx!^O#S1-3!%k`Ht`Tfvq<&{+s$Uzwj%+@jKg_cL0BS{1=PK z@ckyFpSP^9$banr)=^`c(3EDRb=E>XoL01^4UcdHZD~h)I&dT%Ig0e$W7JM`rVCx^ zMt6?oIMQmGlH~S%jWo+YiT)%Ep(pZ6Ib@(~~N37_&cpYsJ@@)h6l4Re^wJm#~2g?vkTec!7;u$Z6t znP2#otsIYjR~PXIfAUx2dFjNz37e9KyyPQ41&I77@}J0mBLB%e{zd*1`A_6Ok^e;g zlX*m3|Eo*E$bYPZdeo-@4Qa$79LixdrU^}%N^@G!l2){)4e7f2D77u^Xio>y^p0vz zj^-FT(U~rEr5oKz%O0op;CN1_7ri-&KAcEj`q7^Oq~{G(2Qio-3}qOR|3v;1`A@X} ziTr2r;zynI9wYLf$bag{x$07n`ZS;+jW~ouIgG|Mp()L1P77Mniq^E@aE_oY?PyO2 zjwGF*m-p4pGN*DZ$I*l1=}9koa{_(nyHr25KLa?4fed0WLm0|1PG&eGIE9hi$!VO< zD9&KNJpTPh9nBab|B3u3bDNF)C-R@jexc=A3f1>?Qx-K0hBRYdKIg8PZ z;cU*~BF)0*Ks{JFrEqA$W7eL zL~dacw=$W{eHNXfPUUv);7+D-7t^_$d$^bTxSt1jkcW7f^!ipd|9Rf?Uf@Mu;$>#> z3a|1Suk!|Pl72@{U(x<&$-3Fvd$|pjSk}7Q*}Tf^!mjMb?(D&y>_ru-vaFwx^*yL= zxr3=eO=?k_$bTaLdBS$^Bv0`)&oGl`d5-6Kffsp+mzl*Yyvl6e;SJv8E#4+gdzbfk zpAYzg5BZ3X`GimTjL%8i@|WsYe9e!{VJ`ES&jJ?mE#L7yKTue9_mlcFzwj%+@jHvi z+)w`UcrmHbf7X2@>*E6E70fn2@}J0mBL9i}C-R@HN6Pj4vCGwrrKf`E|7Bf7`=7{v zHpc#6k^jW_Kk4&9$Q@NcxNbQ%VaTn9Mn|t_%`?#M6c#wy9m`8Y&$C$z6ME;X?&s*|1@*nO0 z#K{Q<~A77PO=lt!cyI96?*!(Vh+*Nk@+2XpW&1o#{eXy3w6uNyo$<>hbiX z7ri-wKAcEj`q7^OoWwu|F_<9?Wf&(joDrPDNOC&v{&P$Czf&UriTo$>pZ~j0tk2)M zG>!bnI;cnV|BCiMPumV6|B3cLjT{)$_0gf~VKk-*O=(7&*Frsj`D0tcPf&WiTuY($l)vce`)_`8=1&0 zME(=)e{$GORyb*Y*~S4JNHq?kI_cO`L#;_IYEy^0)T2HPXh|M};tj{GO`pU8jy zxnHcWQ+#ZR{3r6C=>KIKc#6n>qW@Pz2gS&LqW@Rs_|MV)C-R@h@`xrhr5Vj>K}%ZE znl>EH5wxWp?diagq|cwr`-=Q0@}IPgME|el?IkOo7x_=L|G7_ocRvsC3=i=zkMJmu zF@wi>f+u;3r+J>4Jj-*G%d7vV`XVp!GP8JvS9y)sd4o53i??})cX^NZ`GDDc$VYt4 zCw$6he9jkq$ya<$Iv&hX=Q5A^EMOtu@*Usv13&T;Kl2N}@*BUih(Gv~zgSG_@Usb< zl83zHBR>TwNFg?(FhwXzHY{zoP$F-2ZE| zEM^R6a}Md)5cyAx|6EkNfnpS=1e;Tmw0&%$mZl74DaU{D87lIh$bTaLiTvlkIQFb> zzcccm$bTaLiTo$>pU8hA|Iz;23Go?b68*no{GUT*ABPd`eFEfi*c$K*S zSL8o2{&Vg>`Cca%yq+5v&jcot^(Wlo`$^o&WNu>$Q@NcxxRYtz#dPlG9_}UbpU8i* zZcp(z=QR-dPvk$5|3v;1`A_6Ok^e;glh5bbX#W%Kf1>?Q-2c6x&(T>wH5BoEwEv0w zf2G_e>vplSk0bwy@qe~4j!-4GWjnSfU4QPV?!?YiW@WdnSbpW!z=odxtlZkj{nE{i zmD7Tjw4ya_NZasHYFpaTo(`nx9o3#3%`tSMGhOIPH@cISJx=Yx@tjUCdUFzeIFY{e zqdx;k&l{)?VlYD($}mo5I3qZPk(|nDr00!N&tQER|HsSyKVLJv?&;jkJ>1KE+|L6% z$U{8LBRtAuq`&)dbrDbU6su$W=l}EKvV8M_pFf)q`G}ACgira5&-sEc`HHXkhB?e- z9`i}Bds$yUng27t@GHOZJKJyKo*4Y;@n0+^!}ptze%{*7e{y>LJ9sTSvJ*Q~nO)eG z-PoNy*pt1eLRI!=A1+}(_U9}Pq#6fNor9@CO=?k_I@F~e^=Uvu8j;q^^6vkY`8Q<0 z|5xVp<<(>S{7!VH3tj0(caG&a((iv??MW|sa{_%hk-qe!KLbe14^#&+m>~>h7$-BF z5v1its;6=qr!$H){Y-TnqZz~5oWr@C$5_&G!1As2BmX?k**$Cq;jS8^3sa}C#W z9oKUM4SbCjQXG{?}1&UE1qx^XJUavVK4o}Tog zHz&}CzDxB}`!j%(7|0+7GlZcG<79?2f>RjDot(z$jN%OT%j4Lojwbql8UNLKc%B#7 z5ZeD_cz^%$w=5<--h@rbLtgTca-RZAYaw+rQeUoB$$!dw-j-BgD=M-z+fa#Z*^cem zfgRb2ovF+&?8VE9c0i@qiO+AR}983*rQj6Nup)U2PPXij#h(kD( z!$?1?iQ1H@tV;glNBr;WXwN@}PIRUVUFk-5((gJ>?ZNS!&eEs;uPiVB$-3OiJRaqD zoWYr##c0NGHs^2==P{OXoX-VZNP4{&tCw&omvK2)a3xo9HP>)0*Ks}RdE?ay+{jJb z%tUTs61Os$+nB;MZs!i}w5mv!fRZW`@dJsWB>QuPIRUVU5WfB@}Dnk2Ve3P z-|-D|n9Drovw($sOFD*rul~Sde&T0-;a9fWRQ{_j;t&4huf+4xiGLF|B@cOt_CISj z|FPPa`4#z3jQ^bW%P;MRU-30RGKaa$V?GO5$hUmQ_xwO%=arw-pZSGf`HkOMMEcq3 zD{KC zWgKI7vFmx3E~{9rz0PR=6YYP}z7XwymbaIzcwXc`k^e;hujv1^ z;v+>Yv7zTbYw8`2_CNn!|F7)tX|(_OdyPcE zPu8ouX#W%WPrBBO_CHzoij{vH?SFEg|E%oVjs9P*|7B;hc!gJajn{dDH+hSZ;H-}3`M@)JMv3%~Lkzq5!x z_>;d_Od9Za6E-CedC5n93Q&+jY(`;|JRyXYl|00`=4n4v#k7QS=(HU|MPeLlhZni@qgm}UpG4;E$jYY zIc+nmGA-KwEV(v|_CNpq{lC&RatMuF3o-+W)x!i_gBbs7)Q}QjhvH zpdpPoghM%u#x$WR&1g;wTGEQvwBc}$pe^laPX~^qBS&#G$Iyw+bfGKV=+3dE<3bPh zczV){-kd-mPNXmW=ufo&G5(kJa1Zx#ANTVB&+rfr^9Yaf7&CaBCwP*lc$(*#$+J91 zIeEnk>WjQY^PjY>W$pi!x$R}I1$@peNY?2^d|#Ae z6sH86Q+{#vH z0W<7A|Ns8)D}L6>FOk#z-&g*pEdLp6^8W9U|3v?<=>O&V&jF(t#VNt&l%y0}P?|Dq zO#Q#IAC->q_qU}T?diagbmS<~b!hbe`fvJwb#}7L{(i0K`{%u9FYqES@iMb`g;#lv z*Lj0CN$>C5>N~v4du;3XexQEFhkQiz|5~!H()x<=fBgHuZRAvrot41g9{PbpNc=IGs_P!G10T&r(M-hO;?`^d6n3j%6I@ za{(7}5f^g_mvR}Ga|Ks&6<2c&*K!@#a|7di;`>d>LtgTc za-Yonr;x{+k+Pgs$$!dw-j-BgD=M-z+fa#Z*^cemfgRb2ovF+&?8^{HK!X+p-#fvwF`@cu~ zpJ@LR?SFg*bj<5Ve+H1Qfd{HF{`0cWcWF+v|5>uFq!a%pY)T&Tl8^ippdf|VjKUP5 zD8(pF2`W&MQl#y#v|5I;l%qUb(w&N=Wwutgq0-Xt)3l8_|MBPl?lWE+=bnfOJ?&Uu2=K&t%As(i)%pv>x zwW9B%{ZHgSYqI}W7u#gq|0~-6e7-afU6c7wwEv0zU#Dm!2R>X+T37aR`SJ7gD^PuA4<&)KhCR`h-3Kau}L{$bXh~|F5|J`^Gi?Pb&w}*0kXfBL7)4`OoS) zt49B?CE0uQ|BCUSPm?>GPK^Jf{jc@#G|w=TXL*k2d4U&siIrIZnP2#o-}s$H z{K236#bVM8pEhAr@{pH&Wl8^ip;0y{eo5B=f zb>06f`+Jza-@(t{k)7C?%Iw0f?8ffw!Je!O{l9Yh8*)1>@}J0mKDHfy!l!)A=X}AJ ze8qQs!yM)^kNGTMA>Wer-S5>Oi2TR(pS){-4&Xql(UIyLObu#Mi`vwoF7>ES0~*qZ zLpYSfi1B~o{$CqH`=7{vV*H=1t_f0BW2MYd z=dv;8KUuelc)a@8fXl{z|4MztBLDgC@}K4P|H>)zkMW;l{O8DjBL9i}$G`vh z99oRxlwfm8l8&2OsHG`GS<*e@*Vg^tqy3M*0oM0G1~Hf+3}qN6Gn^4b{^R~H*24@Q z=Lw$VDW2weX7Vi0QBJ#%7t|MdiIb5JG{$#yw3;B=0iT>V?Ny7Pxkj#K{Q!?-Wm3=#0neQY2 z`S0?dm3g1ivXTEp{uB96hjr=x zU)i_t8D3xHKTFn1d>LtgSxkOE6LS z{C~cp|5vpC*+!eHN^Hw^Y)`t5+fm(#ok`nMt^Zfr zR$EwiEont-+7SJ};{NY(|F4bb{$J7mYwhJftLwb9y#8NLJ0U*9Or9kj=cD~kwEtO? z?SC@2>uxfLQ#qF7=)v*yq!+z8fj;zIs-N1Q0i47@BLB(AxX*gHp9gr5hj^Grc$CMO z!Q*U9`A^!`vgSXT+g|pXng3*+zAE`o*5|LS$NS5w4&XqlaS+u>$MPC#O=?k_I@F~e z^=Uvu8gU4Rau|(i!iLuVC-XfSv$0Mhl`Ky^dy z|FxXM^h(W&{AbCw68X=%asRK(jW_b2$bZr?{7YHQSA5Nn%waC`n9l+h@-5%-JwH&` zXZoMipZSHzf1>@*P}{`v#(&N{_C)>@`A_6Ok^iLg&&E9dbJk2e9UGUI|70FJv)35^ zImUm^zD=a>KajP~=0iT>V?N;*DM#SmvAYUaXD9TC0B7Z*KjS@aXsmIPB-sL^s=L5drLq6hTKH*b7<8vba`S(Zg$bTaLxlg;N`+0z8c!-C2ghzRd z89dGtJjqi$P2B%o|8HY27o-rIQJ5kWr5MF2!RC~t6kAZ5GL$79%gU=;Qh}|g$kya` z{O4UPyDPh~JA1Gvdr^g|?9D#x%YN+70USs*4x%~-Q-hk+qBeD?OFindrmi9X{ZVbr z`~;WH|HyyV)%HK>z1hR--IKkjLRI$WK=x%n_U8c7^3~LXsLsLEpeD7bO&#h|kNWhm zLL&ch{~zmO3}>^h-Ty1{pU8hUmi*^#$D^L~qBkedhZEV@`hQLFH&5ku?%+^{oMy zx9e5@v%J4Nr~GGm%P(tQ3%tlnyv!_O{O1_|c~$QJwKDC0(lILX zAKRH+AvgKYvX1HhX8P*Ne==Xghfca5@iCw9DPNO0KWqKQ^f}CB9`jkiLcS$?p7N7v zKl2N}vX%ArySj)!_>;eqtiL47<9wFSPXX4(_|KjFo{c^K>0%xHLF7M?|E%f!C&Op= ztm8j#DEEKQdOVB#C-R?Y|Kt2`U;mBYS;Qaw$zLocLwlD^*pxi1i~YZ{T$;qgHLwO; z3P%2uZM{bR6Zuc%Kkf(W;82L!6s8D8DMoQh5cmHw{)hF@nl>EH5wxWp?diagbmS-^ z|Iz=`dbok{OyEXt;$|jt3zN8&$wdAW`Ooe$l0Ddyy{JM}(r3SY)P32H{W*XGsYXYt zb1*fiNiAwqhq~0GJ`HF{BM#wE4r5LB|BC!)$-TaAvYu~dBDWCt|62XyKS%x(_kTad zXaDT?|H}3eXqn$e`yc=QYyHjQ6<*~vUgr(oe9L!y&ky{_PyEa;ME~zy*Q@+zS^dA#ev(uB zpH=Dqm38A--uORRm&^KieH;Hdz4lSIgEKgjv&gCcSJuBV`{T7a{!jMbJ;Upr&fVO@ zz1+wBJivoI#KSzoqdZ31W*%1;@gz_2G|%vF@}KOlFZ25t|M~Cxzh|zKtaW|6|9jTg zzOs*VJO0nQ-2W@5zd7wwmpQ3i&J|qARb0(AT+4N=O8%46@5??dd;hQWdY0Ay>wo*d z*YX5U@)S?=3^RF_jj8|FKCT)6tM)(H-^ZPO{;y1K@Bg0t`Psi;SMs0iuPc2Y`A_6O zYisBQ<%!_+`*kp<1VIi zH}`Na(f%j$pUiD3>ay2>OWeqRtb=;gXI01lNyn}>o_`uC|5^4LU%dEe^N*nuo#{eX zy3w8VvyM}Ha6G4z_2>2R{fYFYAN?6X*5hZ^!% zHuInLZTz3~zAUhgR%iaR(9ipp@A#e{*xJs#zTE$78?Utz+p-N)X7GCqJ^#3~F z^EQP1=K_DngE&)OXS zIqS9;k5~U1aLFF|k9AOwf1CegzB@U!|2fjn??_KpCI9K=dA&J_<>fyE%^$>IhA@<2 zoXl|2dGZu>B&RaN29RF&D34c^|78AsIn}k9|78FDGraccMEjq`i`SR@C;NMtzF*(+ zpPc@N+)mpN@}Hdk)-{>`^b8tl9owX?x9j|M%49 zD)OJme|H;T0=y)=S!3<$2!#J7Yj38_OuQk#BCuYI1kzYPG5*hz^U9jM|5x@%Hlr{_C{8gNkv;>JR69|MEhtU8 zAA8m{x25kZuoV?)K-T%I@^~*lqYCN%@7I&=%arx!WPUzNP6JM9c)TRdM zdG*wqOCP_drnWPOkjDQ>?RA>bgu`e>b5eh=mZUygDf8*T;T%C*+R>iYWVZil>TwHF z|F6yIOc%P+jq)5z*8X3q%}{FpliKWL{Tp-hIJN&tZGXm*#`PINYX38uQ#p;(8O0f# zNoptbJ7YMTb2yh_r2b!5aXy*-zb^84dF_8vzp?RTf4w)Db|Vv*#7*4H?PM-{tH+bM zjVYwQW<|M!%=b8R*|kyU`MobQYw7QQRehZod4o4e|K9Sp`VQ~&4X^PDv-yyZ_?YxJ ze5!uN=X}AJe8t!NN<-%I3-ejPLbCV&`q8w^{AZ5G@A4aq*pol_lfPI@#wPw_Q}U3; zbF28FF_v+hPnw>! z|JNm^UAlC7PUHWi<*zmWI7cBv0`)Y5Gj{S)Sv0ULZ|>Nqw1Fyh7hi?c3_>yuq8i z#oMIi-&Nn^eLi3|Y5GU%$9%%4e8%Ubd0(nu@ipHthctbjI-dnB^|xfU|4H)-`o0jGQJ5m6>BZFIlpu}Eo$mjhrf;EU zzyEuhzNP6ENcSSE$kwFkmDFw7j_uijG<_#E`}jX;dQRg%r|ElJKBw`Y)4VkP^Fd@E z|0m6>ZF(K*QjhvHAkACW_|IuxGs`rm1ubbsYtp>K)gx$2JKEEMG%t-qo!VGs&3`&C zo!3?EMt6?oIC_wt*Hi69Z%&{OCz9s%Q~NW3lNiV#1~Y`A4C8W!GlEkX$*G)1`Z=T2 zGdPp87|j^cymQoZIghc7<9yP*3)PFbm`k{n%SiLCP_N`Ft|sL?Cg=Edqj{-)LiU-r znm(D^n8H+UC;j|8)oI+tbnfOJ(!BfB`+0x|d5DKe^Bz?nV+N1&1W%IYJ*_^&OrGUA zo+r(FQGJP*nZ+x-N}Bh&`UY?E7H{(oY2JJ4`+UG`KI9|Pyie3m`Hau`f-gz)zE;0s z4s)5ueA2vy>bHEy_x!+*qb7jh_GI?|O7oW0|0~VQssC4M zN0;X9r{>iEE6qFDyc*P`7PYBEnpaP)PXij#h(k#84pSS`gr+p3IcZ)?wH2*t!{Ho3 zn%7QkPX~^qBS(?u9iw)lGhOIPH`2Ug)#K>F@${q@Y2FEHA5Nq%{pe4cx4f^^{^zxP zf4Bc>4~#Koj}m#UX>IahEcSCQsj zqh3q)_CIOfji%qk&7`(Kw=jt`Z?bwDQ<%!_+(DW*O}&fhWF7w}&AZ>U2Y8T&c$h~> z^Bz-Y@HkKKBu|m%J)_R#S)Sv0ULehTNqw1Fyuz!zMw<7A`X+DjHt+B*Y2N$l2h8R} zKH_82yie87_?$2JlCMbfzES5emwC)*0cqa1>UVt45B$haqr2D_8 zdE2Vnu{}GmBRi4irS?C&uq(TYf_8a z)S)hEUVXIz4Qa$797>wkSZzX6n$esVq*0kYpj-V}RUVF6zN79j_IGQxCliHas zbfp{JN%M|VdvH8G=|ykSygurQ^ravD89D5uCzEPUSSxyiw{I zoXJ^?W(;ZGIqJEb$5_U3K55>C>P1}4C0xp7Tuz#QrFs=ta}C#W9ckVT>Ubt_BR6p~ z6G`(Yskbtj+nB;sZYRyZQ=P_LOy_Ry;a<}G`_%_{kcW7fM|hMpe}?)vPw*s9@ifnn z=0B@G$Md|vi@e0kr1`I?uksqN^9FD77HR%F>btzh`+UG`J|xZmSp9@g`Hau`f-gz) zzgE9t4s)5ud=`-Af2)4S_x!+*{KU_s`M;{a@jHw7gFpEzF+amOU=uba4|&N)e$xDc zY9ThGFhwXzG1B}J>gJTB6kAZ5GNk$C)beae1-7ChTa)HjQnzJ0wr2-+WGB-6%IYrc z%5Ln=9_&e)Uq!9T-t5D^?8pA3`3I`iIEd;TObu$1=GRv1P?vhtrvVK~^AAxE31Ke_TYGW(u>}lKp)aF zebs*SX8ot41g9{PQ%TF5u8!gi&g3jcGlsKC%bcs8$5_U3J{NEy z7m=2^M7@;DxST7vlB>9yw9K{YbzIL4jAsHjauaEpiRvv(;#MYe8&jA{TILS*PNs1e z)47{_xRY(pisWjnTK2XQy9sqoW|*l;tbB@ zEJibivpI)zIghc7<9sgQLN4NBF5yxx<8rRxO0ME+uHjm)<9cpjJQKK)o4A>Y+`=So zWiq!hg{j=m9o)$@?qWK3a}W1&ANP~?%?H)*3)uhFM|hOSn88BRpHQFVDW2vTX7Vi0 z@jNf^A}{eWvv`G9d5zb3gEx7Lw|R$md5`z`fZ2S=M|{jDe9C8h&KG>iSA5Mk%waC` zn9l+h@-5%-JwNaxKk+la@GHOZJB#>(KlzKrWcb@RVN>#umwe=>00k+;W)!9fMJYyc zO0YR4Da96)rVM2%M|rlS0$Wj$t=Wc3Y|D0R&kpR!PV7u&c41d`V|VsoPxhh;RoR<; z*q8m-p946MY8*s$4yFb*sYPw-P?vhtrvVLV#33BYVKk-*O=(7RTF{bKw5AP*a|CT^ zM|(POBpo@5qdA67bfybk=|*>sot4 z1g9{PQ#p;(8O0f#$ytnM3}G!IfOa)m+21T*vj? zz<4HbBR6p~6S;*++{$EbV+vEbojbUbY23wh?&coupJIq{qy~Pmavp%{Kj%tu##1*W({ju$9gufkxgvoceb#VZT!J@ zcCeFO>}C&p*~fkkaF9bB<_JeQ#&J$?l2e@K3}-pVc`ooL7m5FCm-Wj3oL|*z+`_m1 z*Kylpceu+v{^4KZ4gLfqBoT>8LQ;~EoD`%a6{$%>TGEl83}hq|naM&{vXPw}5QQm1QHoKV5|ku<@6uX^vXrAd6{tuhst|vGs#=W)s7?)PQj2(= z|Lf7f&o!hGPx2IvX+l%tIh$#7TJQ|d(vns@M{HVa8`{#27idohUL-azYezcKnOEpS zSGp0K?%IQ%^x`#o(}%vqrl0m_00Vi0K@4UHu^Fnv7|saZVkDy&O>D;KSjI7)cX*cx zOe8k%>m(*Kg%6m@G^P`qk8}nz`It}mlv#X6Y`)Oh%;8JEVlMOen%I1+^ZAbN`GEy2 zM2fhhO?aGJQs+~MZLsjuJ9LExyE&3b3<=(i`(4cF8BB+ z*u;l>5|EHYBqj+-Nk(i^Xi8F%nlz*(9qEZpM$JTKvXGT*WG4r)$)&l;LtgG9ANeUj zYzk^23R8rl6r(sLh)pRiO&Q8kj`CEXBC)BgRj5ie9-ulks7Y*UYaJe>E)P+U`aDc* z9@WQqoF`~NLmKfUv1zPLXv)(xqd6^jhS;>!Ry@b^w5APhX-90@YX@HBC0?c@o#;$# zx@cFr@haWvK~H)So8H=ozPwI9`ZIum#Ac8VW(aRGlwk~K1hE;ZqZrNGjA1O}7*A~8 z)d@`GJ>F*$lbJ$nrs_1N^C2HGgPD9xY(CXle8%T|!EEO6C9#>S^Z1%?_?G#6$M?i$ zfiC1ne&S~qv6x?o%@SS8GJaz@D_F@YVzWlqvX1p^U?ZE@Ol-F3R<`j6+u6ZRb`hIB zx|e-^0PZgPv;#OAKv zi*x=ZKG>Ilgd`$1Ni-?RNKOh;l8V&CCatC;JsHSICNh(S*kse}RN-E)S@X4 zVIJX89^-MIAT|xP5l`|IjcGzto+dWUwFS@cEG=opb39LM+Gtza@dEAXz>B;@Y&vQu zI`ax$=t?(UB{n^@C%t%$-t?g_uM?a8I)H(^!5{`Rgg1%JFdfba-eM%97|q+nW~`25 zJn!%>6PU<*#AcFCW(prLm1#`pLt-;SXYw(h@F}zSjL(V9Y@NfGe8pVm@ipHNoB8@3 z-}3_tSjdn3L~Iu6Vt(OQmavp%{6=h6=t@?xnl-Ft9qWnBM%~0_erF3?*~TBlW{2)% z7rWWRUiPt{*c{YD9Oei|ImU5L5Svqanlqf`9Ot>fpTy>pUgipaag}Ra=Wk+jQ*Uvb zJKW_S|L||rCP6B%e-e?HBqSvn$%#!$O+{+bkd}0$Cj+s`q?yS=RPRjTm-)u};EY7v_{`XF_A zh8jm$mG1PQC%t%$*!0o9yiPy*Gk}4-L2L%=5Z+`c!x+v8-Xb=mbTn@> zhOvxeJns;j2|AJYc%Mm3W(pq=n`t_o5BZ20%;aM}AvXUB$12ydnl-Ft9qZY^M&dd* z>+ft~E8F;k?d%{nyL2~u*vmflbAW@y=CB^&D91R?2~Ki~*qqU`oZ~zf_>+rVA~sj_ zFRpTp>-^0PZW5c@dWXB*i^uqv_&|RGVv|S{lZ2!sBRMHZNo-PU8q$)E^kg6-nTSmm z%}O@1lY^Y(A~&(gtM`$Q{1o7R3Q~yJ6w#s-qc|lfNhwMbo3dJt@>HNAm8eV=VpB~Y zpgJ|ENiAwqhuGBBhp0z=9_A4qHAD#GE?|~sZ1j_AL>WUU?v~)37;~H*nF;E zFq=7i$ydx}9?Jn)^#BJs#9@wblw-u^gr4LSr#Zt}&T*dD{HYhY z#AUAV7gxDPZ2s08+~gLwxx-!V5u1NCZlp*+LK2afBqSv^$u$KjNkwYXkd}1BCWB@q z6Pd|ERnuUeNY*;6+~IWjfM{*u0`$=t?(Ur8_<7No-!z-t?g_uhWnI3?Mdd=pY6& zgf|(=FoqMGw{#?<7|q*^VJzc_%{%%o6PU<*yw4;i6PpioD$|(GhkV2gW)hoE^iyW> z8K3h7vzbF|zS6nO<7>X*Tjui}vH3w4u#g}5iJw`-Vq){FE@3Il_>JYPU?s6xt!r4z zI@Ys+jcg(|zv~vZvW-93&JK1Go87vHz3gK@2RO(fVsk`~a*X4g;3TIwO>EBUInHx| zKe@;yE)$!-^eWf5&fnbNCbx*q9lguF_?mx-8~GBDkk};FBqSvn$w@&RkM+u9ONVyxyeIp?$dnarvUd;kU|tDHbu1<#VJ8aN>Q3J#HO5)u};EYEhdyJV2h$nf9#x$WRv1z8wX~8o* zOG{eu9In7UZ6c4c#+t=tR3k@XI`NTUFk+_x@!-5(u>#VO&|Ian||7#0Sx2~ z1~Hf+#Ac`tV>lyti;;|CG_e_@V;RSI-r-#)Fp=22ualU}6h2@o)0j?dKGGS?;I& zHLPVFvDu&-*~DgkXA4`|Mr^k04tBDO-Rxm6`-sf}J;)&rbA+QD<2bQ7si!#28P0N! z^IRY{7xfaCxx!yu$C%?-WDEpBs%yWHcSU=ug-X-ym2(vH})*ABeMOT0`+I?Wd%VviCNqWDOx0;j=R-bX1~d7X z*nFz9_>9l_g4xXBOJXxu=kYb)@GbNCj_--h0$s?D{KU^JVllrEnU6t!(2DwzGqs>>@UMbT9kZ&jAi{h{MF@s2<}uCpgI|PIHFX zoYV7M;7=}ciOXCeHdpl;*ZG?p+~gLwiOpTT7w7!Tf2H^OCn1T5O%hE?GLn;ml%ygx zu}Q1xNKXbbl8MY@AvW1GJ2}WnE^?EHyu>D-=BEJnQ;7XJ~0wfe6 z!4R6R8Vkx=aqVjZ1x3W(JNB*t`>wjy6?I)%b-Sx?ZVJWS{l9(h`~AM}3(n1)I%m#3 z=giz>Vkzjg0&o>zfgsG#8~~;oQ)vK!vOKYWQdk79s-##_=8vHuy8^kq)Zf#yva-^n z(#Jz8%lGv1^YioMdwY6&yJHUbvTBK3SmiD$v$q?@Q)vhjmF3C`OXY=936F$@Inr`@ zke!`IZB>x;zbk- z%L;g*$%A+aGO1WpR)&WV76*EM&fQC16o%U{Z@w4bo$u}L<&)y=?eFE|?>oeuKiHqo z?c}rLq#Ce3-Dbw74)=NGkNKaxW{8 z=8mrvR*2liq(3O~Nyajs2f*a!HA&mb*-zBohD6++``%r6SKHQJJ({mMg;S z_L?Axjm5Ue3M)i;5i)6s%9c{0tV~4m2ia)_NM_Y2{)LhNVAK5oj!MG--Au1F%{ zc>xS(dg_n}S_pE0s&8K3D2)Fm&E(vK$Jd9wI-)p6+d6;5*mGW~hK{LWvpIII9tGw6 zl=Vv�&FAU3WF-;u@ClwaHD}1r5X5Qt?H6v>t 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 M^&`gr1*OF1FTY>zumAu6 diff --git a/minplayer/skins/default/mediaPlayer.as b/minplayer/skins/default/mediaPlayer.as deleted file mode 100644 index cab52ccb..00000000 --- a/minplayer/skins/default/mediaPlayer.as +++ /dev/null @@ -1,14 +0,0 @@ -function initialize( mediaPlayer:* ) -{ - backgroundMC.width = mediaPlayer.stage.stageWidth; - backgroundMC.height = mediaPlayer.stage.stageHeight; -} - -function onResize( deltaX:Number, deltaY:Number ) : void -{ - backgroundMC.width = backgroundMC.width + deltaX; - backgroundMC.height = backgroundMC.height + deltaY; - - // Now resize the preview. - preview.resize( backgroundMC.getRect(this) ); -} \ No newline at end of file diff --git a/minplayer/skins/default/mediaPlayer.fla b/minplayer/skins/default/mediaPlayer.fla deleted file mode 100644 index 61eda11f01e666ac319ee8e052c60ca7cd1d585d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 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 diff --git a/minplayer/skins/default/playLoader.as b/minplayer/skins/default/playLoader.as deleted file mode 100644 index 2b38e949..00000000 --- a/minplayer/skins/default/playLoader.as +++ /dev/null @@ -1,24 +0,0 @@ -function initialize( playLoader:* ) -{ - backgroundMC.width = playLoader.stage.stageWidth; - backgroundMC.height = playLoader.stage.stageHeight; - - // Set the x position to the middle of the stage. - playButton.x = (playLoader.stage.stageWidth - playButton.width) / 2; - playButton.y = (playLoader.stage.stageHeight - playButton.height) / 2; - - loader.x = (playLoader.stage.stageWidth - loader.width) / 2; - loader.y = (playLoader.stage.stageHeight - loader.height) / 2; -} - -function onResize( deltaX:Number, deltaY:Number ) : void -{ - backgroundMC.width = backgroundMC.width + deltaX; - backgroundMC.height = backgroundMC.height + deltaY; - - playButton.x = playButton.x + (deltaX / 2); - playButton.y = playButton.y + (deltaY / 2); - - loader.x = loader.x + (deltaX / 2); - loader.y = loader.y + (deltaY / 2); -} \ No newline at end of file diff --git a/minplayer/skins/default/playLoader.fla b/minplayer/skins/default/playLoader.fla deleted file mode 100644 index f5d0cf7787226c9f39331cda7ec84e15535909c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97280 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 WwJ`(9*lkundYk3H8U6>_{3BB198_rl diff --git a/minplayer/skins/goldstandard/controlBar.as b/minplayer/skins/goldstandard/controlBar.as deleted file mode 100644 index e4a077b2..00000000 --- a/minplayer/skins/goldstandard/controlBar.as +++ /dev/null @@ -1,78 +0,0 @@ -import fl.transitions.*; -import fl.transitions.easing.*; - -var mouseTimer:Timer = new Timer( 4000, 1 ); -mouseTimer.stop(); -mouseTimer.addEventListener( TimerEvent.TIMER, onMouseTimer ); - -var controlTween = new Tween( this, "alpha", Strong.easeIn, this.alpha, 0, 8 ); -controlTween.stop(); - -//Hides the menuButton on the controlBar. -//menuButton.visible = false; - -function initialize( controlBar:* ) -{ - // Set the x position to the middle of the stage. - this.x = (controlBar.stage.stageWidth - this.width) / 2; - - // Set the y position to the bottom of the player.. - this.y = (controlBar.stage.stageHeight - this.height - 10); - - controlBar.stage.addEventListener( MouseEvent.MOUSE_MOVE, onMove ); - mouseTimer.reset(); - mouseTimer.start(); -} - -function onMove( event:MouseEvent ) -{ - showControls(); -} - -function onMouseTimer( event:TimerEvent ) -{ - controlTween.begin = this.alpha; - controlTween.finish = 0; - controlTween.start(); -} - -function showControls() -{ - controlTween.stop(); - this.visible = true; - this.alpha = 1; - mouseTimer.reset(); - mouseTimer.start(); -} - -function onResize( deltaX:Number, deltaY:Number ) -{ - this.x = this.x + (deltaX / 2); - this.y = this.y + deltaY; - showControls(); -} - -function formatTime(mediaTime:Number) : Object -{ - var seconds:Number = 0; - var minutes:Number = 0; - var hour:Number = 0; - - hour = Math.floor(mediaTime / 3600); - mediaTime -= (hour * 3600); - minutes = Math.floor( mediaTime / 60 ); - mediaTime -= (minutes * 60); - seconds = Math.floor(mediaTime % 60); - - var timeString:String = ""; - - if( hour ) { - timeString += String(hour); - timeString += ":"; - } - - timeString += (minutes >= 10) ? String(minutes) : ("0" + String(minutes)); - timeString += ":"; - timeString += (seconds >= 10) ? String(seconds) : ("0" + String(seconds)); - return {time:timeString, units:""}; -} \ No newline at end of file diff --git a/minplayer/skins/goldstandard/controlBar.fla b/minplayer/skins/goldstandard/controlBar.fla deleted file mode 100644 index dca6a468551172d5225c6f95c7252a7c8a3d4f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769536 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 co>72otoW|vI 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 F{{V+UO!@!- diff --git a/minplayer/skins/goldstandard/controlBar.swf b/minplayer/skins/goldstandard/controlBar.swf deleted file mode 100644 index 311e1f2baf7fef8454535ce70130da5e0fd65e27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11242 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 U5#U*h;oslV|AXiM00)u7W_wWu-~a#s diff --git a/minplayer/skins/goldstandard/mediaPlayer.as b/minplayer/skins/goldstandard/mediaPlayer.as deleted file mode 100644 index ba2093c6..00000000 --- a/minplayer/skins/goldstandard/mediaPlayer.as +++ /dev/null @@ -1,14 +0,0 @@ -function initialize( mediaPlayer:* ) -{ - backgroundMC.width = mediaPlayer.stage.stageWidth; - backgroundMC.height = mediaPlayer.stage.stageHeight; -} - -function onResize( deltaX:Number, deltaY:Number ) : void -{ - backgroundMC.width = backgroundMC.width + deltaX; - backgroundMC.height = backgroundMC.height + deltaY; - - // Now resize the preview. - preview.resize( backgroundMC.getRect(this) ); -} \ No newline at end of file diff --git a/minplayer/skins/goldstandard/mediaPlayer.fla b/minplayer/skins/goldstandard/mediaPlayer.fla deleted file mode 100644 index 61eda11f01e666ac319ee8e052c60ca7cd1d585d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 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 diff --git a/minplayer/skins/goldstandard/playLoader.as b/minplayer/skins/goldstandard/playLoader.as deleted file mode 100644 index ca965b6e..00000000 --- a/minplayer/skins/goldstandard/playLoader.as +++ /dev/null @@ -1,24 +0,0 @@ -function initialize( playLoader:* ) -{ - backgroundMC.width = playLoader.stage.stageWidth; - backgroundMC.height = playLoader.stage.stageHeight; - - // Set the x position to the middle of the stage. - playButton.x = (playLoader.stage.stageWidth - playButton.width) / 2; - playButton.y = (playLoader.stage.stageHeight - playButton.height) / 2; - - loader.x = (playLoader.stage.stageWidth - loader.width) / 2; - loader.y = (playLoader.stage.stageHeight - loader.height) / 2; -} - -function onResize( deltaX:Number, deltaY:Number ) : void -{ - backgroundMC.width = backgroundMC.width + deltaX; - backgroundMC.height = backgroundMC.height + deltaY; - - playButton.x = playButton.x + (deltaX / 2); - playButton.y = playButton.y + (deltaY / 2); - - loader.x = loader.x + (deltaX / 2); - loader.y = loader.y + (deltaY / 2); -} \ No newline at end of file diff --git a/minplayer/skins/goldstandard/playLoader.fla b/minplayer/skins/goldstandard/playLoader.fla deleted file mode 100644 index f5d0cf7787226c9f39331cda7ec84e15535909c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97280 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 Y;-fZZAQ`*O=8fKFg>Q!c0UhNc_JzV%4gdfE diff --git a/minplayer/skins/shockblack/controlBar.as b/minplayer/skins/shockblack/controlBar.as deleted file mode 100644 index bdc7eba2..00000000 --- a/minplayer/skins/shockblack/controlBar.as +++ /dev/null @@ -1,216 +0,0 @@ -import fl.transitions.*; -import fl.transitions.easing.*; -import flash.external.ExternalInterface; - -var mouseOverVolume = false; -var mouseOverControls = false; - -var mouseTimer:Timer = new Timer( 4000, 1 ); -mouseTimer.stop(); -mouseTimer.addEventListener( TimerEvent.TIMER, onMouseTimer ); - -var volumeTimer:Timer = new Timer( 4000, 1 ); -volumeTimer.stop(); -volumeTimer.addEventListener( TimerEvent.TIMER, onVolumeTimer ); - -var controlTween = new Tween( this, "alpha", Strong.easeIn, this.alpha, 0, 8 ); -controlTween.stop(); - -var volumeTween = new Tween(volumeBar, "alpha", Strong.easeIn, volumeBar.alpha, 0, 8 ); -volumeTween.stop(); - -// The ControlBar object. -var controlBar = null; - -//Hides the menuButton on the controlBar. -//menuButton.visible = false; - -function initialize( _controlBar:* ) -{ - // Store the controlbar object. - controlBar = _controlBar; - - // Set the y position to the bottom of the player.. - this.y = (controlBar.stage.stageHeight - this.height - 5); - - // Hide the volume bar for now... - volumeBar.visible = false; - - // Set the full and normal screen buttons. - toggleFullScreen.normalScreen.visible = false; - toggleFullScreen.fullScreen.visible = true; - - // Add an event listner when the mouse is over the mute button. - mute.addEventListener( MouseEvent.MOUSE_OVER, onVolumeMuteOver ); - mute.buttonMode = true; - mute.mouseChildren = false; - - volumeBar.addEventListener( MouseEvent.MOUSE_OVER, onVolumeOver ); - volumeBar.addEventListener( MouseEvent.MOUSE_OUT, onVolumeOut ); - - controlBar.stage.addEventListener( MouseEvent.MOUSE_MOVE, onMove ); - this.addEventListener( MouseEvent.MOUSE_OVER, onControlOver ); - this.addEventListener( MouseEvent.MOUSE_OUT, onControlOut ); - mouseTimer.reset(); - mouseTimer.start(); - - // Add event listener for the prev and next buttons. - prev.addEventListener( MouseEvent.CLICK, onPrev ); - prev.buttonMode = true; - prev.mouseChildren = false; - - next.addEventListener( MouseEvent.CLICK, onNext ); - next.buttonMode = true; - next.mouseChildren = false; - - // Add an event handler when they click on the menu. - menu.addEventListener( MouseEvent.CLICK, onMenu ); - menu.buttonMode = true; - menu.mouseChildren = false; - - // Add the callbacks to control the tile. - ExternalInterface.addCallback("setTitle", setTitle); - - // Set the size. - setSize( controlBar.stage.stageWidth ); -} - -// Set the title of the control bar. -function setTitle( newTitle:String ) -{ - title.text = newTitle; -} - -function onPrev(event:MouseEvent) -{ - ExternalInterface.call("jQuery.media.loadPrev"); -} - -function onNext(event:MouseEvent) -{ - ExternalInterface.call("jQuery.media.loadNext"); -} - -function onVolumeOver( event:MouseEvent ) { mouseOverVolume = true; } -function onVolumeOut( event:MouseEvent ) { mouseOverVolume = false; } -function onControlOver( event:MouseEvent ) { mouseOverControls = true; } -function onControlOut( event:MouseEvent ) { mouseOverControls = false; } -function onVolumeMuteOver( event:MouseEvent ) { showVolume(); } -function onMove( event:MouseEvent ) { showControls(); } - -function onMouseTimer( event:TimerEvent ) -{ - if(!mouseOverControls && !mouseOverVolume) { - controlTween.begin = this.alpha; - controlTween.finish = 0; - controlTween.start(); - } - else { - mouseTimer.reset(); - mouseTimer.start(); - } -} - -function onVolumeTimer( event:TimerEvent ) -{ - if(!mouseOverVolume) { - volumeTween.begin = volumeBar.alpha; - volumeTween.finish = 0; - volumeTween.start(); - } - else { - volumeTimer.reset(); - volumeTimer.start(); - } -} - -function onMenu( event:MouseEvent ) -{ - ExternalInterface.call( "onFlashPlayerMenu", controlBar.getSettings().id ); -} - -function showControls() -{ - controlTween.stop(); - this.visible = true; - this.alpha = 1; - mouseTimer.reset(); - mouseTimer.start(); -} - -function showVolume() -{ - volumeTween.stop(); - volumeBar.visible = true; - volumeBar.alpha = 1; - volumeTimer.reset(); - volumeTimer.start(); -} - -function onResize( deltaX:Number, deltaY:Number ) -{ - this.y = this.y + deltaY; - setFullScreenState(); - setSize( controlBar.stage.stageWidth ); - showControls(); -} - -function setFullScreenState() -{ - if( controlBar.stage.displayState == StageDisplayState.FULL_SCREEN ) { - toggleFullScreen.normalScreen.visible = true; - toggleFullScreen.fullScreen.visible = false; - } - else { - toggleFullScreen.normalScreen.visible = false; - toggleFullScreen.fullScreen.visible = true; - } -} - -function setSize( newWidth:Number ) -{ - var bgWidth = background.width; - toggleFullScreen.x = newWidth - (bgWidth - toggleFullScreen.x); - mute.x = newWidth - (bgWidth - mute.x); - next.x = newWidth - (bgWidth - next.x); - duration.x = newWidth - (bgWidth - duration.x); - volumeBar.x = newWidth - (bgWidth - volumeBar.x); - menu.x = newWidth - (bgWidth - menu.x); - textBack.width = newWidth - (bgWidth - textBack.width); - title.width = newWidth - (bgWidth - title.width); - seekBar.track.width = newWidth - (bgWidth - seekBar.track.width); - seekBar.fullness.width = newWidth - (bgWidth - seekBar.fullness.width); - seekBar.progress.width = newWidth - (bgWidth - seekBar.progress.width); - if( controlBar.seekBar && controlBar.seekBar.track ) { - controlBar.seekBar.track.width = seekBar.track.width; - } - if( controlBar.seekBar && controlBar.seekBar.fullness ) { - controlBar.seekBar.fullness.width = seekBar.fullness.width; - } - background.width = newWidth; -} - -function formatTime(mediaTime:Number) : Object -{ - var seconds:Number = 0; - var minutes:Number = 0; - var hour:Number = 0; - - hour = Math.floor(mediaTime / 3600); - mediaTime -= (hour * 3600); - minutes = Math.floor( mediaTime / 60 ); - mediaTime -= (minutes * 60); - seconds = Math.floor(mediaTime % 60); - - var timeString:String = ""; - - if( hour ) { - timeString += String(hour); - timeString += ":"; - } - - timeString += (minutes >= 10) ? String(minutes) : ("0" + String(minutes)); - timeString += ":"; - timeString += (seconds >= 10) ? String(seconds) : ("0" + String(seconds)); - return {time:timeString, units:""}; -} \ No newline at end of file diff --git a/minplayer/skins/shockblack/controlBar.fla b/minplayer/skins/shockblack/controlBar.fla deleted file mode 100644 index 4b6aae96f702c6ae00bed905a9d3993f38b70012..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2302464 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

-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�v_%e>nLb) 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

PZ+9tLM-ocTL0ixJ` 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

?l33L4titDvoQiWaCD=ZYEq6Go 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 diff --git a/minplayer/skins/shockblack/mediaPlayer.as b/minplayer/skins/shockblack/mediaPlayer.as deleted file mode 100644 index cab52ccb..00000000 --- a/minplayer/skins/shockblack/mediaPlayer.as +++ /dev/null @@ -1,14 +0,0 @@ -function initialize( mediaPlayer:* ) -{ - backgroundMC.width = mediaPlayer.stage.stageWidth; - backgroundMC.height = mediaPlayer.stage.stageHeight; -} - -function onResize( deltaX:Number, deltaY:Number ) : void -{ - backgroundMC.width = backgroundMC.width + deltaX; - backgroundMC.height = backgroundMC.height + deltaY; - - // Now resize the preview. - preview.resize( backgroundMC.getRect(this) ); -} \ No newline at end of file diff --git a/minplayer/skins/shockblack/mediaPlayer.fla b/minplayer/skins/shockblack/mediaPlayer.fla deleted file mode 100644 index 61eda11f01e666ac319ee8e052c60ca7cd1d585d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 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 diff --git a/minplayer/skins/shockblack/playLoader.as b/minplayer/skins/shockblack/playLoader.as deleted file mode 100644 index 2b38e949..00000000 --- a/minplayer/skins/shockblack/playLoader.as +++ /dev/null @@ -1,24 +0,0 @@ -function initialize( playLoader:* ) -{ - backgroundMC.width = playLoader.stage.stageWidth; - backgroundMC.height = playLoader.stage.stageHeight; - - // Set the x position to the middle of the stage. - playButton.x = (playLoader.stage.stageWidth - playButton.width) / 2; - playButton.y = (playLoader.stage.stageHeight - playButton.height) / 2; - - loader.x = (playLoader.stage.stageWidth - loader.width) / 2; - loader.y = (playLoader.stage.stageHeight - loader.height) / 2; -} - -function onResize( deltaX:Number, deltaY:Number ) : void -{ - backgroundMC.width = backgroundMC.width + deltaX; - backgroundMC.height = backgroundMC.height + deltaY; - - playButton.x = playButton.x + (deltaX / 2); - playButton.y = playButton.y + (deltaY / 2); - - loader.x = loader.x + (deltaX / 2); - loader.y = loader.y + (deltaY / 2); -} \ No newline at end of file diff --git a/minplayer/skins/shockblack/playLoader.fla b/minplayer/skins/shockblack/playLoader.fla deleted file mode 100644 index f5d0cf7787226c9f39331cda7ec84e15535909c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97280 zcmeHwe~?^9eP@qW(yoMM$*>{V#xNGd$j07X?Mkv(FZyB0vJ}bI+AD*Bn0Td~kv5Wc zH@hoatNdWXg%o!oS0wmy8LAR|A(tYqa78ZsL5>Th+WxNe}8wse%)XE%NxG>AO7H`uNm*!Wjf5| z+B&l~a(|WmU*PX1WBv#~yjR1;Tc1VvuQtwmE7$VJz{6$|pIK8h_n8U&PMbMUaPIi@ z*y!Bs(CqZdUF+7B=1Oy;(})*`dgl`#p-J_n+4EVf1{fgnqLFpMG<R*lAjp{d_x#899 zzxyp9@8939^#geY(`EJzkDnMGJy{|#3uc|fkBrWhrlU6wOpl&L4!J7$Mu2)CGTxA{I&{>5~3<6g}?Z(i&+Kg7M4%y+v{@&4h1HGn zKQz~ym;QJd41oX1`o_T>u-v`Wp*<^mq{9EMgK+1aa zJpy{!Y&5lQl>@Fog$cbm)j`<&_CWIl*ab(?SD#&hO5 zHtk!8KDWu7*UonRMQx}65S?iG_3T0?`hs46A348kUfyJWOS~_UNAbp{oU`Qe)qc_c|RPfzrSJqD)E!& zN{7b+?Gta2tDk-61<>`^d!B!j$e;b4L5|bbn6m%d>*^nX{8Rr_{$!K+-vh;eO^{ab z3Y9 zH;sR@W?bxaG#4#)$vFSv2yz`qTp^7Bil$Su5bh*W#(=&_z#K=K{y&Qt?Y~<8VX5hq zw51=Vc7e@?OfO(fqCL@^Op&XCZ-mBXNOHNaTR`mFG(xiD0`Kicu-wO+TdB?L#rsJY z?^^&Z(qAp?$SJ7OHFO=M7l}Q2-%GXH!OOLpWGh%5tG~mxZH0pApb#1JJOpf2=Tyf> zJCCn6edQPVZOqXBvl$cXDTwQGx%P`g35YHN@g4SyD{G)? zCVmv&=M4lIQPp8Z*32*+S00JE$-2_aztE0#Qjg4mnWhaj2b#qm9mR*xU6<@{1-B47 zX;&6>#fk%>L-Xn>Xf3wKqP99PA8Ut?+V=sY{~iP57-|_UL==473dTs&LiqqG#8X5s zDN3>}=8FE`t$1_3K$H5P)Qz)W1vd~VrUCze!APD2{-H2CF1r_MbQT|4#F(2w{w(kg zaxb!)z8_FiF8X>K%)b4TC(fNMP0VtLc;oeHV`j7vV~VKt7wEVxSfX)_N*n+G-9OG9 z{(`+pH{Q8ms!VLRW17W5AWk*mzHfZ=Fza9t)G-S~ivWXSY)?=ffOoJ4cQua0+7T_{ z;6?B8KZ7;I4tfQDqQTu)M;dCRa^v-B!v}!8?kq@gFI1TC$&%Ywu}=0ai6~#cJa>4n zdM4>O>>7c7JPY5C9v*eJy8^5QMEa|L_ph#eBC&f!oV_aejRt!=AWnR4DV*B@h;<~+ zi1@=3;sZ|$HB!m)p0EA$p`%tebP~gCiVd$C1EFW&z5gUAF^T_UVn=E7ndSB#(_;n^ zV&8cT{7+y?#$Bu{>EeAyai&NAI|PYJ97m_A;E;vlTdxuYdIjGIogEQCi0^q7I`ab3 zhAv(<=Hlf&g=>BM0bHaY+gTP+BN^FN!n6GZsmFeWgH_%LM$x~#CCp@5a&43mE!&2f zFmAzRIfd~a~{*j2@>=A9c+1vvMXhyuUDYM1gj(E})WnHFQuGXv-{2);O#U#S&K!13n zg`C#xTpa;6i-vQ0CK!3QF#jOn(HvF)(;sbV_7 z7ZVFVzsvM}{t^7=nCJI6*Zr&ifbWkZ>5f0cA2a#qnCSjE67!8D|MCvWDqlos(v=s{ zuhdA=OKwHR)^iVsemkyPWAI`#d0uY8?5Z z{~yNPlgLLWu(v_?doiL&N6mqczV{&UOezIf5VBlbLqQ$8*-5(>t^VBeMxy2t2b8~3 zI0Y0%L)7c4)k1L>>nQ46)H*N516{IuEkRdv!}pMpFEft+5Xn_=ZaB~TJ$KwQ%^kw#djkL zbbK0Lc(ic2cEcGFQqCL9nImEkN-|XC9a@Kz%!S^v0l&-tw+_Qf9Ea$Si&D5BzhwwF zpPlJLBtAkaA#D&JKImZ$oa`z=eT>Re26hOc7>D#Q(%)$gH-t4K@aYlt<3Z{UHu%w3pv>47TNHlo&I zyuOFbv4-`86YhN6=N|L{23y|*oV{qv6xyJV4Lvv>Hq+YkfMA7Q?gPM*+Qa?m>si6( zR(`+Qr|Tnv?+1aUS@Wde_H>B*oBiDTk?%ODdlDbzWpV(G;90>bc``z~hFnCsIF3@J z`<%~3o8OGV!d_rxN*;PnKpMtT-|aAYdxa;}0CK8y8Y#p)7h?3lt?mUT30b)D4RJ~; zw-6S2q7m;*piO*k2V8Zsx1kS*J2%H6W^p!$M3iBaEC}{*iI>mA%RhzkH2Q?m$M2is zFw*$po#^Wruycy#I<`Z`1;U%-5QZTi_cz3c<80FR0$Rey(43i=Rvc@;Zi_?AuXjcO zl^T&0IRp)}A8iSG+BDP<*25wRCGZOes^pgd>W|d(^dvaxoKT&*VINvU_e^+*<$lyJ zaUT{Pk<+Kqc4}kFfDVFr4<$AnurN-=Qno7oJ&l&dMRXJ=A)Cig*GcGe%FF~Le8zHx zaMoMm6v%?9a!fi>mn+^>TWY@oY`wlYxYVxHt!fQ~+qN|eVaB#6E`8LIA%9)+^_nfiiUHfk4X%z;AGShOm@WY-p8`F3zgKj_a7?!76F zm8=?c%t%hSSMclj8<19W`I&|KI-gUcI+AwwoY0$?RenYJRa>DK@cUZ7EG3;wM>w{k zG!!FN1^E?Ib<#wCprL=jdOWGlqXWa?I9T$f9`>UdVYRO)BfmjmcgV9~WVb^81e zutsl*numTk{o2sC3$Wn%6InX;AxImo1F1A8xZK9?Epc3CL7`NVCVcioXw-w$Efayg z3fkw{^?V#j>ziMyrckf=A}x3_)P@`f1nu>BA>9v&TBihV_oO_FuR@JYDW3suohPZj zCECb#)^W;F@CoU`++)HgBaj(g;TW-bp6q4Om~9~c@zFo2MlXa|5=(JcoL}-#l_N9G zt&;O~1ec-9Jd2s;Q>tg9qfgN_DpQ_pq|;Ju7~4eOUF_}+{m>J4LHZ~yMd)tTZAIaC z9UB27UOUrkNwn-9&*j&!q%$Rt({llB-WaD%Iy7n-^L-U=PN9WPz<^Ug-!iq~nORXf!KsmrOgv4ylwLEAixW%DxisGA<;H0A{4 zgV01{-x0@H7PNz6kvQ^DsmRcP{mnsF-Ab)b=;TM&d%bfAUcg>R<|uNIW@;M(%xv;; zeGCxjF)=S81v$N5wnsg;JFhR^Z=!VwSY*Q!rkKlY~Xo@hcNaV#o&)EjH$;XxfYWmvwxxR%ccH+e=O zqb864)BJrmvw5E#`OJCTA@pcjM<;sK9<(g}S6<}1W;#zbE-ejsrB1)Zd3^-dHZlWq zlP@X6Wc?Eloga2~8g)@a)s;O8Z&1fG$3&v&^K(Q)|5{}tGM4a0)LBw-5U?V1j2+uV zH=`9zN>>99#+w1n!;8+p%WvaZLS_?gZ=Ul*t)9W_p2w4}om0kW9$wRZhlbSgyvr=! z9s!N{)Ft5Nx)}+5ey8(ZZjO>(TR6f@n*35W;YVi7 zUy~#^ZcZbdBMJK9>Ch~0_eWL3`hdLj?Z`Yr?XBjQb{?uDKon>})I4%J#8qA%Kf`6vSb1jVWPN6rP<%?4zQm6U= zp0>-QU);zv;2}>U^S}t^FV&Cmq%qA7Hk4>jQ>N>ehrvlYvMJ%2E4?f}H_}&lBeuZP zS?Ril)IIM%m+jz+4tcKQNm@EAwNqTdNDV?=K<-Q!`!v-;H^wH8%} zaJ7o)sq201Lp-}D00FkooN|CyZ&dW`L{8a--P`2SJn1ZaO zs+*-H^w^jR&u^uT-G065u~XVOqD#O_oiCyN;T*tOlp!ZYpZ}8HcawWOtr>-_zIgqr zHO~D6{Nm~DbdA|i?|Q9Bhmz0BP3PR4y1V6PrQ0!+-yeNe>ei9q84D}v& zV!n4osLr`-ZcO3LU*F>MR+Lk6!l+wI799sg*D2I-cwvCNQ}?Vl>_rN%dc2mUJ=qS< zfJHp+MH!W=N15Rhd2LPeMw~@e&oYoK?>R#n1f?2tgxd_UMn8@E7tM3 z`nhUf-8yU+o6(-VaUa_CASiYSBU-*GZ~$wkSneQRrr(P#vX0^3QTP;xWS#Nb@yaN@ zX1;sN7evvIJL6g+OGaq9)b3@C&;lHJc+bNdZnnXV_9C3v;2nY)Xn(E~K&>s*S3hf` zKEp!#Fa{il>(^Zmbe;hkm6y(3+m~Tp!aZ!jX!h-!JTp1Hzf@k0S5$&G`_@*PjKXa* zcy{+~^E$(_SdFRCK8aRc^q@rNUG#B@VnSUrpJx>B(MmHcr~!ez#X%kr$U}$<R@40=X=ZS+77Y3*(MyO5WUmZdUfjs0Omj&`Z z2e~YeNh5*mp{`s8YUR=n`lw?nQK!fmVDv*lRLT;Qnp$P*X+$mR7$ssY>KJ_-QHwf8 zKkdp62;`?-j|ME{0Cfr~KpmrxxegB07$uFQgJr`gi6X5k3*<`ip;zuGk$H?hzclT(xQ&36Np;W zF?tG7i#kR>=`s%p&hk~eu>{91h_H>9kMoA-!Iz~V1AeRO5ryZ!WKz=&F zm4zIjPC*5zW0Z1~gu3~8-LMQVASNKz7^V_++I`vG?AL>6nWjz!DT`WKqW``B~~M3*=9_vSoox8fj*M zOd4s_LUvJUGvz1=bu=u(bmlvWsADQoC;f#MLG(9*XqnLu2hl2{9}J@Nj8=lER76Z# z)G_rFK~x~KBIyEz45_4%Mg=lyq)~xP8fi3uEK%42l>HP^r6TAyL`fq}709eeumK)K zD&a2u1s{t~flRZgsRH>8K~x~KB25*@eTWKVfVGe{Dv-N^RDrxHhzjJ_ z1yO-q459*=6$vP`S0J<9bTA}!xIt=Ftku_%dXSl`)>>JeQx$8~4Y<;Us#vQnK~${O zb`V?Yt%|jx-52W53*>Jgs@=DcZRUA_yup>77sxjUQGvWAhzexVNFdh)@;@PJQAdMI z>T9Y%CXF;IkVzwr3S`nqqXLlk)E$W#1Y=}BWNh3v$g=|613uO9c0(o8_ zlb;20O(1_6QHweS6`+n$%8`_NQi;A_P3n9&z7u!vu2;_OOgO?oSd4YV%L7o@L^vx7k z0vR2#pae3B@?{dGCXl~~s6`#SKpI)DW0Z1aQO78mUs_eOkR2$2Ow~EMJ?)FR3HOYHnV~f$fVJCFtF_; zVTd4Zv{c|-dxih)E-<){k_6?Hqb>Pr+zE3>|1U~OR@+jYw0JF+WKZkrY>c6`$ZN0i z%eBXer3?J3RAIlLsgW&sX_icU%XT}G7bR+Upj_=S_T_y9gZ;5;wZCD{2+xAVF5Rwv z@0WCOwDEtLf*Fn`=J51+2=}WW!Q2Voa?+Wm88oM0Hko}79ou_uYiv7r2@a_iFcU95TBhLAu!M zv^2PgX=&XfXaXCIZ$_<~O%a{ore~Y+^7wWvXzD}Y)(Rzz*T!L(E?_#2Ta;YD1l=(_ z0K0&}*9lAxkDmFY@%s<{mpyXCLwo0vdM|jej;v|McDv@GypHszFRv?#DD{yoZ{`HlGs4m_oi@ ze4dm~55Bnt1s}7V#NDmHA3tnOKfe3%xy!=83mBUNeu%~MxJwMa32?a$TC{axdpJp5 z|B_-cXfIz);?kN~!RclXP823-7}AW7_v?Ga_Vl1_j+Q;ZJ(mLXqP1Ka#@^{>8})5= zm{eXF1ecMLeB?yT9K$!KvvQ$K|DISOXl-eS}w-G@AXnK1^MD>AEAsFpo-}L z&@@qBLnW_V*ANECC%uqjKAfYSqekc6ebkOy@!MECvg9BnjXF`64D5mi;G$c;V$3Bd z?gfEfyv#s%B(9Hj@jE3a3DRQj9S%F|_+Kw~Uxt&L?<}%z0L*v3*|XG47tC)quAFDG`3IWi>JVDJ`Y&q#x!EJy z(4w_?1U!olG&uW>h->LQIe=bczGnUzcwE@Qb|g{!usmpW?2!p2f1CUR{^f#_+l|4` zZjD91lkREy;-8;|5duvQh5`%PMf=Lx1^enfe+YafhO@czhtw_SiYd2~^3`|d)ROId z{0tK_7V-Qsg-{l_v_F59fpl1dDp%|Eoe3#`r>BQhw?NbaL?Nbbe))d3~_9=#S zZBz{3eEEf!!O*FP7Uv%*bi2WaIMGj--*3-|VQp)Qp{sq0p>wGf!#AVO{$aL)TI(hNELnE$EOTjD`QG zFv4*`I7VoBC~=ec1mBQvt_7>rGS!1ImdbxGRL^8eTrfIQY(i4I~Z30VJ!T&=!&5!l>oH?MRE-)hCi)6S};GvDD!#K z#U}x)%y-Spo6K*SKf;rMA0XvL^L*fHcjtEBzl3T0|9<%swN~fq)8`nv+Be70*}gf3 z78OIGor+-z9zIae-Q?rWBXI=~#=?KgMlq~ypU2SIK96BdYaYYu_9=#r_9=#S?Nbb0 z?Nbbx&sk<3Lt!bNN=6mKd#2+GAdH3omW^WQY@cH2YM)|Q+nQon(>}$px_ydaeft!{ zy7nms%;&VC7&_YLF|1l@#qh+@xB>`c;lE|07`oc07}m8uE=(GP3mXPx?lJm=QfDTy{sQ?@CL;_Mj^ip+e!JrZV?KtxNH`8(gQa;LT%%XR z$o$1_48*xg@4MX?pudR4Ue9mB!g&tSJCSm|c`10j%OQIFk+DGUs2nhx3wRybpv8aHs9J68a{8X3CZ$#$)({AsPL9a97XeRbuvwHIE(qq|Pb z3U6$AAsz7$Uz{h<*HpS{uP*>$tuAzIwAN6dudV#r+$|v?&kXJ1f|Q z=7~C*Y)Yk}lb z_3fB7A}i}v!4E>6NNXxrWJa$>ODLm*l|Oi0Sc3PHu12ay@>cMTz=NCDa%(QWTfuFU z@Sp^`0|z!A6`=OHiFPdC$*MapK;ChD1M3Ecx%UjwRW^Nxz7->qiV&}7{ z_ksa=nki40aOeC{v#pA@0r7%)4|K=<8(0r(V7H?IQ6ikBq-!?WBrO+T$UVTt#iiyS z+o=DI>2lM=@BUeLOW7ifU776%HrMN6YjYqJ-+tsFA9E)1zl?j`ix^Pfd@{mev5X-RS&3iJ$-4P~O>wXiGALLWc>q z$U+1lsjT9oh&mp1!WRlfe_x0$QU+oD@dT+4O1hrm-3zzsp5|As3ceBYIz>RxZBovm z3iRELfMz&``a(%F@EiAwd>!2#js=!4nYWlC3?-4hjg$tqmGHZ{*8{n&7dx(ShXlS)%#DU=aCz)& zFXjhmRL7Ao`k!NeZg@>2+uNY~z0fG>s5$V__a0=2iJ1Tk((C)KsiB~91wAcXFW#ZQ zd)~<3OB_)CO5qex6b%KU%t{L->8Yolf@t1|dmW#a1Yq$7ZU=A@ggXJ{&J$kfB~n%K z4r97MexHE(U2@&6@%^vU&l#Xs#TxVkcDJW9sfSREL(1B3KRh3Rr$z0Eo;`A-f8vMR z37qwFL_CUqaFW7#dDtNdJCe(pHQs(pS^Ig1`=k?=+d-YsWPkG(_R{9-{oLjz|K8oM zL_H2u_GtH~6FVwvO#TJf9j49x4>pSw|L05Kw9h~COXS=?HhqKGUkg^${QNG{_j!(1 zHzE8UA6WeAKj8c0NV? zC&*$7A7Mh(oj;NQ$CIWsINaS|M+pzWM5sO751n&XWK+)2s5=c+&w+VRG>V>QdRlUe z?A4vw!zt_f(@^RC=t-wM(JXTINkc7?dh*rgH)B7|z0jE4q>QGnj6R$+x5MP^h3;`% zqi|Hp>GLVvDT38?ODb-lavUZUyyl(X;-kxtR;fce1zP{`t7$ojH}I z*^Z#~93i7*%cmalj8xha!VsExr`xCTLxU4gyi+;SPmFLJnR;H^ZLQiJo^MKvNQ%^* zUfwj+5SBZ^if8EP$#4Pw>dt@J4;r07KDUL>KD0*9_eB}vz3!Z}`jgz8CrU{`i4EbF zX3-RTQk!SdvbczjB2OYchE|=#7JfWaWC9N2jO7ZEYwwiDESM_CInJ-~&fLj@`v_Xb z6OYv!5Psbj=Z$O#?sSj1^ifA+_^K&si*C?-M+_ z2Im6JKw_{r>E)Uy8F}i{Glk;(7xA>U=N^ybfm?sZ3oUl!^l{JDr*keXJLgxabDWl@ zwM3s8Zf%akqGxZ7fYOIBb^#RaYs=$`0X*8=79Cf3JtxF+=N0xWp`M3yFd2-3!}8mT0bR@g?2dS|$0LD3Vz z==12wgw%udh9&}g6|~Q@>-jj6);GUY1?MMwXH({>i`tN*vY@>lFQoe++D5ei3Eb{U zc@|%V8k*DENf(#@u7VC*kRd5u4}9UKWkn26t9EF=dnw)o|RAYDb=&l*#|v^OeE2hjdWV74P%?=yNlhuft#$}1?i)-6rsCSw-qB} zBhbTZXL>D(mfhpI{2G>YrsQ#YjvOpj+&gdp(U(?Y9uss~b+Q^!Yap*zo5`siUSo0q9a-Msh%fHna=$es$H zcqf!*K|2VnQ`Rn6sh~bh(SZGNo0kPWe%d1W(e+-nz#(`Ldm)*lXaQ-awjrR}CV!6X z7$DGNVqQWDa(cbaqb=)YIKP&r?<1b4XKV7*>(0H)&=@U1b|cvg$exVnX|wuk0k%D9 zN|(yIF}gR#PcNNsgq`0S9R}CTfqLY6t7*tZo;}GA@0jROdNhE-;AyNZNYNSMoz{;N zIrhdcd8owGHuLi^M`cg2#h(62*ZCPfvDfN!+HxdA%&DzQ@Hv`-mSb+t^WXB*X210` z>t;}zgs5A!pE2(cJ68e)BIC@poV{=#(8aU(SvISo9jcp=q@8q2TuSy(0Mw`U!>ct9 z--V;c0E$Psbe?LK57MDE&j(qU%>l9Q1bBax9vw094CJ~olc$05&84cZ?6&U@ubp8J2HRPMX&lg^Zd!{!jDw-TWmt z&*sQy&f|_GA2D45qB=U!tM)X07XK?Ra)qwWQ|W^GfLH4DOPtq7U~MBaFgN)=9Whz| z#6#zYot;Kqv{ZFvkHQ<&@r<53PoJM7n(!G$WGvy0sI#QvAYgGG;FNlL9os}VqZLg` zR|5~Gh1o6V-{qGmmXIeKx5xeVJQ5XZ^$cG3Jf3vkOc|qjcun^m8dAseF0*)>&qpqR z(g8Qu%}D6;JDvA(bCmSj!VzZLOd03YxM-RZwAp-L}{&yAD^BDTQOS?Ril)IBdx z%K1ERTIZ)axS~g%>v)ou4omG6S1?k8P#2Ip6UIJGwa|^R$@Av~B51gv(P+3@N%Yk9 zzV;!W-4lR-U)~zGGFe*SD5QTvW}7Ib-^k{gbPSC!((a%BQ?J>|-d7K^@ zeKU^sDU)u6NdVynpTE=&@`);EC*6Fh@Z#p=yhXeqdOkvNF8Drzvd5)H`qhbR>FQ=_ z37s+?Jg30(Tk*lW{d(17r~Gn6mw=Z#UqbuCRqoD=}_`{x#^snQ+K!gtaLkO^82IDN|?qNC&QvGp2B!R-pc5p6z*gzy}8D8$a_HvuC!DiA+iRt zNm~{^nbxrx*M7;GGPcO`F|zDpID1dZPFs&iTX+PX&4YxgwDqu<4O!Qu>62WwnLPTE z9;ou8+QPWUl?9bEY|d-b=geI3#5M{vPd>8rVFR6Cw_+)(%Nkh9x^-2QWIhe#%0YeS z$E~7JpDw_wNBu1Q6W4v5jVPlIKzkRh{GAf|<@X*u@zpr_b(_7nGsxra+#Td{cXrr2 z+<1Tx?!h=gA#DfW>mAK|Csx(E+6HVMmqYL037f^x4=DWS+PD>QwA%9w^LPp;Aw}h2 zJRH#*4aTaPA9Z;goTn~&B^f%|qhFdvrN%o4e}`)U_X0BcivDH9^YO-tY0#V>&wU5Z z;6ty^`ObEgmrAZT5=+<08DqsdK36|i?W_JWj(nuo%y*YJE0^3E*AiJWLd&IgFKdJrNTG-KJiOs%8{B9w z!igKX%9Y;jtk7jljtlNVt2m~S^-V3**Xa4gLi#WU9Ea=IT@Q4g0UDK;j>GL+886|U z;r3noCeKVx?=O{C<3)$yRStWsyL)#cI|{eWV5Q2p&Fc&^V>PBm`y^U*(Ss7j5%QY) zxI{5MpwaV;;yo5bjRQ3xkhcU;fjoq$Kpqgt`w$h#0|NN~q5>Ij#Q@YnLX@K8>=9E6IF5h?bc; zhNzaUGWr;z7Iloi8&QioMju7gqK?r^hzew{83O`&7*tYR3FKjvR9wxo?6CQ;1y$4N zw{ZhRDH}$=0?3LS+d&JeEReT2$Yp`d{f`t^0(qZu*`wJdCW;s`5O`l12(jAXCadA%YV}PPJM^W?qsR zzcy+#GgFB=#l`@m9|@vmMn4cl1r#x9QODE?L@nwVJ%y-69iyLgnFj>&(@2xd0|NO& zLDWKasq-v*Iz%0#q>)7(qn~w<%L4h+4pdnnKONx8LJm-;paRq}N;yhG-TeGKQh8lW zK&&xLCF->M1C0K95G^xGCe+j_qwf!*0-2c9)EZN#5Vfdd^cj~rAdsI9upy8?5<~^^ z2ZE@D90)8ykwzAEjFO+F-m*acq$^t%$fS{G7RaQLMlEC)l{Qn3l2E5F&k=RsNkkp3 z3{fZjg%&~dH-c!H(GLgFDx)6^qVtSaf+%V-0282&(N6?Xfy|1e3lK7-l13U8$fS`* z1u|)*(EzeUVFyt5Q%F@A6v(8JrV3M!I^@I!mWOo_ ztyTuBVy!j=QL$Dx2T`$BTY{)qtA0d<`e1#4+KH(2h-dyNWJ#SD$m?C^d4Wu`sHp<^ z4M9{Ovm#9u$bEeRLDToT>*9B35TnwTDnH32rv{xXr-E=S{b+|!l zRjk$5k$RAstJYdsol_NS)eX4Pg{oMqEkRVQ)pihD>aB{kqTLtj&kN*lAgbNBkZtC9 zfxN+$ofpVA2T_5%C5Q@S(nuiV1zvRUpAfaEW0cg_RDnzyX;dJSMj92!q>)AiGEpZ{ zK#8GF*qaQTgxIQBt7nmFQAY#xl>j-`I$IrE6>GJ{Y2d0@E82ajw<^|(zL_xpyg;T4 zVNplOUq@DH#=M1W%gzgA(nvtf3uMwrqXL<}nLw@y*N9rwG4pEB!Yel;+9juDAqHm_SvewE) z#ahvYkY>yaWD-Rn&kN*B4)VM}zT_a!3uO9ciYtMPrdm(}nMC*{Qbp|!|suky>a$BCs2{Hj!8zn`g*EqG~`Onl4U zLy{LIYImSqjTO|CcG4;b>wGPoIZOV7M`Y zxf8DZ)|sXmG^b!TnSBo(+k0+od~&2TJ3Bsca)ym5m`Bl6-Sbl#$4M1!ls4!R8zDiG zy)V~jcUu9GW0^uMu(bRaxS9|5YWHp&GP@x`y4dTqG`NUqY271eLZ;ekmp7XtI>Alj zHsj^-?O4#%hrq2BN*J$=!!TXIbR4&+xqu0}W0=ssfWg-ZOb(Bs#BSMJnD%=Rfscdv zfPxd7MTwum@Pdzc&kKAmXPJ~14BGoHcQ0VEgo84RI@qGUL5ZSW>aEj@Y*7)@+C7+B zX1EJ2>XYqRxoImmdl{{-X{}tJ5gsJ@(uzTcNB|%Hb?eO z9s(Z5Fikax$x7~K9Pgo~vCXH1F{Y5O7oR8P(}QoeijP@N;x2be=7+86$9F$IcUky% z0b_H(53zV2cZtEIJ)^_+aFV+ICB<;3Xug`nr8TpH)6Lk+F5b&9MjD1RBR%VT#P;-{ zZH|^bz&)1&^rE#~8pht~W*brLg>{7cTn~cFNJ&0&B4&=^o7365VssB5^^o=>pi>d% zmJ{D)>9edrZAhV;4%|F@&He6?;6@oo6t z4z6PA4*ch95Xmix!c1=mUyUONaOXMx=4}f(d232r8pF+M4|gKt!B}6y%FrtA;Ype7&F|AI?zEQKGqb8>M3_ej7^%OAZ3llnH%g zybBz_4R830DVHF)B}lzkc29E@mq%UvOw1)gTJHD__rR~ma(>-&Ry0yxUB`!2Tri>< zGOoe%*Es{7Fb67ezdkMpngIn@_WyqyFncZT|4)0OryLxG9P?!iI*YVY{+2@V(+j9& z+i`k9zE;GwgIaB89kn+H(LTxxwbNY0KZ;s-SI%i}y30SEn%6HuO&5AFy4*PXtP9^3 z)VImi6H5FbXcE41vkU*7Pr^s_)S`{^CSj|-&Y>6taseT>|LlrryOV2erTtIB!=*LL z@`@UHBGFcbuv%#e^=lcJ3>WI^GUV9>dXUi;rqz+v=BV#Neoo`gXx=nwVZP8p4q|+k zCXG?3S>97Lua0ooUailK%iMS^tta*Tzr62cQL)w5%h=re;zS9jH@F4)Is_gJ@G6As z5O_Ms^$0wfgHtUxAYd53a$TVqSh4@%NGwgGMdd3jaW&chXb;=@zg?QFoo!Bref9K& z{af+>qO)RA@9Jvy{|d0*d;r8p6P&N-W1?0}*=tY^8*Uq%+GTKrlKD{to`uLAwO9Ou zRxrABWm@t78qt60da+V-9t`;MPnpeA&d<|`{*-^5er#?=cs;@`2yZ}mBf^Sa@Ugf& z;?2r`5wvVX|EwO}in5zmcp(c-ZA(|r_UiFuS9+2>R$0osD>PY3>?hY9(j+>gx-$Qp zjIE`=8`5j(+p@40tn_4I_-jY$6`HgIs|$mE)3=hO%{f~c9dSB zNjtE*Fql^lP2zaCdiu4}lQ?CULu`d6%Yh2}4M%aU}7vWxneF*yz?n5|$a6bYMm_LN@;|PZljvzdM@F2obgkgk-5FSPt zK{$qRr9IPH2=7G8uE=B*8_VPW)kBjwKChmBt@I>L+2s&hp~-TfLc9&F(u8jY)W2QM z_d@ht@+YzOfNzKE+wL&mxSU5K5iWh-f%S3snUT>aN@K<2bH%-5lgCTN17}8OP8A;* zJyAR~F0-uO#oA)FVR2x!+LL8P|33PuxRw?D+sJ;6N#80t8$(>GlvaDP zTo`jl|IQs-u@&j^W6Y(ZXmj;m@$_#X|E>0`Iqba>xmSAfN?^IUI#y`1tn~j@PL|_rV(Zk zW)aRIJb~~e!g+)_gbN5igOD^gUBG>eZ-e*0Udi`A+A;q>gubNFe=+9&lkk|AH<+&( z`Zoi2vGOj3{PUU0Vzobw{)<&dqvt==W8{xU@=uv=hW>fwzg3>RQsqC5j;{p$)9Pp1 zl|uidek_Ij_cSU0y~v;R{5MPgw<;$|cuKo>rO^Lcl>a=>|J%tY&FKF$9&1Fc;H%~zr$Jd_iC4auKi|z_uzLgLL*+d7U+Mi%KyEV z2OQr=*Z(_yxEAQ|`XBwh*5vC(*j&y{WD|24AzQTe|B9_0GZpGEjN zgr7%9%ZTJvW?`wg0x>ict1iGpS0TVm2y`e23GWct(LX_59MVTa`O;Ev-|%n zru~m{S0nk4=868VpzSO2AH~SE_kR_5U?&3knR{hX_Q}_;Lg0B&4kJu==RfjUhr9o1 zqMaZZ$h9hh(79=ubHN{}}!!$^Qx5 zZ}I+A3<%(P8K#1{&S$_gm5yv60x)Lt_mwCxCQO$!{bq5bp`8g_w2R@ zd*D(%M|Z5{7n>EDJ*5oKWVBVS-OdFl0ZE(R3r`u z$c3SrNur#gy+SU2oMA~`zbIqGfL9ix*eD;%;XWr>X)gxWMv5YAX0zQ=lAl|G735&~ z1!l8#Zb_as&%U5E&st`+m)i?XH<^xjBWPz64>{zG_yyj^n2va(8Olw8dba<1uMu1r zghCt7Da`KXP&wt60xY)x!{&xUnK5fwZr*}|e7iZXtgL+0-PjO8QRU5WZ`WJpShzt^ z)kJXI(nZ9QHib66Vgpnv86F-!uG4@`5r%4=q>nV1A?PmUGME?KbLBA{IiZGt&M@En zi*Gvkrj2iQ@XaH9ORbVyLwpOL4I1a`@3@=Zch0)QT_On?dKN#bMM8jGWX_7 z=XN&t9vDJ)^}pTnloW&;?YA!&8tlIkQ&YRfec1W=Pmk6f z*tm`Oc;4;{od>sT_TDu;`G|L*;oXe`?enTrsxGUaK^2|DeGLcFe|+YsZ&`oGU`*hm zW$)m*#Zz|Ih44xyi1$jL7~V1wyw69*`-&*u(;|3@Xn1#t;awI9?+UJG+pv9I`Qo?N zPAja~6X-fqJ|}g}eTN&?tnT~_;6jXNh~oV~ z1aBZ3-eY2TcSOcpEs9qX4X_mmg`rOdNIhTspP7 z_gcr&Olwck>r1U)cMOy>g>`S%%J(#O83*>f+qJR%dXjnj!l9O}tJH<=nbmur)tR9E z{r1Y1Z&n(XP9HjXYNKp&%|p+Bpx*MG!?ONb^H*(WcYK?6`OUSb-+1$ddA3(}4|jf~ zepapPn%4JL{y@7s#yO+LpmWJf>1zT* z4=HBN`fJ-4=Knr?;#R*7h^<-?gu4?SY~IrDzQ=O>>X(O3KYYOV_ZQY!3QMQX>*%{) zR&tUAOV#y5-%D-nR|gzNSNB|#b~Z1ccXIdL(6Fir9OE=lBJ`v}0fXZkG#~t}S4d%S z))?(d!(CapD-U-S;Vu&HD#Kk>xT_Yr{DBdi8le~{0Lg!M9*W!h2nY^A7AStwf8IHf zK18pb{p^+Z*Zupo&8~wr+o6iV4fih54y^zg#{;!VAXOpb7)Wq-T#*3U88DcD8gS<- zH$yl12uCT1QU@ktp?W9>g8sB&G{&a+Q1K>c&j|>cXFHil&_BRk{-%OrjDPpjh$0dK8mAo z5A`6a2u6q*OHUonUP=3ENS4=gF}RmBE2@ z%EM7UO>nA-qdaUvFdf|KzC71VCaw+!NAt0k zs)HjpNqaTHu9qYzTovs5NG@azlJ$W!+@nJpI2c_j7WewWC=`}$WjWFt^2~v_+HluM z`rP35l|e}p6$&ccS14$}>q#0{0k+W!NE|N@BFq{ujEsBQc%_?GDOJQt+Sui{-LU*> zVF8y?1lK5U;aiO$SV&UtMo!TvT;KrQDr3RA#Nq@|&R15g@X%>G3ZwF58HyyUk`PoY z2b+yD8BIa;Xeye9PC=)l(@+DNj%J{lXcjshoq^tg&O~RSv-K+do%%WYY`sx$(qsB~ zDGX;SVUffnyOxoJs~Ga6E!cMkEP{BoUG55DBVElBmqUFh^wpZ7u@mA#gqd&qd$@ z6?DT(_z#!B63Gp6iBzVPf?2stDTfe#Pm>}1qX;E`U{>*s8cb^VO%_Nc5?Cq&Kj&b% z42D$@_^74bSOsto!)lG98|$uwzzC?psyn)|l`-{`u=-f6J`Sso$Lh6M{ba0O2Hy8U zQ-ZHXDNvV&{m7&ewZ;kjxRgDv1Xm)i3-wSusoSLzWZ>%3?az`Nz>`BFlourlqLgkI z64FA#T1ZF>8PNivRs56Hx*N`YJuo1d)Pqyg+DWY8KS((p05NfLs}3MMAe?1&^?j1NFNS_)S^@ YcJVPAGmwnmW{qRFS>c=Ee;xxO#)q>|DF6Tf diff --git a/minplayer/src/minplayer.async.js b/minplayer/src/minplayer.async.js new file mode 100644 index 00000000..656aa110 --- /dev/null +++ b/minplayer/src/minplayer.async.js @@ -0,0 +1,61 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class This class keeps track of asynchronous get requests for certain + * variables within the player. + */ +minplayer.async = function() { + + /** The final value of this asynchronous variable. */ + this.value = null; + + /** The queue of callbacks to call when this value is determined. */ + this.queue = []; +}; + +/** + * Retrieve the value of this variable. + * + * @param {function} callback The function to call when the value is determined. + * @param {function} pollValue The poll function to try and get the value every + * 1 second if the value is not set. + */ +minplayer.async.prototype.get = function(callback, pollValue) { + + // If the value is set, then immediately call the callback, otherwise, just + // add it to the queue when the variable is set. + if (this.value !== null) { + callback(this.value); + } + else { + + // Add this callback to the queue. + this.queue.push(callback); + } +}; + +/** + * Sets the value of an asynchronous value. + * + * @param {void} val The value to set. + */ +minplayer.async.prototype.set = function(val) { + + // Set the value. + this.value = val; + + // Get the callback queue length. + var i = this.queue.length; + + // Iterate through all the callbacks and call them. + if (i) { + while (i--) { + this.queue[i](val); + } + + // Reset the queue. + this.queue = []; + } +}; diff --git a/minplayer/src/minplayer.compatibility.js b/minplayer/src/minplayer.compatibility.js new file mode 100644 index 00000000..0a0dbf71 --- /dev/null +++ b/minplayer/src/minplayer.compatibility.js @@ -0,0 +1,101 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +// Private function to check a single element's play type. +function checkPlayType(elem, playType) { + if ((typeof elem.canPlayType) === 'function') { + if (typeof playType === 'object') { + var i = playType.length; + var mimetype = ''; + while (i--) { + mimetype = checkPlayType(elem, playType[i]); + if (!!mimetype) { + break; + } + } + return mimetype; + } + else { + var canPlay = elem.canPlayType(playType); + if (('no' !== canPlay) && ('' !== canPlay)) { + return playType; + } + } + } + return ''; +} + +/** + * @constructor + * @class This class is used to define the types of media that can be played + * within the browser. + *

+ * Usage: + *


+ *   var playTypes = new minplayer.compatibility();
+ *
+ *   if (playTypes.videoOGG) {
+ *     console.log("This browser can play OGG video");
+ *   }
+ *
+ *   if (playTypes.videoH264) {
+ *     console.log("This browser can play H264 video");
+ *   }
+ *
+ *   if (playTypes.videoWEBM) {
+ *     console.log("This browser can play WebM video");
+ *   }
+ *
+ *   if (playTypes.audioOGG) {
+ *     console.log("This browser can play OGG audio");
+ *   }
+ *
+ *   if (playTypes.audioMP3) {
+ *     console.log("This browser can play MP3 audio");
+ *   }
+ *
+ *   if (playTypes.audioMP4) {
+ *     console.log("This browser can play MP4 audio");
+ *   }
+ * 
+ */ +minplayer.compatibility = function() { + var elem = null; + + // Create a video element. + elem = document.createElement('video'); + + /** Can play OGG video */ + this.videoOGG = checkPlayType(elem, 'video/ogg'); + + /** Can play H264 video */ + this.videoH264 = checkPlayType(elem, [ + 'video/mp4', + 'video/h264' + ]); + + /** Can play WEBM video */ + this.videoWEBM = checkPlayType(elem, [ + 'video/x-webm', + 'video/webm', + 'application/octet-stream' + ]); + + // Create an audio element. + elem = document.createElement('audio'); + + /** Can play audio OGG */ + this.audioOGG = checkPlayType(elem, 'audio/ogg'); + + /** Can play audio MP3 */ + this.audioMP3 = checkPlayType(elem, 'audio/mpeg'); + + /** Can play audio MP4 */ + this.audioMP4 = checkPlayType(elem, 'audio/mp4'); +}; + +if (!minplayer.playTypes) { + + /** The compatible playtypes for this browser. */ + minplayer.playTypes = new minplayer.compatibility(); +} diff --git a/minplayer/src/minplayer.controller.js b/minplayer/src/minplayer.controller.js new file mode 100644 index 00000000..5db6870c --- /dev/null +++ b/minplayer/src/minplayer.controller.js @@ -0,0 +1,312 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This is the base minplayer controller. Other controllers can derive + * from the base and either build on top of it or simply define the elements + * that this base controller uses. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer.controller = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'controller', context, options); +}; + +/** Derive from minplayer.display. */ +minplayer.controller.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.controller.prototype.constructor = minplayer.controller; + +/** + * A static function that will format a time value into a string time format. + * + * @param {integer} time An integer value of time. + * @return {string} A string representation of the time. + */ +minplayer.formatTime = function(time) { + time = time || 0; + var seconds = 0, minutes = 0, hour = 0, timeString = ''; + + hour = Math.floor(time / 3600); + time -= (hour * 3600); + minutes = Math.floor(time / 60); + time -= (minutes * 60); + seconds = Math.floor(time % 60); + + if (hour) { + timeString += String(hour); + timeString += ':'; + } + + timeString += (minutes >= 10) ? String(minutes) : ('0' + String(minutes)); + timeString += ':'; + timeString += (seconds >= 10) ? String(seconds) : ('0' + String(seconds)); + return {time: timeString, units: ''}; +}; + +/** + * @see minplayer.display#getElements + * @return {object} The elements defined by this display. + */ +minplayer.controller.prototype.getElements = function() { + var elements = minplayer.display.prototype.getElements.call(this); + return jQuery.extend(elements, { + play: null, + pause: null, + fullscreen: null, + seek: null, + progress: null, + volume: null, + timer: null + }); +}; + +/** + * @see minplayer.plugin#construct + */ +minplayer.controller.prototype.construct = function() { + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + // Keep track of if we are dragging... + this.dragging = false; + + // If they have a seek bar. + if (this.elements.seek) { + + // Create the seek bar slider control. + this.seekBar = this.elements.seek.slider({ + range: 'min' + }); + } + + // If they have a volume bar. + if (this.elements.volume) { + + // Create the volume bar slider control. + this.volumeBar = this.elements.volume.slider({ + range: 'min', + orientation: 'vertical' + }); + } + + // Get the player plugin. + this.get('player', function(player) { + + // If they have a fullscreen button. + if (this.elements.fullscreen) { + + // Bind to the click event. + this.elements.fullscreen.unbind().bind('click', function(e) { + + // Toggle fullscreen mode. + player.toggleFullScreen(); + }).css({'pointer' : 'hand'}); + } + }); + + // Get the media plugin. + this.get('media', function(media) { + + // If they have a pause button + if (this.elements.pause) { + + // Bind to the click on this button. + this.elements.pause.unbind().bind('click', (function(controller) { + return function(event) { + event.preventDefault(); + controller.playPause(false, media); + }; + })(this)); + + // Bind to the pause event of the media. + media.bind('pause', (function(controller) { + return function(event) { + controller.setPlayPause(true); + }; + })(this)); + } + + // If they have a play button + if (this.elements.play) { + + // Bind to the click on this button. + this.elements.play.unbind().bind('click', (function(controller) { + return function(event) { + event.preventDefault(); + controller.playPause(true, media); + }; + })(this)); + + // Bind to the play event of the media. + media.bind('playing', (function(controller) { + return function(event) { + controller.setPlayPause(false); + }; + })(this)); + } + + // If they have a duration, then trigger on duration change. + if (this.elements.duration) { + + // Bind to the duration change event. + media.bind('durationchange', (function(controller) { + return function(event, data) { + controller.setTimeString('duration', data.duration); + }; + })(this)); + + // Set the timestring to the duration. + media.getDuration((function(controller) { + return function(duration) { + controller.setTimeString('duration', duration); + }; + })(this)); + } + + // If they have a progress element. + if (this.elements.progress) { + + // Bind to the progress event. + media.bind('progress', (function(controller) { + return function(event, data) { + var percent = data.total ? (data.loaded / data.total) * 100 : 0; + controller.elements.progress.width(percent + '%'); + }; + })(this)); + } + + // If they have a seek bar or timer, bind to the timeupdate. + if (this.seekBar || this.elements.timer) { + + // Bind to the time update event. + media.bind('timeupdate', (function(controller) { + return function(event, data) { + if (!controller.dragging) { + var value = 0; + if (data.duration) { + value = (data.currentTime / data.duration) * 100; + } + + // Update the seek bar if it exists. + if (controller.seekBar) { + controller.seekBar.slider('option', 'value', value); + } + + controller.setTimeString('timer', data.currentTime); + } + }; + })(this)); + } + + // If they have a seekBar element. + if (this.seekBar) { + + // Register the events for the control bar to control the media. + this.seekBar.slider({ + start: (function(controller) { + return function(event, ui) { + controller.dragging = true; + }; + })(this), + stop: (function(controller) { + return function(event, ui) { + controller.dragging = false; + media.getDuration(function(duration) { + media.seek((ui.value / 100) * duration); + }); + }; + })(this), + slide: (function(controller) { + return function(event, ui) { + media.getDuration(function(duration) { + var time = (ui.value / 100) * duration; + if (!controller.dragging) { + media.seek(time); + } + controller.setTimeString('timer', time); + }); + }; + })(this) + }); + } + + // Setup the volume bar. + if (this.volumeBar) { + + // Create the slider. + this.volumeBar.slider({ + slide: function(event, ui) { + media.setVolume(ui.value / 100); + } + }); + + media.bind('volumeupdate', (function(controller) { + return function(event, vol) { + controller.volumeBar.slider('option', 'value', (vol * 100)); + }; + })(this)); + + // Set the volume to match that of the player. + media.getVolume((function(controller) { + return function(vol) { + controller.volumeBar.slider('option', 'value', (vol * 100)); + }; + })(this)); + } + }); + + // We are now ready. + this.ready(); +}; + +/** + * Sets the play and pause state of the control bar. + * + * @param {boolean} state TRUE - Show Play, FALSE - Show Pause. + */ +minplayer.controller.prototype.setPlayPause = function(state) { + var css = ''; + if (this.elements.play) { + css = state ? 'inherit' : 'none'; + this.elements.play.css('display', css); + } + if (this.elements.pause) { + css = state ? 'none' : 'inherit'; + this.elements.pause.css('display', css); + } +}; + +/** + * Plays or pauses the media. + * + * @param {bool} state true => play, false => pause. + * @param {object} media The media player object. + */ +minplayer.controller.prototype.playPause = function(state, media) { + var type = state ? 'play' : 'pause'; + this.display.trigger(type); + this.setPlayPause(!state); + if (media) { + media[type](); + } +}; + +/** + * Sets the time string on the control bar. + * + * @param {string} element The name of the element to set. + * @param {number} time The total time amount to set. + */ +minplayer.controller.prototype.setTimeString = function(element, time) { + if (this.elements[element]) { + this.elements[element].text(minplayer.formatTime(time).time); + } +}; diff --git a/minplayer/src/minplayer.display.js b/minplayer/src/minplayer.display.js new file mode 100644 index 00000000..e926f319 --- /dev/null +++ b/minplayer/src/minplayer.display.js @@ -0,0 +1,296 @@ +/** The minplayer namespace. */ +minplayer = minplayer || {}; + +/** + * @constructor + * @extends minplayer.plugin + * @class Base class used to provide the display and options for any component + * deriving from this class. Components who derive are expected to provide + * the elements that they define by implementing the getElements method. + * + * @param {string} name The name of this plugin. + * @param {object} context The jQuery context this component resides. + * @param {object} options The options for this component. + * @param {object} queue The event queue to pass events around. + */ +minplayer.display = function(name, context, options, queue) { + + // See if we allow resize on this display. + this.allowResize = false; + + if (context) { + + // Set the display. + this.display = this.getDisplay(context, options); + } + + // Derive from plugin + minplayer.plugin.call(this, name, context, options, queue); +}; + +/** Derive from minplayer.plugin. */ +minplayer.display.prototype = new minplayer.plugin(); + +/** Reset the constructor. */ +minplayer.display.prototype.constructor = minplayer.display; + +/** + * Returns the display for this component. + * + * @param {object} context The original context. + * @param {object} options The options for this component. + * @return {object} The jQuery context for this display. + */ +minplayer.display.prototype.getDisplay = function(context, options) { + return jQuery(context); +}; + +/** + * @see minplayer.plugin.construct + */ +minplayer.display.prototype.construct = function() { + + // Call the plugin constructor. + minplayer.plugin.prototype.construct.call(this); + + // Get the display elements. + this.elements = this.getElements(); + + // Only do this if they allow resize for this display. + if (this.allowResize) { + + // Set the resize timeout and this pointer. + var resizeTimeout = 0; + + // Add a handler to trigger a resize event. + jQuery(window).resize((function(display) { + return function() { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(function() { + display.onResize(); + }, 200); + }; + })(this)); + } +}; + +/** + * Called when the window resizes. + */ +minplayer.display.prototype.onResize = function() { +}; + +/** + * Gets the full screen element. + * + * @return {object} The display to be used for full screen support. + */ +minplayer.display.prototype.fullScreenElement = function() { + return this.display; +}; + +/** + * Called if you would like for your display item to show then hide. + * + * @param {object} element The element you would like to hide or show. + * @param {number} timeout The timeout to hide and show. + */ +minplayer.showThenHide = function(element, timeout) { + + // Ensure we have a timeout. + timeout = timeout || 5000; + + // If this has not yet been configured. + if (!element.showTimer) { + + // Bind when they move the mouse. + jQuery(document).bind('mousemove', function() { + minplayer.showThenHide(element, timeout); + }); + } + + // Clear the timeout, and then setup the show then hide functionality. + clearTimeout(element.showTimer); + + // Show the display. + element.show(); + + // Set a timer to hide it after the timeout. + element.showTimer = setTimeout(function() { + element.hide('slow'); + }, timeout); +}; + +/** + * Make this display element go fullscreen. + * + * @param {boolean} full Tell the player to go into fullscreen or not. + */ +minplayer.display.prototype.fullscreen = function(full) { + var isFull = this.isFullScreen(); + var element = this.fullScreenElement(); + if (isFull && !full) { + element.removeClass('fullscreen'); + if (screenfull) { + screenfull.exit(); + } + this.trigger('fullscreen', false); + } + else if (!isFull && full) { + element.addClass('fullscreen'); + if (screenfull) { + screenfull.request(element[0]); + screenfull.onchange = (function(display) { + return function(e) { + if (!screenfull.isFullscreen) { + display.fullscreen(false); + } + }; + })(this); + } + this.trigger('fullscreen', true); + } +}; + +/** + * Toggle fullscreen. + */ +minplayer.display.prototype.toggleFullScreen = function() { + this.fullscreen(!this.isFullScreen()); +}; + +/** + * Checks to see if we are in fullscreen mode. + * + * @return {boolean} TRUE - fullscreen, FALSE - otherwise. + */ +minplayer.display.prototype.isFullScreen = function() { + return this.fullScreenElement().hasClass('fullscreen'); +}; + +/** + * Returns a scaled rectangle provided a ratio and the container rect. + * + * @param {number} ratio The width/height ratio of what is being scaled. + * @param {object} rect The bounding rectangle for scaling. + * @return {object} The Rectangle object of the scaled rectangle. + */ +minplayer.display.prototype.getScaledRect = function(ratio, rect) { + var scaledRect = {}; + scaledRect.x = rect.x ? rect.x : 0; + scaledRect.y = rect.y ? rect.y : 0; + scaledRect.width = rect.width ? rect.width : 0; + scaledRect.height = rect.height ? rect.height : 0; + if (ratio) { + if ((rect.width / rect.height) > ratio) { + scaledRect.height = rect.height; + scaledRect.width = Math.floor(rect.height * ratio); + } + else { + scaledRect.height = Math.floor(rect.width / ratio); + scaledRect.width = rect.width; + } + scaledRect.x = Math.floor((rect.width - scaledRect.width) / 2); + scaledRect.y = Math.floor((rect.height - scaledRect.height) / 2); + } + return scaledRect; +}; + +/** + * Returns all the jQuery elements that this component uses. + * + * @return {object} An object which defines all the jQuery elements that + * this component uses. + */ +minplayer.display.prototype.getElements = function() { + return {}; +}; + +/** + * Returns if this component is valid and exists within the DOM. + * + * @return {boolean} TRUE if the plugin display is valid. + */ +minplayer.display.prototype.isValid = function() { + return (this.display.length > 0); +}; + +/** + * From https://github.com/sindresorhus/screenfull.js + */ +/*global Element:true*/ +(function(window, document) { + 'use strict'; + var methods = (function() { + var methodMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenchange', + 'fullscreen', + 'fullscreenElement' + ], + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitIsFullScreen', + 'webkitCurrentFullScreenElement' + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozfullscreenchange', + 'mozFullScreen', + 'mozFullScreenElement' + ] + ]; + for (var i = 0, l = methodMap.length; i < l; i++) { + var val = methodMap[i]; + if (val[1] in document) { + return val; + } + } + })(); + + if (!methods) { + return window.screenfull = false; + } + + var keyboardAllowed = 'ALLOW_KEYBOARD_INPUT' in Element; + + var screenfull = { + init: function() { + document.addEventListener(methods[2], function(e) { + screenfull.isFullscreen = document[methods[3]]; + screenfull.element = document[methods[4]]; + screenfull.onchange(e); + }); + return this; + }, + isFullscreen: document[methods[3]], + element: document[methods[4]], + request: function(elem) { + elem = elem || document.documentElement; + elem[methods[0]](keyboardAllowed && Element.ALLOW_KEYBOARD_INPUT); + // Work around Safari 5.1 bug: reports support for keyboard in fullscreen + // even though it doesn't. + if (!document.isFullscreen) { + elem[methods[0]](); + } + }, + exit: function() { + document[methods[1]](); + }, + toggle: function(elem) { + if (this.isFullscreen) { + this.exit(); + } else { + this.request(elem); + } + }, + onchange: function() {} + }; + + window.screenfull = screenfull.init(); +})(window, document); diff --git a/minplayer/src/minplayer.file.js b/minplayer/src/minplayer.file.js new file mode 100644 index 00000000..24c0f44f --- /dev/null +++ b/minplayer/src/minplayer.file.js @@ -0,0 +1,167 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class A wrapper class used to provide all the data necessary to control an + * individual file within this media player. + * + * @param {object} file A media file object with minimal required information. + */ +minplayer.file = function(file) { + this.duration = file.duration || 0; + this.bytesTotal = file.bytesTotal || 0; + this.quality = file.quality || 0; + this.stream = file.stream || ''; + this.path = file.path || ''; + this.codecs = file.codecs || ''; + + // These should be provided, but just in case... + this.extension = file.extension || this.getFileExtension(); + this.mimetype = file.mimetype || file.filemime || this.getMimeType(); + this.type = file.type || this.getType(); + + // Fail safe to try and guess the mimetype and media type. + if (!this.type) { + this.mimetype = this.getMimeType(); + this.type = this.getType(); + } + + // Get the player. + this.player = file.player || this.getBestPlayer(); + this.priority = file.priority || this.getPriority(); + this.id = file.id || this.getId(); +}; + +/** + * Returns the best player for the job. + * + * @return {string} The best player to play the media file. + */ +minplayer.file.prototype.getBestPlayer = function() { + var bestplayer = null, bestpriority = 0; + jQuery.each(minplayer.players, (function(file) { + return function(name, player) { + var priority = player.getPriority(); + if (player.canPlay(file) && (priority > bestpriority)) { + bestplayer = name; + bestpriority = priority; + } + }; + })(this)); + return bestplayer; +}; + +/** + * The priority of this file is determined by the priority of the best + * player multiplied by the priority of the mimetype. + * + * @return {integer} The priority of the media file. + */ +minplayer.file.prototype.getPriority = function() { + var priority = 1; + if (this.player) { + priority = minplayer.players[this.player].getPriority(); + } + switch (this.mimetype) { + case 'video/x-webm': + case 'video/webm': + case 'application/octet-stream': + return priority * 10; + case 'video/mp4': + case 'audio/mp4': + case 'audio/mpeg': + return priority * 9; + case 'video/ogg': + case 'audio/ogg': + case 'video/quicktime': + return priority * 8; + default: + return priority * 5; + } +}; + +/** + * Returns the file extension of the file path. + * + * @return {string} The file extension. + */ +minplayer.file.prototype.getFileExtension = function() { + return this.path.substring(this.path.lastIndexOf('.') + 1).toLowerCase(); +}; + +/** + * Returns the proper mimetype based off of the extension. + * + * @return {string} The mimetype of the file based off of extension. + */ +minplayer.file.prototype.getMimeType = function() { + switch (this.extension) { + case 'mp4': case 'm4v': case 'flv': case 'f4v': + return 'video/mp4'; + case'webm': + return 'video/webm'; + case 'ogg': case 'ogv': + return 'video/ogg'; + case '3g2': + return 'video/3gpp2'; + case '3gpp': + case '3gp': + return 'video/3gpp'; + case 'mov': + return 'video/quicktime'; + case'swf': + return 'application/x-shockwave-flash'; + case 'oga': + return 'audio/ogg'; + case 'mp3': + return 'audio/mpeg'; + case 'm4a': case 'f4a': + return 'audio/mp4'; + case 'aac': + return 'audio/aac'; + case 'wav': + return 'audio/vnd.wave'; + case 'wma': + return 'audio/x-ms-wma'; + default: + return 'unknown'; + } +}; + +/** + * The type of media this is: video or audio. + * + * @return {string} "video" or "audio" based on what the type of media this + * is. + */ +minplayer.file.prototype.getType = function() { + switch (this.mimetype) { + case 'video/mp4': + case 'video/webm': + case 'application/octet-stream': + case 'video/x-webm': + case 'video/ogg': + case 'video/3gpp2': + case 'video/3gpp': + case 'video/quicktime': + return 'video'; + case 'audio/mp3': + case 'audio/mp4': + case 'audio/ogg': + case 'audio/mpeg': + return 'audio'; + default: + return ''; + } +}; + +/** + * Returns the ID for this media file. + * + * @return {string} The id for this media file which is provided by the player. + */ +minplayer.file.prototype.getId = function() { + var player = minplayer.players[this.player]; + return (player && player.getMediaId) ? player.getMediaId(this) : ''; +}; diff --git a/minplayer/src/minplayer.flags.js b/minplayer/src/minplayer.flags.js new file mode 100644 index 00000000..4d97c376 --- /dev/null +++ b/minplayer/src/minplayer.flags.js @@ -0,0 +1,71 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class This is a class used to keep track of flag states + * which is used to control the busy cursor, big play button, among other + * items in which multiple components can have an interest in hiding or + * showing a single element on the screen. + * + *

+ * Usage: + *


+ *   // Declare a flags variable.
+ *   var flags = new minplayer.flags();
+ *
+ *   // Set the flag based on two components interested in the flag.
+ *   flags.setFlag("component1", true);
+ *   flags.setFlag("component2", true);
+ *
+ *   // Print out the value of the flags. ( Prints 3 )
+ *   console.log(flags.flags);
+ *
+ *   // Now unset a single components flag.
+ *   flags.setFlag("component1", false);
+ *
+ *   // Print out the value of the flags.
+ *   console.log(flags.flags);
+ *
+ *   // Unset the other components flag.
+ *   flags.setFlag("component2", false);
+ *
+ *   // Print out the value of the flags.
+ *   console.log(flags.flags);
+ * 
+ *

+ */ +minplayer.flags = function() { + + /** The flag. */ + this.flag = 0; + + /** Id map to reference id with the flag index. */ + this.ids = {}; + + /** The number of flags. */ + this.numFlags = 0; +}; + +/** + * Sets a flag based on boolean logic operators. + * + * @param {string} id The id of the controller interested in this flag. + * @param {boolean} value The value of this flag ( true or false ). + */ +minplayer.flags.prototype.setFlag = function(id, value) { + + // Define this id if it isn't present. + if (!this.ids.hasOwnProperty(id)) { + this.ids[id] = this.numFlags; + this.numFlags++; + } + + // Use binary operations to keep track of the flag state + if (value) { + this.flag |= (1 << this.ids[id]); + } + else { + this.flag &= ~(1 << this.ids[id]); + } +}; diff --git a/minplayer/src/minplayer.image.js b/minplayer/src/minplayer.image.js new file mode 100644 index 00000000..7759673f --- /dev/null +++ b/minplayer/src/minplayer.image.js @@ -0,0 +1,144 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @class A class to easily handle images. + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer.image = function(context, options) { + + // Determine if the image is loaded. + this.loaded = false; + + // The image loader. + this.loader = null; + + // The ratio of the image. + this.ratio = 0; + + // The image element. + this.img = null; + + // Derive from display + minplayer.display.call(this, 'image', context, options); +}; + +/** Derive from minplayer.display. */ +minplayer.image.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.image.prototype.constructor = minplayer.image; + +/** + * @see minplayer.plugin.construct + */ +minplayer.image.prototype.construct = function() { + + // Say we need to resize. + this.allowResize = true; + + // Call the media display constructor. + minplayer.display.prototype.construct.call(this); + + // Set the container to not show any overflow... + this.display.css('overflow', 'hidden'); + + /** The loader for the image. */ + this.loader = new Image(); + + /** Register for when the image is loaded within the loader. */ + this.loader.onload = (function(image) { + return function() { + image.loaded = true; + image.ratio = (image.loader.width / image.loader.height); + image.resize(); + image.trigger('loaded'); + }; + })(this); + + // We are now ready. + this.ready(); +}; + +/** + * Loads an image. + * + * @param {string} src The source of the image to load. + */ +minplayer.image.prototype.load = function(src) { + + // First clear the previous image. + this.clear(function() { + + // Create the new image, and append to the display. + this.display.empty(); + this.img = jQuery(document.createElement('img')).attr({src: ''}).hide(); + this.display.append(this.img); + this.loader.src = src; + }); +}; + +/** + * Clears an image. + * + * @param {function} callback Called when the image is done clearing. + */ +minplayer.image.prototype.clear = function(callback) { + this.loaded = false; + if (this.img) { + this.img.fadeOut((function(image) { + return function() { + image.img.attr('src', ''); + image.loader.src = ''; + $(this).remove(); + callback.call(image); + }; + })(this)); + } + else { + callback.call(this); + } +}; + +/** + * Resize the image provided a width and height or nothing. + * + * @param {integer} width (optional) The width of the container. + * @param {integer} height (optional) The height of the container. + */ +minplayer.image.prototype.resize = function(width, height) { + width = width || this.display.width(); + height = height || this.display.height(); + if (width && height && this.loaded) { + + // Get the scaled rectangle. + var rect = this.getScaledRect(this.ratio, { + width: width, + height: height + }); + + // Now set this image to the new size. + if (this.img) { + this.img.attr('src', this.loader.src).css({ + marginLeft: rect.x, + marginTop: rect.y, + width: rect.width, + height: rect.height + }); + } + + // Show the container. + this.img.fadeIn(); + } +}; + +/** + * @see minplayer.display#onResize + */ +minplayer.image.prototype.onResize = function() { + + // Resize the image to fit. + this.resize(); +}; diff --git a/minplayer/src/minplayer.js b/minplayer/src/minplayer.js new file mode 100644 index 00000000..f38c633f --- /dev/null +++ b/minplayer/src/minplayer.js @@ -0,0 +1,352 @@ +// Add a way to instanciate using jQuery prototype. +if (!jQuery.fn.minplayer) { + + /** + * @constructor + * + * Define a jQuery minplayer prototype. + * + * @param {object} options The options for this jQuery prototype. + * @return {Array} jQuery object. + */ + jQuery.fn.minplayer = function(options) { + return jQuery(this).each(function() { + options = options || {}; + options.id = options.id || $(this).attr('id') || Math.random(); + if (!minplayer.plugins[options.id]) { + options.template = options.template || 'default'; + if (minplayer[options.template]) { + new minplayer[options.template](jQuery(this), options); + } + else { + new minplayer(jQuery(this), options); + } + } + }); + }; +} + +/** + * @constructor + * @extends minplayer.display + * @class The core media player class which governs the media player + * functionality. + * + *

Usage: + *


+ *
+ *   // Create a media player.
+ *   var player = jQuery("#player").minplayer({
+ *
+ *   });
+ *
+ * 
+ *

+ * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer = jQuery.extend(function(context, options) { + + // Derive from display + minplayer.display.call(this, 'player', context, options); +}, minplayer); + +/** Derive from minplayer.display. */ +minplayer.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.prototype.constructor = minplayer; + +/** + * Define a way to debug. + */ +minplayer.console = console || {log: function(data) {}}; + +/** + * @see minplayer.plugin.construct + */ +minplayer.prototype.construct = function() { + + // Allow them to provide arguments based off of the DOM attributes. + jQuery.each(this.context[0].attributes, (function(player) { + return function(index, attr) { + player.options[attr.name] = player.options[attr.name] || attr.value; + }; + })(this)); + + // Make sure we provide default options... + this.options = jQuery.extend({ + id: 'player', + build: false, + wmode: 'transparent', + preload: true, + autoplay: false, + loop: false, + width: '100%', + height: '350px', + debug: false, + volume: 80, + files: [], + file: '', + preview: '', + attributes: {} + }, this.options); + + // Call the minplayer display constructor. + minplayer.display.prototype.construct.call(this); + + /** The controller for this player. */ + this.controller = this.create('controller'); + + /** The play loader for this player. */ + this.playLoader = this.create('playLoader'); + + /** Variable to store the current media player. */ + this.currentPlayer = 'html5'; + + // Add key events to the window. + this.addKeyEvents(); + + // Now load these files. + this.load(this.getFiles()); + + // Add the player events. + this.addEvents(); + + // The player is ready. + this.ready(); +}; + +/** + * We need to bind to events we are interested in. + */ +minplayer.prototype.addEvents = function() { + minplayer.get.call(this, this.options.id, null, (function(player) { + return function(plugin) { + + // Bind to the error event. + plugin.bind('error', function(event, data) { + + // If an error occurs within the html5 media player, then try + // to fall back to the flash player. + if (player.currentPlayer == 'html5') { + player.options.file.player = 'minplayer'; + player.loadPlayer(); + } + else { + player.error(data); + } + }); + + // Bind to the fullscreen event. + plugin.bind('fullscreen', function(event, data) { + player.resize(); + }); + }; + })(this)); +}; + +/** + * Sets an error on the player. + * + * @param {string} error The error to display on the player. + */ +minplayer.prototype.error = function(error) { + error = error || ''; + if (this.elements.error) { + + // Set the error text. + this.elements.error.text(error); + if (error) { + this.elements.error.show(); + } + else { + this.elements.error.hide(); + } + } +}; + +/** + * Adds key events to the player. + */ +minplayer.prototype.addKeyEvents = function() { + jQuery(document).bind('keydown', (function(player) { + return function(event) { + switch (event.keyCode) { + case 113: // ESC + case 27: // Q + if (player.isFullScreen()) { + player.fullscreen(false); + } + break; + } + }; + })(this)); +}; + +/** + * Returns all the media files available for this player. + * + * @return {array} All the media files for this player. + */ +minplayer.prototype.getFiles = function() { + var files = []; + var mediaSrc = null; + + // Get the files involved... + if (this.elements.media) { + mediaSrc = this.elements.media.attr('src'); + if (mediaSrc) { + files.push({'path': mediaSrc}); + } + jQuery('source', this.elements.media).each(function() { + files.push({ + 'path': jQuery(this).attr('src'), + 'mimetype': jQuery(this).attr('type'), + 'codecs': jQuery(this).attr('codecs') + }); + }); + } + + return files; +}; + +/** + * Returns the full media player object. + * @param {array} files An array of files to chose from. + * @return {object} The best media file to play in the current browser. + */ +minplayer.prototype.getMediaFile = function(files) { + + // If there are no files then return null. + if (!files) { + return null; + } + + // If the file is a single string, then return the file object. + if (typeof files === 'string') { + return new minplayer.file({'path': files}); + } + + // If the file is already a file object then just return. + if (files.path || files.id) { + return new minplayer.file(files); + } + + // Add the files and get the best player to play. + var i = files.length, bestPriority = 0, mFile = null, file = null; + while (i--) { + file = files[i]; + + // Get the minplayer file object. + if (typeof file === 'string') { + file = new minplayer.file({'path': file}); + } + else { + file = new minplayer.file(file); + } + + // Determine the best file for this browser. + if (file.priority > bestPriority) { + mFile = file; + } + } + + // Return the best minplayer file. + return mFile; +}; + +/** + * Loads a media player based on the current file. + */ +minplayer.prototype.loadPlayer = function() { + + // Do nothing if there isn't a file. + if (!this.options.file) { + this.error('No media found.'); + return; + } + + if (!this.options.file.player) { + this.error('Cannot play media: ' + this.options.file.mimetype); + return; + } + + // Reset the error. + this.error(); + + // Only destroy if the current player is different than the new player. + var player = this.options.file.player.toString(); + + // If there isn't media or if the players are different. + if (!this.media || (player !== this.currentPlayer)) { + + // Set the current media player. + this.currentPlayer = player; + + // Do nothing if we don't have a display. + if (!this.elements.display) { + this.error('No media display found.'); + return; + } + + // Destroy the current media. + var queue = {}; + if (this.media) { + queue = this.media.queue; + this.media.destroy(); + } + + // Get the class name and create the new player. + pClass = minplayer.players[this.options.file.player]; + + // Create the new media player. + this.options.mediaelement = this.elements.media; + this.media = new pClass(this.elements.display, this.options, queue); + + // Now get the media when it is ready. + this.get('media', (function(player) { + return function(media) { + + // Load the media. + media.load(player.options.file); + }; + })(this)); + } + // If the media object already exists... + else if (this.media) { + + // Now load the different media file. + this.media.load(this.options.file); + } +}; + +/** + * Load a set of files or a single file for the media player. + * + * @param {array} files An array of files to chose from to load. + */ +minplayer.prototype.load = function(files) { + + // Set the id and class. + var id = '', pClass = ''; + + // If no file was provided, then get it. + this.options.files = files || this.options.files; + this.options.file = this.getMediaFile(this.options.files); + + // Now load the player. + this.loadPlayer(); +}; + +/** + * Called when the player is resized. + */ +minplayer.prototype.resize = function() { + + // Call onRezie for each plugin. + this.get(function(plugin) { + plugin.onResize(); + }); +}; diff --git a/minplayer/src/minplayer.playLoader.js b/minplayer/src/minplayer.playLoader.js new file mode 100644 index 00000000..ca8ba601 --- /dev/null +++ b/minplayer/src/minplayer.playLoader.js @@ -0,0 +1,189 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The play loader base class, which is used to control the busy + * cursor, big play button, and the opaque background which shows when the + * player is paused. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +minplayer.playLoader = function(context, options) { + + // Define the flags that control the busy cursor. + this.busy = new minplayer.flags(); + + // Define the flags that control the big play button. + this.bigPlay = new minplayer.flags(); + + /** The preview image. */ + this.preview = null; + + // Derive from display + minplayer.display.call(this, 'playLoader', context, options); +}; + +/** Derive from minplayer.display. */ +minplayer.playLoader.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.playLoader.prototype.constructor = minplayer.playLoader; + +/** + * The constructor. + */ +minplayer.playLoader.prototype.construct = function() { + + // Call the media display constructor. + minplayer.display.prototype.construct.call(this); + + // Get the media plugin. + this.get('media', function(media) { + + // Only bind if this player does not have its own play loader. + if (!media.hasPlayLoader()) { + + // Get the poster image. + if (!this.options.preview) { + this.options.preview = media.elements.media.attr('poster'); + } + + // Reset the media's poster image. + media.elements.media.attr('poster', ''); + + // Load the preview image. + this.loadPreview(); + + // Trigger a play event when someone clicks on the controller. + if (this.elements.bigPlay) { + this.elements.bigPlay.unbind().bind('click', function(event) { + event.preventDefault(); + jQuery(this).hide(); + media.play(); + }); + } + + // Bind to the player events to control the play loader. + media.unbind('loadstart').bind('loadstart', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', true); + playLoader.bigPlay.setFlag('media', true); + if (playLoader.preview) { + playLoader.elements.preview.show(); + } + playLoader.checkVisibility(); + }; + })(this)); + media.bind('waiting', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', true); + playLoader.checkVisibility(); + }; + })(this)); + media.bind('loadeddata', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', false); + playLoader.checkVisibility(); + }; + })(this)); + media.bind('playing', (function(playLoader) { + return function(event) { + playLoader.busy.setFlag('media', false); + playLoader.bigPlay.setFlag('media', false); + if (playLoader.preview) { + playLoader.elements.preview.hide(); + } + playLoader.checkVisibility(); + }; + })(this)); + media.bind('pause', (function(playLoader) { + return function(event) { + playLoader.bigPlay.setFlag('media', true); + playLoader.checkVisibility(); + }; + })(this)); + } + else { + + // Hide the busy cursor. + if (this.elements.busy) { + this.elements.busy.unbind().hide(); + } + + // Hide the big play button. + if (this.elements.bigPlay) { + this.elements.bigPlay.unbind().hide(); + } + + // Hide the display. + this.display.unbind().hide(); + } + }); + + // We are now ready. + this.ready(); +}; + +/** + * Loads the preview image. + */ +minplayer.playLoader.prototype.loadPreview = function() { + + // If the preview element exists. + if (this.elements.preview) { + + // If there is a preview to show... + if (this.options.preview) { + + // Say that this has a preview. + this.elements.preview.addClass('has-preview').show(); + + // Create a new preview image. + this.preview = new minplayer.image(this.elements.preview, this.options); + + // Create the image. + this.preview.load(this.options.preview); + } + else { + + // Hide the preview. + this.elements.preview.hide(); + } + } +}; + +/** + * Hide or show certain elements based on the state of the busy and big play + * button. + */ +minplayer.playLoader.prototype.checkVisibility = function() { + + // Hide or show the busy cursor based on the flags. + if (this.busy.flag) { + this.elements.busy.show(); + } + else { + this.elements.busy.hide(); + } + + // Hide or show the big play button based on the flags. + if (this.bigPlay.flag) { + this.elements.bigPlay.show(); + } + else { + this.elements.bigPlay.hide(); + } + + // Show the control either flag is set. + if (this.bigPlay.flag || this.busy.flag) { + this.display.show(); + } + + // Hide the whole control if both flags are 0. + if (!this.bigPlay.flag && !this.busy.flag) { + this.display.hide(); + } +}; diff --git a/minplayer/src/minplayer.players.base.js b/minplayer/src/minplayer.players.base.js new file mode 100644 index 00000000..781f27b7 --- /dev/null +++ b/minplayer/src/minplayer.players.base.js @@ -0,0 +1,591 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The base media player class where all media players derive from. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.base = function(context, options, queue) { + + // Derive from display + minplayer.display.call(this, 'media', context, options, queue); +}; + +/** Derive from minplayer.display. */ +minplayer.players.base.prototype = new minplayer.display(); + +/** Reset the constructor. */ +minplayer.players.base.prototype.constructor = minplayer.players.base; + +/** + * @see minplayer.display.getElements + * @this minplayer.players.base + * @return {object} The elements for this display. + */ +minplayer.players.base.prototype.getElements = function() { + var elements = minplayer.display.prototype.getElements.call(this); + return jQuery.extend(elements, { + media: this.options.mediaelement + }); +}; + +/** + * Get the priority of this media player. + * + * @return {number} The priority of this media player. + */ +minplayer.players.base.getPriority = function() { + return 0; +}; + +/** + * Returns the ID for the media being played. + * + * @param {object} file A {@link minplayer.file} object. + * @return {string} The ID for the provided media. + */ +minplayer.players.base.getMediaId = function(file) { + return ''; +}; + +/** + * Determine if we can play the media file. + * + * @param {object} file A {@link minplayer.file} object. + * @return {boolean} If this player can play this media type. + */ +minplayer.players.base.canPlay = function(file) { + return false; +}; + +/** + * @see minplayer.plugin.construct + * @this minplayer.players.base + */ +minplayer.players.base.prototype.construct = function() { + + // Call the media display constructor. + minplayer.display.prototype.construct.call(this); + + // Clear the media player. + this.clear(); + + /** The currently loaded media file. */ + this.mediaFile = this.options.file; + + // Get the player display object. + if (!this.playerFound()) { + + // Remove the media element if found + if (this.elements.media) { + this.elements.media.remove(); + } + + // Create a new media player element. + this.elements.media = jQuery(this.create()); + this.display.html(this.elements.media); + } + + // Get the player object... + this.player = this.getPlayer(); + + // Set the focus of the element based on if they click in or outside of it. + jQuery(document).bind('click', (function(player) { + return function(event) { + if (jQuery(event.target).closest('#' + player.options.id).length == 0) { + player.hasFocus = false; + } + else { + player.hasFocus = true; + } + }; + })(this)); + + // Bind to key events... + jQuery(document).bind('keydown', (function(player) { + return function(event) { + if (player.hasFocus) { + event.preventDefault(); + switch (event.keyCode) { + case 32: // SPACE + case 179: // GOOGLE play/pause button. + if (player.playing) { + player.pause(); + } + else { + player.play(); + } + break; + case 38: // UP + player.setVolumeRelative(0.1); + break; + case 40: // DOWN + player.setVolumeRelative(-0.1); + break; + case 37: // LEFT + case 227: // GOOGLE TV REW + player.seekRelative(-0.05); + break; + case 39: // RIGHT + case 228: // GOOGLE TV FW + player.seekRelative(0.05); + break; + } + } + }; + })(this)); +}; + +/** + * @see minplayer.plugin.destroy. + */ +minplayer.players.base.prototype.destroy = function() { + minplayer.plugin.prototype.destroy.call(this); + this.clear(); +}; + +/** + * Clears the media player. + */ +minplayer.players.base.prototype.clear = function() { + + // Reset the ready flag. + this.playerReady = false; + + // Reset the player. + this.reset(); + + // If the player exists, then unbind all events. + if (this.player) { + jQuery(this.player).unbind(); + } +}; + +/** + * Resets all variables. + */ +minplayer.players.base.prototype.reset = function() { + + // The duration of the player. + this.duration = new minplayer.async(); + + // The current play time of the player. + this.currentTime = new minplayer.async(); + + // The amount of bytes loaded in the player. + this.bytesLoaded = new minplayer.async(); + + // The total amount of bytes for the media. + this.bytesTotal = new minplayer.async(); + + // The bytes that the download started with. + this.bytesStart = new minplayer.async(); + + // The current volume of the player. + this.volume = new minplayer.async(); + + // Reset focus. + this.hasFocus = false; + + // We are not playing. + this.playing = false; + + // We are not loading. + this.loading = false; + + // Tell everyone else we reset. + this.trigger('pause'); + this.trigger('waiting'); + this.trigger('progress', {loaded: 0, total: 0, start: 0}); + this.trigger('timeupdate', {currentTime: 0, duration: 0}); +}; + +/** + * Called when the player is ready to recieve events and commands. + */ +minplayer.players.base.prototype.onReady = function() { + + // Only continue if we are not already ready. + if (this.playerReady) { + return; + } + + // Set the ready flag. + this.playerReady = true; + + // Set the volume to the default. + this.setVolume(this.options.volume / 100); + + // Setup the progress interval. + this.loading = true; + + // Create a poll to get the progress. + this.poll((function(player) { + return function() { + + // Only do this if the play interval is set. + if (player.loading) { + + // Get the bytes loaded asynchronously. + player.getBytesLoaded(function(bytesLoaded) { + + // Get the bytes total asynchronously. + player.getBytesTotal(function(bytesTotal) { + + // Trigger an event about the progress. + if (bytesLoaded || bytesTotal) { + + // Get the bytes start, but don't require it. + var bytesStart = 0; + player.getBytesStart(function(val) { + bytesStart = val; + }); + + // Trigger a progress event. + player.trigger('progress', { + loaded: bytesLoaded, + total: bytesTotal, + start: bytesStart + }); + + // Say we are not longer loading if they are equal. + if (bytesLoaded >= bytesTotal) { + player.loading = false; + } + } + }); + }); + } + + // Keep polling as long as its loading... + return player.loading; + }; + })(this), 1000); + + // We are now ready. + this.ready(); + + // Trigger that the load has started. + this.trigger('loadstart'); +}; + +/** + * Should be called when the media is playing. + */ +minplayer.players.base.prototype.onPlaying = function() { + + // Trigger an event that we are playing. + this.trigger('playing'); + + // Say that this player has focus. + this.hasFocus = true; + + // Set the playInterval to true. + this.playing = true; + + // Create a poll to get the timeupate. + this.poll((function(player) { + return function() { + + // Only do this if the play interval is set. + if (player.playing) { + + // Get the current time asyncrhonously. + player.getCurrentTime(function(currentTime) { + + // Get the duration asynchronously. + player.getDuration(function(duration) { + + // Convert these to floats. + currentTime = parseFloat(currentTime); + duration = parseFloat(duration); + + // Trigger an event about the progress. + if (currentTime || duration) { + + // Trigger an update event. + player.trigger('timeupdate', { + currentTime: currentTime, + duration: duration + }); + } + }); + }); + } + + // Keep polling as long as it is playing. + return player.playing; + }; + })(this), 1000); +}; + +/** + * Should be called when the media is paused. + */ +minplayer.players.base.prototype.onPaused = function() { + + // Trigger an event that we are paused. + this.trigger('pause'); + + // Remove focus. + this.hasFocus = false; + + // Say we are not playing. + this.playing = false; +}; + +/** + * Should be called when the media is complete. + */ +minplayer.players.base.prototype.onComplete = function() { + // Stop the intervals. + this.playing = false; + this.loading = false; + this.hasFocus = false; + this.trigger('ended'); +}; + +/** + * Should be called when the media is done loading. + */ +minplayer.players.base.prototype.onLoaded = function() { + this.trigger('loadeddata'); +}; + +/** + * Should be called when the player is waiting. + */ +minplayer.players.base.prototype.onWaiting = function() { + this.trigger('waiting'); +}; + +/** + * Called when an error occurs. + * + * @param {string} errorCode The error that was triggered. + */ +minplayer.players.base.prototype.onError = function(errorCode) { + this.hasFocus = false; + this.trigger('error', errorCode); +}; + +/** + * @see minplayer.players.base#isReady + * @return {boolean} Checks to see if the Flash is ready. + */ +minplayer.players.base.prototype.isReady = function() { + + // Return that the player is set and the ready flag is good. + return (this.player && this.playerReady); +}; + +/** + * Determines if the player should show the playloader. + * + * @return {bool} If this player implements its own playLoader. + */ +minplayer.players.base.prototype.hasPlayLoader = function() { + return false; +}; + +/** + * Returns if the media player is already within the DOM. + * + * @return {boolean} TRUE - if the player is in the DOM, FALSE otherwise. + */ +minplayer.players.base.prototype.playerFound = function() { + return false; +}; + +/** + * Creates the media player and inserts it in the DOM. + * + * @return {object} The media player entity. + */ +minplayer.players.base.prototype.create = function() { + this.reset(); + return null; +}; + +/** + * Returns the media player object. + * + * @return {object} The media player object. + */ +minplayer.players.base.prototype.getPlayer = function() { + return this.player; +}; + +/** + * Loads a new media player. + * + * @param {object} file A {@link minplayer.file} object. + */ +minplayer.players.base.prototype.load = function(file) { + + // Store the media file for future lookup. + var isString = (typeof this.mediaFile == 'string'); + var path = isString ? this.mediaFile : this.mediaFile.path; + if (file && (file.path != path)) { + this.reset(); + this.mediaFile = file; + } +}; + +/** + * Play the loaded media file. + */ +minplayer.players.base.prototype.play = function() { +}; + +/** + * Pause the loaded media file. + */ +minplayer.players.base.prototype.pause = function() { +}; + +/** + * Stop the loaded media file. + */ +minplayer.players.base.prototype.stop = function() { + this.playing = false; + this.loading = false; + this.hasFocus = false; +}; + +/** + * Seeks to relative position. + * + * @param {number} pos Relative position. -1 to 1 (percent), > 1 (seconds). + */ +minplayer.players.base.prototype.seekRelative = function(pos) { + + // Get the current time asyncrhonously. + this.getCurrentTime((function(player) { + return function(currentTime) { + + // Get the duration asynchronously. + player.getDuration(function(duration) { + + // Only do this if we have a duration. + if (duration) { + + // Get the position. + var seekPos = 0; + if ((pos > -1) && (pos < 1)) { + seekPos = (currentTime / duration) + parseFloat(pos); + } + else { + seekPos = (currentTime + parseFloat(pos)) / duration; + } + + // Set the seek value. + player.seek(seekPos); + } + }); + }; + })(this)); +}; + +/** + * Seek the loaded media. + * + * @param {number} pos The position to seek the minplayer. 0 to 1. + */ +minplayer.players.base.prototype.seek = function(pos) { +}; + +/** + * Set the volume of the loaded minplayer. + * + * @param {number} vol -1 to 1 - The relative amount to increase or decrease. + */ +minplayer.players.base.prototype.setVolumeRelative = function(vol) { + + // Get the volume + this.getVolume((function(player) { + return function(newVol) { + newVol += parseFloat(vol); + newVol = (newVol < 0) ? 0 : newVol; + newVol = (newVol > 1) ? 1 : newVol; + player.setVolume(newVol); + }; + })(this)); +}; + +/** + * Set the volume of the loaded minplayer. + * + * @param {number} vol The volume to set the media. 0 to 1. + */ +minplayer.players.base.prototype.setVolume = function(vol) { + this.trigger('volumeupdate', vol); +}; + +/** + * Get the volume from the loaded media. + * + * @param {function} callback Called when the volume is determined. + * @return {number} The volume of the media; 0 to 1. + */ +minplayer.players.base.prototype.getVolume = function(callback) { + return this.volume.get(callback); +}; + +/** + * Get the current time for the media being played. + * + * @param {function} callback Called when the time is determined. + * @return {number} The volume of the media; 0 to 1. + */ +minplayer.players.base.prototype.getCurrentTime = function(callback) { + return this.currentTime.get(callback); +}; + +/** + * Return the duration of the loaded media. + * + * @param {function} callback Called when the duration is determined. + * @return {number} The duration of the loaded media. + */ +minplayer.players.base.prototype.getDuration = function(callback) { + return this.duration.get(callback); +}; + +/** + * Return the start bytes for the loaded media. + * + * @param {function} callback Called when the start bytes is determined. + * @return {int} The bytes that were started. + */ +minplayer.players.base.prototype.getBytesStart = function(callback) { + return this.bytesStart.get(callback); +}; + +/** + * Return the bytes of media loaded. + * + * @param {function} callback Called when the bytes loaded is determined. + * @return {int} The amount of bytes loaded. + */ +minplayer.players.base.prototype.getBytesLoaded = function(callback) { + return this.bytesLoaded.get(callback); +}; + +/** + * Return the total amount of bytes. + * + * @param {function} callback Called when the bytes total is determined. + * @return {int} The total amount of bytes for this media. + */ +minplayer.players.base.prototype.getBytesTotal = function(callback) { + return this.bytesTotal.get(callback); +}; diff --git a/minplayer/src/minplayer.players.flash.js b/minplayer/src/minplayer.players.flash.js new file mode 100644 index 00000000..8afff596 --- /dev/null +++ b/minplayer/src/minplayer.players.flash.js @@ -0,0 +1,108 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The Flash media player class to control the flash fallback. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.flash = function(context, options, queue) { + + // Derive from players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.flash.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.flash.prototype.constructor = minplayer.players.flash; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.flash.getPriority = function() { + return 0; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.flash.canPlay = function(file) { + return false; +}; + +/** + * API to return the Flash player code provided params. + * + * @param {object} params The params used to populate the Flash code. + * @return {object} A Flash DOM element. + */ +minplayer.players.flash.getFlash = function(params) { + // Get the protocol. + var protocol = window.location.protocol; + if (protocol.charAt(protocol.length - 1) == ':') { + protocol = protocol.substring(0, protocol.length - 1); + } + + // Convert the flashvars object to a string... + var flashVars = jQuery.param(params.flashvars); + + // Set the codebase. + var codebase = protocol + '://fpdownload.macromedia.com'; + codebase += '/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0'; + + // Get the HTML flash object string. + var flash = ' '; + flash += ''; + flash += ''; + flash += ''; + flash += ''; + flash += ''; + flash += ''; + flash += ' 0); +}; + +/** + * @see minplayer.players.base#getPlayer + * @return {object} The media player object. + */ +minplayer.players.flash.prototype.getPlayer = function() { + // IE needs the object, everyone else just needs embed. + var object = jQuery.browser.msie ? 'object' : 'embed'; + return jQuery(object, this.display).eq(0)[0]; +}; diff --git a/minplayer/src/minplayer.players.html5.js b/minplayer/src/minplayer.players.html5.js new file mode 100644 index 00000000..34704130 --- /dev/null +++ b/minplayer/src/minplayer.players.html5.js @@ -0,0 +1,343 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The HTML5 media player implementation. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.html5 = function(context, options, queue) { + + // Derive players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.html5.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.html5.prototype.constructor = minplayer.players.html5; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.html5.getPriority = function() { + return 10; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.html5.canPlay = function(file) { + switch (file.mimetype) { + case 'video/ogg': + return !!minplayer.playTypes.videoOGG; + case 'video/mp4': + case 'video/x-mp4': + case 'video/m4v': + case 'video/x-m4v': + return !!minplayer.playTypes.videoH264; + case 'video/x-webm': + case 'video/webm': + case 'application/octet-stream': + return !!minplayer.playTypes.videoWEBM; + case 'audio/ogg': + return !!minplayer.playTypes.audioOGG; + case 'audio/mpeg': + return !!minplayer.playTypes.audioMP3; + case 'audio/mp4': + return !!minplayer.playTypes.audioMP4; + default: + return false; + } +}; + +/** + * @see minplayer.plugin.construct + */ +minplayer.players.html5.prototype.construct = function() { + + // Call base constructor. + minplayer.players.base.prototype.construct.call(this); + + // For the HTML5 player, we will just pass events along... + if (this.player) { + + this.player.addEventListener('abort', (function(player) { + return function() { + player.trigger('abort'); + }; + })(this), false); + this.player.addEventListener('loadstart', (function(player) { + return function() { + player.onReady(); + }; + })(this), false); + this.player.addEventListener('loadeddata', (function(player) { + return function() { + player.onLoaded(); + }; + })(this), false); + this.player.addEventListener('loadedmetadata', (function(player) { + return function() { + player.onLoaded(); + }; + })(this), false); + this.player.addEventListener('canplaythrough', (function(player) { + return function() { + player.onLoaded(); + }; + })(this), false); + this.player.addEventListener('ended', (function(player) { + return function() { + player.onComplete(); + }; + })(this), false); + this.player.addEventListener('pause', (function(player) { + return function() { + player.onPaused(); + }; + })(this), false); + this.player.addEventListener('play', (function(player) { + return function() { + player.onPlaying(); + }; + })(this), false); + this.player.addEventListener('playing', (function(player) { + return function() { + player.onPlaying(); + }; + })(this), false); + this.player.addEventListener('error', (function(player) { + return function() { + player.trigger('error', 'An error occured - ' + this.error.code); + }; + })(this), false); + this.player.addEventListener('waiting', (function(player) { + return function() { + player.onWaiting(); + }; + })(this), false); + this.player.addEventListener('durationchange', (function(player) { + return function() { + player.duration.set(this.duration); + player.trigger('durationchange', {duration: this.duration}); + }; + })(this), false); + this.player.addEventListener('progress', (function(player) { + return function(event) { + player.bytesTotal.set(event.total); + player.bytesLoaded.set(event.loaded); + }; + })(this), false); + + // Say we are ready. + this.onReady(); + } +}; + +/** + * @see minplayer.players.base#playerFound + * @return {boolean} TRUE - if the player is in the DOM, FALSE otherwise. + */ +minplayer.players.html5.prototype.playerFound = function() { + return (this.display.find(this.mediaFile.type).length > 0); +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.html5.prototype.create = function() { + minplayer.players.base.prototype.create.call(this); + var element = jQuery(document.createElement(this.mediaFile.type)) + .attr(this.options.attributes) + .append( + jQuery(document.createElement('source')).attr({ + 'src': this.mediaFile.path + }) + ); + + // Fix the fluid width and height. + element.eq(0)[0].setAttribute('width', '100%'); + element.eq(0)[0].setAttribute('height', '100%'); + return element; +}; + +/** + * @see minplayer.players.base#getPlayer + * @return {object} The media player object. + */ +minplayer.players.html5.prototype.getPlayer = function() { + return this.elements.media.eq(0)[0]; +}; + +/** + * @see minplayer.players.base#load + */ +minplayer.players.html5.prototype.load = function(file) { + + if (file) { + + // Get the current source. + var src = this.elements.media.attr('src'); + if (!src) { + src = jQuery('source', this.elements.media).eq(0).attr('src'); + } + + // If the source is different. + if (src != file.path) { + + // Change the source... + var code = ''; + this.elements.media.removeAttr('src').empty().html(code); + } + } + + // Always call the base first on load... + minplayer.players.base.prototype.load.call(this, file); +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.html5.prototype.play = function() { + minplayer.players.base.prototype.play.call(this); + if (this.isReady()) { + this.player.play(); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.html5.prototype.pause = function() { + minplayer.players.base.prototype.pause.call(this); + if (this.isReady()) { + this.player.pause(); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.html5.prototype.stop = function() { + minplayer.players.base.prototype.stop.call(this); + if (this.isReady()) { + this.player.pause(); + this.player.src = ''; + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.html5.prototype.seek = function(pos) { + minplayer.players.base.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.currentTime = pos; + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.html5.prototype.setVolume = function(vol) { + minplayer.players.base.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.player.volume = vol; + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.html5.prototype.getVolume = function(callback) { + if (this.isReady()) { + callback(this.player.volume); + } +}; + +/** + * @see minplayer.players.base#getDuration + */ +minplayer.players.html5.prototype.getDuration = function(callback) { + if (this.isReady()) { + callback(this.player.duration); + } +}; + +/** + * @see minplayer.players.base#getCurrentTime + */ +minplayer.players.html5.prototype.getCurrentTime = function(callback) { + if (this.isReady()) { + callback(this.player.currentTime); + } +}; + +/** + * @see minplayer.players.base#getBytesLoaded + */ +minplayer.players.html5.prototype.getBytesLoaded = function(callback) { + if (this.isReady()) { + var loaded = 0; + + // Check several different possibilities. + if (this.bytesLoaded.value) { + loaded = this.bytesLoaded.value; + } + else if (this.player.buffered && + this.player.buffered.length > 0 && + this.player.buffered.end && + this.player.duration) { + loaded = this.player.buffered.end(0); + } + else if (this.player.bytesTotal != undefined && + this.player.bytesTotal > 0 && + this.player.bufferedBytes != undefined) { + loaded = this.player.bufferedBytes; + } + + // Return the loaded amount. + callback(loaded); + } +}; + +/** + * @see minplayer.players.base#getBytesTotal + */ +minplayer.players.html5.prototype.getBytesTotal = function(callback) { + if (this.isReady()) { + + var total = 0; + + // Check several different possibilities. + if (this.bytesTotal.value) { + total = this.bytesTotal.value; + } + else if (this.player.buffered && + this.player.buffered.length > 0 && + this.player.buffered.end && + this.player.duration) { + total = this.player.duration; + } + else if (this.player.bytesTotal != undefined && + this.player.bytesTotal > 0 && + this.player.bufferedBytes != undefined) { + total = this.player.bytesTotal; + } + + // Return the loaded amount. + callback(total); + } +}; diff --git a/minplayer/src/minplayer.players.minplayer.js b/minplayer/src/minplayer.players.minplayer.js new file mode 100644 index 00000000..ad224e2f --- /dev/null +++ b/minplayer/src/minplayer.players.minplayer.js @@ -0,0 +1,275 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.display + * @class The Flash media player class to control the flash fallback. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.minplayer = function(context, options, queue) { + + // Derive from players flash. + minplayer.players.flash.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.flash. */ +minplayer.players.minplayer.prototype = new minplayer.players.flash(); + +/** Reset the constructor. */ +minplayer.players.minplayer.prototype.constructor = minplayer.players.minplayer; + +/** + * Called when the Flash player is ready. + * + * @param {string} id The media player ID. + */ +window.onFlashPlayerReady = function(id) { + var media = minplayer.get(id, 'media'); + if (media) { + media.onReady(); + } +}; + +/** + * Called when the Flash player updates. + * + * @param {string} id The media player ID. + * @param {string} eventType The event type that was triggered. + */ +window.onFlashPlayerUpdate = function(id, eventType) { + var media = minplayer.get(id, 'media'); + if (media) { + media.onMediaUpdate(eventType); + } +}; + +/** + * Used to debug from the Flash player to the browser console. + * + * @param {string} debug The debug string. + */ +window.onFlashPlayerDebug = function(debug) { + minplayer.console.log(debug); +}; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.minplayer.getPriority = function() { + return 1; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.minplayer.canPlay = function(file) { + switch (file.mimetype) { + case 'video/mp4': + case 'video/x-mp4': + case 'video/m4v': + case 'video/x-m4v': + case 'video/x-webm': + case 'video/webm': + case 'application/octet-stream': + case 'video/quicktime': + case 'video/3gpp2': + case 'video/3gpp': + case 'application/x-shockwave-flash': + case 'audio/mpeg': + case 'audio/mp4': + case 'audio/aac': + case 'audio/vnd.wave': + case 'audio/x-ms-wma': + return true; + + default: + return false; + } +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.minplayer.prototype.create = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + swfplayer: 'flash/minplayer.swf' + }, this.options); + + minplayer.players.flash.prototype.create.call(this); + + // The flash variables for this flash player. + var flashVars = { + 'id': this.options.id, + 'debug': this.options.debug, + 'config': 'nocontrols', + 'file': this.mediaFile.path, + 'autostart': this.options.autoplay + }; + + // Return a flash media player object. + return minplayer.players.flash.getFlash({ + swf: this.options.swfplayer, + id: this.options.id + '_player', + width: this.options.width, + height: '100%', + flashvars: flashVars, + wmode: this.options.wmode + }); +}; + +/** + * Called when the Flash player has an update. + * + * @param {string} eventType The event that was triggered in the player. + */ +minplayer.players.minplayer.prototype.onMediaUpdate = function(eventType) { + switch (eventType) { + case 'mediaMeta': + this.onLoaded(); + break; + case 'mediaPlaying': + this.onPlaying(); + break; + case 'mediaPaused': + this.onPaused(); + break; + case 'mediaComplete': + this.onComplete(); + break; + } +}; + +/** + * @see minplayer.players.base#load + */ +minplayer.players.minplayer.prototype.load = function(file) { + minplayer.players.flash.prototype.load.call(this, file); + if (file && this.isReady()) { + this.player.loadMedia(file.path, file.stream); + } +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.minplayer.prototype.play = function() { + minplayer.players.flash.prototype.play.call(this); + if (this.isReady()) { + this.player.playMedia(); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.minplayer.prototype.pause = function() { + minplayer.players.flash.prototype.pause.call(this); + if (this.isReady()) { + this.player.pauseMedia(); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.minplayer.prototype.stop = function() { + minplayer.players.flash.prototype.stop.call(this); + if (this.isReady()) { + this.player.stopMedia(); + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.minplayer.prototype.seek = function(pos) { + minplayer.players.flash.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.seekMedia(pos); + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.minplayer.prototype.setVolume = function(vol) { + minplayer.players.flash.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.player.setVolume(vol); + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.minplayer.prototype.getVolume = function(callback) { + if (this.isReady()) { + callback(this.player.getVolume()); + } +}; + +/** + * @see minplayer.players.flash#getDuration + */ +minplayer.players.minplayer.prototype.getDuration = function(callback) { + if (this.isReady()) { + + // Check to see if it is immediately available. + var duration = this.player.getDuration(); + if (duration) { + callback(duration); + } + else { + + // If not, then poll every second for the duration. + this.poll((function(player) { + return function() { + duration = player.player.getDuration(); + if (duration) { + callback(duration); + } + return !duration; + }; + })(this), 1000); + } + } +}; + +/** + * @see minplayer.players.base#getCurrentTime + */ +minplayer.players.minplayer.prototype.getCurrentTime = function(callback) { + if (this.isReady()) { + callback(this.player.getCurrentTime()); + } +}; + +/** + * @see minplayer.players.base#getBytesLoaded + */ +minplayer.players.minplayer.prototype.getBytesLoaded = function(callback) { + if (this.isReady()) { + callback(this.player.getMediaBytesLoaded()); + } +}; + +/** + * @see minplayer.players.base#getBytesTotal. + */ +minplayer.players.minplayer.prototype.getBytesTotal = function(callback) { + if (this.isReady()) { + callback(this.player.getMediaBytesTotal()); + } +}; diff --git a/minplayer/src/minplayer.players.vimeo.js b/minplayer/src/minplayer.players.vimeo.js new file mode 100644 index 00000000..a7a9b88a --- /dev/null +++ b/minplayer/src/minplayer.players.vimeo.js @@ -0,0 +1,262 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.players.base + * @class The vimeo media player. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.vimeo = function(context, options, queue) { + + // Derive from players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.vimeo.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.vimeo.prototype.constructor = minplayer.players.vimeo; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.vimeo.getPriority = function() { + return 10; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.vimeo.canPlay = function(file) { + + // Check for the mimetype for vimeo. + if (file.mimetype === 'video/vimeo') { + return true; + } + + // If the path is a vimeo path, then return true. + return (file.path.search(/^http(s)?\:\/\/(www\.)?vimeo\.com/i) === 0); +}; + +/** + * Return the ID for a provided media file. + * + * @param {object} file A {@link minplayer.file} object. + * @return {string} The ID for the provided media. + */ +minplayer.players.vimeo.getMediaId = function(file) { + var regex = /^http[s]?\:\/\/(www\.)?vimeo\.com\/(\?v\=)?([0-9]+)/i; + if (file.path.search(regex) === 0) { + return file.path.match(regex)[3]; + } + else { + return file.path; + } +}; + +/** + * @see minplayer.players.base#reset + */ +minplayer.players.vimeo.prototype.reset = function() { + + // Reset the flash variables.. + minplayer.players.base.prototype.reset.call(this); +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.vimeo.prototype.create = function() { + minplayer.players.base.prototype.create.call(this); + + // Insert the Vimeo Froogaloop player. + var tag = document.createElement('script'); + tag.src = 'http://a.vimeocdn.com/js/froogaloop2.min.js'; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + + // Create the iframe for this player. + var iframe = document.createElement('iframe'); + iframe.setAttribute('id', this.options.id + '-player'); + iframe.setAttribute('type', 'text/html'); + iframe.setAttribute('width', '100%'); + iframe.setAttribute('height', '100%'); + iframe.setAttribute('frameborder', '0'); + + // Get the source. + var src = 'http://player.vimeo.com/video/'; + src += this.mediaFile.id + '?'; + + // Add the parameters to the src. + src += jQuery.param({ + 'wmode': 'opaque', + 'api': 1, + 'player_id': this.options.id + '-player', + 'title': 0, + 'byline': 0, + 'portrait': 0, + 'autoplay': this.options.autoplay, + 'loop': this.options.loop + }); + + // Set the source of the iframe. + iframe.setAttribute('src', src); + + // Now register this player when the froogaloop code is loaded. + this.poll((function(player) { + return function() { + if (window.Froogaloop) { + player.player = window.Froogaloop(iframe); + player.player.addEvent('ready', function() { + player.onReady(); + }); + } + return !window.Froogaloop; + }; + })(this), 200); + + // Trigger that the load has started. + this.trigger('loadstart'); + + // Return the player. + return iframe; +}; + +/** + * @see minplayer.players.base#onReady + */ +minplayer.players.vimeo.prototype.onReady = function(player_id) { + + // Add the other listeners. + this.player.addEvent('loadProgress', (function(player) { + return function(progress) { + player.duration.set(parseFloat(progress.duration)); + player.bytesLoaded.set(progress.bytesLoaded); + player.bytesTotal.set(progress.bytesTotal); + }; + })(this)); + + this.player.addEvent('playProgress', (function(player) { + return function(progress) { + player.duration.set(parseFloat(progress.duration)); + player.currentTime.set(parseFloat(progress.seconds)); + }; + })(this)); + + this.player.addEvent('play', (function(player) { + return function() { + player.onPlaying(); + }; + })(this)); + + this.player.addEvent('pause', (function(player) { + return function() { + player.onPaused(); + }; + })(this)); + + this.player.addEvent('finish', (function(player) { + return function() { + player.onComplete(); + }; + })(this)); + + minplayer.players.base.prototype.onReady.call(this); + this.onLoaded(); +}; + +/** + * Checks to see if this player can be found. + * @return {bool} TRUE - Player is found, FALSE - otherwise. + */ +minplayer.players.vimeo.prototype.playerFound = function() { + var iframe = this.display.find('iframe#' + this.options.id + '-player'); + return (iframe.length > 0); +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.vimeo.prototype.play = function() { + minplayer.players.base.prototype.play.call(this); + if (this.isReady()) { + this.player.api('play'); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.vimeo.prototype.pause = function() { + minplayer.players.base.prototype.pause.call(this); + if (this.isReady()) { + this.player.api('pause'); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.vimeo.prototype.stop = function() { + minplayer.players.base.prototype.stop.call(this); + if (this.isReady()) { + this.player.api('unload'); + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.vimeo.prototype.seek = function(pos) { + minplayer.players.base.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.api('seekTo', pos); + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.vimeo.prototype.setVolume = function(vol) { + minplayer.players.base.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.volume.set(vol); + this.player.api('setVolume', vol); + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.vimeo.prototype.getVolume = function(callback) { + this.player.api('getVolume', function(vol) { + callback(vol); + }); +}; + +/** + * @see minplayer.players.base#getDuration. + */ +minplayer.players.vimeo.prototype.getDuration = function(callback) { + if (this.isReady()) { + if (this.duration.value) { + callback(this.duration.value); + } + else { + this.player.api('getDuration', function(duration) { + callback(duration); + }); + } + } +}; diff --git a/minplayer/src/minplayer.players.youtube.js b/minplayer/src/minplayer.players.youtube.js new file mode 100644 index 00000000..ed724197 --- /dev/null +++ b/minplayer/src/minplayer.players.youtube.js @@ -0,0 +1,346 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +/** All the media player implementations */ +minplayer.players = minplayer.players || {}; + +/** + * @constructor + * @extends minplayer.players.base + * @class The YouTube media player. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.players.youtube = function(context, options, queue) { + + /** The quality of the YouTube stream. */ + this.quality = 'default'; + + // Derive from players base. + minplayer.players.base.call(this, context, options, queue); +}; + +/** Derive from minplayer.players.base. */ +minplayer.players.youtube.prototype = new minplayer.players.base(); + +/** Reset the constructor. */ +minplayer.players.youtube.prototype.constructor = minplayer.players.youtube; + +/** + * @see minplayer.players.base#getPriority + * @return {number} The priority of this media player. + */ +minplayer.players.youtube.getPriority = function() { + return 10; +}; + +/** + * @see minplayer.players.base#canPlay + * @return {boolean} If this player can play this media type. + */ +minplayer.players.youtube.canPlay = function(file) { + + // Check for the mimetype for youtube. + if (file.mimetype === 'video/youtube') { + return true; + } + + // If the path is a YouTube path, then return true. + return (file.path.search(/^http(s)?\:\/\/(www\.)?youtube\.com/i) === 0); +}; + +/** + * Return the ID for a provided media file. + * + * @param {object} file A {@link minplayer.file} object. + * @return {string} The ID for the provided media. + */ +minplayer.players.youtube.getMediaId = function(file) { + var regex = /^http[s]?\:\/\/(www\.)?youtube\.com\/watch\?v=([a-zA-Z0-9]+)/i; + if (file.path.search(regex) === 0) { + return file.path.match(regex)[2]; + } + else { + return file.path; + } +}; + +/** + * Register this youtube player so that multiple players can be present + * on the same page without event collision. + */ +minplayer.players.youtube.prototype.register = function() { + + /** + * Register the standard youtube api ready callback. + */ + window.onYouTubePlayerAPIReady = function() { + + // Iterate over each media player. + jQuery.each(minplayer.get(null, 'player'), function(id, player) { + + // Make sure this is the youtube player. + if (player.currentPlayer == 'youtube') { + + // Create a new youtube player object for this instance only. + var playerId = id + '-player'; + + // Set this players media. + player.media.player = new YT.Player(playerId, { + events: { + 'onReady': function(event) { + player.media.onReady(event); + }, + 'onStateChange': function(event) { + player.media.onPlayerStateChange(event); + }, + 'onPlaybackQualityChange': function(newQuality) { + player.media.onQualityChange(newQuality); + }, + 'onError': function(errorCode) { + player.media.onError(errorCode); + } + } + }); + } + }); + } +}; + +/** + * Translates the player state for the YouTube API player. + * + * @param {number} playerState The YouTube player state. + */ +minplayer.players.youtube.prototype.setPlayerState = function(playerState) { + switch (playerState) { + case YT.PlayerState.CUED: + break; + case YT.PlayerState.BUFFERING: + this.onWaiting(); + break; + case YT.PlayerState.PAUSED: + this.onPaused(); + break; + case YT.PlayerState.PLAYING: + this.onPlaying(); + break; + case YT.PlayerState.ENDED: + this.onComplete(); + break; + default: + break; + } +}; + +/** + * Called when an error occurs. + * + * @param {string} event The onReady event that was triggered. + */ +minplayer.players.youtube.prototype.onReady = function(event) { + minplayer.players.base.prototype.onReady.call(this); + this.onLoaded(); +}; + +/** + * Checks to see if this player can be found. + * @return {bool} TRUE - Player is found, FALSE - otherwise. + */ +minplayer.players.youtube.prototype.playerFound = function() { + var iframe = this.display.find('iframe#' + this.options.id + '-player'); + return (iframe.length > 0); +}; + +/** + * Called when the player state changes. + * + * @param {object} event A JavaScript Event. + */ +minplayer.players.youtube.prototype.onPlayerStateChange = function(event) { + this.setPlayerState(event.data); +}; + +/** + * Called when the player quality changes. + * + * @param {string} newQuality The new quality for the change. + */ +minplayer.players.youtube.prototype.onQualityChange = function(newQuality) { + this.quality = newQuality.data; +}; + +/** + * Determines if the player should show the playloader. + * + * @return {bool} If this player implements its own playLoader. + */ +minplayer.players.youtube.prototype.hasPlayLoader = function() { + return true; +}; + +/** + * @see minplayer.players.base#create + * @return {object} The media player entity. + */ +minplayer.players.youtube.prototype.create = function() { + minplayer.players.base.prototype.create.call(this); + + // Insert the YouTube iframe API player. + var tag = document.createElement('script'); + tag.src = 'http://www.youtube.com/player_api?enablejsapi=1'; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + + // Now register this player. + this.register(); + + // Create the iframe for this player. + var iframe = document.createElement('iframe'); + iframe.setAttribute('id', this.options.id + '-player'); + iframe.setAttribute('type', 'text/html'); + iframe.setAttribute('width', '100%'); + iframe.setAttribute('height', '100%'); + iframe.setAttribute('frameborder', '0'); + + // Get the source. + var src = 'http://www.youtube.com/embed/'; + src += this.mediaFile.id + '?'; + + // Determine the origin of this script. + var origin = location.protocol; + origin += '//' + location.hostname; + origin += (location.port && ':' + location.port); + + // Add the parameters to the src. + src += jQuery.param({ + 'wmode': 'opaque', + 'controls': 0, + 'enablejsapi': 1, + 'origin': origin, + 'autoplay': this.options.autoplay, + 'loop': this.options.loop + }); + + // Set the source of the iframe. + iframe.setAttribute('src', src); + + // Return the player. + return iframe; +}; + +/** + * @see minplayer.players.base#load + */ +minplayer.players.youtube.prototype.load = function(file) { + minplayer.players.base.prototype.load.call(this, file); + if (file && this.isReady()) { + this.player.loadVideoById(file.id, 0, this.quality); + } +}; + +/** + * @see minplayer.players.base#play + */ +minplayer.players.youtube.prototype.play = function() { + minplayer.players.base.prototype.play.call(this); + if (this.isReady()) { + this.player.playVideo(); + } +}; + +/** + * @see minplayer.players.base#pause + */ +minplayer.players.youtube.prototype.pause = function() { + minplayer.players.base.prototype.pause.call(this); + if (this.isReady()) { + this.player.pauseVideo(); + } +}; + +/** + * @see minplayer.players.base#stop + */ +minplayer.players.youtube.prototype.stop = function() { + minplayer.players.base.prototype.stop.call(this); + if (this.isReady()) { + this.player.stopVideo(); + } +}; + +/** + * @see minplayer.players.base#seek + */ +minplayer.players.youtube.prototype.seek = function(pos) { + minplayer.players.base.prototype.seek.call(this, pos); + if (this.isReady()) { + this.player.seekTo(pos, true); + } +}; + +/** + * @see minplayer.players.base#setVolume + */ +minplayer.players.youtube.prototype.setVolume = function(vol) { + minplayer.players.base.prototype.setVolume.call(this, vol); + if (this.isReady()) { + this.player.setVolume(vol * 100); + } +}; + +/** + * @see minplayer.players.base#getVolume + */ +minplayer.players.youtube.prototype.getVolume = function(callback) { + if (this.isReady()) { + callback(this.player.getVolume()); + } +}; + +/** + * @see minplayer.players.base#getDuration. + */ +minplayer.players.youtube.prototype.getDuration = function(callback) { + if (this.isReady()) { + callback(this.player.getDuration()); + } +}; + +/** + * @see minplayer.players.base#getCurrentTime + */ +minplayer.players.youtube.prototype.getCurrentTime = function(callback) { + if (this.isReady()) { + callback(this.player.getCurrentTime()); + } +}; + +/** + * @see minplayer.players.base#getBytesStart. + */ +minplayer.players.youtube.prototype.getBytesStart = function(callback) { + if (this.isReady()) { + callback(this.player.getVideoStartBytes()); + } +}; + +/** + * @see minplayer.players.base#getBytesLoaded. + */ +minplayer.players.youtube.prototype.getBytesLoaded = function(callback) { + if (this.isReady()) { + callback(this.player.getVideoBytesLoaded()); + } +}; + +/** + * @see minplayer.players.base#getBytesTotal. + */ +minplayer.players.youtube.prototype.getBytesTotal = function(callback) { + if (this.isReady()) { + callback(this.player.getVideoBytesTotal()); + } +}; diff --git a/minplayer/src/minplayer.plugin.js b/minplayer/src/minplayer.plugin.js new file mode 100644 index 00000000..321f54b1 --- /dev/null +++ b/minplayer/src/minplayer.plugin.js @@ -0,0 +1,549 @@ +/** The minplayer namespace. */ +minplayer = minplayer || {}; + +/** Static array to keep track of all plugins. */ +minplayer.plugins = minplayer.plugins || {}; + +/** Static array to keep track of queues. */ +minplayer.queue = minplayer.queue || []; + +/** Mutex lock to keep multiple triggers from occuring. */ +minplayer.lock = false; + +/** + * @constructor + * @class The base class for all plugins. + * + * @param {string} name The name of this plugin. + * @param {object} context The jQuery context. + * @param {object} options This components options. + * @param {object} queue The event queue to pass events around. + */ +minplayer.plugin = function(name, context, options, queue) { + + /** The name of this plugin. */ + this.name = name; + + /** The ready flag. */ + this.pluginReady = false; + + /** The options for this plugin. */ + this.options = options || {}; + + /** The event queue. */ + this.queue = queue || {}; + + /** Keep track of already triggered events. */ + this.triggered = {}; + + /** Create a queue lock. */ + this.lock = false; + + // Only call the constructor if we have a context. + if (context) { + + /** Keep track of the context. */ + this.context = context; + + // Construct this plugin. + this.construct(); + } +}; + +/** + * The constructor which is called once the context is set. + * Any class deriving from the plugin class should place all context + * dependant functionality within this function instead of the standard + * constructor function since it is called on object derivation as well + * as object creation. + */ +minplayer.plugin.prototype.construct = function() { + + // Adds this as a plugin. + this.addPlugin(); +}; + +/** + * Destructor. + */ +minplayer.plugin.prototype.destroy = function() { + + // Unbind all events. + this.unbind(); +}; + +/** + * Creates a new plugin within this context. + * + * @param {string} name The name of the plugin you wish to create. + * @param {object} base The base object for this plugin. + * @param {object} context The context which you would like to create. + * @return {object} The new plugin object. + */ +minplayer.plugin.prototype.create = function(name, base, context) { + var plugin = null; + + // Make sure we have a base object. + base = base || 'minplayer'; + + // Make sure there is a context. + context = context || this.display; + + // See if this plugin exists within this object. + if (window[base][name]) { + + // Set the plugin. + plugin = window[base][name]; + + // See if a template version of the plugin exists. + if (plugin[this.options.template]) { + + plugin = plugin[this.options.template]; + } + + // Create the new plugin. + return new plugin(context, this.options); + } + + return null; +}; + +/** + * Plugins should call this method when they are ready. + */ +minplayer.plugin.prototype.ready = function() { + + // Keep this plugin from triggering multiple ready events. + if (!this.pluginReady) { + + // Set the ready flag. + this.pluginReady = true; + + // Now trigger that I am ready. + this.trigger('ready'); + + // Check the queue. + this.checkQueue(); + } +}; + +/** + * Adds a new plugin to this player. + * + * @param {string} name The name of this plugin. + * @param {object} plugin A new plugin object, derived from media.plugin. + */ +minplayer.plugin.prototype.addPlugin = function(name, plugin) { + name = name || this.name; + plugin = plugin || this; + + // Make sure the plugin is valid. + if (plugin.isValid()) { + + // If the plugins for this instance do not exist. + if (!minplayer.plugins[this.options.id]) { + + // Initialize the plugins. + minplayer.plugins[this.options.id] = {}; + } + + // Add this plugin. + minplayer.plugins[this.options.id][name] = plugin; + } +}; + +/** + * Create a polling timer. + * + * @param {function} callback The function to call when you poll. + * @param {integer} interval The interval you would like to poll. + */ +minplayer.plugin.prototype.poll = function(callback, interval) { + setTimeout((function(context) { + return function callLater() { + if (callback.call(context)) { + setTimeout(callLater, interval); + } + }; + })(this), interval); +}; + +/** + * Gets a plugin by name and calls callback when it is ready. + * + * @param {string} plugin The plugin of the plugin. + * @param {function} callback Called when the plugin is ready. + * @return {object} The plugin if no callback is provided. + */ +minplayer.plugin.prototype.get = function(plugin, callback) { + + // If they pass just a callback, then return all plugins when ready. + if (typeof plugin === 'function') { + callback = plugin; + plugin = null; + } + + // Return the minplayer.get equivalent. + return minplayer.get.call(this, this.options.id, plugin, callback); +}; + +/** + * Check the queue and execute it. + */ +minplayer.plugin.prototype.checkQueue = function() { + + // Initialize our variables. + var q = null, i = 0, check = false, newqueue = []; + + // Set the lock. + minplayer.lock = true; + + // Iterate through all the queues. + var length = minplayer.queue.length; + for (i = 0; i < length; i++) { + + // Get the queue. + q = minplayer.queue[i]; + + // Now check to see if this queue is about us. + check = !q.id && !q.plugin; + check |= (q.plugin == this.name) && (!q.id || (q.id == this.options.id)); + + // If the check passes... + if (check) { + check = minplayer.bind.call( + q.context, + q.event, + this.options.id, + this.name, + q.callback + ); + } + + // Add the queue back if it doesn't check out. + if (!check) { + + // Add this back to the queue. + newqueue.push(q); + } + } + + // Set the old queue to the new queue. + minplayer.queue = newqueue; + + // Release the lock. + minplayer.lock = false; +}; + +/** + * Trigger a media event. + * + * @param {string} type The event type. + * @param {object} data The event data object. + * @return {object} The plugin object. + */ +minplayer.plugin.prototype.trigger = function(type, data) { + data = data || {}; + data.plugin = this; + + // Add this to our triggered array. + this.triggered[type] = data; + + // Check to make sure the queue for this type exists. + if (this.queue.hasOwnProperty(type)) { + + var i = 0, queue = {}; + + // Iterate through all the callbacks in this queue. + for (i in this.queue[type]) { + + // Setup the event object, and call the callback. + queue = this.queue[type][i]; + queue.callback({target: this, data: queue.data}, data); + } + } + + // Return the plugin object. + return this; +}; + +/** + * Bind to a media event. + * + * @param {string} type The event type. + * @param {object} data The data to bind with the event. + * @param {function} fn The callback function. + * @return {object} The plugin object. + **/ +minplayer.plugin.prototype.bind = function(type, data, fn) { + + // Allow the data to be the callback. + if (typeof data === 'function') { + fn = data; + data = null; + } + + // You must bind to a specific event and have a callback. + if (!type || !fn) { + return; + } + + // Initialize the queue for this type. + this.queue[type] = this.queue[type] || []; + + // Unbind any existing equivalent events. + this.unbind(type, fn); + + // Now add this event to the queue. + this.queue[type].push({ + callback: fn, + data: data + }); + + // Now see if this event has already been triggered. + if (this.triggered[type]) { + + // Go ahead and trigger the event. + fn({target: this, data: data}, this.triggered[type]); + } + + // Return the plugin. + return this; +}; + +/** + * Unbind a media event. + * + * @param {string} type The event type. + * @param {function} fn The callback function. + * @return {object} The plugin object. + **/ +minplayer.plugin.prototype.unbind = function(type, fn) { + + // If this is locked then try again after 10ms. + if (this.lock) { + setTimeout((function(plugin) { + return function() { + plugin.unbind(type, fn); + }; + })(this), 10); + } + + // Set the lock. + this.lock = true; + + if (!type) { + this.queue = {}; + } + else if (!fn) { + this.queue[type] = []; + } + else { + // Iterate through all the callbacks and search for equal callbacks. + var i = 0, queue = {}; + for (i in this.queue[type]) { + if (this.queue[type][i].callback === fn) { + queue = this.queue[type].splice(1, 1); + delete queue; + } + } + } + + // Reset the lock. + this.lock = false; + + // Return the plugin. + return this; +}; + +/** + * Adds an item to the queue. + * + * @param {object} context The context which this is called within. + * @param {string} event The event to trigger on. + * @param {string} id The player ID. + * @param {string} plugin The name of the plugin. + * @param {function} callback Called when the event occurs. + */ +minplayer.addQueue = function(context, event, id, plugin, callback) { + + // See if it is locked... + if (!minplayer.lock) { + minplayer.queue.push({ + context: context, + id: id, + event: event, + plugin: plugin, + callback: callback + }); + } + else { + + // If so, then try again after 10 milliseconds. + setTimeout(function() { + minplayer.addQueue(context, id, event, plugin, callback); + }, 10); + } +}; + +/** + * Binds an event to a plugin instance, and if it doesn't exist, then caches + * it for a later time. + * + * @param {string} event The event to trigger on. + * @param {string} id The player ID. + * @param {string} plugin The name of the plugin. + * @param {function} callback Called when the event occurs. + * @return {boolean} If the bind was successful. + * @this The object in context who called this method. + */ +minplayer.bind = function(event, id, plugin, callback) { + + // If no callback exists, then just return false. + if (!callback) { + return false; + } + + // Get the plugins. + var inst = minplayer.plugins; + + // See if this plugin exists. + if (inst[id][plugin]) { + + // If so, then bind the event to this plugin. + inst[id][plugin].bind(event, {context: this}, function(event, data) { + callback.call(event.data.context, data.plugin); + }); + return true; + } + + // If not, then add it to the queue to bind later. + minplayer.addQueue(this, event, id, plugin, callback); + + // Return that this wasn't handled. + return false; +}; + +/** + * The main API for minPlayer. + * + * Provided that this function takes three parameters, there are 8 different + * ways to use this api. + * + * id (0x100) - You want a specific player. + * plugin (0x010) - You want a specific plugin. + * callback (0x001) - You only want it when it is ready. + * + * 000 - You want all plugins from all players, ready or not. + * + * var plugins = minplayer.get(); + * + * 001 - You want all plugins from all players, but only when ready. + * + * minplayer.get(function(plugin) { + * // Code goes here. + * }); + * + * 010 - You want a specific plugin from all players, ready or not... + * + * var medias = minplayer.get(null, 'media'); + * + * 011 - You want a specific plugin from all players, but only when ready. + * + * minplayer.get('player', function(player) { + * // Code goes here. + * }); + * + * 100 - You want all plugins from a specific player, ready or not. + * + * var plugins = minplayer.get('player_id'); + * + * 101 - You want all plugins from a specific player, but only when ready. + * + * minplayer.get('player_id', null, function(plugin) { + * // Code goes here. + * }); + * + * 110 - You want a specific plugin from a specific player, ready or not. + * + * var plugin = minplayer.get('player_id', 'media'); + * + * 111 - You want a specific plugin from a specific player, only when ready. + * + * minplayer.get('player_id', 'media', function(media) { + * // Code goes here. + * }); + * + * @this The context in which this function was called. + * @param {string} id The ID of the widget to get the plugins from. + * @param {string} plugin The name of the plugin. + * @param {function} callback Called when the plugin is ready. + * @return {object} The plugin object if it is immediately available. + */ +minplayer.get = function(id, plugin, callback) { + + // Normalize the arguments for a better interface. + if (typeof id === 'function') { + callback = id; + plugin = id = null; + } + + if (typeof plugin === 'function') { + callback = plugin; + plugin = id; + id = null; + } + + // Make sure the callback is a callback. + callback = (typeof callback === 'function') ? callback : null; + + // Get the plugins. + var plugins = minplayer.plugins; + + // 0x000 + if (!id && !plugin && !callback) { + return plugins; + } + // 0x100 + else if (id && !plugin && !callback) { + return plugins[id]; + } + // 0x110 + else if (id && plugin && !callback) { + return plugins[id][plugin]; + } + // 0x111 + else if (id && plugin && callback) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + // 0x011 + else if (!id && plugin && callback) { + for (var id in plugins) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + } + // 0x101 + else if (id && !plugin && callback) { + for (var plugin in plugins[id]) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + } + // 0x010 + else if (!id && plugin && !callback) { + var plugin_types = {}; + for (var id in plugins) { + if (plugins.hasOwnProperty(id) && plugins[id].hasOwnProperty(plugin)) { + plugin_types[id] = plugins[id][plugin]; + } + } + return plugin_types; + } + // 0x001 + else { + for (var id in plugins) { + for (var plugin in plugins[id]) { + minplayer.bind.call(this, 'ready', id, plugin, callback); + } + } + } +}; diff --git a/minplayer/templates/default/css/images/loader.gif b/minplayer/templates/default/css/images/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e2d16730415c52b18d085af4b497b6f9d009666 GIT binary patch literal 404 zcmZ?wbhEHb)Mnsj_{hL8bLPynw6yyAdLXIzpWDwhB-q(8z|~04fSHkjfkE+~lygyP zVo7R>LV0FMhC*UiVnt4VVv1g7URpkb;!hS%E}$wMAZ7p=$iQUO(#LUn+RYoypO11$ z-wXSEy7hrsTSVl-H1*nhv-U0LN!Rtf-hN8&*OARX?RG3sF!B)vT7qee?Gd0c3jB%5 z8)vl~UsLmWM&iBiJt;G0%s;iz%h{_yX9s)s*^O&os_<=MOcjyJkN8yEcgpYbqggsh zLC4o)HxcA81E7g3XJtj-$$!MpCA_`zVP(&fD+^Za;#S?BYU=U)B{nl)pM z=^29__fs!F%>}1{rUgj{_y7X^AaBzH8nLCT~T0GlW3ke@guXq zfA_^ wK;v0jZoG1NY?~D}vUUX6%XV=xH83zUeEFs*^2YV9Fwj~CPgg&ebxsLQ0FS3aNdN!< literal 0 HcmV?d00001 diff --git a/minplayer/templates/default/css/images/play-icon.png b/minplayer/templates/default/css/images/play-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..71a34135e4e77734e6a80e0bc72ec81e067e65e0 GIT binary patch literal 375 zcmV--0f_#IP);htG zAZDNjh8qk7X+V4rh$jQFG}T-T1#Cc^1H`wX7D!OT;9p2$oKOp3J`knE;O|)EU=}613XX*KtAZgWdRcf5f8GU6ly^` zx&=(I1Wlm@6;KOWKo)?^WcmO9Keci(%m>UsT*LC=!v~Py7YYsi3&e|oxCw~wg9KQR zB*+CTfw&%sZz2n_P+;IDke7k@GB!za4Bibj@Dx5pq!@f0h|7TZ2(@zFSs-=;Vk=?| zC1fxt?1F&U1nPZ~0Jc;CirrRd@*x|*3V*fWqX5Vlc>s`_Kw}iU2@>0RY83 VIH3}Z+zef9{?Cx%cR-sS`Y{p|J5{a4ssZ?rrI-TzL2V4sj z;5OT~?*@ax30|HSyou!zQ8~)GHHRyCpX3-k;p68b#E6zw%y6t z%l`#4=ujq;dFeRL2++M)-%SkvKJhEk4~N6?d_Mn1`XmrfCX-G@FcbS2G>49tiQU5Q zMZ=~%fCp&`ByfPtPl+e=7T(@UYa!W;t4wOIv=WZz47vuSk+A~o0sI6njn|CM;60X% z`vFa{+(@@6p=&)Z)g9x2)j?Q{#ZgYh5~Mi$G-_a@8}x^9CHuX0u+vD<#*z8P#hUi$^V& z%hhRYDHIA7!C%m4H6^&y!%KR#eTzP7-)#B^Q{y-~tZG4h=vx)&Idoq8Be7V_WhL9` zA5(AEfPbK`D%pUW=qP$o0lcR5UO=PjotBfRrFmNIN=x13+aTBWli3_?r;yyP9<)lf zJ7}+K>=`Rac=-t3)7m}Q;6F$2^l05d2Q}LPGr;lk)kJ5})-o~qR$S2j4YFPI12)fU z8Bb2dCDet6N&`-y_U9p*C)>YnnYCGeroROk08v!bv_qh#qyPW_07*qoM6N<$f=>=J A&;S4c literal 0 HcmV?d00001 diff --git a/minplayer/templates/default/css/images/volume-mute-icon.png b/minplayer/templates/default/css/images/volume-mute-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..23979e323b2989b87cdea7527c913e0d532f7411 GIT binary patch literal 331 zcmV-R0kr;!P)RO!c1@j^msbD;YA_=);R#IJdO)fZh&_;m zeYLc-wosJwfCgLwVoxA59f)7R97VN42x#~$AO*^WtAO|){xky&3Uct(t5;d@$uo{t dO)vluU;xlmeHH0N4ZZ*X002ovPDHLkV1lGVf71W} literal 0 HcmV?d00001 diff --git a/minplayer/templates/default/css/media_player_default.css b/minplayer/templates/default/css/media_player_default.css new file mode 100644 index 00000000..e3b228ae --- /dev/null +++ b/minplayer/templates/default/css/media_player_default.css @@ -0,0 +1,481 @@ + +/* base styles */ +.media-player {} +.media-player-play, .media-player-volume-button { + cursor: pointer; +} +.media-player-timer { + cursor: default; +} + +.media-player { + position: relative; + background:#000; + border:1px solid #333; + font-family:"Trebuchet MS", Helvetica, sans-serif; + -moz-box-shadow:0px 5px 10px #333;/*no-important moz*/ + -webkit-box-shadow:0px 5px 10px #333;/*no-important chrome*/ +} + +.media-player .media-player-error { + display:none; + position: absolute; + top: 80%; + left: 50%; + width: 320px; + height: 40px; + line-height: 40px; + margin: -20px 0 0 -160px; + text-align: center; + vertical-align: center; + border: none; + z-index:1000; + color: #fff; + opacity: 0.9; + border-radius: 10px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + background: rgba(23, 35, 34, 0.9); + box-shadow: 2px 2px 4px #000; + -webkit-box-shadow: 2px 2px 4px #000; + -moz-box-shadow: 2px 2px 4px #000; +} + +.media-player .media-player-display { + background-color:#000; + width:100%; + height:100%; +} + +.media-player .media-player-display video { + width: 100%; + height: 100%; +} + +.media-player .media-player-preview { + width:100%; + height:100%; + position:absolute; + z-index:1; +} + +.media-player .media-player-preview.has-preview { + background-color: rgb(0, 0, 0); +} + +.media-player .media-player-play-loader { + width:100%; + height:100%; + position:absolute; + z-index:2; + background: rgb(0, 0, 0); + background: rgba(0, 0, 0, 0.3); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#55000000, endColorstr=#55000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#55000000, endColorstr=#55000000)"; +} + +.media-player .media-player-play-loader .media-player-loader { + width:42px; + height:10px; + position: absolute; + z-index: 4; + top: 50%; + left: 50%; + margin: -5px 0 0 -21px; + text-align:center; + vertical-align:center; + background: url(images/loader.gif) no-repeat; +} + +/* Big play button */ +.media-player .media-player-play-loader .media-player-big-play { + position: absolute; + top: 50%; + left: 50%; + width: 80px; + height: 80px; + margin: -40px 0 0 -40px; + text-align: center; + vertical-align: center; + cursor: pointer !important; + border: none; + opacity: 0.9; + z-index:3; + border-radius: 10px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + background: rgba(23, 35, 34, 0.746094); + box-shadow: 2px 2px 4px #000; + -webkit-box-shadow: 2px 2px 4px #000; + -moz-box-shadow: 2px 2px 4px #000; +} + +.media-player .media-player-play-loader .media-player-big-play span { + margin: 22px 0 0 48px; + border-left: 36px solid white; + border-top: 18px solid transparent; + border-bottom: 18px solid transparent; +} + +.media-player .media-player-play-loader .media-player-big-play span { + display: block; + font-size: 0; + line-height: 0; + width: 0; + height: 0; + margin: 20px 0 0 23px; + border-left: 40px solid white; + border-top: 20px solid transparent; + border-bottom: 20px solid transparent; +} + +.media-player.fullscreen, .media-player.fullscreen .media-player-display, .media-player.fullscreen .media-player-play-loader { + position: fixed; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; + z-index:1000; + width: 100% !important; + height: 100% !important; +} + +.media-player.fullscreen .media-player-play-loader { + z-index:1001; +} + +.media-player .media-player-controls { + position: absolute; + display: block; + z-index:3; + bottom:0px; + left:0px; + right:0px; + height:30px; + background-color:rgba(0,0,0,0.5); +} + +.media-player-controls-left { + float:left; + width:30px; + height:26px; + margin: 2px 0; + border-right:1px solid #eee; +} + +.media-player.fullscreen .media-player-controls-left { + width:40px; + border:none; +} + +.media-player-controls-right { + float:right; + width:120px; + height:30px; +} + +.media-player.fullscreen .media-player-controls-right { + width:110px; +} + +.media-player-controls-mid { + position:absolute; + left:40px; + right:130px; + height:30px; +} + +.media-player.fullscreen .media-player-controls-mid { + left:50px; +} + +.media-player .media-player-play, .media-player .media-player-volume, .media-player .media-player-timer { + float: left; +} + +/* play, pause */ +.media-player .media-player-play, .media-player .media-player-pause { + display: block; + width: 22px; + height: 22px; + margin:2px 0 0 4px; + opacity: 0.7; + -moz-transition: all 0.2s ease-in-out; /* Firefox */ + -webkit-transition: all 0.2s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.2s ease-in-out; /* Opera */ + transition: all 0.2s ease-in-out; +} + +.media-player .media-player-play:hover, .media-player .media-player-pause:hover { + opacity: 1; +} + +.media-player .media-player-play { + background: url(images/play-icon.png) no-repeat; +} + +.media-player .media-player-pause { + background: url(images/pause-icon.png) no-repeat; + display:none; +} + +/* seek */ +.media-player .media-player-seek { + position:relative; + height: 10px; + margin-top:9px; + border: 1px solid #494949; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + background: #535353; + background-image: -moz-linear-gradient(top, #535353, #333333); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #535353),color-stop(1, #333333)); + box-shadow: inset 0 -3px 3px #333333; +} + +.media-player .media-player-seek .ui-slider-handle { + width: 15px; + height: 15px; + border: 1px solid #333; + top: -4px; + z-index:20px; + -moz-border-radius:10px; + -webkit-border-radius:10px; + border-radius:10px; + background: #e6e6e6; + background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5)); + box-shadow: inset 0 -3px 3px #d5d5d5; +} + +.media-player .media-player-seek .ui-slider-handle.ui-state-hover { + background: #fff; +} + +.media-player .media-player-seek .ui-slider-range { + -moz-border-radius:15px; + -webkit-border-radius:15px; + z-index:10px; + border-radius:15px; + background: #4cbae8; + background-image: -moz-linear-gradient(top, #4cbae8, #39a2ce); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #4cbae8),color-stop(1, #39a2ce)); + box-shadow: inset 0 -3px 3px #39a2ce; +} + +.media-player .media-player-progress { + -moz-border-radius:15px; + -webkit-border-radius:15px; + z-index:8px; + width:0px; + height:10px; + border-radius:15px; + background: #266580; + background-image: -moz-linear-gradient(top, #266580, #153A4A); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #266580),color-stop(1, #153A4A)); + box-shadow: inset 0 -3px 3px #153A4A; +} + +/* timer */ +.media-player .media-player-timer { + position:relative; + float:left; + color: #999; + margin-top:3px; + padding-right:6px; + font-size: 16px; + font-weight: bold; + border-right:1px solid #eee; +} + +.media-player.fullscreen .media-player-timer { + border:none; + margin-top:4px; +} + +/* volume */ +.media-player .media-player-volume { + position: absolute; + right:33px; + bottom:4px; + float:right; + overflow: hidden; + width: 20px; + height: 30px; + color: #fff; + padding: 0px 10px; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.2s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + +.media-player.fullscreen .media-player-volume { + right:40px; + bottom:13px; +} + +.media-player .media-player-volume:hover { + height: 135px; + padding-top: 5px; +} + + +.media-player .media-player-volume:hover .media-player-volume-slider { + position: relative; + visibility: visible; + opacity: 1; +} + +.media-player .media-player-volume-slider { + position: relative; + height: 100px; + width: 7px; + left: 4px; + visiblity: hidden; + opacity: 0; + border: 1px solid #444; + -moz-border-radius:15px; + -webkit-border-radius:15px; + border-radius:15px; + background: #535353; + background-image: -moz-linear-gradient(top, #535353, #333333); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #535353),color-stop(1, #333333)); + box-shadow: inset 0 3px 3px #333333; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.1s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + +.media-player .media-player-volume-slider .ui-slider-handle { + width: 12px; + height: 12px; + left: -4px; + margin-bottom:-0.6em; + margin-left:0; + border: 1px solid #333; + -moz-border-radius:10px; + -webkit-border-radius:10px; + border-radius:10px; + background: #e6e6e6; + background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5)); + + box-shadow: inset 0 3px 3px #d5d5d5; +} + +.media-player .media-player-volume-slider .ui-slider-handle.ui-state-hover { + background: #fff; +} + +.media-player .media-player-volume-slider .ui-slider-range { + -moz-border-radius:15px; + -webkit-border-radius:15px; + border-radius:15px; + background: #e6e6e6; + background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5)); + box-shadow: inset 0 3px 3px #d5d5d5; +} + +/* volume button */ + +.media-player .media-player-volume-button { + position: absolute; + bottom: 0px; + display: block; + width: 22px; + height: 22px; + background: url(images/volume-full-icon.png) no-repeat; + text-indent: -9999px; + opacity: 0.8; +} + +.media-player .media-player-volume-button:hover { + opacity: 1; +} + +.media-player .media-player-volume-mute { + background: url(images/volume-mute-icon.png) no-repeat; +} + +/* Fullscreen button */ +.media-player .media-player-fullscreen { + position: absolute; + right:6px; + bottom:7px; + width: 22px; + height: 14px; + border:1px solid #aaa; +} + +.media-player.fullscreen .media-player-fullscreen { + right:14px; + bottom:16px; +} + +.media-player .media-player-fullscreen-inner, .media-player.fullscreen .media-player-fullscreen:hover .media-player-fullscreen-inner { + position:absolute; + bottom:0; + width:16px; + height:8px; + background-color:#aaa; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.1s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + +.media-player .media-player-fullscreen:hover .media-player-fullscreen-inner, .media-player.fullscreen .media-player-fullscreen-inner { + width:20px; + height:12px; +} + +.media-player.fullscreen .media-player-controls { + position: absolute; + z-index:1002; + width:500px; + left: 50%; + bottom:10px; + margin: 0 0 0 -260px; + padding: 10px; + border: 1px solid #2E2E2E; + -moz-border-radius: 5px; /* FF1+ */ + -webkit-border-radius: 5px; /* Saf3+, Chrome */ + border-radius: 5px; /* Opera 10.5, IE 9 */ + background: #000000; + background-image: -moz-linear-gradient(top, #313131, #000000); /* FF3.6 */ + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #313131),color-stop(1, #000000)); /* Saf4+, Chrome */ + box-shadow: inset 0 15px 35px #535353; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.1s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + + +/* needed jquery ui styles + * using these, we don't depend on jQuery UI's stylsheet +*/ +.ui-slider-handle { + position: absolute; + z-index: 4; + display: block; + margin-left:-0.6em; + cursor: default; + outline: none; +} + +.ui-slider-range { + display:block; + width:100%; + height:100%; + left:0; + bottom: 0; + border:0 none; + position:absolute; + z-index:3; +} \ No newline at end of file diff --git a/minplayer/templates/default/js/minplayer.controller.default.js b/minplayer/templates/default/js/minplayer.controller.default.js new file mode 100644 index 00000000..5aaf4090 --- /dev/null +++ b/minplayer/templates/default/js/minplayer.controller.default.js @@ -0,0 +1,114 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +// Define the controller object. +minplayer.controller = minplayer.controller || {}; + +/** + * Constructor for the minplayer.controller + */ +minplayer.controller["default"] = function(context, options) { + + // The fade timer. + this.timer = 0; + + // Derive from base controller + minplayer.controller.call(this, context, options); +}; + +/** Derive from controller. */ +minplayer.controller["default"].prototype = new minplayer.controller(); +minplayer.controller["default"].prototype.constructor = minplayer.controller["default"]; + +/** + * @see minplayer.plugin#construct + */ +minplayer.controller["default"].prototype.construct = function() { + minplayer.controller.prototype.construct.call(this); + minplayer.get.call(this, this.options.id, null, function(plugin) { + plugin.bind('fullscreen', {obj:this}, function(event, full) { + event.data.obj.onFullScreen(full); + }); + }); +} + +/** + * Trigger when we go into full screen. + */ +minplayer.controller["default"].prototype.onFullScreen = function(full) { + if (full) { + + var _this = this; + var showThenHide = function() { + clearTimeout(_this.timer); + _this.display.show(); + _this.timer = setTimeout(function () { + _this.display.hide('fast'); + }, 5000); + }; + + // Bind when they move the mouse. + jQuery(document).bind('mousemove', showThenHide); + showThenHide(); + } + else { + + // Unbind the show then hide function. + this.display.show(); + clearTimeout(this.timer); + jQuery(document).unbind('mousemove', showThenHide); + } +}; + +/** + * Return the display for this plugin. + */ +minplayer.controller["default"].prototype.getDisplay = function(context, options) { + + // See if we need to build out the controller. + if (options.build) { + + // Prepend the control template. + context.prepend('\ +
\ +
\ +
\ + \ + \ +
\ +
\ +
00:00
\ +
\ +
\ +
\ +
\ +
\ + \ +
\ +
\ +
\ +
\ +
\ +
\ +
\ +
'); + } + + return jQuery('.media-player-controls', context); +} + +// Return the elements +minplayer.controller["default"].prototype.getElements = function() { + var elements = minplayer.controller.prototype.getElements.call(this); + var timer = jQuery(".media-player-timer", this.display); + return jQuery.extend(elements, { + play: jQuery(".media-player-play", this.display), + pause: jQuery(".media-player-pause", this.display), + fullscreen: jQuery(".media-player-fullscreen", this.display), + seek: jQuery(".media-player-seek", this.display), + progress: jQuery(".media-player-progress", this.display), + volume: jQuery(".media-player-volume-slider", this.display), + timer:timer, + duration:timer + }); +}; diff --git a/minplayer/templates/default/js/minplayer.default.js b/minplayer/templates/default/js/minplayer.default.js new file mode 100644 index 00000000..74a644c9 --- /dev/null +++ b/minplayer/templates/default/js/minplayer.default.js @@ -0,0 +1,60 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +// Default player. +minplayer["default"] = function(context, options) { + + // Derive from minplayer. + minplayer.call(this, context, options); +}; + +/** + * Define this template prototype. + */ +minplayer["default"].prototype = new minplayer(); +minplayer["default"].prototype.constructor = minplayer["default"]; + +/** + * Return the display for this plugin. + */ +minplayer["default"].prototype.getDisplay = function(context, options) { + + // Convert the context to jQuery object. + context = jQuery(context); + + // If the tag is video or audio, then build out the player. + var tag = context.get(0).tagName.toLowerCase(); + if (tag == 'video' || tag == 'audio') { + + // Build out the player provided the base tag. + context = context.attr({ + 'id': options.id + '-player', + 'class': 'media-player-media' + }) + .wrap(jQuery(document.createElement('div')).attr({ + 'class': 'media-player-display' + })).parent('.media-player-display') + .wrap(jQuery(document.createElement('div')).attr({ + 'id': options.id, + 'class': 'media-player' + })).parent('.media-player'); + + // Mark a flag that says this display needs to be built. + options.build = true; + } + + return context; +} + +// Get the elements for this player. +minplayer["default"].prototype.getElements = function() { + var elements = minplayer.prototype.getElements.call(this); + + // Return the jQuery elements. + return jQuery.extend(elements, { + player:this.display, + display:jQuery(".media-player-display", this.display), + media:jQuery("#" + this.options.id + "-player", this.display), + error:jQuery('.media-player-error', this.display) + }); +}; diff --git a/minplayer/templates/default/js/minplayer.playLoader.default.js b/minplayer/templates/default/js/minplayer.playLoader.default.js new file mode 100644 index 00000000..eb606674 --- /dev/null +++ b/minplayer/templates/default/js/minplayer.playLoader.default.js @@ -0,0 +1,46 @@ +/** The minplayer namespace. */ +var minplayer = minplayer || {}; + +// Define the busy object. +minplayer.playLoader = minplayer.playLoader || {}; + +// constructor. +minplayer.playLoader["default"] = function(context, options) { + + // Derive from busy + minplayer.playLoader.call(this, context, options); +}; + +// Define the prototype for all controllers. +minplayer.playLoader["default"].prototype = new minplayer.playLoader(); +minplayer.playLoader["default"].prototype.constructor = minplayer.playLoader["default"]; + +/** + * Return the display for this plugin. + */ +minplayer.playLoader["default"].prototype.getDisplay = function(context, options) { + + // See if we need to build out the controller. + if (options.build) { + + // Prepend the playloader template. + context.prepend('\ +
\ +
\ +
 
\ +
\ +
'); + } + + return jQuery('.media-player-play-loader', context); +} + +// Return the elements +minplayer.playLoader["default"].prototype.getElements = function() { + var elements = minplayer.playLoader.prototype.getElements.call(this); + return jQuery.extend(elements, { + busy:jQuery(".media-player-loader", this.display), + bigPlay:jQuery(".media-player-big-play", this.display), + preview:jQuery(".media-player-preview", this.display) + }); +}; diff --git a/minplayer/templates/default/media_player_default.tpl.php b/minplayer/templates/default/media_player_default.tpl.php new file mode 100644 index 00000000..b39ce953 --- /dev/null +++ b/minplayer/templates/default/media_player_default.tpl.php @@ -0,0 +1,32 @@ +
+
+
+
+ + +
+
+
00:00
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
 
+
+
+
+ +
+
\ No newline at end of file diff --git a/minplayer/tools/README.md b/minplayer/tools/README.md new file mode 100644 index 00000000..cca552e5 --- /dev/null +++ b/minplayer/tools/README.md @@ -0,0 +1,5 @@ +This is a tools folder used to run the makefile. You can easily get all the +necessary tools by navigating to the player folder within Terminal, and then +type the following command. + + sudo make -B tools diff --git a/playlist.xml b/playlist.xml index ebceba3a..c604be98 100644 --- a/playlist.xml +++ b/playlist.xml @@ -2,55 +2,59 @@ - http://upload.wikimedia.org/wikipedia/commons/6/69/RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg - Mike1024 - OGG Video: Robocup Soccer - A robotic soccer tournament. - http://upload.wikimedia.org/wikipedia/commons/thumb/6/69/RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg/mid-RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg.jpg - http://commons.wikimedia.org/wiki/File:RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg - - - http://upload.wikimedia.org/wikipedia/commons/2/2f/Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg - Scott Stevenson - OGG Video: Levitron - Wikipedia demonstration video of the Levitron levitating top device which partially explains its reliance upon the principle of spin stabilized magnetic levitation. A phenomenon discovered through invention in the late 1970's by Roy M. Harrigan (for which he received a patent in 1983 #4,382,245). - http://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg/mid-Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg.jpg - http://commons.wikimedia.org/wiki/File:Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg - - - http://www.vimeo.com/5653474 - nesthor - Vimeo Example: Kuroshio Sea - Vimeo Example. - http://ats.vimeo.com/192/971/19297174_100.jpg - - - http://www.youtube.com/watch?v=dTAAsCNK7RA - Ok Go! - YouTube Example: Ok Go! - YouTube Example. - http://i1.ytimg.com/vi/dTAAsCNK7RA/hqdefault.jpg - - - http://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_640x360.m4v - www.bigbuckbunny.org - M4V Example: Big Buck Bunny - M4V Example. - http://upload.wikimedia.org/wikipedia/commons/5/5f/BBB-Bunny.png - - - http://mirror.cs.umn.edu/blender.org/peach/trailer/trailer_480p.mov - www.bigbuckbunny.org - MOV (Flash) Example: Big Buck Bunny Trailer - MOV Example. - http://peach.blender.org/wp-content/uploads/watchtrailer.gif - - - http://upload.wikimedia.org/wikipedia/commons/c/cf/Big_Buck_Bunny_8_seconds_bird_clip.ogv - www.bigbuckbunny.org - OGV Example: Bird in Tree - OGV Example. - http://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Big_Buck_Bunny_8_seconds_bird_clip.ogv/mid-Big_Buck_Bunny_8_seconds_bird_clip.ogv.jpg - + The Dark Knight Rises + http://progressive.totaleclips.com.edgesuite.net/105/e105947_257.mp4 + http://ia.media-imdb.com/images/M/MV5BMTY0MTc2OTUwNV5BMl5BanBnXkFtZTcwNjk4NjQxNw@@._V1._SX640_SY947_.jpg + + + The Amazing Spiderman + http://progressive.totaleclips.com.edgesuite.net/108/e108011_257.mp4 + http://ia.media-imdb.com/images/M/MV5BMTUwMzk3NTQ2Ml5BMl5BanBnXkFtZTcwMDYyMzUxNw@@._V1._SX640_SY948_.jpg + + + Matagascar III + http://progressive.totaleclips.com.edgesuite.net/105/e105598_257.mp4 + http://ia.media-imdb.com/images/M/MV5BMTM2MTIzNzk2MF5BMl5BanBnXkFtZTcwMDcwMzQxNw@@._V1._SX640_SY946_.jpg + + + Snow White and the Huntsman + http://progressive.totaleclips.com.edgesuite.net/103/e103981_257.mp4 + http://ia.media-imdb.com/images/M/MV5BMTQ1NDA0MTk5OV5BMl5BanBnXkFtZTcwMTM4NDMwNw@@._V1._SX509_SY755_.jpg + + + Men in Black III + http://progressive.totaleclips.com.edgesuite.net/105/e105857_257.mp4 + http://ia.media-imdb.com/images/M/MV5BMTA5MTMyNTQwMjVeQTJeQWpwZ15BbWU3MDExOTk2NDc@._V1._SX508_SY755_.jpg + + + The Three Stooges + http://progressive.totaleclips.com.edgesuite.net/105/e105408_227.mp4 + http://ia.media-imdb.com/images/M/MV5BMTQwMzYwNjQ3OF5BMl5BanBnXkFtZTcwNzczNDMxNw@@._V1._SX486_SY720_.jpg + + + The Hunger Games + http://progressive.totaleclips.com.edgesuite.net/107/e107950_227.mp4 + http://ia.media-imdb.com/images/M/MV5BMjA4NDg3NzYxMF5BMl5BanBnXkFtZTcwNTgyNzkyNw@@._V1._SX640_SY948_.jpg + + + Se7en + http://progressive.totaleclips.com.edgesuite.net/102/e10278_301.mp4 + http://ia.media-imdb.com/images/M/MV5BMTQwNTU3MTE4NF5BMl5BanBnXkFtZTcwOTgxNDM2Mg@@._V1._SX326_SY500_.jpg + + + The Matrix + http://progressive.totaleclips.com.edgesuite.net/445/e44573_301.mp4 + http://ia.media-imdb.com/images/M/MV5BMjEzNjg1NTg2NV5BMl5BanBnXkFtZTYwNjY3MzQ5._V1._SX338_SY475_.jpg + + + Amelie + http://progressive.totaleclips.com.edgesuite.net/203/e20379_301.mp4 + http://ia.media-imdb.com/images/M/MV5BMTUwNzkwMTk5Nl5BMl5BanBnXkFtZTYwMDAzMDI5._V1._SX329_SY475_.jpg + + + The Prestige + http://progressive.totaleclips.com.edgesuite.net/308/e30871_257.mp4 + http://ia.media-imdb.com/images/M/MV5BMjA4NDI0MTIxNF5BMl5BanBnXkFtZTYwNTM0MzY2._V1._SX450_SY667_.jpg + diff --git a/playlist/Playlist.php b/playlist/Playlist.php deleted file mode 100755 index 7a0bb323..00000000 --- a/playlist/Playlist.php +++ /dev/null @@ -1,501 +0,0 @@ -show(); - * ?> - * - * This code will then look inside the "playlists/myplaylist" directory for a series of directories to define a playlist, - * and return that in XML form to be used by any common player, including the Dash Media Player. - * - */ - -class Playlist -{ - private $schema; - private $playlist; - - // The base path where this script is loaded. - private $base_path = ''; - - // The base url where this script is loaded. - private $base_url = ''; - - private $mediaTypes = array('ogg', 'ogv', 'oga', 'flv', 'rtmp', 'mp4', 'm4v', 'mov', '3g2', 'mp3', 'm4a', 'aac', 'wav', 'aif', 'wma'); - private $imageTypes = array('jpg', 'gif', 'png'); - private $folderLength = 5; // The number of characters in "track"... - private $cache = TRUE; - - /** - * Constructor - * - * @param - The playlist to generate and cache. - * @param - The XML schema to use when generating and caching the playlist. - */ - - public function Playlist( $_playlist = 'default', $_schema = SCHEMA_XSPF ) - { - $this->playlist = $_playlist; - $this->schema = $_schema; - - // Set the base path and url of this class. - $base_root = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; - $base_url = $base_root .= '://'. $_SERVER['HTTP_HOST']; - if ($dir = trim(dirname($_SERVER['SCRIPT_NAME']), '\,/')) { - $base_url .= "/$dir"; - } - - $this->base_path = isset($params['base_path']) ? $params['base_path'] : trim( str_replace( realpath('.'), '', dirname(__FILE__)), '/' ); - $this->base_path = trim( str_replace('\\', '/', $this->base_path), '/' ); - $this->base_url = isset($params['base_url']) ? $params['base_url'] : $base_url . '/' . $this->base_path; - } - - /** - * If you would like to use caching or not. - * - * @param - TRUE - use caching, FALSE - do not use caching. - */ - - public function useCache( $_cache ) - { - $this->cache = $_cache; - } - - /** - * Clears the cache by simply deleting the generated XML file. - */ - - public function clearCache() - { - unlink( dirname(__FILE__) . '/' . 'cache' . '/' . $this->playlist . '.xml' ); - } - - /** - * Allows you to set the media types used by this class when searching for media files. - * - * @param - An array of extensions to look for when searching for media files. - */ - - public function setMediaTypes( $_mediaTypes ) - { - $this->mediaTypes = $_mediaTypes; - } - - /** - * Allows you to set the image types used by this class when searching for image files. - * - * @param - An array of extensions to look for when searching for image files. - */ - - public function setImageTypes( $_imageTypes ) - { - $this->imageTypes = $_imageTypes; - } - - /** - * Returns the playlist in XML form. - * - * @return - The XML format of the playlist. - */ - public function getPlaylist() - { - // Initialize some variables. - $xml = ''; - $dirname = dirname(__FILE__); - $playlist_dir = $dirname . '/' . 'playlists' . '/' . $this->playlist; - $playlist_file = $dirname . '/' . 'cache' . '/' . $this->playlist . '.xml'; - - // If there is already a cache file, then we will just want to use it. - if( $this->cache && file_exists($playlist_file) ) - { - // Open the cache file and populate the XML variable with its contents. - $handle = fopen( $playlist_file, "r"); - if( $handle ) - { - while (!feof($handle)) { - $xml .= fgets($handle, 4096); - } - - fclose( $handle ); - } - } - else if( is_dir($playlist_dir) ) - { - // Here we will want to search for all the media files and their images for the playlist. - $contents = ''; - $files = array(); - $this->get_media_files( $playlist_dir, $files ); - if( $files ) - { - $url = $this->base_url; - $numfiles = count($files); - - // Iterate through all the files. - for( $i=0; $i < $numfiles; $i++ ) - { - $file = $files[$i]; - $image = ''; - - // If there is an image association. - if( isset($file['image']) && $file['image'] ) - { - // Set the image variable to be used later. - $image = str_replace($dirname, '', $file['image']); - $image = htmlspecialchars($this->base_url . $image); - } - - // If there is a media file. - if( isset($file['media']) && $file['media'] ) - { - // Iterate through all the media files in this directory. - foreach($file['media'] as $media) - { - $media = str_replace($dirname, '', $media); - $media = htmlspecialchars($this->base_url . $media); - - // Set the contents of this single track listing with - // its associated image file. - switch( $this->schema ) - { - case SCHEMA_RSS: - $contents .= $this->rssGetTrack( $media, $image ); - break; - case SCHEMA_ASX: - $contents .= $this->asxGetTrack( $media, $image ); - break; - case SCHEMA_XSPF: - default: - $contents .= $this->playlistGetTrack( $media, $image ); - break; - } - } - } - } - } - - // Now, set up the whole XML structure given the right schema. - if( $contents ) - { - switch( $this->schema ) - { - case SCHEMA_RSS: - $xml = $this->getRSSXML( $contents ); - break; - case SCHEMA_ASX: - $xml = $this->getASXXML( $contents ); - break; - case SCHEMA_XSPF: - default: - $xml = $this->getPlaylistXML( $contents ); - break; - } - } - - // Now, let's create our cache file. - if( $this->cache ) - { - $handle = fopen( $playlist_file, "w"); - if( $handle ) - { - fwrite( $handle, $xml ); - fclose( $handle ); - } - } - } - else { - print 'Directory ' . $playlist_dir . ' not found'; - } - - // Return the XML structure. - return $xml; - } - - /** - * Gets the file extension of any given file.. - * - * @return - The file to get the extension of. - */ - private function get_file_ext($file) - { - return strtolower(substr($file, strrpos($file, '.') + 1)); - } - - /** - * Recursive directory searcher to locate any media and image files within any given path. - * - * @param - The path where to start your search. - * @param - The files array. - * @param - Used to keep track of the current folder when recursing. - */ - private function get_media_files($path, &$files, $folder = 0) - { - // Only continue if this is a directory. - if(is_dir($path)) { - - // Open the directory. - if($contents = opendir($path)) { - - // Iterate through all the files in this directory. - while(($node = readdir($contents)) !== false) { - - // Make sure this is not the parent or current directory elements. - if($node!="." && $node!="..") { - - // Cache the full node path. - $node = $path.'/'.$node; - - // If this node is a directory, then we will want to recurse. - $directory = is_dir($node); - if($directory) { - - // Get the index of this directory and recurse. - $index = (substr($node, $this->folderLength) - 1); - $this->get_media_files($node, $files, $index); - } - else if (!$directory){ - - // If this is not a directory, then we need to add it to our files list. - $extension = $this->get_file_ext($node); - if( in_array($extension, $this->mediaTypes) ) { - $files[$folder]['media'][] = $node; - } - else if( in_array($extension, $this->imageTypes) ) { - $files[$folder]['image'] = $node; - } - } - } - } - } - } - } - - /** - * Gets the mime type of a file. - * - * @return - The file to get the mime type of. - */ - private function getMimeType( $file ) - { - $extension = $this->get_file_ext($file); - switch( $extension ) - { - case 'flv': - return 'video/x-flv'; - case 'rtmp': - return ''; - case 'mp4': - return 'video/mp4'; - case 'm4v': - return 'video/mp4'; - case 'mov': - return 'video/quicktime'; - case '3g2': - return 'video/3g2'; - case 'mp3': - return 'audio/mpeg'; - case 'm4a': - return 'audio/mp4'; - case 'aac': - return 'audio/aac'; - case 'ogg': - case 'ogv': - return 'video/ogg'; - case 'oga': - return 'audio/ogg'; - case 'wav': - return 'audio/wav'; - case 'aif': - return 'audio/aif'; - case 'wma': - return 'audio/wma'; - case 'jpg': - return 'image/jpeg'; - case 'gif': - return 'image/gif'; - case 'png': - return 'image/png'; - } - } - - /** - * Returns a single track listing in an ASX XML format. - * - * @param - The file used for this track. - * @param - The image associated with this track. - */ - private function asxGetTrack( $file, $image ) - { - $output = ''; - $output .= "\n"; - $output .= '' . basename($file) . ''; - $output .= "\n"; - $output .= ''; - - if( $image ) { - $output .= ''; - } - - $output .= "\n"; - $output .= ''; - $output .= "\n"; - return $output; - } - - /** - * Returns the full playlist in ASX XML format. - * - * @param - The track contents. - */ - private function getASXXML( $content ) - { - $output = ''; - $output .= "\n"; - $output .= $content; - $output .= ''; - $output .= "\n"; - return $output; - } - - /** - * Returns a single track listing in an RSS XML format. - * - * @param - The file used for this track. - * @param - The image associated with this track. - */ - private function rssGetTrack( $file, $image ) - { - $output = ''; - $output .= "\n"; - $output .= '' . basename($file) . ''; - $output .= "\n"; - $output .= ''; - - if( $image ) { - $output .= ''; - } - - $output .= "\n"; - $output .= ''; - $output .= "\n"; - return $output; - } - - /** - * Returns the full playlist in RSS XML format. - * - * @param - The track contents. - */ - private function getRSSXML( $content ) - { - $output = ''; - $output .= "\n"; - $output .= ''; - $output .= "\n"; - $output .= $content; - $output .= ''; - $output .= "\n"; - $output .= ''; - return $output; - } - - /** - * Returns a single track listing in a playist XML format. - * - * @param - The file used for this track. - * @param - The image associated with this track. - */ - private function playlistGetTrack( $file, $image ) - { - $output = ''; - $output .= "\n"; - $output .= '' . basename($file) . ''; - $output .= "\n"; - $output .= '' . $file . ''; - - if( $image ) { - $output .= '' . $image . ''; - } - - $output .= "\n"; - $output .= ''; - $output .= "\n"; - return $output; - } - - /** - * Returns the full playlist in Playlist XML format. - * - * @param - The track contents. - */ - private function getPlaylistXML($content) - { - $output = ''; - $output .= "\n"; - $output .= ''; - $output .= "\n"; - $output .= $content; - $output .= ''; - $output .= "\n"; - return $output; - } -} -?> \ No newline at end of file diff --git a/playlist/cache/README.txt b/playlist/cache/README.txt deleted file mode 100755 index f86a2d2f..00000000 --- a/playlist/cache/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -This is the cache folder to be used to store cached XML files when a playlist is generated. -When you add new songs to your playlist, you MUST delete all the contents of this folder -for your change to take affect. \ No newline at end of file diff --git a/playlist/playlists/default/track1/README.txt b/playlist/playlists/default/track1/README.txt deleted file mode 100755 index bd80f538..00000000 --- a/playlist/playlists/default/track1/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -Place either a video file (MOV, MP4, or FLV) or music file (MP3, WAV) along with whatever image -you would like to associate in this this folder. \ No newline at end of file diff --git a/playlist/playlists/default/track2/README.txt b/playlist/playlists/default/track2/README.txt deleted file mode 100755 index bd80f538..00000000 --- a/playlist/playlists/default/track2/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -Place either a video file (MOV, MP4, or FLV) or music file (MP3, WAV) along with whatever image -you would like to associate in this this folder. \ No newline at end of file diff --git a/playlist/playlists/default/track3/README.txt b/playlist/playlists/default/track3/README.txt deleted file mode 100755 index bd80f538..00000000 --- a/playlist/playlists/default/track3/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -Place either a video file (MOV, MP4, or FLV) or music file (MP3, WAV) along with whatever image -you would like to associate in this this folder. \ No newline at end of file diff --git a/src/osmplayer.js b/src/osmplayer.js new file mode 100644 index 00000000..bae4f245 --- /dev/null +++ b/src/osmplayer.js @@ -0,0 +1,239 @@ +// Add a way to instanciate using jQuery prototype. +if (!jQuery.fn.osmplayer) { + + /** + * @constructor + * + * Define a jQuery osmplayer prototype. + * + * @param {object} options The options for this jQuery prototype. + * @return {Array} jQuery object. + */ + jQuery.fn.osmplayer = function(options) { + return jQuery(this).each(function() { + options = options || {}; + options.id = options.id || $(this).attr('id') || Math.random(); + if (!minplayer.plugins[options.id]) { + options.template = options.template || 'default'; + if (osmplayer[options.template]) { + new osmplayer[options.template](jQuery(this), options); + } + else { + new osmplayer(jQuery(this), options); + } + } + }); + }; +} + +/** + * @constructor + * @extends minplayer + * @class The main osmplayer class. + * + *

Usage: + *


+ *
+ *   // Create a media player.
+ *   var player = jQuery("#player").osmplayer({
+ *
+ *   });
+ *
+ * 
+ *

+ * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer = function(context, options) { + + // Derive from minplayer + minplayer.call(this, context, options); +}; + +/** Derive from minplayer. */ +osmplayer.prototype = new minplayer(); + +/** Reset the constructor. */ +osmplayer.prototype.constructor = osmplayer; + +/** + * Creates a new plugin within this context. + * + * @param {string} name The name of the plugin you wish to create. + * @param {object} base The base object for this plugin. + * @param {object} context The context which you would like to create. + * @return {object} The new plugin object. + */ +osmplayer.prototype.create = function(name, base, context) { + return minplayer.prototype.create.call(this, name, 'osmplayer', context); +}; + +/** + * @see minplayer.plugin.construct + */ +osmplayer.prototype.construct = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + playlist: '', + swfplayer: 'minplayer/flash/minplayer.swf' + }, this.options); + + // Call the minplayer display constructor. + minplayer.prototype.construct.call(this); + + /** The play queue and index. */ + this.playQueue = []; + this.playIndex = 0; + + /** The playlist for this media player. */ + this.playlist = this.create('playlist', 'osmplayer'); + + // Bind when the playlists loads a node. + this.playlist.bind('nodeLoad', (function(player) { + return function(event, data) { + + // Load this node. + player.loadNode(data); + }; + })(this)); +}; + +/** + * Gets the full screen element. + * + * @return {object} The element that will go into fullscreen. + */ +osmplayer.prototype.fullScreenElement = function() { + return this.elements.minplayer; +}; + +/** + * The load node function. + * + * @param {object} node A media node object. + */ +osmplayer.prototype.loadNode = function(node) { + if (node.mediafiles) { + + // Load the media files. + var media = node.mediafiles.media; + if (media) { + this.playQueue.length = 0; + this.playQueue = []; + this.playIndex = 0; + this.addToQueue(media.intro); + this.addToQueue(media.commercial); + this.addToQueue(media.prereel); + this.addToQueue(media.media); + this.addToQueue(media.postreel); + } + + // Load the preview image. + this.options.preview = osmplayer.getImage(node.mediafiles.image, 'preview'); + this.playLoader.loadPreview(); + + // Play the next media + this.playNext(); + } +}; + +/** + * Adds a file to the play queue. + * + * @param {object} file The file to add to the queue. + */ +osmplayer.prototype.addToQueue = function(file) { + if (file) { + this.playQueue.push(this.getFile(file)); + } +}; + +/** + * Returns a valid media file for this browser. + * + * @param {object} file The file object. + * @return {object} The best media file. + */ +osmplayer.prototype.getFile = function(file) { + if (file) { + var type = typeof file; + if (((type === 'object') || (type === 'array')) && file[0]) { + file = this.getBestMedia(file); + } + } + return file; +}; + +/** + * Returns the media file with the lowest weight value provided an array of + * media files. + * + * @param {object} files The media files to play. + * @return {object} The best media file. + */ +osmplayer.prototype.getBestMedia = function(files) { + var mFile = null; + var i = files.length; + while (i--) { + var tempFile = new minplayer.file(files[i]); + if (!mFile || (tempFile.priority > mFile.priority)) { + mFile = tempFile; + } + } + return mFile; +}; + +/** + * Plays the next media file in the queue. + */ +osmplayer.prototype.playNext = function() { + if (this.playQueue.length > this.playIndex) { + this.load(this.playQueue[this.playIndex]); + this.playIndex++; + } + else if (this.options.repeat) { + this.playIndex = 0; + this.playNext(); + } + else { + // If there is no playlist, and no repeat, we will + // just seek to the beginning and pause. + this.options.autostart = false; + this.playIndex = 0; + this.playNext(); + } +}; + +/** + * Returns an image provided image array. + * + * @param {object} images The images to search for. + * @param {string} type The type of image to look for. + * @return {object} The best image match. + */ +osmplayer.getImage = function(images, type) { + var image = ''; + + if (images) { + + // If the image type exists, then just use that one. + if (images[type]) { + image = images[type]; + } + else { + + // Or, just pick the first one available. + for (type in images) { + if (images.hasOwnProperty(type)) { + image = images[type]; + break; + } + } + } + } + + // Return the image path. + return (typeof image === 'string') ? image : image.path; +}; diff --git a/src/osmplayer.pager.js b/src/osmplayer.pager.js new file mode 100644 index 00000000..d2e01aa2 --- /dev/null +++ b/src/osmplayer.pager.js @@ -0,0 +1,47 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class provides pager functionality. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.pager = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'pager', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.pager.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.pager.prototype.constructor = osmplayer.pager; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.pager.prototype.construct = function() { + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + // Setup the prev button. + this.prevPage = this.elements.prevPage.click((function(pager) { + return function(event) { + event.preventDefault(); + pager.trigger('prevPage'); + }; + })(this)); + + // Setup the next button. + this.nextPage = this.elements.nextPage.click((function(pager) { + return function(event) { + event.preventDefault(); + pager.trigger('nextPage'); + }; + })(this)); +}; diff --git a/src/osmplayer.parser.asx.js b/src/osmplayer.parser.asx.js new file mode 100644 index 00000000..f876553e --- /dev/null +++ b/src/osmplayer.parser.asx.js @@ -0,0 +1,44 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The asx parser object. + * + * @return {object} The asx parser. + **/ +osmplayer.parser.asx = { + + // The priority for this parser. + priority: 8, + + // Return if this is a valid youtube feed. + valid: function(feed) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + return feed.match(/\.asx$/i) !== null; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'xml'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + return feed; + }, + + // Parse the feed. + parse: function(data) { + var playlist = { + total_rows: 0, + nodes: [] + }; + jQuery('asx entry', data).each(function(index) { + osmplayer.parser.rss.addRSSItem(playlist, $(this)); + }); + return playlist; + } +}; diff --git a/src/osmplayer.parser.default.js b/src/osmplayer.parser.default.js new file mode 100644 index 00000000..1668951e --- /dev/null +++ b/src/osmplayer.parser.default.js @@ -0,0 +1,39 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The default parser object. + * + * @return {object} The default parser. + **/ +osmplayer.parser['default'] = { + + // The priority for this parser. + priority: 1, + + // This parser is always valid. + valid: function(feed) { + return true; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'json'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + feed += '?start-index=' + start; + feed += '&max-results=' + numItems; + return feed; + }, + + // Parse the feed. + parse: function(data) { + return data; + } +}; diff --git a/src/osmplayer.parser.rss.js b/src/osmplayer.parser.rss.js new file mode 100644 index 00000000..461cd705 --- /dev/null +++ b/src/osmplayer.parser.rss.js @@ -0,0 +1,65 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The rss parser object. + * + * @return {object} The rss parser. + **/ +osmplayer.parser.rss = { + + // The priority for this parser. + priority: 8, + + // Return if this is a valid youtube feed. + valid: function(feed) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + return feed.match(/\.rss$/i) !== null; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'xml'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + return feed; + }, + + // Parse the feed. + parse: function(data) { + var playlist = { + total_rows: 0, + nodes: [] + }; + jQuery('rss channel', data).find('item').each(function(index) { + osmplayer.parser.rss.addRSSItem(playlist, $(this)); + }); + return playlist; + }, + + // Parse an RSS item. + addRSSItem: function(playlist, item) { + playlist.total_rows++; + playlist.nodes.push({ + title: item.find('title').text(), + description: item.find('annotation').text(), + mediafiles: { + image: { + 'image': { + path: item.find('image').text() + } + }, + media: { + 'media': { + path: item.find('location').text() + } + } + } + }); + } +}; diff --git a/src/osmplayer.parser.xspf.js b/src/osmplayer.parser.xspf.js new file mode 100644 index 00000000..8fe4f5cb --- /dev/null +++ b/src/osmplayer.parser.xspf.js @@ -0,0 +1,44 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The xsfp parser object. + * + * @return {object} The xsfp parser. + **/ +osmplayer.parser.xsfp = { + + // The priority for this parser. + priority: 8, + + // Return if this is a valid youtube feed. + valid: function(feed) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + return feed.match(/\.xml$/i) !== null; + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'xml'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + return feed; + }, + + // Parse the feed. + parse: function(data) { + var playlist = { + total_rows: 0, + nodes: [] + }; + jQuery('playlist trackList track', data).each(function(index) { + osmplayer.parser.rss.addRSSItem(playlist, $(this)); + }); + return playlist; + } +}; diff --git a/src/osmplayer.parser.youtube.js b/src/osmplayer.parser.youtube.js new file mode 100644 index 00000000..a51138d4 --- /dev/null +++ b/src/osmplayer.parser.youtube.js @@ -0,0 +1,71 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** The parser object. */ +osmplayer.parser = osmplayer.parser || {}; + +/** + * The youtube parser object. + * + * @return {object} The youtube parser. + **/ +osmplayer.parser.youtube = { + + // The priority for this parser. + priority: 10, + + // Return if this is a valid youtube feed. + valid: function(feed) { + return (feed.search(/^http(s)?\:\/\/gdata\.youtube\.com/i) === 0); + }, + + // Returns the type of request to make. + getType: function(feed) { + return 'jsonp'; + }, + + // Returns the feed provided the start and numItems. + getFeed: function(feed, start, numItems) { + feed = feed.replace(/(.*)\??(.*)/i, '$1'); + feed += '?start-index=' + (start + 1); + feed += '&max-results=' + (numItems); + feed += '&v=2&alt=jsonc'; + return feed; + }, + + // Parse the feed. + parse: function(data) { + data = data.data; + var playlist = { + total_rows: data.totalItems, + nodes: [] + }; + + // Iterate through the items and parse it. + for (var index in data.items) { + var item = data.items[index]; + playlist.nodes.push({ + title: item.title, + description: item.description, + mediafiles: { + image: { + 'thumbnail': { + path: item.thumbnail.sqDefault + }, + 'image': { + path: item.thumbnail.hqDefault + } + }, + media: { + 'media': { + player: 'youtube', + id: item.id + } + } + } + }); + } + + return playlist; + } +}; diff --git a/src/osmplayer.playlist.js b/src/osmplayer.playlist.js new file mode 100644 index 00000000..4c6d1231 --- /dev/null +++ b/src/osmplayer.playlist.js @@ -0,0 +1,360 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class creates the playlist functionality for the minplayer. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.playlist = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'playlist', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.playlist.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.playlist.prototype.constructor = osmplayer.playlist; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.playlist.prototype.construct = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + vertical: true, + playlist: '', + pageLimit: 10, + shuffle: false + }, this.options); + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + /** The nodes within this playlist. */ + this.nodes = []; + + // Current page. + this.page = -1; + + // The total amount of nodes. + this.totalItems = 0; + + // The current loaded item index. + this.currentItem = 0; + + // The play queue. + this.queue = []; + + // The queue position. + this.queuepos = 0; + + // The current playlist. + this.playlist = this.options.playlist; + + // Create the scroll bar. + this.scroll = this.create('scroll', 'osmplayer'); + + // Create the pager. + this.pager = this.create('pager', 'osmplayer'); + this.pager.bind('nextPage', (function(playlist) { + return function(event) { + playlist.nextPage(); + }; + })(this)); + this.pager.bind('prevPage', (function(playlist) { + return function(event) { + playlist.prevPage(); + }; + })(this)); + + // Get the media. + this.get('media', function(media) { + media.bind('ended', (function(playlist) { + return function(event) { + playlist.next(); + }; + })(this)); + }); + + // Load the playlist. + this.load(0, 0); +}; + +/** + * Sets the playlist. + * + * @param {object} playlist The playlist object. + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.set = function(playlist, loadIndex) { + + // Check to make sure the playlist is an object. + if (typeof playlist !== 'object') { + this.trigger('error', 'Playlist must be an object to set'); + return; + } + + // Check to make sure the playlist has correct format. + if (!playlist.hasOwnProperty('total_rows')) { + this.trigger('error', 'Unknown playlist format.'); + return; + } + + // Make sure the playlist has some rows. + if (playlist.total_rows && playlist.nodes.length) { + + // Set the total rows. + this.totalItems = playlist.total_rows; + this.currentItem = 0; + + // Show or hide the next page if there is or is not a next page. + if (((this.page + 1) * this.options.pageLimit) >= this.totalItems) { + this.pager.nextPage.hide(); + } + else { + this.pager.nextPage.show(); + } + + var teaser = null; + var numNodes = playlist.nodes.length; + this.scroll.elements.list.empty(); + this.nodes = []; + + // Iterate through all the nodes. + for (var index = 0; index < numNodes; index++) { + + // Create the teaser object. + teaser = this.create('teaser', 'osmplayer', this.scroll.elements.list); + teaser.setNode(playlist.nodes[index]); + teaser.bind('nodeLoad', (function(playlist, index) { + return function(event, data) { + playlist.loadItem(index); + }; + })(this, index)); + + // Add this to our nodes array. + this.nodes.push(teaser); + + // If the index is equal to the loadIndex. + if (loadIndex === index) { + this.loadItem(index); + } + } + + // Refresh the sizes. + this.scroll.refresh(); + + // Trigger that the playlist has loaded. + this.trigger('playlistLoad', playlist); + } +}; + +/** + * Stores the current playlist state in the queue. + */ +osmplayer.playlist.prototype.setQueue = function() { + + // Add this item to the queue. + this.queue.push({ + page: this.page, + item: this.currentItem + }); + + // Store the current queue position. + this.queuepos = this.queue.length; +}; + +/** + * Loads the next item. + */ +osmplayer.playlist.prototype.next = function() { + var item = 0, page = this.page; + + // See if we are at the front of the queue. + if (this.queuepos >= this.queue.length) { + + // If this is shuffle, then load a random item. + if (this.options.shuffle) { + item = Math.floor(Math.random() * this.totalItems); + page = Math.floor(item / this.options.pageLimit); + item = item % this.options.pageLimit; + this.load(page, item); + } + else { + + // Otherwise, increment the current item by one. + item = (this.currentItem + 1); + if (item >= this.nodes.length) { + this.load(page + 1, 0); + } + else { + this.loadItem(item); + } + } + } + else { + + // Load the next item in the queue. + this.queuepos = this.queuepos + 1; + var currentQueue = this.queue[this.queuepos]; + this.load(currentQueue.page, currentQueue.item); + } +}; + +/** + * Loads the previous item. + */ +osmplayer.playlist.prototype.prev = function() { + + // Move back into the queue. + this.queuepos = this.queuepos - 1; + this.queuepos = (this.queuepos < 0) ? 0 : this.queuepos; + var currentQueue = this.queue[this.queuepos]; + if (currentQueue) { + this.load(currentQueue.page, currentQueue.item); + } +}; + +/** + * Loads a playlist node. + * + * @param {number} index The index of the item you would like to load. + */ +osmplayer.playlist.prototype.loadItem = function(index) { + if (index < this.nodes.length) { + this.setQueue(); + + // Get the teaser at the current index and deselect it. + var teaser = this.nodes[this.currentItem]; + teaser.select(false); + this.currentItem = index; + + // Get the new teaser and select it. + teaser = this.nodes[index]; + teaser.select(true); + this.trigger('nodeLoad', teaser.node); + } +}; + +/** + * Loads the next page. + * + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.nextPage = function(loadIndex) { + this.load(this.page + 1, loadIndex); +}; + +/** + * Loads the previous page. + * + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.prevPage = function(loadIndex) { + this.load(this.page - 1, loadIndex); +}; + +/** + * Loads a playlist. + * + * @param {integer} page The page to load. + * @param {integer} loadIndex The index of the item to load. + */ +osmplayer.playlist.prototype.load = function(page, loadIndex) { + + // If the playlist and pages are the same, then no need to load. + if ((this.playlist == this.options.playlist) && (page == this.page)) { + this.loadItem(loadIndex); + } + + // Set the new playlist. + this.playlist = this.options.playlist; + + // If the playlist is an object, then go ahead and set it. + if (typeof this.playlist == 'object') { + this.set(this.playlist); + this.playlist = this.playlist.endpoint; + return; + } + + // Say that we are busy. + if (this.scroll.elements.playlist_busy) { + this.scroll.elements.playlist_busy.show(); + } + + // Normalize the page. + page = page || 0; + page = (page < 0) ? 0 : page; + + // Set the queue. + this.setQueue(); + + // Set the new page. + this.page = page; + + // Hide or show the page based on if we are on the first page. + if (this.page == 0) { + this.pager.prevPage.hide(); + } + else { + this.pager.prevPage.show(); + } + + // Get the highest priority parser. + var parser = osmplayer.parser['default']; + for (var name in osmplayer.parser) { + if (osmplayer.parser[name].valid(this.playlist)) { + if (osmplayer.parser[name].priority > parser.priority) { + parser = osmplayer.parser[name]; + } + } + } + + // The start index. + var start = this.page * this.options.pageLimit; + + // Get the feed from the parser. + var feed = parser.getFeed( + this.playlist, + start, + this.options.pageLimit + ); + + // Build our request. + var request = { + type: 'GET', + url: feed, + success: (function(playlist) { + return function(data) { + if (playlist.scroll.elements.playlist_busy) { + playlist.scroll.elements.playlist_busy.hide(); + } + playlist.set(parser.parse(data), loadIndex); + }; + })(this), + error: (function(playlist) { + return function(XMLHttpRequest, textStatus, errorThrown) { + if (playlist.scroll.elements.playlist_busy) { + playlist.scroll.elements.playlist_busy.hide(); + } + playlist.trigger('error', textStatus); + } + })(this) + }; + + // Set the data if applicable. + var dataType = ''; + if (dataType = parser.getType()) { + request.dataType = dataType; + } + + // Perform an ajax callback. + jQuery.ajax(request); +}; diff --git a/src/osmplayer.scroll.js b/src/osmplayer.scroll.js new file mode 100644 index 00000000..54ff0d58 --- /dev/null +++ b/src/osmplayer.scroll.js @@ -0,0 +1,224 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class provides the scroll functionality for the playlists. + * + * We can calculate how the scrollbar controls the playlist using the + * following diagram / equations. + * ___ ____________ + * | | |\ + * | | list | \ + * | | |y \ + * | | | \ + * | |____________| \ _ _____ + * | | |\ | | | + * | | | \ | | | + * | | | \ | |x | + * | | | \ | | | + * | | | \|_|_ | + * | | | | | | | + * l | window | | | h w + * | | | |_|_| | + * | | | /| | | + * | | | / | | | + * | | | / v| | | + * | | | / | | | + * | |____________|/ |_|____| + * | | | / + * | | | / + * | | | / + * | | | / + * |__|____________|/ + * + * l - The list height. + * h - Handle Bar height. + * w - Window height. + * x - The distance from top of window to the top of the handle. + * y - The disatnce from the top of the list to the top of the window. + * v - The distance from bottom of window to the bottom of the handle. + * + * jQuery UI provides "v". We already know "l", "h", "w". We can then + * calculate the relationship between the scroll bar handle position to the + * list position using the following equations. + * + * x = (w - (v + h)) + * y = ((l - w)/(w - h)) * x + * + * -- or -- + * + * y = ((l - w)/(w - h)) * (w - (v + h)) + * + * We can statically calculate the ((l - w)/(w - h)) as a ratio and use + * that to speed up calculations as follows. + * + * ratio = ((l - w)/(w - h)); + * + * So, our translation equations are as follows... + * + * y = ratio * (w - (v + h)) + * v = w - (h + (y / ratio)) + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.scroll = function(context, options) { + + // Derive from display + minplayer.display.call(this, 'scroll', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.scroll.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.scroll.prototype.constructor = osmplayer.scroll; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.scroll.prototype.construct = function() { + + // Make sure we provide default options... + this.options = jQuery.extend({ + vertical: true, + hysteresis: 40, + scrollSpeed: 20, + scrollMode: 'auto' + }, this.options); + + // Call the minplayer plugin constructor. + minplayer.display.prototype.construct.call(this); + + this.getMousePos = function(event) { + return (event.pageY - this.display.offset().top); + }; + this.getPos = function(handlePos) { + return this.ratio * (this.scrollSize - (handlePos + this.handleSize)); + }; + this.getHandlePos = function(pos) { + return this.scrollSize - (this.handleSize + (pos / this.ratio)); + }; + + // If they have a scroll bar. + if (this.elements.scroll) { + + // Get the values of our variables. + this.scrollSize = this.elements.scroll.height(); + this.handleSize = 17; + this.scrollTop = (this.scrollSize - this.handleSize); + this.scrollMid = this.scrollSize / 2; + this.mousePos = 0; + + // Refresh the scroll. + this.refresh(); + + // Create the scroll bar slider control. + this.scroll = this.elements.scroll.slider({ + orientation: 'vertical', + max: this.scrollSize, + value: this.scrollTop, + slide: (function(scroll) { + return function(event, ui) { + + // Get the new position. + var pos = scroll.getPos(ui.value); + + // Ensure it doesn't go over the limits. + if (pos < 0) { + pos = 0; + scroll.scroll.slider('option', 'value', scroll.scrollTop); + } + + // Set our list position. + scroll.elements.list.css('marginTop', -pos + 'px'); + + // Return false to stop the scrolling. + return (pos > 0); + }; + })(this) + }); + + // If they wish to have auto scroll mode. + if (this.options.scrollMode == 'auto') { + + // Bind to the mouse events. + this.elements.list.bind('mousemove', (function(scroll) { + + // Return our event function. + return function(event) { + event.preventDefault(); + scroll.mousePos = (event.pageY - scroll.display.offset().top); + }; + + })(this)).bind('mouseenter', (function(scroll) { + + // Return our event function. + return function(event) { + event.preventDefault(); + scroll.scrolling = true; + setTimeout(function setScroll() { + if (scroll.scrolling) { + + // Get the delta. + var delta = scroll.mousePos - scroll.scrollMid; + + // Determine if we are within our hysteresis. + if (Math.abs(delta) > scroll.options.hysteresis) { + + // Get the hysteresis and delta. + var hyst = scroll.options.hysteresis; + hyst *= (delta > 0) ? -1 : 0; + delta = (scroll.options.scrollSpeed * (delta + hyst)); + delta /= scroll.scrollMid; + + // Get the scroll position. + var pos = scroll.elements.list.css('marginTop'); + pos = parseFloat(pos) - delta; + pos = (pos > 0) ? 0 : pos; + + // Get the maximum top position. + var top = -scroll.listSize + scroll.scrollSize; + pos = (pos < top) ? top : pos; + + // Set the new scroll position. + scroll.elements.list.css('marginTop', pos + 'px'); + + // Set the scroll position. + pos = scroll.getHandlePos(-pos); + scroll.scroll.slider('option', 'value', pos); + } + + // Set timeout to try again. + setTimeout(setScroll, 20); + } + }, 20); + }; + + })(this)).bind('mouseleave', (function(scroll) { + + // Return our event function. + return function(event) { + event.preventDefault(); + scroll.scrolling = false; + }; + + })(this)); + } + } +}; + +/** + * Refresh all the variables that may change. + */ +osmplayer.scroll.prototype.refresh = function() { + this.listSize = this.elements.list.height(); + this.ratio = (this.listSize - this.scrollSize); + this.ratio /= (this.scrollSize - this.handleSize); + if (this.scroll) { + this.elements.list.css('marginTop', '0px'); + this.scroll.slider('option', 'value', this.getHandlePos(0)); + } +}; diff --git a/src/osmplayer.teaser.js b/src/osmplayer.teaser.js new file mode 100644 index 00000000..c0dfa7e2 --- /dev/null +++ b/src/osmplayer.teaser.js @@ -0,0 +1,66 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +/** + * @constructor + * @extends minplayer.display + * @class This class provides teaser functionality. + * + * @param {object} context The jQuery context. + * @param {object} options This components options. + */ +osmplayer.teaser = function(context, options) { + + /** The preview image. */ + this.preview = null; + + // Derive from display + minplayer.display.call(this, 'teaser', context, options); +}; + +/** Derive from minplayer.display. */ +osmplayer.teaser.prototype = new minplayer.display(); + +/** Reset the constructor. */ +osmplayer.teaser.prototype.constructor = osmplayer.teaser; + +/** + * Selects the teaser. + * + * @param {boolean} selected TRUE if selected, FALSE otherwise. + */ +osmplayer.teaser.prototype.select = function(selected) { +}; + +/** + * Sets the node. + * + * @param {object} node The node object to set. + */ +osmplayer.teaser.prototype.setNode = function(node) { + + // Add this to the node info for this teaser. + this.node = node; + + // Set the title of the teaser. + if (this.elements.title) { + this.elements.title.text(node.title); + } + + // Load the thumbnail image if it exists. + var image = osmplayer.getImage(node.mediafiles.image, 'thumbnail'); + if (image) { + if (this.elements.image) { + this.preview = new minplayer.image(this.elements.image); + this.preview.load(image); + } + } + + // Bind when they click on this teaser. + this.display.unbind('click').click((function(teaser) { + return function(event) { + event.preventDefault(); + teaser.trigger('nodeLoad', teaser.node); + }; + })(this)); +}; diff --git a/templates/default/createIndex.bat b/templates/default/createIndex.bat deleted file mode 100755 index 1410cf5e..00000000 --- a/templates/default/createIndex.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -FOR /F "tokens=*" %%i in ('cd') do SET batchDir=%%i -cd %batchDir% -del test.html -C:\php\php.exe %batchDir%\index.php >> test.html - diff --git a/templates/default/createIndex.sh b/templates/default/createIndex.sh deleted file mode 100755 index f6054bda..00000000 --- a/templates/default/createIndex.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -progdir=`dirname $0` -cd "$progdir" -rm -f test.html -php index.php >> test.html \ No newline at end of file diff --git a/templates/default/css/images/loader.gif b/templates/default/css/images/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e2d16730415c52b18d085af4b497b6f9d009666 GIT binary patch literal 404 zcmZ?wbhEHb)Mnsj_{hL8bLPynw6yyAdLXIzpWDwhB-q(8z|~04fSHkjfkE+~lygyP zVo7R>LV0FMhC*UiVnt4VVv1g7URpkb;!hS%E}$wMAZ7p=$iQUO(#LUn+RYoypO11$ z-wXSEy7hrsTSVl-H1*nhv-U0LN!Rtf-hN8&*OARX?RG3sF!B)vT7qee?Gd0c3jB%5 z8)vl~UsLmWM&iBiJt;G0%s;iz%h{_yX9s)s*^O&os_<=MOcjyJkN8yEcgpYbqggsh zLC4o)HxcA81E7g3XJtj-$$!MpCA_`zVP(&fD+^Za;#S?BYU=U)B{nl)pM z=^29__fs!F%>}1{rUgj{_y7X^AaBzH8nLCT~T0GlW3ke@guXq zfA_^ wK;v0jZoG1NY?~D}vUUX6%XV=xH83zUeEFs*^2YV9Fwj~CPgg&ebxsLQ0FS3aNdN!< literal 0 HcmV?d00001 diff --git a/templates/default/css/images/play-icon.png b/templates/default/css/images/play-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..71a34135e4e77734e6a80e0bc72ec81e067e65e0 GIT binary patch literal 375 zcmV--0f_#IP);htG zAZDNjh8qk7X+V4rh$jQFG}T-T1#Cc^1H`wX7D!OT;9p2$oKOp3J`knE;O|)EU=}613XX*KtAZgWdRcf5f8GU6ly^` zx&=(I1Wlm@6;KOWKo)?^WcmO9Keci(%m>UsT*LC=!v~Py7YYsi3&e|oxCw~wg9KQR zB*+CTfw&%sZz2n_P+;IDke7k@GB!za4Bibj@Dx5pq!@f0h|7TZ2(@zFSs-=;Vk=?| zC1fxt?1F&U1nPZ~0Jc;CirrRd@*x|*3V*fWqX5Vlc>s`_Kw}iU2@>0RY83 VIH3}Z+z4Tx0C)j~RL^S@K@|QrZmG~B2wH0nvUrdpNm;9CMbtL^5n^i$+aIn^?(HA4aZWV5ov6ELTdbo0FI&wK{O>*+w4vx20?>!`FrQsdJlnHR>OPy zcd~b_n$otK2Za4V;76L-DzNVtaSB-y0*E}{p()372;bw_^6ZZ}PI-92wGS&j#91PI zKs7DSe@(bk%_Y-7gGe}(^>I=@oY#w#*Bu9GZf3^F5WP>3rn}7Ut74&?PWBFvy`A)a zPP5)V!Xd&78LdA?xQ(9mjMYElVd13a#D+Z_7&Y|xU=_C-srWU*6kiZcC!$nw*)9$7 zn6CX+@=AhmkT}X@VSsa5NKe;HZuq)~1$`#h6R+ZTR#D-3j}vF!)ZOnz+5)dI4jl{{ z44Mr{P!L4~VVJN`K!!XTF*LGrKO?IK8z<8w`3e3jI8lUGNUta*C8 zn(P`s>{pjD=7Kek#B;Fw@hxAK%$F&Q6vg9J^Xf~4by_hu-=A!MJ3Znq&n~srbFGPs zH&&aMXZ>nO`|hf|ljc?VPhR!${AbO?W8x_>CU%PFA&Hm8F7cAsOREdwU~R_;ot1_u z(ruCYB-LPGn!NQdT|ZlRy+(fw^-+`=%+gee_kY4FWHg<*4sZI8+sFJD270UUORdLHO0nA4V) z%{fwsET5CQ>B?eK%uw4yQc~9?*JVo2}ze(;aRcp*ceL#HUJSllrgm5wQKR zQu+C;QrUh^8rFfA`ftFz{YAidi-`aL010qNS#tmY3ljhU3ljkVnw%H_00E9kL_t(I z5w+AkOT%Cg2k_>tAUFwv;N)CzNJ0d`Ronz87X?uSK@bW;q0kTD>PK*L5?s3qLcpm+ zCO_vVkvh%C=0=^>#k~=HUL@#GZ$<2SsNx$Rn;b$e0~zN0>ra72S;2zvgv)$Ul{^>D!5#pbuolQoXJ7)8B)P@{T#AA-a6Vxd z#jC%9MOcZVh^FjfMce#=Xy(5Ni4Sbs-cS@}fb%1uiYScXUJb+OOkZisvOE+{0Co`f zqA&)F>DnpGkZGD@#34FwqV~x3y7>pp0Hzef9{?Cx%cR-sS`Y{p|J5{a4ssZ?rrI-TzL2V4sj z;5OT~?*@ax30|HSyou!zQ8~)GHHRyCpX3-k;p68b#E6zw%y6t z%l`#4=ujq;dFeRL2++M)-%SkvKJhEk4~N6?d_Mn1`XmrfCX-G@FcbS2G>49tiQU5Q zMZ=~%fCp&`ByfPtPl+e=7T(@UYa!W;t4wOIv=WZz47vuSk+A~o0sI6njn|CM;60X% z`vFa{+(@@6p=&)Z)g9x2)j?Q{#ZgYh5~Mi$G-_a@8}x^9CHuX0u+vD<#*z8P#hUi$^V& z%hhRYDHIA7!C%m4H6^&y!%KR#eTzP7-)#B^Q{y-~tZG4h=vx)&Idoq8Be7V_WhL9` zA5(AEfPbK`D%pUW=qP$o0lcR5UO=PjotBfRrFmNIN=x13+aTBWli3_?r;yyP9<)lf zJ7}+K>=`Rac=-t3)7m}Q;6F$2^l05d2Q}LPGr;lk)kJ5})-o~qR$S2j4YFPI12)fU z8Bb2dCDet6N&`-y_U9p*C)>YnnYCGeroROk08v!bv_qh#qyPW_07*qoM6N<$f=>=J A&;S4c literal 0 HcmV?d00001 diff --git a/templates/default/css/images/volume-mute-icon.png b/templates/default/css/images/volume-mute-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..23979e323b2989b87cdea7527c913e0d532f7411 GIT binary patch literal 331 zcmV-R0kr;!P)RO!c1@j^msbD;YA_=);R#IJdO)fZh&_;m zeYLc-wosJwfCgLwVoxA59f)7R97VN42x#~$AO*^WtAO|){xky&3Uct(t5;d@$uo{t dO)vluU;xlmeHH0N4ZZ*X002ovPDHLkV1lGVf71W} literal 0 HcmV?d00001 diff --git a/jquery-ui/css/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_flat_30_cccccc_40x100.png diff --git a/jquery-ui/css/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_flat_50_5c5c5c_40x100.png diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_glass_40_ffc73d_1x400.png diff --git a/jquery-ui/css/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-hard_20_0972a5_1x100.png diff --git a/jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_33_003147_1x100.png diff --git a/jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_35_222222_1x100.png diff --git a/jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_44_444444_1x100.png diff --git a/jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_highlight-soft_80_eeeeee_1x100.png diff --git a/jquery-ui/css/dark-hive/images/ui-bg_loop_25_000000_21x21.png b/templates/default/css/jquery-ui/dark-hive/images/ui-bg_loop_25_000000_21x21.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-bg_loop_25_000000_21x21.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-bg_loop_25_000000_21x21.png diff --git a/jquery-ui/css/ui-darkness/images/ui-icons_222222_256x240.png b/templates/default/css/jquery-ui/dark-hive/images/ui-icons_222222_256x240.png similarity index 92% rename from jquery-ui/css/ui-darkness/images/ui-icons_222222_256x240.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-icons_222222_256x240.png index ee039dc096a38a3753f92519546eee94bcfbeffa..b273ff111d219c9b9a8b96d57683d0075fb7871a 100644 GIT binary patch delta 267 tcmbQJG*M}SX1$7%%0Qxe`da_taEAy31A|{lkY6x^gn$vtW_89_`~Y0{DhdDq delta 267 qcmbQJG*M}SX1&tD0y^6tJ4^600|SF!NswPKgM@$)%Vu@PSNs5_bSQcN diff --git a/jquery-ui/css/dark-hive/images/ui-icons_4b8e0b_256x240.png b/templates/default/css/jquery-ui/dark-hive/images/ui-icons_4b8e0b_256x240.png similarity index 92% rename from jquery-ui/css/dark-hive/images/ui-icons_4b8e0b_256x240.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-icons_4b8e0b_256x240.png index fdaa72a0263f115f0268927c5aa4ad0f05dd9172..3bdb67be8f85c00d44940330a9a8cb07a73e83a4 100644 GIT binary patch delta 267 tcmbQJG*M}SX1z}z&p@Jj`dV+YQtlT61A|{lkY6x^gn$vtW_89_`~Z+q)@g1 diff --git a/templates/default/css/jquery-ui/dark-hive/images/ui-icons_a83300_256x240.png b/templates/default/css/jquery-ui/dark-hive/images/ui-icons_a83300_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..95993eab7625fb91819ce8d3d72fd6f71a520eda GIT binary patch literal 4369 zcmd^?`8O2)_s3^p#%>toqJ#RmwV2==ic*rz7lOw=eaq=H~;_ux21)-Jpcgw zdj+hrf&W^f<%Qk9Zpqf#;q2QJEdM*_Xcp}Lw{TRDJ?aub1a^Xj&9?nvwz`aiAM!R@ zjQ=Ya!cfS};)2w*5>Ja*J$tBf&s(}yEXHh;E`&2E$lYY(W^qq~TUiZg+ zDs$A{j0RbbZ;_AuAy^iF69nRHo!r!phm|o%ZrNC>!vOH?d4F#&5iDR!zZRGG3P22m z{BW$s-aRIe1-um2606C}0zUge6Jyb&q_!$VnHLJ;ypLV-J(@1J^5cERBH%1-KR8r? zz^|3l|lWIgN~)(P8x z4^P+SMQo;vZL%lYyF;5Kkc!Vv=1dDro$*Lubd?X23aeG8kq$VdXY0W*pF2xpfWM|2 z&Wp$C*rq@O^ck~8vY^^8k#Vb8m3?u>NXK2^3ZgZlm_xUw@@x0oyTMTe#pn((JK>}o zNE~%TTVT>?`PCmGnK<{OU%FCGX9UEN7o?x$r8S;OC@*GW9sX3Ufb?6VnR?m(X^_8b z?P1+_-A=AINYw!LuEM@I<>ng|N;MAPwa9#%mvI8fISw0?8sAuU|3M!+OX+sW)1QwI zmZ0m`eUNmbJ+QSf+i6q4(i@yiN>&6WzMm~Thv-K>GpSuQ(j@a2u=xdBKglw~^UwuP5!m3Ew+=y8Z}=q0Q51=;bWI>PSK|>&T*6e7TMe=cJ93)z?VY zq_CL5I}e*WU@ETgi^YmU;61P5k7x6FY+{)>4g{B@+@6D$nbX!5@F~#!m0D7y2@>)B z_Qsgmj8g!GA+LZOX)*;lH(S=vHeFD~#AD6OZq9BvLmWBQ`U6rsN{iU;Dvr1WS@zOz zl#6cg6=J4)x0XlNVSpABoKf9r6^O!Mc-%+#>Mcrz!IBHZPk zw7nJrmUK)1q@E9fg^)g`{6kCX`iq%fkXyn_vbzjVWjii96?dD?kr+;lXfO z8EBTl(;?%%K(2gyQLO{-p}#@Xdo~=3t*(y!QlkeNEiqu}rN?Phk25mpDKNCLRRD{v z^Jj)ojVnvz#Nv(M6fOCTDH}niL(Ijx$_4dWOcTqCRe+te_B_yRO&z9i<*jU|wV%p^Jz!mkNCmXmc!Fx1 zoKSv#K91(b+3--CU21F##u~x!HG9OJeB4lA^O^N^&eG3h)J^r|?8?rDX-^}OPBefD zv_mF(#8kiM=J* z0OU$bS0S(r+;un?S($B9g>}_7as=YhDt#jg#L-~ttCUm(D$(={ z59esZ03>5iMXc_vNyk%9Wn9sH}TQur)uY1(#k zI)IFjxK;qsP**3kl&xZEcTaxzJ>;(mFaZj4PjYvOpn9mMQr5K17WhZRqkLV7WS|0? zzy|mUg!@LvVwe4F)Uv*Cp9VET9nK3a3$Tk?OB-zV=!>QHkX+F8NohE!#_TEfyFB(w zu5rz>atMn)uKNM{IHv+&4gcG(EUkl4$ z3#oh#mrxC|yrQ5Gc}v3Q`{BQ1Zq)Pc&f2>DfHyqrI%>V)(r(bURYWdxB+MS$lyk{ z0fBwHb}6?wWlX+`1Ac(J4vb}HG}}ja?=CrU-jq>M#&e+_du`%Tdjc$XZ?>Nc;z=+> zsTinX7KkZMK@-pAuqB-ZH(vhD^&l-iRe5P9ilA_o;7X}x>VAUIMzk{g*9!xwKxMo= z>lB)7Gx(H|e~NDlEE}pbCZY2QCtiDMLAGFtwe{`L;S44Fip5lVJbgrJ^*Qs}0f|@1 zMU%G?E#=o?Snz%(uR|;cRsO~IYQ&7rh<;v-UUp9tILnwYm3f@fwJV&!6l`cu{jLR+ zC)z0}M6=G&#!X&&O?HkqK36$j6cBN6uMzbGPN{3D;w_lh*;nG4{L+aoLjiv$r(o6F zIHzVR9~H15cJ~*1ih7RrtDdJ%&+=quly1_M{MqYI2;oh(>(&l@TD2{(?!)2(JLnY* zjELCIto(GSj(#Dswgr*IG1E)we*Rar_HKb(-S@`6tORfC?;hS#L4DnFJ;xA^Zy+hs z%yACzhx@8LluoiW4+d;)ogc8b>usx>+#Fe(#}~SgR07pXxf!>Y6pAo6buajLRwU7n zpsz0~LWOH-`mOcDsI%rPQHBqk+2vI?_dqi_8o;<5e5c<|C-17H{ck>UbQDD624P~l z&#Ns?+{cf~oj0H#)F+;v+pQ_a;|hl~wpH+Hj`fHYdBJtSoKmTHX78dax+zQRiNN5-jySirbO1$+E%0iX zcFS+0dv3RUqb(Qp@loqrmFi-Jeu5A$QwV8h@Zl>CG`~&WkP;o3!G5FKIDhD3_#gIR zhKdeLx9IOaGba!Aw9bp+hhH9ieY6Pv_M3#CakYm2%1-CHYr2dF{<)9@qOfM1;lVGDYz zQw3XW$@#{}nP6Q_ApasC!FDq6Xu1oC(~T(xYZ-Mf@*9;x{SICslyRS|93js|M=GXc zQpc!R5_N~va#Ic^En1}mO;uz%H3giIm6g4z#iHsp`1(&*1ADYq$k5xGod){~uz@l`$ZL4k)x$e~l5#&qWFSuo?@-uxhR4uu zXB5-QjO5*EIA6+%fdM1Q%6PKR%k^Td9rk-K6Qs=WPkqbUF3Ab`i0x7-vUz!eU%fK` zByg4h)5!BBO|t`jvww1>R5+E?dpJBo@;ueWz5zN`$v38 zJ~pJxK3dvUcDvT8g%`#}RtzoO9!b{lmv4acFYI0sZ{#dH>|)F984#bo>$mjzzN;kz z=#;eEqu^fJ$JDs(Bt$-}vyxxrO03)~b6wqG~>ZG$yH zlYe@oi~ zq~&b`uYcskB0PFRa7F|lD)!&?-%H&I^azohix%7uPy69RQ=D6u!q`-Wr3pk;e%s)p zGQBB44&mI@6%(h+WCK-7bPgcSQ9%X1#|gnkJK~S8h+k;5r;T58nJujpED?$g4qc4UJTx{+VfkJbf`Ahyy@DbTXB z!bwPDbL%Hkl(xj|C41W`$-+s!?v<_GuxJ&0&d@(9)=7MS7yE2L*sfB!dXn56!0~UG z`R%{qo#9z8(QJ)k=gT+Vw*}A1?Q8(0_kk}Xz1=$(9erMmOs z$63%UU-4|PstuCKuQ~Hk&`xn_o$yNl2Q$cb-)ed*niaB@K^cOwoYoy@XQEO<>WicarmhKc`c$I#O!tqr)GFoD+9l*|67t^VQ>oqwb&K&M75$?Bfv+Cd znc5e@%Qym$u1m@RezFiVGck-Mk8{|cN1J}_-y-FYnR}drHGVM8KGEJQy7FKKf;9}Z>*?d*QM$ngCHZfyI|A4LN`2y4L< zdJFD_gc}m|w*;TB_(%`javz_~-_V*Kv@+``{$_yRzf3I&R*8l(j literal 0 HcmV?d00001 diff --git a/jquery-ui/css/ui-darkness/images/ui-icons_cccccc_256x240.png b/templates/default/css/jquery-ui/dark-hive/images/ui-icons_cccccc_256x240.png similarity index 92% rename from jquery-ui/css/ui-darkness/images/ui-icons_cccccc_256x240.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-icons_cccccc_256x240.png index 2a940237ea242e1d59b846ce83d3c7b7467289d4..9254e05cfb964be56241b5bb4d0a0eb51c02df80 100644 GIT binary patch delta 267 vcmbQJG*M}SR{gm%X9g10)7AQm_a4t;U|{eo3GxeOkPt9p;n=Lf_>vz06Jo~b delta 267 rcmbQJG*M}SR{fcQ1@yK5_#GE*1_lPdk|4ie1_=Qp7LLstj4$~Cq>#lh diff --git a/jquery-ui/css/ui-darkness/images/ui-icons_ffffff_256x240.png b/templates/default/css/jquery-ui/dark-hive/images/ui-icons_ffffff_256x240.png similarity index 92% rename from jquery-ui/css/ui-darkness/images/ui-icons_ffffff_256x240.png rename to templates/default/css/jquery-ui/dark-hive/images/ui-icons_ffffff_256x240.png index bef5178a9054c16582876bac57017f783272e750..42f8f992c727ddaa617da224a522e463df690387 100644 GIT binary patch delta 267 ucmbQJG*M}SX8oUke+ClO)7Sb9-1U1H7#RFYg8YIRBm|6DHmftf;s*ej81m%+ delta 267 rcmbQJG*M}SX8r$x1$4Im?Xm~c85kJ+N`m}?86*UZST?IOzTyV};IH-~ diff --git a/jquery-ui/css/dark-hive/jquery-ui-1.8rc1.custom.css b/templates/default/css/jquery-ui/dark-hive/jquery-ui-1.8.18.custom.css similarity index 69% rename from jquery-ui/css/dark-hive/jquery-ui-1.8rc1.custom.css rename to templates/default/css/jquery-ui/dark-hive/jquery-ui-1.8.18.custom.css index 4ab48746..673ddce8 100644 --- a/jquery-ui/css/dark-hive/jquery-ui-1.8rc1.custom.css +++ b/templates/default/css/jquery-ui/dark-hive/jquery-ui-1.8.18.custom.css @@ -1,20 +1,21 @@ /* -* jQuery UI CSS Framework -* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -*/ + * jQuery UI CSS Framework 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } @@ -38,11 +39,16 @@ /* -* jQuery UI CSS Framework -* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,%20Arial,%20sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=444444&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=44&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=14_loop.png&bgImgOpacityContent=25&borderColorContent=555555&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=222222&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=35&borderColorDefault=444444&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=003147&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=33&borderColorHover=0b93d5&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=0972a5&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=20&borderColorActive=26b3f7&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px -*/ + * jQuery UI CSS Framework 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,%20Arial,%20sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=444444&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=44&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=14_loop.png&bgImgOpacityContent=25&borderColorContent=555555&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=222222&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=35&borderColorDefault=444444&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=003147&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=33&borderColorHover=0b93d5&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=0972a5&bgTextureActive=04_highlight_hard.png&bgImgOpacityActive=20&borderColorActive=26b3f7&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px + */ /* Component containers @@ -57,24 +63,24 @@ /* Interaction states ----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #444444; background: #222222 url(images/ui-bg_highlight-soft_35_222222_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #eeeeee; } +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #444444; background: #222222 url(images/ui-bg_highlight-soft_35_222222_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #eeeeee; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #eeeeee; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #0b93d5; background: #003147 url(images/ui-bg_highlight-soft_33_003147_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #0b93d5; background: #003147 url(images/ui-bg_highlight-soft_33_003147_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; } .ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #26b3f7; background: #0972a5 url(images/ui-bg_highlight-hard_20_0972a5_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #26b3f7; background: #0972a5 url(images/ui-bg_highlight-hard_20_0972a5_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #2e7db2; } -.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; } -.ui-state-error a, .ui-widget-content .ui-state-error a { color: #111111; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #111111; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #2e7db2; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #111111; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #111111; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ @@ -271,20 +277,53 @@ ----------------------------------*/ /* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; } -.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } -.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } -.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } -.ui-corner-right { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } -.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } -.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; } +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } /* Overlays */ .ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); } -.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Accordion -----------------------------------*/ +.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* + * jQuery UI Resizable 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } @@ -292,20 +331,36 @@ .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } -.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete -----------------------------------*/ -.ui-autocomplete-menu { position: absolute; cursor: default; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } -.ui-autocomplete-loading { background: white url('images/ui-anim.basic.16x16.gif') right center no-repeat; } -.ui-autocomplete-over { background-color: #0A246A; color: white; } +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ -/* Menu -----------------------------------*/ +/* + * jQuery UI Menu 1.8.18 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; + float: left; } .ui-menu .ui-menu { margin-top: -3px; @@ -313,6 +368,9 @@ .ui-menu .ui-menu-item { margin:0; padding: 0; + zoom: 1; + float: left; + clear: left; width: 100%; } .ui-menu .ui-menu-item a { @@ -320,49 +378,123 @@ display:block; padding:.2em .4em; line-height:1.5; + zoom:1; } .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; margin: -1px; } -/* Button -----------------------------------*/ - -.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +/* + * jQuery UI Button 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: hidden; *overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ -.ui-button-icons-only { width: 3em; } -button.ui-button-icons-only { width: 3.2em; } +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; line-height: 1.4; } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } -.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 1.8em; } -.ui-button-text-icons .ui-button-text { padding-right: 1.8em; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button { padding: .4em 1em; } /*button icon element(s) */ -.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } -.ui-button-text-icon .ui-icon-primary, .ui-button-text-icons .ui-icon-primary, .ui-button-icons-only .ui-icon-primary { left: .5em; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ -.ui-button-set { margin-right: 7px; } -.ui-button-set .ui-button { margin-left: 0; margin-right: -.3em; } +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } - - - -/* Datepicker -----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } @@ -394,7 +526,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } +.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } @@ -420,58 +552,14 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ -}/* Dialog -----------------------------------*/ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* Progressbar -----------------------------------*/ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable -----------------------------------*/ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider -----------------------------------*/ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs -----------------------------------*/ -.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ -.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } -.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } +}/* + * jQuery UI Progressbar 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; overflow: hidden; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/jquery-ui/css/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_0_eeeeee_40x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_flat_55_994d53_40x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_55_994d53_40x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_flat_55_994d53_40x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_55_994d53_40x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_flat_55_fafafa_40x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_55_fafafa_40x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_flat_55_fafafa_40x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_flat_55_fafafa_40x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_gloss-wave_30_3d3644_500x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_100_dcd9de_1x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_100_eae6ea_1x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_25_30273a_1x100.png diff --git a/jquery-ui/css/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png b/templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png rename to templates/default/css/jquery-ui/eggplant/images/ui-bg_highlight-soft_45_5f5964_1x100.png diff --git a/jquery-ui/css/eggplant/images/ui-icons_454545_256x240.png b/templates/default/css/jquery-ui/eggplant/images/ui-icons_454545_256x240.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-icons_454545_256x240.png rename to templates/default/css/jquery-ui/eggplant/images/ui-icons_454545_256x240.png diff --git a/jquery-ui/css/eggplant/images/ui-icons_734d99_256x240.png b/templates/default/css/jquery-ui/eggplant/images/ui-icons_734d99_256x240.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-icons_734d99_256x240.png rename to templates/default/css/jquery-ui/eggplant/images/ui-icons_734d99_256x240.png diff --git a/jquery-ui/css/eggplant/images/ui-icons_8d78a5_256x240.png b/templates/default/css/jquery-ui/eggplant/images/ui-icons_8d78a5_256x240.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-icons_8d78a5_256x240.png rename to templates/default/css/jquery-ui/eggplant/images/ui-icons_8d78a5_256x240.png diff --git a/jquery-ui/css/eggplant/images/ui-icons_a8a3ae_256x240.png b/templates/default/css/jquery-ui/eggplant/images/ui-icons_a8a3ae_256x240.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-icons_a8a3ae_256x240.png rename to templates/default/css/jquery-ui/eggplant/images/ui-icons_a8a3ae_256x240.png diff --git a/jquery-ui/css/eggplant/images/ui-icons_ebccce_256x240.png b/templates/default/css/jquery-ui/eggplant/images/ui-icons_ebccce_256x240.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-icons_ebccce_256x240.png rename to templates/default/css/jquery-ui/eggplant/images/ui-icons_ebccce_256x240.png diff --git a/jquery-ui/css/dark-hive/images/ui-icons_ffffff_256x240.png b/templates/default/css/jquery-ui/eggplant/images/ui-icons_ffffff_256x240.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-icons_ffffff_256x240.png rename to templates/default/css/jquery-ui/eggplant/images/ui-icons_ffffff_256x240.png diff --git a/jquery-ui/css/eggplant/jquery-ui-1.8rc1.custom.css b/templates/default/css/jquery-ui/eggplant/jquery-ui-1.8rc1.custom.css similarity index 100% rename from jquery-ui/css/eggplant/jquery-ui-1.8rc1.custom.css rename to templates/default/css/jquery-ui/eggplant/jquery-ui-1.8rc1.custom.css diff --git a/jquery-ui/css/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/jquery-ui/css/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_glass_15_5f391b_1x400.png diff --git a/jquery-ui/css/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_gloss-wave_20_1c160d_500x100.png diff --git a/jquery-ui/css/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_gloss-wave_25_453326_500x100.png diff --git a/jquery-ui/css/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_gloss-wave_30_44372c_500x100.png diff --git a/jquery-ui/css/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_highlight-soft_20_201913_1x100.png diff --git a/jquery-ui/css/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_highlight-soft_20_619226_1x100.png diff --git a/jquery-ui/css/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png b/templates/default/css/jquery-ui/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-bg_inset-soft_10_201913_1x100.png diff --git a/jquery-ui/css/dark-hive/images/ui-icons_222222_256x240.png b/templates/default/css/jquery-ui/mint-choc/images/ui-icons_222222_256x240.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-icons_222222_256x240.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-icons_222222_256x240.png diff --git a/jquery-ui/css/mint-choc/images/ui-icons_9bcc60_256x240.png b/templates/default/css/jquery-ui/mint-choc/images/ui-icons_9bcc60_256x240.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-icons_9bcc60_256x240.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-icons_9bcc60_256x240.png diff --git a/jquery-ui/css/mint-choc/images/ui-icons_add978_256x240.png b/templates/default/css/jquery-ui/mint-choc/images/ui-icons_add978_256x240.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-icons_add978_256x240.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-icons_add978_256x240.png diff --git a/jquery-ui/css/mint-choc/images/ui-icons_e3ddc9_256x240.png b/templates/default/css/jquery-ui/mint-choc/images/ui-icons_e3ddc9_256x240.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-icons_e3ddc9_256x240.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-icons_e3ddc9_256x240.png diff --git a/jquery-ui/css/mint-choc/images/ui-icons_f1fd86_256x240.png b/templates/default/css/jquery-ui/mint-choc/images/ui-icons_f1fd86_256x240.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-icons_f1fd86_256x240.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-icons_f1fd86_256x240.png diff --git a/jquery-ui/css/eggplant/images/ui-icons_ffffff_256x240.png b/templates/default/css/jquery-ui/mint-choc/images/ui-icons_ffffff_256x240.png similarity index 100% rename from jquery-ui/css/eggplant/images/ui-icons_ffffff_256x240.png rename to templates/default/css/jquery-ui/mint-choc/images/ui-icons_ffffff_256x240.png diff --git a/jquery-ui/css/mint-choc/jquery-ui-1.8rc1.custom.css b/templates/default/css/jquery-ui/mint-choc/jquery-ui-1.8rc1.custom.css similarity index 100% rename from jquery-ui/css/mint-choc/jquery-ui-1.8rc1.custom.css rename to templates/default/css/jquery-ui/mint-choc/jquery-ui-1.8rc1.custom.css diff --git a/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_75_dadada_1x400.png diff --git a/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/templates/default/css/jquery-ui/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to templates/default/css/jquery-ui/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/jquery-ui/css/mint-choc/images/ui-icons_222222_256x240.png b/templates/default/css/jquery-ui/smoothness/images/ui-icons_222222_256x240.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-icons_222222_256x240.png rename to templates/default/css/jquery-ui/smoothness/images/ui-icons_222222_256x240.png diff --git a/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/templates/default/css/jquery-ui/smoothness/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png rename to templates/default/css/jquery-ui/smoothness/images/ui-icons_2e83ff_256x240.png diff --git a/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png b/templates/default/css/jquery-ui/smoothness/images/ui-icons_454545_256x240.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png rename to templates/default/css/jquery-ui/smoothness/images/ui-icons_454545_256x240.png diff --git a/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png b/templates/default/css/jquery-ui/smoothness/images/ui-icons_888888_256x240.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png rename to templates/default/css/jquery-ui/smoothness/images/ui-icons_888888_256x240.png diff --git a/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/templates/default/css/jquery-ui/smoothness/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png rename to templates/default/css/jquery-ui/smoothness/images/ui-icons_cd0a0a_256x240.png diff --git a/jquery-ui/css/smoothness/jquery-ui-1.8rc1.custom.css b/templates/default/css/jquery-ui/smoothness/jquery-ui-1.8rc1.custom.css similarity index 100% rename from jquery-ui/css/smoothness/jquery-ui-1.8rc1.custom.css rename to templates/default/css/jquery-ui/smoothness/jquery-ui-1.8rc1.custom.css diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png diff --git a/jquery-ui/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png0000664 b/templates/default/css/jquery-ui/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png0000664 old mode 100755 new mode 100644 similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png0000664 rename to templates/default/css/jquery-ui/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png0000664 diff --git a/jquery-ui/css/swanky-purse/images/ui-icons_070603_256x240.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-icons_070603_256x240.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-icons_070603_256x240.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-icons_070603_256x240.png diff --git a/jquery-ui/css/swanky-purse/images/ui-icons_e8e2b5_256x240.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-icons_e8e2b5_256x240.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-icons_e8e2b5_256x240.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-icons_e8e2b5_256x240.png diff --git a/jquery-ui/css/swanky-purse/images/ui-icons_e9cd86_256x240.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-icons_e9cd86_256x240.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-icons_e9cd86_256x240.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-icons_e9cd86_256x240.png diff --git a/jquery-ui/css/swanky-purse/images/ui-icons_efec9f_256x240.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-icons_efec9f_256x240.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-icons_efec9f_256x240.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-icons_efec9f_256x240.png diff --git a/jquery-ui/css/swanky-purse/images/ui-icons_f2ec64_256x240.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-icons_f2ec64_256x240.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-icons_f2ec64_256x240.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-icons_f2ec64_256x240.png diff --git a/jquery-ui/css/swanky-purse/images/ui-icons_f9f2bd_256x240.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-icons_f9f2bd_256x240.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-icons_f9f2bd_256x240.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-icons_f9f2bd_256x240.png diff --git a/jquery-ui/css/swanky-purse/images/ui-icons_ff7519_256x240.png b/templates/default/css/jquery-ui/swanky-purse/images/ui-icons_ff7519_256x240.png similarity index 100% rename from jquery-ui/css/swanky-purse/images/ui-icons_ff7519_256x240.png rename to templates/default/css/jquery-ui/swanky-purse/images/ui-icons_ff7519_256x240.png diff --git a/jquery-ui/css/swanky-purse/jquery-ui-1.8rc1.custom.css b/templates/default/css/jquery-ui/swanky-purse/jquery-ui-1.8rc1.custom.css similarity index 100% rename from jquery-ui/css/swanky-purse/jquery-ui-1.8rc1.custom.css rename to templates/default/css/jquery-ui/swanky-purse/jquery-ui-1.8rc1.custom.css diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_glass_20_555555_1x400.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_glass_20_555555_1x400.png diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png diff --git a/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..35ec0d9d290646cc4e487ad973dde7e979829d00 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq`W*`978O6-=5zn*kB-V#9{8A z5YLNW97J7a98qL7IHPXurDyRjc|Mbg@8{^ExfYyF9&D2iMXXNan#^1HV2J>C;u_aS d;^%;}$C#b3amU=xZ39`u;OXk;vd$@?2>__OD+K@m literal 0 HcmV?d00001 diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png diff --git a/jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png diff --git a/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-icons_222222_256x240.png similarity index 100% rename from jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-icons_222222_256x240.png diff --git a/jquery-ui/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-icons_4b8e0b_256x240.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-icons_4b8e0b_256x240.png diff --git a/jquery-ui/css/ui-darkness/images/ui-icons_a83300_256x240.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-icons_a83300_256x240.png similarity index 100% rename from jquery-ui/css/ui-darkness/images/ui-icons_a83300_256x240.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-icons_a83300_256x240.png diff --git a/jquery-ui/css/dark-hive/images/ui-icons_cccccc_256x240.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-icons_cccccc_256x240.png similarity index 100% rename from jquery-ui/css/dark-hive/images/ui-icons_cccccc_256x240.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-icons_cccccc_256x240.png diff --git a/jquery-ui/css/mint-choc/images/ui-icons_ffffff_256x240.png b/templates/default/css/jquery-ui/ui-darkness/images/ui-icons_ffffff_256x240.png similarity index 100% rename from jquery-ui/css/mint-choc/images/ui-icons_ffffff_256x240.png rename to templates/default/css/jquery-ui/ui-darkness/images/ui-icons_ffffff_256x240.png diff --git a/jquery-ui/css/ui-darkness/jquery-ui-1.8rc1.custom.css b/templates/default/css/jquery-ui/ui-darkness/jquery-ui-1.8rc1.custom.css similarity index 100% rename from jquery-ui/css/ui-darkness/jquery-ui-1.8rc1.custom.css rename to templates/default/css/jquery-ui/ui-darkness/jquery-ui-1.8rc1.custom.css diff --git a/templates/default/css/osmplayer_default.css b/templates/default/css/osmplayer_default.css new file mode 100644 index 00000000..b7c08d9e --- /dev/null +++ b/templates/default/css/osmplayer_default.css @@ -0,0 +1,621 @@ + +/* base styles */ +.media-player {} +.media-player-play, .media-player-volume-button { + cursor: pointer; +} +.media-player-timer { + cursor: default; +} + +.media-player { + position: relative; + background:#000; + border:1px solid #333; + font-family:"Trebuchet MS", Helvetica, sans-serif; + -moz-box-shadow:0px 5px 10px #333;/*no-important moz*/ + -webkit-box-shadow:0px 5px 10px #333;/*no-important chrome*/ +} + +.media-player .media-player-error { + display:none; + position: absolute; + top: 80%; + left: 50%; + width: 320px; + height: 40px; + line-height: 40px; + margin: -20px 0 0 -160px; + text-align: center; + vertical-align: center; + border: none; + z-index:1000; + color: #fff; + opacity: 0.9; + border-radius: 10px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + background: rgba(23, 35, 34, 0.9); + box-shadow: 2px 2px 4px #000; + -webkit-box-shadow: 2px 2px 4px #000; + -moz-box-shadow: 2px 2px 4px #000; +} + +.media-player .media-player-display { + background-color:#000; + width:100%; + height:100%; +} + +.media-player .media-player-display video { + width: 100%; + height: 100%; +} + +.media-player .media-player-preview { + width:100%; + height:100%; + position:absolute; + z-index:1; +} + +.media-player .media-player-preview.has-preview { + background-color: rgb(0, 0, 0); +} + +.media-player .media-player-play-loader, .osmplayer-playlist .osmplayer-playlist-loader-wrapper { + width:100%; + height:100%; + position:absolute; + z-index:2; + background: rgb(0, 0, 0); + background: rgba(0, 0, 0, 0.3); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#55000000, endColorstr=#55000000); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#55000000, endColorstr=#55000000)"; +} + +.media-player .media-player-loader, .osmplayer-playlist .osmplayer-playlist-loader { + width:42px; + height:10px; + position: absolute; + z-index: 4; + top: 50%; + left: 50%; + margin: -5px 0 0 -21px; + text-align:center; + vertical-align:center; + background: url(images/loader.gif) no-repeat; +} + +/* Big play button */ +.media-player .media-player-play-loader .media-player-big-play { + position: absolute; + top: 50%; + left: 50%; + width: 80px; + height: 80px; + margin: -40px 0 0 -40px; + text-align: center; + vertical-align: center; + cursor: pointer !important; + border: none; + opacity: 0.9; + z-index:3; + border-radius: 10px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + background: rgba(23, 35, 34, 0.746094); + box-shadow: 2px 2px 4px #000; + -webkit-box-shadow: 2px 2px 4px #000; + -moz-box-shadow: 2px 2px 4px #000; +} + +.media-player .media-player-play-loader .media-player-big-play span { + margin: 22px 0 0 48px; + border-left: 36px solid white; + border-top: 18px solid transparent; + border-bottom: 18px solid transparent; +} + +.media-player .media-player-play-loader .media-player-big-play span { + display: block; + font-size: 0; + line-height: 0; + width: 0; + height: 0; + margin: 20px 0 0 23px; + border-left: 40px solid white; + border-top: 20px solid transparent; + border-bottom: 20px solid transparent; +} + +.media-player.fullscreen, .media-player.fullscreen .media-player-display, .media-player.fullscreen .media-player-play-loader { + position: fixed; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; + z-index:1000; + width: 100% !important; + height: 100% !important; +} + +.media-player.fullscreen .media-player-play-loader { + z-index:1001; +} + +.media-player .media-player-controls { + position: absolute; + display: block; + z-index:3; + bottom:0px; + left:0px; + right:0px; + height:30px; + background-color:rgba(0,0,0,0.5); +} + +.media-player-controls-left { + float:left; + width:30px; + height:26px; + margin: 2px 0; + border-right:1px solid #eee; +} + +.media-player.fullscreen .media-player-controls-left { + width:40px; + border:none; +} + +.media-player-controls-right { + float:right; + width:120px; + height:30px; +} + +.media-player.fullscreen .media-player-controls-right { + width:110px; +} + +.media-player-controls-mid { + position:absolute; + left:45px; + right:130px; + height:30px; +} + +.media-player.fullscreen .media-player-controls-mid { + left:50px; +} + +.media-player .media-player-play, .media-player .media-player-volume, .media-player .media-player-timer { + float: left; +} + +/* play, pause */ +.media-player .media-player-play, .media-player .media-player-pause, .osmplayer-playlist-pager-prevpage, .osmplayer-playlist-pager-nextpage { + display: block; + width: 22px; + height: 22px; + margin:2px 0 0 4px; + opacity: 0.7; + -moz-transition: all 0.2s ease-in-out; /* Firefox */ + -webkit-transition: all 0.2s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.2s ease-in-out; /* Opera */ + transition: all 0.2s ease-in-out; +} + +.media-player .media-player-play:hover, .media-player .media-player-pause:hover, .osmplayer-playlist-pager-prevpage:hover, .osmplayer-playlist-pager-nextpage:hover { + opacity: 1; +} + +.media-player .media-player-play { + background: url(images/play-icon.png) no-repeat; +} + +.media-player .media-player-pause { + background: url(images/pause-icon.png) no-repeat; + display:none; +} + +/* seek */ +.media-player .media-player-seek { + position:relative; + height: 10px; + margin-top:9px; + border: 1px solid #494949; + -moz-border-radius:4px; + -webkit-border-radius:4px; + border-radius:4px; + background: #535353; + background-image: -moz-linear-gradient(top, #535353, #333333); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #535353),color-stop(1, #333333)); + box-shadow: inset 0 -3px 3px #333333; +} + +.media-player .media-player-seek .ui-slider-handle { + width: 15px; + height: 15px; + border: 1px solid #333; + top: -4px; + z-index:20px; + -moz-border-radius:10px; + -webkit-border-radius:10px; + border-radius:10px; + background: #e6e6e6; + background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5)); + box-shadow: inset 0 -3px 3px #d5d5d5; +} + +.media-player .media-player-seek .ui-slider-handle.ui-state-hover { + background: #fff; +} + +.media-player .media-player-seek .ui-slider-range { + -moz-border-radius:15px; + -webkit-border-radius:15px; + z-index:10px; + border-radius:15px; + background: #4cbae8; + background-image: -moz-linear-gradient(top, #4cbae8, #39a2ce); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #4cbae8),color-stop(1, #39a2ce)); + box-shadow: inset 0 -3px 3px #39a2ce; +} + +.media-player .media-player-progress { + -moz-border-radius:15px; + -webkit-border-radius:15px; + z-index:8px; + width:0px; + height:10px; + border-radius:15px; + background: #266580; + background-image: -moz-linear-gradient(top, #266580, #153A4A); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #266580),color-stop(1, #153A4A)); + box-shadow: inset 0 -3px 3px #153A4A; +} + +/* timer */ +.media-player .media-player-timer { + position:relative; + height: 22px; + float:left; + color: #999; + padding-top:6px; + padding-right:6px; + font-size: 16px; + font-weight: bold; + border-right:1px solid #eee; +} + +.media-player.fullscreen .media-player-timer { + border:none; + margin-top:4px; +} + +/* volume */ +.media-player .media-player-volume { + position: absolute; + right:33px; + bottom:4px; + float:right; + overflow: hidden; + width: 20px; + height: 30px; + color: #fff; + padding: 0px 10px; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.2s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + +.media-player.fullscreen .media-player-volume { + right:40px; + bottom:13px; +} + +.media-player .media-player-volume:hover { + height: 135px; + padding-top: 5px; +} + + +.media-player .media-player-volume:hover .media-player-volume-slider { + position: relative; + visibility: visible; + opacity: 1; +} + +.media-player .media-player-volume-slider { + position: relative; + height: 100px; + width: 7px; + left: 4px; + visiblity: hidden; + opacity: 0; + border: 1px solid #444; + -moz-border-radius:15px; + -webkit-border-radius:15px; + border-radius:15px; + background: #535353; + background-image: -moz-linear-gradient(top, #535353, #333333); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #535353),color-stop(1, #333333)); + box-shadow: inset 0 3px 3px #333333; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.1s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + +.media-player .media-player-volume-slider .ui-slider-handle { + width: 12px; + height: 12px; + left: -4px; + margin-bottom:-0.6em; + margin-left:0; + border: 1px solid #333; + -moz-border-radius:10px; + -webkit-border-radius:10px; + border-radius:10px; + background: #e6e6e6; + background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5)); + + box-shadow: inset 0 3px 3px #d5d5d5; +} + +.media-player .media-player-volume-slider .ui-slider-handle.ui-state-hover { + background: #fff; +} + +.media-player .media-player-volume-slider .ui-slider-range { + -moz-border-radius:15px; + -webkit-border-radius:15px; + border-radius:15px; + background: #e6e6e6; + background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5)); + box-shadow: inset 0 3px 3px #d5d5d5; +} + +/* volume button */ + +.media-player .media-player-volume-button { + position: absolute; + bottom: 0px; + display: block; + width: 22px; + height: 22px; + background: url(images/volume-full-icon.png) no-repeat; + text-indent: -9999px; + opacity: 0.8; +} + +.media-player .media-player-volume-button:hover { + opacity: 1; +} + +.media-player .media-player-volume-mute { + background: url(images/volume-mute-icon.png) no-repeat; +} + +/* Fullscreen button */ +.media-player .media-player-fullscreen { + position: absolute; + right:6px; + bottom:7px; + width: 22px; + height: 14px; + border:1px solid #aaa; +} + +.media-player.fullscreen .media-player-fullscreen { + right:14px; + bottom:16px; +} + +.media-player .media-player-fullscreen-inner, .media-player.fullscreen .media-player-fullscreen:hover .media-player-fullscreen-inner { + position:absolute; + bottom:0; + width:16px; + height:8px; + background-color:#aaa; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.1s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + +.media-player .media-player-fullscreen:hover .media-player-fullscreen-inner, .media-player.fullscreen .media-player-fullscreen-inner { + width:20px; + height:12px; +} + +.media-player.fullscreen .media-player-controls { + position: absolute; + z-index:1002; + width:500px; + left: 50%; + bottom:10px; + margin: 0 0 0 -260px; + padding: 10px; + border: 1px solid #2E2E2E; + -moz-border-radius: 5px; /* FF1+ */ + -webkit-border-radius: 5px; /* Saf3+, Chrome */ + border-radius: 5px; /* Opera 10.5, IE 9 */ + background: #000000; + background-image: -moz-linear-gradient(top, #313131, #000000); /* FF3.6 */ + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #313131),color-stop(1, #000000)); /* Saf4+, Chrome */ + box-shadow: inset 0 15px 35px #535353; + -moz-transition: all 0.1s ease-in-out; /* Firefox */ + -webkit-transition: all 0.1s ease-in-out; /* Safari and Chrome */ + -o-transition: all 0.1s ease-in-out; /* Opera */ + transition: all 0.1s ease-in-out; +} + +/** OSM Player Styles **/ +.osmplayer { + position:relative; + overflow: hidden; + background:#000; + border:1px solid #333; + font-family:"Trebuchet MS", Helvetica, sans-serif; + color: #999; + -moz-box-shadow:0px 5px 10px #333;/*no-important moz*/ + -webkit-box-shadow:0px 5px 10px #333;/*no-important chrome*/ +} + +.osmplayer-playlist { + position: absolute; + width: 160px; + top: 0px; + bottom: 0px; + right: 0px; + border: 1px solid #333; +} + +.osmplayer-hide-show-playlist { + position: absolute; + z-index: 3; + top: 50%; + right: 160px; + width: 16px; + height: 40px; + margin: -20px 0 0 0; + text-align: center; + vertical-align: center; + opacity: 0.5; + background: rgba(0, 0, 0, 0.5); + background-image: -moz-linear-gradient(top, #313131, #000000); /* FF3.6 */ + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #313131),color-stop(1, #000000)); /* Saf4+, Chrome */ + border: 1px solid #2E2E2E; +} + +.osmplayer-hide-show-playlist span { + position: absolute; + top: 50%; + margin-top: -8px; +} + +.osmplayer-playlist-scroll { + position: absolute; + overflow: hidden; + top: 0px; + right: 0px; + left: 0px; + bottom: 30px; +} + +.osmplayer-playlist-scrollbar { + position: absolute; + width: 10px; + height: 100%; + top: 0px; + bottom: 0px; + right: 0px; + z-index: 20; + border: 1px solid #494949; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + background: #535353; + background-image: -moz-linear-gradient(top, #535353, #333333); + background-image: -webkit-gradient(linear,left,right,color-stop(0, #535353),color-stop(1, #333333)); + box-shadow: inset 0 -3px 3px #333333; +} + +.osmplayer-playlist-scrollbar .ui-slider-handle { + width: 8px; + height: 15px; + border: 1px solid #333; + right: 0; + left: 0; + margin: 0; + z-index:20px; + -moz-border-radius:2px; + -webkit-border-radius:2px; + border-radius:2px; + background: #e6e6e6; + background-image: -moz-linear-gradient(top, #e6e6e6, #d5d5d5); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e6e6e6),color-stop(1, #d5d5d5)); + box-shadow: inset 0 -3px 3px #d5d5d5; +} + +.osmplayer-playlist-scrollbar .ui-slider-handle.ui-state-hover { + background: #fff; +} + +.osmplayer-playlist-scrollbar .ui-slider-range { + -moz-border-radius:15px; + -webkit-border-radius:15px; + z-index:10px; + border-radius:15px; + background: #4cbae8; + background-image: -moz-linear-gradient(top, #4cbae8, #39a2ce); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #4cbae8),color-stop(1, #39a2ce)); + box-shadow: inset 0 -3px 3px #39a2ce; +} + +.osmplayer-playlist-list { + margin: 2px 14px 2px 2px; +} + +.osmplayer-teaser { + margin:1px 0 1px 0; + cursor:pointer; + padding: 0; +} + +.osmplayer-teaser-image { + width: 100%; + height: 80px; + margin: auto; +} + +.osmplayer-teaser-info { + z-index: 20; + font-size: 12px; + margin-top: 2px; + padding: 4px; +} + +.osmplayer-playlist-pager { + position: absolute; + display: block; + z-index:3; + bottom:0px; + left:0px; + right:0px; + height:30px; +} + +.osmplayer-playlist-pager-link { + float:left; + margin:5px 2px 0 0px; +} + +.osmplayer-playlist-pager-left { + float:left; + margin-left:3px; +} + +.osmplayer-playlist-pager-right { + float:right; + margin-right:3px; +} + +.osmplayer-playlist-pager-link { + width: 20px; + height: 20px; +} + +.osmplayer-playlist-pager-prevpage { + background: url(images/prev.png) no-repeat 0 0; +} +.osmplayer-playlist-pager-nextpage { + background: url(images/play-icon.png) no-repeat 0 0; +} diff --git a/templates/default/images/busy.gif b/templates/default/images/busy.gif deleted file mode 100644 index bd6dd974121f17d5c4dd79a8a579db1061166c72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3208 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 DK$5y3 diff --git a/templates/default/images/mask.png b/templates/default/images/mask.png deleted file mode 100644 index 00ac71b07c59d36a06dd0487383f9aaa7d57a775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^Od!m`1|*BN@u~nRmSQK*5Dp-y;YjHK@;M7UB8wRq z7;k_u+KE0}}(w0fz9?n_8QI@(iA?elF{r5}E*?`X;>q diff --git a/templates/default/images/play.png b/templates/default/images/play.png deleted file mode 100644 index 9f70d05c0107a08ee977fbe617d4e983a155e319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 956 zcmV;t14I0YP)oBu3ebmhK2NQHx z_3QV~d#|dxyGl_MwE^dWo4{2wizpzaD2h6O>;H}ifJ?xBGke!Ow~`Y8or8|sfQ7&v zN!uh%XpURS34k#b&WFGv;I5=ilEydIt>gs2$RXO>fn_*Bt0fIGI03#Cgp8)g#7bMN}<5D{6jYv7ufnG^_Bu&iOr&OdB5;GULDQTUgEOs&z z09gyT9axDQ5Ee^n%kEZk0^CrW2V;P(z*R}JbFx`C!M|UgbOJ{u9g)dyOd<%&g1*`|INSfv228|LDGYL2)sVDFCTcd@< z%mZ#oTAo+B`7HKYj083UmnC&&HRfaZP0D28jHDfs#-%mV%!rgTAD3>+(xh9nYNQ&Y zfK9-qq^s*z6B088mu}sX#@2H|s|o=q0Sj>HwzO8dwNi~#V>GZC_b@lLTBlZyNIBDh zi;~t#YAsmq71#}&9x9D0(MmOP8Q5WF zAJSYL;wF}6@&cDeeOZh&Ga}!BJ;2GNX;g`3)yNfG8okfUV55b+1h$&lgS-tlO2}7W zA8;a%G^&JeAp^i!V6T~d@^~Mw#eNUyHnZ2B?Ei<4;rA6z!2O)<4oRL7`Ggxz&-to@ zp$LJW8Ey0f$AN=p_AR?h=?HNXQ(A7|R;O=s@+UQEg**nfCt02PCIr4G=pO+)aa#ue z_;D#6^+x0e?pgV$nPsghFVqs!kDJgA<+(2ML5LeR%lQRd01gyo*J+5Gz+wu!%QOVu e08c3RzTdxnCL2cNo8^oE0000 'playlist.xml', - 'debug' => true, - 'prefix' => '', - 'base_path' => '../..', - 'base_url' => '../..', - 'theme' => '', - 'template' => 'default' - )); -?> - - - Open Standard Media (OSM) Player: Template Development - - getHeader(); ?> - - - getPlayer(); ?> - - \ No newline at end of file diff --git a/templates/default/jquery.media.template.api.js.js b/templates/default/jquery.media.template.api.js.js deleted file mode 100755 index 476294b7..00000000 --- a/templates/default/jquery.media.template.api.js.js +++ /dev/null @@ -1,250 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/** - * This file serves as an API documentation on the javascript template file that is used - * to govern special functionality of your template. This system uses a hook system where - * special hooks are called during certain key moments in the media players functionality - * that allows you to hook in and add your own speical functionality to your template. - * Please read all comments below on what you will need to provide in your template to - * implement special funcitonality. - * - * Step 1: First, you will need to copy this file, and rename it as - * jquery.media.template.{YOUR_TEMPLATE_NAME}.js - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - - }); - - jQuery.media.templates = jQuery.extend( {}, { - - /** - * Here you will need to change the name of {YOUR_TEMPLATE_NAME} to the name - * of your template. - */ - "{YOUR_TEMPLATE_NAME}" : function( mediaplayer, settings ) { - - // Return the template - return new (function( mediaplayer, settings ) { - - // Get the settings for this media player. - settings = jQuery.media.utils.getSettings(settings); - - // So that we can access this from any scope. - var _this = this; - - /** - * Initialize our template. - * - * @param - The settings object. - */ - this.initialize = function( settings ) {}; - - /** - * Returns our template settings overrides. - * - * @return - An associative array of our settings. We can use this to override any - * default settings for the player as well as default ids. - */ - this.getSettings = function() { return {}; }; - - /** - * Called when the user presses the menu button. - * - * @param - If the menu should be on (true) or off (false). - */ - this.onMenu = function( on ) {}; - - /** - * Called when the user presses the maximize button. - * - * @param - If the player should be maximized (true) or not (false). - * @param - Boolean if this operation should be tweened or not. - */ - this.onMaximize = function( on ) {}; - - /** - * Called when the user presses the fullscreen button. - * - * @param - If the player is in fullscreen (true) or normal mode (false). - */ - this.onFullScreen = function( on ) {}; - - /** - * Allows the template to handle media events. - * - * @param - The media event. - * event.type - The event type. - * event.data - The data passed from this event. - */ - this.onMediaUpdate = function( event ) {}; - - /** - * Allows the template to handle control bar events. - * - * @param - The control event. - * event.type - The event type. - * event.data - The data passed from this event. - */ - this.onControlUpdate = function( event ) {}; - - /** - * Called when the player resizes. - */ - this.onResize = function() {}; - - /** - * Allows the template to do something custom when the node has finished loading. - * - * @param - The node object. - */ - this.onNodeLoad = function( node ) {}; - - /** - * Allows the template to do something custom when the playlist has finished loading. - * - * @param - The playlist object - */ - this.onPlaylistLoad = function( playlist ) {}; - - /** - * Selects or Deselects a menu item. - */ - this.onMenuSelect = function( link, contents, selected ) {}; - - /** - * Called when the link is hovered over. - * - * @param - The link object passed to this function. - * - * @return - none - */ - this.onLinkOver = function( link ) {}; - - /** - * Called when the mouse moves out of the link. - * - * @param - The link object passed to this function. - * - * @return - none - */ - this.onLinkOut = function( link ) {}; - - /** - * Called when the user selects a link. - * - * @param - The link object passed to this function. - * @param - Boolean to see if the link is selected or not. - * - * @return - none - */ - this.onLinkSelect = function( link, select ) {}; - - /** - * Called when the teaser has loaded.. - * - * @param - The teaser object passed to this function. - * teaser.node - The teaser node object. - * teaser.index - The index in the playlist array. - * - * @return - none - */ - this.onTeaserLoad = function( teaser ) {}; - - /** - * Called when the teaser is hovered over. - * - * @param - The teaser object passed to this function. - * teaser.node - The teaser node object. - * teaser.index - The index in the playlist array. - * - * @return - none - */ - this.onTeaserOver = function( teaser ) {}; - - /** - * Called when the mouse moves out of the teaser. - * - * @param - The teaser object passed to this function. - * teaser.node - The teaser node object. - * teaser.index - The index in the playlist array. - * - * @return - none - */ - this.onTeaserOut = function( teaser ) {}; - - /** - * Called when a teaser has been selected. - * - * @param - The teaser object passed to this function. - * teaser.node - The teaser node object. - * teaser.index - The index in the playlist array. - * - * @param - Boolean to determine if the teaser is selected or not. - * - * @return - none - */ - this.onTeaserSelect = function( teaser, selected ) {}; - - /** - * Called when a teaser has been activated. - * - * @param - The teaser object passed to this function. - * teaser.node - The teaser node object. - * teaser.index - The index in the playlist array. - * - * @param - Boolean to determine if the teaser is active or not. - * - * @return - none - */ - this.onTeaserActivate = function( teaser, active ) {}; - - /** - * Template function used to update a vote value. - * - * @param - The voter object. - * @param - The current vote value. - * @param - If this is a hover update. - */ - this.updateVote = function( voter, voteValue, hover ) {}; - - /** - * This function is currently stubbed out. - * You can implement it and hook into the time display by - * reassigning this as follows... - * - * this.formatTime = function( time ) { - * } - */ - this.formatTime = false; - })( mediaplayer, settings ); - } - }, jQuery.media.templates ); -})(jQuery); \ No newline at end of file diff --git a/templates/default/jquery.media.template.default.compressed.js b/templates/default/jquery.media.template.default.compressed.js deleted file mode 100644 index e1c38b2d..00000000 --- a/templates/default/jquery.media.template.default.compressed.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function(a){jQuery.media=jQuery.media?jQuery.media:{};jQuery.media.defaults=jQuery.extend(jQuery.media.defaults,{prefix:"",controllerOnly:false,playlistOnly:false});jQuery.media.templates=jQuery.extend({},{"default":function(b,c){return new (function(d,e){e=jQuery.media.utils.getSettings(e);var f=this;this.player=null;this.titleLinks=null;this.nodeWidth=0;this.nodeHeight=0;this.dialogWidth=0;this.dialogHeight=0;this.controlHeight=0;this.showController=true;this.isFireFox=(typeof document.body.style.MozBoxShadow==="string");this.initialize=function(g){this.nodeWidth=d.display.width();this.nodeHeight=d.display.height();this.dialogWidth=d.dialog.width();this.dialogHeight=d.dialog.height();this.controlHeight=d.controller?d.controller.display.height():0;this.player=d.node?d.node.player:null;this.titleLinks=d.titleBar?d.titleBar.titleLinks:null;this.setPlaylistHeight();};this.setPlaylistHeight=function(){if(e.vertical&&d.playlist&&d.playlist.scrollRegion){var h=d.playlist.display.height();if(h){var g=d.playlist.pager?d.playlist.pager.display.height():0;d.playlist.scrollRegion.display.height(h-g);}}};this.onResize=function(){this.setPlaylistHeight();};this.onMenu=function(g){if(d.menu){if(g){d.menu.display.show("normal");}else{d.menu.display.hide("normal");}}};this.onMaximize=function(h){var g=d.display.position();g=e.vertical?g.left:g.top;var i=e.vertical?h?{width:(this.dialogWidth-g)+"px"}:{width:this.nodeWidth+"px"}:h?{height:(this.dialogHeight-g)+"px"}:{height:this.nodeHeight+"px"};d.display.animate(i,250,"linear",function(){d.onResize();});};this.setFullScreenPos=function(){var i=this.player.media.display.offset();var h=parseInt(this.player.media.display.css("marginLeft"),10);var g=parseInt(this.player.media.display.css("marginTop"),10);this.player.media.display.css({marginLeft:(a(document).scrollLeft()-i.left+h)+"px",marginTop:(a(document).scrollTop()-i.top+g)+"px",width:a(window).width(),height:a(window).height()});};this.onFullScreen=function(h){if(h){if(this.player){a(window).bind("mousemove",function(){if(!f.player.hasControls()&&f.showController){jQuery.media.utils.showThenHide(d.controller.display,"display","fast","slow");}jQuery.media.utils.showThenHide(f.titleLinks,"links","fast","slow");});if(!this.player.hasControls()&&this.showController){jQuery.media.utils.showThenHide(d.controller.display,"display","fast","slow");jQuery.media.utils.stopHideOnOver(d.controller.display,"display");}jQuery.media.utils.showThenHide(this.titleLinks,"links","fast","slow");jQuery.media.utils.stopHideOnOver(this.titleLinks,"links");}d.dialog.addClass(e.prefix+"mediafullscreen");d.dialog.find("#"+e.prefix+"mediamaxbutton").hide();d.showNativeControls(true);if(this.player&&this.player.media){if(this.isFireFox){this.setFullScreenPos();var g=0;a(window).bind("scroll",function(){clearTimeout(g);g=setTimeout(function(){f.setFullScreenPos();},100);});var i=0;a(window).bind("resize",function(){clearTimeout(i);i=setTimeout(function(){f.setFullScreenPos();},100);});}else{this.player.media.display.css({position:"fixed",overflow:"hidden"});}}}else{a(window).unbind("mousemove");jQuery.media.utils.stopHide(d.controller.display,"display");jQuery.media.utils.stopHide(this.titleLinks,"links");if(this.showController){d.controller.display.show();}if(this.titleLinks){this.titleLinks.show();}d.dialog.find("#"+e.prefix+"mediamaxbutton").show();d.dialog.removeClass(e.prefix+"mediafullscreen");d.showNativeControls(false);if(this.player&&this.player.media){if(this.isFireFox){a(window).unbind("scroll");a(window).unbind("resize");this.player.media.display.css({marginLeft:"0px",marginTop:"0px",width:"100%",height:"100%"});}else{this.player.media.display.css({position:"absolute",overflow:"inherit"});}}}d.onResize();};this.onMenuSelect=function(i,h,g){if(g){h.show("normal");i.addClass(e.prefix+"ui-tabs-selected "+e.prefix+"ui-state-active");}else{h.hide("normal");i.removeClass(e.prefix+"ui-tabs-selected "+e.prefix+"ui-state-active");}};this.onLinkOver=function(g){g.addClass(e.prefix+"ui-state-hover");};this.onLinkOut=function(g){g.removeClass(e.prefix+"ui-state-hover");};this.onLinkSelect=function(h,g){if(g){a(h.display).addClass(e.prefix+"active");}else{a(h.display).removeClass(e.prefix+"active");}};this.onTeaserOver=function(g){a(g.node.display).addClass(e.prefix+"ui-state-hover");};this.onTeaserOut=function(g){a(g.node.display).removeClass(e.prefix+"ui-state-hover");};this.onTeaserSelect=function(g,h){if(h){a(g.node.display).addClass(e.prefix+"ui-state-hover");}else{a(g.node.display).removeClass(e.prefix+"ui-state-hover");}};this.onTeaserActivate=function(g,h){if(h){a(g.node.display).addClass(e.prefix+"ui-state-active");}else{a(g.node.display).removeClass(e.prefix+"ui-state-active");}};this.onMediaUpdate=function(g){if(d.fullScreen&&g.type=="playerready"){d.showNativeControls(true);}if(d.controller&&d.node){if(g.type=="reset"){this.showController=true;d.controller.display.show();d.node.display.css("bottom",this.controlHeight+"px");}else{if(g.type=="nomedia"){this.showController=false;d.controller.display.hide();d.node.display.css("bottom","0px");}}}};this.updateVote=function(l,m,k){var h=0;var j=l.votes.length;while(j--){var g=l.votes[j];g.display.removeClass(k?(e.prefix+"ui-state-highlight"):(e.prefix+"ui-state-active"));g.display.removeClass(k?"":(e.prefix+"ui-state-active"));if(m>=g.vote){g.display.addClass(k?(e.prefix+"ui-state-highlight"):(e.prefix+"ui-state-active"));}h=g.vote;}};this.formatTime=false;})(b,c);}},jQuery.media.templates);})(jQuery); \ No newline at end of file diff --git a/templates/default/jquery.media.template.default.js b/templates/default/jquery.media.template.default.js deleted file mode 100755 index a1471c02..00000000 --- a/templates/default/jquery.media.template.default.js +++ /dev/null @@ -1,329 +0,0 @@ -/** - * Copyright (c) 2010 Alethia Inc, - * http://www.alethia-inc.com - * Developed by Travis Tidwell | travist at alethia-inc.com - * - * License: GPL version 3. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -(function($) { - jQuery.media = jQuery.media ? jQuery.media : {}; - - // Set up our defaults for this component. - jQuery.media.defaults = jQuery.extend( jQuery.media.defaults, { - prefix:"", - controllerOnly:false, - playlistOnly:false - }); - - jQuery.media.templates = jQuery.extend( {}, { - "default" : function( mediaplayer, settings ) { - // Return the template - return new (function( mediaplayer, settings ) { - - settings = jQuery.media.utils.getSettings(settings); - var _this = this; - - this.player = null; - this.titleLinks = null; - this.nodeWidth = 0; - this.nodeHeight = 0; - this.dialogWidth = 0; - this.dialogHeight = 0; - this.controlHeight = 0; - this.showController = true; - this.isFireFox = (typeof document.body.style.MozBoxShadow === 'string'); - - this.initialize = function( settings ) { - this.nodeWidth = mediaplayer.display.width(); - this.nodeHeight = mediaplayer.display.height(); - this.dialogWidth = mediaplayer.dialog.width(); - this.dialogHeight = mediaplayer.dialog.height(); - this.controlHeight = mediaplayer.controller ? mediaplayer.controller.display.height() : 0; - this.player = mediaplayer.node ? mediaplayer.node.player : null; - this.titleLinks = mediaplayer.titleBar ? mediaplayer.titleBar.titleLinks : null; - - // Set the playlist height for IE. - this.setPlaylistHeight(); - }; - - this.setPlaylistHeight = function() { - // Stupid IE hack. - if( settings.vertical && mediaplayer.playlist && mediaplayer.playlist.scrollRegion ) { - var pHeight = mediaplayer.playlist.display.height(); - if( pHeight ) { - var pagerHeight = mediaplayer.playlist.pager ? mediaplayer.playlist.pager.display.height() : 0; - mediaplayer.playlist.scrollRegion.display.height( pHeight - pagerHeight ); - } - } - }; - - this.onResize = function() { - this.setPlaylistHeight(); - }; - - this.onMenu = function( on ) { - if( mediaplayer.menu ) { - if( on ) { - mediaplayer.menu.display.show( "normal" ); - } - else { - mediaplayer.menu.display.hide( "normal" ); - } - } - }; - - this.onMaximize = function( on ) { - var position = mediaplayer.display.position(); - position = settings.vertical ? position.left : position.top; - var newCSS = settings.vertical ? - on ? {width:(this.dialogWidth - position) +"px"} : {width:this.nodeWidth+"px"} : - on ? {height:(this.dialogHeight - position) +"px"} : {height:this.nodeHeight+"px"} ; - mediaplayer.display.animate(newCSS, 250, 'linear', function() { - mediaplayer.onResize(); - }); - }; - - /** - * This is only needed for Firefox. * - */ - this.setFullScreenPos = function() { - var offset = this.player.media.display.offset(); - var marginLeft = parseInt(this.player.media.display.css("marginLeft"),10); - var marginTop = parseInt(this.player.media.display.css("marginTop"),10); - this.player.media.display.css({ - marginLeft:($(document).scrollLeft() - offset.left + marginLeft) + "px", - marginTop:($(document).scrollTop() - offset.top + marginTop) + "px", - width:$(window).width(), - height:$(window).height() - }); - }; - - this.onFullScreen = function( on ) { - if( on ) { - if( this.player ) { - // Make sure - $(window).bind("mousemove", function() { - if( !_this.player.hasControls() && _this.showController ) { - jQuery.media.utils.showThenHide( mediaplayer.controller.display, "display", "fast", "slow" ); - } - jQuery.media.utils.showThenHide( _this.titleLinks, "links", "fast", "slow" ); - }); - - if( !this.player.hasControls() && this.showController ) { - jQuery.media.utils.showThenHide( mediaplayer.controller.display, "display", "fast", "slow" ); - jQuery.media.utils.stopHideOnOver( mediaplayer.controller.display, "display" ); - } - - jQuery.media.utils.showThenHide( this.titleLinks, "links", "fast", "slow" ); - jQuery.media.utils.stopHideOnOver( this.titleLinks, "links" ); - } - - mediaplayer.dialog.addClass(settings.prefix + "mediafullscreen"); - mediaplayer.dialog.find("#" + settings.prefix + "mediamaxbutton").hide(); - mediaplayer.showNativeControls(true); - - if( this.player && this.player.media ) { - - /** - * Firefox Hack... Firefox has a nasty bug where it will reload flash if it - * overflows the containing element when it its CSS properties "position" or "overflow" - * are set ( which is needed for full screen ). Because of this, we will just use this - * hacked version of fullscreen mode. - */ - if( this.isFireFox ) { - this.setFullScreenPos(); - - // Called when the window is scrolled. - var scrollTimeout = 0; - $(window).bind('scroll', function() { - clearTimeout( scrollTimeout ); - scrollTimeout = setTimeout( function() { - _this.setFullScreenPos(); - }, 100); - }); - - // Called when the window resizes. - var resizeTimeout = 0; - $(window).bind('resize', function() { - clearTimeout( resizeTimeout ); - resizeTimeout = setTimeout( function() { - _this.setFullScreenPos(); - }, 100); - }); - } - else { - this.player.media.display.css({ - position:"fixed", - overflow:"hidden" - }); - } - } - } - else { - $(window).unbind("mousemove"); - jQuery.media.utils.stopHide( mediaplayer.controller.display, "display" ); - jQuery.media.utils.stopHide( this.titleLinks,"links" ); - if( this.showController ) { - mediaplayer.controller.display.show(); - } - if( this.titleLinks ) { - this.titleLinks.show(); - } - - mediaplayer.dialog.find("#" + settings.prefix + "mediamaxbutton").show(); - mediaplayer.dialog.removeClass(settings.prefix + "mediafullscreen"); - mediaplayer.showNativeControls(false); - - if( this.player && this.player.media ) { - if( this.isFireFox ) { - $(window).unbind('scroll'); - $(window).unbind('resize'); - this.player.media.display.css({ - marginLeft:"0px", - marginTop:"0px", - width:"100%", - height:"100%" - }); - } - else { - this.player.media.display.css({ - position:"absolute", - overflow:"inherit" - }); - } - } - } - - mediaplayer.onResize(); - }; - - this.onMenuSelect = function( link, contents, selected ) { - if( selected ) { - contents.show("normal"); - link.addClass(settings.prefix + 'ui-tabs-selected ' + settings.prefix + 'ui-state-active'); - } - else { - contents.hide("normal"); - link.removeClass(settings.prefix + 'ui-tabs-selected ' + settings.prefix + 'ui-state-active'); - } - }; - - this.onLinkOver = function( link ) { - // Add the hover class. - link.addClass(settings.prefix + "ui-state-hover"); - }; - - this.onLinkOut = function( link ) { - // Remove the hover class. - link.removeClass(settings.prefix + "ui-state-hover"); - }; - - this.onLinkSelect = function( link, select ) { - if( select ) { - $(link.display).addClass(settings.prefix + "active"); - } - else { - $(link.display).removeClass(settings.prefix + "active"); - } - }; - - this.onTeaserOver = function( teaser ) { - // Add the hover class. - $(teaser.node.display).addClass(settings.prefix + "ui-state-hover"); - }; - - this.onTeaserOut = function( teaser ) { - // Remove the hover class. - $(teaser.node.display).removeClass(settings.prefix + "ui-state-hover"); - }; - - this.onTeaserSelect = function( teaser, selected ) { - if( selected ) { - $(teaser.node.display).addClass(settings.prefix + "ui-state-hover"); - } - else { - $(teaser.node.display).removeClass(settings.prefix + "ui-state-hover"); - } - }; - - this.onTeaserActivate = function( teaser, active ) { - if( active ) { - $(teaser.node.display).addClass(settings.prefix + "ui-state-active"); - } - else { - $(teaser.node.display).removeClass(settings.prefix + "ui-state-active"); - } - }; - - this.onMediaUpdate = function( data ) { - if( mediaplayer.fullScreen && data.type == "playerready" ) { - mediaplayer.showNativeControls(true); - } - - if( mediaplayer.controller && mediaplayer.node ) { - if( data.type == "reset" ) { - this.showController = true; - mediaplayer.controller.display.show(); - mediaplayer.node.display.css("bottom", this.controlHeight + "px"); - } - else if( data.type == "nomedia" ) { - this.showController = false; - mediaplayer.controller.display.hide(); - mediaplayer.node.display.css("bottom", "0px"); - } - } - }; - - /** - * Template function used to update a vote value. - * - * @param - The voter object. - * @param - The current vote value. - * @param - If this is a hover update. - */ - this.updateVote = function( voter, voteValue, hover ) { - var lastValue = 0; - - // Iterate through our votes. - var i = voter.votes.length; - while(i--) { - var vote = voter.votes[i]; - - // Remove all states ( empty star ). - vote.display.removeClass( hover ? (settings.prefix + "ui-state-highlight") : (settings.prefix + "ui-state-active") ); - vote.display.removeClass( hover ? "" : (settings.prefix + "ui-state-active") ); - - // See if we need to add a full state... - if( voteValue >= vote.vote ) { - // Add the full state ( full star )... - vote.display.addClass( hover ? (settings.prefix + "ui-state-highlight") : (settings.prefix + "ui-state-active") ); - } - - // Store the this value for the next iteration. - lastValue = vote.vote; - } - }; - - this.formatTime = false; - })( mediaplayer, settings ); - } - }, jQuery.media.templates ); -})(jQuery); \ No newline at end of file diff --git a/templates/default/js/osmplayer.controller.default.js b/templates/default/js/osmplayer.controller.default.js new file mode 100644 index 00000000..ff2a7ae9 --- /dev/null +++ b/templates/default/js/osmplayer.controller.default.js @@ -0,0 +1,79 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +// Define the controller object. +osmplayer.controller = osmplayer.controller || {}; + +/** + * Constructor for the minplayer.controller + */ +osmplayer.controller['default'] = function(context, options) { + + // Derive from default controller + minplayer.controller.call(this, context, options); +}; + +/** Derive from controller. */ +osmplayer.controller['default'].prototype = new minplayer.controller(); +osmplayer.controller['default'].prototype.constructor = osmplayer.controller['default']; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.controller['default'].prototype.construct = function() { + minplayer.controller.prototype.construct.call(this); + minplayer.showThenHide(this.display); +} + +/** + * Return the display for this plugin. + */ +osmplayer.controller['default'].prototype.getDisplay = function(context, options) { + + // See if we need to build out the controller. + if (options.build) { + + // Prepend the control template. + jQuery('.media-player', context).prepend('\ +
\ +
\ +
\ + \ + \ +
\ +
\ +
00:00
\ +
\ +
\ +
\ +
\ +
\ + \ +
\ +
\ +
\ +
\ +
\ +
\ +
\ +
'); + } + + return jQuery('.media-player-controls', context); +} + +// Return the elements +osmplayer.controller['default'].prototype.getElements = function() { + var elements = minplayer.controller.prototype.getElements.call(this); + var timer = jQuery(".media-player-timer", this.display); + return jQuery.extend(elements, { + play: jQuery(".media-player-play", this.display), + pause: jQuery(".media-player-pause", this.display), + fullscreen: jQuery(".media-player-fullscreen", this.display), + seek: jQuery(".media-player-seek", this.display), + progress: jQuery(".media-player-progress", this.display), + volume: jQuery(".media-player-volume-slider", this.display), + timer:timer, + duration:timer + }); +}; diff --git a/templates/default/js/osmplayer.default.js b/templates/default/js/osmplayer.default.js new file mode 100644 index 00000000..2e4eec14 --- /dev/null +++ b/templates/default/js/osmplayer.default.js @@ -0,0 +1,65 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +// Default player. +osmplayer['default'] = function(context, options) { + + // Derive from osmplayer. + osmplayer.call(this, context, options); +}; + +/** + * Define this template prototype. + */ +osmplayer['default'].prototype = new osmplayer(); +osmplayer['default'].prototype.constructor = osmplayer['default']; + +/** + * Return the display for this plugin. + */ +osmplayer['default'].prototype.getDisplay = function(context, options) { + + // Convert the context to jQuery object. + context = jQuery(context); + + // If the tag is video or audio, then build out the player. + var tag = context.get(0).tagName.toLowerCase(); + if (tag == 'video' || tag == 'audio') { + + // Build out the player provided the base tag. + context = context.attr({ + 'id': options.id + '-player', + 'class': 'media-player-media' + }) + .wrap(jQuery(document.createElement('div')).attr({ + 'class': 'media-player-display' + })).parent('.media-player-display') + .wrap(jQuery(document.createElement('div')).attr({ + 'class': 'media-player' + })).parent('.media-player') + .wrap(jQuery(document.createElement('div')).attr({ + 'id': options.id, + 'class': 'osmplayer' + })).parent('.osmplayer'); + + // Mark a flag that says this display needs to be built. + options.build = true; + } + + return context; +} + +// Get the elements for this player. +osmplayer['default'].prototype.getElements = function() { + var elements = osmplayer.prototype.getElements.call(this); + + // Return the jQuery elements. + return jQuery.extend(elements, { + player:this.display, + minplayer:jQuery(".media-player", this.display), + display:jQuery(".media-player-display", this.display), + media:jQuery("#" + this.options.id + "-player", this.display), + error:jQuery('.media-player-error', this.display), + playlist:jQuery('.osmplayer-playlist', this.display) + }); +}; diff --git a/templates/default/js/osmplayer.pager.default.js b/templates/default/js/osmplayer.pager.default.js new file mode 100644 index 00000000..70af897c --- /dev/null +++ b/templates/default/js/osmplayer.pager.default.js @@ -0,0 +1,47 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +// Define the busy object. +osmplayer.pager = osmplayer.pager || {}; + +// constructor. +osmplayer.pager['default'] = function(context, options) { + + // Derive from pager + osmplayer.pager.call(this, context, options); +}; + +// Define the prototype for all controllers. +osmplayer.pager['default'].prototype = new osmplayer.pager(); +osmplayer.pager['default'].prototype.constructor = osmplayer.pager['default']; + +/** + * Return the display for this plugin. + */ +osmplayer.pager['default'].prototype.getDisplay = function(context, options) { + + if (options.build) { + + // append the pager. + context.append('\ +
\ +
\ +  \ +
\ +
\ +  \ +
\ +
'); + } + + return jQuery('.osmplayer-playlist-pager', context); +} + +// Return the elements +osmplayer.pager['default'].prototype.getElements = function() { + var elements = osmplayer.pager.prototype.getElements.call(this); + return jQuery.extend(elements, { + prevPage:jQuery(".osmplayer-playlist-pager-prevpage", this.display), + nextPage:jQuery(".osmplayer-playlist-pager-nextpage", this.display) + }); +}; diff --git a/templates/default/js/osmplayer.playLoader.default.js b/templates/default/js/osmplayer.playLoader.default.js new file mode 100644 index 00000000..87dbf92d --- /dev/null +++ b/templates/default/js/osmplayer.playLoader.default.js @@ -0,0 +1,46 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +// Define the busy object. +osmplayer.playLoader = osmplayer.playLoader || {}; + +// constructor. +osmplayer.playLoader['default'] = function(context, options) { + + // Derive from playLoader + minplayer.playLoader.call(this, context, options); +}; + +// Define the prototype for all controllers. +osmplayer.playLoader['default'].prototype = new minplayer.playLoader(); +osmplayer.playLoader['default'].prototype.constructor = osmplayer.playLoader['default']; + +/** + * Return the display for this plugin. + */ +osmplayer.playLoader['default'].prototype.getDisplay = function(context, options) { + + // See if we need to build out the controller. + if (options.build) { + + // Prepend the playloader template. + jQuery('.media-player', context).prepend('\ +
\ +
\ +
 
\ +
\ +
'); + } + + return jQuery('.media-player-play-loader', context); +} + +// Return the elements +osmplayer.playLoader['default'].prototype.getElements = function() { + var elements = minplayer.playLoader.prototype.getElements.call(this); + return jQuery.extend(elements, { + busy:jQuery(".media-player-loader", this.display), + bigPlay:jQuery(".media-player-big-play", this.display), + preview:jQuery(".media-player-preview", this.display) + }); +}; diff --git a/templates/default/js/osmplayer.playlist.default.js b/templates/default/js/osmplayer.playlist.default.js new file mode 100644 index 00000000..1824862f --- /dev/null +++ b/templates/default/js/osmplayer.playlist.default.js @@ -0,0 +1,77 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +// Define the busy object. +osmplayer.playlist = osmplayer.playlist || {}; + +// constructor. +osmplayer.playlist['default'] = function(context, options) { + + // Derive from playlist + osmplayer.playlist.call(this, context, options); +}; + +// Define the prototype for all controllers. +osmplayer.playlist['default'].prototype = new osmplayer.playlist(); +osmplayer.playlist['default'].prototype.constructor = osmplayer.playlist['default']; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.playlist['default'].prototype.construct = function() { + osmplayer.playlist.prototype.construct.call(this); + + // Show then hide the element. + minplayer.showThenHide(this.elements.hideShow); + + // Make the main minplayer have the same width as the playlist. + this.get('player', function(player) { + + // Perform the show hide functionality of the playlist. + this.elements.hideShow.bind('click', (function(playlist, width) { + return function(event) { + event.preventDefault(); + var button = $('span', playlist.elements.hideShow); + var visible = button.hasClass('ui-icon-triangle-1-e'); + var from = visible ? 'ui-icon-triangle-1-e' : 'ui-icon-triangle-1-w'; + var to = visible ? 'ui-icon-triangle-1-w' : 'ui-icon-triangle-1-e'; + $('span', playlist.elements.hideShow).removeClass(from).addClass(to); + player.elements.minplayer.animate({ + marginRight: visible ? 0 : width + }, 200); + playlist.display.animate({ + right: visible ? -width : 0 + }, 200, function() { + player.resize(); + }); + }; + })(this, this.display.width())); + + // Set the player to have the correct margin if the playlist is present. + player.elements.minplayer.css('marginRight', this.display.width() + 'px'); + }); +}; + +/** + * Return the display for this plugin. + */ +osmplayer.playlist['default'].prototype.getDisplay = function(context, options) { + if (options.build) { + context.append('\ +
\ +
\ + \ +
\ +
\ + '); + } + return jQuery('.osmplayer-playlist', context); +}; + +// Return the elements +osmplayer.playlist['default'].prototype.getElements = function() { + var elements = osmplayer.playlist.prototype.getElements.call(this); + return jQuery.extend(elements, { + hideShow:jQuery(".osmplayer-hide-show-playlist", this.display) + }); +}; diff --git a/templates/default/js/osmplayer.scroll.default.js b/templates/default/js/osmplayer.scroll.default.js new file mode 100644 index 00000000..e0daff61 --- /dev/null +++ b/templates/default/js/osmplayer.scroll.default.js @@ -0,0 +1,49 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +// Define the scroll object. +osmplayer.scroll = osmplayer.scroll || {}; + +/** + * Constructor for the minplayer.controller + */ +osmplayer.scroll['default'] = function(context, options) { + + // Derive from scroll + osmplayer.scroll.call(this, context, options); +}; + + +// Define the prototype for all controllers. +osmplayer.scroll['default'].prototype = new osmplayer.scroll(); +osmplayer.scroll['default'].prototype.constructor = osmplayer.scroll['default']; + +/** + * Return the display for this plugin. + */ +osmplayer.scroll['default'].prototype.getDisplay = function(context, options) { + + // See if we need to build the scroll bar. + if (options.build) { + context.append('\ +
\ +
\ +
\ +
\ +
\ +
\ +
'); + } + + return jQuery(".osmplayer-playlist-scroll", this.display); +} + +// Return the elements +osmplayer.scroll['default'].prototype.getElements = function() { + var elements = osmplayer.scroll.prototype.getElements.call(this); + return jQuery.extend(elements, { + playlist_busy:jQuery(".osmplayer-playlist-loader-wrapper", this.display), + list:jQuery(".osmplayer-playlist-list", this.display), + scroll:jQuery(".osmplayer-playlist-scrollbar", this.display) + }); +}; diff --git a/templates/default/js/osmplayer.teaser.default.js b/templates/default/js/osmplayer.teaser.default.js new file mode 100644 index 00000000..c46fc00a --- /dev/null +++ b/templates/default/js/osmplayer.teaser.default.js @@ -0,0 +1,76 @@ +/** The osmplayer namespace. */ +var osmplayer = osmplayer || {}; + +// Define the teaser object. +osmplayer.teaser = osmplayer.teaser || {}; + +// constructor. +osmplayer.teaser['default'] = function(context, options) { + + // Derive from teaser + osmplayer.teaser.call(this, context, options); +}; + +// Define the prototype for all controllers. +osmplayer.teaser['default'].prototype = new osmplayer.teaser(); +osmplayer.teaser['default'].prototype.constructor = osmplayer.teaser['default']; + +/** + * @see minplayer.plugin#construct + */ +osmplayer.teaser['default'].prototype.construct = function() { + + minplayer.display.prototype.construct.call(this); + + // Add some hover events. + this.display.bind('mouseenter', (function(info) { + return function() { + info.addClass('ui-state-hover'); + }; + })(this.elements.info)).bind('mouseleave', (function(info) { + return function() { + info.removeClass('ui-state-hover'); + }; + })(this.elements.info)); +}; + +/** + * Return the display for this plugin. + */ +osmplayer.teaser['default'].prototype.getDisplay = function(context, options) { + + // Append this to the list. + context.append('\ +
\ +
\ +
\ +
Sample Title
\ +
\ +
'); + + var teasers = jQuery('.osmplayer-teaser', context); + return teasers.eq(teasers.length - 1); +} + +/** + * Selects the teaser. + */ +osmplayer.teaser['default'].prototype.select = function(selected) { + if (selected) { + this.elements.info.addClass('ui-state-active'); + } + else { + this.elements.info.removeClass('ui-state-active'); + } +} + + +// Return the elements +osmplayer.teaser['default'].prototype.getElements = function() { + var elements = osmplayer.teaser.prototype.getElements.call(this); + return jQuery.extend(elements, { + info: jQuery(".osmplayer-teaser-info", this.display), + title:jQuery(".osmplayer-teaser-title", this.display), + image:jQuery(".osmplayer-teaser-image", this.display) + }); +}; diff --git a/templates/default/osmplayer_default.css b/templates/default/osmplayer_default.css deleted file mode 100644 index 7d1dd093..00000000 --- a/templates/default/osmplayer_default.css +++ /dev/null @@ -1,577 +0,0 @@ -/*--------------------- Loading cursor -------------------*/ -#mediaplayerloading, #mediabusy { - position:absolute; - display: table-cell; -} - -#mediaplayerloading img, #mediabusy img { - width:32px; - height:32px; - position: absolute; - top: 50%; - left: 50%; - margin: -16px 0 0 -16px; - text-align:center; - vertical-align:center; -} - -/*--------------------- Main Dialog -------------------*/ -.mediaplayerdialog { - position:relative; - font-family:"Trebuchet MS", Helvetica, sans-serif !important; - font-style:normal !important; - font-size:11px !important; - line-height:110% !important; - margin:0; - padding:0; - border:0; -} - -.mediaplayerdialog.playlistonly { - width:150px; -} - -.mediaplayerdialog.playlistonly.playlisthorizontal { - height:136px; -} - -.mediaplayerdialog.playlistonly.playlisthorizontal.mediashowtitle { - height:152px; -} - -.mediaplayerdialog.controlleronly { - height:22px; -} - -#mediaplayer { - position:absolute; - left:0; - right:0; - top:0px; - bottom:0px; -} - -.mediaplayerdialog.mediashowtitle #mediaplayer { - top:22px; -} - -.mediaplayerdialog.mediashowplaylist #mediaplayer { - right:150px; -} - -.mediaplayerdialog.playlisthorizontal #mediaplayer { - right:0px; - bottom:0px; -} - -.mediaplayerdialog.playlisthorizontal.mediashowplaylist #mediaplayer { - bottom:136px; -} - -#medianode { - position:absolute; - z-index:10; - width:100%; - top:0px; - bottom:22px; -} - -#mediadisplay { - background-color:#000; - width:100%; - height:100%; - position:absolute; - z-index:11; -} - -.mediaplayerdialog.mediafullscreen #mediadisplay { - left: 0; - top: 0; - right: 0; - bottom: 0; - z-index:1001; - width: 100%; - height: 100%; -} - -/*--------------------- Media Overlays -------------------*/ -#mediabusy { - position:absolute; - z-index:14; - width:100%; - height:100%; - border:0; - background-image:url('images/mask.png'); -} - -.mediaplayerdialog.mediafullscreen #mediabusy { - position: fixed; - left: 0; - top: 0; - right: 0; - bottom: 0; - overflow: hidden; - z-index:1004; - width: 100%; - height: 100%; -} - -#mediapreview { - position: absolute; - display: table-cell; - background-color:#000; - z-index:12; - width:100%; - height:100%; -} - -.mediaplayerdialog.mediafullscreen #mediapreview { - position: fixed; - left: 0; - top: 0; - right: 0; - bottom: 0; - overflow: hidden; - z-index:1002; - width: 100%; - height: 100%; -} - -#mediaplay { - position:absolute; - z-index:13; - display: table-cell; - width:100%; - height:100%; - background-image:url('images/mask.png'); -} - -.mediaplayerdialog.mediafullscreen #mediaplay { - position: fixed; - left: 0; - top: 0; - right: 0; - bottom: 0; - overflow: hidden; - z-index:1003; - width: 100%; - height: 100%; -} - -#mediaplay img { - width:50px; - height:57px; - position: absolute; - top: 50%; - left: 50%; - margin: -29px 0 0 -25px; - text-align:center; - vertical-align:center; - cursor:pointer; -} - -/*--------------------- Title Bar -------------------*/ -#mediatitlebar, #mediacontrol, #mediapager { - position:absolute; - width:100%; - height:22px; - border:0; -} - -#mediatitlelinks { - float:right; - width:64px; -} - -.mediaplayerdialog.mediafullscreen #mediatitlelinks { - position:fixed; - top:5px; - right:5px; - z-index:1020; -} - -#mediatitlelinks a, #mediapager div.mediapagerlink { - float:left; - margin:2px 2px 0 0px; -} - -#mediatitlelinksinner { - float:right; -} - -/*--------------------- Voter -------------------*/ - -#medianodevoter { - float:left; - width:110px; - margin-top:-3px; -} - -#mediavoters .ui-icon { - width:12px; - height:12px; -} - -#mediacontrol #mediavoter div, #mediacontrol #mediauservoter div { - float:left; - height:12px; - border:0; - background:none; - text-decoration: none; -} - - -#mediauservotertext, #mediavotertext { - text-align:right; -} - -#mediavoterstext { - float:left; - line-height:100%; - margin-top:2px; -} - -#mediavoter .ui-state-active, #mediavoter .ui-state-hover, #mediavoter .ui-state-highlight, -#mediauservoter .ui-state-active, #mediauservoter .ui-state-hover, #mediauservoter .ui-state-highlight { - background:0; -} - -/*--------------------- Control Bar -------------------*/ -#mediacontrol { - position:absolute; - z-index:15; - bottom:0; -} - -.mediaplayerdialog.mediafullscreen #mediacontrol { - position: fixed; - z-index:1005; - width:400px; - left: 50%; - bottom:5px; - margin: 0 0 0 -200px; - text-align:center; -} - -#mediacontrolleft { - float:left; - width:60px; - height:22px; -} - -#mediacontrolcenter { - margin:0 120px 0 60px; - height:22px; -} - -.mediaplayerdialog.mediashowvoter #mediacontrolcenter { - margin-right:230px; -} - -#mediacontrolright { - float:right; - width:120px; - height:22px; -} - -.mediaplayerdialog.mediashowvoter #mediacontrolright { - width:230px; -} - -#medialist, #mediaplaypause, #mediamute, #mediamenuclose { - cursor:pointer; -} - -#mediamute, #mediaplaypause { - float:left; - margin:2px 0 0 3px; -} - -#mediacurrenttime, #mediatotaltime { - float:left; - text-align:right; - margin:4px 2px 0 4px; - width:30px; -} - -#mediavolumebar { - float:left; - width:50px; - height:4px; - margin:7px 5px 0 4px; -} - -#mediaseekhandle, #mediavolumehandle { - position:absolute; - z-index:18; - margin-top:-6px; - width:18px; - height:18px; -} - -#mediaseekhandle span, #mediavolumehandle span { - margin-left:-6px; -} - -#mediaseekbar { - margin-top:7px; - height:4px; -} - -#mediaseekupdate, #mediavolumeupdate, #mediaseekprogress { - position:absolute; - height:4px; - border-bottom:none; -} - -#mediaseekupdate, #mediavolumeupdate { - z-index:17; -} - -#mediaseekprogress { - z-index:16; -} - -/*--------------------- Menu -------------------*/ - -#mediamenu { - position: absolute; - z-index:20; - width:300px; - height:150px; - display:none; - padding:2px; - top: 50%; - left: 50%; - margin: -75px 0 0 -150px; - text-align:center; - vertical-align:center; -} - -.mediaplayerdialog.mediafullscreen #mediamenu { - position:fixed; - z-index:1020; - top: 50%; - left: 50%; -} - -.menucontent { - text-align:left; -} - -#mediamenuclose { - float:right; - margin:8px 6px 0 0; -} - -.ui-icon { - width:17px; - height:18px; -} - -/*--------------------- Playlist -------------------*/ - -#mediaplaylist { - position:absolute; - z-index:1; - width:150px; - top:0px; - bottom:0px; - right:0; -} - -.mediaplayerdialog.mediashowtitle #mediaplaylist { - top:22px; -} - -.mediaplayerdialog.playlisthorizontal #mediaplaylist { - width:100%; - height:136px; - top:auto; - bottom:0px; - right:0; -} - -.mediaplayerdialog.playlisthorizontal.playlistonly #mediaplaylist { - top:22px; -} - -#mediascrollwrapper { - position:absolute; - width:100%; - top:0px; - bottom:22px; -} - -#mediascroll, #medialistmask { - width:100%; - height:100%; -} - -/*--------------------- Links -------------------*/ - -#medialinks { - height:25px; -} - -#medialink { - float:left; - margin: 0 2px 0 0; - text-align:center; -} - -#medialinktext { - margin: 2px; -} - -/*--------------------- Pager -------------------*/ - -#mediapager { - position:absolute; - z-index:1; - bottom:0px; -} - -#mediapagerleft { - float:left; - margin-left:3px; -} - -#mediapagerright { - float:right; - margin-right:3px; -} - -/*--------------------- Scroll Bar -------------------*/ -#mediascrollbarwrapper { - position:absolute; - right:0; - width:18px; - height:100%; -} - -.mediaplayerdialog.playlisthorizontal #mediascrollbarwrapper{ - position:absolute; - bottom:0; - width:100%; - height:18px; -} - -#mediascrollup, #mediascrolldown, #mediascrollhandle { - height:18px; - width:18px; - border:0; -} - -#mediascrollup { - position:absolute; - top:0px; -} - -.mediaplayerdialog.playlisthorizontal #mediascrollup { - position:absolute; - left:0px; -} - -#mediascrolldown { - position:absolute; - bottom:0px; -} - -.mediaplayerdialog.playlisthorizontal #mediascrolldown { - position:absolute; - right:0px; -} - -#mediascrollbar { - position:absolute; - top:18px; - bottom:0px; -} - -.mediaplayerdialog.playlisthorizontal #mediascrollbar { - position:absolute; - left:18px; - right:18px; - top:0px; - bottom:0px; -} - -#mediascrolltrack { - position:absolute; - top:0px; - bottom:18px; - width:18px; - border:0; -} - -.mediaplayerdialog.playlisthorizontal #mediascrolltrack { - position:absolute; - width:100%; - height:18px; - border:0; -} - -/*--------------------- Teaser -------------------*/ - -#mediateaser { - float:left ; - height:90px; - width:125px; - margin:0 1px 2px 0; - padding:2px; - cursor:pointer; -} - -.mediaplayerdialog.mediahidescroll #mediateaser { - width:143px; -} - -.mediaplayerdialog.playlisthorizontal.mediahidescroll #mediateaser { - height:108px; -} - -#mediateaser #mediaimage { - width:80px; - height:60px; - margin-bottom:1px; - float:left; -} - -/*--------------------- Teaser Voter -------------------*/ - -#mediateaser #mediavoter { - margin-left:83px; -} - -#mediateaser #mediatitle { - clear:left; - width:120px; - height:2.2em; -} - -#mediateaser #mediavoter div { - width:14px; - border:0; - background:none; - text-decoration: none; -} - -#mediateaser #mediavoter span { - height:12px; -} - -/*--------------------- Logo -------------------*/ -.medialogo { - position:absolute; - width:49px; - height:15px; - z-index:500; -} - -.mediaplayerdialog.mediafullscreen .medialogo { - position:fixed; - z-index:1500; - left:5px; - bottom:5px; -} diff --git a/templates/default/osmplayer_default.tpl.php b/templates/default/osmplayer_default.tpl.php old mode 100755 new mode 100644 index 6e401fe2..fdcd5a84 --- a/templates/default/osmplayer_default.tpl.php +++ b/templates/default/osmplayer_default.tpl.php @@ -1,30 +1,54 @@ - - -
- -
- -
- -
- - - +
+
+
+
+
+ + +
+
+
00:00
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
 
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+   +
+
+   +
+
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_controlbar.tpl.php b/templates/default/osmplayer_default_controlbar.tpl.php deleted file mode 100644 index b23b7788..00000000 --- a/templates/default/osmplayer_default_controlbar.tpl.php +++ /dev/null @@ -1,43 +0,0 @@ - -
-
-
-
- -
- -
-
00:00
-
-
-
00:00
-
- -
- -
-
-
-
- -
-
-
- -
-
-
-
- -
-
-
-
-
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_hscrollbar.tpl.php b/templates/default/osmplayer_default_hscrollbar.tpl.php deleted file mode 100644 index fdfedbc5..00000000 --- a/templates/default/osmplayer_default_hscrollbar.tpl.php +++ /dev/null @@ -1,13 +0,0 @@ -
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_ie.css b/templates/default/osmplayer_default_ie.css deleted file mode 100644 index e69de29b..00000000 diff --git a/templates/default/osmplayer_default_links.tpl.php b/templates/default/osmplayer_default_links.tpl.php deleted file mode 100644 index 80849c85..00000000 --- a/templates/default/osmplayer_default_links.tpl.php +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/templates/default/osmplayer_default_menu.tpl.php b/templates/default/osmplayer_default_menu.tpl.php deleted file mode 100644 index 0559f994..00000000 --- a/templates/default/osmplayer_default_menu.tpl.php +++ /dev/null @@ -1,27 +0,0 @@ -
-
- -
- -
-
- - -
-
- -
-

- Open Standard Media Player version -

-
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_node.tpl.php b/templates/default/osmplayer_default_node.tpl.php deleted file mode 100644 index 1a0a720a..00000000 --- a/templates/default/osmplayer_default_node.tpl.php +++ /dev/null @@ -1,10 +0,0 @@ -
-
- -
-
-
- -
-
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_nodevoter.tpl.php b/templates/default/osmplayer_default_nodevoter.tpl.php deleted file mode 100644 index 7178b6ae..00000000 --- a/templates/default/osmplayer_default_nodevoter.tpl.php +++ /dev/null @@ -1,42 +0,0 @@ -
-
-
Vote:
-
Average:
-
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_pager.tpl.php b/templates/default/osmplayer_default_pager.tpl.php deleted file mode 100644 index 9e3a4a93..00000000 --- a/templates/default/osmplayer_default_pager.tpl.php +++ /dev/null @@ -1,12 +0,0 @@ -
-
- - - -
-
- - - -
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_playlist.tpl.php b/templates/default/osmplayer_default_playlist.tpl.php deleted file mode 100644 index 4dca71f6..00000000 --- a/templates/default/osmplayer_default_playlist.tpl.php +++ /dev/null @@ -1,14 +0,0 @@ -
-
-
-
- -
-
- -
-
-
-
- -
diff --git a/templates/default/osmplayer_default_scrollbar.tpl.php b/templates/default/osmplayer_default_scrollbar.tpl.php deleted file mode 100644 index b5d52bfe..00000000 --- a/templates/default/osmplayer_default_scrollbar.tpl.php +++ /dev/null @@ -1,13 +0,0 @@ - -
-
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_teaser.tpl.php b/templates/default/osmplayer_default_teaser.tpl.php deleted file mode 100644 index 353bb771..00000000 --- a/templates/default/osmplayer_default_teaser.tpl.php +++ /dev/null @@ -1,5 +0,0 @@ -
-
- -
Sample Title
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_teaservoter.tpl.php b/templates/default/osmplayer_default_teaservoter.tpl.php deleted file mode 100644 index 5a346a4a..00000000 --- a/templates/default/osmplayer_default_teaservoter.tpl.php +++ /dev/null @@ -1,7 +0,0 @@ -
-
-
-
-
-
-
\ No newline at end of file diff --git a/templates/default/osmplayer_default_titlebar.tpl.php b/templates/default/osmplayer_default_titlebar.tpl.php deleted file mode 100644 index f9492fc3..00000000 --- a/templates/default/osmplayer_default_titlebar.tpl.php +++ /dev/null @@ -1,13 +0,0 @@ -
- - - -
\ No newline at end of file diff --git a/templates/default/playlist.xml b/templates/default/playlist.xml deleted file mode 100755 index ef9ef613..00000000 --- a/templates/default/playlist.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - http://upload.wikimedia.org/wikipedia/commons/6/69/RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg - Mike1024 - OGG Video: Robocup Soccer - A robotic soccer tournament. - http://upload.wikimedia.org/wikipedia/commons/thumb/6/69/RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg/mid-RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg.jpg - http://commons.wikimedia.org/wiki/File:RoboCupSoccer_Robot_Football_at_2009_German_Open.ogg - - - http://upload.wikimedia.org/wikipedia/commons/2/2f/Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg - Scott Stevenson - OGG Video: Levitron - Wikipedia demonstration video of the Levitron levitating top device which partially explains its reliance upon the principle of spin stabilized magnetic levitation. A phenomenon discovered through invention in the late 1970's by Roy M. Harrigan (for which he received a patent in 1983 #4,382,245). - http://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg/mid-Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg.jpg - http://commons.wikimedia.org/wiki/File:Levitron-levitating-top-demonstrating-Roy-M-Harrigans-spin-stabilized-magnetic-levitation.ogg - - - http://www.vimeo.com/5653474 - nesthor - Vimeo Example: Kuroshio Sea - Vimeo Example. - http://ats.vimeo.com/192/971/19297174_100.jpg - - - http://www.youtube.com/watch?v=oPmhTCaDkGA - Ok Go! - YouTube Example: Ok Go! - YouTube Example. - http://i1.ytimg.com/vi/dTAAsCNK7RA/hqdefault.jpg - - - http://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_640x360.m4v - www.bigbuckbunny.org - M4V Example: Big Buck Bunny - M4V Example. - http://upload.wikimedia.org/wikipedia/commons/5/5f/BBB-Bunny.png - - - http://mirror.cs.umn.edu/blender.org/peach/trailer/trailer_480p.mov - www.bigbuckbunny.org - MOV (Flash) Example: Big Buck Bunny Trailer - MOV Example. - http://peach.blender.org/wp-content/uploads/watchtrailer.gif - - - http://upload.wikimedia.org/wikipedia/commons/c/cf/Big_Buck_Bunny_8_seconds_bird_clip.ogv - www.bigbuckbunny.org - OGV Example: Bird in Tree - OGV Example. - http://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Big_Buck_Bunny_8_seconds_bird_clip.ogv/mid-Big_Buck_Bunny_8_seconds_bird_clip.ogv.jpg - - - diff --git a/templates/default/template.php b/templates/default/template.php deleted file mode 100755 index d1204b62..00000000 --- a/templates/default/template.php +++ /dev/null @@ -1,149 +0,0 @@ - TRUE, - - /** - * The template specific JavaScript files required for this template. - */ - 'jsFiles' => array( - - /** - * The release template JavaScript file(s). Usually a compressed version of the debug version. - */ - 'release' => array( - 'templates/default/jquery.media.template.default.compressed.js' - ), - - /** - * The debug template JavaScript file(s) ( uncompressed ). - */ - 'debug' => array( - 'templates/default/jquery.media.template.default.js' - ) - ), - - /** - * The CSS files used for this template. - */ - 'cssFiles' => array( - 'theme' => $this->getThemeRollerCSS(), - 'template' => 'templates/default/osmplayer_default.css', - 'template_ie' => 'templates/default/osmplayer_default_ie.css' - ), - - /** - * The ID's for this template. This is used to map certain HTML elements - * of your template to the functionality behind the Open Standard Media Player. - */ - 'ids' => array( - 'loading' => '#mediaplayerloading', - 'player' => '#mediaplayer', - 'menu' => '#mediamenu', - 'titleBar' => '#mediatitlebar', - 'node' => '#medianode', - 'playlist' => '#mediaplaylist', - 'currentTime' => '#mediacurrenttime', - 'totalTime' => '#mediatotaltime', - 'playPause' => '#mediaplaypause', - 'seekUpdate' => '#mediaseekupdate', - 'seekProgress' => '#mediaseekprogress', - 'seekBar' => '#mediaseekbar', - 'seekHandle' => '#mediaseekhandle', - 'volumeUpdate' => '#mediavolumeupdate', - 'volumeBar' => '#mediavolumebar', - 'volumeHandle' => '#mediavolumehandle', - 'mute' => '#mediamute', - 'linkText' => '#medialinktext', - 'linkScroll' => '#medialinkscroll', - 'close' => '#mediamenuclose', - 'embed' => '#mediaembed', - 'elink' => '#mediaelink', - 'email' => '#mediaemail', - 'busy' => '#mediabusy', - 'preview' => '#mediapreview', - 'play' => '#mediaplay', - 'media' => '#mediadisplay', - 'control' => '#mediacontrol', - 'voter' => '#mediavoter', - 'uservoter' => '#mediauservoter', - 'mediaRegion' => '#mediaregion', - 'field' => '.mediafield', - 'prev' => '#mediaprev', - 'next' => '#medianext', - 'loadPrev' => '#medialoadprev', - 'loadNext' => '#medialoadnext', - 'prevPage' => '#mediaprevpage', - 'nextPage' => '#medianextpage', - 'pager' => '#mediapager', - 'scroll' => '#mediascroll', - 'busy' => '#mediabusy', - 'links' => '#medialinks', - 'listMask' => '#medialistmask', - 'list' => '#medialist', - 'scrollWrapper' => '#mediascrollbarwrapper', - 'scrollBar' => '#mediascrollbar', - 'scrollTrack' => '#mediascrolltrack', - 'scrollHandle' => '#mediascrollhandle', - 'scrollUp' => '#mediascrollup', - 'scrollDown' => '#mediascrolldown', - 'titleLinks' => '#mediatitlelinks' - ) - ); - } - - - /** - * A theme preprocess function for the main player. - */ - public function theme_preprocess( &$variables ) { - $variables['templates']['teaservoter'] = $this->theme( $variables, '_teaservoter' ); - $variables['templates']['voter'] = $this->theme( $variables, '_nodevoter' ); - $variables['templates']['controlBar'] = $this->theme( $variables, '_controlbar' ); - $variables['templates']['titlebar'] = $this->theme( $variables, '_titlebar' ); - $variables['templates']['menu'] = $this->theme( $variables, '_menu' ); - $variables['templates']['node'] = $this->theme( $variables, '_node' ); - $variables['templates']['teaser'] = $this->theme( $variables, '_teaser' ); - $variables['templates']['scrollBar'] = $this->theme( $variables, '_scrollbar' ); - $variables['templates']['links'] = $variables['params']['links'] ? theme( $variables, '_links' ) : ''; - $variables['templates']['pager'] = $this->theme( $variables, '_pager' ); - $variables['templates']['playlist'] = $this->theme( $variables, '_playlist' ); - } -} -?> diff --git a/version.txt b/version.txt index 7e32cd56..f1ff8548 100755 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.3 +2.0-alpha1