MDL-38673 import flash based FlowPlayer 3.2.16
authorPetr Škoda <commits@skodak.org>
Sun, 24 Mar 2013 17:35:09 +0000 (18:35 +0100)
committerPetr Škoda <commits@skodak.org>
Sun, 24 Mar 2013 17:35:09 +0000 (18:35 +0100)
lib/flowplayer/README.txt
lib/flowplayer/flowplayer-3.2.11.js [deleted file]
lib/flowplayer/flowplayer-3.2.11.min.js [deleted file]
lib/flowplayer/flowplayer-3.2.12.js [new file with mode: 0644]
lib/flowplayer/flowplayer-3.2.12.min.js [new file with mode: 0644]
lib/flowplayer/flowplayer-3.2.14.swf [deleted file]
lib/flowplayer/flowplayer-3.2.16.swf [new file with mode: 0644]
lib/flowplayer/flowplayer.controls-3.2.13.swf [deleted file]
lib/flowplayer/flowplayer.controls-3.2.15.swf [new file with mode: 0644]
lib/javascript-static.js
lib/thirdpartylibs.xml

index 742633c..1375e00 100644 (file)
@@ -1,8 +1,34 @@
 Version history:
 
+3.2.16
+------
+- #15 fixes for #627, handle the display init on startup.
+- #615 dispatch begin if in paused mode too early.
+- #629 if start has been dispatched already prevent dispatching many begin events.
+- #20 for the free player swap the logo with the stage video mask to display underneath not on top.
+- #42 pass in stream clips through and close the stream before returning to the parent clip.
+- #52 when replaying flag start has dispatched on the current clip.
+- #44 fixes for #627 check if the stagevideo dimensions and positioning has changed to update the stage video mask with.
+- unbinding and binding stage video events caused issues with instream playlists therefore has to be kept binded.
+  unbinded stage video events during seeking to prevent the mask repositioning.
+- #53 update url filter to accomodate for pretty urls with semi colons.
+- #50 if we have metadata already set it is being updated during seeks and switching, dispatch metadata change events instead.
+
+3.2.15
+------
+- #614 when the clip ends if the next clip in the provider has a different provider close the provider stream.
+- #627 only detach / attach the display on start events which causes issues in buffering events after a seek in stagevideo.
+- #627 re-enable stagevideo state change listeners if stagevideo is available or detach the fullscreen events on first call.
+- #9 when replaying from stopping, connection does not receive callbacks anymore.
+
+
+
+
 3.2.13
 ------
 - Updated to automatically load the latest controls and audio plugins
+- #612 add some logging for the stagevideo render state to determine what mode the hardware acceleration is in for various systems.
+- #628 opera browsers do not return filesize correctly for latest flash players so require to use load completion instead which may help with gzipped files also.
 
 3.2.12
 ------
diff --git a/lib/flowplayer/flowplayer-3.2.11.js b/lib/flowplayer/flowplayer-3.2.11.js
deleted file mode 100644 (file)
index c6e51cf..0000000
+++ /dev/null
@@ -1,1004 +0,0 @@
-/*
- * flowplayer.js 3.2.11. 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 <http://www.gnu.org/licenses/>.
- *
- * Date: 2012-06-16 10:34:45 -0400 (Sat, 16 Jun 2012)
- * Revision: 808
- */
-(function () {
-    function g(o) {
-        console.log("$f.fireEvent", [].slice.call(o))
-    }
-
-    function k(q) {
-        if (!q || typeof q != "object") {
-            return q
-        }
-        var o = new q.constructor();
-        for (var p in q) {
-            if (q.hasOwnProperty(p)) {
-                o[p] = k(q[p])
-            }
-        }
-        return o
-    }
-
-    function m(t, q) {
-        if (!t) {
-            return
-        }
-        var o, p = 0, r = t.length;
-        if (r === undefined) {
-            for (o in t) {
-                if (q.call(t[o], o, t[o]) === false) {
-                    break
-                }
-            }
-        } else {
-            for (var s = t[0]; p < r && q.call(s, p, s) !== false; s = t[++p]) {
-            }
-        }
-        return t
-    }
-
-    function c(o) {
-        return document.getElementById(o)
-    }
-
-    function i(q, p, o) {
-        if (typeof p != "object") {
-            return q
-        }
-        if (q && p) {
-            m(p, function (r, s) {
-                if (!o || typeof s != "function") {
-                    q[r] = s
-                }
-            })
-        }
-        return q
-    }
-
-    function n(s) {
-        var q = s.indexOf(".");
-        if (q != -1) {
-            var p = s.slice(0, q) || "*";
-            var o = s.slice(q + 1, s.length);
-            var r = [];
-            m(document.getElementsByTagName(p), function () {
-                if (this.className && this.className.indexOf(o) != -1) {
-                    r.push(this)
-                }
-            });
-            return r
-        }
-    }
-
-    function f(o) {
-        o = o || window.event;
-        if (o.preventDefault) {
-            o.stopPropagation();
-            o.preventDefault()
-        } else {
-            o.returnValue = false;
-            o.cancelBubble = true
-        }
-        return false
-    }
-
-    function j(q, o, p) {
-        q[o] = q[o] || [];
-        q[o].push(p)
-    }
-
-    function e() {
-        return"_" + ("" + Math.random()).slice(2, 10)
-    }
-
-    var h = function (t, r, s) {
-        var q = this, p = {}, u = {};
-        q.index = r;
-        if (typeof t == "string") {
-            t = {url:t}
-        }
-        i(this, t, true);
-        m(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","), function () {
-            var v = "on" + this;
-            if (v.indexOf("*") != -1) {
-                v = v.slice(0, v.length - 1);
-                var w = "onBefore" + v.slice(2);
-                q[w] = function (x) {
-                    j(u, w, x);
-                    return q
-                }
-            }
-            q[v] = function (x) {
-                j(u, v, x);
-                return q
-            };
-            if (r == -1) {
-                if (q[w]) {
-                    s[w] = q[w]
-                }
-                if (q[v]) {
-                    s[v] = q[v]
-                }
-            }
-        });
-        i(this, {onCuepoint:function (x, w) {
-            if (arguments.length == 1) {
-                p.embedded = [null, x];
-                return q
-            }
-            if (typeof x == "number") {
-                x = [x]
-            }
-            var v = e();
-            p[v] = [x, w];
-            if (s.isLoaded()) {
-                s._api().fp_addCuepoints(x, r, v)
-            }
-            return q
-        }, update:function (w) {
-            i(q, w);
-            if (s.isLoaded()) {
-                s._api().fp_updateClip(w, r)
-            }
-            var v = s.getConfig();
-            var x = (r == -1) ? v.clip : v.playlist[r];
-            i(x, w, true)
-        }, _fireEvent:function (v, y, w, A) {
-            if (v == "onLoad") {
-                m(p, function (B, C) {
-                    if (C[0]) {
-                        s._api().fp_addCuepoints(C[0], r, B)
-                    }
-                });
-                return false
-            }
-            A = A || q;
-            if (v == "onCuepoint") {
-                var z = p[y];
-                if (z) {
-                    return z[1].call(s, A, w)
-                }
-            }
-            if (y && "onBeforeBegin,onMetaData,onStart,onUpdate,onResume".indexOf(v) != -1) {
-                i(A, y);
-                if (y.metaData) {
-                    if (!A.duration) {
-                        A.duration = y.metaData.duration
-                    } else {
-                        A.fullDuration = y.metaData.duration
-                    }
-                }
-            }
-            var x = true;
-            m(u[v], function () {
-                x = this.call(s, A, y, w)
-            });
-            return x
-        }});
-        if (t.onCuepoint) {
-            var o = t.onCuepoint;
-            q.onCuepoint.apply(q, typeof o == "function" ? [o] : o);
-            delete t.onCuepoint
-        }
-        m(t, function (v, w) {
-            if (typeof w == "function") {
-                j(u, v, w);
-                delete t[v]
-            }
-        });
-        if (r == -1) {
-            s.onCuepoint = this.onCuepoint
-        }
-    };
-    var l = function (p, r, q, t) {
-        var o = this, s = {}, u = false;
-        if (t) {
-            i(s, t)
-        }
-        m(r, function (v, w) {
-            if (typeof w == "function") {
-                s[v] = w;
-                delete r[v]
-            }
-        });
-        i(this, {animate:function (y, z, x) {
-            if (!y) {
-                return o
-            }
-            if (typeof z == "function") {
-                x = z;
-                z = 500
-            }
-            if (typeof y == "string") {
-                var w = y;
-                y = {};
-                y[w] = z;
-                z = 500
-            }
-            if (x) {
-                var v = e();
-                s[v] = x
-            }
-            if (z === undefined) {
-                z = 500
-            }
-            r = q._api().fp_animate(p, y, z, v);
-            return o
-        }, css:function (w, x) {
-            if (x !== undefined) {
-                var v = {};
-                v[w] = x;
-                w = v
-            }
-            r = q._api().fp_css(p, w);
-            i(o, r);
-            return o
-        }, show:function () {
-            this.display = "block";
-            q._api().fp_showPlugin(p);
-            return o
-        }, hide:function () {
-            this.display = "none";
-            q._api().fp_hidePlugin(p);
-            return o
-        }, toggle:function () {
-            this.display = q._api().fp_togglePlugin(p);
-            return o
-        }, fadeTo:function (y, x, w) {
-            if (typeof x == "function") {
-                w = x;
-                x = 500
-            }
-            if (w) {
-                var v = e();
-                s[v] = w
-            }
-            this.display = q._api().fp_fadeTo(p, y, x, v);
-            this.opacity = y;
-            return o
-        }, fadeIn:function (w, v) {
-            return o.fadeTo(1, w, v)
-        }, fadeOut:function (w, v) {
-            return o.fadeTo(0, w, v)
-        }, getName:function () {
-            return p
-        }, getPlayer:function () {
-            return q
-        }, _fireEvent:function (w, v, x) {
-            if (w == "onUpdate") {
-                var z = q._api().fp_getPlugin(p);
-                if (!z) {
-                    return
-                }
-                i(o, z);
-                delete o.methods;
-                if (!u) {
-                    m(z.methods, function () {
-                        var B = "" + this;
-                        o[B] = function () {
-                            var C = [].slice.call(arguments);
-                            var D = q._api().fp_invoke(p, B, C);
-                            return D === "undefined" || D === undefined ? o : D
-                        }
-                    });
-                    u = true
-                }
-            }
-            var A = s[w];
-            if (A) {
-                var y = A.apply(o, v);
-                if (w.slice(0, 1) == "_") {
-                    delete s[w]
-                }
-                return y
-            }
-            return o
-        }})
-    };
-
-    function b(q, G, t) {
-        var w = this, v = null, D = false, u, s, F = [], y = {}, x = {}, E, r, p, C, o, A;
-        i(w, {id:function () {
-            return E
-        }, isLoaded:function () {
-            return(v !== null && v.fp_play !== undefined && !D)
-        }, getParent:function () {
-            return q
-        }, hide:function (H) {
-            if (H) {
-                q.style.height = "0px"
-            }
-            if (w.isLoaded()) {
-                v.style.height = "0px"
-            }
-            return w
-        }, show:function () {
-            q.style.height = A + "px";
-            if (w.isLoaded()) {
-                v.style.height = o + "px"
-            }
-            return w
-        }, isHidden:function () {
-            return w.isLoaded() && parseInt(v.style.height, 10) === 0
-        }, load:function (J) {
-            if (!w.isLoaded() && w._fireEvent("onBeforeLoad") !== false) {
-                var H = function () {
-                    if (u && !flashembed.isSupported(G.version)) {
-                        q.innerHTML = ""
-                    }
-                    if (J) {
-                        J.cached = true;
-                        j(x, "onLoad", J)
-                    }
-                    flashembed(q, G, {config:t})
-                };
-                var I = 0;
-                m(a, function () {
-                    this.unload(function (K) {
-                        if (++I == a.length) {
-                            H()
-                        }
-                    })
-                })
-            }
-            return w
-        }, unload:function (J) {
-            if (u.replace(/\s/g, "") !== "") {
-                if (w._fireEvent("onBeforeUnload") === false) {
-                    if (J) {
-                        J(false)
-                    }
-                    return w
-                }
-                D = true;
-                try {
-                    if (v) {
-                        if (v.fp_isFullscreen()) {
-                            v.fp_toggleFullscreen()
-                        }
-                        v.fp_close();
-                        w._fireEvent("onUnload")
-                    }
-                } catch (H) {
-                }
-                var I = function () {
-                    v = null;
-                    q.innerHTML = u;
-                    D = false;
-                    if (J) {
-                        J(true)
-                    }
-                };
-                if (/WebKit/i.test(navigator.userAgent) && !/Chrome/i.test(navigator.userAgent)) {
-                    setTimeout(I, 0)
-                } else {
-                    I()
-                }
-            } else {
-                if (J) {
-                    J(false)
-                }
-            }
-            return w
-        }, getClip:function (H) {
-            if (H === undefined) {
-                H = C
-            }
-            return F[H]
-        }, getCommonClip:function () {
-            return s
-        }, getPlaylist:function () {
-            return F
-        }, getPlugin:function (H) {
-            var J = y[H];
-            if (!J && w.isLoaded()) {
-                var I = w._api().fp_getPlugin(H);
-                if (I) {
-                    J = new l(H, I, w);
-                    y[H] = J
-                }
-            }
-            return J
-        }, getScreen:function () {
-            return w.getPlugin("screen")
-        }, getControls:function () {
-            return w.getPlugin("controls")._fireEvent("onUpdate")
-        }, getLogo:function () {
-            try {
-                return w.getPlugin("logo")._fireEvent("onUpdate")
-            } catch (H) {
-            }
-        }, getPlay:function () {
-            return w.getPlugin("play")._fireEvent("onUpdate")
-        }, getConfig:function (H) {
-            return H ? k(t) : t
-        }, getFlashParams:function () {
-            return G
-        }, loadPlugin:function (K, J, M, L) {
-            if (typeof M == "function") {
-                L = M;
-                M = {}
-            }
-            var I = L ? e() : "_";
-            w._api().fp_loadPlugin(K, J, M, I);
-            var H = {};
-            H[I] = L;
-            var N = new l(K, null, w, H);
-            y[K] = N;
-            return N
-        }, getState:function () {
-            return w.isLoaded() ? v.fp_getState() : -1
-        }, play:function (I, H) {
-            var J = function () {
-                if (I !== undefined) {
-                    w._api().fp_play(I, H)
-                } else {
-                    w._api().fp_play()
-                }
-            };
-            if (w.isLoaded()) {
-                J()
-            } else {
-                if (D) {
-                    setTimeout(function () {
-                        w.play(I, H)
-                    }, 50)
-                } else {
-                    w.load(function () {
-                        J()
-                    })
-                }
-            }
-            return w
-        }, getVersion:function () {
-            var I = "flowplayer.js 3.2.11";
-            if (w.isLoaded()) {
-                var H = v.fp_getVersion();
-                H.push(I);
-                return H
-            }
-            return I
-        }, _api:function () {
-            if (!w.isLoaded()) {
-                throw"Flowplayer " + w.id() + " not loaded when calling an API method"
-            }
-            return v
-        }, setClip:function (H) {
-            m(H, function (I, J) {
-                if (typeof J == "function") {
-                    j(x, I, J);
-                    delete H[I]
-                } else {
-                    if (I == "onCuepoint") {
-                        $f(q).getCommonClip().onCuepoint(H[I][0], H[I][1])
-                    }
-                }
-            });
-            w.setPlaylist([H]);
-            return w
-        }, getIndex:function () {
-            return p
-        }, bufferAnimate:function (H) {
-            v.fp_bufferAnimate(H === undefined || H);
-            return w
-        }, _swfHeight:function () {
-            return v.clientHeight
-        }});
-        m(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error,MouseOver,MouseOut").split(","), function () {
-            var H = "on" + this;
-            if (H.indexOf("*") != -1) {
-                H = H.slice(0, H.length - 1);
-                var I = "onBefore" + H.slice(2);
-                w[I] = function (J) {
-                    j(x, I, J);
-                    return w
-                }
-            }
-            w[H] = function (J) {
-                j(x, H, J);
-                return w
-            }
-        });
-        m(("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 H = this;
-            w[H] = function (J, I) {
-                if (!w.isLoaded()) {
-                    return w
-                }
-                var K = null;
-                if (J !== undefined && I !== undefined) {
-                    K = v["fp_" + H](J, I)
-                } else {
-                    K = (J === undefined) ? v["fp_" + H]() : v["fp_" + H](J)
-                }
-                return K === "undefined" || K === undefined ? w : K
-            }
-        });
-        w._fireEvent = function (Q) {
-            if (typeof Q == "string") {
-                Q = [Q]
-            }
-            var R = Q[0], O = Q[1], M = Q[2], L = Q[3], K = 0;
-            if (t.debug) {
-                g(Q)
-            }
-            if (!w.isLoaded() && R == "onLoad" && O == "player") {
-                v = v || c(r);
-                o = w._swfHeight();
-                m(F, function () {
-                    this._fireEvent("onLoad")
-                });
-                m(y, function (S, T) {
-                    T._fireEvent("onUpdate")
-                });
-                s._fireEvent("onLoad")
-            }
-            if (R == "onLoad" && O != "player") {
-                return
-            }
-            if (R == "onError") {
-                if (typeof O == "string" || (typeof O == "number" && typeof M == "number")) {
-                    O = M;
-                    M = L
-                }
-            }
-            if (R == "onContextMenu") {
-                m(t.contextMenu[O], function (S, T) {
-                    T.call(w)
-                });
-                return
-            }
-            if (R == "onPluginEvent" || R == "onBeforePluginEvent") {
-                var H = O.name || O;
-                var I = y[H];
-                if (I) {
-                    I._fireEvent("onUpdate", O);
-                    return I._fireEvent(M, Q.slice(3))
-                }
-                return
-            }
-            if (R == "onPlaylistReplace") {
-                F = [];
-                var N = 0;
-                m(O, function () {
-                    F.push(new h(this, N++, w))
-                })
-            }
-            if (R == "onClipAdd") {
-                if (O.isInStream) {
-                    return
-                }
-                O = new h(O, M, w);
-                F.splice(M, 0, O);
-                for (K = M + 1; K < F.length; K++) {
-                    F[K].index++
-                }
-            }
-            var P = true;
-            if (typeof O == "number" && O < F.length) {
-                C = O;
-                var J = F[O];
-                if (J) {
-                    P = J._fireEvent(R, M, L)
-                }
-                if (!J || P !== false) {
-                    P = s._fireEvent(R, M, L, J)
-                }
-            }
-            m(x[R], function () {
-                P = this.call(w, O, M);
-                if (this.cached) {
-                    x[R].splice(K, 1)
-                }
-                if (P === false) {
-                    return false
-                }
-                K++
-            });
-            return P
-        };
-        function B() {
-            q.innerHTML=''; // Moodle hack - we do not want splashscreens, unfortunately there is not switch to disable them
-            if ($f(q)) {
-                $f(q).getParent().innerHTML = "";
-                p = $f(q).getIndex();
-                a[p] = w
-            } else {
-                a.push(w);
-                p = a.length - 1
-            }
-            A = parseInt(q.style.height, 10) || q.clientHeight;
-            E = q.id || "fp" + e();
-            r = G.id || E + "_api";
-            G.id = r;
-            u = q.innerHTML;
-            if (typeof t == "string") {
-                t = {clip:{url:t}}
-            }
-            t.playerId = E;
-            t.clip = t.clip || {};
-            if (q.getAttribute("href", 2) && !t.clip.url) {
-                t.clip.url = q.getAttribute("href", 2)
-            }
-            s = new h(t.clip, -1, w);
-            t.playlist = t.playlist || [t.clip];
-            var I = 0;
-            m(t.playlist, function () {
-                var L = this;
-                if (typeof L == "object" && L.length) {
-                    L = {url:"" + L}
-                }
-                m(t.clip, function (M, N) {
-                    if (N !== undefined && L[M] === undefined && typeof N != "function") {
-                        L[M] = N
-                    }
-                });
-                t.playlist[I] = L;
-                L = new h(L, I, w);
-                F.push(L);
-                I++
-            });
-            m(t, function (L, M) {
-                if (typeof M == "function") {
-                    if (s[L]) {
-                        s[L](M)
-                    } else {
-                        j(x, L, M)
-                    }
-                    delete t[L]
-                }
-            });
-            m(t.plugins, function (L, M) {
-                if (M) {
-                    y[L] = new l(L, M, w)
-                }
-            });
-            if (!t.plugins || t.plugins.controls === undefined) {
-                y.controls = new l("controls", null, w)
-            }
-            y.canvas = new l("canvas", null, w);
-            u = q.innerHTML;
-            function K(L) {
-                if (/iPad|iPhone|iPod/i.test(navigator.userAgent) && !/.flv$/i.test(F[0].url) && !J()) {
-                    return true
-                }
-                if (!w.isLoaded() && w._fireEvent("onBeforeClick") !== false) {
-                    w.load()
-                }
-                return f(L)
-            }
-
-            function J() {
-                return w.hasiPadSupport && w.hasiPadSupport()
-            }
-
-            function H() {
-                if (u.replace(/\s/g, "") !== "") {
-                    if (q.addEventListener) {
-                        q.addEventListener("click", K, false)
-                    } else {
-                        if (q.attachEvent) {
-                            q.attachEvent("onclick", K)
-                        }
-                    }
-                } else {
-                    if (q.addEventListener && !J()) {
-                        q.addEventListener("click", f, false)
-                    }
-                    w.load()
-                }
-            }
-
-            setTimeout(H, 0)
-        }
-
-        if (typeof q == "string") {
-            var z = c(q);
-            if (!z) {
-                throw"Flowplayer cannot access element: " + q
-            }
-            q = z;
-            B()
-        } else {
-            B()
-        }
-    }
-
-    var a = [];
-
-    function d(o) {
-        this.length = o.length;
-        this.each = function (q) {
-            m(o, q)
-        };
-        this.size = function () {
-            return o.length
-        };
-        var p = this;
-        for (name in b.prototype) {
-            p[name] = function () {
-                var q = arguments;
-                p.each(function () {
-                    this[name].apply(this, q)
-                })
-            }
-        }
-    }
-
-    window.flowplayer = window.$f = function () {
-        var p = null;
-        var o = 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) {
-            m(a, function () {
-                if (this.isLoaded()) {
-                    p = this;
-                    return false
-                }
-            });
-            return p || a[0]
-        }
-        if (arguments.length == 1) {
-            if (typeof o == "number") {
-                return a[o]
-            } else {
-                if (o == "*") {
-                    return new d(a)
-                }
-                m(a, function () {
-                    if (this.id() == o.id || this.id() == o || this.getParent() == o) {
-                        p = this;
-                        return false
-                    }
-                });
-                return p
-            }
-        }
-        if (arguments.length > 1) {
-            var t = arguments[1], q = (arguments.length == 3) ? arguments[2] : {};
-            if (typeof t == "string") {
-                t = {src:t}
-            }
-            t = i({bgcolor:"#000000", version:[10, 1], expressInstall:"http://releases.flowplayer.org/swf/expressinstall.swf", cachebusting:false}, t);
-            if (typeof o == "string") {
-                if (o.indexOf(".") != -1) {
-                    var s = [];
-                    m(n(o), function () {
-                        s.push(new b(this, k(t), k(q)))
-                    });
-                    return new d(s)
-                } else {
-                    var r = c(o);
-                    return new b(r !== null ? r : k(o), k(t), k(q))
-                }
-            } else {
-                if (o) {
-                    return new b(o, k(t), k(q))
-                }
-            }
-        }
-        return null
-    };
-    i(window.$f, {fireEvent:function () {
-        var o = [].slice.call(arguments);
-        var q = $f(o[0]);
-        return q ? q._fireEvent(o.slice(1)) : null
-    }, addPlugin:function (o, p) {
-        b.prototype[o] = p;
-        return $f
-    }, each:m, extend:i});
-    if (typeof jQuery == "function") {
-        jQuery.fn.flowplayer = function (q, p) {
-            if (!arguments.length || typeof arguments[0] == "number") {
-                var o = [];
-                this.each(function () {
-                    var r = $f(this);
-                    if (r) {
-                        o.push(r)
-                    }
-                });
-                return arguments.length ? o[arguments[0]] : new d(o)
-            }
-            return this.each(function () {
-                $f(this, k(q), p ? k(p) : {})
-            })
-        }
-    }
-})();
-(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 = '<object width="' + o.width + '" height="' + o.height + '" id="' + o.id + '" name="' + o.id + '"';
-        if (o.cachebusting) {
-            o.src += ((o.src.indexOf("?") != -1 ? "&" : "?") + Math.random())
-        }
-        if (o.w3c || !h) {
-            n += ' data="' + o.src + '" type="application/x-shockwave-flash"'
-        } else {
-            n += ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
-        }
-        n += ">";
-        if (o.w3c || h) {
-            n += '<param name="movie" value="' + o.src + '" />'
-        }
-        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 += '<param name="' + m + '" value="' + o[m] + '" />'
-            }
-        }
-        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 += '<param name="flashvars" value=\'' + p + "' />"
-        }
-        n += "</object>";
-        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 = "<h2>Flash version " + n.version + " or greater is required</h2><h3>" + (k[0] > 0 ? "Your version is " + k : "You have no flash plugin installed") + "</h3>" + (f.tagName == "A" ? "<p>Click here to download latest version</p>" : "<p>Download latest version from <a href='" + j + "'>here</a></p>");
-                    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.11"};
-        jQuery.tools.flashembed = {conf:b};
-        jQuery.fn.flashembed = function (l, f) {
-            return this.each(function () {
-                $(this).data("flashembed", flashembed(this, l, f))
-            })
-        }
-    }
-})();
\ No newline at end of file
diff --git a/lib/flowplayer/flowplayer-3.2.11.min.js b/lib/flowplayer/flowplayer-3.2.11.min.js
deleted file mode 100644 (file)
index c03505f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * flowplayer.js 3.2.11. 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 <http://www.gnu.org/licenses/>.
- *
- * Date: 2012-06-16 10:34:45 -0400 (Sat, 16 Jun 2012)
- * Revision: 808
- */
-(function(){function g(o){console.log("$f.fireEvent",[].slice.call(o))}function k(q){if(!q||typeof q!="object"){return q}var o=new q.constructor();for(var p in q){if(q.hasOwnProperty(p)){o[p]=k(q[p])}}return o}function m(t,q){if(!t){return}var o,p=0,r=t.length;if(r===undefined){for(o in t){if(q.call(t[o],o,t[o])===false){break}}}else{for(var s=t[0];p<r&&q.call(s,p,s)!==false;s=t[++p]){}}return t}function c(o){return document.getElementById(o)}function i(q,p,o){if(typeof p!="object"){return q}if(q&&p){m(p,function(r,s){if(!o||typeof s!="function"){q[r]=s}})}return q}function n(s){var q=s.indexOf(".");if(q!=-1){var p=s.slice(0,q)||"*";var o=s.slice(q+1,s.length);var r=[];m(document.getElementsByTagName(p),function(){if(this.className&&this.className.indexOf(o)!=-1){r.push(this)}});return r}}function f(o){o=o||window.event;if(o.preventDefault){o.stopPropagation();o.preventDefault()}else{o.returnValue=false;o.cancelBubble=true}return false}function j(q,o,p){q[o]=q[o]||[];q[o].push(p)}function e(){return"_"+(""+Math.random()).slice(2,10)}var h=function(t,r,s){var q=this,p={},u={};q.index=r;if(typeof t=="string"){t={url:t}}i(this,t,true);m(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),function(){var v="on"+this;if(v.indexOf("*")!=-1){v=v.slice(0,v.length-1);var w="onBefore"+v.slice(2);q[w]=function(x){j(u,w,x);return q}}q[v]=function(x){j(u,v,x);return q};if(r==-1){if(q[w]){s[w]=q[w]}if(q[v]){s[v]=q[v]}}});i(this,{onCuepoint:function(x,w){if(arguments.length==1){p.embedded=[null,x];return q}if(typeof x=="number"){x=[x]}var v=e();p[v]=[x,w];if(s.isLoaded()){s._api().fp_addCuepoints(x,r,v)}return q},update:function(w){i(q,w);if(s.isLoaded()){s._api().fp_updateClip(w,r)}var v=s.getConfig();var x=(r==-1)?v.clip:v.playlist[r];i(x,w,true)},_fireEvent:function(v,y,w,A){if(v=="onLoad"){m(p,function(B,C){if(C[0]){s._api().fp_addCuepoints(C[0],r,B)}});return false}A=A||q;if(v=="onCuepoint"){var z=p[y];if(z){return z[1].call(s,A,w)}}if(y&&"onBeforeBegin,onMetaData,onStart,onUpdate,onResume".indexOf(v)!=-1){i(A,y);if(y.metaData){if(!A.duration){A.duration=y.metaData.duration}else{A.fullDuration=y.metaData.duration}}}var x=true;m(u[v],function(){x=this.call(s,A,y,w)});return x}});if(t.onCuepoint){var o=t.onCuepoint;q.onCuepoint.apply(q,typeof o=="function"?[o]:o);delete t.onCuepoint}m(t,function(v,w){if(typeof w=="function"){j(u,v,w);delete t[v]}});if(r==-1){s.onCuepoint=this.onCuepoint}};var l=function(p,r,q,t){var o=this,s={},u=false;if(t){i(s,t)}m(r,function(v,w){if(typeof w=="function"){s[v]=w;delete r[v]}});i(this,{animate:function(y,z,x){if(!y){return o}if(typeof z=="function"){x=z;z=500}if(typeof y=="string"){var w=y;y={};y[w]=z;z=500}if(x){var v=e();s[v]=x}if(z===undefined){z=500}r=q._api().fp_animate(p,y,z,v);return o},css:function(w,x){if(x!==undefined){var v={};v[w]=x;w=v}r=q._api().fp_css(p,w);i(o,r);return o},show:function(){this.display="block";q._api().fp_showPlugin(p);return o},hide:function(){this.display="none";q._api().fp_hidePlugin(p);return o},toggle:function(){this.display=q._api().fp_togglePlugin(p);return o},fadeTo:function(y,x,w){if(typeof x=="function"){w=x;x=500}if(w){var v=e();s[v]=w}this.display=q._api().fp_fadeTo(p,y,x,v);this.opacity=y;return o},fadeIn:function(w,v){return o.fadeTo(1,w,v)},fadeOut:function(w,v){return o.fadeTo(0,w,v)},getName:function(){return p},getPlayer:function(){return q},_fireEvent:function(w,v,x){if(w=="onUpdate"){var z=q._api().fp_getPlugin(p);if(!z){return}i(o,z);delete o.methods;if(!u){m(z.methods,function(){var B=""+this;o[B]=function(){var C=[].slice.call(arguments);var D=q._api().fp_invoke(p,B,C);return D==="undefined"||D===undefined?o:D}});u=true}}var A=s[w];if(A){var y=A.apply(o,v);if(w.slice(0,1)=="_"){delete s[w]}return y}return o}})};function b(q,G,t){var w=this,v=null,D=false,u,s,F=[],y={},x={},E,r,p,C,o,A;i(w,{id:function(){return E},isLoaded:function(){return(v!==null&&v.fp_play!==undefined&&!D)},getParent:function(){return q},hide:function(H){if(H){q.style.height="0px"}if(w.isLoaded()){v.style.height="0px"}return w},show:function(){q.style.height=A+"px";if(w.isLoaded()){v.style.height=o+"px"}return w},isHidden:function(){return w.isLoaded()&&parseInt(v.style.height,10)===0},load:function(J){if(!w.isLoaded()&&w._fireEvent("onBeforeLoad")!==false){var H=function(){if(u&&!flashembed.isSupported(G.version)){q.innerHTML=""}if(J){J.cached=true;j(x,"onLoad",J)}flashembed(q,G,{config:t})};var I=0;m(a,function(){this.unload(function(K){if(++I==a.length){H()}})})}return w},unload:function(J){if(u.replace(/\s/g,"")!==""){if(w._fireEvent("onBeforeUnload")===false){if(J){J(false)}return w}D=true;try{if(v){if(v.fp_isFullscreen()){v.fp_toggleFullscreen()}v.fp_close();w._fireEvent("onUnload")}}catch(H){}var I=function(){v=null;q.innerHTML=u;D=false;if(J){J(true)}};if(/WebKit/i.test(navigator.userAgent)&&!/Chrome/i.test(navigator.userAgent)){setTimeout(I,0)}else{I()}}else{if(J){J(false)}}return w},getClip:function(H){if(H===undefined){H=C}return F[H]},getCommonClip:function(){return s},getPlaylist:function(){return F},getPlugin:function(H){var J=y[H];if(!J&&w.isLoaded()){var I=w._api().fp_getPlugin(H);if(I){J=new l(H,I,w);y[H]=J}}return J},getScreen:function(){return w.getPlugin("screen")},getControls:function(){return w.getPlugin("controls")._fireEvent("onUpdate")},getLogo:function(){try{return w.getPlugin("logo")._fireEvent("onUpdate")}catch(H){}},getPlay:function(){return w.getPlugin("play")._fireEvent("onUpdate")},getConfig:function(H){return H?k(t):t},getFlashParams:function(){return G},loadPlugin:function(K,J,M,L){if(typeof M=="function"){L=M;M={}}var I=L?e():"_";w._api().fp_loadPlugin(K,J,M,I);var H={};H[I]=L;var N=new l(K,null,w,H);y[K]=N;return N},getState:function(){return w.isLoaded()?v.fp_getState():-1},play:function(I,H){var J=function(){if(I!==undefined){w._api().fp_play(I,H)}else{w._api().fp_play()}};if(w.isLoaded()){J()}else{if(D){setTimeout(function(){w.play(I,H)},50)}else{w.load(function(){J()})}}return w},getVersion:function(){var I="flowplayer.js 3.2.11";if(w.isLoaded()){var H=v.fp_getVersion();H.push(I);return H}return I},_api:function(){if(!w.isLoaded()){throw"Flowplayer "+w.id()+" not loaded when calling an API method"}return v},setClip:function(H){m(H,function(I,J){if(typeof J=="function"){j(x,I,J);delete H[I]}else{if(I=="onCuepoint"){$f(q).getCommonClip().onCuepoint(H[I][0],H[I][1])}}});w.setPlaylist([H]);return w},getIndex:function(){return p},bufferAnimate:function(H){v.fp_bufferAnimate(H===undefined||H);return w},_swfHeight:function(){return v.clientHeight}});m(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error,MouseOver,MouseOut").split(","),function(){var H="on"+this;if(H.indexOf("*")!=-1){H=H.slice(0,H.length-1);var I="onBefore"+H.slice(2);w[I]=function(J){j(x,I,J);return w}}w[H]=function(J){j(x,H,J);return w}});m(("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 H=this;w[H]=function(J,I){if(!w.isLoaded()){return w}var K=null;if(J!==undefined&&I!==undefined){K=v["fp_"+H](J,I)}else{K=(J===undefined)?v["fp_"+H]():v["fp_"+H](J)}return K==="undefined"||K===undefined?w:K}});w._fireEvent=function(Q){if(typeof Q=="string"){Q=[Q]}var R=Q[0],O=Q[1],M=Q[2],L=Q[3],K=0;if(t.debug){g(Q)}if(!w.isLoaded()&&R=="onLoad"&&O=="player"){v=v||c(r);o=w._swfHeight();m(F,function(){this._fireEvent("onLoad")});m(y,function(S,T){T._fireEvent("onUpdate")});s._fireEvent("onLoad")}if(R=="onLoad"&&O!="player"){return}if(R=="onError"){if(typeof O=="string"||(typeof O=="number"&&typeof M=="number")){O=M;M=L}}if(R=="onContextMenu"){m(t.contextMenu[O],function(S,T){T.call(w)});return}if(R=="onPluginEvent"||R=="onBeforePluginEvent"){var H=O.name||O;var I=y[H];if(I){I._fireEvent("onUpdate",O);return I._fireEvent(M,Q.slice(3))}return}if(R=="onPlaylistReplace"){F=[];var N=0;m(O,function(){F.push(new h(this,N++,w))})}if(R=="onClipAdd"){if(O.isInStream){return}O=new h(O,M,w);F.splice(M,0,O);for(K=M+1;K<F.length;K++){F[K].index++}}var P=true;if(typeof O=="number"&&O<F.length){C=O;var J=F[O];if(J){P=J._fireEvent(R,M,L)}if(!J||P!==false){P=s._fireEvent(R,M,L,J)}}m(x[R],function(){P=this.call(w,O,M);if(this.cached){x[R].splice(K,1)}if(P===false){return false}K++});return P};function B(){q.innerHTML='';if($f(q)){$f(q).getParent().innerHTML="";p=$f(q).getIndex();a[p]=w}else{a.push(w);p=a.length-1}A=parseInt(q.style.height,10)||q.clientHeight;E=q.id||"fp"+e();r=G.id||E+"_api";G.id=r;u=q.innerHTML;if(typeof t=="string"){t={clip:{url:t}}}t.playerId=E;t.clip=t.clip||{};if(q.getAttribute("href",2)&&!t.clip.url){t.clip.url=q.getAttribute("href",2)}s=new h(t.clip,-1,w);t.playlist=t.playlist||[t.clip];var I=0;m(t.playlist,function(){var L=this;if(typeof L=="object"&&L.length){L={url:""+L}}m(t.clip,function(M,N){if(N!==undefined&&L[M]===undefined&&typeof N!="function"){L[M]=N}});t.playlist[I]=L;L=new h(L,I,w);F.push(L);I++});m(t,function(L,M){if(typeof M=="function"){if(s[L]){s[L](M)}else{j(x,L,M)}delete t[L]}});m(t.plugins,function(L,M){if(M){y[L]=new l(L,M,w)}});if(!t.plugins||t.plugins.controls===undefined){y.controls=new l("controls",null,w)}y.canvas=new l("canvas",null,w);u=q.innerHTML;function K(L){if(/iPad|iPhone|iPod/i.test(navigator.userAgent)&&!/.flv$/i.test(F[0].url)&&!J()){return true}if(!w.isLoaded()&&w._fireEvent("onBeforeClick")!==false){w.load()}return f(L)}function J(){return w.hasiPadSupport&&w.hasiPadSupport()}function H(){if(u.replace(/\s/g,"")!==""){if(q.addEventListener){q.addEventListener("click",K,false)}else{if(q.attachEvent){q.attachEvent("onclick",K)}}}else{if(q.addEventListener&&!J()){q.addEventListener("click",f,false)}w.load()}}setTimeout(H,0)}if(typeof q=="string"){var z=c(q);if(!z){throw"Flowplayer cannot access element: "+q}q=z;B()}else{B()}}var a=[];function d(o){this.length=o.length;this.each=function(q){m(o,q)};this.size=function(){return o.length};var p=this;for(name in b.prototype){p[name]=function(){var q=arguments;p.each(function(){this[name].apply(this,q)})}}}window.flowplayer=window.$f=function(){var p=null;var o=arguments[0];if(!flashembed.isSupported([6, 65])){return null;}if(!arguments.length){m(a,function(){if(this.isLoaded()){p=this;return false}});return p||a[0]}if(arguments.length==1){if(typeof o=="number"){return a[o]}else{if(o=="*"){return new d(a)}m(a,function(){if(this.id()==o.id||this.id()==o||this.getParent()==o){p=this;return false}});return p}}if(arguments.length>1){var t=arguments[1],q=(arguments.length==3)?arguments[2]:{};if(typeof t=="string"){t={src:t}}t=i({bgcolor:"#000000",version:[10,1],expressInstall:"http://releases.flowplayer.org/swf/expressinstall.swf",cachebusting:false},t);if(typeof o=="string"){if(o.indexOf(".")!=-1){var s=[];m(n(o),function(){s.push(new b(this,k(t),k(q)))});return new d(s)}else{var r=c(o);return new b(r!==null?r:k(o),k(t),k(q))}}else{if(o){return new b(o,k(t),k(q))}}}return null};i(window.$f,{fireEvent:function(){var o=[].slice.call(arguments);var q=$f(o[0]);return q?q._fireEvent(o.slice(1)):null},addPlugin:function(o,p){b.prototype[o]=p;return $f},each:m,extend:i});if(typeof jQuery=="function"){jQuery.fn.flowplayer=function(q,p){if(!arguments.length||typeof arguments[0]=="number"){var o=[];this.each(function(){var r=$f(this);if(r){o.push(r)}});return arguments.length?o[arguments[0]]:new d(o)}return this.each(function(){$f(this,k(q),p?k(p):{})})}}})();(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='<object width="'+o.width+'" height="'+o.height+'" id="'+o.id+'" name="'+o.id+'"';if(o.cachebusting){o.src+=((o.src.indexOf("?")!=-1?"&":"?")+Math.random())}if(o.w3c||!h){n+=' data="'+o.src+'" type="application/x-shockwave-flash"'}else{n+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'}n+=">";if(o.w3c||h){n+='<param name="movie" value="'+o.src+'" />'}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+='<param name="'+m+'" value="'+o[m]+'" />'}}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+='<param name="flashvars" value=\''+p+"' />"}n+="</object>";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="<h2>Flash version "+n.version+" or greater is required</h2><h3>"+(k[0]>0?"Your version is "+k:"You have no flash plugin installed")+"</h3>"+(f.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+j+"'>here</a></p>");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.11"};jQuery.tools.flashembed={conf:b};jQuery.fn.flashembed=function(l,f){return this.each(function(){$(this).data("flashembed",flashembed(this,l,f))})}}})();
\ No newline at end of file
diff --git a/lib/flowplayer/flowplayer-3.2.12.js b/lib/flowplayer/flowplayer-3.2.12.js
new file mode 100644 (file)
index 0000000..0da9dbb
--- /dev/null
@@ -0,0 +1,1014 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ * 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(/&amp;/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 = '<object width="' + o.width + '" height="' + o.height + '" id="' + o.id + '" name="' + o.id + '"';
+        if (o.cachebusting) {
+            o.src += ((o.src.indexOf("?") != -1 ? "&" : "?") + Math.random())
+        }
+        if (o.w3c || !h) {
+            n += ' data="' + o.src + '" type="application/x-shockwave-flash"'
+        } else {
+            n += ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
+        }
+        n += ">";
+        if (o.w3c || h) {
+            n += '<param name="movie" value="' + o.src + '" />'
+        }
+        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 += '<param name="' + m + '" value="' + o[m] + '" />'
+            }
+        }
+        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 += '<param name="flashvars" value=\'' + p + "' />"
+        }
+        n += "</object>";
+        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 = "<h2>Flash version " + n.version + " or greater is required</h2><h3>" + (k[0] > 0 ? "Your version is " + k : "You have no flash plugin installed") + "</h3>" + (f.tagName == "A" ? "<p>Click here to download latest version</p>" : "<p>Download latest version from <a href='" + j + "'>here</a></p>");
+                    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))
+            })
+        }
+    }
+}();
\ No newline at end of file
diff --git a/lib/flowplayer/flowplayer-3.2.12.min.js b/lib/flowplayer/flowplayer-3.2.12.min.js
new file mode 100644 (file)
index 0000000..53d2fbd
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ * 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(/&amp;/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='';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;}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='<object width="'+o.width+'" height="'+o.height+'" id="'+o.id+'" name="'+o.id+'"';if(o.cachebusting){o.src+=((o.src.indexOf("?")!=-1?"&":"?")+Math.random())}if(o.w3c||!h){n+=' data="'+o.src+'" type="application/x-shockwave-flash"'}else{n+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'}n+=">";if(o.w3c||h){n+='<param name="movie" value="'+o.src+'" />'}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+='<param name="'+m+'" value="'+o[m]+'" />'}}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+='<param name="flashvars" value=\''+p+"' />"}n+="</object>";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="<h2>Flash version "+n.version+" or greater is required</h2><h3>"+(k[0]>0?"Your version is "+k:"You have no flash plugin installed")+"</h3>"+(f.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+j+"'>here</a></p>");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))})}}}();
\ No newline at end of file
diff --git a/lib/flowplayer/flowplayer-3.2.14.swf b/lib/flowplayer/flowplayer-3.2.14.swf
deleted file mode 100644 (file)
index bee3b60..0000000
Binary files a/lib/flowplayer/flowplayer-3.2.14.swf and /dev/null differ
diff --git a/lib/flowplayer/flowplayer-3.2.16.swf b/lib/flowplayer/flowplayer-3.2.16.swf
new file mode 100644 (file)
index 0000000..a7f1e5c
Binary files /dev/null and b/lib/flowplayer/flowplayer-3.2.16.swf differ
diff --git a/lib/flowplayer/flowplayer.controls-3.2.13.swf b/lib/flowplayer/flowplayer.controls-3.2.13.swf
deleted file mode 100644 (file)
index 61e95d4..0000000
Binary files a/lib/flowplayer/flowplayer.controls-3.2.13.swf and /dev/null differ
diff --git a/lib/flowplayer/flowplayer.controls-3.2.15.swf b/lib/flowplayer/flowplayer.controls-3.2.15.swf
new file mode 100644 (file)
index 0000000..8809004
Binary files /dev/null and b/lib/flowplayer/flowplayer.controls-3.2.15.swf differ
index 3930b79..a196919 100644 (file)
@@ -1827,9 +1827,9 @@ M.util.load_flowplayer = function() {
             for(var i=0; i<M.util.video_players.length; i++) {
                 var video = M.util.video_players[i];
                 if (video.width > 0 && video.height > 0) {
-                    var src = {src: M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.14.swf', width: video.width, height: video.height};
+                    var src = {src: M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.16.swf', width: video.width, height: video.height};
                 } else {
-                    var src = M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.14.swf';
+                    var src = M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.16.swf';
                 }
                 flowplayer(video.id, src, {
                     plugins: {controls: controls},
@@ -1929,7 +1929,7 @@ M.util.load_flowplayer = function() {
                     controls.height = 25;
                     controls.time = true;
                 }
-                flowplayer(audio.id, M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.14.swf', {
+                flowplayer(audio.id, M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.16.swf', {
                     plugins: {controls: controls, audio: {url: M.cfg.wwwroot + '/lib/flowplayer/flowplayer.audio-3.2.10.swf'}},
                     clip: {url: audio.fileurl, provider: "audio", autoPlay: false}
                 });
@@ -1937,9 +1937,9 @@ M.util.load_flowplayer = function() {
         }
 
         if (M.cfg.jsrev == -1) {
-            var jsurl = M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.11.js';
+            var jsurl = M.cfg.wwwroot + '/lib/flowplayer/flowplayer-3.2.12.js';
         } else {
-            var jsurl = M.cfg.wwwroot + '/lib/javascript.php?jsfile=/lib/flowplayer/flowplayer-3.2.11.min.js&rev=' + M.cfg.jsrev;
+            var jsurl = M.cfg.wwwroot + '/lib/javascript.php?jsfile=/lib/flowplayer/flowplayer-3.2.12.min.js&rev=' + M.cfg.jsrev;
         }
         var fileref = document.createElement('script');
         fileref.setAttribute('type','text/javascript');
index ed7f24f..f950876 100644 (file)
@@ -95,7 +95,7 @@
     <location>flowplayer</location>
     <name>Flowplayer</name>
     <license>GPL</license>
-    <version>3.2.14</version>
+    <version>3.2.16</version>
     <licenseversion>3</licenseversion>
   </library>
   <library>