/*! jplayer 2.9.2 for jquery ~ (c) 2009-2014 happyworm ltd ~ mit license */ ! function(a, b) { "function" == typeof define && define.amd ? define(["jquery"], b) : b("object" == typeof exports ? require("jquery") : a.jquery ? a.jquery : a.zepto) }(this, function(a, b) { a.fn.jplayer = function(c) { var d = "jplayer", e = "string" == typeof c, f = array.prototype.slice.call(arguments, 1), g = this; return c = !e && f.length ? a.extend.apply(null, [!0, c].concat(f)) : c, e && "_" === c.charat(0) ? g : (this.each(e ? function() { var e = a(this).data(d), h = e && a.isfunction(e[c]) ? e[c].apply(e, f) : e; return h !== e && h !== b ? (g = h, !1) : void 0 } : function() { var b = a(this).data(d); b ? b.option(c || {}) : a(this).data(d, new a.jplayer(c, this)) }), g) }, a.jplayer = function(b, c) { if (arguments.length) { this.element = a(c), this.options = a.extend(!0, {}, this.options, b); var d = this; this.element.bind("remove.jplayer", function() { d.destroy() }), this._init() } }, "function" != typeof a.fn.stop && (a.fn.stop = function() {}), a.jplayer.emulatemethods = "load play pause", a.jplayer.emulatestatus = "src readystate networkstate currenttime duration paused ended playbackrate", a.jplayer.emulateoptions = "muted volume", a.jplayer.reservedevent = "ready flashreset resize repeat error warning", a.jplayer.event = {}, a.each(["ready", "setmedia", "flashreset", "resize", "repeat", "click", "error", "warning", "loadstart", "progress", "suspend", "abort", "emptied", "stalled", "play", "pause", "loadedmetadata", "loadeddata", "waiting", "playing", "canplay", "canplaythrough", "seeking", "seeked", "timeupdate", "ended", "ratechange", "durationchange", "volumechange"], function() { a.jplayer.event[this] = "jplayer_" + this }), a.jplayer.htmlevent = ["loadstart", "abort", "emptied", "stalled", "loadedmetadata", "canplay", "canplaythrough"], a.jplayer.pause = function() { a.jplayer.prototype.destroyremoved(), a.each(a.jplayer.prototype.instances, function(a, b) { b.data("jplayer").status.srcset && b.jplayer("pause") }) }, a.jplayer.timeformat = { showhour: !1, showmin: !0, showsec: !0, padhour: !1, padmin: !0, padsec: !0, sephour: ":", sepmin: ":", sepsec: "" }; var c = function() { this.init() }; c.prototype = { init: function() { this.options = { timeformat: a.jplayer.timeformat } }, time: function(a) { a = a && "number" == typeof a ? a : 0; var b = new date(1e3 * a), c = b.getutchours(), d = this.options.timeformat.showhour ? b.getutcminutes() : b.getutcminutes() + 60 * c, e = this.options.timeformat.showmin ? b.getutcseconds() : b.getutcseconds() + 60 * d, f = this.options.timeformat.padhour && 10 > c ? "0" + c : c, g = this.options.timeformat.padmin && 10 > d ? "0" + d : d, h = this.options.timeformat.padsec && 10 > e ? "0" + e : e, i = ""; return i += this.options.timeformat.showhour ? f + this.options.timeformat.sephour : "", i += this.options.timeformat.showmin ? g + this.options.timeformat.sepmin : "", i += this.options.timeformat.showsec ? h + this.options.timeformat.sepsec : "" } }; var d = new c; a.jplayer.converttime = function(a) { return d.time(a) }, a.jplayer.uabrowser = function(a) { var b = a.tolowercase(), c = /(webkit)[ \/]([\w.]+)/, d = /(opera)(?:.*version)?[ \/]([\w.]+)/, e = /(msie) ([\w.]+)/, f = /(mozilla)(?:.*? rv:([\w.]+))?/, g = c.exec(b) || d.exec(b) || e.exec(b) || b.indexof("compatible") < 0 && f.exec(b) || []; return { browser: g[1] || "", version: g[2] || "0" } }, a.jplayer.uaplatform = function(a) { var b = a.tolowercase(), c = /(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/, d = /(ipad|playbook)/, e = /(android)/, f = /(mobile)/, g = c.exec(b) || [], h = d.exec(b) || !f.exec(b) && e.exec(b) || []; return g[1] && (g[1] = g[1].replace(/\s/g, "_")), { platform: g[1] || "", tablet: h[1] || "" } }, a.jplayer.browser = {}, a.jplayer.platform = {}; var e = a.jplayer.uabrowser(navigator.useragent); e.browser && (a.jplayer.browser[e.browser] = !0, a.jplayer.browser.version = e.version); var f = a.jplayer.uaplatform(navigator.useragent); f.platform && (a.jplayer.platform[f.platform] = !0, a.jplayer.platform.mobile = !f.tablet, a.jplayer.platform.tablet = !!f.tablet), a.jplayer.getdocmode = function() { var b; return a.jplayer.browser.msie && (document.documentmode ? b = document.documentmode : (b = 5, document.compatmode && "css1compat" === document.compatmode && (b = 7))), b }, a.jplayer.browser.documentmode = a.jplayer.getdocmode(), a.jplayer.nativefeatures = { init: function() { var a, b, c, d = document, e = d.createelement("video"), f = { w3c: ["fullscreenenabled", "fullscreenelement", "requestfullscreen", "exitfullscreen", "fullscreenchange", "fullscreenerror"], moz: ["mozfullscreenenabled", "mozfullscreenelement", "mozrequestfullscreen", "mozcancelfullscreen", "mozfullscreenchange", "mozfullscreenerror"], webkit: ["", "webkitcurrentfullscreenelement", "webkitrequestfullscreen", "webkitcancelfullscreen", "webkitfullscreenchange", ""], webkitvideo: ["webkitsupportsfullscreen", "webkitdisplayingfullscreen", "webkitenterfullscreen", "webkitexitfullscreen", "", ""], ms: ["", "msfullscreenelement", "msrequestfullscreen", "msexitfullscreen", "msfullscreenchange", "msfullscreenerror"] }, g = ["w3c", "moz", "webkit", "webkitvideo", "ms"]; for (this.fullscreen = a = { support: { w3c: !!d[f.w3c[0]], moz: !!d[f.moz[0]], webkit: "function" == typeof d[f.webkit[3]], webkitvideo: "function" == typeof e[f.webkitvideo[2]], ms: "function" == typeof e[f.ms[2]] }, used: {} }, b = 0, c = g.length; c > b; b++) { var h = g[b]; if (a.support[h]) { a.spec = h, a.used[h] = !0; break } } if (a.spec) { var i = f[a.spec]; a.api = { fullscreenenabled: !0, fullscreenelement: function(a) { return a = a ? a : d, a[i[1]] }, requestfullscreen: function(a) { return a[i[2]]() }, exitfullscreen: function(a) { return a = a ? a : d, a[i[3]]() } }, a.event = { fullscreenchange: i[4], fullscreenerror: i[5] } } else a.api = { fullscreenenabled: !1, fullscreenelement: function() { return null }, requestfullscreen: function() {}, exitfullscreen: function() {} }, a.event = {} } }, a.jplayer.nativefeatures.init(), a.jplayer.focus = null, a.jplayer.keyignoreelementnames = "a input textarea select button"; var g = function(b) { var c, d = a.jplayer.focus; d && (a.each(a.jplayer.keyignoreelementnames.split(/\s+/g), function(a, d) { return b.target.nodename.touppercase() === d.touppercase() ? (c = !0, !1) : void 0 }), c || a.each(d.options.keybindings, function(c, e) { return e && a.isfunction(e.fn) && ("number" == typeof e.key && b.which === e.key || "string" == typeof e.key && b.key === e.key) ? (b.preventdefault(), e.fn(d), !1) : void 0 })) }; a.jplayer.keys = function(b) { var c = "keydown.jplayer"; a(document.documentelement).unbind(c), b && a(document.documentelement).bind(c, g) }, a.jplayer.keys(!0), a.jplayer.prototype = { count: 0, version: { script: "2.9.2", needflash: "2.9.0", flash: "unknown" }, options: { swfpath: "js", solution: "html, flash", supplied: "mp3", auroraformats: "wav", preload: "metadata", volume: .8, muted: !1, remainingduration: !1, toggleduration: !1, captureduration: !0, playbackrate: 1, defaultplaybackrate: 1, minplaybackrate: .5, maxplaybackrate: 4, wmode: "opaque", backgroundcolor: "#000000", cssselectorancestor: "#jp_container_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", volumemax: ".jp-volume-max", playbackratebar: ".jp-playback-rate-bar", playbackratebarvalue: ".jp-playback-rate-bar-value", currenttime: ".jp-current-time", duration: ".jp-duration", title: ".jp-title", fullscreen: ".jp-full-screen", restorescreen: ".jp-restore-screen", repeat: ".jp-repeat", repeatoff: ".jp-repeat-off", gui: ".jp-gui", nosolution: ".jp-no-solution" }, stateclass: { playing: "jp-state-playing", seeking: "jp-state-seeking", muted: "jp-state-muted", looped: "jp-state-looped", fullscreen: "jp-state-full-screen", novolume: "jp-state-no-volume" }, usestateclassskin: !1, autoblur: !0, smoothplaybar: !1, fullscreen: !1, fullwindow: !1, autohide: { restored: !1, full: !0, fadein: 200, fadeout: 600, hold: 1e3 }, loop: !1, repeat: function(b) { b.jplayer.options.loop ? a(this).unbind(".jplayerrepeat").bind(a.jplayer.event.ended + ".jplayer.jplayerrepeat", function() { a(this).jplayer("play") }) : a(this).unbind(".jplayerrepeat") }, nativevideocontrols: {}, nofullwindow: { msie: /msie [0-6]\./, ipad: /ipad.*?os [0-4]\./, iphone: /iphone/, ipod: /ipod/, android_pad: /android [0-3]\.(?!.*?mobile)/, android_phone: /(?=.*android)(?!.*chrome)(?=.*mobile)/, blackberry: /blackberry/, windows_ce: /windows ce/, iemobile: /iemobile/, webos: /webos/ }, novolume: { ipad: /ipad/, iphone: /iphone/, ipod: /ipod/, android_pad: /android(?!.*?mobile)/, android_phone: /android.*?mobile/, blackberry: /blackberry/, windows_ce: /windows ce/, iemobile: /iemobile/, webos: /webos/, playbook: /playbook/ }, timeformat: {}, keyenabled: !1, audiofullscreen: !1, keybindings: { play: { key: 80, fn: function(a) { a.status.paused ? a.play() : a.pause() } }, fullscreen: { key: 70, fn: function(a) { (a.status.video || a.options.audiofullscreen) && a._setoption("fullscreen", !a.options.fullscreen) } }, muted: { key: 77, fn: function(a) { a._muted(!a.options.muted) } }, volumeup: { key: 190, fn: function(a) { a.volume(a.options.volume + .1) } }, volumedown: { key: 188, fn: function(a) { a.volume(a.options.volume - .1) } }, loop: { key: 76, fn: function(a) { a._loop(!a.options.loop) } } }, verticalvolume: !1, verticalplaybackrate: !1, globalvolume: !1, idprefix: "jp", noconflict: "jquery", emulatehtml: !1, consolealerts: !0, erroralerts: !1, warningalerts: !1 }, optionsaudio: { size: { width: "0px", height: "0px", cssclass: "" }, sizefull: { width: "0px", height: "0px", cssclass: "" } }, optionsvideo: { size: { width: "480px", height: "270px", cssclass: "jp-video-270p" }, sizefull: { width: "100%", height: "100%", cssclass: "jp-video-full" } }, instances: {}, status: { src: "", media: {}, paused: !0, format: {}, formattype: "", waitforplay: !0, waitforload: !0, srcset: !1, video: !1, seekpercent: 0, currentpercentrelative: 0, currentpercentabsolute: 0, currenttime: 0, duration: 0, remaining: 0, videowidth: 0, videoheight: 0, readystate: 0, networkstate: 0, playbackrate: 1, ended: 0 }, internal: { ready: !1 }, solution: { html: !0, aurora: !0, flash: !0 }, format: { mp3: { codec: "audio/mpeg", flashcanplay: !0, media: "audio" }, m4a: { codec: 'audio/mp4; codecs="mp4a.40.2"', flashcanplay: !0, media: "audio" }, m3u8a: { codec: 'application/vnd.apple.mpegurl; codecs="mp4a.40.2"', flashcanplay: !1, media: "audio" }, m3ua: { codec: "audio/mpegurl", flashcanplay: !1, media: "audio" }, oga: { codec: 'audio/ogg; codecs="vorbis, opus"', flashcanplay: !1, media: "audio" }, flac: { codec: "audio/x-flac", flashcanplay: !1, media: "audio" }, wav: { codec: 'audio/wav; codecs="1"', flashcanplay: !1, media: "audio" }, webma: { codec: 'audio/webm; codecs="vorbis"', flashcanplay: !1, media: "audio" }, fla: { codec: "audio/x-flv", flashcanplay: !0, media: "audio" }, rtmpa: { codec: 'audio/rtmp; codecs="rtmp"', flashcanplay: !0, media: "audio" }, m4v: { codec: 'video/mp4; codecs="avc1.42e01e, mp4a.40.2"', flashcanplay: !0, media: "video" }, m3u8v: { codec: 'application/vnd.apple.mpegurl; codecs="avc1.42e01e, mp4a.40.2"', flashcanplay: !1, media: "video" }, m3uv: { codec: "audio/mpegurl", flashcanplay: !1, media: "video" }, ogv: { codec: 'video/ogg; codecs="theora, vorbis"', flashcanplay: !1, media: "video" }, webmv: { codec: 'video/webm; codecs="vorbis, vp8"', flashcanplay: !1, media: "video" }, flv: { codec: "video/x-flv", flashcanplay: !0, media: "video" }, rtmpv: { codec: 'video/rtmp; codecs="rtmp"', flashcanplay: !0, media: "video" } }, _init: function() { var c = this; if (this.element.empty(), this.status = a.extend({}, this.status), this.internal = a.extend({}, this.internal), this.options.timeformat = a.extend({}, a.jplayer.timeformat, this.options.timeformat), this.internal.cmdsignored = a.jplayer.platform.ipad || a.jplayer.platform.iphone || a.jplayer.platform.ipod, this.internal.domnode = this.element.get(0), this.options.keyenabled && !a.jplayer.focus && (a.jplayer.focus = this), this.androidfix = { setmedia: !1, play: !1, pause: !1, time: 0 / 0 }, a.jplayer.platform.android && (this.options.preload = "auto" !== this.options.preload ? "metadata" : "auto"), this.formats = [], this.solutions = [], this.require = {}, this.htmlelement = {}, this.html = {}, this.html.audio = {}, this.html.video = {}, this.aurora = {}, this.aurora.formats = [], this.aurora.properties = [], this.flash = {}, this.css = {}, this.css.cs = {}, this.css.jq = {}, this.ancestorjq = [], this.options.volume = this._limitvalue(this.options.volume, 0, 1), a.each(this.options.supplied.tolowercase().split(","), function(b, d) { var e = d.replace(/^\s+|\s+$/g, ""); if (c.format[e]) { var f = !1; a.each(c.formats, function(a, b) { return e === b ? (f = !0, !1) : void 0 }), f || c.formats.push(e) } }), a.each(this.options.solution.tolowercase().split(","), function(b, d) { var e = d.replace(/^\s+|\s+$/g, ""); if (c.solution[e]) { var f = !1; a.each(c.solutions, function(a, b) { return e === b ? (f = !0, !1) : void 0 }), f || c.solutions.push(e) } }), a.each(this.options.auroraformats.tolowercase().split(","), function(b, d) { var e = d.replace(/^\s+|\s+$/g, ""); if (c.format[e]) { var f = !1; a.each(c.aurora.formats, function(a, b) { return e === b ? (f = !0, !1) : void 0 }), f || c.aurora.formats.push(e) } }), 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 = a.extend({}, { id: this.element.attr("id"), jq: this.element }), this.internal.audio = a.extend({}, { id: this.options.idprefix + "_audio_" + this.count, jq: b }), this.internal.video = a.extend({}, { id: this.options.idprefix + "_video_" + this.count, jq: b }), this.internal.flash = a.extend({}, { id: this.options.idprefix + "_flash_" + this.count, jq: b, swf: this.options.swfpath + (".swf" !== this.options.swfpath.tolowercase().slice(-4) ? (this.options.swfpath && "/" !== this.options.swfpath.slice(-1) ? "/" : "") + "jquery.jplayer.swf" : "") }), this.internal.poster = a.extend({}, { id: this.options.idprefix + "_poster_" + this.count, jq: b }), a.each(a.jplayer.event, function(a, d) { c.options[a] !== b && (c.element.bind(d + ".jplayer", c.options[a]), c.options[a] = b) }), this.require.audio = !1, this.require.video = !1, a.each(this.formats, function(a, b) { c.require[c.format[b].media] = !0 }), this.options = this.require.video ? a.extend(!0, {}, this.optionsvideo, this.options) : a.extend(!0, {}, this.optionsaudio, this.options), this._setsize(), this.status.nativevideocontrols = this._uablocklist(this.options.nativevideocontrols), this.status.nofullwindow = this._uablocklist(this.options.nofullwindow), this.status.novolume = this._uablocklist(this.options.novolume), a.jplayer.nativefeatures.fullscreen.api.fullscreenenabled && this._fullscreenaddeventlisteners(), this._restrictnativevideocontrols(), this.htmlelement.poster = document.createelement("img"), this.htmlelement.poster.id = this.internal.poster.id, this.htmlelement.poster.onload = function() { (!c.status.video || c.status.waitforplay) && c.internal.poster.jq.show() }, this.element.append(this.htmlelement.poster), this.internal.poster.jq = a("#" + this.internal.poster.id), this.internal.poster.jq.css({ width: this.status.width, height: this.status.height }), this.internal.poster.jq.hide(), this.internal.poster.jq.bind("click.jplayer", function() { c._trigger(a.jplayer.event.click) }), this.html.audio.available = !1, 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._testcanplaytype(this.htmlelement.audio)), this.html.video.available = !1, 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._testcanplaytype(this.htmlelement.video)), this.flash.available = this._checkforflash(10.1), this.html.canplay = {}, this.aurora.canplay = {}, this.flash.canplay = {}, a.each(this.formats, function(b, d) { c.html.canplay[d] = c.html[c.format[d].media].available && "" !== c.htmlelement[c.format[d].media].canplaytype(c.format[d].codec), c.aurora.canplay[d] = a.inarray(d, c.aurora.formats) > -1, c.flash.canplay[d] = c.format[d].flashcanplay && c.flash.available }), this.html.desired = !1, this.aurora.desired = !1, this.flash.desired = !1, a.each(this.solutions, function(b, d) { if (0 === b) c[d].desired = !0; else { var e = !1, f = !1; a.each(c.formats, function(a, b) { c[c.solutions[0]].canplay[b] && ("video" === c.format[b].media ? f = !0 : e = !0) }), c[d].desired = c.require.audio && !e || c.require.video && !f } }), this.html.support = {}, this.aurora.support = {}, this.flash.support = {}, a.each(this.formats, function(a, b) { c.html.support[b] = c.html.canplay[b] && c.html.desired, c.aurora.support[b] = c.aurora.canplay[b] && c.aurora.desired, c.flash.support[b] = c.flash.canplay[b] && c.flash.desired }), this.html.used = !1, this.aurora.used = !1, this.flash.used = !1, a.each(this.solutions, function(b, d) { a.each(c.formats, function(a, b) { return c[d].support[b] ? (c[d].used = !0, !1) : void 0 }) }), this._resetactive(), this._resetgate(), this._cssselectorancestor(this.options.cssselectorancestor), this.html.used || this.aurora.used || this.flash.used ? this.css.jq.nosolution.length && this.css.jq.nosolution.hide() : (this._error({ type: a.jplayer.error.no_solution, context: "{solution:'" + this.options.solution + "', supplied:'" + this.options.supplied + "'}", message: a.jplayer.errormsg.no_solution, hint: a.jplayer.errorhint.no_solution }), this.css.jq.nosolution.length && this.css.jq.nosolution.show()), this.flash.used) { var d, e = "jquery=" + encodeuri(this.options.noconflict) + "&id=" + encodeuri(this.internal.self.id) + "&vol=" + this.options.volume + "&muted=" + this.options.muted; if (a.jplayer.browser.msie && (number(a.jplayer.browser.version) < 9 || a.jplayer.browser.documentmode < 9)) { var f = '', g = ['', '', '', '', '']; d = document.createelement(f); for (var h = 0; h < g.length; h++) d.appendchild(document.createelement(g[h])) } else { var i = function(a, b, c) { var d = document.createelement("param"); d.setattribute("name", b), d.setattribute("value", c), a.appendchild(d) }; d = document.createelement("object"), d.setattribute("id", this.internal.flash.id), d.setattribute("name", this.internal.flash.id), d.setattribute("data", this.internal.flash.swf), d.setattribute("type", "application/x-shockwave-flash"), d.setattribute("width", "1"), d.setattribute("height", "1"), d.setattribute("tabindex", "-1"), i(d, "flashvars", e), i(d, "allowscriptaccess", "always"), i(d, "bgcolor", this.options.backgroundcolor), i(d, "wmode", this.options.wmode) } this.element.append(d), this.internal.flash.jq = a(d) } this.status.playbackrateenabled = this.html.used && !this.flash.used ? this._testplaybackrate("audio") : !1, this._updateplaybackrate(), this.html.used && (this.html.audio.available && (this._addhtmleventlisteners(this.htmlelement.audio, this.html.audio), this.element.append(this.htmlelement.audio), this.internal.audio.jq = a("#" + this.internal.audio.id)), this.html.video.available && (this._addhtmleventlisteners(this.htmlelement.video, this.html.video), this.element.append(this.htmlelement.video), this.internal.video.jq = a("#" + this.internal.video.id), this.internal.video.jq.css(this.status.nativevideocontrols ? { width: this.status.width, height: this.status.height } : { width: "0px", height: "0px" }), this.internal.video.jq.bind("click.jplayer", function() { c._trigger(a.jplayer.event.click) }))), this.aurora.used, this.options.emulatehtml && this._emulatehtmlbridge(), !this.html.used && !this.aurora.used || this.flash.used || settimeout(function() { c.internal.ready = !0, c.version.flash = "n/a", c._trigger(a.jplayer.event.repeat), c._trigger(a.jplayer.event.ready) }, 100), this._updatenativevideocontrols(), this.css.jq.videoplay.length && this.css.jq.videoplay.hide(), a.jplayer.prototype.count++ }, destroy: function() { this.clearmedia(), this._removeuiclass(), this.css.jq.currenttime.length && this.css.jq.currenttime.text(""), this.css.jq.duration.length && this.css.jq.duration.text(""), a.each(this.css.jq, function(a, b) { b.length && b.unbind(".jplayer") }), this.internal.poster.jq.unbind(".jplayer"), this.internal.video.jq && this.internal.video.jq.unbind(".jplayer"), this._fullscreenremoveeventlisteners(), this === a.jplayer.focus && (a.jplayer.focus = null), this.options.emulatehtml && this._destroyhtmlbridge(), this.element.removedata("jplayer"), this.element.unbind(".jplayer"), this.element.empty(), delete this.instances[this.internal.instance] }, destroyremoved: function() { var b = this; a.each(this.instances, function(a, c) { b.element !== c && (c.data("jplayer") || (c.jplayer("destroy"), delete b.instances[a])) }) }, enable: function() {}, disable: function() {}, _testcanplaytype: function(a) { try { return a.canplaytype(this.format.mp3.codec), !0 } catch (b) { return !1 } }, _testplaybackrate: function(a) { var b, c = .5; a = "string" == typeof a ? a : "audio", b = document.createelement(a); try { return "playbackrate" in b ? (b.playbackrate = c, b.playbackrate === c) : !1 } catch (d) { return !1 } }, _uablocklist: function(b) { var c = navigator.useragent.tolowercase(), d = !1; return a.each(b, function(a, b) { return b && b.test(c) ? (d = !0, !1) : void 0 }), d }, _restrictnativevideocontrols: function() { this.require.audio && this.status.nativevideocontrols && (this.status.nativevideocontrols = !1, this.status.nofullwindow = !0) }, _updatenativevideocontrols: function() { this.html.video.available && this.html.used && (this.htmlelement.video.controls = this.status.nativevideocontrols, this._updateautohide(), this.status.nativevideocontrols && this.require.video ? (this.internal.poster.jq.hide(), this.internal.video.jq.css({ width: this.status.width, height: this.status.height })) : this.status.waitforplay && this.status.video && (this.internal.poster.jq.show(), this.internal.video.jq.css({ width: "0px", height: "0px" }))) }, _addhtmleventlisteners: function(b, c) { var d = this; b.preload = this.options.preload, b.muted = this.options.muted, b.volume = this.options.volume, this.status.playbackrateenabled && (b.defaultplaybackrate = this.options.defaultplaybackrate, b.playbackrate = this.options.playbackrate), b.addeventlistener("progress", function() { c.gate && (d.internal.cmdsignored && this.readystate > 0 && (d.internal.cmdsignored = !1), d._gethtmlstatus(b), d._updateinterface(), d._trigger(a.jplayer.event.progress)) }, !1), b.addeventlistener("loadeddata", function() { c.gate && (d.androidfix.setmedia = !1, d.androidfix.play && (d.androidfix.play = !1, d.play(d.androidfix.time)), d.androidfix.pause && (d.androidfix.pause = !1, d.pause(d.androidfix.time)), d._trigger(a.jplayer.event.loadeddata)) }, !1), b.addeventlistener("timeupdate", function() { c.gate && (d._gethtmlstatus(b), d._updateinterface(), d._trigger(a.jplayer.event.timeupdate)) }, !1), b.addeventlistener("durationchange", function() { c.gate && (d._gethtmlstatus(b), d._updateinterface(), d._trigger(a.jplayer.event.durationchange)) }, !1), b.addeventlistener("play", function() { c.gate && (d._updatebuttons(!0), d._html_checkwaitforplay(), d._trigger(a.jplayer.event.play)) }, !1), b.addeventlistener("playing", function() { c.gate && (d._updatebuttons(!0), d._seeked(), d._trigger(a.jplayer.event.playing)) }, !1), b.addeventlistener("pause", function() { c.gate && (d._updatebuttons(!1), d._trigger(a.jplayer.event.pause)) }, !1), b.addeventlistener("waiting", function() { c.gate && (d._seeking(), d._trigger(a.jplayer.event.waiting)) }, !1), b.addeventlistener("seeking", function() { c.gate && (d._seeking(), d._trigger(a.jplayer.event.seeking)) }, !1), b.addeventlistener("seeked", function() { c.gate && (d._seeked(), d._trigger(a.jplayer.event.seeked)) }, !1), b.addeventlistener("volumechange", function() { c.gate && (d.options.volume = b.volume, d.options.muted = b.muted, d._updatemute(), d._updatevolume(), d._trigger(a.jplayer.event.volumechange)) }, !1), b.addeventlistener("ratechange", function() { c.gate && (d.options.defaultplaybackrate = b.defaultplaybackrate, d.options.playbackrate = b.playbackrate, d._updateplaybackrate(), d._trigger(a.jplayer.event.ratechange)) }, !1), b.addeventlistener("suspend", function() { c.gate && (d._seeked(), d._trigger(a.jplayer.event.suspend)) }, !1), b.addeventlistener("ended", function() { c.gate && (a.jplayer.browser.webkit || (d.htmlelement.media.currenttime = 0), d.htmlelement.media.pause(), d._updatebuttons(!1), d._gethtmlstatus(b, !0), d._updateinterface(), d._trigger(a.jplayer.event.ended)) }, !1), b.addeventlistener("error", function() { c.gate && (d._updatebuttons(!1), d._seeked(), d.status.srcset && (cleartimeout(d.internal.htmldlycmdid), d.status.waitforload = !0, d.status.waitforplay = !0, d.status.video && !d.status.nativevideocontrols && d.internal.video.jq.css({ width: "0px", height: "0px" }), d._validstring(d.status.media.poster) && !d.status.nativevideocontrols && d.internal.poster.jq.show(), d.css.jq.videoplay.length && d.css.jq.videoplay.show(), d._error({ type: a.jplayer.error.url, context: d.status.src, message: a.jplayer.errormsg.url, hint: a.jplayer.errorhint.url }))) }, !1), a.each(a.jplayer.htmlevent, function(e, f) { b.addeventlistener(this, function() { c.gate && d._trigger(a.jplayer.event[f]) }, !1) }) }, _addauroraeventlisteners: function(b, c) { var d = this; b.volume = 100 * this.options.volume, b.on("progress", function() { c.gate && (d.internal.cmdsignored && this.readystate > 0 && (d.internal.cmdsignored = !1), d._getaurorastatus(b), d._updateinterface(), d._trigger(a.jplayer.event.progress), b.duration > 0 && d._trigger(a.jplayer.event.timeupdate)) }, !1), b.on("ready", function() { c.gate && d._trigger(a.jplayer.event.loadeddata) }, !1), b.on("duration", function() { c.gate && (d._getaurorastatus(b), d._updateinterface(), d._trigger(a.jplayer.event.durationchange)) }, !1), b.on("end", function() { c.gate && (d._updatebuttons(!1), d._getaurorastatus(b, !0), d._updateinterface(), d._trigger(a.jplayer.event.ended)) }, !1), b.on("error", function() { c.gate && (d._updatebuttons(!1), d._seeked(), d.status.srcset && (d.status.waitforload = !0, d.status.waitforplay = !0, d.status.video && !d.status.nativevideocontrols && d.internal.video.jq.css({ width: "0px", height: "0px" }), d._validstring(d.status.media.poster) && !d.status.nativevideocontrols && d.internal.poster.jq.show(), d.css.jq.videoplay.length && d.css.jq.videoplay.show(), d._error({ type: a.jplayer.error.url, context: d.status.src, message: a.jplayer.errormsg.url, hint: a.jplayer.errorhint.url }))) }, !1) }, _gethtmlstatus: function(a, b) { var c = 0, d = 0, e = 0, f = 0; isfinite(a.duration) && (this.status.duration = a.duration), c = a.currenttime, d = this.status.duration > 0 ? 100 * c / this.status.duration : 0, "object" == typeof a.seekable && a.seekable.length > 0 ? (e = this.status.duration > 0 ? 100 * a.seekable.end(a.seekable.length - 1) / this.status.duration : 100, f = this.status.duration > 0 ? 100 * a.currenttime / a.seekable.end(a.seekable.length - 1) : 0) : (e = 100, f = d), b && (c = 0, f = 0, d = 0), this.status.seekpercent = e, this.status.currentpercentrelative = f, this.status.currentpercentabsolute = d, this.status.currenttime = c, this.status.remaining = this.status.duration - this.status.currenttime, this.status.videowidth = a.videowidth, this.status.videoheight = a.videoheight, this.status.readystate = a.readystate, this.status.networkstate = a.networkstate, this.status.playbackrate = a.playbackrate, this.status.ended = a.ended }, _getaurorastatus: function(a, b) { var c = 0, d = 0, e = 0, f = 0; this.status.duration = a.duration / 1e3, c = a.currenttime / 1e3, d = this.status.duration > 0 ? 100 * c / this.status.duration : 0, a.buffered > 0 ? (e = this.status.duration > 0 ? a.buffered * this.status.duration / this.status.duration : 100, f = this.status.duration > 0 ? c / (a.buffered * this.status.duration) : 0) : (e = 100, f = d), b && (c = 0, f = 0, d = 0), this.status.seekpercent = e, this.status.currentpercentrelative = f, this.status.currentpercentabsolute = d, this.status.currenttime = c, this.status.remaining = this.status.duration - this.status.currenttime, this.status.readystate = 4, this.status.networkstate = 0, this.status.playbackrate = 1, this.status.ended = !1 }, _resetstatus: function() { this.status = a.extend({}, this.status, a.jplayer.prototype.status) }, _trigger: function(b, c, d) { var e = a.event(b); e.jplayer = {}, e.jplayer.version = a.extend({}, this.version), e.jplayer.options = a.extend(!0, {}, this.options), e.jplayer.status = a.extend(!0, {}, this.status), e.jplayer.html = a.extend(!0, {}, this.html), e.jplayer.aurora = a.extend(!0, {}, this.aurora), e.jplayer.flash = a.extend(!0, {}, this.flash), c && (e.jplayer.error = a.extend({}, c)), d && (e.jplayer.warning = a.extend({}, d)), this.element.trigger(e) }, jplayerflashevent: function(b, c) { if (b === a.jplayer.event.ready) if (this.internal.ready) { if (this.flash.gate) { if (this.status.srcset) { var d = this.status.currenttime, e = this.status.paused; this.setmedia(this.status.media), this.volumeworker(this.options.volume), d > 0 && (e ? this.pause(d) : this.play(d)) } this._trigger(a.jplayer.event.flashreset) } } else this.internal.ready = !0, this.internal.flash.jq.css({ width: "0px", height: "0px" }), this.version.flash = c.version, this.version.needflash !== this.version.flash && this._error({ type: a.jplayer.error.version, context: this.version.flash, message: a.jplayer.errormsg.version + this.version.flash, hint: a.jplayer.errorhint.version }), this._trigger(a.jplayer.event.repeat), this._trigger(b); if (this.flash.gate) switch (b) { case a.jplayer.event.progress: this._getflashstatus(c), this._updateinterface(), this._trigger(b); break; case a.jplayer.event.timeupdate: this._getflashstatus(c), this._updateinterface(), this._trigger(b); break; case a.jplayer.event.play: this._seeked(), this._updatebuttons(!0), this._trigger(b); break; case a.jplayer.event.pause: this._updatebuttons(!1), this._trigger(b); break; case a.jplayer.event.ended: this._updatebuttons(!1), this._trigger(b); break; case a.jplayer.event.click: this._trigger(b); break; case a.jplayer.event.error: this.status.waitforload = !0, this.status.waitforplay = !0, 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.status.video && this.css.jq.videoplay.show(), this.status.video ? this._flash_setvideo(this.status.media) : this._flash_setaudio(this.status.media), this._updatebuttons(!1), this._error({ type: a.jplayer.error.url, context: c.src, message: a.jplayer.errormsg.url, hint: a.jplayer.errorhint.url }); break; case a.jplayer.event.seeking: this._seeking(), this._trigger(b); break; case a.jplayer.event.seeked: this._seeked(), this._trigger(b); break; case a.jplayer.event.ready: break; default: this._trigger(b) } return !1 }, _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, this.status.remaining = a.duration - a.currenttime, this.status.videowidth = a.videowidth, this.status.videoheight = a.videoheight, this.status.readystate = 4, this.status.networkstate = 0, this.status.playbackrate = 1, this.status.ended = !1 }, _updatebuttons: function(a) { a === b ? a = !this.status.paused : this.status.paused = !a, a ? this.addstateclass("playing") : this.removestateclass("playing"), !this.status.nofullwindow && this.options.fullwindow ? this.addstateclass("fullscreen") : this.removestateclass("fullscreen"), this.options.loop ? this.addstateclass("looped") : this.removestateclass("looped"), this.css.jq.play.length && this.css.jq.pause.length && (a ? (this.css.jq.play.hide(), this.css.jq.pause.show()) : (this.css.jq.play.show(), this.css.jq.pause.hide())), this.css.jq.restorescreen.length && this.css.jq.fullscreen.length && (this.status.nofullwindow ? (this.css.jq.fullscreen.hide(), this.css.jq.restorescreen.hide()) : this.options.fullwindow ? (this.css.jq.fullscreen.hide(), this.css.jq.restorescreen.show()) : (this.css.jq.fullscreen.show(), this.css.jq.restorescreen.hide())), this.css.jq.repeat.length && this.css.jq.repeatoff.length && (this.options.loop ? (this.css.jq.repeat.hide(), this.css.jq.repeatoff.show()) : (this.css.jq.repeat.show(), this.css.jq.repeatoff.hide())) }, _updateinterface: function() { this.css.jq.seekbar.length && this.css.jq.seekbar.width(this.status.seekpercent + "%"), this.css.jq.playbar.length && (this.options.smoothplaybar ? this.css.jq.playbar.stop().animate({ width: this.status.currentpercentabsolute + "%" }, 250, "linear") : this.css.jq.playbar.width(this.status.currentpercentrelative + "%")); var a = ""; this.css.jq.currenttime.length && (a = this._converttime(this.status.currenttime), a !== this.css.jq.currenttime.text() && this.css.jq.currenttime.text(this._converttime(this.status.currenttime))); var b = "", c = this.status.duration, d = this.status.remaining; this.css.jq.duration.length && ("string" == typeof this.status.media.duration ? b = this.status.media.duration : ("number" == typeof this.status.media.duration && (c = this.status.media.duration, d = c - this.status.currenttime), b = this.options.remainingduration ? (d > 0 ? "-" : "") + this._converttime(d) : this._converttime(c)), b !== this.css.jq.duration.text() && this.css.jq.duration.text(b)) }, _converttime: c.prototype.time, _seeking: function() { this.css.jq.seekbar.length && this.css.jq.seekbar.addclass("jp-seeking-bg"), this.addstateclass("seeking") }, _seeked: function() { this.css.jq.seekbar.length && this.css.jq.seekbar.removeclass("jp-seeking-bg"), this.removestateclass("seeking") }, _resetgate: function() { this.html.audio.gate = !1, this.html.video.gate = !1, this.aurora.gate = !1, this.flash.gate = !1 }, _resetactive: function() { this.html.active = !1, this.aurora.active = !1, this.flash.active = !1 }, _escapehtml: function(a) { return a.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""") }, _qualifyurl: function(a) { var b = document.createelement("div"); return b.innerhtml = 'x', b.firstchild.href }, _absolutemediaurls: function(b) { var c = this; return a.each(b, function(a, d) { d && c.format[a] && "data:" !== d.substr(0, 5) && (b[a] = c._qualifyurl(d)) }), b }, addstateclass: function(a) { this.ancestorjq.length && this.ancestorjq.addclass(this.options.stateclass[a]) }, removestateclass: function(a) { this.ancestorjq.length && this.ancestorjq.removeclass(this.options.stateclass[a]) }, setmedia: function(b) { var c = this, d = !1, e = this.status.media.poster !== b.poster; this._resetmedia(), this._resetgate(), this._resetactive(), this.androidfix.setmedia = !1, this.androidfix.play = !1, this.androidfix.pause = !1, b = this._absolutemediaurls(b), a.each(this.formats, function(e, f) { var g = "video" === c.format[f].media; return a.each(c.solutions, function(e, h) { if (c[h].support[f] && c._validstring(b[f])) { var i = "html" === h, j = "aurora" === h; return g ? (i ? (c.html.video.gate = !0, c._html_setvideo(b), c.html.active = !0) : (c.flash.gate = !0, c._flash_setvideo(b), c.flash.active = !0), c.css.jq.videoplay.length && c.css.jq.videoplay.show(), c.status.video = !0) : (i ? (c.html.audio.gate = !0, c._html_setaudio(b), c.html.active = !0, a.jplayer.platform.android && (c.androidfix.setmedia = !0)) : j ? (c.aurora.gate = !0, c._aurora_setaudio(b), c.aurora.active = !0) : (c.flash.gate = !0, c._flash_setaudio(b), c.flash.active = !0), c.css.jq.videoplay.length && c.css.jq.videoplay.hide(), c.status.video = !1), d = !0, !1 } }), d ? !1 : void 0 }), d ? (this.status.nativevideocontrols && this.html.video.gate || this._validstring(b.poster) && (e ? this.htmlelement.poster.src = b.poster : this.internal.poster.jq.show()), "string" == typeof b.title && (this.css.jq.title.length && this.css.jq.title.html(b.title), this.htmlelement.audio && this.htmlelement.audio.setattribute("title", b.title), this.htmlelement.video && this.htmlelement.video.setattribute("title", b.title)), this.status.srcset = !0, this.status.media = a.extend({}, b), this._updatebuttons(!1), this._updateinterface(), this._trigger(a.jplayer.event.setmedia)) : this._error({ type: a.jplayer.error.no_support, context: "{supplied:'" + this.options.supplied + "'}", message: a.jplayer.errormsg.no_support, hint: a.jplayer.errorhint.no_support }) }, _resetmedia: function() { this._resetstatus(), this._updatebuttons(!1), this._updateinterface(), this._seeked(), this.internal.poster.jq.hide(), cleartimeout(this.internal.htmldlycmdid), this.html.active ? this._html_resetmedia() : this.aurora.active ? this._aurora_resetmedia() : this.flash.active && this._flash_resetmedia() }, clearmedia: function() { this._resetmedia(), this.html.active ? this._html_clearmedia() : this.aurora.active ? this._aurora_clearmedia() : this.flash.active && this._flash_clearmedia(), this._resetgate(), this._resetactive() }, load: function() { this.status.srcset ? this.html.active ? this._html_load() : this.aurora.active ? this._aurora_load() : this.flash.active && this._flash_load() : this._urlnotseterror("load") }, focus: function() { this.options.keyenabled && (a.jplayer.focus = this) }, play: function(a) { var b = "object" == typeof a; b && this.options.usestateclassskin && !this.status.paused ? this.pause(a) : (a = "number" == typeof a ? a : 0 / 0, this.status.srcset ? (this.focus(), this.html.active ? this._html_play(a) : this.aurora.active ? this._aurora_play(a) : this.flash.active && this._flash_play(a)) : this._urlnotseterror("play")) }, videoplay: function() { this.play() }, pause: function(a) { a = "number" == typeof a ? a : 0 / 0, this.status.srcset ? this.html.active ? this._html_pause(a) : this.aurora.active ? this._aurora_pause(a) : this.flash.active && this._flash_pause(a) : this._urlnotseterror("pause") }, tellothers: function(b, c) { var d = this, e = "function" == typeof c, f = array.prototype.slice.call(arguments); "string" == typeof b && (e && f.splice(1, 1), a.jplayer.prototype.destroyremoved(), a.each(this.instances, function() { d.element !== this && (!e || c.call(this.data("jplayer"), d)) && this.jplayer.apply(this, f) })) }, pauseothers: function(a) { this.tellothers("pause", function() { return this.status.srcset }, a) }, stop: function() { this.status.srcset ? this.html.active ? this._html_pause(0) : this.aurora.active ? this._aurora_pause(0) : this.flash.active && this._flash_pause(0) : this._urlnotseterror("stop") }, playhead: function(a) { a = this._limitvalue(a, 0, 100), this.status.srcset ? this.html.active ? this._html_playhead(a) : this.aurora.active ? this._aurora_playhead(a) : this.flash.active && this._flash_playhead(a) : this._urlnotseterror("playhead") }, _muted: function(a) { this.mutedworker(a), this.options.globalvolume && this.tellothers("mutedworker", function() { return this.options.globalvolume }, a) }, mutedworker: function(b) { this.options.muted = b, this.html.used && this._html_setproperty("muted", b), this.aurora.used && this._aurora_mute(b), this.flash.used && this._flash_mute(b), this.html.video.gate || this.html.audio.gate || (this._updatemute(b), this._updatevolume(this.options.volume), this._trigger(a.jplayer.event.volumechange)) }, mute: function(a) { var c = "object" == typeof a; c && this.options.usestateclassskin && this.options.muted ? this._muted(!1) : (a = a === b ? !0 : !!a, this._muted(a)) }, unmute: function(a) { a = a === b ? !0 : !!a, this._muted(!a) }, _updatemute: function(a) { a === b && (a = this.options.muted), a ? this.addstateclass("muted") : this.removestateclass("muted"), this.css.jq.mute.length && this.css.jq.unmute.length && (this.status.novolume ? (this.css.jq.mute.hide(), this.css.jq.unmute.hide()) : a ? (this.css.jq.mute.hide(), this.css.jq.unmute.show()) : (this.css.jq.mute.show(), this.css.jq.unmute.hide())) }, volume: function(a) { this.volumeworker(a), this.options.globalvolume && this.tellothers("volumeworker", function() { return this.options.globalvolume }, a) }, volumeworker: function(b) { b = this._limitvalue(b, 0, 1), this.options.volume = b, this.html.used && this._html_setproperty("volume", b), this.aurora.used && this._aurora_volume(b), this.flash.used && this._flash_volume(b), this.html.video.gate || this.html.audio.gate || (this._updatevolume(b), this._trigger(a.jplayer.event.volumechange)) }, volumebar: function(b) { if (this.css.jq.volumebar.length) { var c = a(b.currenttarget), d = c.offset(), e = b.pagex - d.left, f = c.width(), g = c.height() - b.pagey + d.top, h = c.height(); this.volume(this.options.verticalvolume ? g / h : e / f) } this.options.muted && this._muted(!1) }, _updatevolume: function(a) { a === b && (a = this.options.volume), a = this.options.muted ? 0 : a, this.status.novolume ? (this.addstateclass("novolume"), this.css.jq.volumebar.length && this.css.jq.volumebar.hide(), this.css.jq.volumebarvalue.length && this.css.jq.volumebarvalue.hide(), this.css.jq.volumemax.length && this.css.jq.volumemax.hide()) : (this.removestateclass("novolume"), this.css.jq.volumebar.length && this.css.jq.volumebar.show(), this.css.jq.volumebarvalue.length && (this.css.jq.volumebarvalue.show(), this.css.jq.volumebarvalue[this.options.verticalvolume ? "height" : "width"](100 * a + "%")), this.css.jq.volumemax.length && this.css.jq.volumemax.show()) }, volumemax: function() { this.volume(1), this.options.muted && this._muted(!1) }, _cssselectorancestor: function(b) { var c = this; this.options.cssselectorancestor = b, this._removeuiclass(), this.ancestorjq = b ? a(b) : [], b && 1 !== this.ancestorjq.length && this._warning({ type: a.jplayer.warning.css_selector_count, context: b, message: a.jplayer.warningmsg.css_selector_count + this.ancestorjq.length + " found for cssselectorancestor.", hint: a.jplayer.warninghint.css_selector_count }), this._adduiclass(), a.each(this.options.cssselector, function(a, b) { c._cssselector(a, b) }), this._updateinterface(), this._updatebuttons(), this._updateautohide(), this._updatevolume(), this._updatemute() }, _cssselector: function(b, c) { var d = this; if ("string" == typeof c) if (a.jplayer.prototype.options.cssselector[b]) { if (this.css.jq[b] && this.css.jq[b].length && this.css.jq[b].unbind(".jplayer"), this.options.cssselector[b] = c, this.css.cs[b] = this.options.cssselectorancestor + " " + c, this.css.jq[b] = c ? a(this.css.cs[b]) : [], this.css.jq[b].length && this[b]) { var e = function(c) { c.preventdefault(), d[b](c), d.options.autoblur ? a(this).blur() : a(this).focus() }; this.css.jq[b].bind("click.jplayer", e) } c && 1 !== this.css.jq[b].length && this._warning({ type: a.jplayer.warning.css_selector_count, context: this.css.cs[b], message: a.jplayer.warningmsg.css_selector_count + this.css.jq[b].length + " found for " + b + " method.", hint: a.jplayer.warninghint.css_selector_count }) } else this._warning({ type: a.jplayer.warning.css_selector_method, context: b, message: a.jplayer.warningmsg.css_selector_method, hint: a.jplayer.warninghint.css_selector_method }); else this._warning({ type: a.jplayer.warning.css_selector_string, context: c, message: a.jplayer.warningmsg.css_selector_string, hint: a.jplayer.warninghint.css_selector_string }) }, duration: function(a) { this.options.toggleduration && (this.options.captureduration && a.stoppropagation(), this._setoption("remainingduration", !this.options.remainingduration)) }, seekbar: function(b) { if (this.css.jq.seekbar.length) { var c = a(b.currenttarget), d = c.offset(), e = b.pagex - d.left, f = c.width(), g = 100 * e / f; this.playhead(g) } }, playbackrate: function(a) { this._setoption("playbackrate", a) }, playbackratebar: function(b) { if (this.css.jq.playbackratebar.length) { var c, d, e = a(b.currenttarget), f = e.offset(), g = b.pagex - f.left, h = e.width(), i = e.height() - b.pagey + f.top, j = e.height(); c = this.options.verticalplaybackrate ? i / j : g / h, d = c * (this.options.maxplaybackrate - this.options.minplaybackrate) + this.options.minplaybackrate, this.playbackrate(d) } }, _updateplaybackrate: function() { var a = this.options.playbackrate, b = (a - this.options.minplaybackrate) / (this.options.maxplaybackrate - this.options.minplaybackrate); this.status.playbackrateenabled ? (this.css.jq.playbackratebar.length && this.css.jq.playbackratebar.show(), this.css.jq.playbackratebarvalue.length && (this.css.jq.playbackratebarvalue.show(), this.css.jq.playbackratebarvalue[this.options.verticalplaybackrate ? "height" : "width"](100 * b + "%"))) : (this.css.jq.playbackratebar.length && this.css.jq.playbackratebar.hide(), this.css.jq.playbackratebarvalue.length && this.css.jq.playbackratebarvalue.hide()) }, repeat: function(a) { var b = "object" == typeof a; this._loop(b && this.options.usestateclassskin && this.options.loop ? !1 : !0) }, repeatoff: function() { this._loop(!1) }, _loop: function(b) { this.options.loop !== b && (this.options.loop = b, this._updatebuttons(), this._trigger(a.jplayer.event.repeat)) }, option: function(c, d) { var e = c; if (0 === arguments.length) return a.extend(!0, {}, this.options); if ("string" == typeof c) { var f = c.split("."); if (d === b) { for (var g = a.extend(!0, {}, this.options), h = 0; h < f.length; h++) { if (g[f[h]] === b) return this._warning({ type: a.jplayer.warning.option_key, context: c, message: a.jplayer.warningmsg.option_key, hint: a.jplayer.warninghint.option_key }), b; g = g[f[h]] } return g } e = {}; for (var i = e, j = 0; j < f.length; j++) j < f.length - 1 ? (i[f[j]] = {}, i = i[f[j]]) : i[f[j]] = d } return this._setoptions(e), this }, _setoptions: function(b) { var c = this; return a.each(b, function(a, b) { c._setoption(a, b) }), this }, _setoption: function(b, c) { var d = this; switch (b) { case "volume": this.volume(c); break; case "muted": this._muted(c); break; case "globalvolume": this.options[b] = c; break; case "cssselectorancestor": this._cssselectorancestor(c); break; case "cssselector": a.each(c, function(a, b) { d._cssselector(a, b) }); break; case "playbackrate": this.options[b] = c = this._limitvalue(c, this.options.minplaybackrate, this.options.maxplaybackrate), this.html.used && this._html_setproperty("playbackrate", c), this._updateplaybackrate(); break; case "defaultplaybackrate": this.options[b] = c = this._limitvalue(c, this.options.minplaybackrate, this.options.maxplaybackrate), this.html.used && this._html_setproperty("defaultplaybackrate", c), this._updateplaybackrate(); break; case "minplaybackrate": this.options[b] = c = this._limitvalue(c, .1, this.options.maxplaybackrate - .1), this._updateplaybackrate(); break; case "maxplaybackrate": this.options[b] = c = this._limitvalue(c, this.options.minplaybackrate + .1, 16), this._updateplaybackrate(); break; case "fullscreen": if (this.options[b] !== c) { var e = a.jplayer.nativefeatures.fullscreen.used.webkitvideo; (!e || e && !this.status.waitforplay) && (e || (this.options[b] = c), c ? this._requestfullscreen() : this._exitfullscreen(), e || this._setoption("fullwindow", c)) } break; case "fullwindow": this.options[b] !== c && (this._removeuiclass(), this.options[b] = c, this._refreshsize()); break; case "size": this.options.fullwindow || this.options[b].cssclass === c.cssclass || this._removeuiclass(), this.options[b] = a.extend({}, this.options[b], c), this._refreshsize(); break; case "sizefull": this.options.fullwindow && this.options[b].cssclass !== c.cssclass && this._removeuiclass(), this.options[b] = a.extend({}, this.options[b], c), this._refreshsize(); break; case "autohide": this.options[b] = a.extend({}, this.options[b], c), this._updateautohide(); break; case "loop": this._loop(c); break; case "remainingduration": this.options[b] = c, this._updateinterface(); break; case "toggleduration": this.options[b] = c; break; case "nativevideocontrols": this.options[b] = a.extend({}, this.options[b], c), this.status.nativevideocontrols = this._uablocklist(this.options.nativevideocontrols), this._restrictnativevideocontrols(), this._updatenativevideocontrols(); break; case "nofullwindow": this.options[b] = a.extend({}, this.options[b], c), this.status.nativevideocontrols = this._uablocklist(this.options.nativevideocontrols), this.status.nofullwindow = this._uablocklist(this.options.nofullwindow), this._restrictnativevideocontrols(), this._updatebuttons(); break; case "novolume": this.options[b] = a.extend({}, this.options[b], c), this.status.novolume = this._uablocklist(this.options.novolume), this._updatevolume(), this._updatemute(); break; case "emulatehtml": this.options[b] !== c && (this.options[b] = c, c ? this._emulatehtmlbridge() : this._destroyhtmlbridge()); break; case "timeformat": this.options[b] = a.extend({}, this.options[b], c); break; case "keyenabled": this.options[b] = c, c || this !== a.jplayer.focus || (a.jplayer.focus = null); break; case "keybindings": this.options[b] = a.extend(!0, {}, this.options[b], c); break; case "audiofullscreen": this.options[b] = c; break; case "autoblur": this.options[b] = c } return this }, _refreshsize: function() { this._setsize(), this._adduiclass(), this._updatesize(), this._updatebuttons(), this._updateautohide(), this._trigger(a.jplayer.event.resize) }, _setsize: function() { this.options.fullwindow ? (this.status.width = this.options.sizefull.width, this.status.height = this.options.sizefull.height, this.status.cssclass = this.options.sizefull.cssclass) : (this.status.width = this.options.size.width, this.status.height = this.options.size.height, this.status.cssclass = this.options.size.cssclass), this.element.css({ width: this.status.width, height: this.status.height }) }, _adduiclass: function() { this.ancestorjq.length && this.ancestorjq.addclass(this.status.cssclass) }, _removeuiclass: function() { this.ancestorjq.length && this.ancestorjq.removeclass(this.status.cssclass) }, _updatesize: function() { this.internal.poster.jq.css({ width: this.status.width, height: this.status.height }), !this.status.waitforplay && this.html.active && this.status.video || this.html.video.available && this.html.used && this.status.nativevideocontrols ? this.internal.video.jq.css({ width: this.status.width, height: this.status.height }) : !this.status.waitforplay && this.flash.active && this.status.video && this.internal.flash.jq.css({ width: this.status.width, height: this.status.height }) }, _updateautohide: function() { var a = this, b = "mousemove.jplayer", c = ".jplayerautohide", d = b + c, e = function(b) { var c, d, e = !1; "undefined" != typeof a.internal.mouse ? (c = a.internal.mouse.x - b.pagex, d = a.internal.mouse.y - b.pagey, e = math.floor(c) > 0 || math.floor(d) > 0) : e = !0, a.internal.mouse = { x: b.pagex, y: b.pagey }, e && a.css.jq.gui.fadein(a.options.autohide.fadein, function() { cleartimeout(a.internal.autohideid), a.internal.autohideid = settimeout(function() { a.css.jq.gui.fadeout(a.options.autohide.fadeout) }, a.options.autohide.hold) }) }; this.css.jq.gui.length && (this.css.jq.gui.stop(!0, !0), cleartimeout(this.internal.autohideid), delete this.internal.mouse, this.element.unbind(c), this.css.jq.gui.unbind(c), this.status.nativevideocontrols ? this.css.jq.gui.hide() : this.options.fullwindow && this.options.autohide.full || !this.options.fullwindow && this.options.autohide.restored ? (this.element.bind(d, e), this.css.jq.gui.bind(d, e), this.css.jq.gui.hide()) : this.css.jq.gui.show()) }, fullscreen: function(a) { var b = "object" == typeof a; b && this.options.usestateclassskin && this.options.fullscreen ? this._setoption("fullscreen", !1) : this._setoption("fullscreen", !0) }, restorescreen: function() { this._setoption("fullscreen", !1) }, _fullscreenaddeventlisteners: function() { var b = this, c = a.jplayer.nativefeatures.fullscreen; c.api.fullscreenenabled && c.event.fullscreenchange && ("function" != typeof this.internal.fullscreenchangehandler && (this.internal.fullscreenchangehandler = function() { b._fullscreenchange() }), document.addeventlistener(c.event.fullscreenchange, this.internal.fullscreenchangehandler, !1)) }, _fullscreenremoveeventlisteners: function() { var b = a.jplayer.nativefeatures.fullscreen; this.internal.fullscreenchangehandler && document.removeeventlistener(b.event.fullscreenchange, this.internal.fullscreenchangehandler, !1) }, _fullscreenchange: function() { this.options.fullscreen && !a.jplayer.nativefeatures.fullscreen.api.fullscreenelement() && this._setoption("fullscreen", !1) }, _requestfullscreen: function() { var b = this.ancestorjq.length ? this.ancestorjq[0] : this.element[0], c = a.jplayer.nativefeatures.fullscreen; c.used.webkitvideo && (b = this.htmlelement.video), c.api.fullscreenenabled && c.api.requestfullscreen(b) }, _exitfullscreen: function() { var b, c = a.jplayer.nativefeatures.fullscreen; c.used.webkitvideo && (b = this.htmlelement.video), c.api.fullscreenenabled && c.api.exitfullscreen(b) }, _html_initmedia: function(b) { var c = a(this.htmlelement.media).empty(); a.each(b.track || [], function(a, b) { var d = document.createelement("track"); d.setattribute("kind", b.kind ? b.kind : ""), d.setattribute("src", b.src ? b.src : ""), d.setattribute("srclang", b.srclang ? b.srclang : ""), d.setattribute("label", b.label ? b.label : ""), b.def && d.setattribute("default", b.def), c.append(d) }), this.htmlelement.media.src = this.status.src, "none" !== this.options.preload && this._html_load(), this._trigger(a.jplayer.event.timeupdate) }, _html_setformat: function(b) { var c = this; a.each(this.formats, function(a, d) { return c.html.support[d] && b[d] ? (c.status.src = b[d], c.status.format[d] = !0, c.status.formattype = d, !1) : void 0 }) }, _html_setaudio: function(a) { this._html_setformat(a), this.htmlelement.media = this.htmlelement.audio, this._html_initmedia(a) }, _html_setvideo: function(a) { this._html_setformat(a), this.status.nativevideocontrols && (this.htmlelement.video.poster = this._validstring(a.poster) ? a.poster : ""), this.htmlelement.media = this.htmlelement.video, this._html_initmedia(a) }, _html_resetmedia: function() { this.htmlelement.media && (this.htmlelement.media.id !== this.internal.video.id || this.status.nativevideocontrols || this.internal.video.jq.css({ width: "0px", height: "0px" }), this.htmlelement.media.pause()) }, _html_clearmedia: function() { this.htmlelement.media && (this.htmlelement.media.src = "about:blank", this.htmlelement.media.load()) }, _html_load: function() { this.status.waitforload && (this.status.waitforload = !1, this.htmlelement.media.load()), cleartimeout(this.internal.htmldlycmdid) }, _html_play: function(a) { var b = this, c = this.htmlelement.media; if (this.androidfix.pause = !1, this._html_load(), this.androidfix.setmedia) this.androidfix.play = !0, this.androidfix.time = a; else if (isnan(a)) c.play(); else { this.internal.cmdsignored && c.play(); try { if (c.seekable && !("object" == typeof c.seekable && c.seekable.length > 0)) throw 1; c.currenttime = a, c.play() } catch (d) { return void(this.internal.htmldlycmdid = settimeout(function() { b.play(a) }, 250)) } } this._html_checkwaitforplay() }, _html_pause: function(a) { var b = this, c = this.htmlelement.media; if (this.androidfix.play = !1, a > 0 ? this._html_load() : cleartimeout(this.internal.htmldlycmdid), c.pause(), this.androidfix.setmedia) this.androidfix.pause = !0, this.androidfix.time = a; else if (!isnan(a)) try { if (c.seekable && !("object" == typeof c.seekable && c.seekable.length > 0)) throw 1; c.currenttime = a } catch (d) { return void(this.internal.htmldlycmdid = settimeout(function() { b.pause(a) }, 250)) } a > 0 && this._html_checkwaitforplay() }, _html_playhead: function(a) { var b = this, c = this.htmlelement.media; this._html_load(); try { if ("object" == typeof c.seekable && c.seekable.length > 0) c.currenttime = a * c.seekable.end(c.seekable.length - 1) / 100; else { if (!(c.duration > 0) || isnan(c.duration)) throw "e"; c.currenttime = a * c.duration / 100 } } catch (d) { return void(this.internal.htmldlycmdid = settimeout(function() { b.playhead(a) }, 250)) } this.status.waitforload || this._html_checkwaitforplay() }, _html_checkwaitforplay: function() { this.status.waitforplay && (this.status.waitforplay = !1, this.css.jq.videoplay.length && this.css.jq.videoplay.hide(), this.status.video && (this.internal.poster.jq.hide(), this.internal.video.jq.css({ width: this.status.width, height: this.status.height }))) }, _html_setproperty: function(a, b) { this.html.audio.available && (this.htmlelement.audio[a] = b), this.html.video.available && (this.htmlelement.video[a] = b) }, _aurora_setaudio: function(b) { var c = this; a.each(this.formats, function(a, d) { return c.aurora.support[d] && b[d] ? (c.status.src = b[d], c.status.format[d] = !0, c.status.formattype = d, !1) : void 0 }), this.aurora.player = new av.player.fromurl(this.status.src), this._addauroraeventlisteners(this.aurora.player, this.aurora), "auto" === this.options.preload && (this._aurora_load(), this.status.waitforload = !1) }, _aurora_resetmedia: function() { this.aurora.player && this.aurora.player.stop() }, _aurora_clearmedia: function() {}, _aurora_load: function() { this.status.waitforload && (this.status.waitforload = !1, this.aurora.player.preload()) }, _aurora_play: function(b) { this.status.waitforload || isnan(b) || this.aurora.player.seek(b), this.aurora.player.playing || this.aurora.player.play(), this.status.waitforload = !1, this._aurora_checkwaitforplay(), this._updatebuttons(!0), this._trigger(a.jplayer.event.play) }, _aurora_pause: function(b) { isnan(b) || this.aurora.player.seek(1e3 * b), this.aurora.player.pause(), b > 0 && this._aurora_checkwaitforplay(), this._updatebuttons(!1), this._trigger(a.jplayer.event.pause) }, _aurora_playhead: function(a) { this.aurora.player.duration > 0 && this.aurora.player.seek(a * this.aurora.player.duration / 100), this.status.waitforload || this._aurora_checkwaitforplay() }, _aurora_checkwaitforplay: function() { this.status.waitforplay && (this.status.waitforplay = !1) }, _aurora_volume: function(a) { this.aurora.player.volume = 100 * a }, _aurora_mute: function(a) { a ? (this.aurora.properties.lastvolume = this.aurora.player.volume, this.aurora.player.volume = 0) : this.aurora.player.volume = this.aurora.properties.lastvolume, this.aurora.properties.muted = a }, _flash_setaudio: function(b) { var c = this; try { a.each(this.formats, function(a, d) { if (c.flash.support[d] && b[d]) { switch (d) { case "m4a": case "fla": c._getmovie().fl_setaudio_m4a(b[d]); break; case "mp3": c._getmovie().fl_setaudio_mp3(b[d]); break; case "rtmpa": c._getmovie().fl_setaudio_rtmp(b[d]) } return c.status.src = b[d], c.status.format[d] = !0, c.status.formattype = d, !1 } }), "auto" === this.options.preload && (this._flash_load(), this.status.waitforload = !1) } catch (d) { this._flasherror(d) } }, _flash_setvideo: function(b) { var c = this; try { a.each(this.formats, function(a, d) { if (c.flash.support[d] && b[d]) { switch (d) { case "m4v": case "flv": c._getmovie().fl_setvideo_m4v(b[d]); break; case "rtmpv": c._getmovie().fl_setvideo_rtmp(b[d]) } return c.status.src = b[d], c.status.format[d] = !0, c.status.formattype = d, !1 } }), "auto" === this.options.preload && (this._flash_load(), this.status.waitforload = !1) } catch (d) { this._flasherror(d) } }, _flash_resetmedia: function() { this.internal.flash.jq.css({ width: "0px", height: "0px" }), this._flash_pause(0 / 0) }, _flash_clearmedia: function() { 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 = !1 }, _flash_play: function(a) { try { this._getmovie().fl_play(a) } catch (b) { this._flasherror(b) } this.status.waitforload = !1, this._flash_checkwaitforplay() }, _flash_pause: function(a) { try { this._getmovie().fl_pause(a) } catch (b) { this._flasherror(b) } a > 0 && (this.status.waitforload = !1, 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() { this.status.waitforplay && (this.status.waitforplay = !1, this.css.jq.videoplay.length && this.css.jq.videoplay.hide(), 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] }, _getflashpluginversion: function() { var a, b = 0; if (window.activexobject) try { if (a = new activexobject("shockwaveflash.shockwaveflash")) { var c = a.getvariable("$version"); c && (c = c.split(" ")[1].split(","), b = parseint(c[0], 10) + "." + parseint(c[1], 10)) } } catch (d) {} else navigator.plugins && navigator.mimetypes.length > 0 && (a = navigator.plugins["shockwave flash"], a && (b = navigator.plugins["shockwave flash"].description.replace(/.*\s(\d+\.\d+).*/, "$1"))); return 1 * b }, _checkforflash: function(a) { var b = !1; return this._getflashpluginversion() >= a && (b = !0), b }, _validstring: function(a) { return a && "string" == typeof a }, _limitvalue: function(a, b, c) { return b > a ? b : a > c ? c : a }, _urlnotseterror: function(b) { this._error({ type: a.jplayer.error.url_not_set, context: b, message: a.jplayer.errormsg.url_not_set, hint: a.jplayer.errorhint.url_not_set }) }, _flasherror: function(b) { var c; c = this.internal.ready ? "flash_disabled" : "flash", this._error({ type: a.jplayer.error[c], context: this.internal.flash.swf, message: a.jplayer.errormsg[c] + b.message, hint: a.jplayer.errorhint[c] }), this.internal.flash.jq.css({ width: "1px", height: "1px" }) }, _error: function(b) { this._trigger(a.jplayer.event.error, b), this.options.erroralerts && this._alert("error!" + (b.message ? "\n" + b.message : "") + (b.hint ? "\n" + b.hint : "") + "\ncontext: " + b.context) }, _warning: function(c) { this._trigger(a.jplayer.event.warning, b, c), this.options.warningalerts && this._alert("warning!" + (c.message ? "\n" + c.message : "") + (c.hint ? "\n" + c.hint : "") + "\ncontext: " + c.context) }, _alert: function(a) { var b = "jplayer " + this.version.script + " : id='" + this.internal.self.id + "' : " + a; this.options.consolealerts ? window.console && window.console.log && window.console.log(b) : alert(b) }, _emulatehtmlbridge: function() { var b = this; a.each(a.jplayer.emulatemethods.split(/\s+/g), function(a, c) { b.internal.domnode[c] = function(a) { b[c](a) } }), a.each(a.jplayer.event, function(c, d) { var e = !0; a.each(a.jplayer.reservedevent.split(/\s+/g), function(a, b) { return b === c ? (e = !1, !1) : void 0 }), e && b.element.bind(d + ".jplayer.jplayerhtml", function() { b._emulatehtmlupdate(); var a = document.createevent("event"); a.initevent(c, !1, !0), b.internal.domnode.dispatchevent(a) }) }) }, _emulatehtmlupdate: function() { var b = this; a.each(a.jplayer.emulatestatus.split(/\s+/g), function(a, c) { b.internal.domnode[c] = b.status[c] }), a.each(a.jplayer.emulateoptions.split(/\s+/g), function(a, c) { b.internal.domnode[c] = b.options[c] }) }, _destroyhtmlbridge: function() { var b = this; this.element.unbind(".jplayerhtml"); var c = a.jplayer.emulatemethods + " " + a.jplayer.emulatestatus + " " + a.jplayer.emulateoptions; a.each(c.split(/\s+/g), function(a, c) { delete b.internal.domnode[c] }) } }, a.jplayer.error = { flash: "e_flash", flash_disabled: "e_flash_disabled", no_solution: "e_no_solution", no_support: "e_no_support", url: "e_url", url_not_set: "e_url_not_set", version: "e_version" }, a.jplayer.errormsg = { flash: "jplayer's flash fallback is not configured correctly, or a command was issued before the jplayer ready event. details: ", flash_disabled: "jplayer's flash fallback has been disabled by the browser due to the css rules you have used. 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 " + a.jplayer.prototype.version.script + " needs jplayer.swf version " + a.jplayer.prototype.version.needflash + " but found " }, a.jplayer.errorhint = { flash: "check your swfpath option and that jplayer.swf is there.", flash_disabled: "check that you have not display:none; the jplayer entity or any ancestor.", 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." }, a.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" }, a.jplayer.warningmsg = { css_selector_count: "the number of css selectors 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." }, a.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." } });