Merge branch 'MDL-38170-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_...
[moodle.git] / lib / flowplayer / flowplayer-3.2.11.js
1 /*
2  * flowplayer.js 3.2.11. The Flowplayer API
3  *
4  * Copyright 2009-2011 Flowplayer Oy
5  *
6  * This file is part of Flowplayer.
7  *
8  * Flowplayer is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * Flowplayer is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with Flowplayer.  If not, see <http://www.gnu.org/licenses/>.
20  *
21  * Date: 2012-06-16 10:34:45 -0400 (Sat, 16 Jun 2012)
22  * Revision: 808
23  */
24 (function () {
25     function g(o) {
26         console.log("$f.fireEvent", [].slice.call(o))
27     }
29     function k(q) {
30         if (!q || typeof q != "object") {
31             return q
32         }
33         var o = new q.constructor();
34         for (var p in q) {
35             if (q.hasOwnProperty(p)) {
36                 o[p] = k(q[p])
37             }
38         }
39         return o
40     }
42     function m(t, q) {
43         if (!t) {
44             return
45         }
46         var o, p = 0, r = t.length;
47         if (r === undefined) {
48             for (o in t) {
49                 if (q.call(t[o], o, t[o]) === false) {
50                     break
51                 }
52             }
53         } else {
54             for (var s = t[0]; p < r && q.call(s, p, s) !== false; s = t[++p]) {
55             }
56         }
57         return t
58     }
60     function c(o) {
61         return document.getElementById(o)
62     }
64     function i(q, p, o) {
65         if (typeof p != "object") {
66             return q
67         }
68         if (q && p) {
69             m(p, function (r, s) {
70                 if (!o || typeof s != "function") {
71                     q[r] = s
72                 }
73             })
74         }
75         return q
76     }
78     function n(s) {
79         var q = s.indexOf(".");
80         if (q != -1) {
81             var p = s.slice(0, q) || "*";
82             var o = s.slice(q + 1, s.length);
83             var r = [];
84             m(document.getElementsByTagName(p), function () {
85                 if (this.className && this.className.indexOf(o) != -1) {
86                     r.push(this)
87                 }
88             });
89             return r
90         }
91     }
93     function f(o) {
94         o = o || window.event;
95         if (o.preventDefault) {
96             o.stopPropagation();
97             o.preventDefault()
98         } else {
99             o.returnValue = false;
100             o.cancelBubble = true
101         }
102         return false
103     }
105     function j(q, o, p) {
106         q[o] = q[o] || [];
107         q[o].push(p)
108     }
110     function e() {
111         return"_" + ("" + Math.random()).slice(2, 10)
112     }
114     var h = function (t, r, s) {
115         var q = this, p = {}, u = {};
116         q.index = r;
117         if (typeof t == "string") {
118             t = {url:t}
119         }
120         i(this, t, true);
121         m(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","), function () {
122             var v = "on" + this;
123             if (v.indexOf("*") != -1) {
124                 v = v.slice(0, v.length - 1);
125                 var w = "onBefore" + v.slice(2);
126                 q[w] = function (x) {
127                     j(u, w, x);
128                     return q
129                 }
130             }
131             q[v] = function (x) {
132                 j(u, v, x);
133                 return q
134             };
135             if (r == -1) {
136                 if (q[w]) {
137                     s[w] = q[w]
138                 }
139                 if (q[v]) {
140                     s[v] = q[v]
141                 }
142             }
143         });
144         i(this, {onCuepoint:function (x, w) {
145             if (arguments.length == 1) {
146                 p.embedded = [null, x];
147                 return q
148             }
149             if (typeof x == "number") {
150                 x = [x]
151             }
152             var v = e();
153             p[v] = [x, w];
154             if (s.isLoaded()) {
155                 s._api().fp_addCuepoints(x, r, v)
156             }
157             return q
158         }, update:function (w) {
159             i(q, w);
160             if (s.isLoaded()) {
161                 s._api().fp_updateClip(w, r)
162             }
163             var v = s.getConfig();
164             var x = (r == -1) ? v.clip : v.playlist[r];
165             i(x, w, true)
166         }, _fireEvent:function (v, y, w, A) {
167             if (v == "onLoad") {
168                 m(p, function (B, C) {
169                     if (C[0]) {
170                         s._api().fp_addCuepoints(C[0], r, B)
171                     }
172                 });
173                 return false
174             }
175             A = A || q;
176             if (v == "onCuepoint") {
177                 var z = p[y];
178                 if (z) {
179                     return z[1].call(s, A, w)
180                 }
181             }
182             if (y && "onBeforeBegin,onMetaData,onStart,onUpdate,onResume".indexOf(v) != -1) {
183                 i(A, y);
184                 if (y.metaData) {
185                     if (!A.duration) {
186                         A.duration = y.metaData.duration
187                     } else {
188                         A.fullDuration = y.metaData.duration
189                     }
190                 }
191             }
192             var x = true;
193             m(u[v], function () {
194                 x = this.call(s, A, y, w)
195             });
196             return x
197         }});
198         if (t.onCuepoint) {
199             var o = t.onCuepoint;
200             q.onCuepoint.apply(q, typeof o == "function" ? [o] : o);
201             delete t.onCuepoint
202         }
203         m(t, function (v, w) {
204             if (typeof w == "function") {
205                 j(u, v, w);
206                 delete t[v]
207             }
208         });
209         if (r == -1) {
210             s.onCuepoint = this.onCuepoint
211         }
212     };
213     var l = function (p, r, q, t) {
214         var o = this, s = {}, u = false;
215         if (t) {
216             i(s, t)
217         }
218         m(r, function (v, w) {
219             if (typeof w == "function") {
220                 s[v] = w;
221                 delete r[v]
222             }
223         });
224         i(this, {animate:function (y, z, x) {
225             if (!y) {
226                 return o
227             }
228             if (typeof z == "function") {
229                 x = z;
230                 z = 500
231             }
232             if (typeof y == "string") {
233                 var w = y;
234                 y = {};
235                 y[w] = z;
236                 z = 500
237             }
238             if (x) {
239                 var v = e();
240                 s[v] = x
241             }
242             if (z === undefined) {
243                 z = 500
244             }
245             r = q._api().fp_animate(p, y, z, v);
246             return o
247         }, css:function (w, x) {
248             if (x !== undefined) {
249                 var v = {};
250                 v[w] = x;
251                 w = v
252             }
253             r = q._api().fp_css(p, w);
254             i(o, r);
255             return o
256         }, show:function () {
257             this.display = "block";
258             q._api().fp_showPlugin(p);
259             return o
260         }, hide:function () {
261             this.display = "none";
262             q._api().fp_hidePlugin(p);
263             return o
264         }, toggle:function () {
265             this.display = q._api().fp_togglePlugin(p);
266             return o
267         }, fadeTo:function (y, x, w) {
268             if (typeof x == "function") {
269                 w = x;
270                 x = 500
271             }
272             if (w) {
273                 var v = e();
274                 s[v] = w
275             }
276             this.display = q._api().fp_fadeTo(p, y, x, v);
277             this.opacity = y;
278             return o
279         }, fadeIn:function (w, v) {
280             return o.fadeTo(1, w, v)
281         }, fadeOut:function (w, v) {
282             return o.fadeTo(0, w, v)
283         }, getName:function () {
284             return p
285         }, getPlayer:function () {
286             return q
287         }, _fireEvent:function (w, v, x) {
288             if (w == "onUpdate") {
289                 var z = q._api().fp_getPlugin(p);
290                 if (!z) {
291                     return
292                 }
293                 i(o, z);
294                 delete o.methods;
295                 if (!u) {
296                     m(z.methods, function () {
297                         var B = "" + this;
298                         o[B] = function () {
299                             var C = [].slice.call(arguments);
300                             var D = q._api().fp_invoke(p, B, C);
301                             return D === "undefined" || D === undefined ? o : D
302                         }
303                     });
304                     u = true
305                 }
306             }
307             var A = s[w];
308             if (A) {
309                 var y = A.apply(o, v);
310                 if (w.slice(0, 1) == "_") {
311                     delete s[w]
312                 }
313                 return y
314             }
315             return o
316         }})
317     };
319     function b(q, G, t) {
320         var w = this, v = null, D = false, u, s, F = [], y = {}, x = {}, E, r, p, C, o, A;
321         i(w, {id:function () {
322             return E
323         }, isLoaded:function () {
324             return(v !== null && v.fp_play !== undefined && !D)
325         }, getParent:function () {
326             return q
327         }, hide:function (H) {
328             if (H) {
329                 q.style.height = "0px"
330             }
331             if (w.isLoaded()) {
332                 v.style.height = "0px"
333             }
334             return w
335         }, show:function () {
336             q.style.height = A + "px";
337             if (w.isLoaded()) {
338                 v.style.height = o + "px"
339             }
340             return w
341         }, isHidden:function () {
342             return w.isLoaded() && parseInt(v.style.height, 10) === 0
343         }, load:function (J) {
344             if (!w.isLoaded() && w._fireEvent("onBeforeLoad") !== false) {
345                 var H = function () {
346                     if (u && !flashembed.isSupported(G.version)) {
347                         q.innerHTML = ""
348                     }
349                     if (J) {
350                         J.cached = true;
351                         j(x, "onLoad", J)
352                     }
353                     flashembed(q, G, {config:t})
354                 };
355                 var I = 0;
356                 m(a, function () {
357                     this.unload(function (K) {
358                         if (++I == a.length) {
359                             H()
360                         }
361                     })
362                 })
363             }
364             return w
365         }, unload:function (J) {
366             if (u.replace(/\s/g, "") !== "") {
367                 if (w._fireEvent("onBeforeUnload") === false) {
368                     if (J) {
369                         J(false)
370                     }
371                     return w
372                 }
373                 D = true;
374                 try {
375                     if (v) {
376                         if (v.fp_isFullscreen()) {
377                             v.fp_toggleFullscreen()
378                         }
379                         v.fp_close();
380                         w._fireEvent("onUnload")
381                     }
382                 } catch (H) {
383                 }
384                 var I = function () {
385                     v = null;
386                     q.innerHTML = u;
387                     D = false;
388                     if (J) {
389                         J(true)
390                     }
391                 };
392                 if (/WebKit/i.test(navigator.userAgent) && !/Chrome/i.test(navigator.userAgent)) {
393                     setTimeout(I, 0)
394                 } else {
395                     I()
396                 }
397             } else {
398                 if (J) {
399                     J(false)
400                 }
401             }
402             return w
403         }, getClip:function (H) {
404             if (H === undefined) {
405                 H = C
406             }
407             return F[H]
408         }, getCommonClip:function () {
409             return s
410         }, getPlaylist:function () {
411             return F
412         }, getPlugin:function (H) {
413             var J = y[H];
414             if (!J && w.isLoaded()) {
415                 var I = w._api().fp_getPlugin(H);
416                 if (I) {
417                     J = new l(H, I, w);
418                     y[H] = J
419                 }
420             }
421             return J
422         }, getScreen:function () {
423             return w.getPlugin("screen")
424         }, getControls:function () {
425             return w.getPlugin("controls")._fireEvent("onUpdate")
426         }, getLogo:function () {
427             try {
428                 return w.getPlugin("logo")._fireEvent("onUpdate")
429             } catch (H) {
430             }
431         }, getPlay:function () {
432             return w.getPlugin("play")._fireEvent("onUpdate")
433         }, getConfig:function (H) {
434             return H ? k(t) : t
435         }, getFlashParams:function () {
436             return G
437         }, loadPlugin:function (K, J, M, L) {
438             if (typeof M == "function") {
439                 L = M;
440                 M = {}
441             }
442             var I = L ? e() : "_";
443             w._api().fp_loadPlugin(K, J, M, I);
444             var H = {};
445             H[I] = L;
446             var N = new l(K, null, w, H);
447             y[K] = N;
448             return N
449         }, getState:function () {
450             return w.isLoaded() ? v.fp_getState() : -1
451         }, play:function (I, H) {
452             var J = function () {
453                 if (I !== undefined) {
454                     w._api().fp_play(I, H)
455                 } else {
456                     w._api().fp_play()
457                 }
458             };
459             if (w.isLoaded()) {
460                 J()
461             } else {
462                 if (D) {
463                     setTimeout(function () {
464                         w.play(I, H)
465                     }, 50)
466                 } else {
467                     w.load(function () {
468                         J()
469                     })
470                 }
471             }
472             return w
473         }, getVersion:function () {
474             var I = "flowplayer.js 3.2.11";
475             if (w.isLoaded()) {
476                 var H = v.fp_getVersion();
477                 H.push(I);
478                 return H
479             }
480             return I
481         }, _api:function () {
482             if (!w.isLoaded()) {
483                 throw"Flowplayer " + w.id() + " not loaded when calling an API method"
484             }
485             return v
486         }, setClip:function (H) {
487             m(H, function (I, J) {
488                 if (typeof J == "function") {
489                     j(x, I, J);
490                     delete H[I]
491                 } else {
492                     if (I == "onCuepoint") {
493                         $f(q).getCommonClip().onCuepoint(H[I][0], H[I][1])
494                     }
495                 }
496             });
497             w.setPlaylist([H]);
498             return w
499         }, getIndex:function () {
500             return p
501         }, bufferAnimate:function (H) {
502             v.fp_bufferAnimate(H === undefined || H);
503             return w
504         }, _swfHeight:function () {
505             return v.clientHeight
506         }});
507         m(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error,MouseOver,MouseOut").split(","), function () {
508             var H = "on" + this;
509             if (H.indexOf("*") != -1) {
510                 H = H.slice(0, H.length - 1);
511                 var I = "onBefore" + H.slice(2);
512                 w[I] = function (J) {
513                     j(x, I, J);
514                     return w
515                 }
516             }
517             w[H] = function (J) {
518                 j(x, H, J);
519                 return w
520             }
521         });
522         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 () {
523             var H = this;
524             w[H] = function (J, I) {
525                 if (!w.isLoaded()) {
526                     return w
527                 }
528                 var K = null;
529                 if (J !== undefined && I !== undefined) {
530                     K = v["fp_" + H](J, I)
531                 } else {
532                     K = (J === undefined) ? v["fp_" + H]() : v["fp_" + H](J)
533                 }
534                 return K === "undefined" || K === undefined ? w : K
535             }
536         });
537         w._fireEvent = function (Q) {
538             if (typeof Q == "string") {
539                 Q = [Q]
540             }
541             var R = Q[0], O = Q[1], M = Q[2], L = Q[3], K = 0;
542             if (t.debug) {
543                 g(Q)
544             }
545             if (!w.isLoaded() && R == "onLoad" && O == "player") {
546                 v = v || c(r);
547                 o = w._swfHeight();
548                 m(F, function () {
549                     this._fireEvent("onLoad")
550                 });
551                 m(y, function (S, T) {
552                     T._fireEvent("onUpdate")
553                 });
554                 s._fireEvent("onLoad")
555             }
556             if (R == "onLoad" && O != "player") {
557                 return
558             }
559             if (R == "onError") {
560                 if (typeof O == "string" || (typeof O == "number" && typeof M == "number")) {
561                     O = M;
562                     M = L
563                 }
564             }
565             if (R == "onContextMenu") {
566                 m(t.contextMenu[O], function (S, T) {
567                     T.call(w)
568                 });
569                 return
570             }
571             if (R == "onPluginEvent" || R == "onBeforePluginEvent") {
572                 var H = O.name || O;
573                 var I = y[H];
574                 if (I) {
575                     I._fireEvent("onUpdate", O);
576                     return I._fireEvent(M, Q.slice(3))
577                 }
578                 return
579             }
580             if (R == "onPlaylistReplace") {
581                 F = [];
582                 var N = 0;
583                 m(O, function () {
584                     F.push(new h(this, N++, w))
585                 })
586             }
587             if (R == "onClipAdd") {
588                 if (O.isInStream) {
589                     return
590                 }
591                 O = new h(O, M, w);
592                 F.splice(M, 0, O);
593                 for (K = M + 1; K < F.length; K++) {
594                     F[K].index++
595                 }
596             }
597             var P = true;
598             if (typeof O == "number" && O < F.length) {
599                 C = O;
600                 var J = F[O];
601                 if (J) {
602                     P = J._fireEvent(R, M, L)
603                 }
604                 if (!J || P !== false) {
605                     P = s._fireEvent(R, M, L, J)
606                 }
607             }
608             m(x[R], function () {
609                 P = this.call(w, O, M);
610                 if (this.cached) {
611                     x[R].splice(K, 1)
612                 }
613                 if (P === false) {
614                     return false
615                 }
616                 K++
617             });
618             return P
619         };
620         function B() {
621             q.innerHTML=''; // Moodle hack - we do not want splashscreens, unfortunately there is not switch to disable them
622             if ($f(q)) {
623                 $f(q).getParent().innerHTML = "";
624                 p = $f(q).getIndex();
625                 a[p] = w
626             } else {
627                 a.push(w);
628                 p = a.length - 1
629             }
630             A = parseInt(q.style.height, 10) || q.clientHeight;
631             E = q.id || "fp" + e();
632             r = G.id || E + "_api";
633             G.id = r;
634             u = q.innerHTML;
635             if (typeof t == "string") {
636                 t = {clip:{url:t}}
637             }
638             t.playerId = E;
639             t.clip = t.clip || {};
640             if (q.getAttribute("href", 2) && !t.clip.url) {
641                 t.clip.url = q.getAttribute("href", 2)
642             }
643             s = new h(t.clip, -1, w);
644             t.playlist = t.playlist || [t.clip];
645             var I = 0;
646             m(t.playlist, function () {
647                 var L = this;
648                 if (typeof L == "object" && L.length) {
649                     L = {url:"" + L}
650                 }
651                 m(t.clip, function (M, N) {
652                     if (N !== undefined && L[M] === undefined && typeof N != "function") {
653                         L[M] = N
654                     }
655                 });
656                 t.playlist[I] = L;
657                 L = new h(L, I, w);
658                 F.push(L);
659                 I++
660             });
661             m(t, function (L, M) {
662                 if (typeof M == "function") {
663                     if (s[L]) {
664                         s[L](M)
665                     } else {
666                         j(x, L, M)
667                     }
668                     delete t[L]
669                 }
670             });
671             m(t.plugins, function (L, M) {
672                 if (M) {
673                     y[L] = new l(L, M, w)
674                 }
675             });
676             if (!t.plugins || t.plugins.controls === undefined) {
677                 y.controls = new l("controls", null, w)
678             }
679             y.canvas = new l("canvas", null, w);
680             u = q.innerHTML;
681             function K(L) {
682                 if (/iPad|iPhone|iPod/i.test(navigator.userAgent) && !/.flv$/i.test(F[0].url) && !J()) {
683                     return true
684                 }
685                 if (!w.isLoaded() && w._fireEvent("onBeforeClick") !== false) {
686                     w.load()
687                 }
688                 return f(L)
689             }
691             function J() {
692                 return w.hasiPadSupport && w.hasiPadSupport()
693             }
695             function H() {
696                 if (u.replace(/\s/g, "") !== "") {
697                     if (q.addEventListener) {
698                         q.addEventListener("click", K, false)
699                     } else {
700                         if (q.attachEvent) {
701                             q.attachEvent("onclick", K)
702                         }
703                     }
704                 } else {
705                     if (q.addEventListener && !J()) {
706                         q.addEventListener("click", f, false)
707                     }
708                     w.load()
709                 }
710             }
712             setTimeout(H, 0)
713         }
715         if (typeof q == "string") {
716             var z = c(q);
717             if (!z) {
718                 throw"Flowplayer cannot access element: " + q
719             }
720             q = z;
721             B()
722         } else {
723             B()
724         }
725     }
727     var a = [];
729     function d(o) {
730         this.length = o.length;
731         this.each = function (q) {
732             m(o, q)
733         };
734         this.size = function () {
735             return o.length
736         };
737         var p = this;
738         for (name in b.prototype) {
739             p[name] = function () {
740                 var q = arguments;
741                 p.each(function () {
742                     this[name].apply(this, q)
743                 })
744             }
745         }
746     }
748     window.flowplayer = window.$f = function () {
749         var p = null;
750         var o = arguments[0];
751         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
752         if (!arguments.length) {
753             m(a, function () {
754                 if (this.isLoaded()) {
755                     p = this;
756                     return false
757                 }
758             });
759             return p || a[0]
760         }
761         if (arguments.length == 1) {
762             if (typeof o == "number") {
763                 return a[o]
764             } else {
765                 if (o == "*") {
766                     return new d(a)
767                 }
768                 m(a, function () {
769                     if (this.id() == o.id || this.id() == o || this.getParent() == o) {
770                         p = this;
771                         return false
772                     }
773                 });
774                 return p
775             }
776         }
777         if (arguments.length > 1) {
778             var t = arguments[1], q = (arguments.length == 3) ? arguments[2] : {};
779             if (typeof t == "string") {
780                 t = {src:t}
781             }
782             t = i({bgcolor:"#000000", version:[10, 1], expressInstall:"http://releases.flowplayer.org/swf/expressinstall.swf", cachebusting:false}, t);
783             if (typeof o == "string") {
784                 if (o.indexOf(".") != -1) {
785                     var s = [];
786                     m(n(o), function () {
787                         s.push(new b(this, k(t), k(q)))
788                     });
789                     return new d(s)
790                 } else {
791                     var r = c(o);
792                     return new b(r !== null ? r : k(o), k(t), k(q))
793                 }
794             } else {
795                 if (o) {
796                     return new b(o, k(t), k(q))
797                 }
798             }
799         }
800         return null
801     };
802     i(window.$f, {fireEvent:function () {
803         var o = [].slice.call(arguments);
804         var q = $f(o[0]);
805         return q ? q._fireEvent(o.slice(1)) : null
806     }, addPlugin:function (o, p) {
807         b.prototype[o] = p;
808         return $f
809     }, each:m, extend:i});
810     if (typeof jQuery == "function") {
811         jQuery.fn.flowplayer = function (q, p) {
812             if (!arguments.length || typeof arguments[0] == "number") {
813                 var o = [];
814                 this.each(function () {
815                     var r = $f(this);
816                     if (r) {
817                         o.push(r)
818                     }
819                 });
820                 return arguments.length ? o[arguments[0]] : new d(o)
821             }
822             return this.each(function () {
823                 $f(this, k(q), p ? k(p) : {})
824             })
825         }
826     }
827 })();
828 (function () {
829     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};
830     if (window.attachEvent) {
831         window.attachEvent("onbeforeunload", function () {
832             __flash_unloadHandler = function () {
833             };
834             __flash_savedUnloadHandler = function () {
835             }
836         })
837     }
838     function i(m, l) {
839         if (l) {
840             for (var f in l) {
841                 if (l.hasOwnProperty(f)) {
842                     m[f] = l[f]
843                 }
844             }
845         }
846         return m
847     }
849     function a(f, n) {
850         var m = [];
851         for (var l in f) {
852             if (f.hasOwnProperty(l)) {
853                 m[l] = n(f[l])
854             }
855         }
856         return m
857     }
859     window.flashembed = function (f, m, l) {
860         if (typeof f == "string") {
861             f = document.getElementById(f.replace("#", ""))
862         }
863         if (!f) {
864             return
865         }
866         if (typeof m == "string") {
867             m = {src:m}
868         }
869         return new d(f, i(i({}, b), m), l)
870     };
871     var g = i(window.flashembed, {conf:b, getVersion:function () {
872         var m, f;
873         try {
874             f = navigator.plugins["Shockwave Flash"].description.slice(16)
875         } catch (o) {
876             try {
877                 m = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
878                 f = m && m.GetVariable("$version")
879             } catch (n) {
880                 try {
881                     m = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
882                     f = m && m.GetVariable("$version")
883                 } catch (l) {
884                 }
885             }
886         }
887         f = e.exec(f);
888         return f ? [1 * f[1], 1 * f[(f[1] * 1 > 9 ? 2 : 3)] * 1] : [0, 0]
889     }, asString:function (l) {
890         if (l === null || l === undefined) {
891             return null
892         }
893         var f = typeof l;
894         if (f == "object" && l.push) {
895             f = "array"
896         }
897         switch (f) {
898             case"string":
899                 l = l.replace(new RegExp('(["\\\\])', "g"), "\\$1");
900                 l = l.replace(/^\s?(\d+\.?\d*)%/, "$1pct");
901                 return'"' + l + '"';
902             case"array":
903                 return"[" + a(l,function (o) {
904                     return g.asString(o)
905                 }).join(",") + "]";
906             case"function":
907                 return'"function()"';
908             case"object":
909                 var m = [];
910                 for (var n in l) {
911                     if (l.hasOwnProperty(n)) {
912                         m.push('"' + n + '":' + g.asString(l[n]))
913                     }
914                 }
915                 return"{" + m.join(",") + "}"
916         }
917         return String(l).replace(/\s/g, " ").replace(/\'/g, '"')
918     }, getHTML:function (o, l) {
919         o = i({}, o);
920         var n = '<object width="' + o.width + '" height="' + o.height + '" id="' + o.id + '" name="' + o.id + '"';
921         if (o.cachebusting) {
922             o.src += ((o.src.indexOf("?") != -1 ? "&" : "?") + Math.random())
923         }
924         if (o.w3c || !h) {
925             n += ' data="' + o.src + '" type="application/x-shockwave-flash"'
926         } else {
927             n += ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
928         }
929         n += ">";
930         if (o.w3c || h) {
931             n += '<param name="movie" value="' + o.src + '" />'
932         }
933         o.width = o.height = o.id = o.w3c = o.src = null;
934         o.onFail = o.version = o.expressInstall = null;
935         for (var m in o) {
936             if (o[m]) {
937                 n += '<param name="' + m + '" value="' + o[m] + '" />'
938             }
939         }
940         var p = "";
941         if (l) {
942             for (var f in l) {
943                 if (l[f]) {
944                     var q = l[f];
945                     p += f + "=" + (/function|object/.test(typeof q) ? g.asString(q) : q) + "&"
946                 }
947             }
948             p = p.slice(0, -1);
949             n += '<param name="flashvars" value=\'' + p + "' />"
950         }
951         n += "</object>";
952         return n
953     }, isSupported:function (f) {
954         return k[0] > f[0] || k[0] == f[0] && k[1] >= f[1]
955     }});
956     var k = g.getVersion();
958     function d(f, n, m) {
959         if (g.isSupported(n.version)) {
960             f.innerHTML = g.getHTML(n, m)
961         } else {
962             if (n.expressInstall && g.isSupported([6, 65])) {
963                 f.innerHTML = g.getHTML(i(n, {src:n.expressInstall}), {MMredirectURL:encodeURIComponent(location.href), MMplayerType:"PlugIn", MMdoctitle:document.title})
964             } else {
965                 if (!f.innerHTML.replace(/\s/g, "")) {
966                     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>");
967                     if (f.tagName == "A" || f.tagName == "DIV") {
968                         f.onclick = function () {
969                             location.href = j
970                         }
971                     }
972                 }
973                 if (n.onFail) {
974                     var l = n.onFail.call(this);
975                     if (typeof l == "string") {
976                         f.innerHTML = l
977                     }
978                 }
979             }
980         }
981         if (h) {
982             window[n.id] = document.getElementById(n.id)
983         }
984         i(this, {getRoot:function () {
985             return f
986         }, getOptions:function () {
987             return n
988         }, getConf:function () {
989             return m
990         }, getApi:function () {
991             return f.firstChild
992         }})
993     }
995     if (c) {
996         jQuery.tools = jQuery.tools || {version:"3.2.11"};
997         jQuery.tools.flashembed = {conf:b};
998         jQuery.fn.flashembed = function (l, f) {
999             return this.each(function () {
1000                 $(this).data("flashembed", flashembed(this, l, f))
1001             })
1002         }
1003     }
1004 })();