/* * flowplayer.js 3.2.12. The Flowplayer API * * Copyright 2009-2011 Flowplayer Oy * * This file is part of Flowplayer. * * Flowplayer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Flowplayer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Flowplayer. If not, see . * * Date: ${date} * Revision: ${revision} */ !function () { function h(p) { console.log("$f.fireEvent", [].slice.call(p)) } function l(r) { if (!r || typeof r != "object") { return r } var p = new r.constructor(); for (var q in r) { if (r.hasOwnProperty(q)) { p[q] = l(r[q]) } } return p } function n(u, r) { if (!u) { return } var p, q = 0, s = u.length; if (s === undefined) { for (p in u) { if (r.call(u[p], p, u[p]) === false) { break } } } else { for (var t = u[0]; q < s && r.call(t, q, t) !== false; t = u[++q]) { } } return u } function c(p) { return document.getElementById(p) } function j(r, q, p) { if (typeof q != "object") { return r } if (r && q) { n(q, function (s, t) { if (!p || typeof t != "function") { r[s] = t } }) } return r } function o(t) { var r = t.indexOf("."); if (r != -1) { var q = t.slice(0, r) || "*"; var p = t.slice(r + 1, t.length); var s = []; n(document.getElementsByTagName(q), function () { if (this.className && this.className.indexOf(p) != -1) { s.push(this) } }); return s } } function g(p) { p = p || window.event; if (p.preventDefault) { p.stopPropagation(); p.preventDefault() } else { p.returnValue = false; p.cancelBubble = true } return false } function k(r, p, q) { r[p] = r[p] || []; r[p].push(q) } function e(p) { return p.replace(/&/g, "%26").replace(/&/g, "%26").replace(/=/g, "%3D") } function f() { return"_" + ("" + Math.random()).slice(2, 10) } var i = function (u, s, t) { var r = this, q = {}, v = {}; r.index = s; if (typeof u == "string") { u = {url: u} } j(this, u, true); n(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","), function () { var w = "on" + this; if (w.indexOf("*") != -1) { w = w.slice(0, w.length - 1); var x = "onBefore" + w.slice(2); r[x] = function (y) { k(v, x, y); return r } } r[w] = function (y) { k(v, w, y); return r }; if (s == -1) { if (r[x]) { t[x] = r[x] } if (r[w]) { t[w] = r[w] } } }); j(this, {onCuepoint: function (y, x) { if (arguments.length == 1) { q.embedded = [null, y]; return r } if (typeof y == "number") { y = [y] } var w = f(); q[w] = [y, x]; if (t.isLoaded()) { t._api().fp_addCuepoints(y, s, w) } return r }, update: function (x) { j(r, x); if (t.isLoaded()) { t._api().fp_updateClip(x, s) } var w = t.getConfig(); var y = (s == -1) ? w.clip : w.playlist[s]; j(y, x, true) }, _fireEvent: function (w, z, x, B) { if (w == "onLoad") { n(q, function (C, D) { if (D[0]) { t._api().fp_addCuepoints(D[0], s, C) } }); return false } B = B || r; if (w == "onCuepoint") { var A = q[z]; if (A) { return A[1].call(t, B, x) } } if (z && "onBeforeBegin,onMetaData,onStart,onUpdate,onResume".indexOf(w) != -1) { j(B, z); if (z.metaData) { if (!B.duration) { B.duration = z.metaData.duration } else { B.fullDuration = z.metaData.duration } } } var y = true; n(v[w], function () { y = this.call(t, B, z, x) }); return y }}); if (u.onCuepoint) { var p = u.onCuepoint; r.onCuepoint.apply(r, typeof p == "function" ? [p] : p); delete u.onCuepoint } n(u, function (w, x) { if (typeof x == "function") { k(v, w, x); delete u[w] } }); if (s == -1) { t.onCuepoint = this.onCuepoint } }; var m = function (q, s, r, u) { var p = this, t = {}, v = false; if (u) { j(t, u) } n(s, function (w, x) { if (typeof x == "function") { t[w] = x; delete s[w] } }); j(this, {animate: function (z, A, y) { if (!z) { return p } if (typeof A == "function") { y = A; A = 500 } if (typeof z == "string") { var x = z; z = {}; z[x] = A; A = 500 } if (y) { var w = f(); t[w] = y } if (A === undefined) { A = 500 } s = r._api().fp_animate(q, z, A, w); return p }, css: function (x, y) { if (y !== undefined) { var w = {}; w[x] = y; x = w } s = r._api().fp_css(q, x); j(p, s); return p }, show: function () { this.display = "block"; r._api().fp_showPlugin(q); return p }, hide: function () { this.display = "none"; r._api().fp_hidePlugin(q); return p }, toggle: function () { this.display = r._api().fp_togglePlugin(q); return p }, fadeTo: function (z, y, x) { if (typeof y == "function") { x = y; y = 500 } if (x) { var w = f(); t[w] = x } this.display = r._api().fp_fadeTo(q, z, y, w); this.opacity = z; return p }, fadeIn: function (x, w) { return p.fadeTo(1, x, w) }, fadeOut: function (x, w) { return p.fadeTo(0, x, w) }, getName: function () { return q }, getPlayer: function () { return r }, _fireEvent: function (x, w, y) { if (x == "onUpdate") { var A = r._api().fp_getPlugin(q); if (!A) { return } j(p, A); delete p.methods; if (!v) { n(A.methods, function () { var C = "" + this; p[C] = function () { var D = [].slice.call(arguments); var E = r._api().fp_invoke(q, C, D); return E === "undefined" || E === undefined ? p : E } }); v = true } } var B = t[x]; if (B) { var z = B.apply(p, w); if (x.slice(0, 1) == "_") { delete t[x] } return z } return p }}) }; function b(r, H, u) { var x = this, w = null, E = false, v, t, G = [], z = {}, y = {}, F, s, q, D, p, B; j(x, {id: function () { return F }, isLoaded: function () { return(w !== null && w.fp_play !== undefined && !E) }, getParent: function () { return r }, hide: function (I) { if (I) { r.style.height = "0px" } if (x.isLoaded()) { w.style.height = "0px" } return x }, show: function () { r.style.height = B + "px"; if (x.isLoaded()) { w.style.height = p + "px" } return x }, isHidden: function () { return x.isLoaded() && parseInt(w.style.height, 10) === 0 }, load: function (K) { if (!x.isLoaded() && x._fireEvent("onBeforeLoad") !== false) { var I = function () { if (v && !flashembed.isSupported(H.version)) { r.innerHTML = "" } if (K) { K.cached = true; k(y, "onLoad", K) } flashembed(r, H, {config: u}) }; var J = 0; n(a, function () { this.unload(function (L) { if (++J == a.length) { I() } }) }) } return x }, unload: function (K) { if (v.replace(/\s/g, "") !== "") { if (x._fireEvent("onBeforeUnload") === false) { if (K) { K(false) } return x } E = true; try { if (w) { if (w.fp_isFullscreen()) { w.fp_toggleFullscreen() } w.fp_close(); x._fireEvent("onUnload") } } catch (I) { } var J = function () { w = null; r.innerHTML = v; E = false; if (K) { K(true) } }; if (/WebKit/i.test(navigator.userAgent) && !/Chrome/i.test(navigator.userAgent)) { setTimeout(J, 0) } else { J() } } else { if (K) { K(false) } } return x }, getClip: function (I) { if (I === undefined) { I = D } return G[I] }, getCommonClip: function () { return t }, getPlaylist: function () { return G }, getPlugin: function (I) { var K = z[I]; if (!K && x.isLoaded()) { var J = x._api().fp_getPlugin(I); if (J) { K = new m(I, J, x); z[I] = K } } return K }, getScreen: function () { return x.getPlugin("screen") }, getControls: function () { return x.getPlugin("controls")._fireEvent("onUpdate") }, getLogo: function () { try { return x.getPlugin("logo")._fireEvent("onUpdate") } catch (I) { } }, getPlay: function () { return x.getPlugin("play")._fireEvent("onUpdate") }, getConfig: function (I) { return I ? l(u) : u }, getFlashParams: function () { return H }, loadPlugin: function (L, K, N, M) { if (typeof N == "function") { M = N; N = {} } var J = M ? f() : "_"; x._api().fp_loadPlugin(L, K, N, J); var I = {}; I[J] = M; var O = new m(L, null, x, I); z[L] = O; return O }, getState: function () { return x.isLoaded() ? w.fp_getState() : -1 }, play: function (J, I) { var K = function () { if (J !== undefined) { x._api().fp_play(J, I) } else { x._api().fp_play() } }; if (x.isLoaded()) { K() } else { if (E) { setTimeout(function () { x.play(J, I) }, 50) } else { x.load(function () { K() }) } } return x }, getVersion: function () { var J = "flowplayer.js 3.2.12"; if (x.isLoaded()) { var I = w.fp_getVersion(); I.push(J); return I } return J }, _api: function () { if (!x.isLoaded()) { throw"Flowplayer " + x.id() + " not loaded when calling an API method" } return w }, setClip: function (I) { n(I, function (J, K) { if (typeof K == "function") { k(y, J, K); delete I[J] } else { if (J == "onCuepoint") { $f(r).getCommonClip().onCuepoint(I[J][0], I[J][1]) } } }); x.setPlaylist([I]); return x }, getIndex: function () { return q }, bufferAnimate: function (I) { w.fp_bufferAnimate(I === undefined || I); return x }, _swfHeight: function () { return w.clientHeight }}); n(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error,MouseOver,MouseOut").split(","), function () { var I = "on" + this; if (I.indexOf("*") != -1) { I = I.slice(0, I.length - 1); var J = "onBefore" + I.slice(2); x[J] = function (K) { k(y, J, K); return x } } x[I] = function (K) { k(y, I, K); return x } }); n(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,toggleFullscreen,reset,close,setPlaylist,addClip,playFeed,setKeyboardShortcutsEnabled,isKeyboardShortcutsEnabled").split(","), function () { var I = this; x[I] = function (K, J) { if (!x.isLoaded()) { return x } var L = null; if (K !== undefined && J !== undefined) { L = w["fp_" + I](K, J) } else { L = (K === undefined) ? w["fp_" + I]() : w["fp_" + I](K) } return L === "undefined" || L === undefined ? x : L } }); x._fireEvent = function (R) { if (typeof R == "string") { R = [R] } var S = R[0], P = R[1], N = R[2], M = R[3], L = 0; if (u.debug) { h(R) } if (!x.isLoaded() && S == "onLoad" && P == "player") { w = w || c(s); p = x._swfHeight(); n(G, function () { this._fireEvent("onLoad") }); n(z, function (T, U) { U._fireEvent("onUpdate") }); t._fireEvent("onLoad") } if (S == "onLoad" && P != "player") { return } if (S == "onError") { if (typeof P == "string" || (typeof P == "number" && typeof N == "number")) { P = N; N = M } } if (S == "onContextMenu") { n(u.contextMenu[P], function (T, U) { U.call(x) }); return } if (S == "onPluginEvent" || S == "onBeforePluginEvent") { var I = P.name || P; var J = z[I]; if (J) { J._fireEvent("onUpdate", P); return J._fireEvent(N, R.slice(3)) } return } if (S == "onPlaylistReplace") { G = []; var O = 0; n(P, function () { G.push(new i(this, O++, x)) }) } if (S == "onClipAdd") { if (P.isInStream) { return } P = new i(P, N, x); G.splice(N, 0, P); for (L = N + 1; L < G.length; L++) { G[L].index++ } } var Q = true; if (typeof P == "number" && P < G.length) { D = P; var K = G[P]; if (K) { Q = K._fireEvent(S, N, M) } if (!K || Q !== false) { Q = t._fireEvent(S, N, M, K) } } n(y[S], function () { Q = this.call(x, P, N); if (this.cached) { y[S].splice(L, 1) } if (Q === false) { return false } L++ }); return Q }; function C() { r.innerHTML=''; // Moodle hack - we do not want splashscreens, unfortunately there is not switch to disable them if ($f(r)) { $f(r).getParent().innerHTML = ""; q = $f(r).getIndex(); a[q] = x } else { a.push(x); q = a.length - 1 } B = parseInt(r.style.height, 10) || r.clientHeight; F = r.id || "fp" + f(); s = H.id || F + "_api"; H.id = s; v = r.innerHTML; if (typeof u == "string") { u = {clip: {url: u}} } u.playerId = F; u.clip = u.clip || {}; if (r.getAttribute("href", 2) && !u.clip.url) { u.clip.url = r.getAttribute("href", 2) } if (u.clip.url) { u.clip.url = e(u.clip.url) } t = new i(u.clip, -1, x); u.playlist = u.playlist || [u.clip]; var J = 0; n(u.playlist, function () { var M = this; if (typeof M == "object" && M.length) { M = {url: "" + M} } if (M.url) { M.url = e(M.url) } n(u.clip, function (N, O) { if (O !== undefined && M[N] === undefined && typeof O != "function") { M[N] = O } }); u.playlist[J] = M; M = new i(M, J, x); G.push(M); J++ }); n(u, function (M, N) { if (typeof N == "function") { if (t[M]) { t[M](N) } else { k(y, M, N) } delete u[M] } }); n(u.plugins, function (M, N) { if (N) { z[M] = new m(M, N, x) } }); if (!u.plugins || u.plugins.controls === undefined) { z.controls = new m("controls", null, x) } z.canvas = new m("canvas", null, x); v = r.innerHTML; function L(M) { if (/iPad|iPhone|iPod/i.test(navigator.userAgent) && !/.flv$/i.test(G[0].url) && !K()) { return true } if (!x.isLoaded() && x._fireEvent("onBeforeClick") !== false) { x.load() } return g(M) } function K() { return x.hasiPadSupport && x.hasiPadSupport() } function I() { if (v.replace(/\s/g, "") !== "") { if (r.addEventListener) { r.addEventListener("click", L, false) } else { if (r.attachEvent) { r.attachEvent("onclick", L) } } } else { if (r.addEventListener && !K()) { r.addEventListener("click", g, false) } x.load() } } setTimeout(I, 0) } if (typeof r == "string") { var A = c(r); if (!A) { throw"Flowplayer cannot access element: " + r } r = A; C() } else { C() } } var a = []; function d(p) { this.length = p.length; this.each = function (r) { n(p, r) }; this.size = function () { return p.length }; var q = this; for (name in b.prototype) { q[name] = function () { var r = arguments; q.each(function () { this[name].apply(this, r) }) } } } window.flowplayer = window.$f = function () { var q = null; var p = arguments[0]; if(!flashembed.isSupported([6, 65])){return null;} // Moodle hack - we do not want the missing flash hints - we need the original links for accessibility and incompatible browsers if (!arguments.length) { n(a, function () { if (this.isLoaded()) { q = this; return false } }); return q || a[0] } if (arguments.length == 1) { if (typeof p == "number") { return a[p] } else { if (p == "*") { return new d(a) } n(a, function () { if (this.id() == p.id || this.id() == p || this.getParent() == p) { q = this; return false } }); return q } } if (arguments.length > 1) { var u = arguments[1], r = (arguments.length == 3) ? arguments[2] : {}; if (typeof u == "string") { u = {src: u} } u = j({bgcolor: "#000000", version: [10, 1], expressInstall: "http://releases.flowplayer.org/swf/expressinstall.swf", cachebusting: false}, u); if (typeof p == "string") { if (p.indexOf(".") != -1) { var t = []; n(o(p), function () { t.push(new b(this, l(u), l(r))) }); return new d(t) } else { var s = c(p); return new b(s !== null ? s : l(p), l(u), l(r)) } } else { if (p) { return new b(p, l(u), l(r)) } } } return null }; j(window.$f, {fireEvent: function () { var q = [].slice.call(arguments); var r = $f(q[0]); return r ? r._fireEvent(q.slice(1)) : null }, addPlugin: function (p, q) { b.prototype[p] = q; return $f }, each: n, extend: j}); if (typeof jQuery == "function") { jQuery.fn.flowplayer = function (r, q) { if (!arguments.length || typeof arguments[0] == "number") { var p = []; this.each(function () { var s = $f(this); if (s) { p.push(s) } }); return arguments.length ? p[arguments[0]] : new d(p) } return this.each(function () { $f(this, l(r), q ? l(q) : {}) }) } } }(); !function () { var h = document.all, j = "http://get.adobe.com/flashplayer", c = typeof jQuery == "function", e = /(\d+)[^\d]+(\d+)[^\d]*(\d*)/, b = {width: "100%", height: "100%", id: "_" + ("" + Math.random()).slice(9), allowfullscreen: true, allowscriptaccess: "always", quality: "high", version: [3, 0], onFail: null, expressInstall: null, w3c: false, cachebusting: false}; if (window.attachEvent) { window.attachEvent("onbeforeunload", function () { __flash_unloadHandler = function () { }; __flash_savedUnloadHandler = function () { } }) } function i(m, l) { if (l) { for (var f in l) { if (l.hasOwnProperty(f)) { m[f] = l[f] } } } return m } function a(f, n) { var m = []; for (var l in f) { if (f.hasOwnProperty(l)) { m[l] = n(f[l]) } } return m } window.flashembed = function (f, m, l) { if (typeof f == "string") { f = document.getElementById(f.replace("#", "")) } if (!f) { return } if (typeof m == "string") { m = {src: m} } return new d(f, i(i({}, b), m), l) }; var g = i(window.flashembed, {conf: b, getVersion: function () { var m, f; try { f = navigator.plugins["Shockwave Flash"].description.slice(16) } catch (o) { try { m = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); f = m && m.GetVariable("$version") } catch (n) { try { m = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); f = m && m.GetVariable("$version") } catch (l) { } } } f = e.exec(f); return f ? [1 * f[1], 1 * f[(f[1] * 1 > 9 ? 2 : 3)] * 1] : [0, 0] }, asString: function (l) { if (l === null || l === undefined) { return null } var f = typeof l; if (f == "object" && l.push) { f = "array" } switch (f) { case"string": l = l.replace(new RegExp('(["\\\\])', "g"), "\\$1"); l = l.replace(/^\s?(\d+\.?\d*)%/, "$1pct"); return'"' + l + '"'; case"array": return"[" + a(l,function (o) { return g.asString(o) }).join(",") + "]"; case"function": return'"function()"'; case"object": var m = []; for (var n in l) { if (l.hasOwnProperty(n)) { m.push('"' + n + '":' + g.asString(l[n])) } } return"{" + m.join(",") + "}" } return String(l).replace(/\s/g, " ").replace(/\'/g, '"') }, getHTML: function (o, l) { o = i({}, o); var n = '' } o.width = o.height = o.id = o.w3c = o.src = null; o.onFail = o.version = o.expressInstall = null; for (var m in o) { if (o[m]) { n += '' } } var p = ""; if (l) { for (var f in l) { if (l[f]) { var q = l[f]; p += f + "=" + (/function|object/.test(typeof q) ? g.asString(q) : q) + "&" } } p = p.slice(0, -1); n += '" } n += ""; return n }, isSupported: function (f) { return k[0] > f[0] || k[0] == f[0] && k[1] >= f[1] }}); var k = g.getVersion(); function d(f, n, m) { if (g.isSupported(n.version)) { f.innerHTML = g.getHTML(n, m) } else { if (n.expressInstall && g.isSupported([6, 65])) { f.innerHTML = g.getHTML(i(n, {src: n.expressInstall}), {MMredirectURL: encodeURIComponent(location.href), MMplayerType: "PlugIn", MMdoctitle: document.title}) } else { if (!f.innerHTML.replace(/\s/g, "")) { f.innerHTML = "

Flash version " + n.version + " or greater is required

" + (k[0] > 0 ? "Your version is " + k : "You have no flash plugin installed") + "

" + (f.tagName == "A" ? "

Click here to download latest version

" : "

Download latest version from here

"); if (f.tagName == "A" || f.tagName == "DIV") { f.onclick = function () { location.href = j } } } if (n.onFail) { var l = n.onFail.call(this); if (typeof l == "string") { f.innerHTML = l } } } } if (h) { window[n.id] = document.getElementById(n.id) } i(this, {getRoot: function () { return f }, getOptions: function () { return n }, getConf: function () { return m }, getApi: function () { return f.firstChild }}) } if (c) { jQuery.tools = jQuery.tools || {version: "3.2.12"}; jQuery.tools.flashembed = {conf: b}; jQuery.fn.flashembed = function (l, f) { return this.each(function () { $(this).data("flashembed", flashembed(this, l, f)) }) } } }();