Advertisement
Guest User

audiomanager.js

a guest
Jun 3rd, 2015
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function(root, factory) {
  2.     if (typeof module !== "undefined" && module.exports) {
  3.         module.exports = factory()
  4.     } else {
  5.         root.AudioManager = factory()
  6.     }
  7. })(this, function() {
  8.     var requirejs, require, define;
  9.     (function(undef) {
  10.         var main, req, makeMap, handlers, defined = {},
  11.             waiting = {},
  12.             config = {},
  13.             defining = {},
  14.             hasOwn = Object.prototype.hasOwnProperty,
  15.             aps = [].slice;
  16.  
  17.         function hasProp(obj, prop) {
  18.             return hasOwn.call(obj, prop)
  19.         }
  20.  
  21.         function normalize(name, baseName) {
  22.             var nameParts, nameSegment, mapValue, foundMap, foundI, foundStarMap, starI, i, j, part, baseParts = baseName && baseName.split("/"),
  23.                 map = config.map,
  24.                 starMap = map && map["*"] || {};
  25.             if (name && name.charAt(0) === ".") {
  26.                 if (baseName) {
  27.                     baseParts = baseParts.slice(0, baseParts.length - 1);
  28.                     name = baseParts.concat(name.split("/"));
  29.                     for (i = 0; i < name.length; i += 1) {
  30.                         part = name[i];
  31.                         if (part === ".") {
  32.                             name.splice(i, 1);
  33.                             i -= 1
  34.                         } else if (part === "..") {
  35.                             if (i === 1 && (name[2] === ".." || name[0] === "..")) {
  36.                                 break
  37.                             } else if (i > 0) {
  38.                                 name.splice(i - 1, 2);
  39.                                 i -= 2
  40.                             }
  41.                         }
  42.                     }
  43.                     name = name.join("/")
  44.                 } else if (name.indexOf("./") === 0) {
  45.                     name = name.substring(2)
  46.                 }
  47.             }
  48.             if ((baseParts || starMap) && map) {
  49.                 nameParts = name.split("/");
  50.                 for (i = nameParts.length; i > 0; i -= 1) {
  51.                     nameSegment = nameParts.slice(0, i).join("/");
  52.                     if (baseParts) {
  53.                         for (j = baseParts.length; j > 0; j -= 1) {
  54.                             mapValue = map[baseParts.slice(0, j).join("/")];
  55.                             if (mapValue) {
  56.                                 mapValue = mapValue[nameSegment];
  57.                                 if (mapValue) {
  58.                                     foundMap = mapValue;
  59.                                     foundI = i;
  60.                                     break
  61.                                 }
  62.                             }
  63.                         }
  64.                     }
  65.                     if (foundMap) {
  66.                         break
  67.                     }
  68.                     if (!foundStarMap && starMap && starMap[nameSegment]) {
  69.                         foundStarMap = starMap[nameSegment];
  70.                         starI = i
  71.                     }
  72.                 }
  73.                 if (!foundMap && foundStarMap) {
  74.                     foundMap = foundStarMap;
  75.                     foundI = starI
  76.                 }
  77.                 if (foundMap) {
  78.                     nameParts.splice(0, foundI, foundMap);
  79.                     name = nameParts.join("/")
  80.                 }
  81.             }
  82.             return name
  83.         }
  84.  
  85.         function makeRequire(relName, forceSync) {
  86.             return function() {
  87.                 return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]))
  88.             }
  89.         }
  90.  
  91.         function makeNormalize(relName) {
  92.             return function(name) {
  93.                 return normalize(name, relName)
  94.             }
  95.         }
  96.  
  97.         function makeLoad(depName) {
  98.             return function(value) {
  99.                 defined[depName] = value
  100.             }
  101.         }
  102.  
  103.         function callDep(name) {
  104.             if (hasProp(waiting, name)) {
  105.                 var args = waiting[name];
  106.                 delete waiting[name];
  107.                 defining[name] = true;
  108.                 main.apply(undef, args)
  109.             }
  110.             if (!hasProp(defined, name) && !hasProp(defining, name)) {
  111.                 throw new Error("No " + name)
  112.             }
  113.             return defined[name]
  114.         }
  115.  
  116.         function splitPrefix(name) {
  117.             var prefix, index = name ? name.indexOf("!") : -1;
  118.             if (index > -1) {
  119.                 prefix = name.substring(0, index);
  120.                 name = name.substring(index + 1, name.length)
  121.             }
  122.             return [prefix, name]
  123.         }
  124.         makeMap = function(name, relName) {
  125.             var plugin, parts = splitPrefix(name),
  126.                 prefix = parts[0];
  127.             name = parts[1];
  128.             if (prefix) {
  129.                 prefix = normalize(prefix, relName);
  130.                 plugin = callDep(prefix)
  131.             }
  132.             if (prefix) {
  133.                 if (plugin && plugin.normalize) {
  134.                     name = plugin.normalize(name, makeNormalize(relName))
  135.                 } else {
  136.                     name = normalize(name, relName)
  137.                 }
  138.             } else {
  139.                 name = normalize(name, relName);
  140.                 parts = splitPrefix(name);
  141.                 prefix = parts[0];
  142.                 name = parts[1];
  143.                 if (prefix) {
  144.                     plugin = callDep(prefix)
  145.                 }
  146.             }
  147.             return {
  148.                 f: prefix ? prefix + "!" + name : name,
  149.                 n: name,
  150.                 pr: prefix,
  151.                 p: plugin
  152.             }
  153.         };
  154.  
  155.         function makeConfig(name) {
  156.             return function() {
  157.                 return config && config.config && config.config[name] || {}
  158.             }
  159.         }
  160.         handlers = {
  161.             require: function(name) {
  162.                 return makeRequire(name)
  163.             },
  164.             exports: function(name) {
  165.                 var e = defined[name];
  166.                 if (typeof e !== "undefined") {
  167.                     return e
  168.                 } else {
  169.                     return defined[name] = {}
  170.                 }
  171.             },
  172.             module: function(name) {
  173.                 return {
  174.                     id: name,
  175.                     uri: "",
  176.                     exports: defined[name],
  177.                     config: makeConfig(name)
  178.                 }
  179.             }
  180.         };
  181.         main = function(name, deps, callback, relName) {
  182.             var cjsModule, depName, ret, map, i, args = [],
  183.                 usingExports;
  184.             relName = relName || name;
  185.             if (typeof callback === "function") {
  186.                 deps = !deps.length && callback.length ? ["require", "exports", "module"] : deps;
  187.                 for (i = 0; i < deps.length; i += 1) {
  188.                     map = makeMap(deps[i], relName);
  189.                     depName = map.f;
  190.                     if (depName === "require") {
  191.                         args[i] = handlers.require(name)
  192.                     } else if (depName === "exports") {
  193.                         args[i] = handlers.exports(name);
  194.                         usingExports = true
  195.                     } else if (depName === "module") {
  196.                         cjsModule = args[i] = handlers.module(name)
  197.                     } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) {
  198.                         args[i] = callDep(depName)
  199.                     } else if (map.p) {
  200.                         map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
  201.                         args[i] = defined[depName]
  202.                     } else {
  203.                         throw new Error(name + " missing " + depName)
  204.                     }
  205.                 }
  206.                 ret = callback.apply(defined[name], args);
  207.                 if (name) {
  208.                     if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) {
  209.                         defined[name] = cjsModule.exports
  210.                     } else if (ret !== undef || !usingExports) {
  211.                         defined[name] = ret
  212.                     }
  213.                 }
  214.             } else if (name) {
  215.                 defined[name] = callback
  216.             }
  217.         };
  218.         requirejs = require = req = function(deps, callback, relName, forceSync, alt) {
  219.             if (typeof deps === "string") {
  220.                 if (handlers[deps]) {
  221.                     return handlers[deps](callback)
  222.                 }
  223.                 return callDep(makeMap(deps, callback).f)
  224.             } else if (!deps.splice) {
  225.                 config = deps;
  226.                 if (callback.splice) {
  227.                     deps = callback;
  228.                     callback = relName;
  229.                     relName = null
  230.                 } else {
  231.                     deps = undef
  232.                 }
  233.             }
  234.             callback = callback || function() {};
  235.             if (typeof relName === "function") {
  236.                 relName = forceSync;
  237.                 forceSync = alt
  238.             }
  239.             if (forceSync) {
  240.                 main(undef, deps, callback, relName)
  241.             } else {
  242.                 setTimeout(function() {
  243.                     main(undef, deps, callback, relName)
  244.                 }, 4)
  245.             }
  246.             return req
  247.         };
  248.         req.config = function(cfg) {
  249.             config = cfg;
  250.             if (config.deps) {
  251.                 req(config.deps, config.callback)
  252.             }
  253.             return req
  254.         };
  255.         define = function(name, deps, callback) {
  256.             if (!deps.splice) {
  257.                 callback = deps;
  258.                 deps = []
  259.             }
  260.             if (!hasProp(defined, name) && !hasProp(waiting, name)) {
  261.                 waiting[name] = [name, deps, callback]
  262.             }
  263.         };
  264.         define.amd = {
  265.             jQuery: true
  266.         }
  267.     })();
  268.     define("vendor/almond", function() {});
  269.     ! function(n) {
  270.         function t(n) {
  271.             return typeof n.toString != "function" && typeof(n + "") == "string"
  272.         }
  273.  
  274.         function r() {}
  275.  
  276.         function e(n) {
  277.             n.length = 0, v.length < O && v.push(n)
  278.         }
  279.  
  280.         function o(n) {
  281.             var t = n.k;
  282.             t && o(t), n.b = n.k = n.object = n.number = n.string = null, d.length < O && d.push(n)
  283.         }
  284.  
  285.         function u() {}
  286.  
  287.         function a(n, t, r) {
  288.             function e() {
  289.                 var f = arguments,
  290.                     l = u ? this : t;
  291.                 return o || (n = t[a]), r.length && (f = f.length ? (f = W.call(f), c ? f.concat(r) : r.concat(f)) : r), this instanceof e ? (l = i(n.prototype), f = n.apply(l, f), g(f) ? f : l) : n.apply(l, f)
  292.             }
  293.             var o = p(n),
  294.                 u = !r,
  295.                 a = t;
  296.             if (u) {
  297.                 var c = void 0;
  298.                 r = t
  299.             } else if (!o) throw new TypeError;
  300.             return e
  301.         }
  302.  
  303.         function c() {
  304.             var n = d.pop() || {
  305.                 a: "",
  306.                 b: null,
  307.                 c: "",
  308.                 k: null,
  309.                 "false": !1,
  310.                 d: "",
  311.                 e: "",
  312.                 f: "",
  313.                 "null": !1,
  314.                 number: null,
  315.                 object: null,
  316.                 push: null,
  317.                 g: null,
  318.                 string: null,
  319.                 h: "",
  320.                 "true": !1,
  321.                 undefined: !1,
  322.                 i: !1,
  323.                 j: !1
  324.             };
  325.             n.g = w, n.b = n.c = n.f = n.h = "", n.e = "r", n.i = !0, n.j = !!et;
  326.             for (var t, r = 0; t = arguments[r]; r++)
  327.                 for (var e in t) n[e] = t[e];
  328.             r = n.a, n.d = /^[^,]+/.exec(r)[0], t = Function, r = "return function(" + r + "){", e = "var m,r=" + n.d + ",C=" + n.e + ";if(!r)return C;" + n.h + ";", n.b ? (e += "var s=r.length;m=-1;if(" + n.b + "){", Z.unindexedChars && (e += "if(q(r)){r=r.split('')}"), e += "while(++m<s){" + n.f + ";}}else{") : Z.nonEnumArgs && (e += "var s=r.length;m=-1;if(s&&n(r)){while(++m<s){m+='';" + n.f + ";}}else{"), Z.enumPrototypes && (e += "var E=typeof r=='function';"), Z.enumErrorProps && (e += "var D=r===j||r instanceof Error;");
  329.             var a = [];
  330.             if (Z.enumPrototypes && a.push('!(E&&m=="prototype")'), Z.enumErrorProps && a.push('!(D&&(m=="message"||m=="name"))'), n.i && n.j) e += "var A=-1,B=z[typeof r]&&t(r),s=B?B.length:0;while(++A<s){m=B[A];", a.length && (e += "if(" + a.join("&&") + "){"), e += n.f + ";", a.length && (e += "}"), e += "}";
  331.             else if (e += "for(m in r){", n.i && a.push("l.call(r, m)"), a.length && (e += "if(" + a.join("&&") + "){"), e += n.f + ";", a.length && (e += "}"), e += "}", Z.nonEnumShadows) {
  332.                 for (e += "if(r!==y){var h=r.constructor,p=r===(h&&h.prototype),e=r===H?G:r===j?i:J.call(r),v=w[e];", k = 0; 7 > k; k++) e += "m='" + n.g[k] + "';if((!(p&&v[m])&&l.call(r,m))", n.i || (e += "||(!v[m]&&r[m]!==y[m])"), e += "){" + n.f + "}";
  333.                 e += "}"
  334.             }
  335.             return (n.b || Z.nonEnumArgs) && (e += "}"), e += n.c + ";return C", t = t("i,j,l,n,o,q,t,u,y,z,w,G,H,J", r + e + "}"), o(n), t(P, $, L, f, tt, h, et, u, N, q, Y, z, G, T)
  336.         }
  337.  
  338.         function i(n) {
  339.             return g(n) ? K(n) : {}
  340.         }
  341.  
  342.         function f(n) {
  343.             return T.call(n) == A
  344.         }
  345.  
  346.         function l(n) {
  347.             var t = [];
  348.             return ut(n, function(n, r) {
  349.                 p(n) && t.push(r)
  350.             }), t.sort()
  351.         }
  352.  
  353.         function s(n, r, o, a, c, i) {
  354.             var l = o === E;
  355.             if (typeof o == "function" && !l) {
  356.                 o = u.createCallback(o, a, 2);
  357.                 var g = o(n, r);
  358.                 if (typeof g != "undefined") return !!g
  359.             }
  360.             if (n === r) return 0 !== n || 1 / n == 1 / r;
  361.             var h = typeof n,
  362.                 m = typeof r;
  363.             if (n === n && (!n || "function" != h && "object" != h) && (!r || "function" != m && "object" != m)) return !1;
  364.             if (null == n || null == r) return n === r;
  365.             if (m = T.call(n), h = T.call(r), m == A && (m = B), h == A && (h = B), m != h) return !1;
  366.             switch (m) {
  367.                 case S:
  368.                 case x:
  369.                     return +n == +r;
  370.                 case I:
  371.                     return n != +n ? r != +r : 0 == n ? 1 / n == 1 / r : n == +r;
  372.                 case F:
  373.                 case z:
  374.                     return n == r + ""
  375.             }
  376.             if (h = m == _, !h) {
  377.                 if (L.call(n, "__wrapped__") || L.call(r, "__wrapped__")) return s(n.__wrapped__ || n, r.__wrapped__ || r, o, a, c, i);
  378.                 if (m != B || !Z.nodeClass && (t(n) || t(r))) return !1;
  379.                 var m = !Z.argsObject && f(n) ? Object : n.constructor,
  380.                     y = !Z.argsObject && f(r) ? Object : r.constructor;
  381.                 if (m != y && !(p(m) && m instanceof m && p(y) && y instanceof y)) return !1
  382.             }
  383.             for (y = !c, c || (c = v.pop() || []), i || (i = v.pop() || []), m = c.length; m--;)
  384.                 if (c[m] == n) return i[m] == r;
  385.             var b = 0,
  386.                 g = !0;
  387.             if (c.push(n), i.push(r), h) {
  388.                 if (m = n.length, b = r.length, g = b == n.length, !g && !l) return g;
  389.                 for (; b--;)
  390.                     if (h = m, y = r[b], l)
  391.                         for (; h-- && !(g = s(n[h], y, o, a, c, i)););
  392.                     else if (!(g = s(n[b], y, o, a, c, i))) break;
  393.                 return g
  394.             }
  395.             return ut(r, function(t, r, e) {
  396.                 return L.call(e, r) ? (b++, g = L.call(n, r) && s(n[r], t, o, a, c, i)) : void 0
  397.             }), g && !l && ut(n, function(n, t, r) {
  398.                 return L.call(r, t) ? g = -1 < --b : void 0
  399.             }), y && (e(c), e(i)), g
  400.         }
  401.  
  402.         function p(n) {
  403.             return typeof n == "function"
  404.         }
  405.  
  406.         function g(n) {
  407.             return !(!n || !q[typeof n])
  408.         }
  409.  
  410.         function h(n) {
  411.             return typeof n == "string" || T.call(n) == z
  412.         }
  413.  
  414.         function m(n, t, r) {
  415.             if (t && typeof r == "undefined" && tt(n)) {
  416.                 r = -1;
  417.                 for (var e = n.length; ++r < e && false !== t(n[r], r, n););
  418.             } else ot(n, t, r);
  419.             return n
  420.         }
  421.  
  422.         function y(n, t) {
  423.             return Z.fastBind || V && 2 < arguments.length ? V.call.apply(V, arguments) : a(n, t, W.call(arguments, 2))
  424.         }
  425.  
  426.         function b(n) {
  427.             return n
  428.         }
  429.         var v = [],
  430.             d = [],
  431.             j = 0,
  432.             E = {},
  433.             O = 40,
  434.             C = (C = /\bthis\b/) && C.test(function() {
  435.                 return this
  436.             }) && C,
  437.             w = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),
  438.             A = "[object Arguments]",
  439.             _ = "[object Array]",
  440.             S = "[object Boolean]",
  441.             x = "[object Date]",
  442.             P = "[object Error]",
  443.             I = "[object Number]",
  444.             B = "[object Object]",
  445.             F = "[object RegExp]",
  446.             z = "[object String]",
  447.             q = {
  448.                 "boolean": !1,
  449.                 "function": !0,
  450.                 object: !0,
  451.                 number: !1,
  452.                 string: !1,
  453.                 undefined: !1
  454.             },
  455.             D = q[typeof global] && global;
  456.         !D || D.global !== D && D.window !== D || (n = D);
  457.         var R = [],
  458.             $ = Error.prototype,
  459.             N = Object.prototype,
  460.             G = String.prototype,
  461.             D = RegExp("^" + (N.valueOf + "").replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/valueOf|for [^\]]+/g, ".+?") + "$"),
  462.             H = R.concat,
  463.             J = Function.prototype.toString,
  464.             L = N.hasOwnProperty,
  465.             M = N.propertyIsEnumerable,
  466.             T = N.toString,
  467.             V = D.test(V = T.bind) && V,
  468.             K = D.test(K = Object.create) && K,
  469.             Q = D.test(Q = Array.isArray) && Q,
  470.             U = D.test(U = Object.keys) && U,
  471.             W = R.slice;
  472.         n = D.test(n.attachEvent);
  473.         var X = V && !/\n|true/.test(V + n),
  474.             Y = {};
  475.         Y[_] = Y[x] = Y[I] = {
  476.                 constructor: !0,
  477.                 toLocaleString: !0,
  478.                 toString: !0,
  479.                 valueOf: !0
  480.             }, Y[S] = Y[z] = {
  481.                 constructor: !0,
  482.                 toString: !0,
  483.                 valueOf: !0
  484.             }, Y[P] = Y["[object Function]"] = Y[F] = {
  485.                 constructor: !0,
  486.                 toString: !0
  487.             }, Y[B] = {
  488.                 constructor: !0
  489.             },
  490.             function() {
  491.                 for (var n = w.length; n--;) {
  492.                     var t, r = w[n];
  493.                     for (t in Y) L.call(Y, t) && !L.call(Y[t], r) && (Y[t][r] = !1)
  494.                 }
  495.             }();
  496.         var Z = u.support = {};
  497.         ! function() {
  498.             function n() {
  499.                 this.x = 1
  500.             }
  501.             var t = [];
  502.             n.prototype = {
  503.                 valueOf: 1
  504.             };
  505.             for (var r in new n) t.push(r);
  506.             for (r in arguments);
  507.             Z.argsObject = arguments.constructor == Object && !(arguments instanceof Array), Z.argsClass = f(arguments), Z.enumErrorProps = M.call($, "message") || M.call($, "name"), Z.enumPrototypes = M.call(n, "prototype"), Z.fastBind = V && !X, Z.nonEnumArgs = 0 != r, Z.nonEnumShadows = !/valueOf/.test(t), Z.unindexedChars = "xx" != "x" [0] + Object("x")[0];
  508.             try {
  509.                 Z.nodeClass = !(T.call(document) == B && !({
  510.                     toString: 0
  511.                 } + ""))
  512.             } catch (e) {
  513.                 Z.nodeClass = !0
  514.             }
  515.         }(1);
  516.         var nt = {
  517.             a: "x,F,k",
  518.             h: "var a=arguments,b=0,c=typeof k=='number'?2:a.length;while(++b<c){r=a[b];if(r&&z[typeof r]){",
  519.             f: "if(typeof C[m]=='undefined')C[m]=r[m]",
  520.             c: "}}"
  521.         };
  522.         n = {
  523.             a: "f,d,I",
  524.             h: "d=d&&typeof I=='undefined'?d:u.createCallback(d,I)",
  525.             b: "typeof s=='number'",
  526.             f: "if(d(r[m],m,f)===false)return C"
  527.         }, D = {
  528.             h: "if(!z[typeof r])return C;" + n.h,
  529.             b: !1
  530.         }, K || (i = function(n) {
  531.             if (g(n)) {
  532.                 r.prototype = n;
  533.                 var t = new r;
  534.                 r.prototype = null
  535.             }
  536.             return t || {}
  537.         }), Z.argsClass || (f = function(n) {
  538.             return n ? L.call(n, "callee") : !1
  539.         });
  540.         var tt = Q || function(n) {
  541.                 return n ? typeof n == "object" && T.call(n) == _ : !1
  542.             },
  543.             rt = c({
  544.                 a: "x",
  545.                 e: "[]",
  546.                 h: "if(!(z[typeof x]))return C",
  547.                 f: "C.push(m)"
  548.             }),
  549.             et = U ? function(n) {
  550.                 return g(n) ? Z.enumPrototypes && typeof n == "function" || Z.nonEnumArgs && n.length && f(n) ? rt(n) : U(n) : []
  551.             } : rt,
  552.             ot = c(n),
  553.             Q = c(nt, {
  554.                 h: nt.h.replace(";", ";if(c>3&&typeof a[c-2]=='function'){var d=u.createCallback(a[--c-1],a[c--],2)}else if(c>2&&typeof a[c-1]=='function'){d=a[--c]}"),
  555.                 f: "C[m]=d?d(C[m],r[m]):r[m]"
  556.             }),
  557.             nt = c(nt),
  558.             ut = c(n, D, {
  559.                 i: !1
  560.             });
  561.         p(/x/) && (p = function(n) {
  562.             return typeof n == "function" && "[object Function]" == T.call(n)
  563.         }), u.assign = Q, u.bind = y, u.bindAll = function(n) {
  564.             for (var t = 1 < arguments.length ? H.apply(R, W.call(arguments, 1)) : l(n), r = -1, e = t.length; ++r < e;) {
  565.                 var o = t[r];
  566.                 n[o] = y(n[o], n)
  567.             }
  568.             return n
  569.         }, u.createCallback = function(n, t, r) {
  570.             if (null == n) return b;
  571.             var e = typeof n;
  572.             if ("function" != e) {
  573.                 if ("object" != e) return function(t) {
  574.                     return t[n]
  575.                 };
  576.                 var o = et(n);
  577.                 return function(t) {
  578.                     for (var r = o.length, e = !1; r-- && (e = s(t[o[r]], n[o[r]], E)););
  579.                     return e
  580.                 }
  581.             }
  582.             return typeof t == "undefined" || C && !C.test(J.call(n)) ? n : 1 === r ? function(r) {
  583.                 return n.call(t, r)
  584.             } : 2 === r ? function(r, e) {
  585.                 return n.call(t, r, e)
  586.             } : 4 === r ? function(r, e, o, u) {
  587.                 return n.call(t, r, e, o, u)
  588.             } : function(r, e, o) {
  589.                 return n.call(t, r, e, o)
  590.             }
  591.         }, u.defaults = nt, u.forEach = m, u.forIn = ut, u.functions = l, u.invoke = function(n, t) {
  592.             var r = W.call(arguments, 2),
  593.                 e = -1,
  594.                 o = typeof t == "function",
  595.                 u = n ? n.length : 0,
  596.                 a = Array(typeof u == "number" ? u : 0);
  597.             return m(n, function(n) {
  598.                 a[++e] = (o ? t : n[t]).apply(n, r)
  599.             }), a
  600.         }, u.keys = et, u.once = function(n) {
  601.             var t, r;
  602.             return function() {
  603.                 return t ? r : (t = !0, r = n.apply(this, arguments), n = null, r)
  604.             }
  605.         }, u.values = function(n) {
  606.             for (var t = -1, r = et(n), e = r.length, o = Array(e); ++t < e;) o[t] = n[r[t]];
  607.             return o
  608.         }, u.each = m, u.extend = Q, u.methods = l, u.identity = b, u.isArguments = f, u.isArray = tt, u.isEqual = s, u.isFunction = p, u.isObject = g, u.isString = h, u.uniqueId = function(n) {
  609.             var t = ++j;
  610.             return (null == n ? "" : n) + "" + t
  611.         }, u.VERSION = "1.3.1", typeof define == "function" && typeof define.amd == "object" && define.amd && define("underscore", [], function() {
  612.             return u
  613.         })
  614.     }(this);
  615.     define("browserutils", {
  616.         supportHTML5Audio: function() {
  617.             var testAudio;
  618.             try {
  619.                 if (window.HTMLAudioElement && typeof Audio !== "undefined") {
  620.                     testAudio = new Audio;
  621.                     return true
  622.                 }
  623.             } catch (e) {
  624.                 return false
  625.             }
  626.         },
  627.         supportSourceSwappingWithPreload: function() {
  628.             return /Firefox/i.test(navigator.userAgent)
  629.         },
  630.         isMobile: function(type) {
  631.             var uA = window.navigator.userAgent,
  632.                 devices = ["mobile", "iPhone", "iPad", "iPod", "Android", "Skyfire"];
  633.             return devices.some(function(device) {
  634.                 device = new RegExp(device, "i");
  635.                 return device.test(uA)
  636.             })
  637.         },
  638.         canPlayType: function(type) {
  639.             var audio = document.createElement("audio");
  640.             if (!audio || !audio.canPlayType) {
  641.                 return false
  642.             } else {
  643.                 return audio.canPlayType(type).match(/maybe|probably/i) ? true : false
  644.             }
  645.         },
  646.         isNativeHlsSupported: function() {
  647.             var ua = navigator.userAgent,
  648.                 devices = ["iPhone", "iPad", "iPod"],
  649.                 check, desktopSafari, iOS;
  650.             check = function(r) {
  651.                 return r.test(ua)
  652.             };
  653.             desktopSafari = !check(/chrome/i) && !check(/opera/i) && check(/safari/i);
  654.             iOS = devices.some(function(device) {
  655.                 return check(new RegExp(device, "i"))
  656.             });
  657.             return iOS || desktopSafari
  658.         }
  659.     });
  660.     define("errors", {
  661.         FLASH_HLS_PLAYLIST_NOT_FOUND: "HLS_PLAYLIST_NOT_FOUND",
  662.         FLASH_HLS_PLAYLIST_SECURITY_ERROR: "HLS_SECURITY_ERROR",
  663.         FLASH_HLS_NOT_VALID_PLAYLIST: "HLS_NOT_VALID_PLAYLIST",
  664.         FLASH_HLS_NO_TS_IN_PLAYLIST: "HLS_NO_TS_IN_PLAYLIST",
  665.         FLASH_HLS_NO_PLAYLIST_IN_MANIFEST: "HLS_NO_PLAYLIST_IN_MANIFEST",
  666.         FLASH_HLS_TS_IS_CORRUPT: "HLS_TS_IS_CORRUPT",
  667.         FLASH_HLS_FLV_TAG_CORRUPT: "HLS_FLV_TAG_CORRUPT",
  668.         FLASH_HTTP_FILE_NOT_FOUND: "HTTP_FILE_NOT_FOUND",
  669.         FLASH_RTMP_CONNECT_FAILED: "RTMP_CONNECT_FAILED",
  670.         FLASH_RTMP_CONNECT_CLOSED: "RTMP_CONNECT_CLOSED",
  671.         FLASH_RTMP_CANNOT_PLAY_STREAM: "RTMP_CANNOT_PLAY_STREAM",
  672.         FLASH_PROXY_CANT_LOAD_FLASH: "CANT_LOAD_FLASH",
  673.         FLASH_PROXY_FLASH_BLOCKED: "FLASH_PROXY_FLASH_BLOCKED",
  674.         HTML5_AUDIO_ABORTED: "HTML5_AUDIO_ABORTED",
  675.         HTML5_AUDIO_NETWORK: "HTML5_AUDIO_NETWORK",
  676.         HTML5_AUDIO_DECODE: "HTML5_AUDIO_DECODE",
  677.         HTML5_AUDIO_SRC_NOT_SUPPORTED: "HTML5_AUDIO_SRC_NOT_SUPPORTED"
  678.     });
  679.     define("vendor/events", ["require", "exports", "module", "underscore"], function(require, exports, module) {
  680.         var _ = require("underscore");
  681.         var array = [];
  682.         var push = array.push;
  683.         var slice = array.slice;
  684.         var splice = array.splice;
  685.         var eventSplitter = /\s+/;
  686.         var eventsApi = function(obj, action, name, rest) {
  687.             if (!name) return true;
  688.             if (typeof name === "object") {
  689.                 for (var key in name) {
  690.                     obj[action].apply(obj, [key, name[key]].concat(rest))
  691.                 }
  692.             } else if (eventSplitter.test(name)) {
  693.                 var names = name.split(eventSplitter);
  694.                 for (var i = 0, l = names.length; i < l; i++) {
  695.                     obj[action].apply(obj, [names[i]].concat(rest))
  696.                 }
  697.             } else {
  698.                 return true
  699.             }
  700.         };
  701.         var triggerEvents = function(events, args) {
  702.             var ev, i = -1,
  703.                 l = events.length;
  704.             switch (args.length) {
  705.                 case 0:
  706.                     while (++i < l) {
  707.                         ev = events[i];
  708.                         ev.callback.call(ev.ctx)
  709.                     }
  710.                     return;
  711.                 case 1:
  712.                     while (++i < l)(ev = events[i]).callback.call(ev.ctx, args[0]);
  713.                     return;
  714.                 case 2:
  715.                     while (++i < l)(ev = events[i]).callback.call(ev.ctx, args[0], args[1]);
  716.                     return;
  717.                 case 3:
  718.                     while (++i < l)(ev = events[i]).callback.call(ev.ctx, args[0], args[1], args[2]);
  719.                     return;
  720.                 default:
  721.                     while (++i < l)(ev = events[i]).callback.apply(ev.ctx, args)
  722.             }
  723.         };
  724.         var Events = {
  725.             on: function(name, callback, context) {
  726.                 if (!eventsApi(this, "on", name, [callback, context]) || !callback) return this;
  727.                 this._events || (this._events = {});
  728.                 var events = this._events[name] || (this._events[name] = []);
  729.                 events.push({
  730.                     callback: callback,
  731.                     context: context,
  732.                     ctx: context || this
  733.                 });
  734.                 return this
  735.             },
  736.             once: function(name, callback, context) {
  737.                 if (!eventsApi(this, "once", name, [callback, context]) || !callback) return this;
  738.                 var self = this;
  739.                 var once = _.once(function() {
  740.                     self.off(name, once);
  741.                     callback.apply(this, arguments)
  742.                 });
  743.                 once._callback = callback;
  744.                 return this.on(name, once, context)
  745.             },
  746.             off: function(name, callback, context) {
  747.                 var retain, ev, events, names, i, l, j, k;
  748.                 if (!this._events || !eventsApi(this, "off", name, [callback, context])) return this;
  749.                 if (!name && !callback && !context) {
  750.                     this._events = {};
  751.                     return this
  752.                 }
  753.                 names = name ? [name] : _.keys(this._events);
  754.                 for (i = 0, l = names.length; i < l; i++) {
  755.                     name = names[i];
  756.                     if (events = this._events[name]) {
  757.                         this._events[name] = retain = [];
  758.                         if (callback || context) {
  759.                             for (j = 0, k = events.length; j < k; j++) {
  760.                                 ev = events[j];
  761.                                 if (callback && callback !== ev.callback && callback !== ev.callback._callback || context && context !== ev.context) {
  762.                                     retain.push(ev)
  763.                                 }
  764.                             }
  765.                         }
  766.                         if (!retain.length) delete this._events[name]
  767.                     }
  768.                 }
  769.                 return this
  770.             },
  771.             trigger: function(name, args) {
  772.                 if (!this._events) return this;
  773.                 var args = slice.call(arguments, 1);
  774.                 if (!eventsApi(this, "trigger", name, args)) return this;
  775.                 var events = this._events[name];
  776.                 var allEvents = this._events.all;
  777.                 if (events) triggerEvents(events, args);
  778.                 if (allEvents) triggerEvents(allEvents, arguments);
  779.                 return this
  780.             },
  781.             stopListening: function(obj, name, callback) {
  782.                 var listeners = this._listeners;
  783.                 if (!listeners) return this;
  784.                 var deleteListener = !name && !callback;
  785.                 if (typeof name === "object") callback = this;
  786.                 if (obj)(listeners = {})[obj._listenerId] = obj;
  787.                 for (var id in listeners) {
  788.                     listeners[id].off(name, callback, this);
  789.                     if (deleteListener) delete this._listeners[id]
  790.                 }
  791.                 return this
  792.             }
  793.         };
  794.         var listenMethods = {
  795.             listenTo: "on",
  796.             listenToOnce: "once"
  797.         };
  798.         _.each(listenMethods, function(implementation, method) {
  799.             Events[method] = function(obj, name, callback) {
  800.                 var listeners = this._listeners || (this._listeners = {});
  801.                 var id = obj._listenerId || (obj._listenerId = _.uniqueId("l"));
  802.                 listeners[id] = obj;
  803.                 if (typeof name === "object") callback = this;
  804.                 obj[implementation](name, callback, this);
  805.                 return this
  806.             }
  807.         });
  808.         Events.bind = Events.on;
  809.         Events.unbind = Events.off;
  810.         module.exports = Events
  811.     });
  812.     define("logger", ["require", "exports", "module"], function(require, exports, module) {
  813.         var Logger;
  814.         module.exports = Logger = function(type, id, settings) {
  815.             this.enabled = settings.debug;
  816.             this.type = type;
  817.             this.id = id
  818.         };
  819.         Logger.prototype.log = function(message) {
  820.             if (!this.enabled) {
  821.                 return
  822.             }
  823.             window.console.log("#" + this.type + " " + this.id + "# " + message)
  824.         }
  825.     });
  826.     define("states", {
  827.         PLAYING: "playing",
  828.         LOADING: "loading",
  829.         SEEKING: "seeking",
  830.         PAUSED: "paused",
  831.         ERROR: "error",
  832.         IDLE: "idle",
  833.         INITIALIZE: "initialize",
  834.         ENDED: "ended",
  835.         DEAD: "dead"
  836.     });
  837.     define("vendor/swfobject", [], function() {
  838.         var UNDEF = "undefined",
  839.             OBJECT = "object",
  840.             SHOCKWAVE_FLASH = "Shockwave Flash",
  841.             SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
  842.             FLASH_MIME_TYPE = "application/x-shockwave-flash",
  843.             EXPRESS_INSTALL_ID = "SWFObjectExprInst",
  844.             ON_READY_STATE_CHANGE = "onreadystatechange",
  845.             win = window,
  846.             doc = document,
  847.             nav = navigator,
  848.             swfobject, plugin = false,
  849.             domLoadFnArr = [],
  850.             regObjArr = [],
  851.             objIdArr = [],
  852.             listenersArr = [],
  853.             storedFbContent, storedFbContentId, storedCallbackFn, storedCallbackObj, isDomLoaded = false,
  854.             isExpressInstallActive = false,
  855.             dynamicStylesheet, dynamicStylesheetMedia, autoHideShow = true,
  856.             encodeURI_enabled = false,
  857.             ua = function() {
  858.                 var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
  859.                     u = nav.userAgent.toLowerCase(),
  860.                     p = nav.platform.toLowerCase(),
  861.                     windows = p ? /win/.test(p) : /win/.test(u),
  862.                     mac = p ? /mac/.test(p) : /mac/.test(u),
  863.                     webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false,
  864.                     ie = nav.appName === "Microsoft Internet Explorer",
  865.                     playerVersion = [0, 0, 0],
  866.                     d = null;
  867.                 if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
  868.                     d = nav.plugins[SHOCKWAVE_FLASH].description;
  869.                     if (d && (typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) {
  870.                         plugin = true;
  871.                         ie = false;
  872.                         d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
  873.                         playerVersion[0] = toInt(d.replace(/^(.*)\..*$/, "$1"));
  874.                         playerVersion[1] = toInt(d.replace(/^.*\.(.*)\s.*$/, "$1"));
  875.                         playerVersion[2] = /[a-zA-Z]/.test(d) ? toInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1")) : 0
  876.                     }
  877.                 } else if (typeof win.ActiveXObject != UNDEF) {
  878.                     try {
  879.                         var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
  880.                         if (a) {
  881.                             d = a.GetVariable("$version");
  882.                             if (d) {
  883.                                 ie = true;
  884.                                 d = d.split(" ")[1].split(",");
  885.                                 playerVersion = [toInt(d[0]), toInt(d[1]), toInt(d[2])]
  886.                             }
  887.                         }
  888.                     } catch (e) {}
  889.                 }
  890.                 return {
  891.                     w3: w3cdom,
  892.                     pv: playerVersion,
  893.                     wk: webkit,
  894.                     ie: ie,
  895.                     win: windows,
  896.                     mac: mac
  897.                 }
  898.             }(),
  899.             onDomLoad = function() {
  900.                 if (!ua.w3) {
  901.                     return
  902.                 }
  903.                 if (typeof doc.readyState != UNDEF && (doc.readyState === "complete" || doc.readyState === "interactive") || typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body)) {
  904.                     callDomLoadFunctions()
  905.                 }
  906.                 if (!isDomLoaded) {
  907.                     if (typeof doc.addEventListener != UNDEF) {
  908.                         doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false)
  909.                     }
  910.                     if (ua.ie) {
  911.                         doc.attachEvent(ON_READY_STATE_CHANGE, function detach() {
  912.                             if (doc.readyState == "complete") {
  913.                                 doc.detachEvent(ON_READY_STATE_CHANGE, detach);
  914.                                 callDomLoadFunctions()
  915.                             }
  916.                         });
  917.                         if (win == top) {
  918.                             (function checkDomLoadedIE() {
  919.                                 if (isDomLoaded) {
  920.                                     return
  921.                                 }
  922.                                 try {
  923.                                     doc.documentElement.doScroll("left")
  924.                                 } catch (e) {
  925.                                     setTimeout(checkDomLoadedIE, 0);
  926.                                     return
  927.                                 }
  928.                                 callDomLoadFunctions()
  929.                             })()
  930.                         }
  931.                     }
  932.                     if (ua.wk) {
  933.                         (function checkDomLoadedWK() {
  934.                             if (isDomLoaded) {
  935.                                 return
  936.                             }
  937.                             if (!/loaded|complete/.test(doc.readyState)) {
  938.                                 setTimeout(checkDomLoadedWK, 0);
  939.                                 return
  940.                             }
  941.                             callDomLoadFunctions()
  942.                         })()
  943.                     }
  944.                 }
  945.             }();
  946.  
  947.         function callDomLoadFunctions() {
  948.             if (isDomLoaded || !document.getElementsByTagName("body")[0]) {
  949.                 return
  950.             }
  951.             try {
  952.                 var t, span = createElement("span");
  953.                 span.style.display = "none";
  954.                 t = doc.getElementsByTagName("body")[0].appendChild(span);
  955.                 t.parentNode.removeChild(t);
  956.                 t = null;
  957.                 span = null
  958.             } catch (e) {
  959.                 return
  960.             }
  961.             isDomLoaded = true;
  962.             var dl = domLoadFnArr.length;
  963.             for (var i = 0; i < dl; i++) {
  964.                 domLoadFnArr[i]()
  965.             }
  966.         }
  967.  
  968.         function addDomLoadEvent(fn) {
  969.             if (isDomLoaded) {
  970.                 fn()
  971.             } else {
  972.                 domLoadFnArr[domLoadFnArr.length] = fn
  973.             }
  974.         }
  975.  
  976.         function addLoadEvent(fn) {
  977.             if (typeof win.addEventListener != UNDEF) {
  978.                 win.addEventListener("load", fn, false)
  979.             } else if (typeof doc.addEventListener != UNDEF) {
  980.                 doc.addEventListener("load", fn, false)
  981.             } else if (typeof win.attachEvent != UNDEF) {
  982.                 addListener(win, "onload", fn)
  983.             } else if (typeof win.onload == "function") {
  984.                 var fnOld = win.onload;
  985.                 win.onload = function() {
  986.                     fnOld();
  987.                     fn()
  988.                 }
  989.             } else {
  990.                 win.onload = fn
  991.             }
  992.         }
  993.  
  994.         function testPlayerVersion() {
  995.             var b = doc.getElementsByTagName("body")[0];
  996.             var o = createElement(OBJECT);
  997.             o.setAttribute("style", "visibility: hidden;");
  998.             o.setAttribute("type", FLASH_MIME_TYPE);
  999.             var t = b.appendChild(o);
  1000.             if (t) {
  1001.                 var counter = 0;
  1002.                 (function checkGetVariable() {
  1003.                     if (typeof t.GetVariable != UNDEF) {
  1004.                         try {
  1005.                             var d = t.GetVariable("$version");
  1006.                             if (d) {
  1007.                                 d = d.split(" ")[1].split(",");
  1008.                                 ua.pv = [toInt(d[0]), toInt(d[1]), toInt(d[2])]
  1009.                             }
  1010.                         } catch (e) {
  1011.                             ua.pv = [8, 0, 0]
  1012.                         }
  1013.                     } else if (counter < 10) {
  1014.                         counter++;
  1015.                         setTimeout(checkGetVariable, 10);
  1016.                         return
  1017.                     }
  1018.                     b.removeChild(o);
  1019.                     t = null;
  1020.                     matchVersions()
  1021.                 })()
  1022.             } else {
  1023.                 matchVersions()
  1024.             }
  1025.         }
  1026.  
  1027.         function matchVersions() {
  1028.             var rl = regObjArr.length;
  1029.             if (rl > 0) {
  1030.                 for (var i = 0; i < rl; i++) {
  1031.                     var id = regObjArr[i].id;
  1032.                     var cb = regObjArr[i].callbackFn;
  1033.                     var cbObj = {
  1034.                         success: false,
  1035.                         id: id
  1036.                     };
  1037.                     if (ua.pv[0] > 0) {
  1038.                         var obj = getElementById(id);
  1039.                         if (obj) {
  1040.                             if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) {
  1041.                                 setVisibility(id, true);
  1042.                                 if (cb) {
  1043.                                     cbObj.success = true;
  1044.                                     cbObj.ref = getObjectById(id);
  1045.                                     cbObj.id = id;
  1046.                                     cb(cbObj)
  1047.                                 }
  1048.                             } else if (regObjArr[i].expressInstall && canExpressInstall()) {
  1049.                                 var att = {};
  1050.                                 att.data = regObjArr[i].expressInstall;
  1051.                                 att.width = obj.getAttribute("width") || "0";
  1052.                                 att.height = obj.getAttribute("height") || "0";
  1053.                                 if (obj.getAttribute("class")) {
  1054.                                     att.styleclass = obj.getAttribute("class")
  1055.                                 }
  1056.                                 if (obj.getAttribute("align")) {
  1057.                                     att.align = obj.getAttribute("align")
  1058.                                 }
  1059.                                 var par = {};
  1060.                                 var p = obj.getElementsByTagName("param");
  1061.                                 var pl = p.length;
  1062.                                 for (var j = 0; j < pl; j++) {
  1063.                                     if (p[j].getAttribute("name").toLowerCase() != "movie") {
  1064.                                         par[p[j].getAttribute("name")] = p[j].getAttribute("value")
  1065.                                     }
  1066.                                 }
  1067.                                 showExpressInstall(att, par, id, cb)
  1068.                             } else {
  1069.                                 displayFbContent(obj);
  1070.                                 if (cb) {
  1071.                                     cb(cbObj)
  1072.                                 }
  1073.                             }
  1074.                         }
  1075.                     } else {
  1076.                         setVisibility(id, true);
  1077.                         if (cb) {
  1078.                             var o = getObjectById(id);
  1079.                             if (o && typeof o.SetVariable != UNDEF) {
  1080.                                 cbObj.success = true;
  1081.                                 cbObj.ref = o;
  1082.                                 cbObj.id = o.id
  1083.                             }
  1084.                             cb(cbObj)
  1085.                         }
  1086.                     }
  1087.                 }
  1088.             }
  1089.         }
  1090.         domLoadFnArr[0] = function() {
  1091.             if (plugin) {
  1092.                 testPlayerVersion()
  1093.             } else {
  1094.                 matchVersions()
  1095.             }
  1096.         };
  1097.  
  1098.         function getObjectById(objectIdStr) {
  1099.             var r = null,
  1100.                 o = getElementById(objectIdStr);
  1101.             if (o && o.nodeName.toUpperCase() === "OBJECT") {
  1102.                 if (typeof o.SetVariable !== UNDEF) {
  1103.                     r = o
  1104.                 } else {
  1105.                     r = o.getElementsByTagName(OBJECT)[0] || o
  1106.                 }
  1107.             }
  1108.             return r
  1109.         }
  1110.  
  1111.         function canExpressInstall() {
  1112.             return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312)
  1113.         }
  1114.  
  1115.         function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
  1116.             var obj = getElementById(replaceElemIdStr);
  1117.             replaceElemIdStr = getId(replaceElemIdStr);
  1118.             isExpressInstallActive = true;
  1119.             storedCallbackFn = callbackFn || null;
  1120.             storedCallbackObj = {
  1121.                 success: false,
  1122.                 id: replaceElemIdStr
  1123.             };
  1124.             if (obj) {
  1125.                 if (obj.nodeName.toUpperCase() == "OBJECT") {
  1126.                     storedFbContent = abstractFbContent(obj);
  1127.                     storedFbContentId = null
  1128.                 } else {
  1129.                     storedFbContent = obj;
  1130.                     storedFbContentId = replaceElemIdStr
  1131.                 }
  1132.                 att.id = EXPRESS_INSTALL_ID;
  1133.                 if (typeof att.width == UNDEF || !/%$/.test(att.width) && toInt(att.width) < 310) {
  1134.                     att.width = "310"
  1135.                 }
  1136.                 if (typeof att.height == UNDEF || !/%$/.test(att.height) && toInt(att.height) < 137) {
  1137.                     att.height = "137"
  1138.                 }
  1139.                 var pt = ua.ie ? "ActiveX" : "PlugIn",
  1140.                     fv = "MMredirectURL=" + encodeURIComponent(win.location.toString().replace(/&/g, "%26")) + "&MMplayerType=" + pt + "&MMdoctitle=" + encodeURIComponent(doc.title.slice(0, 47) + " - Flash Player Installation");
  1141.                 if (typeof par.flashvars != UNDEF) {
  1142.                     par.flashvars += "&" + fv
  1143.                 } else {
  1144.                     par.flashvars = fv
  1145.                 }
  1146.                 if (ua.ie && obj.readyState != 4) {
  1147.                     var newObj = createElement("div");
  1148.                     replaceElemIdStr += "SWFObjectNew";
  1149.                     newObj.setAttribute("id", replaceElemIdStr);
  1150.                     obj.parentNode.insertBefore(newObj, obj);
  1151.                     obj.style.display = "none";
  1152.                     removeSWF(obj)
  1153.                 }
  1154.                 createSWF(att, par, replaceElemIdStr)
  1155.             }
  1156.         }
  1157.  
  1158.         function displayFbContent(obj) {
  1159.             if (ua.ie && obj.readyState != 4) {
  1160.                 obj.style.display = "none";
  1161.                 var el = createElement("div");
  1162.                 obj.parentNode.insertBefore(el, obj);
  1163.                 el.parentNode.replaceChild(abstractFbContent(obj), el);
  1164.                 removeSWF(obj)
  1165.             } else {
  1166.                 obj.parentNode.replaceChild(abstractFbContent(obj), obj)
  1167.             }
  1168.         }
  1169.  
  1170.         function abstractFbContent(obj) {
  1171.             var ac = createElement("div");
  1172.             if (ua.win && ua.ie) {
  1173.                 ac.innerHTML = obj.innerHTML
  1174.             } else {
  1175.                 var nestedObj = obj.getElementsByTagName(OBJECT)[0];
  1176.                 if (nestedObj) {
  1177.                     var c = nestedObj.childNodes;
  1178.                     if (c) {
  1179.                         var cl = c.length;
  1180.                         for (var i = 0; i < cl; i++) {
  1181.                             if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
  1182.                                 ac.appendChild(c[i].cloneNode(true))
  1183.                             }
  1184.                         }
  1185.                     }
  1186.                 }
  1187.             }
  1188.             return ac
  1189.         }
  1190.  
  1191.         function createIeObject(url, param_str) {
  1192.             var div = createElement("div");
  1193.             div.innerHTML = "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='" + url + "'>" + param_str + "</object>";
  1194.             return div.firstChild
  1195.         }
  1196.  
  1197.         function createSWF(attObj, parObj, id) {
  1198.             var r, el = getElementById(id);
  1199.             id = getId(id);
  1200.             if (ua.wk && ua.wk < 312) {
  1201.                 return r
  1202.             }
  1203.             if (el) {
  1204.                 var o = ua.ie ? createElement("div") : createElement(OBJECT),
  1205.                     attr, attr_lower, param;
  1206.                 if (typeof attObj.id == UNDEF) {
  1207.                     attObj.id = id
  1208.                 }
  1209.                 for (param in parObj) {
  1210.                     if (parObj.hasOwnProperty(param) && param.toLowerCase() !== "movie") {
  1211.                         createObjParam(o, param, parObj[param])
  1212.                     }
  1213.                 }
  1214.                 if (ua.ie) {
  1215.                     o = createIeObject(attObj.data, o.innerHTML)
  1216.                 }
  1217.                 for (attr in attObj) {
  1218.                     if (attObj.hasOwnProperty(attr)) {
  1219.                         attr_lower = attr.toLowerCase();
  1220.                         if (attr_lower === "styleclass") {
  1221.                             o.setAttribute("class", attObj[attr])
  1222.                         } else if (attr_lower !== "classid" && attr_lower !== "data") {
  1223.                             o.setAttribute(attr, attObj[attr])
  1224.                         }
  1225.                     }
  1226.                 }
  1227.                 if (ua.ie) {
  1228.                     objIdArr[objIdArr.length] = attObj.id
  1229.                 } else {
  1230.                     o.setAttribute("type", FLASH_MIME_TYPE);
  1231.                     o.setAttribute("data", attObj.data)
  1232.                 }
  1233.                 el.parentNode.replaceChild(o, el);
  1234.                 r = o
  1235.             }
  1236.             return r
  1237.         }
  1238.  
  1239.         function createObjParam(el, pName, pValue) {
  1240.             var p = createElement("param");
  1241.             p.setAttribute("name", pName);
  1242.             p.setAttribute("value", pValue);
  1243.             el.appendChild(p)
  1244.         }
  1245.  
  1246.         function removeSWF(id) {
  1247.             var obj = getElementById(id);
  1248.             if (obj && obj.nodeName.toUpperCase() == "OBJECT") {
  1249.                 if (ua.ie) {
  1250.                     obj.style.display = "none";
  1251.                     (function removeSWFInIE() {
  1252.                         if (obj.readyState == 4) {
  1253.                             for (var i in obj) {
  1254.                                 if (typeof obj[i] == "function") {
  1255.                                     obj[i] = null
  1256.                                 }
  1257.                             }
  1258.                             obj.parentNode.removeChild(obj)
  1259.                         } else {
  1260.                             setTimeout(removeSWFInIE, 10)
  1261.                         }
  1262.                     })()
  1263.                 } else {
  1264.                     obj.parentNode.removeChild(obj)
  1265.                 }
  1266.             }
  1267.         }
  1268.  
  1269.         function isElement(id) {
  1270.             return id && id.nodeType && id.nodeType === 1
  1271.         }
  1272.  
  1273.         function getId(thing) {
  1274.             return isElement(thing) ? thing.id : thing
  1275.         }
  1276.  
  1277.         function getElementById(id) {
  1278.             if (isElement(id)) {
  1279.                 return id
  1280.             }
  1281.             var el = null;
  1282.             try {
  1283.                 el = doc.getElementById(id)
  1284.             } catch (e) {}
  1285.             return el
  1286.         }
  1287.  
  1288.         function createElement(el) {
  1289.             return doc.createElement(el)
  1290.         }
  1291.  
  1292.         function toInt(str) {
  1293.             return parseInt(str, 10)
  1294.         }
  1295.  
  1296.         function addListener(target, eventType, fn) {
  1297.             target.attachEvent(eventType, fn);
  1298.             listenersArr[listenersArr.length] = [target, eventType, fn]
  1299.         }
  1300.  
  1301.         function hasPlayerVersion(rv) {
  1302.             rv += "";
  1303.             var pv = ua.pv,
  1304.                 v = rv.split(".");
  1305.             v[0] = toInt(v[0]);
  1306.             v[1] = toInt(v[1]) || 0;
  1307.             v[2] = toInt(v[2]) || 0;
  1308.             return pv[0] > v[0] || pv[0] == v[0] && pv[1] > v[1] || pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2] ? true : false
  1309.         }
  1310.  
  1311.         function createCSS(sel, decl, media, newStyle) {
  1312.             var h = doc.getElementsByTagName("head")[0];
  1313.             if (!h) {
  1314.                 return
  1315.             }
  1316.             var m = typeof media == "string" ? media : "screen";
  1317.             if (newStyle) {
  1318.                 dynamicStylesheet = null;
  1319.                 dynamicStylesheetMedia = null
  1320.             }
  1321.             if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
  1322.                 var s = createElement("style");
  1323.                 s.setAttribute("type", "text/css");
  1324.                 s.setAttribute("media", m);
  1325.                 dynamicStylesheet = h.appendChild(s);
  1326.                 if (ua.ie && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
  1327.                     dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]
  1328.                 }
  1329.                 dynamicStylesheetMedia = m
  1330.             }
  1331.             if (dynamicStylesheet) {
  1332.                 if (typeof dynamicStylesheet.addRule != UNDEF) {
  1333.                     dynamicStylesheet.addRule(sel, decl)
  1334.                 } else if (typeof doc.createTextNode != UNDEF) {
  1335.                     dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"))
  1336.                 }
  1337.             }
  1338.         }
  1339.  
  1340.         function setVisibility(id, isVisible) {
  1341.             if (!autoHideShow) {
  1342.                 return
  1343.             }
  1344.             var v = isVisible ? "visible" : "hidden",
  1345.                 el = getElementById(id);
  1346.             if (isDomLoaded && el) {
  1347.                 el.style.visibility = v
  1348.             } else if (typeof id === "string") {
  1349.                 createCSS("#" + id, "visibility:" + v)
  1350.             }
  1351.         }
  1352.  
  1353.         function urlEncodeIfNecessary(s) {
  1354.             var regex = /[\\\"<>\.;]/;
  1355.             var hasBadChars = regex.exec(s) != null;
  1356.             return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s
  1357.         }
  1358.         var cleanup = function() {
  1359.             if (ua.ie) {
  1360.                 window.attachEvent("onunload", function() {
  1361.                     var ll = listenersArr.length;
  1362.                     for (var i = 0; i < ll; i++) {
  1363.                         listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2])
  1364.                     }
  1365.                     var il = objIdArr.length;
  1366.                     for (var j = 0; j < il; j++) {
  1367.                         removeSWF(objIdArr[j])
  1368.                     }
  1369.                     for (var k in ua) {
  1370.                         ua[k] = null
  1371.                     }
  1372.                     ua = null;
  1373.                     for (var l in swfobject) {
  1374.                         swfobject[l] = null
  1375.                     }
  1376.                     swfobject = null
  1377.                 })
  1378.             }
  1379.         }();
  1380.         return swfobject = {
  1381.             registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
  1382.                 if (ua.w3 && objectIdStr && swfVersionStr) {
  1383.                     var regObj = {};
  1384.                     regObj.id = objectIdStr;
  1385.                     regObj.swfVersion = swfVersionStr;
  1386.                     regObj.expressInstall = xiSwfUrlStr;
  1387.                     regObj.callbackFn = callbackFn;
  1388.                     regObjArr[regObjArr.length] = regObj;
  1389.                     setVisibility(objectIdStr, false)
  1390.                 } else if (callbackFn) {
  1391.                     callbackFn({
  1392.                         success: false,
  1393.                         id: objectIdStr
  1394.                     })
  1395.                 }
  1396.             },
  1397.             getObjectById: function(objectIdStr) {
  1398.                 if (ua.w3) {
  1399.                     return getObjectById(objectIdStr)
  1400.                 }
  1401.             },
  1402.             embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
  1403.                 var id = getId(replaceElemIdStr),
  1404.                     callbackObj = {
  1405.                         success: false,
  1406.                         id: id
  1407.                     };
  1408.                 if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
  1409.                     setVisibility(id, false);
  1410.                     addDomLoadEvent(function() {
  1411.                         widthStr += "";
  1412.                         heightStr += "";
  1413.                         var att = {};
  1414.                         if (attObj && typeof attObj === OBJECT) {
  1415.                             for (var i in attObj) {
  1416.                                 att[i] = attObj[i]
  1417.                             }
  1418.                         }
  1419.                         att.data = swfUrlStr;
  1420.                         att.width = widthStr;
  1421.                         att.height = heightStr;
  1422.                         var par = {};
  1423.                         if (parObj && typeof parObj === OBJECT) {
  1424.                             for (var j in parObj) {
  1425.                                 par[j] = parObj[j]
  1426.                             }
  1427.                         }
  1428.                         if (flashvarsObj && typeof flashvarsObj === OBJECT) {
  1429.                             for (var k in flashvarsObj) {
  1430.                                 if (flashvarsObj.hasOwnProperty(k)) {
  1431.                                     var key = encodeURI_enabled ? encodeURIComponent(k) : k,
  1432.                                         value = encodeURI_enabled ? encodeURIComponent(flashvarsObj[k]) : flashvarsObj[k];
  1433.                                     if (typeof par.flashvars != UNDEF) {
  1434.                                         par.flashvars += "&" + key + "=" + value
  1435.                                     } else {
  1436.                                         par.flashvars = key + "=" + value
  1437.                                     }
  1438.                                 }
  1439.                             }
  1440.                         }
  1441.                         if (hasPlayerVersion(swfVersionStr)) {
  1442.                             var obj = createSWF(att, par, replaceElemIdStr);
  1443.                             if (att.id == id) {
  1444.                                 setVisibility(id, true)
  1445.                             }
  1446.                             callbackObj.success = true;
  1447.                             callbackObj.ref = obj;
  1448.                             callbackObj.id = obj.id
  1449.                         } else if (xiSwfUrlStr && canExpressInstall()) {
  1450.                             att.data = xiSwfUrlStr;
  1451.                             showExpressInstall(att, par, replaceElemIdStr, callbackFn);
  1452.                             return
  1453.                         } else {
  1454.                             setVisibility(id, true)
  1455.                         }
  1456.                         if (callbackFn) {
  1457.                             callbackFn(callbackObj)
  1458.                         }
  1459.                     })
  1460.                 } else if (callbackFn) {
  1461.                     callbackFn(callbackObj)
  1462.                 }
  1463.             },
  1464.             switchOffAutoHideShow: function() {
  1465.                 autoHideShow = false
  1466.             },
  1467.             enableUriEncoding: function(bool) {
  1468.                 encodeURI_enabled = typeof bool === UNDEF ? true : bool
  1469.             },
  1470.             ua: ua,
  1471.             getFlashPlayerVersion: function() {
  1472.                 return {
  1473.                     major: ua.pv[0],
  1474.                     minor: ua.pv[1],
  1475.                     release: ua.pv[2]
  1476.                 }
  1477.             },
  1478.             hasFlashPlayerVersion: hasPlayerVersion,
  1479.             createSWF: function(attObj, parObj, replaceElemIdStr) {
  1480.                 if (ua.w3) {
  1481.                     return createSWF(attObj, parObj, replaceElemIdStr)
  1482.                 } else {
  1483.                     return undefined
  1484.                 }
  1485.             },
  1486.             showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
  1487.                 if (ua.w3 && canExpressInstall()) {
  1488.                     showExpressInstall(att, par, replaceElemIdStr, callbackFn)
  1489.                 }
  1490.             },
  1491.             removeSWF: function(objElemIdStr) {
  1492.                 if (ua.w3) {
  1493.                     removeSWF(objElemIdStr)
  1494.                 }
  1495.             },
  1496.             createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
  1497.                 if (ua.w3) {
  1498.                     createCSS(selStr, declStr, mediaStr, newStyleBoolean)
  1499.                 }
  1500.             },
  1501.             addDomLoadEvent: addDomLoadEvent,
  1502.             addLoadEvent: addLoadEvent,
  1503.             getQueryParamValue: function(param) {
  1504.                 var q = doc.location.search || doc.location.hash;
  1505.                 if (q) {
  1506.                     if (/\?/.test(q)) {
  1507.                         q = q.split("?")[1]
  1508.                     }
  1509.                     if (param == null) {
  1510.                         return urlEncodeIfNecessary(q)
  1511.                     }
  1512.                     var pairs = q.split("&");
  1513.                     for (var i = 0; i < pairs.length; i++) {
  1514.                         if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
  1515.                             return urlEncodeIfNecessary(pairs[i].substring(pairs[i].indexOf("=") + 1))
  1516.                         }
  1517.                     }
  1518.                 }
  1519.                 return ""
  1520.             },
  1521.             expressInstallCallback: function() {
  1522.                 if (isExpressInstallActive) {
  1523.                     var obj = getElementById(EXPRESS_INSTALL_ID);
  1524.                     if (obj && storedFbContent) {
  1525.                         obj.parentNode.replaceChild(storedFbContent, obj);
  1526.                         if (storedFbContentId) {
  1527.                             setVisibility(storedFbContentId, true);
  1528.                             if (ua.ie) {
  1529.                                 storedFbContent.style.display = "block"
  1530.                             }
  1531.                         }
  1532.                         if (storedCallbackFn) {
  1533.                             storedCallbackFn(storedCallbackObj)
  1534.                         }
  1535.                     }
  1536.                     isExpressInstallActive = false
  1537.                 }
  1538.             },
  1539.             version: "2.3"
  1540.         }
  1541.     });
  1542.     define("flashaudioproxy", ["require", "exports", "module", "underscore", "errors", "vendor/events", "logger", "states", "vendor/swfobject"], function(require, exports, module) {
  1543.         var FlashAudioProxy, _ = require("underscore"),
  1544.             Errors = require("errors"),
  1545.             Events = require("vendor/events"),
  1546.             Logger = require("logger"),
  1547.             States = require("states"),
  1548.             swfobject = require("vendor/swfobject");
  1549.         module.exports = FlashAudioProxy = function(descriptor, settings) {
  1550.             this._descriptor = descriptor;
  1551.             this._id = descriptor.id;
  1552.             this._autoPlay = descriptor.autoPlay || false;
  1553.             FlashAudioProxy.players[descriptor.id] = this;
  1554.             this._errorMessage = null;
  1555.             this._errorID = null;
  1556.             this._state = States.INITIALIZE;
  1557.             this._settings = settings;
  1558.             this._volume = 1;
  1559.             this._muted = false;
  1560.             this._logger = new Logger(this.getType(), this._id, settings);
  1561.             if (!FlashAudioProxy.creatingFlashAudio) {
  1562.                 if (FlashAudioProxy.flashAudio) {
  1563.                     this._createFlashAudio()
  1564.                 } else {
  1565.                     FlashAudioProxy.createFlashObject(settings)
  1566.                 }
  1567.             }
  1568.         };
  1569.         FlashAudioProxy.createFlashObject = function(settings) {
  1570.             FlashAudioProxy.creatingFlashAudio = true;
  1571.             FlashAudioProxy.containerElement = document.createElement("div");
  1572.             FlashAudioProxy.containerElement.setAttribute("id", settings.flashObjectID + "-container");
  1573.             FlashAudioProxy.flashElementTarget = document.createElement("div");
  1574.             FlashAudioProxy.flashElementTarget.setAttribute("id", settings.flashObjectID + "-target");
  1575.             FlashAudioProxy.containerElement.appendChild(FlashAudioProxy.flashElementTarget);
  1576.             document.body.appendChild(FlashAudioProxy.containerElement);
  1577.             var onFlashObjectCreated = function(respond) {
  1578.                 if (!respond.success) {
  1579.                     for (var i in FlashAudioProxy.players) {
  1580.                         if (FlashAudioProxy.players.hasOwnProperty(i)) {
  1581.                             FlashAudioProxy.players[i]._errorID = Errors.FLASH_PROXY_CANT_LOAD_FLASH;
  1582.                             FlashAudioProxy.players[i]._errorMessage = "Cannot create flash object";
  1583.                             FlashAudioProxy.players[i]._setState(States.ERROR)
  1584.                         }
  1585.                     }
  1586.                     return
  1587.                 }
  1588.                 FlashAudioProxy.flashAudio = document.getElementById(settings.flashObjectID);
  1589.                 setTimeout(function() {
  1590.                     if (FlashAudioProxy.flashAudio && !("PercentLoaded" in FlashAudioProxy.flashAudio)) {
  1591.                         for (var i in FlashAudioProxy.players) {
  1592.                             if (FlashAudioProxy.players.hasOwnProperty(i)) {
  1593.                                 FlashAudioProxy.players[i]._errorID = Errors.FLASH_PROXY_FLASH_BLOCKED;
  1594.                                 FlashAudioProxy.players[i]._errorMessage = "Flash object blocked";
  1595.                                 FlashAudioProxy.players[i]._setState(States.ERROR);
  1596.                                 FlashAudioProxy.players[i]._logger.type = FlashAudioProxy.players[i].getType();
  1597.                                 FlashAudioProxy.players[i]._logger.log(FlashAudioProxy.players[i]._errorMessage)
  1598.                             }
  1599.                         }
  1600.                     }
  1601.                 }, settings.flashLoadTimeout);
  1602.                 FlashAudioProxy.flashAudio.onPositionChange = function(id, currentPosition, loadedPosition, duration) {
  1603.                     FlashAudioProxy.players[id]._onPositionChange(currentPosition, loadedPosition, duration)
  1604.                 };
  1605.                 FlashAudioProxy.flashAudio.onDebug = function(id, type, message) {
  1606.                     FlashAudioProxy.players[id]._logger.type = type;
  1607.                     FlashAudioProxy.players[id]._logger.log(message)
  1608.                 };
  1609.                 FlashAudioProxy.flashAudio.onStateChange = function(id, state) {
  1610.                     FlashAudioProxy.players[id]._setState(state);
  1611.                     if (state === States.DEAD) {
  1612.                         delete FlashAudioProxy.players[id]
  1613.                     }
  1614.                 };
  1615.                 FlashAudioProxy.flashAudio.onInit = function(id) {
  1616.                     FlashAudioProxy.creatingFlashAudio = false;
  1617.                     _.invoke(_.values(FlashAudioProxy.players), "_createFlashAudio")
  1618.                 }
  1619.             };
  1620.             if (!document.getElementById(settings.flashObjectID)) {
  1621.                 swfobject.embedSWF(settings.flashAudioPath, settings.flashObjectID + "-target", "1", "1", "9.0.24", "", {
  1622.                     json: encodeURIComponent(JSON.stringify(settings))
  1623.                 }, {
  1624.                     allowscriptaccess: "always"
  1625.                 }, {
  1626.                     id: settings.flashObjectID
  1627.                 }, onFlashObjectCreated)
  1628.             }
  1629.         };
  1630.         FlashAudioProxy._ready = function() {
  1631.             return FlashAudioProxy.flashAudio && !FlashAudioProxy.creatingFlashAudio
  1632.         };
  1633.         _.extend(FlashAudioProxy.prototype, Events);
  1634.         FlashAudioProxy.players = {};
  1635.         FlashAudioProxy.prototype._createFlashAudio = function() {
  1636.             FlashAudioProxy.flashAudio.createAudio(this._descriptor);
  1637.             this._state = FlashAudioProxy.flashAudio.getState(this._id);
  1638.             this.setVolume(this._volume);
  1639.             this.setMute(this._muted);
  1640.             if (this._autoPlay) {
  1641.                 this.play()
  1642.             }
  1643.         };
  1644.         FlashAudioProxy.prototype._setState = function(state) {
  1645.             if (this._state === state) {
  1646.                 return
  1647.             }
  1648.             this._state = state;
  1649.             this.trigger("stateChange", state, this)
  1650.         };
  1651.         FlashAudioProxy.prototype._onPositionChange = function(currentPosition, loadedPosition, duration) {
  1652.             this.trigger("positionChange", currentPosition, loadedPosition, duration, this)
  1653.         };
  1654.         FlashAudioProxy.prototype.getId = function() {
  1655.             return this._id
  1656.         };
  1657.         FlashAudioProxy.prototype.getType = function() {
  1658.             if (!FlashAudioProxy._ready()) {
  1659.                 return "Flash ..."
  1660.             }
  1661.             return FlashAudioProxy.flashAudio.getType(this._id)
  1662.         };
  1663.         FlashAudioProxy.prototype.getContainerElement = function() {
  1664.             return FlashAudioProxy.containerElement
  1665.         };
  1666.         FlashAudioProxy.prototype.play = function(position) {
  1667.             if (!FlashAudioProxy._ready()) {
  1668.                 return
  1669.             }
  1670.             if (this.getState() === States.PAUSED || this.getState() === States.ENDED) {
  1671.                 this.resume();
  1672.                 return
  1673.             }
  1674.             position = position === undefined ? 0 : position;
  1675.             FlashAudioProxy.flashAudio.playAudio(this._id, position)
  1676.         };
  1677.         FlashAudioProxy.prototype.pause = function() {
  1678.             if (!FlashAudioProxy._ready()) {
  1679.                 return
  1680.             }
  1681.             FlashAudioProxy.flashAudio.pauseAudio(this._id)
  1682.         };
  1683.         FlashAudioProxy.prototype.seek = function(position) {
  1684.             if (!FlashAudioProxy._ready()) {
  1685.                 return
  1686.             }
  1687.             FlashAudioProxy.flashAudio.seekAudio(this._id, position)
  1688.         };
  1689.         FlashAudioProxy.prototype.resume = function() {
  1690.             if (!FlashAudioProxy._ready()) {
  1691.                 return
  1692.             }
  1693.             FlashAudioProxy.flashAudio.resumeAudio(this._id)
  1694.         };
  1695.         FlashAudioProxy.prototype.setVolume = function(value) {
  1696.             this._volume = value;
  1697.             if (!FlashAudioProxy._ready()) {
  1698.                 return
  1699.             }
  1700.             FlashAudioProxy.flashAudio.setVolume(this._id, value)
  1701.         };
  1702.         FlashAudioProxy.prototype.getVolume = function() {
  1703.             if (!FlashAudioProxy._ready()) {
  1704.                 return this._volume
  1705.             }
  1706.             return FlashAudioProxy.flashAudio.getVolume(this._id)
  1707.         };
  1708.         FlashAudioProxy.prototype.setMute = function(value) {
  1709.             this._muted = value;
  1710.             if (!FlashAudioProxy._ready()) {
  1711.                 return
  1712.             }
  1713.             FlashAudioProxy.flashAudio.setMute(this._id, value)
  1714.         };
  1715.         FlashAudioProxy.prototype.getMute = function() {
  1716.             if (!FlashAudioProxy._ready()) {
  1717.                 return this._muted
  1718.             }
  1719.             return FlashAudioProxy.flashAudio.getMute(this._id)
  1720.         };
  1721.         FlashAudioProxy.prototype.getState = function() {
  1722.             return this._state
  1723.         };
  1724.         FlashAudioProxy.prototype.getCurrentPosition = function() {
  1725.             if (!FlashAudioProxy._ready()) {
  1726.                 return 0
  1727.             }
  1728.             return FlashAudioProxy.flashAudio.getCurrentPosition(this._id)
  1729.         };
  1730.         FlashAudioProxy.prototype.getLoadedPosition = function() {
  1731.             if (!FlashAudioProxy._ready()) {
  1732.                 return 0
  1733.             }
  1734.             return FlashAudioProxy.flashAudio.getLoadedPosition(this._id)
  1735.         };
  1736.         FlashAudioProxy.prototype.getDuration = function() {
  1737.             if (!FlashAudioProxy._ready()) {
  1738.                 return 0
  1739.             }
  1740.             return FlashAudioProxy.flashAudio.getDuration(this._id)
  1741.         };
  1742.         FlashAudioProxy.prototype.kill = function() {
  1743.             if (!FlashAudioProxy._ready()) {
  1744.                 return 0
  1745.             }
  1746.             FlashAudioProxy.flashAudio.killAudio(this._id)
  1747.         };
  1748.         FlashAudioProxy.prototype.getErrorMessage = function() {
  1749.             if (this._errorMessage) {
  1750.                 return this._errorMessage
  1751.             }
  1752.             return FlashAudioProxy.flashAudio.getErrorMessage(this._id)
  1753.         };
  1754.         FlashAudioProxy.prototype.getErrorID = function() {
  1755.             if (this._errorID) {
  1756.                 return this._errorID
  1757.             }
  1758.             return FlashAudioProxy.flashAudio.getErrorID(this._id)
  1759.         };
  1760.         FlashAudioProxy.prototype.getLevelNum = function() {
  1761.             if (!FlashAudioProxy._ready()) {
  1762.                 return 0
  1763.             }
  1764.             return FlashAudioProxy.flashAudio.getLevelNum(this._id)
  1765.         };
  1766.         FlashAudioProxy.prototype.getLevel = function() {
  1767.             if (!FlashAudioProxy._ready()) {
  1768.                 return 0
  1769.             }
  1770.             return FlashAudioProxy.flashAudio.getLevel(this._id)
  1771.         };
  1772.         FlashAudioProxy.prototype.setLevel = function(level) {
  1773.             if (!FlashAudioProxy._ready()) {
  1774.                 return 0
  1775.             }
  1776.             return FlashAudioProxy.flashAudio.setLevel(this._id, level)
  1777.         };
  1778.         FlashAudioProxy.prototype.preload = function() {
  1779.             return false
  1780.         }
  1781.     });
  1782.     define("html5audioplayer", ["require", "exports", "module", "underscore", "vendor/events", "states", "errors", "logger"], function(require, exports, module) {
  1783.         var HTML5AudioPlayer, _ = require("underscore"),
  1784.             Events = require("vendor/events"),
  1785.             States = require("states"),
  1786.             Errors = require("errors"),
  1787.             Logger = require("logger");
  1788.         module.exports = HTML5AudioPlayer = function(descriptor, settings) {
  1789.             this._id = descriptor.id;
  1790.             this._descriptor = descriptor;
  1791.             this._isLoaded = false;
  1792.             this._settings = settings;
  1793.             this._bufferingTimeout = null;
  1794.             this._currentPosition = 0;
  1795.             this._loadedPosition = 0;
  1796.             this._prevCurrentPosition = 0;
  1797.             this._prevCheckTime = 0;
  1798.             this._prevComparison = 0;
  1799.             this._positionUpdateTimer = 0;
  1800.             this._playRequested = false;
  1801.             if (descriptor.duration) {
  1802.                 this._duration = descriptor.duration
  1803.             }
  1804.             _.bindAll(this, "_onPositionChange", "_onStateChange", "_onLoaded", "_onBuffering");
  1805.             this._init();
  1806.             this.toggleEventListeners(true);
  1807.             if (this._descriptor.preload) {
  1808.                 this.preload()
  1809.             }
  1810.             if (descriptor.autoPlay) {
  1811.                 this.play()
  1812.             } else {
  1813.                 this._setState(States.IDLE)
  1814.             }
  1815.         };
  1816.         _.extend(HTML5AudioPlayer.prototype, Events);
  1817.         HTML5AudioPlayer.prototype._init = function() {
  1818.             this._html5Audio = new Audio;
  1819.             this._html5Audio.id = this._settings.audioObjectID + "_" + this._descriptor.id;
  1820.             this._html5Audio.preload = "none";
  1821.             this._logger = new Logger(this.getType(), this._id, this._settings)
  1822.         };
  1823.         HTML5AudioPlayer.prototype.getId = function() {
  1824.             return this._id
  1825.         };
  1826.         HTML5AudioPlayer.prototype.getType = function() {
  1827.             return "HTML5 audio"
  1828.         };
  1829.         HTML5AudioPlayer.prototype.play = function(position) {
  1830.             if (this.isInOneOfStates(States.ERROR, States.DEAD)) {
  1831.                 return
  1832.             }
  1833.             if (this.isInOneOfStates(States.PAUSED, States.ENDED)) {
  1834.                 this.resume();
  1835.                 return
  1836.             }
  1837.             this._logger.log("play");
  1838.             position = position || 0;
  1839.             this._setState(States.LOADING);
  1840.             this._playRequested = true;
  1841.             var playAfterLoaded = function() {
  1842.                 if (!this._playRequested) {
  1843.                     return
  1844.                 }
  1845.                 this._logger.log("play after loaded");
  1846.                 if (position > 0) {
  1847.                     this._html5Audio.currentTime = position / 1e3
  1848.                 }
  1849.                 this._html5Audio.play();
  1850.                 clearInterval(this._positionUpdateTimer);
  1851.                 this._positionUpdateTimer = setInterval(this._onPositionChange, this._settings.updateInterval)
  1852.             };
  1853.             if (this._isLoaded) {
  1854.                 playAfterLoaded.apply(this)
  1855.             } else {
  1856.                 this.preload();
  1857.                 this.once("loaded", playAfterLoaded)
  1858.             }
  1859.         };
  1860.         HTML5AudioPlayer.prototype.pause = function() {
  1861.             this._playRequested = false;
  1862.             if (this.isInOneOfStates(States.ERROR, States.DEAD)) {
  1863.                 return
  1864.             }
  1865.             this._logger.log("pause");
  1866.             this._html5Audio.pause();
  1867.             clearTimeout(this._bufferingTimeout);
  1868.             clearInterval(this._positionUpdateTimer)
  1869.         };
  1870.         HTML5AudioPlayer.prototype.seek = function(position) {
  1871.             var canSeek = false,
  1872.                 positionSec, seekable = this._html5Audio.seekable,
  1873.                 i;
  1874.             if (this.isInOneOfStates(States.ERROR, States.DEAD)) {
  1875.                 return
  1876.             }
  1877.             if (!this._isLoaded) {
  1878.                 this.once("loaded", function() {
  1879.                     this.seek(position)
  1880.                 });
  1881.                 return
  1882.             }
  1883.             positionSec = position / 1e3;
  1884.             for (i = 0; i < seekable.length; i++) {
  1885.                 if (positionSec <= seekable.end(i) && positionSec >= seekable.start(i)) {
  1886.                     canSeek = true;
  1887.                     break
  1888.                 }
  1889.             }
  1890.             if (!canSeek) {
  1891.                 return
  1892.             }
  1893.             this._logger.log("seek");
  1894.             this._setState(States.SEEKING);
  1895.             this._html5Audio.currentTime = position / 1e3;
  1896.             clearTimeout(this._bufferingTimeout)
  1897.         };
  1898.         HTML5AudioPlayer.prototype.resume = function() {
  1899.             if (this.isInOneOfStates(States.ERROR, States.DEAD)) {
  1900.                 return
  1901.             }
  1902.             this._logger.log("resume");
  1903.             if (this.getState() === States.PAUSED) {
  1904.                 this._setState(States.LOADING);
  1905.                 this._html5Audio.play(this._html5Audio.currentTime)
  1906.             } else if (this.getState() === States.ENDED) {
  1907.                 this._setState(States.LOADING);
  1908.                 this._html5Audio.play(0)
  1909.             }
  1910.             clearInterval(this._positionUpdateTimer);
  1911.             this._positionUpdateTimer = setInterval(this._onPositionChange, this._settings.updateInterval)
  1912.         };
  1913.         HTML5AudioPlayer.prototype.setVolume = function(value) {
  1914.             if (!this._html5Audio) {
  1915.                 return
  1916.             }
  1917.             this._html5Audio.volume = value
  1918.         };
  1919.         HTML5AudioPlayer.prototype.getVolume = function() {
  1920.             if (!this._html5Audio) {
  1921.                 return 1
  1922.             }
  1923.             return this._html5Audio.volume
  1924.         };
  1925.         HTML5AudioPlayer.prototype.setMute = function(value) {
  1926.             if (!this._html5Audio) {
  1927.                 return
  1928.             }
  1929.             this._html5Audio.muted = value
  1930.         };
  1931.         HTML5AudioPlayer.prototype.getMute = function() {
  1932.             if (!this._html5Audio) {
  1933.                 return false
  1934.             }
  1935.             return this._html5Audio.muted
  1936.         };
  1937.         HTML5AudioPlayer.prototype.getState = function() {
  1938.             return this._state
  1939.         };
  1940.         HTML5AudioPlayer.prototype.getCurrentPosition = function() {
  1941.             return this._currentPosition
  1942.         };
  1943.         HTML5AudioPlayer.prototype.getLoadedPosition = function() {
  1944.             return this._loadedPosition
  1945.         };
  1946.         HTML5AudioPlayer.prototype.getDuration = function() {
  1947.             return this._duration
  1948.         };
  1949.         HTML5AudioPlayer.prototype.kill = function() {
  1950.             if (this._state === States.DEAD) {
  1951.                 return
  1952.             }
  1953.             clearInterval(this._positionUpdateTimer);
  1954.             clearTimeout(this._bufferingTimeout);
  1955.             this._playRequested = false;
  1956.             this.toggleEventListeners(false);
  1957.             this._html5Audio.pause();
  1958.             this._html5Audio.src = null;
  1959.             delete this._html5Audio;
  1960.             this._setState(States.DEAD)
  1961.         };
  1962.         HTML5AudioPlayer.prototype.getErrorMessage = function() {
  1963.             return this._errorMessage
  1964.         };
  1965.         HTML5AudioPlayer.prototype.getErrorID = function() {
  1966.             return this._errorID
  1967.         };
  1968.         HTML5AudioPlayer.prototype.preload = function() {
  1969.             var audio = this._html5Audio;
  1970.             if (audio.preload !== "auto") {
  1971.                 this._logger.log("preload");
  1972.                 audio.preload = "auto";
  1973.                 audio.type = this._descriptor.mimeType;
  1974.                 audio.src = this._descriptor.src;
  1975.                 audio.load()
  1976.             }
  1977.         };
  1978.         HTML5AudioPlayer.prototype._setState = function(state) {
  1979.             if (this._state === state) {
  1980.                 return
  1981.             }
  1982.             this._logger.log('state changed "' + state + '"');
  1983.             this._state = state;
  1984.             this.trigger("stateChange", state, this)
  1985.         };
  1986.         HTML5AudioPlayer.prototype.toggleEventListeners = function(on) {
  1987.             if (!this._html5Audio) {
  1988.                 return
  1989.             }
  1990.             var dosmthEventListener = on ? "addEventListener" : "removeEventListener";
  1991.             ["ended", "play", "playing", "pause", "seeking", "waiting", "seeked", "error"].forEach(function(eventType) {
  1992.                 this._html5Audio[dosmthEventListener](eventType, this._onStateChange)
  1993.             }, this);
  1994.             this._html5Audio[dosmthEventListener]("loadedmetadata", this._onLoaded)
  1995.         };
  1996.         HTML5AudioPlayer.prototype.isInOneOfStates = function() {
  1997.             for (var i in arguments) {
  1998.                 if (arguments[i] === this._state) {
  1999.                     return true
  2000.                 }
  2001.             }
  2002.             return false
  2003.         };
  2004.         HTML5AudioPlayer.prototype.updatePositions = function() {
  2005.             this._currentPosition = this._html5Audio.currentTime * 1e3;
  2006.             if (this._html5Audio.seekable.length > 0) {
  2007.                 this._loadedPosition = this._html5Audio.seekable.end(0) * 1e3
  2008.             }
  2009.             if (this._duration === 0) {
  2010.                 this._duration = this._html5Audio.duration * 1e3
  2011.             }
  2012.         };
  2013.         HTML5AudioPlayer.prototype._onBuffering = function() {
  2014.             this._setState(States.LOADING)
  2015.         };
  2016.         HTML5AudioPlayer.prototype._onLoaded = function() {
  2017.             this._isLoaded = true;
  2018.             this._logger.log("loaded");
  2019.             this.trigger("loaded", this)
  2020.         };
  2021.         HTML5AudioPlayer.prototype._onPositionChange = function(event) {
  2022.             this.updatePositions();
  2023.             this.trigger("positionChange", this._currentPosition, this._loadedPosition, this._duration, this);
  2024.             if (!this.isInOneOfStates(States.PLAYING, States.LOADING)) {
  2025.                 return
  2026.             }
  2027.             var now = (new Date).valueOf(),
  2028.                 positionDelta = this._currentPosition - this._prevCurrentPosition,
  2029.                 realTimeDelta = now - this._prevCheckTime,
  2030.                 comparison;
  2031.             if (realTimeDelta === 0) {
  2032.                 return
  2033.             }
  2034.             comparison = positionDelta / realTimeDelta;
  2035.             if (comparison > .7) {
  2036.                 clearTimeout(this._bufferingTimeout);
  2037.                 this._setState(States.PLAYING);
  2038.                 this._bufferingTimeout = null
  2039.             } else if (this._state === States.PLAYING && this._bufferingTimeout == null) {
  2040.                 this._bufferingTimeout = setTimeout(this._onBuffering, this._settings.bufferingDelay)
  2041.             }
  2042.             this._prevCurrentPosition = this._currentPosition;
  2043.             this._prevCheckTime = now
  2044.         };
  2045.         HTML5AudioPlayer.prototype._onStateChange = function(event) {
  2046.             this._logger.log('html5 audio event "' + event.type + '"');
  2047.             clearTimeout(this._bufferingTimeout);
  2048.             switch (event.type) {
  2049.                 case "playing":
  2050.                     this.updatePositions();
  2051.                     this._setState(States.PLAYING);
  2052.                     break;
  2053.                 case "pause":
  2054.                     this._setState(States.PAUSED);
  2055.                     break;
  2056.                 case "ended":
  2057.                     this._currentPosition = this._loadedPosition = this._duration;
  2058.                     this.trigger("positionChange", this._currentPosition, this._loadedPosition, this._duration, this);
  2059.                     this._setState(States.ENDED);
  2060.                     clearInterval(this._positionUpdateTimer);
  2061.                     break;
  2062.                 case "waiting":
  2063.                     this._setState(States.LOADING);
  2064.                     break;
  2065.                 case "seeking":
  2066.                     this._setState(States.SEEKING);
  2067.                     break;
  2068.                 case "seeked":
  2069.                     this.updatePositions();
  2070.                     if (this._html5Audio.paused) {
  2071.                         this._setState(States.PAUSED)
  2072.                     } else {
  2073.                         this._setState(States.PLAYING)
  2074.                     }
  2075.                     break;
  2076.                 case "error":
  2077.                     this._errorID = {
  2078.                         1: Errors.HTML5_AUDIO_ABORTED,
  2079.                         2: Errors.HTML5_AUDIO_NETWORK,
  2080.                         3: Errors.HTML5_AUDIO_DECODE,
  2081.                         4: Errors.HTML5_AUDIO_SRC_NOT_SUPPORTED
  2082.                     }[this._html5Audio.error.code];
  2083.                     this._errorMessage = this._getErrorMessage(this._errorID);
  2084.                     this._logger.log("html5 audio error: " + this._errorID + " " + this._errorMessage);
  2085.                     this._setState(States.ERROR);
  2086.                     this.toggleEventListeners(false);
  2087.                     break
  2088.             }
  2089.         };
  2090.         HTML5AudioPlayer.prototype._getErrorMessage = function(errorID) {
  2091.             var messages = {};
  2092.             messages[Errors.HTML5_AUDIO_ABORTED] = "The fetching process was aborted by the user.";
  2093.             messages[Errors.HTML5_AUDIO_NETWORK] = "A network connection lost.";
  2094.             messages[Errors.HTML5_AUDIO_DECODE] = "An error occurred while decoding the media resource.";
  2095.             messages[Errors.HTML5_AUDIO_SRC_NOT_SUPPORTED] = "The media resource is not suitable.";
  2096.             return messages[errorID]
  2097.         }
  2098.     });
  2099.     define("hlsaudioplayer", ["require", "exports", "module", "underscore", "errors", "vendor/events", "html5audioplayer", "logger", "states"], function(require, exports, module) {
  2100.         var HLSAudioPlayer, _ = require("underscore"),
  2101.             Errors = require("errors"),
  2102.             Events = require("vendor/events"),
  2103.             HTML5AudioPlayer = require("html5audioplayer"),
  2104.             Logger = require("logger"),
  2105.             States = require("states");
  2106.         module.exports = HLSAudioPlayer = function(descriptor, settings) {
  2107.             HTML5AudioPlayer.apply(this, arguments);
  2108.             this._seekPosition = 0
  2109.         };
  2110.         _.extend(HLSAudioPlayer.prototype, HTML5AudioPlayer.prototype);
  2111.         HLSAudioPlayer.prototype.getType = function() {
  2112.             return "HTML5 HLS audio"
  2113.         };
  2114.         HLSAudioPlayer.prototype.seek = function(position) {
  2115.             HTML5AudioPlayer.prototype.seek.apply(this, arguments);
  2116.             if (this.isInOneOfStates(States.LOADING)) {
  2117.                 this._seekPosition = position
  2118.             }
  2119.         };
  2120.         HLSAudioPlayer.prototype.getCurrentPosition = function() {
  2121.             if (this.isInOneOfStates(States.LOADING) && this._seekPosition > 0) {
  2122.                 return this._seekPosition
  2123.             }
  2124.             return HTML5AudioPlayer.prototype.getCurrentPosition.apply(this, arguments)
  2125.         };
  2126.         HLSAudioPlayer.prototype._onStateChange = function(event) {
  2127.             this._logger.log('hls html5 audio event "' + event.type + '"');
  2128.             clearTimeout(this._bufferingTimeout);
  2129.             switch (event.type) {
  2130.                 case "playing":
  2131.                     this.updatePositions();
  2132.                     this._seekPosition = 0;
  2133.                     this._setState(States.PLAYING);
  2134.                     break;
  2135.                 case "pause":
  2136.                     this._setState(States.PAUSED);
  2137.                     break;
  2138.                 case "ended":
  2139.                     this._currentPosition = this._loadedPosition = this._duration;
  2140.                     this.trigger("positionChange", this._currentPosition, this._loadedPosition, this._duration, this);
  2141.                     this._setState(States.ENDED);
  2142.                     clearInterval(this._positionUpdateTimer);
  2143.                     break;
  2144.                 case "waiting":
  2145.                     this._setState(States.LOADING);
  2146.                     break;
  2147.                 case "seeking":
  2148.                     this._setState(States.SEEKING);
  2149.                     break;
  2150.                 case "seeked":
  2151.                     this.updatePositions();
  2152.                     if (this._html5Audio.paused) {
  2153.                         this._setState(States.PAUSED)
  2154.                     }
  2155.                     break;
  2156.                 case "error":
  2157.                     this._errorID = {
  2158.                         1: Errors.HTML5_AUDIO_ABORTED,
  2159.                         2: Errors.HTML5_AUDIO_NETWORK,
  2160.                         3: Errors.HTML5_AUDIO_DECODE,
  2161.                         4: Errors.HTML5_AUDIO_SRC_NOT_SUPPORTED
  2162.                     }[this._html5Audio.error.code];
  2163.                     this._errorMessage = this._getErrorMessage(this._errorID);
  2164.                     this._logger.log("html5 audio error: " + this._errorID + " " + this._errorMessage);
  2165.                     this._setState(States.ERROR);
  2166.                     this.toggleEventListeners(false);
  2167.                     break
  2168.             }
  2169.         }
  2170.     });
  2171.     define("singleaudioplayer", ["require", "exports", "module", "underscore", "browserutils", "errors", "vendor/events", "html5audioplayer", "logger", "states"], function(require, exports, module) {
  2172.         var SingleAudioPlayer, _ = require("underscore"),
  2173.             BrowserUtils = require("browserutils"),
  2174.             Errors = require("errors"),
  2175.             Events = require("vendor/events"),
  2176.             HTML5AudioPlayer = require("html5audioplayer"),
  2177.             Logger = require("logger"),
  2178.             States = require("states");
  2179.         module.exports = SingleAudioPlayer = function(descriptor, settings) {
  2180.             HTML5AudioPlayer.apply(this, arguments)
  2181.         };
  2182.         _.extend(SingleAudioPlayer.prototype, HTML5AudioPlayer.prototype);
  2183.         SingleAudioPlayer.prototype._init = function() {
  2184.             if (!SingleAudioPlayer._html5Audio) {
  2185.                 var audioObj = new Audio;
  2186.                 audioObj.id = this._settings.audioObjectID + "_Single";
  2187.                 audioObj.preload = "none";
  2188.                 SingleAudioPlayer._html5Audio = audioObj;
  2189.                 this._preloadAudio = audioObj
  2190.             }
  2191.             this._html5Audio = SingleAudioPlayer._html5Audio;
  2192.             this._playRequested = false;
  2193.             this._logger = new Logger(this.getType(), this._id, this._settings)
  2194.         };
  2195.         SingleAudioPlayer.prototype.getType = function() {
  2196.             return "HTML5 single audio"
  2197.         };
  2198.         SingleAudioPlayer.prototype.play = function(position) {
  2199.             this._playRequested = true;
  2200.             if (this._html5Audio._playerId === this._descriptor.id) {
  2201.                 HTML5AudioPlayer.prototype.resume.apply(this, arguments);
  2202.                 return
  2203.             }
  2204.             if (this.isInOneOfStates(States.PAUSED)) {
  2205.                 position = this._currentPosition
  2206.             }
  2207.             this._html5Audio._playerId = this._descriptor.id;
  2208.             this.toggleEventListeners(true);
  2209.             this._setState(States.LOADING);
  2210.             var playAfterLoaded = function() {
  2211.                 if (!this._playRequested) {
  2212.                     return
  2213.                 }
  2214.                 this._logger.log("play after loaded");
  2215.                 if (position > 0) {
  2216.                     this._html5Audio.currentTime = position / 1e3
  2217.                 }
  2218.                 this._html5Audio.play();
  2219.                 clearInterval(this._positionUpdateTimer);
  2220.                 this._positionUpdateTimer = setInterval(this._onPositionChange, this._settings.updateInterval)
  2221.             };
  2222.             if (this._html5Audio.readyState > 0 && this._descriptor.src === this._html5Audio.src) {
  2223.                 playAfterLoaded.apply(this)
  2224.             } else {
  2225.                 this.once("loaded", playAfterLoaded);
  2226.                 this._html5Audio.type = this._descriptor.mimeType;
  2227.                 this._html5Audio.src = this._descriptor.src;
  2228.                 this._html5Audio.preload = "auto";
  2229.                 this._html5Audio.load()
  2230.             }
  2231.         };
  2232.         SingleAudioPlayer.prototype.pause = function() {
  2233.             this._playRequested = false;
  2234.             if (this.isInOneOfStates(States.ERROR, States.DEAD)) {
  2235.                 return
  2236.             }
  2237.             this._logger.log("pause");
  2238.             if (this._html5Audio._playerId === this._descriptor.id) {
  2239.                 this._html5Audio.pause()
  2240.             } else {
  2241.                 this.toggleEventListeners(false);
  2242.                 this._setState(States.PAUSED)
  2243.             }
  2244.         };
  2245.         SingleAudioPlayer.prototype.seek = function(position) {
  2246.             if (this._html5Audio._playerId !== this._descriptor.id) {
  2247.                 this._currentPosition = position;
  2248.                 this.trigger("positionChange", this._currentPosition, this._loadedPosition, this._duration, this);
  2249.                 return
  2250.             }
  2251.             HTML5AudioPlayer.prototype.seek.apply(this, arguments)
  2252.         };
  2253.         SingleAudioPlayer.prototype.kill = function() {
  2254.             if (this._state === States.DEAD) {
  2255.                 return
  2256.             }
  2257.             this._playRequested = false;
  2258.             clearInterval(this._positionUpdateTimer);
  2259.             clearTimeout(this._bufferingTimeout);
  2260.             this.toggleEventListeners(false);
  2261.             this._setState(States.DEAD)
  2262.         };
  2263.         SingleAudioPlayer.prototype.resume = function() {
  2264.             if (this.isInOneOfStates(States.ERROR, States.DEAD)) {
  2265.                 return
  2266.             }
  2267.             if (this._html5Audio._playerId !== this._descriptor.id) {
  2268.                 this.play(this._currentPosition);
  2269.                 return
  2270.             }
  2271.             HTML5AudioPlayer.prototype.resume.apply(this, arguments)
  2272.         };
  2273.         SingleAudioPlayer.prototype._onLoaded = function() {
  2274.             if (this.preventDefaultHandler()) {
  2275.                 return
  2276.             }
  2277.             HTML5AudioPlayer.prototype._onLoaded.apply(this, arguments)
  2278.         };
  2279.         SingleAudioPlayer.prototype._onStateChange = function(event) {
  2280.             if (this.preventDefaultHandler()) {
  2281.                 return
  2282.             }
  2283.             HTML5AudioPlayer.prototype._onStateChange.apply(this, arguments)
  2284.         };
  2285.         SingleAudioPlayer.prototype._onPositionChange = function(event) {
  2286.             if (this.preventDefaultHandler()) {
  2287.                 return
  2288.             }
  2289.             HTML5AudioPlayer.prototype._onPositionChange.apply(this, arguments)
  2290.         };
  2291.         SingleAudioPlayer.prototype.preventDefaultHandler = function() {
  2292.             if (this._html5Audio._playerId !== this._descriptor.id) {
  2293.                 if (this.isInOneOfStates(States.PLAYING, States.LOADING)) {
  2294.                     this.pause()
  2295.                 }
  2296.                 return true
  2297.             }
  2298.             return false
  2299.         };
  2300.         SingleAudioPlayer.prototype.preload = function() {
  2301.             if (!this._preloadAudio && BrowserUtils.supportSourceSwappingWithPreload()) {
  2302.                 this._preloadAudio = new Audio;
  2303.                 this._preloadAudio.preload = "none"
  2304.             }
  2305.             var audio = this._preloadAudio;
  2306.             if (audio && audio.preload !== "auto") {
  2307.                 this._logger.log("preload");
  2308.                 audio.preload = "auto";
  2309.                 audio.type = this._descriptor.mimeType;
  2310.                 audio.src = this._descriptor.src;
  2311.                 audio.load()
  2312.             }
  2313.         }
  2314.     });
  2315.     define("hlssingleaudioplayer", ["require", "exports", "module", "underscore", "errors", "vendor/events", "hlsaudioplayer", "logger", "singleaudioplayer", "states"], function(require, exports, module) {
  2316.         var HLSSingleAudioPlayer, _ = require("underscore"),
  2317.             Errors = require("errors"),
  2318.             Events = require("vendor/events"),
  2319.             HLSAudioPlayer = require("hlsaudioplayer"),
  2320.             Logger = require("logger"),
  2321.             SingleAudioPlayer = require("singleaudioplayer"),
  2322.             States = require("states");
  2323.         module.exports = HLSSingleAudioPlayer = function(descriptor, settings) {
  2324.             SingleAudioPlayer.apply(this, arguments)
  2325.         };
  2326.         _.extend(HLSSingleAudioPlayer.prototype, SingleAudioPlayer.prototype);
  2327.         HLSSingleAudioPlayer.prototype.getType = function() {
  2328.             return "HTML5 HLS single audio"
  2329.         }
  2330.     });
  2331.     define("mimetypes", {
  2332.         AAC: "audio/aac",
  2333.         M3U8: "application/x-mpegURL",
  2334.         MP4: "audio/mp4",
  2335.         MPEG: "audio/mpeg",
  2336.         OGG: "audio/ogg",
  2337.         WAV: "audio/wav",
  2338.         WEBM: "audio/webm",
  2339.         getTypeByExtension: function(extension) {
  2340.             var types = {
  2341.                 mp1: this.MPEG,
  2342.                 mp2: this.MPEG,
  2343.                 mp3: this.MPEG,
  2344.                 mpeg: this.MPEG,
  2345.                 mpg: this.MPEG,
  2346.                 aac: this.AAC,
  2347.                 mp4: this.MP4,
  2348.                 ogg: this.OGG,
  2349.                 oga: this.OGG,
  2350.                 opus: this.OGG,
  2351.                 webm: this.WEBM,
  2352.                 wav: this.WAV,
  2353.                 m3u8: this.M3U8
  2354.             };
  2355.             return types[extension] || null
  2356.         }
  2357.     });
  2358.     define("factory", ["require", "exports", "module", "underscore", "browserutils", "flashaudioproxy", "hlsaudioplayer", "hlssingleaudioplayer", "html5audioplayer", "mimetypes", "singleaudioplayer", "vendor/swfobject"], function(require, exports, module) {
  2359.         var DesktopFactory, _ = require("underscore"),
  2360.             BrowserUtils = require("browserutils"),
  2361.             FlashAudioProxy = require("flashaudioproxy"),
  2362.             HLSAudioPlayer = require("hlsaudioplayer"),
  2363.             HLSSingleAudioPlayer = require("hlssingleaudioplayer"),
  2364.             HTML5AudioPlayer = require("html5audioplayer"),
  2365.             MimeTypes = require("mimetypes"),
  2366.             SingleAudioPlayer = require("singleaudioplayer"),
  2367.             swfobject = require("vendor/swfobject");
  2368.         module.exports = DesktopFactory = function() {};
  2369.         DesktopFactory.createAudioPlayer = function(descriptor, settings) {
  2370.             var protocol, extension, player;
  2371.             protocol = descriptor.src.split(":")[0];
  2372.             if ((protocol === "rtmp" || protocol === "rtmpt" || descriptor.forceFlash) && !descriptor.forceHTML5) {
  2373.                 player = new FlashAudioProxy(descriptor, settings)
  2374.             } else {
  2375.                 descriptor.mimeType = DesktopFactory.getMimeType(descriptor);
  2376.                 if (descriptor.mimeType === MimeTypes.M3U8) {
  2377.                     if (BrowserUtils.isNativeHlsSupported()) {
  2378.                         if (BrowserUtils.isMobile() || descriptor.forceSingle) {
  2379.                             player = new HLSSingleAudioPlayer(descriptor, settings)
  2380.                         } else {
  2381.                             player = new HLSAudioPlayer(descriptor, settings)
  2382.                         }
  2383.                     } else {
  2384.                         player = new FlashAudioProxy(descriptor, settings)
  2385.                     }
  2386.                 } else if (BrowserUtils.supportHTML5Audio() && BrowserUtils.canPlayType(descriptor.mimeType) || descriptor.forceHTML5) {
  2387.                     if (BrowserUtils.isMobile() || descriptor.forceSingle) {
  2388.                         player = new SingleAudioPlayer(descriptor, settings)
  2389.                     } else {
  2390.                         player = new HTML5AudioPlayer(descriptor, settings)
  2391.                     }
  2392.                 } else {
  2393.                     if (descriptor.mimeType === MimeTypes.MPEG) {
  2394.                         player = new FlashAudioProxy(descriptor, settings)
  2395.                     } else {
  2396.                         return null
  2397.                     }
  2398.                 }
  2399.             }
  2400.             return player
  2401.         };
  2402.         DesktopFactory.getMimeType = function(descriptor) {
  2403.             if (descriptor.mimeType) {
  2404.                 return descriptor.mimeType
  2405.             }
  2406.             var extension = descriptor.src.split("?")[0];
  2407.             extension = extension.substring(extension.lastIndexOf(".") + 1, extension.length);
  2408.             return MimeTypes.getTypeByExtension(extension)
  2409.         }
  2410.     });
  2411.     define("audiomanager", ["require", "exports", "module", "underscore", "factory", "states", "errors", "browserutils"], function(require, exports, module) {
  2412.         var AudioManager, _ = require("underscore"),
  2413.             PlayerFactory = require("factory"),
  2414.             States = require("states"),
  2415.             Errors = require("errors"),
  2416.             BrowserUtils = require("browserutils");
  2417.         module.exports = AudioManager = function(settings) {
  2418.             settings = settings || {};
  2419.             this._players = {};
  2420.             this._volume = 1;
  2421.             this._mute = false;
  2422.             this._settings = _.defaults(settings, AudioManager.defaults)
  2423.         };
  2424.         AudioManager.States = States;
  2425.         AudioManager.Errors = Errors;
  2426.         AudioManager.BrowserUtils = BrowserUtils;
  2427.         AudioManager.defaults = {
  2428.             flashAudioPath: "flashAudio.swf",
  2429.             flashLoadTimeout: 2e3,
  2430.             flashObjectID: "flashAudioObject",
  2431.             audioObjectID: "html5AudioObject",
  2432.             updateInterval: 300,
  2433.             bufferTime: 8e3,
  2434.             bufferingDelay: 800,
  2435.             debug: false
  2436.         };
  2437.         AudioManager.prototype.getAudioPlayer = function(id) {
  2438.             return this._players[id]
  2439.         };
  2440.         AudioManager.prototype.hasAudioPlayer = function(id) {
  2441.             return this._players[id] !== undefined
  2442.         };
  2443.         AudioManager.prototype.removeAudioPlayer = function(id) {
  2444.             if (this.hasAudioPlayer(id)) {
  2445.                 delete this._players[id]
  2446.             }
  2447.         };
  2448.         AudioManager.prototype.setVolume = function(volume) {
  2449.             volume = Math.min(1, volume);
  2450.             this._volume = Math.max(0, volume);
  2451.             for (var id in this._players) {
  2452.                 if (this._players.hasOwnProperty(id)) {
  2453.                     this._players[id].setVolume(this._volume)
  2454.                 }
  2455.             }
  2456.         };
  2457.         AudioManager.prototype.getVolume = function() {
  2458.             return this._volume
  2459.         };
  2460.         AudioManager.prototype.setMute = function(value) {
  2461.             this._muted = value;
  2462.             for (var id in this._players) {
  2463.                 if (this._players.hasOwnProperty(id)) {
  2464.                     this._players[id].setMute(this._muted)
  2465.                 }
  2466.             }
  2467.         };
  2468.         AudioManager.prototype.getMute = function() {
  2469.             return this._muted
  2470.         };
  2471.         AudioManager.prototype.createAudioPlayer = function(descriptor) {
  2472.             var audioType, protocol, extension;
  2473.             if (!descriptor.id) {
  2474.                 descriptor.id = Math.floor(Math.random() * 1e10).toString() + (new Date).getTime().toString()
  2475.             }
  2476.             if (!descriptor.src) {
  2477.                 throw new Error("AudioManager: You need to pass a valid src")
  2478.             }
  2479.             if (!this._players[descriptor.id]) {
  2480.                 this._players[descriptor.id] = PlayerFactory.createAudioPlayer(descriptor, this._settings)
  2481.             }
  2482.             this._players[descriptor.id].setVolume(this._volume);
  2483.             this._players[descriptor.id].setMute(this._muted);
  2484.             this._players[descriptor.id].on("stateChange", this._onStateChange, this);
  2485.             return this._players[descriptor.id]
  2486.         };
  2487.         AudioManager.prototype._onStateChange = function(state, player) {
  2488.             if (player.getState() === States.DEAD) {
  2489.                 this.removeAudioPlayer(player.getId())
  2490.             }
  2491.         }
  2492.     });
  2493.     require(["audiomanager"]);
  2494.     return require("audiomanager")
  2495. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement