From: <rm...@us...> - 2010-10-26 04:43:12
|
Revision: 11628 http://wonder.svn.sourceforge.net/wonder/?rev=11628&view=rev Author: rmendis Date: 2010-10-26 04:43:03 +0000 (Tue, 26 Oct 2010) Log Message: ----------- Upgrading to JW Player 5.3 from beta - with added support for WO app bundled skins (usually purchased separately) Modified Paths: -------------- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.api trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.html trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.wod trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/JWPlayer.java trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/player.swf Added Paths: ----------- trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jwplayer.js Removed Paths: ------------- trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/five/ trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery.jwplayer.js Modified: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.api =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.api 2010-10-26 00:40:14 UTC (rev 11627) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.api 2010-10-26 04:43:03 UTC (rev 11628) @@ -11,5 +11,6 @@ <binding name="width"/> <binding name="height"/> <binding name="id"/> + <binding name="skin"/> </wo> </wodefinitions> Modified: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.html =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.html 2010-10-26 00:40:14 UTC (rev 11627) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.html 2010-10-26 04:43:03 UTC (rev 11628) @@ -4,9 +4,12 @@ </webobject> </webobject> <script type = "text/javascript"> - $('#<webobject name = "ID" />').jwplayer({ - flashplayer:'<webobject name="JWFlashPlayer" />', - skin:'<webobject name="JWSkin" />' + jwplayer('<webobject name = "ID" />').setup({ +<webobject name="HasSkin">skin:'<webobject name="JWSkin" />',</webobject> + players: [ + { type: 'html5' }, + { type: 'flash', src: '<webobject name="JWFlashPlayer" />' } + ] }); </script> \ No newline at end of file Modified: trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.wod =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.wod 2010-10-26 00:40:14 UTC (rev 11627) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Components/JWPlayer.wo/JWPlayer.wod 2010-10-26 04:43:03 UTC (rev 11628) @@ -22,9 +22,13 @@ framework = "ERJQuery"; } +HasSkin: WOConditional { + condition = hasSkin; +} + JWSkin: WOResourceURL { - filename = "five/five.xml"; - framework = "ERJQuery"; + filename = skin; + framework = "app"; } ID: WOString { Modified: trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/JWPlayer.java =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/JWPlayer.java 2010-10-26 00:40:14 UTC (rev 11627) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/Sources/er/jquery/widgets/JWPlayer.java 2010-10-26 04:43:03 UTC (rev 11628) @@ -14,7 +14,7 @@ * * @see http://www.longtailvideo.com/support/jw-player/jw-player-for-html5 * - * You will need to include the script jquery.jwplayer.js in your page if using Unobtrusively + * You will need to include the script jwplayer.js in your page if using Unobtrusively * * @binding poster ERAttachment for the video poster * @binding sources An array of ERAttachments comprising the video sources @@ -44,6 +44,14 @@ return (!"".equals(id)) ? id : ERXStringUtilities.safeIdentifierName(context().elementID()); } + public boolean hasSkin() { + return hasBinding("skin"); + } + + public String skin() { + return hasSkin() ? (String) valueForBinding("skin") : null; + } + // R&R @Override public void appendToResponse(WOResponse response, WOContext context) { @@ -51,7 +59,7 @@ if (!useUnobtrusively) { ERXResponseRewriter.addScriptResourceInHead(response, context, "ERJQuery", "jquery-1.4.2.min.js"); - ERXResponseRewriter.addScriptResourceInHead(response, context, "ERJQuery", "jquery.jwplayer.js"); + ERXResponseRewriter.addScriptResourceInHead(response, context, "ERJQuery", "jwplayer.js"); } } } Deleted: trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery.jwplayer.js =================================================================== --- trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery.jwplayer.js 2010-10-26 00:40:14 UTC (rev 11627) +++ trunk/Wonder/Frameworks/Ajax/ERJQuery/WebServerResources/jquery.jwplayer.js 2010-10-26 04:43:03 UTC (rev 11628) @@ -1,2534 +0,0 @@ -/** - * jwplayerControlbar component of the JW Player. - * - * @author jeroen - * @version 1.0alpha - * @lastmodifiedauthor zach - * @lastmodifieddate 2010-04-11 - */ -(function($) { - var controlbars = {}; - - /** Hooking the jwplayerControlbar up to jQuery. **/ - $.fn.jwplayerControlbar = function(player, domelement) { - controlbars[player.id] = $.extend({}, $.fn.jwplayerControlbar.defaults, player.config.plugins.controlbar); - buildElements(player, domelement); - buildHandlers(player); - }; - - $.fn.jwplayerControlbar.positions = { - BOTTOM: 'BOTTOM', - TOP: 'TOP', - OVER: 'OVER' - }; - - - /** Map with config for the jwplayerControlbar plugin. **/ - $.fn.jwplayerControlbar.defaults = { - fontsize: 10, - fontcolor: '000000', - position: $.fn.jwplayerControlbar.positions.BOTTOM, - leftmargin: 0, - rightmargin: 0, - scrubber: 'none' - }; - - /** Draw the jwplayerControlbar elements. **/ - function buildElements(player, domelement) { - // Draw the background. - domelement.parents(":first").append('<div id="' + player.id + '_jwplayerControlbar"></div>'); - $("#" + player.id + '_jwplayerControlbar').css('position', 'absolute'); - $("#" + player.id + '_jwplayerControlbar').css('height', player.skin.controlbar.elements.background.height); - switch (controlbars[player.id].position) { - case $.fn.jwplayerControlbar.positions.TOP: - $("#" + player.id + '_jwplayerControlbar').css('top', 0); - break; - default: - $("#" + player.id + '_jwplayerControlbar').css('top', player.height()); - domelement.parents(":first").css('height', parseInt(domelement.parents(":first").css('height').replace('px', '')) + player.skin.controlbar.elements.background.height); - break; - } - $("#" + player.id + '_jwplayerControlbar').css('background', 'url(' + player.skin.controlbar.elements.background.src + ') repeat-x center left'); - // Draw all elements on top of the bar. - buildElement('capLeft', 'left', true, player); - buildElement('playButton', 'left', false, player); - buildElement('pauseButton', 'left', true, player); - buildElement('divider1', 'left', true, player); - buildElement('elapsedText', 'left', true, player); - buildElement('timeSliderRail', 'left', false, player); - buildElement('timeSliderBuffer', 'left', false, player); - buildElement('timeSliderProgress', 'left', false, player); - buildElement('timeSliderThumb', 'left', false, player); - buildElement('capRight', 'right', true, player); - // TODO - if (false) { - buildElement('fullscreenButton', 'right', false, player); - buildElement('normalscreenButton', 'right', true, player); - buildElement('divider2', 'right', true, player); - } - if (!$.fn.jwplayerUtils.isiPad()) { - buildElement('volumeSliderRail', 'right', false, player); - buildElement('volumeSliderProgress', 'right', true, player); - buildElement('muteButton', 'right', false, player); - buildElement('unmuteButton', 'right', true, player); - buildElement('divider3', 'right', true, player); - } - buildElement('durationText', 'right', true, player); - } - - - /** Draw a single element into the jwplayerControlbar. **/ - function buildElement(element, align, offset, player) { - var nam = player.id + '_' + element; - $('#' + player.id + '_jwplayerControlbar').append('<div id="' + nam + '"></div>'); - $('#' + nam).css('position', 'absolute'); - $('#' + nam).css('top', '0px'); - if (element.indexOf('Text') > 0) { - $('#' + nam).html('00:00'); - $('#' + nam).css('font', controlbars[player.id].fontsize + 'px/' + (player.skin.controlbar.elements.background.height + 1) + 'px Arial,sans-serif'); - $('#' + nam).css('text-align', 'center'); - $('#' + nam).css('font-weight', 'bold'); - $('#' + nam).css('cursor', 'default'); - var wid = 14 + 3 * controlbars[player.id].fontsize; - $('#' + nam).css('color', '#' + controlbars[player.id].fontcolor.substr(-6)); - } else if (element.indexOf('divider') === 0) { - $('#' + nam).css('background', 'url(' + player.skin.controlbar.elements.divider.src + ') repeat-x center left'); - var wid = player.skin.controlbar.elements.divider.width; - } else { - $('#' + nam).css('background', 'url(' + player.skin.controlbar.elements[element].src + ') repeat-x center left'); - var wid = player.skin.controlbar.elements[element].width; - } - if (align == 'left') { - $('#' + nam).css(align, controlbars[player.id].leftmargin); - if (offset) { - controlbars[player.id].leftmargin += wid; - } - } else if (align == 'right') { - $('#' + nam).css(align, controlbars[player.id].rightmargin); - if (offset) { - controlbars[player.id].rightmargin += wid; - } - } - $('#' + nam).css('width', wid); - $('#' + nam).css('height', player.skin.controlbar.elements.background.height); - } - - - /** Add interactivity to the jwplayerControlbar elements. **/ - function buildHandlers(player) { - // Register events with the buttons. - buildHandler('playButton', 'play', player); - buildHandler('pauseButton', 'pause', player); - buildHandler('muteButton', 'mute', player, true); - buildHandler('unmuteButton', 'mute', player, false); - buildHandler('fullscreenButton', 'fullscreen', player, true); - buildHandler('normalscreenButton', 'fullscreen', player, false); - - addSliders(player); - - // Register events with the player. - player.buffer(bufferHandler); - player.state(stateHandler); - player.time(timeHandler); - player.mute(muteHandler); - player.volume(volumeHandler); - player.complete(completeHandler); - - // Trigger a few events so the bar looks good on startup. - resizeHandler({ - id: player.id, - fulscreen: player.fullscreen(), - width: player.width(), - height: player.height() - }); - timeHandler({ - id: player.id, - duration: player.duration(), - position: 0 - }); - bufferHandler({ - id: player.id, - bufferProgress: 0 - }); - muteHandler({ - id: player.id, - mute: player.mute() - }); - stateHandler({ - id: player.id, - newstate: $.fn.jwplayer.states.IDLE - }); - volumeHandler({ - id: player.id, - volume: player.volume() - }); - } - - - /** Set a single button handler. **/ - function buildHandler(element, handler, player, args) { - var nam = player.id + '_' + element; - $('#' + nam).css('cursor', 'pointer'); - if (handler == 'fullscreen') { - $('#' + nam).mouseup(function(evt) { - evt.stopPropagation(); - player.fullscreen(!player.fullscreen()); - resizeHandler({ - id: player.id, - fullscreen: player.fullscreen(), - width: player.width(), - height: player.height() - }); - }); - } else { - $('#' + nam).mouseup(function(evt) { - evt.stopPropagation(); - if (!$.fn.jwplayerUtils.isNull(args)) { - player[handler](args); - } else { - player[handler](); - } - - }); - } - } - - - /** Set the volume drag handler. **/ - function addSliders(player) { - var bar = '#' + player.id + '_jwplayerControlbar'; - var trl = '#' + player.id + '_timeSliderRail'; - var vrl = '#' + player.id + '_volumeSliderRail'; - $(bar).css('cursor', 'pointer'); - $(trl).css('cursor', 'pointer'); - $(vrl).css('cursor', 'pointer'); - $(bar).mousedown(function(evt) { - if (evt.pageX >= $(trl).offset().left - window.pageXOffset && evt.pageX <= $(trl).offset().left - window.pageXOffset + $(trl).width()) { - controlbars[player.id].scrubber = 'time'; - } else if (evt.pageX >= $(vrl).offset().left - window.pageXOffset && evt.pageX <= $(vrl).offset().left - window.pageXOffset + $(trl).width()) { - controlbars[player.id].scrubber = 'volume'; - } - }); - $(bar).mouseup(function(evt) { - evt.stopPropagation(); - sliderUp(evt.pageX, player); - }); - $(bar).mousemove(function(evt) { - if (controlbars[player.id].scrubber == 'time') { - controlbars[player.id].mousedown = true; - var xps = evt.pageX - $(bar).offset().left - window.pageXOffset; - $('#' + player.id + '_timeSliderThumb').css('left', xps); - } - }); - } - - - /** The slider has been moved up. **/ - function sliderUp(msx, player) { - controlbars[player.id].mousedown = false; - if (controlbars[player.id].scrubber == 'time') { - var xps = msx - $('#' + player.id + '_timeSliderRail').offset().left + window.pageXOffset; - var wid = $('#' + player.id + '_timeSliderRail').width(); - var pos = xps / wid * controlbars[player.id].currentDuration; - if (pos < 0) { - pos = 0; - } else if (pos > controlbars[player.id].currentDuration) { - pos = controlbars[player.id].currentDuration - 3; - } - player.seek(pos); - if (player.model.state != $.fn.jwplayer.states.PLAYING) { - player.play(); - } - } else if (controlbars[player.id].scrubber == 'volume') { - var xps = msx - $('#' + player.id + '_volumeSliderRail').offset().left - window.pageXOffset; - var wid = $('#' + player.id + '_volumeSliderRail').width(); - var pct = Math.round(xps / wid * 100); - if (pct < 0) { - pct = 0; - } else if (pct > 100) { - pct = 100; - } - if (player.model.mute) { - player.mute(false); - } - player.volume(pct); - } - controlbars[player.id].scrubber = 'none'; - } - - - /** Update the buffer percentage. **/ - function bufferHandler(event) { - if (!$.fn.jwplayerUtils.isNull(event.bufferPercent)) { - controlbars[event.id].currentBuffer = event.bufferPercent; - } - - var wid = $('#' + event.id + '_timeSliderRail').width(); - var bufferWidth = isNaN(Math.round(wid * controlbars[event.id].currentBuffer / 100)) ? 0 : Math.round(wid * controlbars[event.id].currentBuffer / 100); - $('#' + event.id + '_timeSliderBuffer').css('width', bufferWidth); - } - - - /** Update the mute state. **/ - function muteHandler(event) { - if (event.mute) { - $('#' + event.id + '_muteButton').css('display', 'none'); - $('#' + event.id + '_unmuteButton').css('display', 'block'); - $('#' + event.id + '_volumeSliderProgress').css('display', 'none'); - } else { - $('#' + event.id + '_muteButton').css('display', 'block'); - $('#' + event.id + '_unmuteButton').css('display', 'none'); - $('#' + event.id + '_volumeSliderProgress').css('display', 'block'); - } - } - - - /** Update the playback state. **/ - function stateHandler(event) { - // Handle the play / pause button - if (event.newstate == $.fn.jwplayer.states.BUFFERING || event.newstate == $.fn.jwplayer.states.PLAYING) { - $('#' + event.id + '_pauseButton').css('display', 'block'); - $('#' + event.id + '_playButton').css('display', 'none'); - } else { - $('#' + event.id + '_pauseButton').css('display', 'none'); - $('#' + event.id + '_playButton').css('display', 'block'); - } - - // Show / hide progress bar - if (event.newstate == $.fn.jwplayer.states.IDLE) { - $('#' + event.id + '_timeSliderBuffer').css('display', 'none'); - $('#' + event.id + '_timeSliderProgress').css('display', 'none'); - $('#' + event.id + '_timeSliderThumb').css('display', 'none'); - } else { - $('#' + event.id + '_timeSliderBuffer').css('display', 'block'); - if (event.newstate != $.fn.jwplayer.states.BUFFERING) { - $('#' + event.id + '_timeSliderProgress').css('display', 'block'); - $('#' + event.id + '_timeSliderThumb').css('display', 'block'); - } - } - } - - /** Handles event completion **/ - function completeHandler(event) { - timeHandler($.extend(event, { - position: 0, - duration: controlbars[event.id].currentDuration - })); - } - - - /** Update the playback time. **/ - function timeHandler(event) { - if (!$.fn.jwplayerUtils.isNull(event.position)) { - controlbars[event.id].currentPosition = event.position; - } - if (!$.fn.jwplayerUtils.isNull(event.duration)) { - controlbars[event.id].currentDuration = event.duration; - } - var progress = (controlbars[event.id].currentPosition === controlbars[event.id].currentDuration === 0) ? 0 : controlbars[event.id].currentPosition / controlbars[event.id].currentDuration; - var railWidth = $('#' + event.id + '_timeSliderRail').width(); - var thumbWidth = $('#' + event.id + '_timeSliderThumb').width(); - var railLeft = $('#' + event.id + '_timeSliderRail').position().left; - var progressWidth = isNaN(Math.round(railWidth * progress)) ? 0 : Math.round(railWidth * progress); - var thumbPosition = railLeft + progressWidth; - - $('#' + event.id + '_timeSliderProgress').css('width', progressWidth); - if (!controlbars[event.id].mousedown) { - $('#' + event.id + '_timeSliderThumb').css('left', thumbPosition); - } - - $('#' + event.id + '_durationText').html(timeFormat(controlbars[event.id].currentDuration)); - $('#' + event.id + '_elapsedText').html(timeFormat(controlbars[event.id].currentPosition)); - } - - - /** Format the elapsed / remaining text. **/ - function timeFormat(sec) { - str = '00:00'; - if (sec > 0) { - str = Math.floor(sec / 60) < 10 ? '0' + Math.floor(sec / 60) + ':' : Math.floor(sec / 60) + ':'; - str += Math.floor(sec % 60) < 10 ? '0' + Math.floor(sec % 60) : Math.floor(sec % 60); - } - return str; - } - - - /** Flip the player size to/from full-browser-screen. **/ - function resizeHandler(event) { - controlbars[event.id].width = event.width; - controlbars[event.id].fullscreen = event.fullscreen; - if (event.fullscreen) { - $('#' + event.id + '_normalscreenButton').css('display', 'block'); - $('#' + event.id + '_fullscreenButton').css('display', 'none'); - // TODO - if (false) { - $(window).resize(function() { - resizeBar(player); - }); - } - } else { - $('#' + event.id + '_normalscreenButton').css('display', 'none'); - $('#' + event.id + '_fullscreenButton').css('display', 'block'); - // TODO - if (false) { - $(window).resize(null); - } - } - resizeBar(event); - timeHandler(event); - bufferHandler(event); - } - - - /** Resize the jwplayerControlbar. **/ - function resizeBar(event) { - var lft = controlbars[event.id].left; - var top = controlbars[event.id].top; - var wid = controlbars[event.id].width; - var hei = $('#' + event.id + '_jwplayerControlbar').height(); - if (controlbars[event.id].position == 'over') { - lft += 1 * controlbars[event.id].margin; - top -= 1 * controlbars[event.id].margin + hei; - wid -= 2 * controlbars[event.id].margin; - } - if (controlbars[event.id].fullscreen) { - lft = controlbars[event.id].margin; - top = $(window).height() - controlbars[event.id].margin - hei; - wid = $(window).width() - 2 * controlbars[event.id].margin; - $('#' + event.id + '_jwplayerControlbar').css('z-index', 99); - } else { - $('#' + event.id + '_jwplayerControlbar').css('z-index', 97); - } - $('#' + event.id + '_jwplayerControlbar').css('left', lft); - $('#' + event.id + '_jwplayerControlbar').css('top', top); - $('#' + event.id + '_jwplayerControlbar').css('width', wid); - $('#' + event.id + '_timeSliderRail').css('width', (wid - controlbars[event.id].leftmargin - controlbars[event.id].rightmargin)); - } - - - /** Update the volume level. **/ - function volumeHandler(event) { - var progress = isNaN(event.volume / 100) ? 1 : event.volume / 100; - var railWidth = $('#' + event.id + '_volumeSliderRail').width(); - var railRight = parseInt($('#' + event.id + '_volumeSliderRail').css('right').toString().replace('px', ''), 10); - var progressWidth = isNaN(Math.round(railWidth * progress)) ? 0 : Math.round(railWidth * progress); - - $('#' + event.id + '_volumeSliderProgress').css('width', progressWidth); - $('#' + event.id + '_volumeSliderProgress').css('right', (railWidth + railRight - progressWidth)); - } - - -})(jQuery); -/** - * JW Player controller component - * - * @author zach - * @version 1.0alpha - * @lastmodifieddate 2010-04-11 - */ -(function($) { - - var mediaParams = function() { - return { - volume: 100, - fullscreen: false, - mute: false, - width: 480, - height: 320, - duration: 0, - source: 0, - sources: [], - buffer: 0, - position: 0, - state: $.fn.jwplayer.states.IDLE - }; - }; - - $.fn.jwplayerController = function(player) { - return { - play: play(player), - pause: pause(player), - seek: seek(player), - stop: stop(player), - volume: volume(player), - mute: mute(player), - resize: resize(player), - fullscreen: fullscreen(player), - load: load(player), - mediaInfo: mediaInfo(player), - addEventListener: addEventListener(player), - removeEventListener: removeEventListener(player), - sendEvent: sendEvent(player) - }; - }; - - - function play(player) { - return function() { - try { - switch (player.model.state) { - case $.fn.jwplayer.states.IDLE: - player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER_FULL, player.media.play); - player.media.load(player.model.sources[player.model.source].file); - break; - case $.fn.jwplayer.states.PAUSED: - player.media.play(); - break; - } - - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - /** Switch the pause state of the player. **/ - function pause(player) { - return function() { - try { - switch (player.model.state) { - case $.fn.jwplayer.states.PLAYING: - case $.fn.jwplayer.states.BUFFERING: - player.media.pause(); - break; - } - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - - /** Seek to a position in the video. **/ - function seek(player) { - return function(position) { - try { - switch (player.model.state) { - case $.fn.jwplayer.states.PLAYING: - case $.fn.jwplayer.states.PAUSED: - case $.fn.jwplayer.states.BUFFERING: - player.media.seek(position); - break; - } - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - - /** Stop playback and loading of the video. **/ - function stop(player) { - return function() { - try { - player.media.stop(); - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - - /** Get / set the video's volume level. **/ - function volume(player) { - return function(arg) { - try { - switch ($.fn.jwplayerUtils.typeOf(arg)) { - case "function": - player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_VOLUME, arg); - break; - case "number": - player.media.volume(arg); - return true; - case "string": - player.media.volume(parseInt(arg, 10)); - return true; - default: - return player.model.volume; - } - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - /** Get / set the mute state of the player. **/ - function mute(player) { - return function(arg) { - try { - switch ($.fn.jwplayerUtils.typeOf(arg)) { - case "function": - player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_MUTE, arg); - break; - case "boolean": - player.media.mute(arg); - break; - default: - return player.model.mute; - } - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - - /** Resizes the video **/ - function resize(player) { - return function(arg1, arg2) { - try { - switch ($.fn.jwplayerUtils.typeOf(arg1)) { - case "function": - player.addEventListener($.fn.jwplayer.events.JWPLAYER_RESIZE, arg1); - break; - case "number": - player.media.resize(arg1, arg2); - break; - case "string": - player.media.resize(arg1, arg2); - break; - default: - break; - } - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - - /** Jumping the player to/from fullscreen. **/ - function fullscreen(player) { - return function(arg) { - try { - switch ($.fn.jwplayerUtils.typeOf(arg)) { - case "function": - player.addEventListener($.fn.jwplayer.events.JWPLAYER_FULLSCREEN, arg); - break; - case "boolean": - player.media.fullscreen(arg); - break; - default: - return player.model.fullscreen; - } - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - /** Loads a new video **/ - function load(player) { - return function(arg) { - try { - switch ($.fn.jwplayerUtils.typeOf(arg)) { - case "function": - player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_LOADED, arg); - break; - default: - player.media.load(arg); - break; - } - return $.jwplayer(player.id); - } catch (err) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); - } - return false; - }; - } - - - /** Returns the meta **/ - function mediaInfo(player) { - return function() { - try { - var result = {}; - for (var mediaParam in mediaParams()) { - result[mediaParam] = player.model[mediaParam]; - } - return result; - } catch (err) { - $.fn.jwplayerUtils.log("error", err); - } - return false; - }; - } - - - /** Add an event listener. **/ - function addEventListener(player) { - return function(type, listener, count) { - try { - if (player.listeners[type] === undefined) { - player.listeners[type] = []; - } - player.listeners[type].push({ - listener: listener, - count: count - }); - } catch (err) { - $.fn.jwplayerUtils.log("error", err); - } - return false; - }; - } - - - /** Remove an event listener. **/ - function removeEventListener(player) { - return function(type, listener) { - try { - for (var lisenterIndex in player.listeners[type]) { - if (player.listeners[type][lisenterIndex] == listener) { - player.listeners[type].slice(lisenterIndex, lisenterIndex + 1); - break; - } - } - } catch (err) { - $.fn.jwplayerUtils.log("error", err); - } - return false; - }; - } - - /** Send an event **/ - function sendEvent(player) { - return function(type, data) { - data = $.extend({ - id: player.id, - version: player.version - }, data); - if ((player.config.debug !== undefined) && (player.config.debug.toString().toLowerCase() == 'console')) { - $.fn.jwplayerUtils.log(type, data); - } - for (var listenerIndex in player.listeners[type]) { - try { - player.listeners[type][listenerIndex].listener(data); - } catch (err) { - $.fn.jwplayerUtils.log("There was an error while handling a listener", err); - } - if (player.listeners[type][listenerIndex].count === 1) { - delete player.listeners[type][listenerIndex]; - } else if (player.listeners[type][listenerIndex].count > 0) { - player.listeners[type][listenerIndex].count = player.listeners[type][listenerIndex].count - 1; - } - } - }; - } - -})(jQuery); -/** - * Core component of the JW Player (initialization, API). - * - * @author jeroen - * @version 1.0alpha - * @lastmodifiedauthor zach - * @lastmodifieddate 2010-04-11 - */ -(function($) { - /** Map with all players on the page. **/ - var players = {}; - - /** Hooking the controlbar up to jQuery. **/ - $.fn.jwplayer = function(options) { - return this.each(function() { - $.fn.jwplayerUtils.log("Starting setup", this); - return setupJWPlayer($(this), 0, options); - }); - }; - - function setupJWPlayer(player, step, options) { - try { - switch (step) { - case 0: - var model = $.fn.jwplayerModel(player, options); - var jwplayer = { - model: model, - listeners: {} - }; - return setupJWPlayer(jwplayer, step + 1); - case 1: - player.controller = $.fn.jwplayerController(player); - players[player.model.config.id] = player; - setupJWPlayer($.extend(player, api(player)), step + 1); - return player; - case 2: - $.fn.jwplayerSkinner(player, function() { - setupJWPlayer(player, step + 1); - }); - break; - case 3: - $.fn.jwplayerView(player); - setupJWPlayer(player, step + 1); - break; - case 4: - $.fn.jwplayerModel.setActiveMediaProvider(player); - if ((player.media === undefined) || !player.media.hasChrome) { - setupJWPlayer(player, step + 1); - } - break; - case 5: - $.fn.jwplayerDisplay($.jwplayer(player.id), player.model.domelement); - if (player.media === undefined) { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_READY); - } else { - setupJWPlayer(player, step + 1); - } - break; - case 6: - if (!$.fn.jwplayerUtils.isiPhone()) { - $.fn.jwplayerControlbar($.jwplayer(player.id), player.model.domelement); - } - setupJWPlayer(player, step + 1); - break; - case 7: - player.sendEvent($.fn.jwplayer.events.JWPLAYER_READY); - setupJWPlayer(player, step + 1); - break; - default: - if (player.config.autostart === true) { - player.play(); - } - break; - } - } catch (err) { - $.fn.jwplayerUtils.log("Setup failed at step " + step, err); - } - } - - - /** Map with config for the controlbar plugin. **/ - $.fn.jwplayer.defaults = { - autostart: false, - file: undefined, - height: 295, - image: undefined, - skin: undefined, - volume: 90, - width: 480, - mute: false, - bufferlength: 5, - start: 0, - position: 0, - debug: undefined, - flashplayer: undefined, - repeat: false - }; - - - /** A factory for API calls that either set listeners or return data **/ - function dataListenerFactory(player, dataType, eventType) { - return function(arg) { - switch ($.fn.jwplayerUtils.typeOf(arg)) { - case "function": - if (!$.fn.jwplayerUtils.isNull(eventType)) { - player.addEventListener(eventType, arg); - } - break; - default: - if (!$.fn.jwplayerUtils.isNull(dataType)) { - return player.controller.mediaInfo()[dataType]; - } - return player.controller.mediaInfo(); - } - return $.jwplayer(player.id); - }; - } - - - function api(player) { - if (!$.fn.jwplayerUtils.isNull(player.id)) { - return player; - } - return { - play: player.controller.play, - pause: player.controller.pause, - stop: player.controller.stop, - seek: player.controller.seek, - - resize: player.controller.resize, - fullscreen: player.controller.fullscreen, - volume: player.controller.volume, - mute: player.controller.mute, - load: player.controller.load, - - addEventListener: player.controller.addEventListener, - removeEventListener: player.controller.removeEventListener, - sendEvent: player.controller.sendEvent, - - ready: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_READY), - error: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_ERROR), - complete: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_MEDIA_COMPLETE), - state: dataListenerFactory(player, 'state', $.fn.jwplayer.events.JWPLAYER_PLAYER_STATE), - buffer: dataListenerFactory(player, 'buffer', $.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER), - time: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_MEDIA_TIME), - position: dataListenerFactory(player, 'position'), - duration: dataListenerFactory(player, 'duration'), - width: dataListenerFactory(player, 'width'), - height: dataListenerFactory(player, 'height'), - meta: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_MEDIA_META), - - id: player.model.config.id, - config: player.model.config, - version: '0.1-alpha', - skin: player.skin - }; - } - - function jwplayer(selector) { - if ($.fn.jwplayerUtils.isNull(selector)) { - for (var player in players) { - return api(players[player]); - } - } else { - if (selector.indexOf('#') === 0) { - selector = selector.substr(1, selector.length); - } - return api(players[selector]); - } - return null; - } - - $.fn.jwplayer.states = { - IDLE: 'IDLE', - BUFFERING: 'BUFFERING', - PLAYING: 'PLAYING', - PAUSED: 'PAUSED' - }; - - $.fn.jwplayer.events = { - JWPLAYER_READY: 'jwplayerReady', - JWPLAYER_FULLSCREEN: 'jwplayerFullscreen', - JWPLAYER_RESIZE: 'jwplayerResize', - //JWPLAYER_LOCKED: 'jwplayerLocked', - //JWPLAYER_UNLOCKED: 'jwplayerLocked', - JWPLAYER_ERROR: 'jwplayerError', - JWPLAYER_MEDIA_BUFFER: 'jwplayerMediaBuffer', - JWPLAYER_MEDIA_BUFFER_FULL: 'jwplayerMediaBufferFull', - JWPLAYER_MEDIA_ERROR: 'jwplayerMediaError', - JWPLAYER_MEDIA_LOADED: 'jwplayerMediaLoaded', - JWPLAYER_MEDIA_COMPLETE: 'jwplayerMediaComplete', - JWPLAYER_MEDIA_TIME: 'jwplayerMediaTime', - JWPLAYER_MEDIA_VOLUME: 'jwplayerMediaVolume', - JWPLAYER_MEDIA_META: 'jwplayerMediaMeta', - JWPLAYER_MEDIA_MUTE: 'jwplayerMediaMute', - JWPLAYER_PLAYER_STATE: 'jwplayerPlayerState' - }; - - /** Extending jQuery **/ - $.extend({ - 'jwplayer': jwplayer - }); - - /** Automatically initializes the player for all <video> tags with the JWPlayer class. **/ - $(document).ready(function() { - $("video.jwplayer").jwplayer(); - }); - -})(jQuery); -/** - * JW Player Defaul - * - * @author jeroen - * @version 1.0alpha - * @lastmodifiedauthor zach - * @lastmodifieddate 2010-04-11 - */ -(function($) { - - /** Constructor **/ - $.fn.jwplayerDefaultSkin = '<?xml version="1.0" ?><skin author="LongTail Video" name="Five" version="1.0"><settings><setting name="backcolor" value="0xFFFFFF"/><setting name="frontcolor" value="0x000000"/><setting name="lightcolor" value="0x000000"/><setting name="screencolor" value="0x000000"/></settings><components><component name="controlbar"><settings><setting name="margin" value="20"/><setting name="fontsize" value="11"/></settings><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFJJREFUeNrslLENwAAIwxLU/09j5AiOgD5hVQzNAVY8JK4qEfHMIKBnd2+BQlBINaiRtL/aV2rdzYBsM6CIONbI1NZENTr3RwdB2PlnJgJ6BRgA4hwu5Qg5iswAAAAASUVORK5CYII="/><element name="capLeft" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="capRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="divider" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="playButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEhJREFUeNpiYqABYBo1dNRQ+hr6H4jvA3E8NS39j4SpZvh/LJig4YxEGEqy3kET+w+AOGFQRhTJhrEQkGcczfujhg4CQwECDADpTRWU/B3wHQAAAABJRU5ErkJggg=="/><element name="pauseButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiYBgFo2DwA0YC8v/R1P4nRu+ooaOGUtnQUTAKhgIACDAAFCwQCfAJ4gwAAAAASUVORK5CYII="/><element name="prevButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtJREFUeNpiYBgFo2Dog/9QDAPyQHweTYwiQ/2B+D0Wi8g2tB+JTdBQRiIMJVkvEy0iglhDF9Aq9uOpHVEwoE+NJDUKRsFgAAABBgDe2hqZcNNL0AAAAABJRU5ErkJggg=="/><element name="nextButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUeNpiYBgFo2Dog/9AfB6I5dHE/lNqKAi/B2J/ahsKw/3EGMpIhKEk66WJoaR6fz61IyqemhEFSlL61ExSo2AUDAYAEGAAiG4hj+5t7M8AAAAASUVORK5CYII="/><element name="timeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpiYBgFo2AU0Bwwzluw+D8tLWARFhKiqQ9YuLg4aWsBGxs7bS1gZ6e5BWyjSX0UjIKhDgACDABlYQOGh5pYywAAAABJRU5ErkJggg=="/><element name="timeSliderBuffer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFo2AU0Bww1jc0/aelBSz8/Pw09QELOzs7bS1gY2OjrQWsrKy09gHraFIfBaNgqAOAAAMAvy0DChXHsZMAAAAASUVORK5CYII="/><element name="timeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpiYBgFo2AU0BwwAvF/WlrARGsfjFow8BaMglEwCugAAAIMAOHfAQunR+XzAAAAAElFTkSuQmCC"/><element name="timeSliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAYAAAA870V8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUeNpiZICA/yCCiQEJUJcDEGAAY0gBD1/m7Q0AAAAASUVORK5CYII="/><element name="muteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiYBgFIw3MB+L/5Gj8j6yRiRTFyICJXHfTXyMLAXlGati4YDRFDj8AEGAABk8GSqqS4CoAAAAASUVORK5CYII="/><element name="unmuteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFgxz8p7bm+cQa+h8LHy7GhEcjIz4bmAjYykiun/8j0fakGPIfTfPgiSr6aB4FVAcAAQYAWdwR1G1Wd2gAAAAASUVORK5CYII="/><element name="volumeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGpJREFUeNpi/P//PwM9ABMDncCoRYPfIqqDZcuW1UPp/6AUDcNM1DQYKtRAlaAj1mCSLSLXYIIWUctgDItoZfDA5aOoqKhGEANIM9LVR7SymGDQUctikuOIXkFNdhHEOFrDjlpEd4sAAgwAriRMub95fu8AAAAASUVORK5CYII="/><element name="volumeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi/P//PwM9ABMDncCoRYPfIlqAeij9H5SiYZiqBqPTlFqE02BKLSLaYFItIttgQhZRzWB8FjENiuRJ7aAbsMQwYMl7wDIsWUUQ42gNO2oR3S0CCDAAKhKq6MLLn8oAAAAASUVORK5CYII="/><element name="fullscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE5JREFUeNpiYBgFo2DQA0YC8v/xqP1PjDlMRDrEgUgxkgHIlfZoriVGjmzLsLFHAW2D6D8eA/9Tw7L/BAwgJE90PvhPpNgoGAVDEQAEGAAMdhTyXcPKcAAAAABJRU5ErkJggg=="/><element name="normalscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNpiYBgFo2DIg/9UUkOUAf8JiFFsyX88fJyAkcQgYMQjNkzBoAgiezyRbE+tFGSPxQJ7auYBmma0UTAKBhgABBgAJAEY6zON61sAAAAASUVORK5CYII="/></elements></component><component name="display"><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC"/><element name="playIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg=="/><element name="muteIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNrs1jEOgCAMBVAg7t5/8qaoIy4uoobyXsLCxA+0NCUAAADGUWvdQoQ41x4ixNBB2hBvBskdD3w5ZCkl3+33VqI0kjBBlh9rp+uTcyOP33TnolfsU85XX3yIRpQph8ZQY3wTZtU5AACASA4BBgDHoVuY1/fvOQAAAABJRU5ErkJggg=="/><element name="errorIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWlJREFUeNrsl+1twjAQhsHq/7BBYQLYIBmBDcoGMAIjtBPQTcII2SDtBDBBwrU6pGsUO7YbO470PtKJkz9iH++d4ywWAAAAAABgljRNsyWr2bZzDuJG1rLdZhcMbTjrBCGDyUKsqQLFciJb9bSvuG/WagRVRUVUI6gqy5HVeKWfSgRyJruKIU//TrZTSn2nmlaXThrloi/v9F2STC1W4+Aw5cBzkquRc09bofFNc6YLxEON0VUZS5FPTftO49vMjRsIF3RhOGr7/D/pJw+FKU+q0vDyq8W42jCunDqI3LC5XxNj2wHLU1XjaRnb0Lhykhqhhd8MtSF5J9tbjCv4mXGvKJz/65FF/qJryyaaIvzP2QRxZTX2nTuXjvV/VPFSwyLnW7mpH99yTh1FEVro6JBSd40/pMrRdV8vPtcKl28T2pT8TnFZ4yNosct3Q0io6JfBiz1FlGdqVQH3VHnepAEAAAAAADDzEGAAcTwB10jWgxcAAAAASUVORK5CYII="/><element name="bufferIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuhJREFUeNrsWr9rU1EUznuNGqvFQh1ULOhiBx0KDtIuioO4pJuik3FxFfUPaAV1FTdx0Q5d2g4FFxehTnEpZHFoBy20tCIWtGq0TZP4HfkeHB5N8m6Sl/sa74XDybvv3vvOd8/Pe4lXrVZT3dD8VJc0B8QBcUAcEAfESktHGeR5XtMfqFQq/f92zPe/NbtGlKTdCY30kuxrpMGO94BlQCXs+rbh3ONgA6BlzP1p20d80gEI5hmA2A92Qua1Q2PtAFISM+bvjMG8U+Q7oA3rQGASwrYCU6WpNdLGYbA+Pq5jjXIiwi8EEa2UDbQSaKOIuV+SlkcCrfjY8XTI9EpKGwP0C2kru2hLtHqa4zoXtZRWyvi4CLwv9Opr6Hkn6A9HKgEANsQ1iqC3Ub/vRUk2JgmRkatK36kVrnt0qObunwUdUUMXMWYpakJsO5Am8tAw2GBIgwWA+G2S2dMpiw0gDioQRQJoKhRb1QiDwlHZUABYbaXWsm5ae6loTE4ZDxN4CZar8foVzOJ2iyZ2kWF3t7YIevffaMT5yJ70kQb2fQ1sE5SHr2wazs2wgMxgbsEKEAgxAvZUJbQLBGTSBMgNrncJbA6AljtS/eKDJ0Ez+DmrQEzXS2h1Ck25kAg0IZcUOaydCy4sYnN2fOA+2AP16gNoHALlQ+fwH7XO4CxLenUpgj4xr6ugY2roPMbMx+Xs18m/E8CVEIhxsNeg83XWOAN6grG3lGbk8uE5fr4B/WH3cJw+co/l9nTYsSGYCJ/lY5/qv0thn6nrIWmjeJcPSnWOeY++AkF8tpJHIMAUs/MaBBpj3znZfQo5psY+ZrG4gv5HickjEOymKjEeRpgyST6IuZcTcWbnjcgdPi5ghxciRKsl1lDSsgwA1i8fssonJgzmTSqfGUkCENndNdAL7PS6QQ7ZYISTo+1qq0LEWjTWcvY4isa4z+yfQB+7ooyHVg5RI7/i1Ijn/vnggDggDogD4oC00P4KMACd/juEHOrS4AAAAABJRU5ErkJggg=="/></elements></component><component name="dock"><elements><element name="button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUeNrs0cEJACAQA8Eofu0fu/W6EM5ZSAFDRpKTBs00CQQEBAQEBAQEBAQEBAQEBATkK8iqbY+AgICAgICAgICAgICAgICAgIC86QowAG5PAQzEJ0lKAAAAAElFTkSuQmCC"/></elements></component><component name="playlist"><elements><element name="item" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAIAAAC1nk4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNrs2NEJwCAMBcBYuv/CFuIE9VN47WWCR7iocXR3pdWdGPqqwIoMjYfQeAiNh9B4JHc6MHQVHnjggQceeOCBBx77TifyeOY0iHi8DqIdEY8dD5cL094eePzINB5CO/LwcOTptNB4CP25L4TIbZzpU7UEGAA5wz1uF5rF9AAAAABJRU5ErkJggg=="/><element name="sliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNrsy6ENACAMAMHClp2wYxZLAg5Fcu9e3OjuOKqqfTMzbs14CIZhGIZhGIZhGP4VLwEGAK/BBnVFpB0oAAAAAElFTkSuQmCC"/><element name="sliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNrsy7ENACAMBLE8++8caFFKKiRffU53112SGs3ttOohGIZhGIZhGIZh+Fe8BRgAiaUGde6NOSEAAAAASUVORK5CYII="/></elements></component></components></skin>'; - -})(jQuery); -/** - * JW Player view component - * - * @author zach - * @version 1.0alpha - * @lastmodifieddate 2010-04-11 - */ -(function($) { - var logoDefaults = { - prefix: "http://l.longtailvideo.com/html5/0/", - file: "logo.png", - link: "http://www.longtailvideo.com/players/jw-flv-player/", - margin: 8, - out: 0.5, - over: 1, - timeout: 3, - hide: "true", - position: "bottom-left", - width: 93, - height: 30 - }; - - var displays = {}; - - $.fn.jwplayerDisplay = function(player, domelement) { - if (displays[player.id] === undefined) { - displays[player.id] = {}; - displays[player.id].domelement = domelement; - displays[player.id].elements = initializeDisplayElements(player); - if ($.fn.jwplayerUtils.isiPhone()) { - domelement.attr('poster', $.fn.jwplayerUtils.getAbsolutePath(player.config.image)); - } else { - setupDisplay(player); - player.state(stateHandler); - player.mute(stateHandler); - player.error(function(obj) { - - }); - } - } - }; - - function setupDisplay(player) { - var meta = player.meta(); - var html = []; - html.push("<div id='" + player.id + "_display'" + getStyle(player, 'display') + ">"); - html.push("<div id='" + player.id + "_displayImage'" + getStyle(player, 'displayImage') + "> </div>"); - html.push("<div id='" + player.id + "_displayIconBackground'" + getStyle(player, 'displayIconBackground') + ">"); - html.push("<img id='" + player.id + "_displayIcon' src='" + player.skin.display.elements.playIcon.src + "' alt='Click to play video'" + getStyle(player, 'displayIcon') + "/>"); - html.push('</div>'); - html.push('<div id="' + player.id + '_logo" target="_blank"' + getStyle(player, 'logo') + '> </div>'); - html.push('</div>'); - displays[player.id].domelement.before(html.join('')); - setupDisplayElements(player); - } - - function getStyle(player, element) { - var result = ''; - for (var style in displays[player.id].elements[element].style) { - result += style + ":" + displays[player.id].elements[element].style[style] + ";"; - } - if (result === '') { - return ' '; - } - return ' style="' + result + '" '; - } - - function setupDisplayElements(player) { - var displayElements = initializeDisplayElements(player); - for (var element in displayElements) { - var elementId = ['#', player.id, '_', element]; - displays[player.id][element] = $(elementId.join('')); - if (displayElements[element].click !== undefined) { - displays[player.id][element].click(displayElements[element].click); - } - } - } - - function initializeDisplayElements(player) { - var meta = player.meta(); - var elements = { - display: { - style: { - cursor: 'pointer', - width: meta.width + "px", - height: meta.height + "px", - position: 'relative', - 'z-index': 50, - margin: 0, - padding: 0 - }, - click: displayClickHandler(player) - }, - displayIcon: { - style: { - cursor: 'pointer', - position: 'absolute', - top: ((player.skin.display.elements.background.height - player.skin.display.elements.playIcon.height) / 2) + "px", - left: ((player.skin.display.elements.background.width - player.skin.display.elements.playIcon.width) / 2) + "px", - border: 0, - margin: 0, - padding: 0 - } - }, - displayIconBackground: { - style: { - cursor: 'pointer', - position: 'absolute', - top: ((meta.height - player.skin.display.elements.background.height) / 2) + "px", - left: ((meta.width - player.skin.display.elements.background.width) / 2) + "px", - border: 0, - 'background-image': (['url(', player.skin.display.elements.background.src, ')']).join(''), - width: player.skin.display.elements.background.width + "px", - height: player.skin.display.elements.background.height + "px", - margin: 0, - padding: 0 - } - }, - displayImage: { - style: { - display: 'block', - background: ([player.config.screencolor, ' url(', $.fn.jwplayerUtils.getAbsolutePath(player.config.image), ') no-repeat center center']).join(''), - width: meta.width + "px", - height: meta.height + "px", - position: 'absolute', - cursor: 'pointer', - left: 0, - top: 0, - margin: 0, - padding: 0, - 'text-decoration': 'none' - } - }, - logo: { - style: { - position: 'absolute', - width: logoDefaults.width + "px", - height: logoDefaults.height + "px", - 'background-image': (['url(', logoDefaults.prefix, logoDefaults.file, ')']).join(''), - margin: 0, - padding: 0, - display: 'none', - 'text-decoration': 'none' - }, - click: logoClickHandler() - } - }; - var positions = logoDefaults.position.split("-"); - for (var position in positions) { - elements.logo.style[positions[position]] = logoDefaults.margin + "px"; - } - return elements; - } - - function displayClickHandler(player) { - return function(evt) { - if (player.media === undefined) { - document.location.href = $.fn.jwplayerUtils.getAbsolutePath(player.meta().sources[player.meta().source].file); - return; - } - if (typeof evt.preventDefault != 'undefined') { - evt.preventDefault(); // W3C - } else { - evt.returnValue = false; // IE - } - if (player.model.state != $.fn.jwplayer.states.PLAYING) { - player.play(); - } else { - player.pause(); - } - }; - } - - function logoClickHandler() { - return function(evt) { - evt.stopPropagation(); - return; - }; - } - - function setIcon(player, path) { - $("#" + player.id + "_displayIcon")[0].src = path; - } - - function animate(element, state) { - var speed = 'slow'; - if (!displays[player.id].animate) { - return; - } - if (state) { - element.slideDown(speed, function() { - animate(element); - }); - } else { - element.slideUp(speed, function() { - animate(element, true); - }); - } - } - - - function stateHandler(obj) { - player = $.jwplayer(obj.id); - displays[player.id].animate = false; - switch (player.model.state) { - case $.fn.jwplayer.states.BUFFERING: - displays[obj.id].logo.fadeIn(0, function() { - setTimeout(function() { - displays[obj.id].logo.fadeOut(logoDefaults.out * 1000); - }, logoDefaults.timeout * 1000); - }); - displays[obj.id].displayIcon[0].src = player.skin.display.elements.bufferIcon.src; - displays[obj.id].displayIcon.css({ - "display": "block", - top: (player.skin.display.elements.background.height - player.skin.display.elements.bufferIcon.height) / 2 + "px", - left: (player.skin.display.elements.background.width - player.skin.display.elements.bufferIcon.width) / 2 + "px" - }); - displays[player.id].animate = true; - // TODO: Buffer Icon rotation - if (false) { - animate(displays[obj.id].displayIconBackground); - } - displays[obj.id].displayIconBackground.css('display', 'none'); - break; - case $.fn.jwplayer.states.PAUSED: - displays[obj.id].logo.fadeIn(0); - displays[obj.id].displayImage.css("background", "transparent no-repeat center center"); - displays[obj.id].displayIconBackground.css("display", "block"); - displays[obj.id].displayIcon[0].src = player.skin.display.elements.playIcon.src; - displays[obj.id].displayIcon.css({ - "display": "block", - top: (player.skin.display.elements.background.height - player.skin.display.elements.playIcon.height) / 2 + "px", - left: (player.skin.display.elements.background.width - player.skin.display.elements.playIcon.width) / 2 + "px" - }); - break; - case $.fn.jwplayer.states.IDLE: - displays[obj.id].logo.fadeOut(0); - displays[obj.id].displayImage.css("background", "#ffffff url('" + $.fn.jwplayerUtils.getAbsolutePath(player.config.image) + "') no-repeat center center"); - displays[obj.id].displayIconBackground.css("display", "block"); - displays[obj.id].displayIcon[0].src = player.skin.display.elements.playIcon.src; - displays[obj.id].displayIcon.css({ - "display": "block", - top: (player.skin.display.elements.background.height - player.skin.display.elements.playIcon.height) / 2 + "px", - left: (player.skin.display.elements.background.width - player.skin.display.elements.playIcon.width) / 2 + "px" - }); - break; - default: - if (player.mute()) { - displays[obj.id].displayImage.css("background", "transparent no-repeat center center"); - displays[obj.id].displayIconBackground.css("display", "block"); - displays[obj.id].displayIcon[0].src = player.skin.display.elements.muteIcon.src; - displays[obj.id].displayIcon.css({ - "display": "block", - top: (player.skin.display.elements.muteIcon.height - player.skin.display.elements.muteIcon.height) / 2 + "px", - left: (player.skin.display.elements.background.width - player.skin.display.elements.muteIcon.width) / 2 + "px" - }); - } else { - try { - displays[obj.id].logo.clearQueue(); - } catch (err) { - - } - displays[obj.id].logo.fadeIn(0, function() { - setTimeout(function() { - displays[obj.id].logo.fadeOut(logoDefaults.out * 1000); - }, logoDefaults.timeout * 1000); - }); - displays[obj.id].displayImage.css("background", "transparent no-repeat center center"); - displays[obj.id].displayIconBackground.css("display", "none"); - displays[obj.id].displayIcon.css("display", "none"); - } - break; - } - } - -})(jQuery); -/** - * JW Player Flash Media component - * - * @author zach - * @version 1.0alpha - * @lastmodifieddate 2010-04-12 - */ -(function($) { - - var controllerEvents = { - ERROR: $.fn.jwplayer.events.JWPLAYER_ERROR, - ITEM: "ITEM", - MUTE: $.fn.jwplayer.events.JWPLAYER_MEDIA_MUTE, - PLAY: "PLAY", - PLAYLIST: "PLAYLIST", - RESIZE: $.fn.jwplayer.events.JWPLAYER_RESIZE, - SEEK: "SEEK", - STOP: "STOP", - VOLUME: $.fn.jwplayer.events.JWPLAYER_MEDIA_VOLUME - }; - - var modelEvents = { - BUFFER: $.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER, - ERROR: $.fn.jwplayer.events.JWPLAYER_MEDIA_ERROR, - LOADED: $.fn.jwplayer.events.JWPLAYER_MEDIA_LOADED, - META: $.fn.jwplayer.events.JWPLAYER_MEDIA_META, - STATE: $.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, - TIME: $.fn.jwplayer.events.JWPLAYER_MEDIA_TIME - }; - - var viewEvents = { - FULLSCREEN: "FULLSCREEN", - ITEM: "ITEM", - LINK: "LINK", - LOAD: "LOAD", - MUTE: "MUTE", - NEXT: "NEXT", - PLAY: "PLAY", - PREV: "PREV", - REDRAW: "REDRAW", - SEEK: "SEEK", - STOP: "STOP", - TRACE: "TRACE", - VOLUME: "VOLUME" - }; - - - $.fn.jwplayerMediaFlash = function(player) { - var options = {}; - var media = { - play: play(player), - pause: pause(player), - seek: seek(player), - volume: volume(player), - mute: mute(player), - fullscreen: fullscreen(player), - load: load(player), - resize: resize(player), - state: $.fn.jwplayer.states.IDLE, - hasChrome: true - - }; - player.media = media; - $.fn.jwplayerView.embedFlash(player, options); - }; - - function stateHandler(event, player) { - player.model.state = event.newstate; - player.sendEvent($.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, { - oldstate: event.oldstate, - newstate: event.newstate - }); - } - - - function addEventListeners(player) { - if (player.model.domelement[0].addControllerListener === undefined) { - setTimeout(function() { - addEventListeners(player); - }, 100); - return; - } - $.fn.jwplayerMediaFlash.forwarders[player.id] = {}; - var video = $("#" + player.id); - for (var controllerEvent in controllerEvents) { - $.fn.jwplayerMediaFlash.forwarders[player.id][controllerEvents[controllerEvent]] = forwardFactory(controllerEvents[controllerEvent], player); - video[0].addControllerListener(controllerEvent, "$.fn.jwplayerMediaFlash.forwarders." + player.id + "." + controllerEvents[controllerEvent]); - } - for (var modelEvent in modelEvents) { - $.fn.jwplayerMediaFlash.forwarders[player.id][modelEvents[modelEvent]] = forwardFactory(modelEvents[modelEvent], player); - video[0].addModelListener(modelEvent, "$.fn.jwplayerMediaFlash.forwarders." + player.id + "." + modelEvents[modelEvent]); - } - $.fn.jwplayerMediaFlash.forwarders[player.id][viewEvents.MUTE] = forwardFactory(viewEvents.MUTE, player); - video[0].addViewListener(viewEvents.MUTE, "$.fn.jwplayerMediaFlash.forwarders." + player.id + "." + viewEvents.MUTE); - - } - - function forwardFactory(type, player) { - return function(event) { - forward(event, type, player); - }; - } - - $.fn.jwplayerMediaFlash.playerReady = function(evt) { - addEventListeners($.jwplayer(evt.id)); - }; - - $.fn.jwplayerMediaFlash.forwarders = {}; - - function forward(event, type, player) { - switch (type) { - case $.fn.jwplayer.events.JWPLAYER_MEDIA_META: - player.sendEvent(type, event); - break; - case $.fn.jwplayer.events.JWPLAYER_MEDIA_MUTE: - player.model.mute = event.state; - event.mute = event.state; - player.sendEvent(type, event); - break; - case $.fn.jwplayer.events.JWPLAYER_MEDIA_VOLUME: - player.model.volume = event.percentage; - event.volume = event.percentage; - player.sendEvent(type, event); - break; - case $.fn.jwplayer.events.JWPLAYER_MEDIA_RESIZE: - player.model.fullscreen = event.fullscreen; - player.model.height = event.height; - player.model.width = event.width; - player.sendEvent(type, event); - break; - case $.fn.jwplayer.events.JWPLAYER_MEDIA_TIME: - if (player.model.duration === 0) { - player.model.duration = event.duration; - } - player.model.position = event.position; - player.sendEvent(type, event); - break; - case $.fn.jwplayer.events.JWPLAYER_PLAYER_STATE: - if (event.newstate == "COMPLETED") { - player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_COMPLETE, event); - } else { - stateHandler(event, player); - } - break; - case $.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER: - event.bufferPercent = event.percentage; - player.model.buffer = event.percentage; - player.sendEvent(type, event); - break; - default: - player.sendEvent(type, event); - break; - } - } - - function play(player) { - return function() { - player.model.domelement[0].sendEvent("PLAY", true); - }; - } - - /** Switch the pause state of the player. **/ - function pause(player) { - return function() { - player.model.domelement[0].sendEvent("PLAY", false); - }; - } - - - /** Seek to a position in the video. **/ - function seek(player) { - return function(position) { - player.model.domelement[0].sendEvent("SEEK", position); - }; - } - - - /** Stop playback and loading of the video. **/ - function stop(player) { - return function() { - player.model.domelement[0].sendEvent("STOP"); - }; - } - - - /** Change the video's volume level. **/ - function volume(player) { - return function(position) { - player.model.domelement[0].sendEvent("VOLUME", position); - }; - } - - /** Switch the mute state of the player. **/ - function mute(player) { - return function(state) { - if (((player.model.domelement[0].getConfig().mute === true) && (state === false)) || state) { - player.model.domelement[0].sendEvent("MUTE", state); - } - }; - } - - /** Switch the fullscreen state of the player. **/ - function fullscreen(player) { - return function(state) { - player.model.fullscreen = state; - $.fn.jwplayerUtils.log("Fullscreen does not work for Flash media."); - }; - } - - /** Load a new video into the player. **/ - function load(player) { - return function(path) { - path = $.fn.jwplayerUtils.getAbsolutePath(path); - player.model.domelement[0].sendEvent("LOAD", path); - player.model.domelement[0].sendEvent("PLAY"); - }; - } - - /** Resizes the video **/ - function resize(player) { - return function(width, height) { - player.model.width = width; - player.model.height = height; - player.css("width", width); - player.css("height", height); - player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_RESIZE, { - width: width, - hieght: height - }); - }; - } - -})(jQuery); -/** - * JW Player Video Media component - * - * @author zach - * @version 1.0alpha - * @lastmodifieddate 2010-04-12 - */ -(function($) { - var states = { - "ended": $.fn.jwplayer.states.IDLE, - "playing": $.fn.jwplayer.states.PLAYING, - "pause": $.fn.jwplayer.states.PAUSED, - "buffering": $.fn.jwplayer.states.BUFFERING - }; - - var events = { - 'abort': generalHandler, - 'canplay': stateHandler, - 'canplaythrough': stateHandler, - 'du... [truncated message content] |