/* * flowplayer.js 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 . * */ !(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,onMetaDataChange,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 @VERSION'; 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() { 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 (!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, o; try { o = navigator.plugins['Shockwave Flash']; if (o[0].enabledPlugin != null) { f = o.description.slice(16); } } catch (p) { 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: '@VERSION' }; jQuery.tools.flashembed = { conf: b }; jQuery.fn.flashembed = function(l, f) { return this.each(function() { $(this).data('flashembed', flashembed(this, l, f)); }); }; } })();