/*
* 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 = '';
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));
});
};
}
})();