2013-03-01 18:06:10 +00:00
/ *
* jPlayer Plugin for jQuery JavaScript Library
* http : //www.happyworm.com/jquery/jplayer
*
* Copyright ( c ) 2009 - 2010 Happyworm Ltd
* Dual licensed under the MIT and GPL licenses .
* - http : //www.opensource.org/licenses/mit-license.php
* - http : //www.gnu.org/copyleft/gpl.html
*
* Author : Mark J Panaghiston
* Version : 2.0 . 0
* Date : 20 th December 2010
* /
( function ( c , h ) { c . fn . jPlayer = function ( a ) { var b = typeof a === "string" , d = Array . prototype . slice . call ( arguments , 1 ) , f = this ; a = ! b && d . length ? c . extend . apply ( null , [ true , a ] . concat ( d ) ) : a ; if ( b && a . charAt ( 0 ) === "_" ) return f ; b ? this . each ( function ( ) { var e = c . data ( this , "jPlayer" ) , g = e && c . isFunction ( e [ a ] ) ? e [ a ] . apply ( e , d ) : e ; if ( g !== e && g !== h ) { f = g ; return false } } ) : this . each ( function ( ) { var e = c . data ( this , "jPlayer" ) ; if ( e ) { e . option ( a || { } ) . _init ( ) ; e . option ( a || { } ) } else c . data ( this , "jPlayer" , new c . jPlayer ( a , this ) ) } ) ; return f } ; c . jPlayer =
function ( a , b ) { if ( arguments . length ) { this . element = c ( b ) ; this . options = c . extend ( true , { } , this . options , a ) ; var d = this ; this . element . bind ( "remove.jPlayer" , function ( ) { d . destroy ( ) } ) ; this . _init ( ) } } ; c . jPlayer . event = { ready : "jPlayer_ready" , resize : "jPlayer_resize" , error : "jPlayer_error" , warning : "jPlayer_warning" , loadstart : "jPlayer_loadstart" , progress : "jPlayer_progress" , suspend : "jPlayer_suspend" , abort : "jPlayer_abort" , emptied : "jPlayer_emptied" , stalled : "jPlayer_stalled" , play : "jPlayer_play" , pause : "jPlayer_pause" , loadedmetadata : "jPlayer_loadedmetadata" ,
loadeddata : "jPlayer_loadeddata" , waiting : "jPlayer_waiting" , playing : "jPlayer_playing" , canplay : "jPlayer_canplay" , canplaythrough : "jPlayer_canplaythrough" , seeking : "jPlayer_seeking" , seeked : "jPlayer_seeked" , timeupdate : "jPlayer_timeupdate" , ended : "jPlayer_ended" , ratechange : "jPlayer_ratechange" , durationchange : "jPlayer_durationchange" , volumechange : "jPlayer_volumechange" } ; c . jPlayer . htmlEvent = [ "loadstart" , "abort" , "emptied" , "stalled" , "loadedmetadata" , "loadeddata" , "canplaythrough" , "ratechange" ] ; c . jPlayer . pause =
function ( ) { c . each ( c . jPlayer . prototype . instances , function ( a , b ) { b . data ( "jPlayer" ) . status . srcSet && b . jPlayer ( "pause" ) } ) } ; c . jPlayer . timeFormat = { showHour : false , showMin : true , showSec : true , padHour : false , padMin : true , padSec : true , sepHour : ":" , sepMin : ":" , sepSec : "" } ; c . jPlayer . convertTime = function ( a ) { a = new Date ( a * 1E3 ) ; var b = a . getUTCHours ( ) , d = a . getUTCMinutes ( ) ; a = a . getUTCSeconds ( ) ; b = c . jPlayer . timeFormat . padHour && b < 10 ? "0" + b : b ; d = c . jPlayer . timeFormat . padMin && d < 10 ? "0" + d : d ; a = c . jPlayer . timeFormat . padSec && a < 10 ? "0" + a : a ; return ( c . jPlayer . timeFormat . showHour ?
b + c . jPlayer . timeFormat . sepHour : "" ) + ( c . jPlayer . timeFormat . showMin ? d + c . jPlayer . timeFormat . sepMin : "" ) + ( c . jPlayer . timeFormat . showSec ? a + c . jPlayer . timeFormat . sepSec : "" ) } ; c . jPlayer . uaMatch = function ( a ) { a = a . toLowerCase ( ) ; var b = /(opera)(?:.*version)?[ \/]([\w.]+)/ , d = /(msie) ([\w.]+)/ , f = /(mozilla)(?:.*? rv:([\w.]+))?/ ; a = /(webkit)[ \/]([\w.]+)/ . exec ( a ) || b . exec ( a ) || d . exec ( a ) || a . indexOf ( "compatible" ) < 0 && f . exec ( a ) || [ ] ; return { browser : a [ 1 ] || "" , version : a [ 2 ] || "0" } } ; c . jPlayer . browser = { } ; var m = c . jPlayer . uaMatch ( navigator . userAgent ) ;
if ( m . browser ) { c . jPlayer . browser [ m . browser ] = true ; c . jPlayer . browser . version = m . version } c . jPlayer . prototype = { count : 0 , version : { script : "2.0.0" , needFlash : "2.0.0" , flash : "unknown" } , options : { swfPath : "js" , solution : "html, flash" , supplied : "mp3" , preload : "metadata" , volume : 0.8 , muted : false , backgroundColor : "#000000" , cssSelectorAncestor : "#jp_interface_1" , cssSelector : { videoPlay : ".jp-video-play" , play : ".jp-play" , pause : ".jp-pause" , stop : ".jp-stop" , seekBar : ".jp-seek-bar" , playBar : ".jp-play-bar" , mute : ".jp-mute" , unmute : ".jp-unmute" ,
volumeBar : ".jp-volume-bar" , volumeBarValue : ".jp-volume-bar-value" , currentTime : ".jp-current-time" , duration : ".jp-duration" } , idPrefix : "jp" , errorAlerts : false , warningAlerts : false } , instances : { } , status : { src : "" , media : { } , paused : true , format : { } , formatType : "" , waitForPlay : true , waitForLoad : true , srcSet : false , video : false , seekPercent : 0 , currentPercentRelative : 0 , currentPercentAbsolute : 0 , currentTime : 0 , duration : 0 } , _status : { volume : h , muted : false , width : 0 , height : 0 } , internal : { ready : false , instance : h , htmlDlyCmdId : h } , solution : { html : true ,
flash : true } , format : { mp3 : { codec : 'audio/mpeg; codecs="mp3"' , flashCanPlay : true , media : "audio" } , m4a : { codec : 'audio/mp4; codecs="mp4a.40.2"' , flashCanPlay : true , media : "audio" } , oga : { codec : 'audio/ogg; codecs="vorbis"' , flashCanPlay : false , media : "audio" } , wav : { codec : 'audio/wav; codecs="1"' , flashCanPlay : false , media : "audio" } , webma : { codec : 'audio/webm; codecs="vorbis"' , flashCanPlay : false , media : "audio" } , m4v : { codec : 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"' , flashCanPlay : true , media : "video" } , ogv : { codec : 'video/ogg; codecs="theora, vorbis"' ,
flashCanPlay : false , media : "video" } , webmv : { codec : 'video/webm; codecs="vorbis, vp8"' , flashCanPlay : false , media : "video" } } , _init : function ( ) { var a = this ; this . element . empty ( ) ; this . status = c . extend ( { } , this . status , this . _status ) ; this . internal = c . extend ( { } , this . internal ) ; this . formats = [ ] ; this . solutions = [ ] ; this . require = { } ; this . htmlElement = { } ; this . html = { } ; this . html . audio = { } ; this . html . video = { } ; this . flash = { } ; this . css = { } ; this . css . cs = { } ; this . css . jq = { } ; this . status . volume = this . _limitValue ( this . options . volume , 0 , 1 ) ; this . status . muted =
this . options . muted ; this . status . width = this . element . css ( "width" ) ; this . status . height = this . element . css ( "height" ) ; this . element . css ( { "background-color" : this . options . backgroundColor } ) ; c . each ( this . options . supplied . toLowerCase ( ) . split ( "," ) , function ( e , g ) { var i = g . replace ( /^\s+|\s+$/g , "" ) ; if ( a . format [ i ] ) { var j = false ; c . each ( a . formats , function ( n , k ) { if ( i === k ) { j = true ; return false } } ) ; j || a . formats . push ( i ) } } ) ; c . each ( this . options . solution . toLowerCase ( ) . split ( "," ) , function ( e , g ) { var i = g . replace ( /^\s+|\s+$/g , "" ) ; if ( a . solution [ i ] ) { var j =
false ; c . each ( a . solutions , function ( n , k ) { if ( i === k ) { j = true ; return false } } ) ; j || a . solutions . push ( i ) } } ) ; this . internal . instance = "jp_" + this . count ; this . instances [ this . internal . instance ] = this . element ; this . element . attr ( "id" ) === "" && this . element . attr ( "id" , this . options . idPrefix + "_jplayer_" + this . count ) ; this . internal . self = c . extend ( { } , { id : this . element . attr ( "id" ) , jq : this . element } ) ; this . internal . audio = c . extend ( { } , { id : this . options . idPrefix + "_audio_" + this . count , jq : h } ) ; this . internal . video = c . extend ( { } , { id : this . options . idPrefix +
"_video_" + this . count , jq : h } ) ; this . internal . flash = c . extend ( { } , { id : this . options . idPrefix + "_flash_" + this . count , jq : h , swf : this . options . swfPath + ( this . options . swfPath !== "" && this . options . swfPath . slice ( - 1 ) !== "/" ? "/" : "" ) + "Jplayer.swf" } ) ; this . internal . poster = c . extend ( { } , { id : this . options . idPrefix + "_poster_" + this . count , jq : h } ) ; c . each ( c . jPlayer . event , function ( e , g ) { if ( a . options [ e ] !== h ) { a . element . bind ( g + ".jPlayer" , a . options [ e ] ) ; a . options [ e ] = h } } ) ; this . htmlElement . poster = document . createElement ( "img" ) ; this . htmlElement . poster . id =
this . internal . poster . id ; this . htmlElement . poster . onload = function ( ) { if ( ! a . status . video || a . status . waitForPlay ) a . internal . poster . jq . show ( ) } ; this . element . append ( this . htmlElement . poster ) ; this . internal . poster . jq = c ( "#" + this . internal . poster . id ) ; this . internal . poster . jq . css ( { width : this . status . width , height : this . status . height } ) ; this . internal . poster . jq . hide ( ) ; this . require . audio = false ; this . require . video = false ; c . each ( this . formats , function ( e , g ) { a . require [ a . format [ g ] . media ] = true } ) ; this . html . audio . available = false ; if ( this . require . audio ) { this . htmlElement . audio =
document . createElement ( "audio" ) ; this . htmlElement . audio . id = this . internal . audio . id ; this . html . audio . available = ! ! this . htmlElement . audio . canPlayType } this . html . video . available = false ; if ( this . require . video ) { this . htmlElement . video = document . createElement ( "video" ) ; this . htmlElement . video . id = this . internal . video . id ; this . html . video . available = ! ! this . htmlElement . video . canPlayType } this . flash . available = this . _checkForFlash ( 10 ) ; this . html . canPlay = { } ; this . flash . canPlay = { } ; c . each ( this . formats , function ( e , g ) { a . html . canPlay [ g ] =
a . html [ a . format [ g ] . media ] . available && "" !== a . htmlElement [ a . format [ g ] . media ] . canPlayType ( a . format [ g ] . codec ) ; a . flash . canPlay [ g ] = a . format [ g ] . flashCanPlay && a . flash . available } ) ; this . html . desired = false ; this . flash . desired = false ; c . each ( this . solutions , function ( e , g ) { if ( e === 0 ) a [ g ] . desired = true ; else { var i = false , j = false ; c . each ( a . formats , function ( n , k ) { if ( a [ a . solutions [ 0 ] ] . canPlay [ k ] ) if ( a . format [ k ] . media === "video" ) j = true ; else i = true } ) ; a [ g ] . desired = a . require . audio && ! i || a . require . video && ! j } } ) ; this . html . support = { } ;
this . flash . support = { } ; c . each ( this . formats , function ( e , g ) { a . html . support [ g ] = a . html . canPlay [ g ] && a . html . desired ; a . flash . support [ g ] = a . flash . canPlay [ g ] && a . flash . desired } ) ; this . html . used = false ; this . flash . used = false ; c . each ( this . solutions , function ( e , g ) { c . each ( a . formats , function ( i , j ) { if ( a [ g ] . support [ j ] ) { a [ g ] . used = true ; return false } } ) } ) ; this . html . used || this . flash . used || this . _error ( { type : c . jPlayer . error . NO _SOLUTION , context : "{solution:'" + this . options . solution + "', supplied:'" + this . options . supplied + "'}" , message : c . jPlayer . errorMsg . NO _SOLUTION ,
hint : c . jPlayer . errorHint . NO _SOLUTION } ) ; this . html . active = false ; this . html . audio . gate = false ; this . html . video . gate = false ; this . flash . active = false ; this . flash . gate = false ; if ( this . flash . used ) { var b = "id=" + escape ( this . internal . self . id ) + "&vol=" + this . status . volume + "&muted=" + this . status . muted ; if ( c . browser . msie && Number ( c . browser . version ) <= 8 ) { var d = '<object id="' + this . internal . flash . id + '"' ; d += ' classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' ; d += ' codebase="' + document . URL . substring ( 0 , document . URL . indexOf ( ":" ) ) +
'://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"' ; d += ' type="application/x-shockwave-flash"' ; d += ' width="0" height="0">' ; d += "</object>" ; var f = [ ] ; f [ 0 ] = '<param name="movie" value="' + this . internal . flash . swf + '" />' ; f [ 1 ] = '<param name="quality" value="high" />' ; f [ 2 ] = '<param name="FlashVars" value="' + b + '" />' ; f [ 3 ] = '<param name="allowScriptAccess" value="always" />' ; f [ 4 ] = '<param name="bgcolor" value="' + this . options . backgroundColor + '" />' ; b = document . createElement ( d ) ; for ( d = 0 ; d < f . length ; d ++ ) b . appendChild ( document . createElement ( f [ d ] ) ) ;
this . element . append ( b ) } else { f = '<embed name="' + this . internal . flash . id + '" id="' + this . internal . flash . id + '" src="' + this . internal . flash . swf + '"' ; f += ' width="0" height="0" bgcolor="' + this . options . backgroundColor + '"' ; f += ' quality="high" FlashVars="' + b + '"' ; f += ' allowScriptAccess="always"' ; f += ' type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />' ; this . element . append ( f ) } this . internal . flash . jq = c ( "#" + this . internal . flash . id ) ; this . internal . flash . jq . css ( { width : "0px" ,
height : "0px" } ) } if ( this . html . used ) { if ( this . html . audio . available ) { this . _addHtmlEventListeners ( this . htmlElement . audio , this . html . audio ) ; this . element . append ( this . htmlElement . audio ) ; this . internal . audio . jq = c ( "#" + this . internal . audio . id ) } if ( this . html . video . available ) { this . _addHtmlEventListeners ( this . htmlElement . video , this . html . video ) ; this . element . append ( this . htmlElement . video ) ; this . internal . video . jq = c ( "#" + this . internal . video . id ) ; this . internal . video . jq . css ( { width : "0px" , height : "0px" } ) } } this . html . used && ! this . flash . used &&
window . setTimeout ( function ( ) { a . internal . ready = true ; a . version . flash = "n/a" ; a . _trigger ( c . jPlayer . event . ready ) } , 100 ) ; c . each ( this . options . cssSelector , function ( e , g ) { a . _cssSelector ( e , g ) } ) ; this . _updateInterface ( ) ; this . _updateButtons ( false ) ; this . _updateVolume ( this . status . volume ) ; this . _updateMute ( this . status . muted ) ; this . css . jq . videoPlay . length && this . css . jq . videoPlay . hide ( ) ; c . jPlayer . prototype . count ++ } , destroy : function ( ) { this . _resetStatus ( ) ; this . _updateInterface ( ) ; this . _seeked ( ) ; this . css . jq . currentTime . length &&
this . css . jq . currentTime . text ( "" ) ; this . css . jq . duration . length && this . css . jq . duration . text ( "" ) ; this . status . srcSet && this . pause ( ) ; c . each ( this . css . jq , function ( a , b ) { b . unbind ( ".jPlayer" ) } ) ; this . element . removeData ( "jPlayer" ) ; this . element . unbind ( ".jPlayer" ) ; this . element . empty ( ) ; this . instances [ this . internal . instance ] = h } , enable : function ( ) { } , disable : function ( ) { } , _addHtmlEventListeners : function ( a , b ) { var d = this ; a . preload = this . options . preload ; a . muted = this . options . muted ; a . addEventListener ( "progress" , function ( ) { if ( b . gate &&
! d . status . waitForLoad ) { d . _getHtmlStatus ( a ) ; d . _updateInterface ( ) ; d . _trigger ( c . jPlayer . event . progress ) } } , false ) ; a . addEventListener ( "timeupdate" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _getHtmlStatus ( a ) ; d . _updateInterface ( ) ; d . _trigger ( c . jPlayer . event . timeupdate ) } } , false ) ; a . addEventListener ( "durationchange" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . status . duration = this . duration ; d . _getHtmlStatus ( a ) ; d . _updateInterface ( ) ; d . _trigger ( c . jPlayer . event . durationchange ) } } , false ) ; a . addEventListener ( "play" ,
function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _updateButtons ( true ) ; d . _trigger ( c . jPlayer . event . play ) } } , false ) ; a . addEventListener ( "playing" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _updateButtons ( true ) ; d . _seeked ( ) ; d . _trigger ( c . jPlayer . event . playing ) } } , false ) ; a . addEventListener ( "pause" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _updateButtons ( false ) ; d . _trigger ( c . jPlayer . event . pause ) } } , false ) ; a . addEventListener ( "waiting" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _seeking ( ) ; d . _trigger ( c . jPlayer . event . waiting ) } } ,
false ) ; a . addEventListener ( "canplay" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { a . volume = d . _volumeFix ( d . status . volume ) ; d . _trigger ( c . jPlayer . event . canplay ) } } , false ) ; a . addEventListener ( "seeking" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _seeking ( ) ; d . _trigger ( c . jPlayer . event . seeking ) } } , false ) ; a . addEventListener ( "seeked" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _seeked ( ) ; d . _trigger ( c . jPlayer . event . seeked ) } } , false ) ; a . addEventListener ( "suspend" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _seeked ( ) ;
d . _trigger ( c . jPlayer . event . suspend ) } } , false ) ; a . addEventListener ( "ended" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { if ( ! c . jPlayer . browser . webkit ) d . htmlElement . media . currentTime = 0 ; d . htmlElement . media . pause ( ) ; d . _updateButtons ( false ) ; d . _getHtmlStatus ( a , true ) ; d . _updateInterface ( ) ; d . _trigger ( c . jPlayer . event . ended ) } } , false ) ; a . addEventListener ( "error" , function ( ) { if ( b . gate && ! d . status . waitForLoad ) { d . _updateButtons ( false ) ; d . _seeked ( ) ; if ( d . status . srcSet ) { d . status . waitForLoad = true ; d . status . waitForPlay = true ;
d . status . video && d . internal . video . jq . css ( { width : "0px" , height : "0px" } ) ; d . _validString ( d . status . media . poster ) && d . internal . poster . jq . show ( ) ; d . css . jq . videoPlay . length && d . css . jq . videoPlay . show ( ) ; d . _error ( { type : c . jPlayer . error . URL , context : d . status . src , message : c . jPlayer . errorMsg . URL , hint : c . jPlayer . errorHint . URL } ) } } } , false ) ; c . each ( c . jPlayer . htmlEvent , function ( f , e ) { a . addEventListener ( this , function ( ) { b . gate && ! d . status . waitForLoad && d . _trigger ( c . jPlayer . event [ e ] ) } , false ) } ) } , _getHtmlStatus : function ( a , b ) { var d = 0 ,
f = 0 , e = 0 , g = 0 ; d = a . currentTime ; f = this . status . duration > 0 ? 100 * d / this . status . duration : 0 ; if ( typeof a . seekable === "object" && a . seekable . length > 0 ) { e = this . status . duration > 0 ? 100 * a . seekable . end ( a . seekable . length - 1 ) / this . status . duration : 100 ; g = 100 * a . currentTime / a . seekable . end ( a . seekable . length - 1 ) } else { e = 100 ; g = f } if ( b ) f = g = d = 0 ; this . status . seekPercent = e ; this . status . currentPercentRelative = g ; this . status . currentPercentAbsolute = f ; this . status . currentTime = d } , _resetStatus : function ( ) { this . status = c . extend ( { } , this . status , c . jPlayer . prototype . status ) } ,
_trigger : function ( a , b , d ) { a = c . Event ( a ) ; a . jPlayer = { } ; a . jPlayer . version = c . extend ( { } , this . version ) ; a . jPlayer . status = c . extend ( true , { } , this . status ) ; a . jPlayer . html = c . extend ( true , { } , this . html ) ; a . jPlayer . flash = c . extend ( true , { } , this . flash ) ; if ( b ) a . jPlayer . error = c . extend ( { } , b ) ; if ( d ) a . jPlayer . warning = c . extend ( { } , d ) ; this . element . trigger ( a ) } , jPlayerFlashEvent : function ( a , b ) { if ( a === c . jPlayer . event . ready && ! this . internal . ready ) { this . internal . ready = true ; this . version . flash = b . version ; this . version . needFlash !== this . version . flash &&
this . _error ( { type : c . jPlayer . error . VERSION , context : this . version . flash , message : c . jPlayer . errorMsg . VERSION + this . version . flash , hint : c . jPlayer . errorHint . VERSION } ) ; this . _trigger ( a ) } if ( this . flash . gate ) switch ( a ) { case c . jPlayer . event . progress : this . _getFlashStatus ( b ) ; this . _updateInterface ( ) ; this . _trigger ( a ) ; break ; case c . jPlayer . event . timeupdate : this . _getFlashStatus ( b ) ; this . _updateInterface ( ) ; this . _trigger ( a ) ; break ; case c . jPlayer . event . play : this . _seeked ( ) ; this . _updateButtons ( true ) ; this . _trigger ( a ) ; break ; case c . jPlayer . event . pause : this . _updateButtons ( false ) ;
this . _trigger ( a ) ; break ; case c . jPlayer . event . ended : this . _updateButtons ( false ) ; this . _trigger ( a ) ; break ; case c . jPlayer . event . error : this . status . waitForLoad = true ; this . status . waitForPlay = true ; this . status . video && this . internal . flash . jq . css ( { width : "0px" , height : "0px" } ) ; this . _validString ( this . status . media . poster ) && this . internal . poster . jq . show ( ) ; this . css . jq . videoPlay . length && this . css . jq . videoPlay . show ( ) ; this . status . video ? this . _flash _setVideo ( this . status . media ) : this . _flash _setAudio ( this . status . media ) ; this . _error ( { type : c . jPlayer . error . URL ,
context : b . src , message : c . jPlayer . errorMsg . URL , hint : c . jPlayer . errorHint . URL } ) ; break ; case c . jPlayer . event . seeking : this . _seeking ( ) ; this . _trigger ( a ) ; break ; case c . jPlayer . event . seeked : this . _seeked ( ) ; this . _trigger ( a ) ; break ; default : this . _trigger ( a ) } return false } , _getFlashStatus : function ( a ) { this . status . seekPercent = a . seekPercent ; this . status . currentPercentRelative = a . currentPercentRelative ; this . status . currentPercentAbsolute = a . currentPercentAbsolute ; this . status . currentTime = a . currentTime ; this . status . duration = a . duration } ,
_updateButtons : function ( a ) { this . status . paused = ! a ; if ( this . css . jq . play . length && this . css . jq . pause . length ) if ( a ) { this . css . jq . play . hide ( ) ; this . css . jq . pause . show ( ) } else { this . css . jq . play . show ( ) ; this . css . jq . pause . hide ( ) } } , _updateInterface : function ( ) { this . css . jq . seekBar . length && this . css . jq . seekBar . width ( this . status . seekPercent + "%" ) ; this . css . jq . playBar . length && this . css . jq . playBar . width ( this . status . currentPercentRelative + "%" ) ; this . css . jq . currentTime . length && this . css . jq . currentTime . text ( c . jPlayer . convertTime ( this . status . currentTime ) ) ;
this . css . jq . duration . length && this . css . jq . duration . text ( c . jPlayer . convertTime ( this . status . duration ) ) } , _seeking : function ( ) { this . css . jq . seekBar . length && this . css . jq . seekBar . addClass ( "jp-seeking-bg" ) } , _seeked : function ( ) { this . css . jq . seekBar . length && this . css . jq . seekBar . removeClass ( "jp-seeking-bg" ) } , setMedia : function ( a ) { var b = this ; this . _seeked ( ) ; clearTimeout ( this . internal . htmlDlyCmdId ) ; var d = this . html . audio . gate , f = this . html . video . gate , e = false ; c . each ( this . formats , function ( g , i ) { var j = b . format [ i ] . media === "video" ;
c . each ( b . solutions , function ( n , k ) { if ( b [ k ] . support [ i ] && b . _validString ( a [ i ] ) ) { var l = k === "html" ; if ( j ) if ( l ) { b . html . audio . gate = false ; b . html . video . gate = true ; b . flash . gate = false } else { b . html . audio . gate = false ; b . html . video . gate = false ; b . flash . gate = true } else if ( l ) { b . html . audio . gate = true ; b . html . video . gate = false ; b . flash . gate = false } else { b . html . audio . gate = false ; b . html . video . gate = false ; b . flash . gate = true } if ( b . flash . active || b . html . active && b . flash . gate || d === b . html . audio . gate && f === b . html . video . gate ) b . clearMedia ( ) ; else if ( d !==
b . html . audio . gate && f !== b . html . video . gate ) { b . _html _pause ( ) ; b . status . video && b . internal . video . jq . css ( { width : "0px" , height : "0px" } ) ; b . _resetStatus ( ) } if ( j ) { if ( l ) { b . _html _setVideo ( a ) ; b . html . active = true ; b . flash . active = false } else { b . _flash _setVideo ( a ) ; b . html . active = false ; b . flash . active = true } b . css . jq . videoPlay . length && b . css . jq . videoPlay . show ( ) ; b . status . video = true } else { if ( l ) { b . _html _setAudio ( a ) ; b . html . active = true ; b . flash . active = false } else { b . _flash _setAudio ( a ) ; b . html . active = false ; b . flash . active = true } b . css . jq . videoPlay . length &&
b . css . jq . videoPlay . hide ( ) ; b . status . video = false } e = true ; return false } } ) ; if ( e ) return false } ) ; if ( e ) { if ( this . _validString ( a . poster ) ) if ( this . htmlElement . poster . src !== a . poster ) this . htmlElement . poster . src = a . poster ; else this . internal . poster . jq . show ( ) ; else this . internal . poster . jq . hide ( ) ; this . status . srcSet = true ; this . status . media = c . extend ( { } , a ) ; this . _updateButtons ( false ) ; this . _updateInterface ( ) } else { this . status . srcSet && ! this . status . waitForPlay && this . pause ( ) ; this . html . audio . gate = false ; this . html . video . gate = false ;
this . flash . gate = false ; this . html . active = false ; this . flash . active = false ; this . _resetStatus ( ) ; this . _updateInterface ( ) ; this . _updateButtons ( false ) ; this . internal . poster . jq . hide ( ) ; this . html . used && this . require . video && this . internal . video . jq . css ( { width : "0px" , height : "0px" } ) ; this . flash . used && this . internal . flash . jq . css ( { width : "0px" , height : "0px" } ) ; this . _error ( { type : c . jPlayer . error . NO _SUPPORT , context : "{supplied:'" + this . options . supplied + "'}" , message : c . jPlayer . errorMsg . NO _SUPPORT , hint : c . jPlayer . errorHint . NO _SUPPORT } ) } } ,
clearMedia : function ( ) { this . _resetStatus ( ) ; this . _updateButtons ( false ) ; this . internal . poster . jq . hide ( ) ; clearTimeout ( this . internal . htmlDlyCmdId ) ; if ( this . html . active ) this . _html _clearMedia ( ) ; else this . flash . active && this . _flash _clearMedia ( ) } , load : function ( ) { if ( this . status . srcSet ) if ( this . html . active ) this . _html _load ( ) ; else this . flash . active && this . _flash _load ( ) ; else this . _urlNotSetError ( "load" ) } , play : function ( a ) { a = typeof a === "number" ? a : NaN ; if ( this . status . srcSet ) if ( this . html . active ) this . _html _play ( a ) ; else this . flash . active &&
this . _flash _play ( a ) ; else this . _urlNotSetError ( "play" ) } , videoPlay : function ( ) { this . play ( ) } , pause : function ( a ) { a = typeof a === "number" ? a : NaN ; if ( this . status . srcSet ) if ( this . html . active ) this . _html _pause ( a ) ; else this . flash . active && this . _flash _pause ( a ) ; else this . _urlNotSetError ( "pause" ) } , pauseOthers : function ( ) { var a = this ; c . each ( this . instances , function ( b , d ) { a . element !== d && d . data ( "jPlayer" ) . status . srcSet && d . jPlayer ( "pause" ) } ) } , stop : function ( ) { if ( this . status . srcSet ) if ( this . html . active ) this . _html _pause ( 0 ) ; else this . flash . active &&
this . _flash _pause ( 0 ) ; else this . _urlNotSetError ( "stop" ) } , playHead : function ( a ) { a = this . _limitValue ( a , 0 , 100 ) ; if ( this . status . srcSet ) if ( this . html . active ) this . _html _playHead ( a ) ; else this . flash . active && this . _flash _playHead ( a ) ; else this . _urlNotSetError ( "playHead" ) } , mute : function ( ) { this . status . muted = true ; this . html . used && this . _html _mute ( true ) ; this . flash . used && this . _flash _mute ( true ) ; this . _updateMute ( true ) ; this . _updateVolume ( 0 ) ; this . _trigger ( c . jPlayer . event . volumechange ) } , unmute : function ( ) { this . status . muted = false ;
this . html . used && this . _html _mute ( false ) ; this . flash . used && this . _flash _mute ( false ) ; this . _updateMute ( false ) ; this . _updateVolume ( this . status . volume ) ; this . _trigger ( c . jPlayer . event . volumechange ) } , _updateMute : function ( a ) { if ( this . css . jq . mute . length && this . css . jq . unmute . length ) if ( a ) { this . css . jq . mute . hide ( ) ; this . css . jq . unmute . show ( ) } else { this . css . jq . mute . show ( ) ; this . css . jq . unmute . hide ( ) } } , volume : function ( a ) { a = this . _limitValue ( a , 0 , 1 ) ; this . status . volume = a ; this . html . used && this . _html _volume ( a ) ; this . flash . used && this . _flash _volume ( a ) ;
this . status . muted || this . _updateVolume ( a ) ; this . _trigger ( c . jPlayer . event . volumechange ) } , volumeBar : function ( a ) { if ( ! this . status . muted && this . css . jq . volumeBar ) { var b = this . css . jq . volumeBar . offset ( ) ; a = a . pageX - b . left ; b = this . css . jq . volumeBar . width ( ) ; this . volume ( a / b ) } } , volumeBarValue : function ( a ) { this . volumeBar ( a ) } , _updateVolume : function ( a ) { this . css . jq . volumeBarValue . length && this . css . jq . volumeBarValue . width ( a * 100 + "%" ) } , _volumeFix : function ( a ) { var b = 0.0010 * Math . random ( ) ; return a + ( a < 0.5 ? b : - b ) } , _cssSelectorAncestor : function ( a ,
b ) { this . options . cssSelectorAncestor = a ; b && c . each ( this . options . cssSelector , function ( d , f ) { self . _cssSelector ( d , f ) } ) } , _cssSelector : function ( a , b ) { var d = this ; if ( typeof b === "string" ) if ( c . jPlayer . prototype . options . cssSelector [ a ] ) { this . css . jq [ a ] && this . css . jq [ a ] . length && this . css . jq [ a ] . unbind ( ".jPlayer" ) ; this . options . cssSelector [ a ] = b ; this . css . cs [ a ] = this . options . cssSelectorAncestor + " " + b ; this . css . jq [ a ] = b ? c ( this . css . cs [ a ] ) : [ ] ; this . css . jq [ a ] . length && this . css . jq [ a ] . bind ( "click.jPlayer" , function ( f ) { d [ a ] ( f ) ; c ( this ) . blur ( ) ;
return false } ) ; b && this . css . jq [ a ] . length !== 1 && this . _warning ( { type : c . jPlayer . warning . CSS _SELECTOR _COUNT , context : this . css . cs [ a ] , message : c . jPlayer . warningMsg . CSS _SELECTOR _COUNT + this . css . jq [ a ] . length + " found for " + a + " method." , hint : c . jPlayer . warningHint . CSS _SELECTOR _COUNT } ) } else this . _warning ( { type : c . jPlayer . warning . CSS _SELECTOR _METHOD , context : a , message : c . jPlayer . warningMsg . CSS _SELECTOR _METHOD , hint : c . jPlayer . warningHint . CSS _SELECTOR _METHOD } ) ; else this . _warning ( { type : c . jPlayer . warning . CSS _SELECTOR _STRING ,
context : b , message : c . jPlayer . warningMsg . CSS _SELECTOR _STRING , hint : c . jPlayer . warningHint . CSS _SELECTOR _STRING } ) } , seekBar : function ( a ) { if ( this . css . jq . seekBar ) { var b = this . css . jq . seekBar . offset ( ) ; a = a . pageX - b . left ; b = this . css . jq . seekBar . width ( ) ; this . playHead ( 100 * a / b ) } } , playBar : function ( a ) { this . seekBar ( a ) } , currentTime : function ( ) { } , duration : function ( ) { } , option : function ( a , b ) { var d = a ; if ( arguments . length === 0 ) return c . extend ( true , { } , this . options ) ; if ( typeof a === "string" ) { var f = a . split ( "." ) ; if ( b === h ) { for ( var e = c . extend ( true ,
{ } , this . options ) , g = 0 ; g < f . length ; g ++ ) if ( e [ f [ g ] ] !== h ) e = e [ f [ g ] ] ; else { this . _warning ( { type : c . jPlayer . warning . OPTION _KEY , context : a , message : c . jPlayer . warningMsg . OPTION _KEY , hint : c . jPlayer . warningHint . OPTION _KEY } ) ; return h } return e } e = d = { } ; for ( g = 0 ; g < f . length ; g ++ ) if ( g < f . length - 1 ) { e [ f [ g ] ] = { } ; e = e [ f [ g ] ] } else e [ f [ g ] ] = b } this . _setOptions ( d ) ; return this } , _setOptions : function ( a ) { var b = this ; c . each ( a , function ( d , f ) { b . _setOption ( d , f ) } ) ; return this } , _setOption : function ( a , b ) { var d = this ; switch ( a ) { case "cssSelectorAncestor" : this . options [ a ] =
b ; c . each ( d . options . cssSelector , function ( f , e ) { d . _cssSelector ( f , e ) } ) ; break ; case "cssSelector" : c . each ( b , function ( f , e ) { d . _cssSelector ( f , e ) } ) } return this } , resize : function ( a ) { this . html . active && this . _resizeHtml ( a ) ; this . flash . active && this . _resizeFlash ( a ) ; this . _trigger ( c . jPlayer . event . resize ) } , _resizePoster : function ( ) { } , _resizeHtml : function ( ) { } , _resizeFlash : function ( a ) { this . internal . flash . jq . css ( { width : a . width , height : a . height } ) } , _html _initMedia : function ( ) { this . status . srcSet && ! this . status . waitForPlay && this . htmlElement . media . pause ( ) ;
this . options . preload !== "none" && this . _html _load ( ) ; this . _trigger ( c . jPlayer . event . timeupdate ) } , _html _setAudio : function ( a ) { var b = this ; c . each ( this . formats , function ( d , f ) { if ( b . html . support [ f ] && a [ f ] ) { b . status . src = a [ f ] ; b . status . format [ f ] = true ; b . status . formatType = f ; return false } } ) ; this . htmlElement . media = this . htmlElement . audio ; this . _html _initMedia ( ) } , _html _setVideo : function ( a ) { var b = this ; c . each ( this . formats , function ( d , f ) { if ( b . html . support [ f ] && a [ f ] ) { b . status . src = a [ f ] ; b . status . format [ f ] = true ; b . status . formatType =
f ; return false } } ) ; this . htmlElement . media = this . htmlElement . video ; this . _html _initMedia ( ) } , _html _clearMedia : function ( ) { if ( this . htmlElement . media ) { this . htmlElement . media . id === this . internal . video . id && this . internal . video . jq . css ( { width : "0px" , height : "0px" } ) ; this . htmlElement . media . pause ( ) ; this . htmlElement . media . src = "" ; c . browser . msie && Number ( c . browser . version ) >= 9 || this . htmlElement . media . load ( ) } } , _html _load : function ( ) { if ( this . status . waitForLoad ) { this . status . waitForLoad = false ; this . htmlElement . media . src = this . status . src ;
try { this . htmlElement . media . load ( ) } catch ( a ) { } } clearTimeout ( this . internal . htmlDlyCmdId ) } , _html _play : function ( a ) { var b = this ; this . _html _load ( ) ; this . htmlElement . media . play ( ) ; if ( ! isNaN ( a ) ) try { this . htmlElement . media . currentTime = a } catch ( d ) { this . internal . htmlDlyCmdId = setTimeout ( function ( ) { b . play ( a ) } , 100 ) ; return } this . _html _checkWaitForPlay ( ) } , _html _pause : function ( a ) { var b = this ; a > 0 ? this . _html _load ( ) : clearTimeout ( this . internal . htmlDlyCmdId ) ; this . htmlElement . media . pause ( ) ; if ( ! isNaN ( a ) ) try { this . htmlElement . media . currentTime =
a } catch ( d ) { this . internal . htmlDlyCmdId = setTimeout ( function ( ) { b . pause ( a ) } , 100 ) ; return } a > 0 && this . _html _checkWaitForPlay ( ) } , _html _playHead : function ( a ) { var b = this ; this . _html _load ( ) ; try { if ( typeof this . htmlElement . media . seekable === "object" && this . htmlElement . media . seekable . length > 0 ) this . htmlElement . media . currentTime = a * this . htmlElement . media . seekable . end ( this . htmlElement . media . seekable . length - 1 ) / 100 ; else if ( this . htmlElement . media . duration > 0 && ! isNaN ( this . htmlElement . media . duration ) ) this . htmlElement . media . currentTime =
a * this . htmlElement . media . duration / 100 ; else throw "e" ; } catch ( d ) { this . internal . htmlDlyCmdId = setTimeout ( function ( ) { b . playHead ( a ) } , 100 ) ; return } this . status . waitForLoad || this . _html _checkWaitForPlay ( ) } , _html _checkWaitForPlay : function ( ) { if ( this . status . waitForPlay ) { this . status . waitForPlay = false ; this . css . jq . videoPlay . length && this . css . jq . videoPlay . hide ( ) ; if ( this . status . video ) { this . internal . poster . jq . hide ( ) ; this . internal . video . jq . css ( { width : this . status . width , height : this . status . height } ) } } } , _html _volume : function ( a ) { if ( this . html . audio . available ) this . htmlElement . audio . volume =
a ; if ( this . html . video . available ) this . htmlElement . video . volume = a } , _html _mute : function ( a ) { if ( this . html . audio . available ) this . htmlElement . audio . muted = a ; if ( this . html . video . available ) this . htmlElement . video . muted = a } , _flash _setAudio : function ( a ) { var b = this ; try { c . each ( this . formats , function ( f , e ) { if ( b . flash . support [ e ] && a [ e ] ) { switch ( e ) { case "m4a" : b . _getMovie ( ) . fl _setAudio _m4a ( a [ e ] ) ; break ; case "mp3" : b . _getMovie ( ) . fl _setAudio _mp3 ( a [ e ] ) } b . status . src = a [ e ] ; b . status . format [ e ] = true ; b . status . formatType = e ; return false } } ) ;
if ( this . options . preload === "auto" ) { this . _flash _load ( ) ; this . status . waitForLoad = false } } catch ( d ) { this . _flashError ( d ) } } , _flash _setVideo : function ( a ) { var b = this ; try { c . each ( this . formats , function ( f , e ) { if ( b . flash . support [ e ] && a [ e ] ) { switch ( e ) { case "m4v" : b . _getMovie ( ) . fl _setVideo _m4v ( a [ e ] ) } b . status . src = a [ e ] ; b . status . format [ e ] = true ; b . status . formatType = e ; return false } } ) ; if ( this . options . preload === "auto" ) { this . _flash _load ( ) ; this . status . waitForLoad = false } } catch ( d ) { this . _flashError ( d ) } } , _flash _clearMedia : function ( ) { this . internal . flash . jq . css ( { width : "0px" ,
height : "0px" } ) ; try { this . _getMovie ( ) . fl _clearMedia ( ) } catch ( a ) { this . _flashError ( a ) } } , _flash _load : function ( ) { try { this . _getMovie ( ) . fl _load ( ) } catch ( a ) { this . _flashError ( a ) } this . status . waitForLoad = false } , _flash _play : function ( a ) { try { this . _getMovie ( ) . fl _play ( a ) } catch ( b ) { this . _flashError ( b ) } this . status . waitForLoad = false ; this . _flash _checkWaitForPlay ( ) } , _flash _pause : function ( a ) { try { this . _getMovie ( ) . fl _pause ( a ) } catch ( b ) { this . _flashError ( b ) } if ( a > 0 ) { this . status . waitForLoad = false ; this . _flash _checkWaitForPlay ( ) } } ,
_flash _playHead : function ( a ) { try { this . _getMovie ( ) . fl _play _head ( a ) } catch ( b ) { this . _flashError ( b ) } this . status . waitForLoad || this . _flash _checkWaitForPlay ( ) } , _flash _checkWaitForPlay : function ( ) { if ( this . status . waitForPlay ) { this . status . waitForPlay = false ; this . css . jq . videoPlay . length && this . css . jq . videoPlay . hide ( ) ; if ( this . status . video ) { this . internal . poster . jq . hide ( ) ; this . internal . flash . jq . css ( { width : this . status . width , height : this . status . height } ) } } } , _flash _volume : function ( a ) { try { this . _getMovie ( ) . fl _volume ( a ) } catch ( b ) { this . _flashError ( b ) } } ,
_flash _mute : function ( a ) { try { this . _getMovie ( ) . fl _mute ( a ) } catch ( b ) { this . _flashError ( b ) } } , _getMovie : function ( ) { return document [ this . internal . flash . id ] } , _checkForFlash : function ( a ) { var b = false , d ; if ( window . ActiveXObject ) try { new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash." + a ) ; b = true } catch ( f ) { } else if ( navigator . plugins && navigator . mimeTypes . length > 0 ) if ( d = navigator . plugins [ "Shockwave Flash" ] ) if ( navigator . plugins [ "Shockwave Flash" ] . description . replace ( /.*\s(\d+\.\d+).*/ , "$1" ) >= a ) b = true ; return c . browser . msie &&
Number ( c . browser . version ) >= 9 ? false : b } , _validString : function ( a ) { return a && typeof a === "string" } , _limitValue : function ( a , b , d ) { return a < b ? b : a > d ? d : a } , _urlNotSetError : function ( a ) { this . _error ( { type : c . jPlayer . error . URL _NOT _SET , context : a , message : c . jPlayer . errorMsg . URL _NOT _SET , hint : c . jPlayer . errorHint . URL _NOT _SET } ) } , _flashError : function ( a ) { this . _error ( { type : c . jPlayer . error . FLASH , context : this . internal . flash . swf , message : c . jPlayer . errorMsg . FLASH + a . message , hint : c . jPlayer . errorHint . FLASH } ) } , _error : function ( a ) { this . _trigger ( c . jPlayer . event . error ,
a ) ; if ( this . options . errorAlerts ) this . _alert ( "Error!" + ( a . message ? "\n\n" + a . message : "" ) + ( a . hint ? "\n\n" + a . hint : "" ) + "\n\nContext: " + a . context ) } , _warning : function ( a ) { this . _trigger ( c . jPlayer . event . warning , h , a ) ; if ( this . options . errorAlerts ) this . _alert ( "Warning!" + ( a . message ? "\n\n" + a . message : "" ) + ( a . hint ? "\n\n" + a . hint : "" ) + "\n\nContext: " + a . context ) } , _alert : function ( a ) { alert ( "jPlayer " + this . version . script + " : id='" + this . internal . self . id + "' : " + a ) } } ; c . jPlayer . error = { FLASH : "e_flash" , NO _SOLUTION : "e_no_solution" , NO _SUPPORT : "e_no_support" ,
URL : "e_url" , URL _NOT _SET : "e_url_not_set" , VERSION : "e_version" } ; c . jPlayer . errorMsg = { FLASH : "jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: " , NO _SOLUTION : "No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used." , NO _SUPPORT : "It is not possible to play any media format provided in setMedia() on this browser using your current options." , URL : "Media URL could not be loaded." , URL _NOT _SET : "Attempt to issue media playback commands, while no media url is set." ,
VERSION : "jPlayer " + c . jPlayer . prototype . version . script + " needs Jplayer.swf version " + c . jPlayer . prototype . version . needFlash + " but found " } ; c . jPlayer . errorHint = { FLASH : "Check your swfPath option and that Jplayer.swf is there." , NO _SOLUTION : "Review the jPlayer options: support and supplied." , NO _SUPPORT : "Video or audio formats defined in the supplied option are missing." , URL : "Check media URL is valid." , URL _NOT _SET : "Use setMedia() to set the media URL." , VERSION : "Update jPlayer files." } ; c . jPlayer . warning =
{ CSS _SELECTOR _COUNT : "e_css_selector_count" , CSS _SELECTOR _METHOD : "e_css_selector_method" , CSS _SELECTOR _STRING : "e_css_selector_string" , OPTION _KEY : "e_option_key" } ; c . jPlayer . warningMsg = { CSS _SELECTOR _COUNT : "The number of methodCssSelectors found did not equal one: " , CSS _SELECTOR _METHOD : "The methodName given in jPlayer('cssSelector') is not a valid jPlayer method." , CSS _SELECTOR _STRING : "The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty." , OPTION _KEY : "The option requested in jPlayer('option') is undefined." } ;
2013-02-27 15:39:05 +00:00
c . jPlayer . warningHint = { CSS _SELECTOR _COUNT : "Check your css selector and the ancestor." , CSS _SELECTOR _METHOD : "Check your method name." , CSS _SELECTOR _STRING : "Check your css selector is a string." , OPTION _KEY : "Check your option name." } } ) ( jQuery ) ;