2013-04-04 09:26:00 +00:00
( function ( ) { function log ( args ) { console . log ( "$f.fireEvent" , [ ] . slice . call ( args ) ) ; }
function clone ( obj ) { if ( ! obj || typeof obj != 'object' ) { return obj ; }
var temp = new obj . constructor ( ) ; for ( var key in obj ) { if ( obj . hasOwnProperty ( key ) ) { temp [ key ] = clone ( obj [ key ] ) ; } }
return temp ; }
function each ( obj , fn ) { if ( ! obj ) { return ; }
var name , i = 0 , length = obj . length ; if ( length === undefined ) { for ( name in obj ) { if ( fn . call ( obj [ name ] , name , obj [ name ] ) === false ) { break ; } } } else { for ( var value = obj [ 0 ] ; i < length && fn . call ( value , i , value ) !== false ; value = obj [ ++ i ] ) { } }
return obj ; }
function el ( id ) { return document . getElementById ( id ) ; }
function extend ( to , from , skipFuncs ) { if ( typeof from != 'object' ) { return to ; }
if ( to && from ) { each ( from , function ( name , value ) { if ( ! skipFuncs || typeof value != 'function' ) { to [ name ] = value ; } } ) ; }
return to ; }
2013-04-04 09:26:02 +00:00
function select ( query ) { var index = query . indexOf ( "." ) ; if ( index != - 1 ) { var tag = query . slice ( 0 , index ) || "*" ; var klass = query . slice ( index + 1 , query . length ) ; var els = [ ] ; each ( document . getElementsByTagName ( tag ) , function ( ) { if ( this . className && this . className . indexOf ( klass ) != - 1 ) { els . push ( this ) ; } } ) ; return els ; } }
2013-04-04 09:26:00 +00:00
function stopEvent ( e ) { e = e || window . event ; if ( e . preventDefault ) { e . stopPropagation ( ) ; e . preventDefault ( ) ; } else { e . returnValue = false ; e . cancelBubble = true ; }
return false ; }
function bind ( to , evt , fn ) { to [ evt ] = to [ evt ] || [ ] ; to [ evt ] . push ( fn ) ; }
2013-04-04 09:26:02 +00:00
function makeId ( ) { return "_" + ( "" + Math . random ( ) ) . slice ( 2 , 10 ) ; }
var Clip = function ( json , index , player ) { var self = this , cuepoints = { } , listeners = { } ; self . index = index ; if ( typeof json == 'string' ) { json = { url : json } ; }
extend ( this , json , true ) ; each ( ( "Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop" ) . split ( "," ) , function ( ) { var evt = "on" + this ; if ( evt . indexOf ( "*" ) != - 1 ) { evt = evt . slice ( 0 , evt . length - 1 ) ; var before = "onBefore" + evt . slice ( 2 ) ; self [ before ] = function ( fn ) { bind ( listeners , before , fn ) ; return self ; } ; }
2013-04-04 09:26:00 +00:00
self [ evt ] = function ( fn ) { bind ( listeners , evt , fn ) ; return self ; } ; if ( index == - 1 ) { if ( self [ before ] ) { player [ before ] = self [ before ] ; }
if ( self [ evt ] ) { player [ evt ] = self [ evt ] ; } } } ) ; extend ( this , { onCuepoint : function ( points , fn ) { if ( arguments . length == 1 ) { cuepoints . embedded = [ null , points ] ; return self ; }
if ( typeof points == 'number' ) { points = [ points ] ; }
var fnId = makeId ( ) ; cuepoints [ fnId ] = [ points , fn ] ; if ( player . isLoaded ( ) ) { player . _api ( ) . fp _addCuepoints ( points , index , fnId ) ; }
return self ; } , update : function ( json ) { extend ( self , json ) ; if ( player . isLoaded ( ) ) { player . _api ( ) . fp _updateClip ( json , index ) ; }
var conf = player . getConfig ( ) ; var clip = ( index == - 1 ) ? conf . clip : conf . playlist [ index ] ; extend ( clip , json , true ) ; } , _fireEvent : function ( evt , arg1 , arg2 , target ) { if ( evt == 'onLoad' ) { each ( cuepoints , function ( key , val ) { if ( val [ 0 ] ) { player . _api ( ) . fp _addCuepoints ( val [ 0 ] , index , key ) ; } } ) ; return false ; }
target = target || self ; if ( evt == 'onCuepoint' ) { var fn = cuepoints [ arg1 ] ; if ( fn ) { return fn [ 1 ] . call ( player , target , arg2 ) ; } }
if ( arg1 && "onBeforeBegin,onMetaData,onStart,onUpdate,onResume" . indexOf ( evt ) != - 1 ) { extend ( target , arg1 ) ; if ( arg1 . metaData ) { if ( ! target . duration ) { target . duration = arg1 . metaData . duration ; } else { target . fullDuration = arg1 . metaData . duration ; } } }
var ret = true ; each ( listeners [ evt ] , function ( ) { ret = this . call ( player , target , arg1 , arg2 ) ; } ) ; return ret ; } } ) ; if ( json . onCuepoint ) { var arg = json . onCuepoint ; self . onCuepoint . apply ( self , typeof arg == 'function' ? [ arg ] : arg ) ; delete json . onCuepoint ; }
2013-04-04 09:26:02 +00:00
each ( json , function ( key , val ) { if ( typeof val == 'function' ) { bind ( listeners , key , val ) ; delete json [ key ] ; } } ) ; if ( index == - 1 ) { player . onCuepoint = this . onCuepoint ; } } ; var Plugin = function ( name , json , player , fn ) { var self = this , listeners = { } , hasMethods = false ; if ( fn ) { extend ( listeners , fn ) ; }
2013-04-04 09:26:00 +00:00
each ( json , function ( key , val ) { if ( typeof val == 'function' ) { listeners [ key ] = val ; delete json [ key ] ; } } ) ; extend ( this , { animate : function ( props , speed , fn ) { if ( ! props ) { return self ; }
if ( typeof speed == 'function' ) { fn = speed ; speed = 500 ; }
if ( typeof props == 'string' ) { var key = props ; props = { } ; props [ key ] = speed ; speed = 500 ; }
if ( fn ) { var fnId = makeId ( ) ; listeners [ fnId ] = fn ; }
if ( speed === undefined ) { speed = 500 ; }
json = player . _api ( ) . fp _animate ( name , props , speed , fnId ) ; return self ; } , css : function ( props , val ) { if ( val !== undefined ) { var css = { } ; css [ props ] = val ; props = css ; }
json = player . _api ( ) . fp _css ( name , props ) ; extend ( self , json ) ; return self ; } , show : function ( ) { this . display = 'block' ; player . _api ( ) . fp _showPlugin ( name ) ; return self ; } , hide : function ( ) { this . display = 'none' ; player . _api ( ) . fp _hidePlugin ( name ) ; return self ; } , toggle : function ( ) { this . display = player . _api ( ) . fp _togglePlugin ( name ) ; return self ; } , fadeTo : function ( o , speed , fn ) { if ( typeof speed == 'function' ) { fn = speed ; speed = 500 ; }
if ( fn ) { var fnId = makeId ( ) ; listeners [ fnId ] = fn ; }
this . display = player . _api ( ) . fp _fadeTo ( name , o , speed , fnId ) ; this . opacity = o ; return self ; } , fadeIn : function ( speed , fn ) { return self . fadeTo ( 1 , speed , fn ) ; } , fadeOut : function ( speed , fn ) { return self . fadeTo ( 0 , speed , fn ) ; } , getName : function ( ) { return name ; } , getPlayer : function ( ) { return player ; } , _fireEvent : function ( evt , arg , arg2 ) { if ( evt == 'onUpdate' ) { var json = player . _api ( ) . fp _getPlugin ( name ) ; if ( ! json ) { return ; }
extend ( self , json ) ; delete self . methods ; if ( ! hasMethods ) { each ( json . methods , function ( ) { var method = "" + this ; self [ method ] = function ( ) { var a = [ ] . slice . call ( arguments ) ; var ret = player . _api ( ) . fp _invoke ( name , method , a ) ; return ret === 'undefined' || ret === undefined ? self : ret ; } ; } ) ; hasMethods = true ; } }
2013-04-04 09:26:02 +00:00
var fn = listeners [ evt ] ; if ( fn ) { var ret = fn . apply ( self , arg ) ; if ( evt . slice ( 0 , 1 ) == "_" ) { delete listeners [ evt ] ; }
return ret ; }
return self ; } } ) ; } ; function Player ( wrapper , params , conf ) { var self = this , api = null , isUnloading = false , html , commonClip , playlist = [ ] , plugins = { } , listeners = { } , playerId , apiId , playerIndex , activeIndex , swfHeight , wrapperHeight ; extend ( self , { id : function ( ) { return playerId ; } , isLoaded : function ( ) { return ( api !== null && api . fp _play !== undefined && ! isUnloading ) ; } , getParent : function ( ) { return wrapper ; } , hide : function ( all ) { if ( all ) { wrapper . style . height = "0px" ; }
if ( self . isLoaded ( ) ) { api . style . height = "0px" ; }
return self ; } , show : function ( ) { wrapper . style . height = wrapperHeight + "px" ; if ( self . isLoaded ( ) ) { api . style . height = swfHeight + "px" ; }
return self ; } , isHidden : function ( ) { return self . isLoaded ( ) && parseInt ( api . style . height , 10 ) === 0 ; } , load : function ( fn ) { if ( ! self . isLoaded ( ) && self . _fireEvent ( "onBeforeLoad" ) !== false ) { var onPlayersUnloaded = function ( ) { html = wrapper . innerHTML ; if ( html && ! flashembed . isSupported ( params . version ) ) { wrapper . innerHTML = "" ; }
if ( fn ) { fn . cached = true ; bind ( listeners , "onLoad" , fn ) ; }
flashembed ( wrapper , params , { config : conf } ) ; } ; var unloadedPlayersNb = 0 ; each ( players , function ( ) { this . unload ( function ( wasUnloaded ) { if ( ++ unloadedPlayersNb == players . length ) { onPlayersUnloaded ( ) ; } } ) ; } ) ; }
return self ; } , unload : function ( fn ) { if ( this . isFullscreen ( ) && /WebKit/i . test ( navigator . userAgent ) ) { if ( fn ) { fn ( false ) ; }
return self ; }
if ( html . replace ( /\s/g , '' ) !== '' ) { if ( self . _fireEvent ( "onBeforeUnload" ) === false ) { if ( fn ) { fn ( false ) ; }
return self ; }
isUnloading = true ; try { if ( api ) { api . fp _close ( ) ; self . _fireEvent ( "onUnload" ) ; } } catch ( error ) { }
var clean = function ( ) { api = null ; wrapper . innerHTML = html ; isUnloading = false ; if ( fn ) { fn ( true ) ; } } ; setTimeout ( clean , 50 ) ; }
else if ( fn ) { fn ( false ) ; }
2013-04-04 09:26:00 +00:00
return self ; } , getClip : function ( index ) { if ( index === undefined ) { index = activeIndex ; }
return playlist [ index ] ; } , getCommonClip : function ( ) { return commonClip ; } , getPlaylist : function ( ) { return playlist ; } , getPlugin : function ( name ) { var plugin = plugins [ name ] ; if ( ! plugin && self . isLoaded ( ) ) { var json = self . _api ( ) . fp _getPlugin ( name ) ; if ( json ) { plugin = new Plugin ( name , json , self ) ; plugins [ name ] = plugin ; } }
2013-04-04 09:26:02 +00:00
return plugin ; } , getScreen : function ( ) { return self . getPlugin ( "screen" ) ; } , getControls : function ( ) { return self . getPlugin ( "controls" ) . _fireEvent ( "onUpdate" ) ; } , getLogo : function ( ) { try { return self . getPlugin ( "logo" ) . _fireEvent ( "onUpdate" ) ; } catch ( ignored ) { } } , getPlay : function ( ) { return self . getPlugin ( "play" ) . _fireEvent ( "onUpdate" ) ; } , getConfig : function ( copy ) { return copy ? clone ( conf ) : conf ; } , getFlashParams : function ( ) { return params ; } , loadPlugin : function ( name , url , props , fn ) { if ( typeof props == 'function' ) { fn = props ; props = { } ; }
var fnId = fn ? makeId ( ) : "_" ; self . _api ( ) . fp _loadPlugin ( name , url , props , fnId ) ; var arg = { } ; arg [ fnId ] = fn ; var p = new Plugin ( name , null , self , arg ) ; plugins [ name ] = p ; return p ; } , getState : function ( ) { return self . isLoaded ( ) ? api . fp _getState ( ) : - 1 ; } , play : function ( clip , instream ) { var p = function ( ) { if ( clip !== undefined ) { self . _api ( ) . fp _play ( clip , instream ) ; } else { self . _api ( ) . fp _play ( ) ; } } ; if ( self . isLoaded ( ) ) { p ( ) ; } else if ( isUnloading ) { setTimeout ( function ( ) { self . play ( clip , instream ) ; } , 50 ) ; } else { self . load ( function ( ) { p ( ) ; } ) ; }
return self ; } , getVersion : function ( ) { var js = "flowplayer.js 3.2.6" ; if ( self . isLoaded ( ) ) { var ver = api . fp _getVersion ( ) ; ver . push ( js ) ; return ver ; }
return js ; } , _api : function ( ) { if ( ! self . isLoaded ( ) ) { throw "Flowplayer " + self . id ( ) + " not loaded when calling an API method" ; }
return api ; } , setClip : function ( clip ) { self . setPlaylist ( [ clip ] ) ; return self ; } , getIndex : function ( ) { return playerIndex ; } , _swfHeight : function ( ) { return api . clientHeight ; } } ) ; each ( ( "Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error,MouseOver,MouseOut" ) . split ( "," ) , function ( ) { var name = "on" + this ; if ( name . indexOf ( "*" ) != - 1 ) { name = name . slice ( 0 , name . length - 1 ) ; var name2 = "onBefore" + name . slice ( 2 ) ; self [ name2 ] = function ( fn ) { bind ( listeners , name2 , fn ) ; return self ; } ; }
self [ name ] = function ( fn ) { bind ( listeners , name , fn ) ; return self ; } ; } ) ; each ( ( "pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,toggleFullscreen,reset,close,setPlaylist,addClip,playFeed,setKeyboardShortcutsEnabled,isKeyboardShortcutsEnabled" ) . split ( "," ) , function ( ) { var name = this ; self [ name ] = function ( a1 , a2 ) { if ( ! self . isLoaded ( ) ) { return self ; }
2013-04-04 09:26:00 +00:00
var ret = null ; if ( a1 !== undefined && a2 !== undefined ) { ret = api [ "fp_" + name ] ( a1 , a2 ) ; } else { ret = ( a1 === undefined ) ? api [ "fp_" + name ] ( ) : api [ "fp_" + name ] ( a1 ) ; }
return ret === 'undefined' || ret === undefined ? self : ret ; } ; } ) ; self . _fireEvent = function ( a ) { if ( typeof a == 'string' ) { a = [ a ] ; }
var evt = a [ 0 ] , arg0 = a [ 1 ] , arg1 = a [ 2 ] , arg2 = a [ 3 ] , i = 0 ; if ( conf . debug ) { log ( a ) ; }
2013-04-04 09:26:02 +00:00
if ( ! self . isLoaded ( ) && evt == 'onLoad' && arg0 == 'player' ) { api = api || el ( apiId ) ; swfHeight = self . _swfHeight ( ) ; each ( playlist , function ( ) { this . _fireEvent ( "onLoad" ) ; } ) ; each ( plugins , function ( name , p ) { p . _fireEvent ( "onUpdate" ) ; } ) ; commonClip . _fireEvent ( "onLoad" ) ; }
2013-04-04 09:26:00 +00:00
if ( evt == 'onLoad' && arg0 != 'player' ) { return ; }
if ( evt == 'onError' ) { if ( typeof arg0 == 'string' || ( typeof arg0 == 'number' && typeof arg1 == 'number' ) ) { arg0 = arg1 ; arg1 = arg2 ; } }
if ( evt == 'onContextMenu' ) { each ( conf . contextMenu [ arg0 ] , function ( key , fn ) { fn . call ( self ) ; } ) ; return ; }
2013-04-04 09:26:02 +00:00
if ( evt == 'onPluginEvent' || evt == 'onBeforePluginEvent' ) { var name = arg0 . name || arg0 ; var p = plugins [ name ] ; if ( p ) { p . _fireEvent ( "onUpdate" , arg0 ) ; return p . _fireEvent ( arg1 , a . slice ( 3 ) ) ; }
2013-04-04 09:26:00 +00:00
return ; }
if ( evt == 'onPlaylistReplace' ) { playlist = [ ] ; var index = 0 ; each ( arg0 , function ( ) { playlist . push ( new Clip ( this , index ++ , self ) ) ; } ) ; }
if ( evt == 'onClipAdd' ) { if ( arg0 . isInStream ) { return ; }
arg0 = new Clip ( arg0 , arg1 , self ) ; playlist . splice ( arg1 , 0 , arg0 ) ; for ( i = arg1 + 1 ; i < playlist . length ; i ++ ) { playlist [ i ] . index ++ ; } }
var ret = true ; if ( typeof arg0 == 'number' && arg0 < playlist . length ) { activeIndex = arg0 ; var clip = playlist [ arg0 ] ; if ( clip ) { ret = clip . _fireEvent ( evt , arg1 , arg2 ) ; }
if ( ! clip || ret !== false ) { ret = commonClip . _fireEvent ( evt , arg1 , arg2 , clip ) ; } }
each ( listeners [ evt ] , function ( ) { ret = this . call ( self , arg0 , arg1 ) ; if ( this . cached ) { listeners [ evt ] . splice ( i , 1 ) ; }
if ( ret === false ) { return false ; }
i ++ ; } ) ; return ret ; } ; function init ( ) { if ( $f ( wrapper ) ) { $f ( wrapper ) . getParent ( ) . innerHTML = "" ; playerIndex = $f ( wrapper ) . getIndex ( ) ; players [ playerIndex ] = self ; } else { players . push ( self ) ; playerIndex = players . length - 1 ; }
2013-04-04 09:26:02 +00:00
wrapperHeight = parseInt ( wrapper . style . height , 10 ) || wrapper . clientHeight ; playerId = wrapper . id || "fp" + makeId ( ) ; apiId = params . id || playerId + "_api" ; params . id = apiId ; conf . playerId = playerId ; if ( typeof conf == 'string' ) { conf = { clip : { url : conf } } ; }
2013-04-04 09:26:00 +00:00
if ( typeof conf . clip == 'string' ) { conf . clip = { url : conf . clip } ; }
conf . clip = conf . clip || { } ; if ( wrapper . getAttribute ( "href" , 2 ) && ! conf . clip . url ) { conf . clip . url = wrapper . getAttribute ( "href" , 2 ) ; }
commonClip = new Clip ( conf . clip , - 1 , self ) ; conf . playlist = conf . playlist || [ conf . clip ] ; var index = 0 ; each ( conf . playlist , function ( ) { var clip = this ; if ( typeof clip == 'object' && clip . length ) { clip = { url : "" + clip } ; }
each ( conf . clip , function ( key , val ) { if ( val !== undefined && clip [ key ] === undefined && typeof val != 'function' ) { clip [ key ] = val ; } } ) ; conf . playlist [ index ] = clip ; clip = new Clip ( clip , index , self ) ; playlist . push ( clip ) ; index ++ ; } ) ; each ( conf , function ( key , val ) { if ( typeof val == 'function' ) { if ( commonClip [ key ] ) { commonClip [ key ] ( val ) ; } else { bind ( listeners , key , val ) ; }
delete conf [ key ] ; } } ) ; each ( conf . plugins , function ( name , val ) { if ( val ) { plugins [ name ] = new Plugin ( name , val , self ) ; } } ) ; if ( ! conf . plugins || conf . plugins . controls === undefined ) { plugins . controls = new Plugin ( "controls" , null , self ) ; }
2013-04-04 09:26:02 +00:00
plugins . canvas = new Plugin ( "canvas" , null , self ) ; html = wrapper . innerHTML ; function doClick ( e ) { var hasiPadSupport = self . hasiPadSupport && self . hasiPadSupport ( ) ; if ( /iPad|iPhone|iPod/i . test ( navigator . userAgent ) && ! /.flv$/i . test ( playlist [ 0 ] . url ) && ! hasiPadSupport ) { return true ; }
if ( ! self . isLoaded ( ) && self . _fireEvent ( "onBeforeClick" ) !== false ) { self . load ( ) ; }
2013-04-04 09:26:00 +00:00
return stopEvent ( e ) ; }
2013-04-04 09:26:02 +00:00
function installPlayer ( ) { if ( html . replace ( /\s/g , '' ) !== '' ) { if ( wrapper . addEventListener ) { wrapper . addEventListener ( "click" , doClick , false ) ; } else if ( wrapper . attachEvent ) { wrapper . attachEvent ( "onclick" , doClick ) ; } } else { if ( wrapper . addEventListener ) { wrapper . addEventListener ( "click" , stopEvent , false ) ; }
2013-04-04 09:26:00 +00:00
self . load ( ) ; } }
2013-04-04 09:26:02 +00:00
setTimeout ( installPlayer , 0 ) ; }
if ( typeof wrapper == 'string' ) { var node = el ( wrapper ) ; if ( ! node ) { throw "Flowplayer cannot access element: " + wrapper ; }
wrapper = node ; init ( ) ; } else { init ( ) ; } }
2013-04-04 09:26:00 +00:00
var players = [ ] ; function Iterator ( arr ) { this . length = arr . length ; this . each = function ( fn ) { each ( arr , fn ) ; } ; this . size = function ( ) { return arr . length ; } ; }
window . flowplayer = window . $f = function ( ) { var instance = null ; var arg = arguments [ 0 ] ; if ( ! arguments . length ) { each ( players , function ( ) { if ( this . isLoaded ( ) ) { instance = this ; return false ; } } ) ; return instance || players [ 0 ] ; }
if ( arguments . length == 1 ) { if ( typeof arg == 'number' ) { return players [ arg ] ; } else { if ( arg == '*' ) { return new Iterator ( players ) ; }
each ( players , function ( ) { if ( this . id ( ) == arg . id || this . id ( ) == arg || this . getParent ( ) == arg ) { instance = this ; return false ; } } ) ; return instance ; } }
2013-04-04 09:26:02 +00:00
if ( arguments . length > 1 ) { var params = arguments [ 1 ] , conf = ( arguments . length == 3 ) ? arguments [ 2 ] : { } ; if ( typeof params == 'string' ) { params = { src : params } ; }
params = extend ( { bgcolor : "#000000" , version : [ 9 , 0 ] , expressInstall : "http://static.flowplayer.org/swf/expressinstall.swf" , cachebusting : false } , params ) ; if ( typeof arg == 'string' ) { if ( arg . indexOf ( "." ) != - 1 ) { var instances = [ ] ; each ( select ( arg ) , function ( ) { instances . push ( new Player ( this , clone ( params ) , clone ( conf ) ) ) ; } ) ; return new Iterator ( instances ) ; } else { var node = el ( arg ) ; return new Player ( node !== null ? node : arg , params , conf ) ; } } else if ( arg ) { return new Player ( arg , params , conf ) ; } }
return null ; } ; extend ( window . $f , { fireEvent : function ( ) { var a = [ ] . slice . call ( arguments ) ; var p = $f ( a [ 0 ] ) ; return p ? p . _fireEvent ( a . slice ( 1 ) ) : null ; } , addPlugin : function ( name , fn ) { Player . prototype [ name ] = fn ; return $f ; } , each : each , extend : extend } ) ; if ( typeof jQuery == 'function' ) { jQuery . fn . flowplayer = function ( params , conf ) { if ( ! arguments . length || typeof arguments [ 0 ] == 'number' ) { var arr = [ ] ; this . each ( function ( ) { var p = $f ( this ) ; if ( p ) { arr . push ( p ) ; } } ) ; return arguments . length ? arr [ arguments [ 0 ] ] : new Iterator ( arr ) ; }
return this . each ( function ( ) { $f ( this , clone ( params ) , conf ? clone ( conf ) : { } ) ; } ) ; } ; } } ) ( ) ; ( function ( ) { var IE = document . all , URL = 'http://www.adobe.com/go/getflashplayer' , JQUERY = typeof jQuery == 'function' , RE = /(\d+)[^\d]+(\d+)[^\d]*(\d*)/ , GLOBAL _OPTS = { width : '100%' , height : '100%' , id : "_" + ( "" + Math . random ( ) ) . slice ( 9 ) , allowfullscreen : true , allowscriptaccess : 'always' , quality : 'high' , version : [ 3 , 0 ] , onFail : null , expressInstall : null , w3c : false , cachebusting : false } ; if ( window . attachEvent ) { window . attachEvent ( "onbeforeunload" , function ( ) { _ _flash _unloadHandler = function ( ) { } ; _ _flash _savedUnloadHandler = function ( ) { } ; } ) ; }
function extend ( to , from ) { if ( from ) { for ( var key in from ) { if ( from . hasOwnProperty ( key ) ) { to [ key ] = from [ key ] ; } } }
2013-04-04 09:26:00 +00:00
return to ; }
function map ( arr , func ) { var newArr = [ ] ; for ( var i in arr ) { if ( arr . hasOwnProperty ( i ) ) { newArr [ i ] = func ( arr [ i ] ) ; } }
return newArr ; }
2013-04-04 09:26:02 +00:00
window . flashembed = function ( root , opts , conf ) { if ( typeof root == 'string' ) { root = document . getElementById ( root . replace ( "#" , "" ) ) ; }
if ( ! root ) { return ; }
if ( typeof opts == 'string' ) { opts = { src : opts } ; }
return new Flash ( root , extend ( extend ( { } , GLOBAL _OPTS ) , opts ) , conf ) ; } ; var f = extend ( window . flashembed , { conf : GLOBAL _OPTS , getVersion : function ( ) { var fo , ver ; try { ver = navigator . plugins [ "Shockwave Flash" ] . description . slice ( 16 ) ; } catch ( e ) { try { fo = new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash.7" ) ; ver = fo && fo . GetVariable ( "$version" ) ; } catch ( err ) { try { fo = new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash.6" ) ; ver = fo && fo . GetVariable ( "$version" ) ; } catch ( err2 ) { } } }
ver = RE . exec ( ver ) ; return ver ? [ ver [ 1 ] , ver [ 3 ] ] : [ 0 , 0 ] ; } , asString : function ( obj ) { if ( obj === null || obj === undefined ) { return null ; }
var type = typeof obj ; if ( type == 'object' && obj . push ) { type = 'array' ; }
switch ( type ) { case 'string' : return string2JsonString ( obj ) ; case 'array' : return '[' + map ( obj , function ( el ) { return f . asString ( el ) ; } ) . join ( ',' ) + ']' ; case 'function' : return '"function()"' ; case 'object' : var str = [ ] ; for ( var prop in obj ) { if ( obj . hasOwnProperty ( prop ) ) { str . push ( '"' + prop + '":' + f . asString ( obj [ prop ] ) ) ; } }
return '{' + str . join ( ',' ) + '}' ; }
return String ( obj ) . replace ( /\s/g , " " ) . replace ( /\'/g , "\"" ) ; } , getHTML : function ( opts , conf ) { opts = extend ( { } , opts ) ; var html = '<object width="' + opts . width + '" height="' + opts . height + '" id="' + opts . id + '" name="' + opts . id + '"' ; if ( opts . cachebusting ) { opts . src += ( ( opts . src . indexOf ( "?" ) != - 1 ? "&" : "?" ) + Math . random ( ) ) ; }
if ( opts . w3c || ! IE ) { html += ' data="' + opts . src + '" type="application/x-shockwave-flash"' ; } else { html += ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' ; }
html += '>' ; if ( opts . w3c || IE ) { html += '<param name="movie" value="' + opts . src + '" />' ; }
opts . width = opts . height = opts . id = opts . w3c = opts . src = null ; opts . onFail = opts . version = opts . expressInstall = null ; for ( var key in opts ) { if ( opts [ key ] ) { html += '<param name="' + key + '" value="' + opts [ key ] + '" />' ; } }
var vars = "" ; if ( conf ) { for ( var k in conf ) { if ( conf [ k ] ) { var val = conf [ k ] ; vars += encodeURIComponent ( k ) + '='
+ encodeURIComponent ( /function|object/ . test ( typeof val ) ? f . asString ( val ) : val )
2013-04-04 09:26:00 +00:00
+ '&' ; } }
2013-04-04 09:26:02 +00:00
vars = vars . slice ( 0 , - 1 ) ; html += '<param name="flashvars" value="' + vars + '" />' ; }
html += "</object>" ; return html ; } , isSupported : function ( ver ) { return VERSION [ 0 ] > ver [ 0 ] || VERSION [ 0 ] == ver [ 0 ] && VERSION [ 1 ] >= ver [ 1 ] ; } } ) ; var VERSION = f . getVersion ( ) ; function Flash ( root , opts , conf ) { if ( f . isSupported ( opts . version ) ) { root . innerHTML = f . getHTML ( opts , conf ) ; } else if ( opts . expressInstall && f . isSupported ( [ 6 , 65 ] ) ) { root . innerHTML = f . getHTML ( extend ( opts , { src : opts . expressInstall } ) , { MMredirectURL : location . href , MMplayerType : 'PlugIn' , MMdoctitle : document . title } ) ; } else { if ( ! root . innerHTML . replace ( /\s/g , '' ) ) { root . innerHTML = "<h2>Flash version " + opts . version + " or greater is required</h2>" + "<h3>" +
( VERSION [ 0 ] > 0 ? "Your version is " + VERSION : "You have no flash plugin installed" ) + "</h3>" +
( root . tagName == 'A' ? "<p>Click here to download latest version</p>" : "<p>Download latest version from <a href='" + URL + "'>here</a></p>" ) ; if ( root . tagName == 'A' ) { root . onclick = function ( ) { location . href = URL ; } ; } }
if ( opts . onFail ) { var ret = opts . onFail . call ( this ) ; if ( typeof ret == 'string' ) { root . innerHTML = ret ; } } }
if ( IE ) { window [ opts . id ] = document . getElementById ( opts . id ) ; }
extend ( this , { getRoot : function ( ) { return root ; } , getOptions : function ( ) { return opts ; } , getConf : function ( ) { return conf ; } , getApi : function ( ) { return root . firstChild ; } } ) ; }
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g , escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g , gap , indent , meta = { '\b' : '\\b' , '\t' : '\\t' , '\n' : '\\n' , '\f' : '\\f' , '\r' : '\\r' , '"' : '\\"' , '\\' : '\\\\' } , rep ; function string2JsonString ( string ) { escapable . lastIndex = 0 ; return escapable . test ( string ) ? '"' + string . replace ( escapable , function ( a ) { var c = meta [ a ] ; return typeof c === 'string' ? c : '\\u' + ( '0000' + a . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) ; } ) + '"' : '"' + string + '"' ; }
if ( JQUERY ) { jQuery . tools = jQuery . tools || { version : '3.2.6' } ; jQuery . tools . flashembed = { conf : GLOBAL _OPTS } ; jQuery . fn . flashembed = function ( opts , conf ) { return this . each ( function ( ) { jQuery ( this ) . data ( "flashembed" , flashembed ( this , opts , conf ) ) ; } ) ; } ; } } ) ( ) ; $f . addPlugin ( "ipad" , function ( options ) { var STATE _UNLOADED = - 1 ; var STATE _LOADED = 0 ; var STATE _UNSTARTED = 1 ; var STATE _BUFFERING = 2 ; var STATE _PLAYING = 3 ; var STATE _PAUSED = 4 ; var STATE _ENDED = 5 ; var self = this ; var currentVolume = 1 ; var onStartFired = false ; var stopping = false ; var playAfterSeek = false ; var activeIndex = 0 ; var activePlaylist = [ ] ; var clipDefaults = { accelerated : false , autoBuffering : false , autoPlay : true , baseUrl : null , bufferLength : 3 , connectionProvider : null , cuepointMultiplier : 1000 , cuepoints : [ ] , controls : { } , duration : 0 , extension : '' , fadeInSpeed : 1000 , fadeOutSpeed : 1000 , image : false , linkUrl : null , linkWindow : '_self' , live : false , metaData : { } , originalUrl : null , position : 0 , playlist : [ ] , provider : 'http' , scaling : 'scale' , seekableOnBegin : false , start : 0 , url : null , urlResolvers : [ ] } ; var currentState = STATE _UNLOADED ; var previousState = STATE _UNLOADED ; var isiDevice = /iPad|iPhone|iPod/i . test ( navigator . userAgent ) ; var video = null ; function extend ( to , from , includeFuncs ) { if ( from ) { for ( key in from ) { if ( key ) { if ( from [ key ] && typeof from [ key ] == "function" && ! includeFuncs )
continue ; if ( from [ key ] && typeof from [ key ] == "object" && from [ key ] . length == undefined ) { var cp = { } ; extend ( cp , from [ key ] ) ; to [ key ] = cp ; } else { to [ key ] = from [ key ] ; } } } }
return to ; }
var opts = { simulateiDevice : false , controlsSizeRatio : 1.5 , controls : true , debug : false , validExtensions : /mov|m4v|mp4|avi/gi } ; extend ( opts , options ) ; function log ( ) { if ( opts . debug ) { if ( isiDevice ) { var str = [ ] . splice . call ( arguments , 0 ) . join ( ', ' ) ; console . log . apply ( console , [ str ] ) ; } else { console . log . apply ( console , arguments ) ; } } }
function stateDescription ( state ) { switch ( state ) { case - 1 : return "UNLOADED" ; case 0 : return "LOADED" ; case 1 : return "UNSTARTED" ; case 2 : return "BUFFERING" ; case 3 : return "PLAYING" ; case 4 : return "PAUSED" ; case 5 : return "ENDED" ; }
return "UNKOWN" ; }
function actionAllowed ( eventName ) { var ret = $f . fireEvent ( self . id ( ) , "onBefore" + eventName , activeIndex ) ; return ret !== false ; }
function stopEvent ( e ) { e . stopPropagation ( ) ; e . preventDefault ( ) ; return false ; }
function setState ( state , force ) { if ( currentState == STATE _UNLOADED && ! force )
return ; previousState = currentState ; currentState = state ; stopPlayTimeTracker ( ) ; if ( state == STATE _PLAYING )
startPlayTimeTracker ( ) ; log ( stateDescription ( state ) ) ; }
function resetState ( ) { video . fp _stop ( ) ; onStartFired = false ; stopping = false ; playAfterSeek = false ; setState ( STATE _UNSTARTED ) ; setState ( STATE _UNSTARTED ) ; }
var _playTimeTracker = null ; function startPlayTimeTracker ( ) { if ( _playTimeTracker )
return ; console . log ( "starting tracker" ) ; _playTimeTracker = setInterval ( onTimeTracked , 100 ) ; onTimeTracked ( ) ; }
function stopPlayTimeTracker ( ) { clearInterval ( _playTimeTracker ) ; _playTimeTracker = null ; }
function onTimeTracked ( ) { var currentTime = Math . floor ( video . fp _getTime ( ) * 10 ) * 100 ; var duration = Math . floor ( video . duration * 10 ) * 100 ; var fireTime = ( new Date ( ) ) . time ; function fireCuePointsIfNeeded ( time , cues ) { time = time >= 0 ? time : duration - Math . abs ( time ) ; for ( var i = 0 ; i < cues . length ; i ++ ) { if ( cues [ i ] . lastTimeFired > fireTime ) { cues [ i ] . lastTimeFired = - 1 ; } else if ( cues [ i ] . lastTimeFired + 500 > fireTime ) { continue ; } else { if ( time == currentTime || ( currentTime - 500 < time && currentTime > time ) ) { cues [ i ] . lastTimeFired = fireTime ; $f . fireEvent ( self . id ( ) , 'onCuepoint' , activeIndex , cues [ i ] . fnId , cues [ i ] . parameters ) ; } } } }
$f . each ( self . getCommonClip ( ) . _cuepoints , fireCuePointsIfNeeded ) ; $f . each ( activePlaylist [ activeIndex ] . _cuepoints , fireCuePointsIfNeeded ) ; }
function replay ( ) { resetState ( ) ; playAfterSeek = true ; video . fp _seek ( 0 ) ; }
function scaleVideo ( clip ) { }
function addAPI ( ) { function fixClip ( clip ) { var extendedClip = { } ; extend ( extendedClip , clipDefaults ) ; extend ( extendedClip , self . getCommonClip ( ) ) ; extend ( extendedClip , clip ) ; if ( extendedClip . ipadUrl )
url = decodeURIComponent ( extendedClip . ipadUrl ) ; else if ( extendedClip . url )
url = extendedClip . url ; if ( url && url . indexOf ( '://' ) == - 1 && extendedClip . baseUrl )
url = extendedClip . baseUrl + '/' + url ; extendedClip . originalUrl = extendedClip . url ; extendedClip . completeUrl = url ; extendedClip . extension = extendedClip . completeUrl . substr ( extendedClip . completeUrl . lastIndexOf ( '.' ) ) ; extendedClip . type = 'video' ; delete extendedClip . index ; log ( "fixed clip" , extendedClip ) ; return extendedClip ; }
video . fp _play = function ( clip , inStream , forcePlay ) { var url = null ; var autoBuffering = true ; var autoPlay = true ; log ( "Calling play() " + clip , clip ) ; if ( inStream ) { log ( "ERROR: inStream clips not yet supported" ) ; return ; }
if ( clip !== undefined ) { if ( typeof clip == "number" ) { if ( activeIndex >= activePlaylist . length )
return ; activeIndex = clip ; clip = activePlaylist [ activeIndex ] ; } else { if ( typeof clip == "string" ) { clip = { url : clip } ; }
video . fp _setPlaylist ( clip . length !== undefined ? clip : [ clip ] ) ; }
if ( ! opts . validExtensions . test ( activePlaylist [ activeIndex ] . extension ) ) { if ( activePlaylist . length > 1 && activeIndex < ( activePlaylist . length - 1 ) ) { log ( "Not last clip in the playlist, moving to next one" ) ; video . fp _play ( ++ activeIndex , false , true ) ; }
return ; }
clip = activePlaylist [ activeIndex ] ; url = clip . completeUrl ; if ( clip . autoBuffering !== undefined && clip . autoBuffering === false )
autoBuffering = false ; if ( clip . autoPlay === undefined || clip . autoPlay === true || forcePlay === true ) { autoBuffering = true ; autoPlay = true ; } else { autoPlay = false ; } } else { log ( "clip was not given, simply calling video.play, if not already buffering" ) ; if ( currentState != STATE _BUFFERING )
video . play ( ) ; return ; }
log ( "about to play " + url , autoBuffering , autoPlay ) ; resetState ( ) ; if ( url ) { log ( "Changing SRC attribute" + url ) ; video . setAttribute ( 'src' , url ) ; }
if ( autoBuffering ) { if ( ! actionAllowed ( 'Begin' ) )
return false ; $f . fireEvent ( self . id ( ) , 'onBegin' , activeIndex ) ; log ( "calling video.load()" ) ; video . load ( ) ; }
if ( autoPlay ) { log ( "calling video.play()" ) ; video . play ( ) ; } }
video . fp _pause = function ( ) { log ( "pause called" ) ; if ( ! actionAllowed ( 'Pause' ) )
return false ; video . pause ( ) ; } ; video . fp _resume = function ( ) { log ( "resume called" ) ; if ( ! actionAllowed ( 'Resume' ) )
return false ; video . play ( ) ; } ; video . fp _stop = function ( ) { log ( "stop called" ) ; if ( ! actionAllowed ( 'Stop' ) )
return false ; stopping = true ; video . pause ( ) ; try { video . currentTime = 0 ; } catch ( ignored ) { } } ; video . fp _seek = function ( position ) { log ( "seek called " + position ) ; if ( ! actionAllowed ( 'Seek' ) )
return false ; var seconds = 0 ; var position = position + "" ; if ( position . charAt ( position . length - 1 ) == '%' ) { var percentage = parseInt ( position . substr ( 0 , position . length - 1 ) ) / 100 ; var duration = video . duration ; seconds = duration * percentage ; } else { seconds = position ; }
try { video . currentTime = seconds ; } catch ( e ) { log ( "Wrong seek time" ) ; } } ; video . fp _getTime = function ( ) { return video . currentTime ; } ; video . fp _mute = function ( ) { log ( "mute called" ) ; if ( ! actionAllowed ( 'Mute' ) )
return false ; currentVolume = video . volume ; video . volume = 0 ; } ; video . fp _unmute = function ( ) { if ( ! actionAllowed ( 'Unmute' ) )
return false ; video . volume = currentVolume ; } ; video . fp _getVolume = function ( ) { return video . volume * 100 ; } ; video . fp _setVolume = function ( volume ) { if ( ! actionAllowed ( 'Volume' ) )
return false ; video . volume = volume / 100 ; } ; video . fp _toggle = function ( ) { log ( 'toggle called' ) ; if ( self . getState ( ) == STATE _ENDED ) { replay ( ) ; return ; }
if ( video . paused )
video . fp _play ( ) ; else
video . fp _pause ( ) ; } ; video . fp _isPaused = function ( ) { return video . paused ; } ; video . fp _isPlaying = function ( ) { return ! video . paused ; } ; video . fp _getPlugin = function ( name ) { if ( name == 'canvas' || name == 'controls' ) { var config = self . getConfig ( ) ; return config [ 'plugins' ] && config [ 'plugins' ] [ name ] ? config [ 'plugins' ] [ name ] : null ; }
log ( "ERROR: no support for " + name + " plugin on iDevices" ) ; return null ; } ; video . fp _close = function ( ) { setState ( STATE _UNLOADED ) ; video . parentNode . removeChild ( video ) ; video = null ; } ; video . fp _getStatus = function ( ) { var bufferStart = 0 ; var bufferEnd = 0 ; try { bufferStart = video . buffered . start ( ) ; bufferEnd = video . buffered . end ( ) ; } catch ( ignored ) { }
return { bufferStart : bufferStart , bufferEnd : bufferEnd , state : currentState , time : video . fp _getTime ( ) , muted : video . muted , volume : video . fp _getVolume ( ) } ; } ; video . fp _getState = function ( ) { return currentState ; } ; video . fp _startBuffering = function ( ) { if ( currentState == STATE _UNSTARTED )
video . load ( ) ; } ; video . fp _setPlaylist = function ( playlist ) { log ( "Setting playlist" ) ; activeIndex = 0 ; for ( var i = 0 ; i < playlist . length ; i ++ )
playlist [ i ] = fixClip ( playlist [ i ] ) ; activePlaylist = playlist ; $f . fireEvent ( self . id ( ) , 'onPlaylistReplace' , playlist ) ; } ; video . fp _addClip = function ( clip , index ) { clip = fixClip ( clip ) ; activePlaylist . splice ( index , 0 , clip ) ; $f . fireEvent ( self . id ( ) , 'onClipAdd' , clip , index ) ; } ; video . fp _updateClip = function ( clip , index ) { extend ( activePlaylist [ index ] , clip ) ; return activePlaylist [ index ] ; } ; video . fp _getVersion = function ( ) { return '3.2.3' ; }
video . fp _isFullscreen = function ( ) { return false ; }
video . fp _toggleFullscreen = function ( ) { if ( video . fp _isFullscreen ( ) )
video . webkitExitFullscreen ( ) ; else
video . webkitEnterFullscreen ( ) ; }
video . fp _addCuepoints = function ( points , index , fnId ) { var clip = index == - 1 ? self . getCommonClip ( ) : activePlaylist [ index ] ; clip . _cuepoints = clip . _cuepoints || { } ; points = points instanceof Array ? points : [ points ] ; for ( var i = 0 ; i < points . length ; i ++ ) { var time = typeof points [ i ] == "object" ? ( points [ i ] [ 'time' ] || null ) : points [ i ] ; if ( time == null ) continue ; time = Math . floor ( time / 100 ) * 100 ; var parameters = time ; if ( typeof points [ i ] == "object" ) { parameters = extend ( { } , points [ i ] , false ) ; if ( parameters [ 'time' ] != undefined ) delete parameters [ 'time' ] ; if ( parameters [ 'parameters' ] != undefined ) { extend ( parameters , parameters [ 'parameters' ] , false ) ; delete parameters [ 'parameters' ] ; } }
clip . _cuepoints [ time ] = clip . _cuepoints [ time ] || [ ] ; clip . _cuepoints [ time ] . push ( { fnId : fnId , lastTimeFired : - 1 , parameters : parameters } ) ; } }
$f . each ( ( "toggleFullscreen,stopBuffering,reset,playFeed,setKeyboardShortcutsEnabled,isKeyboardShortcutsEnabled,css,animate,showPlugin,hidePlugin,togglePlugin,fadeTo,invoke,loadPlugin" ) . split ( "," ) , function ( ) { var name = this ; video [ "fp_" + name ] = function ( ) { log ( "ERROR: unsupported API on iDevices " + name ) ; return false ; } ; } ) ; }
function addListeners ( ) { var events = [ 'abort' , 'canplay' , 'canplaythrough' , 'durationchange' , 'emptied' , 'ended' , 'error' , 'loadeddata' , 'loadedmetadata' , 'loadstart' , 'pause' , 'play' , 'playing' , 'progress' , 'ratechange' , 'seeked' , 'seeking' , 'stalled' , 'suspend' , 'volumechange' , 'waiting' ] ; var eventsLogger = function ( e ) { log ( "Got event " + e . type , e ) ; }
for ( var i = 0 ; i < events . length ; i ++ )
video . addEventListener ( events [ i ] , eventsLogger , false ) ; var onBufferEmpty = function ( e ) { log ( "got onBufferEmpty event " + e . type )
setState ( STATE _BUFFERING ) ; $f . fireEvent ( self . id ( ) , 'onBufferEmpty' , activeIndex ) ; } ; video . addEventListener ( 'emptied' , onBufferEmpty , false ) ; video . addEventListener ( 'waiting' , onBufferEmpty , false ) ; var onBufferFull = function ( e ) { if ( previousState == STATE _UNSTARTED || previousState == STATE _BUFFERING ) { } else { log ( "Restoring old state " + stateDescription ( previousState ) ) ; setState ( previousState ) ; }
$f . fireEvent ( self . id ( ) , 'onBufferFull' , activeIndex ) ; } ; video . addEventListener ( 'canplay' , onBufferFull , false ) ; video . addEventListener ( 'canplaythrough' , onBufferFull , false ) ; var onMetaData = function ( e ) { video . fp _updateClip ( { duration : video . duration , metaData : { duration : video . duration } } , activeIndex ) ; activePlaylist [ activeIndex ] . duration = video . duration ; $f . fireEvent ( self . id ( ) , 'onMetaData' , activeIndex , activePlaylist [ activeIndex ] ) ; } ; video . addEventListener ( 'loadedmetadata' , onMetaData , false ) ; video . addEventListener ( 'durationchange' , onMetaData , false ) ; var onStart = function ( e ) { if ( currentState == STATE _PAUSED ) { if ( ! actionAllowed ( 'Resume' ) ) { log ( "Resume disallowed, pausing" ) ; video . fp _pause ( ) ; return stopEvent ( e ) ; }
$f . fireEvent ( self . id ( ) , 'onResume' , activeIndex ) ; }
setState ( STATE _PLAYING ) ; if ( ! onStartFired ) { onStartFired = true ; $f . fireEvent ( self . id ( ) , 'onStart' , activeIndex ) ; } } ; video . addEventListener ( 'playing' , onStart , false ) ; var onFinish = function ( e ) { if ( ! actionAllowed ( 'Finish' ) ) { if ( activePlaylist . length == 1 ) { log ( "Active playlist only has one clip, onBeforeFinish returned false. Replaying" ) ; replay ( ) ; } else if ( activeIndex != ( activePlaylist . length - 1 ) ) { log ( "Not the last clip in the playlist, but onBeforeFinish returned false. Returning to the beginning of current clip" ) ; video . fp _seek ( 0 ) ; } else { log ( "Last clip in playlist, but onBeforeFinish returned false, start again from the beginning" ) ; video . fp _play ( 0 ) ; }
return stopEvent ( e ) ; }
setState ( STATE _ENDED ) ; $f . fireEvent ( self . id ( ) , 'onFinish' , activeIndex ) ; if ( activePlaylist . length > 1 && activeIndex < ( activePlaylist . length - 1 ) ) { log ( "Not last clip in the playlist, moving to next one" ) ; video . fp _play ( ++ activeIndex , false , true ) ; } } ; video . addEventListener ( 'ended' , onFinish , false ) ; var onError = function ( e ) { setState ( STATE _LOADED , true ) ; $f . fireEvent ( self . id ( ) , 'onError' , activeIndex , 201 ) ; if ( opts . onFail && opts . onFail instanceof Function )
opts . onFail . apply ( self , [ ] ) ; } ; video . addEventListener ( 'error' , onError , false ) ; var onPause = function ( e ) { log ( "got pause event from player" + self . id ( ) ) ; if ( stopping )
return ; if ( currentState == STATE _BUFFERING && previousState == STATE _UNSTARTED ) { log ( "forcing play" ) ; setTimeout ( function ( ) { video . play ( ) ; } , 0 ) ; return ; }
if ( ! actionAllowed ( 'Pause' ) ) { video . fp _resume ( ) ; return stopEvent ( e ) ; }
setState ( STATE _PAUSED ) ; $f . fireEvent ( self . id ( ) , 'onPause' , activeIndex ) ; }
video . addEventListener ( 'pause' , onPause , false ) ; var onSeek = function ( e ) { $f . fireEvent ( self . id ( ) , 'onBeforeSeek' , activeIndex ) ; } ; video . addEventListener ( 'seeking' , onSeek , false ) ; var onSeekDone = function ( e ) { if ( stopping ) { stopping = false ; $f . fireEvent ( self . id ( ) , 'onStop' , activeIndex ) ; }
else
$f . fireEvent ( self . id ( ) , 'onSeek' , activeIndex ) ; log ( "seek done, currentState" , stateDescription ( currentState ) ) ; if ( playAfterSeek ) { playAfterSeek = false ; video . fp _play ( ) ; } else if ( currentState != STATE _PLAYING )
video . fp _pause ( ) ; } ; video . addEventListener ( 'seeked' , onSeekDone , false ) ; var onVolumeChange = function ( e ) { $f . fireEvent ( self . id ( ) , 'onVolume' , video . fp _getVolume ( ) ) ; } ; video . addEventListener ( 'volumechange' , onVolumeChange , false ) ; }
function onPlayerLoaded ( ) { video . fp _play ( 0 ) ; }
function installControlbar ( ) { }
if ( isiDevice || opts . simulateiDevice ) { if ( ! window . flashembed . _ _replaced ) { var realFlashembed = window . flashembed ; window . flashembed = function ( root , opts , conf ) { if ( typeof root == 'string' ) { root = document . getElementById ( root . replace ( "#" , "" ) ) ; }
2013-04-04 09:26:00 +00:00
if ( ! root ) { return ; }
2013-04-04 09:26:02 +00:00
var style = window . getComputedStyle ( root , null ) ; var width = parseInt ( style . width ) ; var height = parseInt ( style . height ) ; while ( root . firstChild )
root . removeChild ( root . firstChild ) ; var container = document . createElement ( 'div' ) ; var api = document . createElement ( 'video' ) ; container . appendChild ( api ) ; root . appendChild ( container ) ; container . style . height = height + 'px' ; container . style . width = width + 'px' ; container . style . display = 'block' ; container . style . position = 'relative' ; container . style . background = '-webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.7)))' ; container . style . cursor = 'default' ; container . style . webkitUserDrag = 'none' ; api . style . height = '100%' ; api . style . width = '100%' ; api . style . display = 'block' ; api . id = opts . id ; api . name = opts . id ; api . style . cursor = 'pointer' ; api . style . webkitUserDrag = 'none' ; api . type = "video/mp4" ; api . playerConfig = conf . config ; $f . fireEvent ( conf . config . playerId , 'onLoad' , 'player' ) ; } ; flashembed . getVersion = realFlashembed . getVersion ; flashembed . asString = realFlashembed . asString ; flashembed . isSupported = function ( ) { return true ; }
flashembed . _ _replaced = true ; }
var _ _fireEvent = self . _fireEvent ; self . _fireEvent = function ( a ) { if ( a [ 0 ] == 'onLoad' && a [ 1 ] == 'player' ) { video = self . getParent ( ) . querySelector ( 'video' ) ; if ( opts . controls )
video . controls = "controls" ; addAPI ( ) ; addListeners ( ) ; setState ( STATE _LOADED , true ) ; video . fp _setPlaylist ( video . playerConfig . playlist ) ; onPlayerLoaded ( ) ; _ _fireEvent . apply ( self , [ a ] ) ; }
var shouldFireEvent = currentState != STATE _UNLOADED ; if ( currentState == STATE _UNLOADED && typeof a == 'string' )
shouldFireEvent = true ; if ( shouldFireEvent )
return _ _fireEvent . apply ( self , [ a ] ) ; }
self . _swfHeight = function ( ) { return parseInt ( video . style . height ) ; }
self . hasiPadSupport = function ( ) { return true ; } }
return self ; } ) ;