test-dom-manipulation-kp (v6)

Revision 6 of this benchmark created on


Description

NO

Preparation HTML

<div id="test"></div>

Setup

if (typeof jwplayer == "undefined") {
      var jwplayer = function(a) {
        if (jwplayer.api) {
          return jwplayer.api.selectPlayer(a)
        }
      };
      var $jw = jwplayer;
      jwplayer.version = "5.7.1896";
      jwplayer.vid = document.createElement("video");
      jwplayer.audio = document.createElement("audio");
      jwplayer.source = document.createElement("source");
      (function(b) {
        b.utils = function() {};
        b.utils.typeOf = function(d) {
          var c = typeof d;
          if (c === "object") {
            if (d) {
              if (d instanceof Array) {
                c = "array"
              }
            } else {
              c = "null"
            }
          }
          return c
        };
        b.utils.extend = function() {
          var c = b.utils.extend["arguments"];
          if (c.length > 1) {
            for (var e = 1; e < c.length; e++) {
              for (var d in c[e]) {
                c[0][d] = c[e][d]
              }
            }
            return c[0]
          }
          return null
        };
        b.utils.clone = function(f) {
          var c;
          var d = b.utils.clone["arguments"];
          if (d.length == 1) {
            switch (b.utils.typeOf(d[0])) {
              case "object":
                c = {};
                for (var e in d[0]) {
                  c[e] = b.utils.clone(d[0][e])
                }
                break;
              case "array":
                c = [];
                for (var e in d[0]) {
                  c[e] = b.utils.clone(d[0][e])
                }
                break;
              default:
                return d[0];
                break
            }
          }
          return c
        };
        b.utils.extension = function(c) {
          if (!c) {
            return ""
          }
          c = c.substring(c.lastIndexOf("/") + 1, c.length);
          c = c.split("?")[0];
          if (c.lastIndexOf(".") > -1) {
            return c.substr(c.lastIndexOf(".") + 1, c.length).toLowerCase()
          }
          return
        };
        b.utils.html = function(c, d) {
          c.innerHTML = d
        };
        b.utils.wrap = function(c, d) {
          if (c.parentNode) {
            c.parentNode.replaceChild(d, c)
          }
          d.appendChild(c)
        };
        b.utils.ajax = function(g, f, c) {
          var e;
          if (window.XMLHttpRequest) {
            e = new XMLHttpRequest()
          } else {
            e = new ActiveXObject("Microsoft.XMLHTTP")
          }
          e.onreadystatechange = function() {
            if (e.readyState === 4) {
              if (e.status === 200) {
                if (f) {
                  f(e)
                }
              } else {
                if (c) {
                  c(g)
                }
              }
            }
          };
          try {
            e.open("GET", g, true);
            e.send(null)
          } catch (d) {
            if (c) {
              c(g)
            }
          }
          return e
        };
        b.utils.load = function(d, e, c) {
          d.onreadystatechange = function() {
            if (d.readyState === 4) {
              if (d.status === 200) {
                if (e) {
                  e()
                }
              } else {
                if (c) {
                  c()
                }
              }
            }
          }
        };
        b.utils.find = function(d, c) {
          return d.getElementsByTagName(c)
        };
        b.utils.append = function(c, d) {
          c.appendChild(d)
        };
        b.utils.isIE = function() {
          return ((!+"\v1") || (typeof window.ActiveXObject != "undefined"))
        };
        b.utils.isLegacyAndroid = function() {
          var c = navigator.userAgent.toLowerCase();
          return (c.match(/android 2.[012]/i) !== null)
        };
        b.utils.isIOS = function(d) {
          if (typeof d == "undefined") {
            d = /iP(hone|ad|od)/i
          }
          var c = navigator.userAgent.toLowerCase();
          return (c.match(d) !== null)
        };
        b.utils.isIPad = function() {
          return b.utils.isIOS(/iPad/i)
        };
        b.utils.isIPod = function() {
          return b.utils.isIOS(/iP(hone|od)/i)
        };
        b.utils.getFirstPlaylistItemFromConfig = function(c) {
          var d = {};
          var e;
          if (c.playlist && c.playlist.length) {
            e = c.playlist[0]
          } else {
            e = c
          }
          d.file = e.file;
          d.levels = e.levels;
          d.streamer = e.streamer;
          d.playlistfile = e.playlistfile;
          d.provider = e.provider;
          if (!d.provider) {
            if (d.file && (d.file.toLowerCase().indexOf("youtube.com") > -1 || d.file.toLowerCase().indexOf("youtu.be") > -1)) {
              d.provider = "youtube"
            }
            if (d.streamer && d.streamer.toLowerCase().indexOf("rtmp://") == 0) {
              d.provider = "rtmp"
            }
            if (e.type) {
              d.provider = e.type.toLowerCase()
            }
          }
          if (d.provider == "audio") {
            d.provider = "sound"
          }
          return d
        };
        b.utils.getOuterHTML = function(c) {
          if (c.outerHTML) {
            return c.outerHTML
          } else {
            try {
              return new XMLSerializer().serializeToString(c)
            } catch (d) {
              return ""
            }
          }
        };
        b.utils.setOuterHTML = function(f, e) {
          if (f.outerHTML) {
            f.outerHTML = e
          } else {
            var g = document.createElement("div");
            g.innerHTML = e;
            var c = document.createRange();
            c.selectNodeContents(g);
            var d = c.extractContents();
            f.parentNode.insertBefore(d, f);
            f.parentNode.removeChild(f)
          }
        };
        b.utils.hasFlash = function() {
          if (typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] != "undefined") {
            return true
          }
          if (typeof window.ActiveXObject != "undefined") {
            try {
              new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
              return true
            } catch (c) {}
          }
          return false
        };
        b.utils.getPluginName = function(c) {
          if (c.lastIndexOf("/") >= 0) {
            c = c.substring(c.lastIndexOf("/") + 1, c.length)
          }
          if (c.lastIndexOf("-") >= 0) {
            c = c.substring(0, c.lastIndexOf("-"))
          }
          if (c.lastIndexOf(".swf") >= 0) {
            c = c.substring(0, c.lastIndexOf(".swf"))
          }
          if (c.lastIndexOf(".js") >= 0) {
            c = c.substring(0, c.lastIndexOf(".js"))
          }
          return c
        };
        b.utils.getPluginVersion = function(c) {
          if (c.lastIndexOf("-") >= 0) {
            if (c.lastIndexOf(".js") >= 0) {
              return c.substring(c.lastIndexOf("-") + 1, c.lastIndexOf(".js"))
            } else {
              if (c.lastIndexOf(".swf") >= 0) {
                return c.substring(c.lastIndexOf("-") + 1, c.lastIndexOf(".swf"))
              } else {
                return c.substring(c.lastIndexOf("-") + 1)
              }
            }
          }
          return ""
        };
        b.utils.getAbsolutePath = function(j, h) {
          if (!b.utils.exists(h)) {
            h = document.location.href
          }
          if (!b.utils.exists(j)) {
            return undefined
          }
          if (a(j)) {
            return j
          }
          var k = h.substring(0, h.indexOf("://") + 3);
          var g = h.substring(k.length, h.indexOf("/", k.length + 1));
          var d;
          if (j.indexOf("/") === 0) {
            d = j.split("/")
          } else {
            var e = h.split("?")[0];
            e = e.substring(k.length + g.length + 1, e.lastIndexOf("/"));
            d = e.split("/").concat(j.split("/"))
          }
          var c = [];
          for (var f = 0; f < d.length; f++) {
            if (!d[f] || !b.utils.exists(d[f]) || d[f] == ".") {
              continue
            } else {
              if (d[f] == "..") {
                c.pop()
              } else {
                c.push(d[f])
              }
            }
          }
          return k + g + "/" + c.join("/")
        };
    
        function a(d) {
          if (!b.utils.exists(d)) {
            return
          }
          var e = d.indexOf("://");
          var c = d.indexOf("?");
          return (e > 0 && (c < 0 || (c > e)))
        }
        b.utils.pluginPathType = {
          ABSOLUTE: "ABSOLUTE",
          RELATIVE: "RELATIVE",
          CDN: "CDN"
        };
        b.utils.getPluginPathType = function(d) {
          if (typeof d != "string") {
            return
          }
          d = d.split("?")[0];
          var e = d.indexOf("://");
          if (e > 0) {
            return b.utils.pluginPathType.ABSOLUTE
          }
          var c = d.indexOf("/");
          var f = b.utils.extension(d);
          if (e < 0 && c < 0 && (!f || !isNaN(f))) {
            return b.utils.pluginPathType.CDN
          }
          return b.utils.pluginPathType.RELATIVE
        };
        b.utils.mapEmpty = function(c) {
          for (var d in c) {
            return false
          }
          return true
        };
        b.utils.mapLength = function(d) {
          var c = 0;
          for (var e in d) {
            c++
          }
          return c
        };
        b.utils.log = function(d, c) {
          if (typeof console != "undefined" && typeof console.log != "undefined") {
            if (c) {
              console.log(d, c)
            } else {
              console.log(d)
            }
          }
        };
        b.utils.css = function(d, g, c) {
          if (b.utils.exists(d)) {
            for (var e in g) {
              try {
                if (typeof g[e] === "undefined") {
                  continue
                } else {
                  if (typeof g[e] == "number" && !(e == "zIndex" || e == "opacity")) {
                    if (isNaN(g[e])) {
                      continue
                    }
                    if (e.match(/color/i)) {
                      g[e] = "#" + b.utils.strings.pad(g[e].toString(16), 6)
                    } else {
                      g[e] = Math.ceil(g[e]) + "px"
                    }
                  }
                }
                d.style[e] = g[e]
              } catch (f) {}
            }
          }
        };
        b.utils.isYouTube = function(c) {
          return (c.indexOf("youtube.com") > -1 || c.indexOf("youtu.be") > -1)
        };
        b.utils.transform = function(c, d) {
          c.style.webkitTransform = d;
          c.style.MozTransform = d;
          c.style.OTransform = d
        };
        b.utils.stretch = function(h, n, m, f, l, g) {
          if (typeof m == "undefined" || typeof f == "undefined" || typeof l == "undefined" || typeof g == "undefined") {
            return
          }
          var d = m / l;
          var e = f / g;
          var k = 0;
          var j = 0;
          n.style.overflow = "hidden";
          b.utils.transform(n, "");
          var c = {};
          switch (h.toUpperCase()) {
            case b.utils.stretching.NONE:
              c.width = l;
              c.height = g;
              break;
            case b.utils.stretching.UNIFORM:
              if (d > e) {
                c.width = l * e;
                c.height = g * e
              } else {
                c.width = l * d;
                c.height = g * d
              }
              break;
            case b.utils.stretching.FILL:
              if (d > e) {
                c.width = l * d;
                c.height = g * d
              } else {
                c.width = l * e;
                c.height = g * e
              }
              break;
            case b.utils.stretching.EXACTFIT:
              b.utils.transform(n, ["scale(", d, ",", e, ")", " translate(0px,0px)"].join(""));
              c.width = l;
              c.height = g;
              break;
            default:
              break
          }
          c.top = (f - c.height) / 2;
          c.left = (m - c.width) / 2;
          b.utils.css(n, c)
        };
        b.utils.stretching = {
          NONE: "NONE",
          FILL: "FILL",
          UNIFORM: "UNIFORM",
          EXACTFIT: "EXACTFIT"
        };
        b.utils.deepReplaceKeyName = function(h, e, c) {
          switch (b.utils.typeOf(h)) {
            case "array":
              for (var g = 0; g < h.length; g++) {
                h[g] = b.utils.deepReplaceKeyName(h[g], e, c)
              }
              break;
            case "object":
              for (var f in h) {
                var d = f.replace(new RegExp(e, "g"), c);
                h[d] = b.utils.deepReplaceKeyName(h[f], e, c);
                if (f != d) {
                  delete h[f]
                }
              }
              break
          }
          return h
        };
        b.utils.isInArray = function(e, d) {
          if (!(e) || !(e instanceof Array)) {
            return false
          }
          for (var c = 0; c < e.length; c++) {
            if (d === e[c]) {
              return true
            }
          }
          return false
        };
        b.utils.exists = function(c) {
          switch (typeof(c)) {
            case "string":
              return (c.length > 0);
              break;
            case "object":
              return (c !== null);
            case "undefined":
              return false
          }
          return true
        };
        b.utils.empty = function(c) {
          if (typeof c.hasChildNodes == "function") {
            while (c.hasChildNodes()) {
              c.removeChild(c.firstChild)
            }
          }
        };
        b.utils.parseDimension = function(c) {
          if (typeof c == "string") {
            if (c === "") {
              return 0
            } else {
              if (c.lastIndexOf("%") > -1) {
                return c
              } else {
                return parseInt(c.replace("px", ""), 10)
              }
            }
          }
          return c
        };
        b.utils.getDimensions = function(c) {
          if (c && c.style) {
            return {
              x: b.utils.parseDimension(c.style.left),
              y: b.utils.parseDimension(c.style.top),
              width: b.utils.parseDimension(c.style.width),
              height: b.utils.parseDimension(c.style.height)
            }
          } else {
            return {}
          }
        };
        b.utils.timeFormat = function(c) {
          str = "00:00";
          if (c > 0) {
            str = Math.floor(c / 60) < 10 ? "0" + Math.floor(c / 60) + ":" : Math.floor(c / 60) + ":";
            str += Math.floor(c % 60) < 10 ? "0" + Math.floor(c % 60) : Math.floor(c % 60)
          }
          return str
        }
      })(jwplayer);
      (function(a) {
        a.events = function() {};
        a.events.COMPLETE = "COMPLETE";
        a.events.ERROR = "ERROR"
      })(jwplayer);
      (function(jwplayer) {
        jwplayer.events.eventdispatcher = function(debug) {
          var _debug = debug;
          var _listeners;
          var _globallisteners;
          this.resetEventListeners = function() {
            _listeners = {};
            _globallisteners = []
          };
          this.resetEventListeners();
          this.addEventListener = function(type, listener, count) {
            try {
              if (!jwplayer.utils.exists(_listeners[type])) {
                _listeners[type] = []
              }
              if (typeof(listener) == "string") {
                eval("listener = " + listener)
              }
              _listeners[type].push({
                listener: listener,
                count: count
              })
            } catch (err) {
              jwplayer.utils.log("error", err)
            }
            return false
          };
          this.removeEventListener = function(type, listener) {
            if (!_listeners[type]) {
              return
            }
            try {
              for (var listenerIndex = 0; listenerIndex < _listeners[type].length; listenerIndex++) {
                if (_listeners[type][listenerIndex].listener.toString() == listener.toString()) {
                  _listeners[type].splice(listenerIndex, 1);
                  break
                }
              }
            } catch (err) {
              jwplayer.utils.log("error", err)
            }
            return false
          };
          this.addGlobalListener = function(listener, count) {
            try {
              if (typeof(listener) == "string") {
                eval("listener = " + listener)
              }
              _globallisteners.push({
                listener: listener,
                count: count
              })
            } catch (err) {
              jwplayer.utils.log("error", err)
            }
            return false
          };
          this.removeGlobalListener = function(listener) {
            if (!_globallisteners[type]) {
              return
            }
            try {
              for (var globalListenerIndex = 0; globalListenerIndex < _globallisteners.length; globalListenerIndex++) {
                if (_globallisteners[globalListenerIndex].listener.toString() == listener.toString()) {
                  _globallisteners.splice(globalListenerIndex, 1);
                  break
                }
              }
            } catch (err) {
              jwplayer.utils.log("error", err)
            }
            return false
          };
          this.sendEvent = function(type, data) {
            if (!jwplayer.utils.exists(data)) {
              data = {}
            }
            if (_debug) {
              jwplayer.utils.log(type, data)
            }
            if (typeof _listeners[type] != "undefined") {
              for (var listenerIndex = 0; listenerIndex < _listeners[type].length; listenerIndex++) {
                try {
                  _listeners[type][listenerIndex].listener(data)
                } catch (err) {
                  jwplayer.utils.log("There was an error while handling a listener: " + err.toString(), _listeners[type][listenerIndex].listener)
                }
                if (_listeners[type][listenerIndex]) {
                  if (_listeners[type][listenerIndex].count === 1) {
                    delete _listeners[type][listenerIndex]
                  } else {
                    if (_listeners[type][listenerIndex].count > 0) {
                      _listeners[type][listenerIndex].count = _listeners[type][listenerIndex].count - 1
                    }
                  }
                }
              }
            }
            for (var globalListenerIndex = 0; globalListenerIndex < _globallisteners.length; globalListenerIndex++) {
              try {
                _globallisteners[globalListenerIndex].listener(data)
              } catch (err) {
                jwplayer.utils.log("There was an error while handling a listener: " + err.toString(), _globallisteners[globalListenerIndex].listener)
              }
              if (_globallisteners[globalListenerIndex]) {
                if (_globallisteners[globalListenerIndex].count === 1) {
                  delete _globallisteners[globalListenerIndex]
                } else {
                  if (_globallisteners[globalListenerIndex].count > 0) {
                    _globallisteners[globalListenerIndex].count = _globallisteners[globalListenerIndex].count - 1
                  }
                }
              }
            }
          }
        }
      })(jwplayer);
      (function(a) {
        var b = {};
        a.utils.animations = function() {};
        a.utils.animations.transform = function(c, d) {
          c.style.webkitTransform = d;
          c.style.MozTransform = d;
          c.style.OTransform = d;
          c.style.msTransform = d
        };
        a.utils.animations.transformOrigin = function(c, d) {
          c.style.webkitTransformOrigin = d;
          c.style.MozTransformOrigin = d;
          c.style.OTransformOrigin = d;
          c.style.msTransformOrigin = d
        };
        a.utils.animations.rotate = function(c, d) {
          a.utils.animations.transform(c, ["rotate(", d, "deg)"].join(""))
        };
        a.utils.cancelAnimation = function(c) {
          delete b[c.id]
        };
        a.utils.fadeTo = function(m, f, e, j, h, d) {
          if (b[m.id] != d && a.utils.exists(d)) {
            return
          }
          if (m.style.opacity == f) {
            return
          }
          var c = new Date().getTime();
          if (d > c) {
            setTimeout(function() {
              a.utils.fadeTo(m, f, e, j, 0, d)
            }, d - c)
          }
          if (m.style.display == "none") {
            m.style.display = "block"
          }
          if (!a.utils.exists(j)) {
            j = m.style.opacity === "" ? 1 : m.style.opacity
          }
          if (m.style.opacity == f && m.style.opacity !== "" && a.utils.exists(d)) {
            if (f === 0) {
              m.style.display = "none"
            }
            return
          }
          if (!a.utils.exists(d)) {
            d = c;
            b[m.id] = d
          }
          if (!a.utils.exists(h)) {
            h = 0
          }
          var k = (e > 0) ? ((c - d) / (e * 1000)) : 0;
          k = k > 1 ? 1 : k;
          var l = f - j;
          var g = j + (k * l);
          if (g > 1) {
            g = 1
          } else {
            if (g < 0) {
              g = 0
            }
          }
          m.style.opacity = g;
          if (h > 0) {
            b[m.id] = d + h * 1000;
            a.utils.fadeTo(m, f, e, j, 0, b[m.id]);
            return
          }
          setTimeout(function() {
            a.utils.fadeTo(m, f, e, j, 0, d)
          }, 10)
        }
      })(jwplayer);
      (function(a) {
        a.utils.arrays = function() {};
        a.utils.arrays.indexOf = function(c, d) {
          for (var b = 0; b < c.length; b++) {
            if (c[b] == d) {
              return b
            }
          }
          return -1
        };
        a.utils.arrays.remove = function(c, d) {
          var b = a.utils.arrays.indexOf(c, d);
          if (b > -1) {
            c.splice(b, 1)
          }
        }
      })(jwplayer);
      (function(a) {
        a.utils.extensionmap = {
          "3gp": {
            html5: "video/3gpp",
            flash: "video"
          },
          "3gpp": {
            html5: "video/3gpp"
          },
          "3g2": {
            html5: "video/3gpp2",
            flash: "video"
          },
          "3gpp2": {
            html5: "video/3gpp2"
          },
          flv: {
            flash: "video"
          },
          f4a: {
            html5: "audio/mp4"
          },
          f4b: {
            html5: "audio/mp4",
            flash: "video"
          },
          f4v: {
            html5: "video/mp4",
            flash: "video"
          },
          mov: {
            html5: "video/quicktime",
            flash: "video"
          },
          m4a: {
            html5: "audio/mp4",
            flash: "video"
          },
          m4b: {
            html5: "audio/mp4"
          },
          m4p: {
            html5: "audio/mp4"
          },
          m4v: {
            html5: "video/mp4",
            flash: "video"
          },
          mp4: {
            html5: "video/mp4",
            flash: "video"
          },
          rbs: {
            flash: "sound"
          },
          aac: {
            html5: "audio/aac",
            flash: "video"
          },
          mp3: {
            html5: "audio/mp3",
            flash: "sound"
          },
          ogg: {
            html5: "audio/ogg"
          },
          oga: {
            html5: "audio/ogg"
          },
          ogv: {
            html5: "video/ogg"
          },
          webm: {
            html5: "video/webm"
          },
          m3u8: {
            html5: "audio/x-mpegurl"
          },
          gif: {
            flash: "image"
          },
          jpeg: {
            flash: "image"
          },
          jpg: {
            flash: "image"
          },
          swf: {
            flash: "image"
          },
          png: {
            flash: "image"
          },
          wav: {
            html5: "audio/x-wav"
          }
        }
      })(jwplayer);
      (function(e) {
        e.utils.mediaparser = function() {};
        var g = {
          element: {
            width: "width",
            height: "height",
            id: "id",
            "class": "className",
            name: "name"
          },
          media: {
            src: "file",
            preload: "preload",
            autoplay: "autostart",
            loop: "repeat",
            controls: "controls"
          },
          source: {
            src: "file",
            type: "type",
            media: "media",
            "data-jw-width": "width",
            "data-jw-bitrate": "bitrate"
          },
          video: {
            poster: "image"
          }
        };
        var f = {};
        e.utils.mediaparser.parseMedia = function(j) {
          return d(j)
        };
    
        function c(k, j) {
          if (!e.utils.exists(j)) {
            j = g[k]
          } else {
            e.utils.extend(j, g[k])
          }
          return j
        }
    
        function d(n, j) {
          if (f[n.tagName.toLowerCase()] && !e.utils.exists(j)) {
            return f[n.tagName.toLowerCase()](n)
          } else {
            j = c("element", j);
            var o = {};
            for (var k in j) {
              if (k != "length") {
                var m = n.getAttribute(k);
                if (e.utils.exists(m)) {
                  o[j[k]] = m
                }
              }
            }
            var l = n.style["#background-color"];
            if (l && !(l == "transparent" || l == "rgba(0, 0, 0, 0)")) {
              o.screencolor = l
            }
            return o
          }
        }
    
        function h(n, k) {
          k = c("media", k);
          var l = [];
          var j = e.utils.selectors("source", n);
          for (var m in j) {
            if (!isNaN(m)) {
              l.push(a(j[m]))
            }
          }
          var o = d(n, k);
          if (e.utils.exists(o.file)) {
            l[0] = {
              file: o.file
            }
          }
          o.levels = l;
          return o
        }
    
        function a(l, k) {
          k = c("source", k);
          var j = d(l, k);
          j.width = j.width ? j.width : 0;
          j.bitrate = j.bitrate ? j.bitrate : 0;
          return j
        }
    
        function b(l, k) {
          k = c("video", k);
          var j = h(l, k);
          return j
        }
        f.media = h;
        f.audio = h;
        f.source = a;
        f.video = b
      })(jwplayer);
      (function(a) {
        a.utils.loaderstatus = {
          NEW: "NEW",
          LOADING: "LOADING",
          ERROR: "ERROR",
          COMPLETE: "COMPLETE"
        };
        a.utils.scriptloader = function(c) {
          var d = a.utils.loaderstatus.NEW;
          var b = new a.events.eventdispatcher();
          a.utils.extend(this, b);
          this.load = function() {
            if (d == a.utils.loaderstatus.NEW) {
              d = a.utils.loaderstatus.LOADING;
              var e = document.createElement("script");
              e.onload = function(f) {
                d = a.utils.loaderstatus.COMPLETE;
                b.sendEvent(a.events.COMPLETE)
              };
              e.onerror = function(f) {
                d = a.utils.loaderstatus.ERROR;
                b.sendEvent(a.events.ERROR)
              };
              e.onreadystatechange = function() {
                if (e.readyState == "loaded" || e.readyState == "complete") {
                  d = a.utils.loaderstatus.COMPLETE;
                  b.sendEvent(a.events.COMPLETE)
                }
              };
              document.getElementsByTagName("head")[0].appendChild(e);
              e.src = c
            }
          };
          this.getStatus = function() {
            return d
          }
        }
      })(jwplayer);
      (function(a) {
        a.utils.selectors = function(b, e) {
          if (!a.utils.exists(e)) {
            e = document
          }
          b = a.utils.strings.trim(b);
          var c = b.charAt(0);
          if (c == "#") {
            return e.getElementById(b.substr(1))
          } else {
            if (c == ".") {
              if (e.getElementsByClassName) {
                return e.getElementsByClassName(b.substr(1))
              } else {
                return a.utils.selectors.getElementsByTagAndClass("*", b.substr(1))
              }
            } else {
              if (b.indexOf(".") > 0) {
                var d = b.split(".");
                return a.utils.selectors.getElementsByTagAndClass(d[0], d[1])
              } else {
                return e.getElementsByTagName(b)
              }
            }
          }
          return null
        };
        a.utils.selectors.getElementsByTagAndClass = function(e, h, g) {
          var j = [];
          if (!a.utils.exists(g)) {
            g = document
          }
          var f = g.getElementsByTagName(e);
          for (var d = 0; d < f.length; d++) {
            if (a.utils.exists(f[d].className)) {
              var c = f[d].className.split(" ");
              for (var b = 0; b < c.length; b++) {
                if (c[b] == h) {
                  j.push(f[d])
                }
              }
            }
          }
          return j
        }
      })(jwplayer);
      (function(a) {
        a.utils.strings = function() {};
        a.utils.strings.trim = function(b) {
          return b.replace(/^\s*/, "").replace(/\s*$/, "")
        };
        a.utils.strings.pad = function(c, d, b) {
          if (!b) {
            b = "0"
          }
          while (c.length < d) {
            c = b + c
          }
          return c
        };
        a.utils.strings.serialize = function(b) {
          if (b == null) {
            return null
          } else {
            if (b == "true") {
              return true
            } else {
              if (b == "false") {
                return false
              } else {
                if (isNaN(Number(b)) || b.length > 5 || b.length == 0) {
                  return b
                } else {
                  return Number(b)
                }
              }
            }
          }
        };
        a.utils.strings.seconds = function(d) {
          d = d.replace(",", ".");
          var b = d.split(":");
          var c = 0;
          if (d.substr(-1) == "s") {
            c = Number(d.substr(0, d.length - 1))
          } else {
            if (d.substr(-1) == "m") {
              c = Number(d.substr(0, d.length - 1)) * 60
            } else {
              if (d.substr(-1) == "h") {
                c = Number(d.substr(0, d.length - 1)) * 3600
              } else {
                if (b.length > 1) {
                  c = Number(b[b.length - 1]);
                  c += Number(b[b.length - 2]) * 60;
                  if (b.length == 3) {
                    c += Number(b[b.length - 3]) * 3600
                  }
                } else {
                  c = Number(d)
                }
              }
            }
          }
          return c
        };
        a.utils.strings.xmlAttribute = function(b, c) {
          for (var d = 0; d < b.attributes.length; d++) {
            if (b.attributes[d].name && b.attributes[d].name.toLowerCase() == c.toLowerCase()) {
              return b.attributes[d].value.toString()
            }
          }
          return ""
        };
        a.utils.strings.jsonToString = function(f) {
          var h = h || {};
          if (h && h.stringify) {
            return h.stringify(f)
          }
          var c = typeof(f);
          if (c != "object" || f === null) {
            if (c == "string") {
              f = '"' + f + '"'
            } else {
              return String(f)
            }
          } else {
            var g = [],
              b = (f && f.constructor == Array);
            for (var d in f) {
              var e = f[d];
              switch (typeof(e)) {
                case "string":
                  e = '"' + e + '"';
                  break;
                case "object":
                  if (a.utils.exists(e)) {
                    e = a.utils.strings.jsonToString(e)
                  }
                  break
              }
              if (b) {
                if (typeof(e) != "function") {
                  g.push(String(e))
                }
              } else {
                if (typeof(e) != "function") {
                  g.push('"' + d + '":' + String(e))
                }
              }
            }
            if (b) {
              return "[" + String(g) + "]"
            } else {
              return "{" + String(g) + "}"
            }
          }
        }
      })(jwplayer);
      (function(c) {
        var d = new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);
        c.utils.typechecker = function(g, f) {
          f = !c.utils.exists(f) ? b(g) : f;
          return e(g, f)
        };
    
        function b(f) {
          var g = ["true", "false", "t", "f"];
          if (g.toString().indexOf(f.toLowerCase().replace(" ", "")) >= 0) {
            return "boolean"
          } else {
            if (d.test(f)) {
              return "color"
            } else {
              if (!isNaN(parseInt(f, 10)) && parseInt(f, 10).toString().length == f.length) {
                return "integer"
              } else {
                if (!isNaN(parseFloat(f)) && parseFloat(f).toString().length == f.length) {
                  return "float"
                }
              }
            }
          }
          return "string"
        }
    
        function e(g, f) {
          if (!c.utils.exists(f)) {
            return g
          }
          switch (f) {
            case "color":
              if (g.length > 0) {
                return a(g)
              }
              return null;
            case "integer":
              return parseInt(g, 10);
            case "float":
              return parseFloat(g);
            case "boolean":
              if (g.toLowerCase() == "true") {
                return true
              } else {
                if (g == "1") {
                  return true
                }
              }
              return false
          }
          return g
        }
    
        function a(f) {
          switch (f.toLowerCase()) {
            case "blue":
              return parseInt("0000FF", 16);
            case "green":
              return parseInt("00FF00", 16);
            case "red":
              return parseInt("FF0000", 16);
            case "cyan":
              return parseInt("00FFFF", 16);
            case "magenta":
              return parseInt("FF00FF", 16);
            case "yellow":
              return parseInt("FFFF00", 16);
            case "black":
              return parseInt("000000", 16);
            case "white":
              return parseInt("FFFFFF", 16);
            default:
              f = f.replace(/(#|0x)?([0-9A-F]{3,6})$/gi, "$2");
              if (f.length == 3) {
                f = f.charAt(0) + f.charAt(0) + f.charAt(1) + f.charAt(1) + f.charAt(2) + f.charAt(2)
              }
              return parseInt(f, 16)
          }
          return parseInt("000000", 16)
        }
      })(jwplayer);
      (function(a) {
        a.utils.parsers = function() {};
        a.utils.parsers.localName = function(b) {
          if (!b) {
            return ""
          } else {
            if (b.localName) {
              return b.localName
            } else {
              if (b.baseName) {
                return b.baseName
              } else {
                return ""
              }
            }
          }
        };
        a.utils.parsers.textContent = function(b) {
          if (!b) {
            return ""
          } else {
            if (b.textContent) {
              return b.textContent
            } else {
              if (b.text) {
                return b.text
              } else {
                return ""
              }
            }
          }
        }
      })(jwplayer);
      (function(a) {
        a.utils.parsers.jwparser = function() {};
        a.utils.parsers.jwparser.PREFIX = "jwplayer";
        a.utils.parsers.jwparser.parseEntry = function(c, d) {
          for (var b = 0; b < c.childNodes.length; b++) {
            if (c.childNodes[b].prefix == a.utils.parsers.jwparser.PREFIX) {
              d[a.utils.parsers.localName(c.childNodes[b])] = a.utils.strings.serialize(a.utils.parsers.textContent(c.childNodes[b]))
            }
            if (!d.file && String(d.link).toLowerCase().indexOf("youtube") > -1) {
              d.file = d.link
            }
          }
          return d
        };
        a.utils.parsers.jwparser.getProvider = function(c) {
          if (c.type) {
            return c.type
          } else {
            if (c.file.indexOf("youtube.com/w") > -1 || c.file.indexOf("youtube.com/v") > -1 || c.file.indexOf("youtu.be/") > -1) {
              return "youtube"
            } else {
              if (c.streamer && c.streamer.indexOf("rtmp") == 0) {
                return "rtmp"
              } else {
                if (c.streamer && c.streamer.indexOf("http") == 0) {
                  return "http"
                } else {
                  var b = a.utils.strings.extension(c.file);
                  if (extensions.hasOwnProperty(b)) {
                    return extensions[b]
                  }
                }
              }
            }
          }
          return ""
        }
      })(jwplayer);
      (function(a) {
        a.utils.parsers.mediaparser = function() {};
        a.utils.parsers.mediaparser.PREFIX = "media";
        a.utils.parsers.mediaparser.parseGroup = function(d, f) {
          var e = false;
          for (var c = 0; c < d.childNodes.length; c++) {
            if (d.childNodes[c].prefix == a.utils.parsers.mediaparser.PREFIX) {
              if (!a.utils.parsers.localName(d.childNodes[c])) {
                continue
              }
              switch (a.utils.parsers.localName(d.childNodes[c]).toLowerCase()) {
                case "content":
                  if (!e) {
                    f.file = a.utils.strings.xmlAttribute(d.childNodes[c], "url")
                  }
                  if (a.utils.strings.xmlAttribute(d.childNodes[c], "duration")) {
                    f.duration = a.utils.strings.seconds(a.utils.strings.xmlAttribute(d.childNodes[c], "duration"))
                  }
                  if (a.utils.strings.xmlAttribute(d.childNodes[c], "start")) {
                    f.start = a.utils.strings.seconds(a.utils.strings.xmlAttribute(d.childNodes[c], "start"))
                  }
                  if (d.childNodes[c].childNodes && d.childNodes[c].childNodes.length > 0) {
                    f = a.utils.parsers.mediaparser.parseGroup(d.childNodes[c], f)
                  }
                  if (a.utils.strings.xmlAttribute(d.childNodes[c], "width") || a.utils.strings.xmlAttribute(d.childNodes[c], "bitrate") || a.utils.strings.xmlAttribute(d.childNodes[c], "url")) {
                    if (!f.levels) {
                      f.levels = []
                    }
                    f.levels.push({
                      width: a.utils.strings.xmlAttribute(d.childNodes[c], "width"),
                      bitrate: a.utils.strings.xmlAttribute(d.childNodes[c], "bitrate"),
                      file: a.utils.strings.xmlAttribute(d.childNodes[c], "url")
                    })
                  }
                  break;
                case "title":
                  f.title = a.utils.parsers.textContent(d.childNodes[c]);
                  break;
                case "description":
                  f.description = a.utils.parsers.textContent(d.childNodes[c]);
                  break;
                case "keywords":
                  f.tags = a.utils.parsers.textContent(d.childNodes[c]);
                  break;
                case "thumbnail":
                  f.image = a.utils.strings.xmlAttribute(d.childNodes[c], "url");
                  break;
                case "credit":
                  f.author = a.utils.parsers.textContent(d.childNodes[c]);
                  break;
                case "player":
                  var b = d.childNodes[c].url;
                  if (b.indexOf("youtube.com") >= 0 || b.indexOf("youtu.be") >= 0) {
                    e = true;
                    f.file = a.utils.strings.xmlAttribute(d.childNodes[c], "url")
                  }
                  break;
                case "group":
                  a.utils.parsers.mediaparser.parseGroup(d.childNodes[c], f);
                  break
              }
            }
          }
          return f
        }
      })(jwplayer);
      (function(b) {
        b.utils.parsers.rssparser = function() {};
        b.utils.parsers.rssparser.parse = function(f) {
          var c = [];
          for (var e = 0; e < f.childNodes.length; e++) {
            if (b.utils.parsers.localName(f.childNodes[e]).toLowerCase() == "channel") {
              for (var d = 0; d < f.childNodes[e].childNodes.length; d++) {
                if (b.utils.parsers.localName(f.childNodes[e].childNodes[d]).toLowerCase() == "item") {
                  c.push(a(f.childNodes[e].childNodes[d]))
                }
              }
            }
          }
          return c
        };
    
        function a(d) {
          var e = {};
          for (var c = 0; c < d.childNodes.length; c++) {
            if (!b.utils.parsers.localName(d.childNodes[c])) {
              continue
            }
            switch (b.utils.parsers.localName(d.childNodes[c]).toLowerCase()) {
              case "enclosure":
                e.file = b.utils.strings.xmlAttribute(d.childNodes[c], "url");
                break;
              case "title":
                e.title = b.utils.parsers.textContent(d.childNodes[c]);
                break;
              case "pubdate":
                e.date = b.utils.parsers.textContent(d.childNodes[c]);
                break;
              case "description":
                e.description = b.utils.parsers.textContent(d.childNodes[c]);
                break;
              case "link":
                e.link = b.utils.parsers.textContent(d.childNodes[c]);
                break;
              case "category":
                if (e.tags) {
                  e.tags += b.utils.parsers.textContent(d.childNodes[c])
                } else {
                  e.tags = b.utils.parsers.textContent(d.childNodes[c])
                }
                break
            }
          }
          e = b.utils.parsers.mediaparser.parseGroup(d, e);
          e = b.utils.parsers.jwparser.parseEntry(d, e);
          return new b.html5.playlistitem(e)
        }
      })(jwplayer);
      (function(a) {
        var c = {};
        var b = {};
        a.plugins = function() {};
        a.plugins.loadPlugins = function(e, d) {
          b[e] = new a.plugins.pluginloader(new a.plugins.model(c), d);
          return b[e]
        };
        a.plugins.registerPlugin = function(h, f, e) {
          var d = a.utils.getPluginName(h);
          if (c[d]) {
            c[d].registerPlugin(h, f, e)
          } else {
            a.utils.log("A plugin (" + h + ") was registered with the player that was not loaded. Please check your configuration.");
            for (var g in b) {
              b[g].pluginFailed()
            }
          }
        }
      })(jwplayer);
      (function(a) {
        a.plugins.model = function(b) {
          this.addPlugin = function(c) {
            var d = a.utils.getPluginName(c);
            if (!b[d]) {
              b[d] = new a.plugins.plugin(c)
            }
            return b[d]
          }
        }
      })(jwplayer);
      (function(a) {
        a.plugins.pluginmodes = {
          FLASH: "FLASH",
          JAVASCRIPT: "JAVASCRIPT",
          HYBRID: "HYBRID"
        };
        a.plugins.plugin = function(b) {
          var d = "http://plugins.longtailvideo.com";
          var j = a.utils.loaderstatus.NEW;
          var k;
          var h;
          var l;
          var c = new a.events.eventdispatcher();
          a.utils.extend(this, c);
    
          function e() {
            switch (a.utils.getPluginPathType(b)) {
              case a.utils.pluginPathType.ABSOLUTE:
                return b;
              case a.utils.pluginPathType.RELATIVE:
                return a.utils.getAbsolutePath(b, window.location.href);
              case a.utils.pluginPathType.CDN:
                var n = a.utils.getPluginName(b);
                var m = a.utils.getPluginVersion(b);
                return d + "/" + a.version.split(".")[0] + "/" + n + "/" + n + (m !== "" ? ("-" + m) : "") + ".js"
            }
          }
    
          function g(m) {
            l = setTimeout(function() {
              j = a.utils.loaderstatus.COMPLETE;
              c.sendEvent(a.events.COMPLETE)
            }, 1000)
          }
    
          function f(m) {
            j = a.utils.loaderstatus.ERROR;
            c.sendEvent(a.events.ERROR)
          }
          this.load = function() {
            if (j == a.utils.loaderstatus.NEW) {
              if (b.lastIndexOf(".swf") > 0) {
                k = b;
                j = a.utils.loaderstatus.COMPLETE;
                c.sendEvent(a.events.COMPLETE);
                return
              }
              j = a.utils.loaderstatus.LOADING;
              var m = new a.utils.scriptloader(e());
              m.addEventListener(a.events.COMPLETE, g);
              m.addEventListener(a.events.ERROR, f);
              m.load()
            }
          };
          this.registerPlugin = function(o, n, m) {
            if (l) {
              clearTimeout(l);
              l = undefined
            }
            if (n && m) {
              k = m;
              h = n
            } else {
              if (typeof n == "string") {
                k = n
              } else {
                if (typeof n == "function") {
                  h = n
                } else {
                  if (!n && !m) {
                    k = o
                  }
                }
              }
            }
            j = a.utils.loaderstatus.COMPLETE;
            c.sendEvent(a.events.COMPLETE)
          };
          this.getStatus = function() {
            return j
          };
          this.getPluginName = function() {
            return a.utils.getPluginName(b)
          };
          this.getFlashPath = function() {
            if (k) {
              switch (a.utils.getPluginPathType(k)) {
                case a.utils.pluginPathType.ABSOLUTE:
                  return k;
                case a.utils.pluginPathType.RELATIVE:
                  if (b.lastIndexOf(".swf") > 0) {
                    return a.utils.getAbsolutePath(k, window.location.href)
                  }
                  return a.utils.getAbsolutePath(k, e());
                case a.utils.pluginPathType.CDN:
                  if (k.indexOf("-") > -1) {
                    return k + "h"
                  }
                  return k + "-h"
              }
            }
            return null
          };
          this.getJS = function() {
            return h
          };
          this.getPluginmode = function() {
            if (typeof k != "undefined" && typeof h != "undefined") {
              return a.plugins.pluginmodes.HYBRID
            } else {
              if (typeof k != "undefined") {
                return a.plugins.pluginmodes.FLASH
              } else {
                if (typeof h != "undefined") {
                  return a.plugins.pluginmodes.JAVASCRIPT
                }
              }
            }
          };
          this.getNewInstance = function(n, m, o) {
            return new h(n, m, o)
          };
          this.getURL = function() {
            return b
          }
        }
      })(jwplayer);
      (function(a) {
        a.plugins.pluginloader = function(h, e) {
          var g = {};
          var k = a.utils.loaderstatus.NEW;
          var d = false;
          var b = false;
          var c = new a.events.eventdispatcher();
          a.utils.extend(this, c);
    
          function f() {
            if (!b) {
              b = true;
              k = a.utils.loaderstatus.COMPLETE;
              c.sendEvent(a.events.COMPLETE)
            }
          }
    
          function j() {
            if (!b) {
              var m = 0;
              for (plugin in g) {
                var l = g[plugin].getStatus();
                if (l == a.utils.loaderstatus.LOADING || l == a.utils.loaderstatus.NEW) {
                  m++
                }
              }
              if (m == 0) {
                f()
              }
            }
          }
          this.setupPlugins = function(n, l, s) {
            var m = {
              length: 0,
              plugins: {}
            };
            var p = {
              length: 0,
              plugins: {}
            };
            for (var o in g) {
              var q = g[o].getPluginName();
              if (g[o].getFlashPath()) {
                m.plugins[g[o].getFlashPath()] = l.plugins[o];
                m.plugins[g[o].getFlashPath()].pluginmode = g[o].getPluginmode();
                m.length++
              }
              if (g[o].getJS()) {
                var r = document.createElement("div");
                r.id = n.id + "_" + q;
                r.style.position = "absolute";
                r.style.zIndex = p.length + 10;
                p.plugins[q] = g[o].getNewInstance(n, l.plugins[o], r);
                p.length++;
                if (typeof p.plugins[q].resize != "undefined") {
                  n.onReady(s(p.plugins[q], r, true));
                  n.onResize(s(p.plugins[q], r))
                }
              }
            }
            n.plugins = p.plugins;
            return m
          };
          this.load = function() {
            k = a.utils.loaderstatus.LOADING;
            d = true;
            for (var l in e) {
              if (a.utils.exists(l)) {
                g[l] = h.addPlugin(l);
                g[l].addEventListener(a.events.COMPLETE, j);
                g[l].addEventListener(a.events.ERROR, j)
              }
            }
            for (l in g) {
              g[l].load()
            }
            d = false;
            j()
          };
          this.pluginFailed = function() {
            f()
          };
          this.getStatus = function() {
            return k
          }
        }
      })(jwplayer);
      (function(b) {
        var a = [];
        b.api = function(d) {
          this.container = d;
          this.id = d.id;
          var n = {};
          var s = {};
          var q = {};
          var c = [];
          var h = undefined;
          var l = false;
          var j = [];
          var p = b.utils.getOuterHTML(d);
          var r = {};
          var k = {};
          this.getBuffer = function() {
            return this.callInternal("jwGetBuffer")
          };
          this.getContainer = function() {
            return this.container
          };
    
          function e(u, t) {
            return function(z, v, w, x) {
              if (u.renderingMode == "flash" || u.renderingMode == "html5") {
                var y;
                if (v) {
                  k[z] = v;
                  y = "jwplayer('" + u.id + "').callback('" + z + "')"
                } else {
                  if (!v && k[z]) {
                    delete k[z]
                  }
                }
                h.jwDockSetButton(z, y, w, x)
              }
              return t
            }
          }
          this.getPlugin = function(t) {
            var v = this;
            var u = {};
            if (t == "dock") {
              return b.utils.extend(u, {
                setButton: e(v, u),
                show: function() {
                  v.callInternal("jwDockShow");
                  return u
                },
                hide: function() {
                  v.callInternal("jwDockHide");
                  return u
                },
                onShow: function(w) {
                  v.componentListener("dock", b.api.events.JWPLAYER_COMPONENT_SHOW, w);
                  return u
                },
                onHide: function(w) {
                  v.componentListener("dock", b.api.events.JWPLAYER_COMPONENT_HIDE, w);
                  return u
                }
              })
            } else {
              if (t == "controlbar") {
                return b.utils.extend(u, {
                  show: function() {
                    v.callInternal("jwControlbarShow");
                    return u
                  },
                  hide: function() {
                    v.callInternal("jwControlbarHide");
                    return u
                  },
                  onShow: function(w) {
                    v.componentListener("controlbar", b.api.events.JWPLAYER_COMPONENT_SHOW, w);
                    return u
                  },
                  onHide: function(w) {
                    v.componentListener("controlbar", b.api.events.JWPLAYER_COMPONENT_HIDE, w);
                    return u
                  }
                })
              } else {
                if (t == "display") {
                  return b.utils.extend(u, {
                    show: function() {
                      v.callInternal("jwDisplayShow");
                      return u
                    },
                    hide: function() {
                      v.callInternal("jwDisplayHide");
                      return u
                    },
                    onShow: function(w) {
                      v.componentListener("display", b.api.events.JWPLAYER_COMPONENT_SHOW, w);
                      return u
                    },
                    onHide: function(w) {
                      v.componentListener("display", b.api.events.JWPLAYER_COMPONENT_HIDE, w);
                      return u
                    }
                  })
                } else {
                  return this.plugins[t]
                }
              }
            }
          };
          this.callback = function(t) {
            if (k[t]) {
              return k[t]()
            }
          };
          this.getDuration = function() {
            return this.callInternal("jwGetDuration")
          };
          this.getFullscreen = function() {
            return this.callInternal("jwGetFullscreen")
          };
          this.getHeight = function() {
            return this.callInternal("jwGetHeight")
          };
          this.getLockState = function() {
            return this.callInternal("jwGetLockState")
          };
          this.getMeta = function() {
            return this.getItemMeta()
          };
          this.getMute = function() {
            return this.callInternal("jwGetMute")
          };
          this.getPlaylist = function() {
            var u = this.callInternal("jwGetPlaylist");
            if (this.renderingMode == "flash") {
              b.utils.deepReplaceKeyName(u, "__dot__", ".")
            }
            for (var t = 0; t < u.length; t++) {
              if (!b.utils.exists(u[t].index)) {
                u[t].index = t
              }
            }
            return u
          };
          this.getPlaylistItem = function(t) {
            if (!b.utils.exists(t)) {
              t = this.getCurrentItem()
            }
            return this.getPlaylist()[t]
          };
          this.getPosition = function() {
            return this.callInternal("jwGetPosition")
          };
          this.getRenderingMode = function() {
            return this.renderingMode
          };
          this.getState = function() {
            return this.callInternal("jwGetState")
          };
          this.getVolume = function() {
            return this.callInternal("jwGetVolume")
          };
          this.getWidth = function() {
            return this.callInternal("jwGetWidth")
          };
          this.setFullscreen = function(t) {
            if (!b.utils.exists(t)) {
              this.callInternal("jwSetFullscreen", !this.callInternal("jwGetFullscreen"))
            } else {
              this.callInternal("jwSetFullscreen", t)
            }
            return this
          };
          this.setMute = function(t) {
            if (!b.utils.exists(t)) {
              this.callInternal("jwSetMute", !this.callInternal("jwGetMute"))
            } else {
              this.callInternal("jwSetMute", t)
            }
            return this
          };
          this.lock = function() {
            return this
          };
          this.unlock = function() {
            return this
          };
          this.load = function(t) {
            this.callInternal("jwLoad", t);
            return this
          };
          this.playlistItem = function(t) {
            this.callInternal("jwPlaylistItem", t);
            return this
          };
          this.playlistPrev = function() {
            this.callInternal("jwPlaylistPrev");
            return this
          };
          this.playlistNext = function() {
            this.callInternal("jwPlaylistNext");
            return this
          };
          this.resize = function(u, t) {
            if (this.renderingMode == "html5") {
              h.jwResize(u, t)
            } else {
              this.container.width = u;
              this.container.height = t
            }
            return this
          };
          this.play = function(t) {
            if (typeof t == "undefined") {
              t = this.getState();
              if (t == b.api.events.state.PLAYING || t == b.api.events.state.BUFFERING) {
                this.callInternal("jwPause")
              } else {
                this.callInternal("jwPlay")
              }
            } else {
              this.callInternal("jwPlay", t)
            }
            return this
          };
          this.pause = function(t) {
            if (typeof t == "undefined") {
              t = this.getState();
              if (t == b.api.events.state.PLAYING || t == b.api.events.state.BUFFERING) {
                this.callInternal("jwPause")
              } else {
                this.callInternal("jwPlay")
              }
            } else {
              this.callInternal("jwPause", t)
            }
            return this
          };
          this.stop = function() {
            this.callInternal("jwStop");
            return this
          };
          this.seek = function(t) {
            this.callInternal("jwSeek", t);
            return this
          };
          this.setVolume = function(t) {
            this.callInternal("jwSetVolume", t);
            return this
          };
          this.onBufferChange = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER, t)
          };
          this.onBufferFull = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL, t)
          };
          this.onError = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_ERROR, t)
          };
          this.onFullscreen = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_FULLSCREEN, t)
          };
          this.onMeta = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_META, t)
          };
          this.onMute = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_MUTE, t)
          };
          this.onPlaylist = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_LOADED, t)
          };
          this.onPlaylistItem = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM, t)
          };
          this.onReady = function(t) {
            return this.eventListener(b.api.events.API_READY, t)
          };
          this.onResize = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_RESIZE, t)
          };
          this.onComplete = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE, t)
          };
          this.onSeek = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_SEEK, t)
          };
          this.onTime = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_TIME, t)
          };
          this.onVolume = function(t) {
            return this.eventListener(b.api.events.JWPLAYER_MEDIA_VOLUME, t)
          };
          this.onBuffer = function(t) {
            return this.stateListener(b.api.events.state.BUFFERING, t)
          };
          this.onPause = function(t) {
            return this.stateListener(b.api.events.state.PAUSED, t)
          };
          this.onPlay = function(t) {
            return this.stateListener(b.api.events.state.PLAYING, t)
          };
          this.onIdle = function(t) {
            return this.stateListener(b.api.events.state.IDLE, t)
          };
          this.remove = function() {
            n = {};
            j = [];
            if (b.utils.getOuterHTML(this.container) != p) {
              b.api.destroyPlayer(this.id, p)
            }
          };
          this.setup = function(u) {
            if (b.embed) {
              var t = this.id;
              this.remove();
              var v = b(t);
              v.config = u;
              return new b.embed(v)
            }
            return this
          };
          this.registerPlugin = function(v, u, t) {
            b.plugins.registerPlugin(v, u, t)
          };
          this.setPlayer = function(t, u) {
            h = t;
            this.renderingMode = u
          };
          this.stateListener = function(t, u) {
            if (!s[t]) {
              s[t] = [];
              this.eventListener(b.api.events.JWPLAYER_PLAYER_STATE, g(t))
            }
            s[t].push(u);
            return this
          };
    
          function g(t) {
            return function(v) {
              var u = v.newstate,
                x = v.oldstate;
              if (u == t) {
                var w = s[u];
                if (w) {
                  for (var y = 0; y < w.length; y++) {
                    if (typeof w[y] == "function") {
                      w[y].call(this, {
                        oldstate: x,
                        newstate: u
                      })
                    }
                  }
                }
              }
            }
          }
          this.componentListener = function(t, u, v) {
            if (!q[t]) {
              q[t] = {}
            }
            if (!q[t][u]) {
              q[t][u] = [];
              this.eventListener(u, m(t, u))
            }
            q[t][u].push(v);
            return this
          };
    
          function m(t, u) {
            return function(w) {
              if (t == w.component) {
                var v = q[t][u];
                if (v) {
                  for (var x = 0; x < v.length; x++) {
                    if (typeof v[x] == "function") {
                      v[x].call(this, w)
                    }
                  }
                }
              }
            }
          }
          this.addInternalListener = function(t, u) {
            t.jwAddEventListener(u, 'function(dat) { jwplayer("' + this.id + '").dispatchEvent("' + u + '", dat); }')
          };
          this.eventListener = function(t, u) {
            if (!n[t]) {
              n[t] = [];
              if (h && l) {
                this.addInternalListener(h, t)
              }
            }
            n[t].push(u);
            return this
          };
          this.dispatchEvent = function(v) {
            if (n[v]) {
              var u = f(v, arguments[1]);
              for (var t = 0; t < n[v].length; t++) {
                if (typeof n[v][t] == "function") {
                  n[v][t].call(this, u)
                }
              }
            }
          };
    
          function f(v, t) {
            var x = b.utils.extend({}, t);
            if (v == b.api.events.JWPLAYER_FULLSCREEN && !x.fullscreen) {
              x.fullscreen = x.message == "true" ? true : false;
              delete x.message
            } else {
              if (typeof x.data == "object") {
                x = b.utils.extend(x, x.data);
                delete x.data
              }
            }
            var u = ["position", "duration", "offset"];
            for (var w in u) {
              if (x[u[w]]) {
                x[u[w]] = Math.round(x[u[w]] * 1000) / 1000
              }
            }
            return x
          }
          this.callInternal = function(u, t) {
            if (l) {
              if (typeof h != "undefined" && typeof h[u] == "function") {
                if (b.utils.exists(t)) {
                  return (h[u])(t)
                } else {
                  return (h[u])()
                }
              }
              return null
            } else {
              j.push({
                method: u,
                parameters: t
              })
            }
          };
          this.playerReady = function(v) {
            l = true;
            if (!h) {
              this.setPlayer(document.getElementById(v.id))
            }
            this.container = document.getElementById(this.id);
            for (var t in n) {
              this.addInternalListener(h, t)
            }
            this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM, function(w) {
              r = {}
            });
            this.eventListener(b.api.events.JWPLAYER_MEDIA_META, function(w) {
              b.utils.extend(r, w.metadata)
            });
            this.dispatchEvent(b.api.events.API_READY);
            while (j.length > 0) {
              var u = j.shift();
              this.callInternal(u.method, u.parameters)
            }
          };
          this.getItemMeta = function() {
            return r
          };
          this.getCurrentItem = function() {
            return this.callInternal("jwGetPlaylistIndex")
          };
    
          function o(v, x, w) {
            var t = [];
            if (!x) {
              x = 0
            }
            if (!w) {
              w = v.length - 1
            }
            for (var u = x; u <= w; u++) {
              t.push(v[u])
            }
            return t
          }
          return this
        };
        b.api.selectPlayer = function(d) {
          var c;
          if (!b.utils.exists(d)) {
            d = 0
          }
          if (d.nodeType) {
            c = d
          } else {
            if (typeof d == "string") {
              c = document.getElementById(d)
            }
          } if (c) {
            var e = b.api.playerById(c.id);
            if (e) {
              return e
            } else {
              return b.api.addPlayer(new b.api(c))
            }
          } else {
            if (typeof d == "number") {
              return b.getPlayers()[d]
            }
          }
          return null
        };
        b.api.events = {
          API_READY: "jwplayerAPIReady",
          JWPLAYER_READY: "jwplayerReady",
          JWPLAYER_FULLSCREEN: "jwplayerFullscreen",
          JWPLAYER_RESIZE: "jwplayerResize",
          JWPLAYER_ERROR: "jwplayerError",
          JWPLAYER_COMPONENT_SHOW: "jwplayerComponentShow",
          JWPLAYER_COMPONENT_HIDE: "jwplayerComponentHide",
          JWPLAYER_MEDIA_BUFFER: "jwplayerMediaBuffer",
          JWPLAYER_MEDIA_BUFFER_FULL: "jwplayerMediaBufferFull",
          JWPLAYER_MEDIA_ERROR: "jwplayerMediaError",
          JWPLAYER_MEDIA_LOADED: "jwplayerMediaLoaded",
          JWPLAYER_MEDIA_COMPLETE: "jwplayerMediaComplete",
          JWPLAYER_MEDIA_SEEK: "jwplayerMediaSeek",
          JWPLAYER_MEDIA_TIME: "jwplayerMediaTime",
          JWPLAYER_MEDIA_VOLUME: "jwplayerMediaVolume",
          JWPLAYER_MEDIA_META: "jwplayerMediaMeta",
          JWPLAYER_MEDIA_MUTE: "jwplayerMediaMute",
          JWPLAYER_PLAYER_STATE: "jwplayerPlayerState",
          JWPLAYER_PLAYLIST_LOADED: "jwplayerPlaylistLoaded",
          JWPLAYER_PLAYLIST_ITEM: "jwplayerPlaylistItem"
        };
        b.api.events.state = {
          BUFFERING: "BUFFERING",
          IDLE: "IDLE",
          PAUSED: "PAUSED",
          PLAYING: "PLAYING"
        };
        b.api.playerById = function(d) {
          for (var c = 0; c < a.length; c++) {
            if (a[c].id == d) {
              return a[c]
            }
          }
          return null
        };
        b.api.addPlayer = function(c) {
          for (var d = 0; d < a.length; d++) {
            if (a[d] == c) {
              return c
            }
          }
          a.push(c);
          return c
        };
        b.api.destroyPlayer = function(g, d) {
          var f = -1;
          for (var j = 0; j < a.length; j++) {
            if (a[j].id == g) {
              f = j;
              continue
            }
          }
          if (f >= 0) {
            var c = document.getElementById(a[f].id);
            if (document.getElementById(a[f].id + "_wrapper")) {
              c = document.getElementById(a[f].id + "_wrapper")
            }
            if (c) {
              if (d) {
                b.utils.setOuterHTML(c, d)
              } else {
                var h = document.createElement("div");
                var e = c.id;
                if (c.id.indexOf("_wrapper") == c.id.length - 8) {
                  newID = c.id.substring(0, c.id.length - 8)
                }
                h.setAttribute("id", e);
                c.parentNode.replaceChild(h, c)
              }
            }
            a.splice(f, 1)
          }
          return null
        };
        b.getPlayers = function() {
          return a.slice(0)
        }
      })(jwplayer);
      var _userPlayerReady = (typeof playerReady == "function") ? playerReady : undefined;
      playerReady = function(b) {
        var a = jwplayer.api.playerById(b.id);
        if (a) {
          a.playerReady(b)
        } else {
          jwplayer.api.selectPlayer(b.id).playerReady(b)
        } if (_userPlayerReady) {
          _userPlayerReady.call(this, b)
        }
      };
      (function(a) {
        a.embed = function(g) {
          var j = {
            width: 400,
            height: 300,
            components: {
              controlbar: {
                position: "over"
              }
            }
          };
          var f = a.utils.mediaparser.parseMedia(g.container);
          var e = new a.embed.config(a.utils.extend(j, f, g.config), this);
          var h = a.plugins.loadPlugins(g.id, e.plugins);
    
          function c(m, l) {
            for (var k in l) {
              if (typeof m[k] == "function") {
                (m[k]).call(m, l[k])
              }
            }
          }
    
          function d() {
            if (h.getStatus() == a.utils.loaderstatus.COMPLETE) {
              for (var m = 0; m < e.modes.length; m++) {
                if (e.modes[m].type && a.embed[e.modes[m].type]) {
                  var k = e;
                  if (e.modes[m].config) {
                    k = a.utils.extend(a.utils.clone(e), e.modes[m].config)
                  }
                  var l = new a.embed[e.modes[m].type](document.getElementById(g.id), e.modes[m], k, h, g);
                  if (l.supportsConfig()) {
                    l.embed();
                    c(g, e.events);
                    return g
                  }
                }
              }
              a.utils.log("No suitable players found");
              new a.embed.logo(a.utils.extend({
                hide: true
              }, e.components.logo), "none", g.id)
            }
          }
          h.addEventListener(a.events.COMPLETE, d);
          h.addEventListener(a.events.ERROR, d);
          h.load();
          return g
        };
    
        function b() {
          if (!document.body) {
            return setTimeout(b, 15)
          }
          var c = a.utils.selectors.getElementsByTagAndClass("video", "jwplayer");
          for (var d = 0; d < c.length; d++) {
            var e = c[d];
            a(e.id).setup({})
          }
        }
        b()
      })(jwplayer);
      (function(e) {
        function h() {
          return [{
            type: "flash",
            src: "/jwplayer/player.swf"
          }, {
            type: "html5"
          }, {
            type: "download"
          }]
        }
        var a = {
          players: "modes",
          autoplay: "autostart"
        };
    
        function b(n) {
          var m = n.toLowerCase();
          var l = ["left", "right", "top", "bottom"];
          for (var k = 0; k < l.length; k++) {
            if (m == l[k]) {
              return true
            }
          }
          return false
        }
    
        function c(l) {
          var k = false;
          k = (l instanceof Array) || (typeof l == "object" && !l.position && !l.size);
          return k
        }
    
        function j(k) {
          if (typeof k == "string") {
            if (parseInt(k).toString() == k || k.toLowerCase().indexOf("px") > -1) {
              return parseInt(k)
            }
          }
          return k
        }
        var g = ["playlist", "dock", "controlbar", "logo", "display"];
    
        function f(k) {
          var n = {};
          switch (e.utils.typeOf(k.plugins)) {
            case "object":
              for (var m in k.plugins) {
                n[e.utils.getPluginName(m)] = m
              }
              break;
            case "string":
              var o = k.plugins.split(",");
              for (var l = 0; l < o.length; l++) {
                n[e.utils.getPluginName(o[l])] = o[l]
              }
              break
          }
          return n
        }
    
        function d(o, n, m, k) {
          if (e.utils.typeOf(o[n]) != "object") {
            o[n] = {}
          }
          var l = o[n][m];
          if (e.utils.typeOf(l) != "object") {
            o[n][m] = l = {}
          }
          if (k) {
            if (n == "plugins") {
              var p = e.utils.getPluginName(m);
              l[k] = o[p + "." + k];
              delete o[p + "." + k]
            } else {
              l[k] = o[m + "." + k];
              delete o[m + "." + k]
            }
          }
        }
        e.embed.deserialize = function(l) {
          var m = f(l);
          for (var k in m) {
            d(l, "plugins", m[k])
          }
          for (var p in l) {
            if (p.indexOf(".") > -1) {
              var o = p.split(".");
              var n = o[0];
              var p = o[1];
              if (e.utils.isInArray(g, n)) {
                d(l, "components", n, p)
              } else {
                if (m[n]) {
                  d(l, "plugins", m[n], p)
                }
              }
            }
          }
          return l
        };
        e.embed.config = function(k, u) {
          var t = e.utils.extend({}, k);
          var r;
          if (c(t.playlist)) {
            r = t.playlist;
            delete t.playlist
          }
          t = e.embed.deserialize(t);
          t.height = j(t.height);
          t.width = j(t.width);
          if (typeof t.plugins == "string") {
            var l = t.plugins.split(",");
            if (typeof t.plugins != "object") {
              t.plugins = {}
            }
            for (var p = 0; p < l.length; p++) {
              var q = e.utils.getPluginName(l[p]);
              if (typeof t[q] == "object") {
                t.plugins[l[p]] = t[q];
                delete t[q]
              } else {
                t.plugins[l[p]] = {}
              }
            }
          }
          for (var s = 0; s < g.length; s++) {
            var o = g[s];
            if (e.utils.exists(t[o])) {
              if (typeof t[o] != "object") {
                if (!t.components[o]) {
                  t.components[o] = {}
                }
                if (o == "logo") {
                  t.components[o].file = t[o]
                } else {
                  t.components[o].position = t[o]
                }
                delete t[o]
              } else {
                if (!t.components[o]) {
                  t.components[o] = {}
                }
                e.utils.extend(t.components[o], t[o]);
                delete t[o]
              }
            }
            if (typeof t[o + "size"] != "undefined") {
              if (!t.components[o]) {
                t.components[o] = {}
              }
              t.components[o].size = t[o + "size"];
              delete t[o + "size"]
            }
          }
          if (typeof t.icons != "undefined") {
            if (!t.components.display) {
              t.components.display = {}
            }
            t.components.display.icons = t.icons;
            delete t.icons
          }
          for (var n in a) {
            if (t[n]) {
              if (!t[a[n]]) {
                t[a[n]] = t[n]
              }
              delete t[n]
            }
          }
          var m;
          if (t.flashplayer && !t.modes) {
            m = h();
            m[0].src = t.flashplayer;
            delete t.flashplayer
          } else {
            if (t.modes) {
              if (typeof t.modes == "string") {
                m = h();
                m[0].src = t.modes
              } else {
                if (t.modes instanceof Array) {
                  m = t.modes
                } else {
                  if (typeof t.modes == "object" && t.modes.type) {
                    m = [t.modes]
                  }
                }
              }
              delete t.modes
            } else {
              m = h()
            }
          }
          t.modes = m;
          if (r) {
            t.playlist = r
          }
          return t
        }
      })(jwplayer);
      (function(a) {
        a.embed.download = function(c, g, b, d, f) {
          this.embed = function() {
            var k = a.utils.extend({}, b);
            var q = {};
            var j = b.width ? b.width : 480;
            if (typeof j != "number") {
              j = parseInt(j, 10)
            }
            var m = b.height ? b.height : 320;
            if (typeof m != "number") {
              m = parseInt(m, 10)
            }
            var u, o, n;
            var s = {};
            if (b.playlist && b.playlist.length) {
              s.file = b.playlist[0].file;
              o = b.playlist[0].image;
              s.levels = b.playlist[0].levels
            } else {
              s.file = b.file;
              o = b.image;
              s.levels = b.levels
            } if (s.file) {
              u = s.file
            } else {
              if (s.levels && s.levels.length) {
                u = s.levels[0].file
              }
            }
            n = u ? "pointer" : "auto";
            var l = {
              display: {
                style: {
                  cursor: n,
                  width: j,
                  height: m,
                  backgroundColor: "#000",
                  position: "relative",
                  textDecoration: "none",
                  border: "none",
                  display: "block"
                }
              },
              display_icon: {
                style: {
                  cursor: n,
                  position: "absolute",
                  display: u ? "block" : "none",
                  top: 0,
                  left: 0,
                  border: 0,
                  margin: 0,
                  padding: 0,
                  zIndex: 3,
                  width: 50,
                  height: 50,
                  backgroundImage: "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg==)"
                }
              },
              display_iconBackground: {
                style: {
                  cursor: n,
                  position: "absolute",
                  display: u ? "block" : "none",
                  top: ((m - 50) / 2),
                  left: ((j - 50) / 2),
                  border: 0,
                  width: 50,
                  height: 50,
                  margin: 0,
                  padding: 0,
                  zIndex: 2,
                  backgroundImage: "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC)"
                }
              },
              display_image: {
                style: {
                  width: j,
                  height: m,
                  display: o ? "block" : "none",
                  position: "absolute",
                  cursor: n,
                  left: 0,
                  top: 0,
                  margin: 0,
                  padding: 0,
                  textDecoration: "none",
                  zIndex: 1,
                  border: "none"
                }
              }
            };
            var h = function(v, x, y) {
              var w = document.createElement(v);
              if (y) {
                w.id = y
              } else {
                w.id = c.id + "_jwplayer_" + x
              }
              a.utils.css(w, l[x].style);
              return w
            };
            q.display = h("a", "display", c.id);
            if (u) {
              q.display.setAttribute("href", a.utils.getAbsolutePath(u))
            }
            q.display_image = h("img", "display_image");
            q.display_image.setAttribute("alt", "Click to download...");
            if (o) {
              q.display_image.setAttribute("src", a.utils.getAbsolutePath(o))
            }
            if (true) {
              q.display_icon = h("div", "display_icon");
              q.display_iconBackground = h("div", "display_iconBackground");
              q.display.appendChild(q.display_image);
              q.display_iconBackground.appendChild(q.display_icon);
              q.display.appendChild(q.display_iconBackground)
            }
            _css = a.utils.css;
            _hide = function(v) {
              _css(v, {
                display: "none"
              })
            };
    
            function r(v) {
              _imageWidth = q.display_image.naturalWidth;
              _imageHeight = q.display_image.naturalHeight;
              t()
            }
    
            function t() {
              a.utils.stretch(a.utils.stretching.UNIFORM, q.display_image, j, m, _imageWidth, _imageHeight)
            }
            q.display_image.onerror = function(v) {
              _hide(q.display_image)
            };
            q.display_image.onload = r;
            c.parentNode.replaceChild(q.display, c);
            var p = (b.plugins && b.plugins.logo) ? b.plugins.logo : {};
            q.display.appendChild(new a.embed.logo(b.components.logo, "download", c.id));
            f.container = document.getElementById(f.id);
            f.setPlayer(q.display, "download")
          };
          this.supportsConfig = function() {
            if (b) {
              var j = a.utils.getFirstPlaylistItemFromConfig(b);
              if (typeof j.file == "undefined" && typeof j.levels == "undefined") {
                return true
              } else {
                if (j.file) {
                  return e(j.file, j.provider, j.playlistfile)
                } else {
                  if (j.levels && j.levels.length) {
                    for (var h = 0; h < j.levels.length; h++) {
                      if (j.levels[h].file && e(j.levels[h].file, j.provider, j.playlistfile)) {
                        return true
                      }
                    }
                  }
                }
              }
            } else {
              return true
            }
          };
    
          function e(j, l, h) {
            if (h) {
              return false
            }
            var k = ["image", "sound", "youtube", "http"];
            if (l && (k.toString().indexOf(l) > -1)) {
              return true
            }
            if (!l || (l && l == "video")) {
              var m = a.utils.extension(j);
              if (m && a.utils.extensionmap[m]) {
                return true
              }
            }
            return false
          }
        }
      })(jwplayer);
      (function(a) {
        a.embed.flash = function(f, g, l, e, j) {
          function m(o, n, p) {
            var q = document.createElement("param");
            q.setAttribute("name", n);
            q.setAttribute("value", p);
            o.appendChild(q)
          }
    
          function k(o, p, n) {
            return function(q) {
              if (n) {
                document.getElementById(j.id + "_wrapper").appendChild(p)
              }
              var s = document.getElementById(j.id).getPluginConfig("display");
              o.resize(s.width, s.height);
              var r = {
                left: s.x,
                top: s.y
              };
              a.utils.css(p, r)
            }
          }
    
          function d(p) {
            if (!p) {
              return {}
            }
            var r = {};
            for (var o in p) {
              var n = p[o];
              for (var q in n) {
                r[o + "." + q] = n[q]
              }
            }
            return r
          }
    
          function h(q, p) {
            if (q[p]) {
              var s = q[p];
              for (var o in s) {
                var n = s[o];
                if (typeof n == "string") {
                  if (!q[o]) {
                    q[o] = n
                  }
                } else {
                  for (var r in n) {
                    if (!q[o + "." + r]) {
                      q[o + "." + r] = n[r]
                    }
                  }
                }
              }
              delete q[p]
            }
          }
    
          function b(q) {
            if (!q) {
              return {}
            }
            var t = {}, s = [];
            for (var n in q) {
              var p = a.utils.getPluginName(n);
              var o = q[n];
              s.push(n);
              for (var r in o) {
                t[p + "." + r] = o[r]
              }
            }
            t.plugins = s.join(",");
            return t
          }
    
          function c(p) {
            var n = p.netstreambasepath ? "" : "netstreambasepath=" + encodeURIComponent(window.location.href.split("#")[0]) + "&";
            for (var o in p) {
              if (typeof(p[o]) == "object") {
                n += o + "=" + encodeURIComponent("[[JSON]]" + a.utils.strings.jsonToString(p[o])) + "&"
              } else {
                n += o + "=" + encodeURIComponent(p[o]) + "&"
              }
            }
            return n.substring(0, n.length - 1)
          }
          this.embed = function() {
            l.id = j.id;
            var y;
            var q = a.utils.extend({}, l);
            var n = q.width;
            var w = q.height;
            if (f.id + "_wrapper" == f.parentNode.id) {
              y = document.getElementById(f.id + "_wrapper")
            } else {
              y = document.createElement("div");
              y.id = f.id + "_wrapper";
              a.utils.wrap(f, y);
              a.utils.css(y, {
                position: "relative",
                width: n,
                height: w
              })
            }
            var o = e.setupPlugins(j, q, k);
            if (o.length > 0) {
              a.utils.extend(q, b(o.plugins))
            } else {
              delete q.plugins
            }
            var r = ["height", "width", "modes", "events"];
            for (var u = 0; u < r.length; u++) {
              delete q[r[u]]
            }
            var p = "opaque";
            if (q.wmode) {
              p = q.wmode
            }
            h(q, "components");
            h(q, "providers");
            if (typeof q["dock.position"] != "undefined") {
              if (q["dock.position"].toString().toLowerCase() == "false") {
                q.dock = q["dock.position"];
                delete q["dock.position"]
              }
            }
            var x = "#000000";
            var t;
            if (a.utils.isIE()) {
              var v = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" bgcolor="' + x + '" width="100%" height="100%" id="' + f.id + '" name="' + f.id + '" tabindex=0"">';
              v += '<param name="movie" value="' + g.src + '">';
              v += '<param name="allowfullscreen" value="true">';
              v += '<param name="allowscriptaccess" value="always">';
              v += '<param name="seamlesstabbing" value="true">';
              v += '<param name="wmode" value="' + p + '">';
              v += '<param name="flashvars" value="' + c(q) + '">';
              v += "</object>";
              a.utils.setOuterHTML(f, v);
              t = document.getElementById(f.id)
            } else {
              var s = document.createElement("object");
              s.setAttribute("type", "application/x-shockwave-flash");
              s.setAttribute("data", g.src);
              s.setAttribute("width", "100%");
              s.setAttribute("height", "100%");
              s.setAttribute("bgcolor", "#000000");
              s.setAttribute("id", f.id);
              s.setAttribute("name", f.id);
              s.setAttribute("tabindex", 0);
              m(s, "allowfullscreen", "true");
              m(s, "allowscriptaccess", "always");
              m(s, "seamlesstabbing", "true");
              m(s, "wmode", p);
              m(s, "flashvars", c(q));
              f.parentNode.replaceChild(s, f);
              t = s
            }
            j.container = t;
            j.setPlayer(t, "flash")
          };
          this.supportsConfig = function() {
            if (a.utils.hasFlash()) {
              if (l) {
                var o = a.utils.getFirstPlaylistItemFromConfig(l);
                if (typeof o.file == "undefined" && typeof o.levels == "undefined") {
                  return true
                } else {
                  if (o.file) {
                    return flashCanPlay(o.file, o.provider)
                  } else {
                    if (o.levels && o.levels.length) {
                      for (var n = 0; n < o.levels.length; n++) {
                        if (o.levels[n].file && flashCanPlay(o.levels[n].file, o.provider)) {
                          return true
                        }
                      }
                    }
                  }
                }
              } else {
                return true
              }
            }
            return false
          };
          flashCanPlay = function(n, p) {
            var o = ["video", "http", "sound", "image"];
            if (p && (o.toString().indexOf(p < 0))) {
              return true
            }
            var q = a.utils.extension(n);
            if (!q) {
              return true
            }
            if (a.utils.exists(a.utils.extensionmap[q]) && !a.utils.exists(a.utils.extensionmap[q].flash)) {
              return false
            }
            return true
          }
        }
      })(jwplayer);
      (function(a) {
        a.embed.html5 = function(c, g, b, d, f) {
          function e(j, k, h) {
            return function(l) {
              var m = document.getElementById(c.id + "_displayarea");
              if (h) {
                m.appendChild(k)
              }
              var n = m.style;
              j.resize(parseInt(n.width.replace("px", "")), parseInt(n.height.replace("px", "")));
              k.left = n.left;
              k.top = n.top
            }
          }
          this.embed = function() {
            if (a.html5) {
              d.setupPlugins(f, b, e);
              c.innerHTML = "";
              var j = a.utils.extend({
                screencolor: "0x000000"
              }, b);
              var h = ["plugins", "modes", "events"];
              for (var k = 0; k < h.length; k++) {
                delete j[h[k]]
              }
              if (j.levels && !j.sources) {
                j.sources = b.levels
              }
              if (j.skin && j.skin.toLowerCase().indexOf(".zip") > 0) {
                j.skin = j.skin.replace(/\.zip/i, ".xml")
              }
              var l = new(a.html5(c)).setup(j);
              f.container = document.getElementById(f.id);
              f.setPlayer(l, "html5")
            } else {
              return null
            }
          };
          this.supportsConfig = function() {
            if ( !! a.vid.canPlayType) {
              if (b) {
                var j = a.utils.getFirstPlaylistItemFromConfig(b);
                if (typeof j.file == "undefined" && typeof j.levels == "undefined") {
                  return true
                } else {
                  if (j.file) {
                    return html5CanPlay(a.vid, j.file, j.provider, j.playlistfile)
                  } else {
                    if (j.levels && j.levels.length) {
                      for (var h = 0; h < j.levels.length; h++) {
                        if (j.levels[h].file && html5CanPlay(a.vid, j.levels[h].file, j.provider, j.playlistfile)) {
                          return true
                        }
                      }
                    }
                  }
                }
              } else {
                return true
              }
            }
            return false
          };
          html5CanPlay = function(k, j, l, h) {
            if (h) {
              return false
            }
            if (l && l == "youtube") {
              return true
            }
            if (l && l != "video" && l != "http" && l != "sound") {
              return false
            }
            var m = a.utils.extension(j);
            if (!a.utils.exists(m) || !a.utils.exists(a.utils.extensionmap[m])) {
              return true
            }
            if (!a.utils.exists(a.utils.extensionmap[m].html5)) {
              return false
            }
            if (a.utils.isLegacyAndroid() && m.match(/m4v|mp4/)) {
              return true
            }
            return browserCanPlay(k, a.utils.extensionmap[m].html5)
          };
          browserCanPlay = function(j, h) {
            if (!h) {
              return true
            }
            if (j.canPlayType(h)) {
              return true
            } else {
              if (h == "audio/mp3" && navigator.userAgent.match(/safari/i)) {
                return j.canPlayType("audio/mpeg")
              } else {
                return false
              }
            }
          }
        }
      })(jwplayer);
      (function(a) {
        a.embed.logo = function(m, l, d) {
          var j = {
            prefix: "http://l.longtailvideo.com/" + l + "/",
            file: "logo.png",
            link: "http://www.longtailvideo.com/players/jw-flv-player/",
            margin: 8,
            out: 0.5,
            over: 1,
            timeout: 5,
            hide: false,
            position: "bottom-left"
          };
          _css = a.utils.css;
          var b;
          var h;
          k();
    
          function k() {
            o();
            c();
            f()
          }
    
          function o() {
            if (j.prefix) {
              var q = a.version.split(/\W/).splice(0, 2).join("/");
              if (j.prefix.indexOf(q) < 0) {
                j.prefix += q + "/"
              }
            }
            h = a.utils.extend({}, j)
          }
    
          function p() {
            var s = {
              border: "none",
              textDecoration: "none",
              position: "absolute",
              cursor: "pointer",
              zIndex: 10
            };
            s.display = h.hide ? "none" : "block";
            var r = h.position.toLowerCase().split("-");
            for (var q in r) {
              s[r[q]] = h.margin
            }
            return s
          }
    
          function c() {
            b = document.createElement("img");
            b.id = d + "_jwplayer_logo";
            b.style.display = "none";
            b.onload = function(q) {
              _css(b, p());
              e()
            };
            if (!h.file) {
              return
            }
            if (h.file.indexOf("http://") === 0) {
              b.src = h.file
            } else {
              b.src = h.prefix + h.file
            }
          }
          if (!h.file) {
            return
          }
    
          function f() {
            if (h.link) {
              b.onmouseover = g;
              b.onmouseout = e;
              b.onclick = n
            } else {
              this.mouseEnabled = false
            }
          }
    
          function n(q) {
            if (typeof q != "undefined") {
              q.preventDefault();
              q.stopPropagation()
            }
            if (h.link) {
              window.open(h.link, "_blank")
            }
            return
          }
    
          function e(q) {
            if (h.link) {
              b.style.opacity = h.out
            }
            return
          }
    
          function g(q) {
            if (h.hide) {
              b.style.opacity = h.over
            }
            return
          }
          return b
        }
      })(jwplayer);
      (function(a) {
        a.html5 = function(b) {
          var c = b;
          this.setup = function(d) {
            a.utils.extend(this, new a.html5.api(c, d));
            return this
          };
          return this
        }
      })(jwplayer);
      (function(b) {
        var d = b.utils;
        var c = d.css;
        b.html5.view = function(r, q, f) {
          var u = r;
          var n = q;
          var x = f;
          var w;
          var g;
          var C;
          var s;
          var D;
          var p;
          var A;
    
          function z() {
            w = document.createElement("div");
            w.id = n.id;
            w.className = n.className;
            _videowrapper = document.createElement("div");
            _videowrapper.id = w.id + "_video_wrapper";
            n.id = w.id + "_video";
            c(w, {
              position: "relative",
              height: x.height,
              width: x.width,
              padding: 0,
              backgroundColor: E(),
              zIndex: 0
            });
    
            function E() {
              if (u.skin.getComponentSettings("display") && u.skin.getComponentSettings("display").backgroundcolor) {
                return u.skin.getComponentSettings("display").backgroundcolor
              }
              return parseInt("000000", 16)
            }
            c(n, {
              width: x.width,
              height: x.height,
              top: 0,
              left: 0,
              zIndex: 1,
              margin: "auto",
              display: "block"
            });
            c(_videowrapper, {
              overflow: "hidden",
              position: "absolute",
              top: 0,
              left: 0,
              bottom: 0,
              right: 0
            });
            d.wrap(n, w);
            d.wrap(n, _videowrapper);
            s = document.createElement("div");
            s.id = w.id + "_displayarea";
            w.appendChild(s)
          }
    
          function k() {
            for (var E = 0; E < x.plugins.order.length; E++) {
              var F = x.plugins.order[E];
              if (d.exists(x.plugins.object[F].getDisplayElement)) {
                x.plugins.object[F].height = d.parseDimension(x.plugins.object[F].getDisplayElement().style.height);
                x.plugins.object[F].width = d.parseDimension(x.plugins.object[F].getDisplayElement().style.width);
                x.plugins.config[F].currentPosition = x.plugins.config[F].position
              }
            }
            v()
          }
    
          function m(E) {
            c(s, {
              display: x.getMedia().hasChrome() ? "none" : "block"
            })
          }
    
          function v(F) {
            var H = x.getMedia() ? x.getMedia().getDisplayElement() : null;
            if (d.exists(H)) {
              if (A != H) {
                if (A && A.parentNode) {
                  A.parentNode.replaceChild(H, A)
                }
                A = H
              }
              for (var E = 0; E < x.plugins.order.length; E++) {
                var G = x.plugins.order[E];
                if (d.exists(x.plugins.object[G].getDisplayElement)) {
                  x.plugins.config[G].currentPosition = x.plugins.config[G].position
                }
              }
            }
            j(x.width, x.height)
          }
          this.setup = function() {
            if (x && x.getMedia()) {
              n = x.getMedia().getDisplayElement()
            }
            z();
            k();
            u.jwAddEventListener(b.api.events.JWPLAYER_PLAYER_STATE, m);
            u.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_LOADED, v);
            u.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_META, function() {
              y()
            });
            var E;
            if (d.exists(window.onresize)) {
              E = window.onresize
            }
            window.onresize = function(F) {
              if (d.exists(E)) {
                try {
                  E(F)
                } catch (H) {}
              }
              if (u.jwGetFullscreen()) {
                var G = document.body.getBoundingClientRect();
                x.width = Math.abs(G.left) + Math.abs(G.right);
                x.height = window.innerHeight
              }
              j(x.width, x.height)
            }
          };
    
          function h(E) {
            switch (E.keyCode) {
              case 27:
                if (u.jwGetFullscreen()) {
                  u.jwSetFullscreen(false)
                }
                break;
              case 32:
                if (u.jwGetState() != b.api.events.state.IDLE && u.jwGetState() != b.api.events.state.PAUSED) {
                  u.jwPause()
                } else {
                  u.jwPlay()
                }
                break
            }
          }
    
          function j(H, E) {
            if (w.style.display == "none") {
              return
            }
            var G = [].concat(x.plugins.order);
            G.reverse();
            D = G.length + 2;
            if (!x.fullscreen) {
              x.width = H;
              x.height = E;
              g = H;
              C = E;
              c(s, {
                top: 0,
                bottom: 0,
                left: 0,
                right: 0,
                width: H,
                height: E,
                position: "relative"
              });
              c(w, {
                height: C,
                width: g
              });
              var F = o(t, G);
              if (F.length > 0) {
                D += F.length;
                var J = F.indexOf("playlist"),
                  I = F.indexOf("controlbar");
                if (J >= 0 && I >= 0) {
                  F[J] = F.splice(I, 1, F[J])[0]
                }
                o(l, F, true)
              }
            } else {
              if (!(navigator && navigator.vendor && navigator.vendor.indexOf("Apple") == 0)) {
                o(B, G, true)
              }
            }
            y()
          }
    
          function o(J, G, H) {
            var F = [];
            for (var E = 0; E < G.length; E++) {
              var K = G[E];
              if (d.exists(x.plugins.object[K].getDisplayElement)) {
                if (x.plugins.config[K].currentPosition != b.html5.view.positions.NONE) {
                  var I = J(K, D--);
                  if (!I) {
                    F.push(K)
                  } else {
                    x.plugins.object[K].resize(I.width, I.height);
                    if (H) {
                      delete I.width;
                      delete I.height
                    }
                    c(x.plugins.object[K].getDisplayElement(), I)
                  }
                } else {
                  c(x.plugins.object[K].getDisplayElement(), {
                    display: "none"
                  })
                }
              }
            }
            return F
          }
    
          function t(F, G) {
            if (d.exists(x.plugins.object[F].getDisplayElement)) {
              if (x.plugins.config[F].position && a(x.plugins.config[F].position)) {
                if (!d.exists(x.plugins.object[F].getDisplayElement().parentNode)) {
                  w.appendChild(x.plugins.object[F].getDisplayElement())
                }
                var E = e(F);
                E.zIndex = G;
                return E
              }
            }
            return false
          }
    
          function l(G, H) {
            if (!d.exists(x.plugins.object[G].getDisplayElement().parentNode)) {
              s.appendChild(x.plugins.object[G].getDisplayElement())
            }
            var E = x.width,
              F = x.height;
            if (typeof x.width == "string" && x.width.lastIndexOf("%") > -1) {
              percentage = parseFloat(x.width.substring(0, x.width.lastIndexOf("%"))) / 100;
              E = Math.round(window.innerWidth * percentage)
            }
            if (typeof x.height == "string" && x.height.lastIndexOf("%") > -1) {
              percentage = parseFloat(x.height.substring(0, x.height.lastIndexOf("%"))) / 100;
              F = Math.round(window.innerHeight * percentage)
            }
            return {
              position: "absolute",
              width: (E - d.parseDimension(s.style.left) - d.parseDimension(s.style.right)),
              height: (F - d.parseDimension(s.style.top) - d.parseDimension(s.style.bottom)),
              zIndex: H
            }
          }
    
          function B(E, F) {
            return {
              position: "fixed",
              width: x.width,
              height: x.height,
              zIndex: F
            }
          }
    
          function y() {
            if (!d.exists(x.getMedia())) {
              return
            }
            s.style.position = "absolute";
            var H = x.getMedia().getDisplayElement();
            if (H && H.tagName.toLowerCase() == "video") {
              H.style.position = "absolute";
              var E, I;
              if (s.style.width.toString().lastIndexOf("%") > -1 || s.style.width.toString().lastIndexOf("%") > -1) {
                var F = s.getBoundingClientRect();
                E = Math.abs(F.left) + Math.abs(F.right);
                I = Math.abs(F.top) + Math.abs(F.bottom)
              } else {
                E = d.parseDimension(s.style.width);
                I = d.parseDimension(s.style.height)
              } if (H.parentNode) {
                H.parentNode.style.left = s.style.left;
                H.parentNode.style.top = s.style.top
              }
              d.stretch(u.jwGetStretching(), H, E, I, H.videoWidth ? H.videoWidth : 400, H.videoHeight ? H.videoHeight : 300)
            } else {
              var G = x.plugins.object.display.getDisplayElement();
              if (G) {
                x.getMedia().resize(d.parseDimension(G.style.width), d.parseDimension(G.style.height))
              } else {
                x.getMedia().resize(d.parseDimension(s.style.width), d.parseDimension(s.style.height))
              }
            }
          }
    
          function e(F) {
            var G = {
              position: "absolute",
              margin: 0,
              padding: 0,
              top: null
            };
            var E = x.plugins.config[F].currentPosition.toLowerCase();
            switch (E.toUpperCase()) {
              case b.html5.view.positions.TOP:
                G.top = d.parseDimension(s.style.top);
                G.left = d.parseDimension(s.style.left);
                G.width = g - d.parseDimension(s.style.left) - d.parseDimension(s.style.right);
                G.height = x.plugins.object[F].height;
                s.style[E] = d.parseDimension(s.style[E]) + x.plugins.object[F].height + "px";
                s.style.height = d.parseDimension(s.style.height) - G.height + "px";
                break;
              case b.html5.view.positions.RIGHT:
                G.top = d.parseDimension(s.style.top);
                G.right = d.parseDimension(s.style.right);
                G.width = x.plugins.object[F].width;
                G.height = C - d.parseDimension(s.style.top) - d.parseDimension(s.style.bottom);
                s.style[E] = d.parseDimension(s.style[E]) + x.plugins.object[F].width + "px";
                s.style.width = d.parseDimension(s.style.width) - G.width + "px";
                break;
              case b.html5.view.positions.BOTTOM:
                G.bottom = d.parseDimension(s.style.bottom);
                G.left = d.parseDimension(s.style.left);
                G.width = g - d.parseDimension(s.style.left) - d.parseDimension(s.style.right);
                G.height = x.plugins.object[F].height;
                s.style[E] = d.parseDimension(s.style[E]) + x.plugins.object[F].height + "px";
                s.style.height = d.parseDimension(s.style.height) - G.height + "px";
                break;
              case b.html5.view.positions.LEFT:
                G.top = d.parseDimension(s.style.top);
                G.left = d.parseDimension(s.style.left);
                G.width = x.plugins.object[F].width;
                G.height = C - d.parseDimension(s.style.top) - d.parseDimension(s.style.bottom);
                s.style[E] = d.parseDimension(s.style[E]) + x.plugins.object[F].width + "px";
                s.style.width = d.parseDimension(s.style.width) - G.width + "px";
                break;
              default:
                break
            }
            return G
          }
          this.resize = j;
          this.fullscreen = function(H) {
            if (navigator && navigator.vendor && navigator.vendor.indexOf("Apple") === 0) {
              if (x.getMedia().getDisplayElement().webkitSupportsFullscreen) {
                if (H) {
                  try {
                    x.getMedia().getDisplayElement().webkitEnterFullscreen()
                  } catch (G) {}
                } else {
                  try {
                    x.getMedia().getDisplayElement().webkitExitFullscreen()
                  } catch (G) {}
                }
              }
            } else {
              if (H) {
                document.onkeydown = h;
                clearInterval(p);
                var F = document.body.getBoundingClientRect();
                x.width = Math.abs(F.left) + Math.abs(F.right);
                x.height = window.innerHeight;
                var E = {
                  position: "fixed",
                  width: "100%",
                  height: "100%",
                  top: 0,
                  left: 0,
                  zIndex: 2147483000
                };
                c(w, E);
                E.zIndex = 1;
                if (x.getMedia() && x.getMedia().getDisplayElement()) {
                  c(x.getMedia().getDisplayElement(), E)
                }
                E.zIndex = 2;
                c(s, E)
              } else {
                document.onkeydown = "";
                x.width = g;
                x.height = C;
                c(w, {
                  position: "relative",
                  height: x.height,
                  width: x.width,
                  zIndex: 0
                })
              }
              j(x.width, x.height)
            }
          }
        };
    
        function a(e) {
          return ([b.html5.view.positions.TOP, b.html5.view.positions.RIGHT, b.html5.view.positions.BOTTOM, b.html5.view.positions.LEFT].toString().indexOf(e.toUpperCase()) > -1)
        }
        b.html5.view.positions = {
          TOP: "TOP",
          RIGHT: "RIGHT",
          BOTTOM: "BOTTOM",
          LEFT: "LEFT",
          OVER: "OVER",
          NONE: "NONE"
        }
      })(jwplayer);
      (function(a) {
        var b = {
          backgroundcolor: "",
          margin: 10,
          font: "Arial,sans-serif",
          fontsize: 10,
          fontcolor: parseInt("000000", 16),
          fontstyle: "normal",
          fontweight: "bold",
          buttoncolor: parseInt("ffffff", 16),
          position: a.html5.view.positions.BOTTOM,
          idlehide: false,
          layout: {
            left: {
              position: "left",
              elements: [{
                name: "play",
                type: "button"
              }, {
                name: "divider",
                type: "divider"
              }, {
                name: "prev",
                type: "button"
              }, {
                name: "divider",
                type: "divider"
              }, {
                name: "next",
                type: "button"
              }, {
                name: "divider",
                type: "divider"
              }, {
                name: "elapsed",
                type: "text"
              }]
            },
            center: {
              position: "center",
              elements: [{
                name: "time",
                type: "slider"
              }]
            },
            right: {
              position: "right",
              elements: [{
                name: "duration",
                type: "text"
              }, {
                name: "blank",
                type: "button"
              }, {
                name: "divider",
                type: "divider"
              }, {
                name: "mute",
                type: "button"
              }, {
                name: "volume",
                type: "slider"
              }, {
                name: "divider",
                type: "divider"
              }, {
                name: "fullscreen",
                type: "button"
              }]
            }
          }
        };
        _utils = a.utils;
        _css = _utils.css;
        _hide = function(c) {
          _css(c, {
            display: "none"
          })
        };
        _show = function(c) {
          _css(c, {
            display: "block"
          })
        };
        a.html5.controlbar = function(l, V) {
          var k = l;
          var D = _utils.extend({}, b, k.skin.getComponentSettings("controlbar"), V);
          if (D.position == a.html5.view.positions.NONE || typeof a.html5.view.positions[D.position] == "undefined") {
            return
          }
          if (_utils.mapLength(k.skin.getComponentLayout("controlbar")) > 0) {
            D.layout = k.skin.getComponentLayout("controlbar")
          }
          var ac;
          var P;
          var ab;
          var E;
          var v = "none";
          var g;
          var j;
          var ad;
          var f;
          var e;
          var y;
          var Q = {};
          var p = false;
          var c = {};
          var Y;
          var h = false;
          var o;
          var d;
          var S = false;
          var G = false;
          var W = new a.html5.eventdispatcher();
          _utils.extend(this, W);
    
          function J() {
            if (!Y) {
              Y = k.skin.getSkinElement("controlbar", "background");
              if (!Y) {
                Y = {
                  width: 0,
                  height: 0,
                  src: null
                }
              }
            }
            return Y
          }
    
          function N() {
            ab = 0;
            E = 0;
            P = 0;
            if (!p) {
              var ak = {
                height: J().height,
                backgroundColor: D.backgroundcolor
              };
              ac = document.createElement("div");
              ac.id = k.id + "_jwplayer_controlbar";
              _css(ac, ak)
            }
            var aj = (k.skin.getSkinElement("controlbar", "capLeft"));
            var ai = (k.skin.getSkinElement("controlbar", "capRight"));
            if (aj) {
              x("capLeft", "left", false, ac)
            }
            var al = {
              position: "absolute",
              height: J().height,
              left: (aj ? aj.width : 0),
              zIndex: 0
            };
            Z("background", ac, al, "img");
            if (J().src) {
              Q.background.src = J().src
            }
            al.zIndex = 1;
            Z("elements", ac, al);
            if (ai) {
              x("capRight", "right", false, ac)
            }
          }
          this.getDisplayElement = function() {
            return ac
          };
          this.resize = function(ak, ai) {
            _utils.cancelAnimation(ac);
            document.getElementById(k.id).onmousemove = A;
            e = ak;
            y = ai;
            if (G != k.jwGetFullscreen()) {
              G = k.jwGetFullscreen();
              d = undefined
            }
            var aj = w();
            A();
            I({
              id: k.id,
              duration: ad,
              position: j
            });
            u({
              id: k.id,
              bufferPercent: f
            });
            return aj
          };
          this.show = function() {
            if (h) {
              h = false;
              _show(ac);
              T()
            }
          };
          this.hide = function() {
            if (!h) {
              h = true;
              _hide(ac);
              aa()
            }
          };
    
          function q() {
            var aj = ["timeSlider", "volumeSlider", "timeSliderRail", "volumeSliderRail"];
            for (var ak in aj) {
              var ai = aj[ak];
              if (typeof Q[ai] != "undefined") {
                c[ai] = Q[ai].getBoundingClientRect()
              }
            }
          }
    
          function A(ai) {
            if (h) {
              return
            }
            if (D.position == a.html5.view.positions.OVER || k.jwGetFullscreen()) {
              clearTimeout(o);
              switch (k.jwGetState()) {
                case a.api.events.state.PAUSED:
                case a.api.events.state.IDLE:
                  if (!D.idlehide || _utils.exists(ai)) {
                    U()
                  }
                  if (D.idlehide) {
                    o = setTimeout(function() {
                      z()
                    }, 2000)
                  }
                  break;
                default:
                  if (ai) {
                    U()
                  }
                  o = setTimeout(function() {
                    z()
                  }, 2000);
                  break
              }
            }
          }
    
          function z(ai) {
            aa();
            _utils.cancelAnimation(ac);
            _utils.fadeTo(ac, 0, 0.1, 1, 0)
          }
    
          function U() {
            T();
            _utils.cancelAnimation(ac);
            _utils.fadeTo(ac, 1, 0, 1, 0)
          }
    
          function H(ai) {
            return function() {
              if (S && d != ai) {
                d = ai;
                W.sendEvent(ai, {
                  component: "controlbar",
                  boundingRect: O()
                })
              }
            }
          }
          var T = H(a.api.events.JWPLAYER_COMPONENT_SHOW);
          var aa = H(a.api.events.JWPLAYER_COMPONENT_HIDE);
    
          function O() {
            if (D.position == a.html5.view.positions.OVER || k.jwGetFullscreen()) {
              return _utils.getDimensions(ac)
            } else {
              return {
                x: 0,
                y: 0,
                width: 0,
                height: 0
              }
            }
          }
    
          function Z(am, al, ak, ai) {
            var aj;
            if (!p) {
              if (!ai) {
                ai = "div"
              }
              aj = document.createElement(ai);
              Q[am] = aj;
              aj.id = ac.id + "_" + am;
              al.appendChild(aj)
            } else {
              aj = document.getElementById(ac.id + "_" + am)
            } if (_utils.exists(ak)) {
              _css(aj, ak)
            }
            return aj
          }
    
          function M() {
            ah(D.layout.left);
            ah(D.layout.right, -1);
            ah(D.layout.center)
          }
    
          function ah(al, ai) {
            var am = al.position == "right" ? "right" : "left";
            var ak = _utils.extend([], al.elements);
            if (_utils.exists(ai)) {
              ak.reverse()
            }
            for (var aj = 0; aj < ak.length; aj++) {
              C(ak[aj], am)
            }
          }
    
          function K() {
            return P++
          }
    
          function C(am, ao) {
            var al, aj, ak, ai, aq;
            if (am.type == "divider") {
              x("divider" + K(), ao, true, undefined, undefined, am.width, am.element);
              return
            }
            switch (am.name) {
              case "play":
                x("playButton", ao, false);
                x("pauseButton", ao, true);
                R("playButton", "jwPlay");
                R("pauseButton", "jwPause");
                break;
              case "prev":
                x("prevButton", ao, true);
                R("prevButton", "jwPlaylistPrev");
                break;
              case "stop":
                x("stopButton", ao, true);
                R("stopButton", "jwStop");
                break;
              case "next":
                x("nextButton", ao, true);
                R("nextButton", "jwPlaylistNext");
                break;
              case "elapsed":
                x("elapsedText", ao, true);
                break;
              case "time":
                aj = !_utils.exists(k.skin.getSkinElement("controlbar", "timeSliderCapLeft")) ? 0 : k.skin.getSkinElement("controlbar", "timeSliderCapLeft").width;
                ak = !_utils.exists(k.skin.getSkinElement("controlbar", "timeSliderCapRight")) ? 0 : k.skin.getSkinElement("controlbar", "timeSliderCapRight").width;
                al = ao == "left" ? aj : ak;
                ai = k.skin.getSkinElement("controlbar", "timeSliderRail").width + aj + ak;
                aq = {
                  height: J().height,
                  position: "absolute",
                  top: 0,
                  width: ai
                };
                aq[ao] = ao == "left" ? ab : E;
                var an = Z("timeSlider", Q.elements, aq);
                x("timeSliderCapLeft", ao, true, an, ao == "left" ? 0 : al);
                x("timeSliderRail", ao, false, an, al);
                x("timeSliderBuffer", ao, false, an, al);
                x("timeSliderProgress", ao, false, an, al);
                x("timeSliderThumb", ao, false, an, al);
                x("timeSliderCapRight", ao, true, an, ao == "right" ? 0 : al);
                X("time");
                break;
              case "fullscreen":
                x("fullscreenButton", ao, false);
                x("normalscreenButton", ao, true);
                R("fullscreenButton", "jwSetFullscreen", true);
                R("normalscreenButton", "jwSetFullscreen", false);
                break;
              case "volume":
                aj = !_utils.exists(k.skin.getSkinElement("controlbar", "volumeSliderCapLeft")) ? 0 : k.skin.getSkinElement("controlbar", "volumeSliderCapLeft").width;
                ak = !_utils.exists(k.skin.getSkinElement("controlbar", "volumeSliderCapRight")) ? 0 : k.skin.getSkinElement("controlbar", "volumeSliderCapRight").width;
                al = ao == "left" ? aj : ak;
                ai = k.skin.getSkinElement("controlbar", "volumeSliderRail").width + aj + ak;
                aq = {
                  height: J().height,
                  position: "absolute",
                  top: 0,
                  width: ai
                };
                aq[ao] = ao == "left" ? ab : E;
                var ap = Z("volumeSlider", Q.elements, aq);
                x("volumeSliderCapLeft", ao, true, ap, ao == "left" ? 0 : al);
                x("volumeSliderRail", ao, true, ap, al);
                x("volumeSliderProgress", ao, false, ap, al);
                x("volumeSliderCapRight", ao, true, ap, ao == "right" ? 0 : al);
                X("volume");
                break;
              case "mute":
                x("muteButton", ao, false);
                x("unmuteButton", ao, true);
                R("muteButton", "jwSetMute", true);
                R("unmuteButton", "jwSetMute", false);
                break;
              case "duration":
                x("durationText", ao, true);
                break
            }
          }
    
          function x(al, ao, aj, ar, am, ai, ak) {
            if (_utils.exists(k.skin.getSkinElement("controlbar", al)) || al.indexOf("Text") > 0 || al.indexOf("divider") === 0) {
              var an = {
                height: J().height,
                position: "absolute",
                display: "block",
                top: 0
              };
              if ((al.indexOf("next") === 0 || al.indexOf("prev") === 0) && k.jwGetPlaylist().length < 2) {
                aj = false;
                an.display = "none"
              }
              var at;
              if (al.indexOf("Text") > 0) {
                al.innerhtml = "00:00";
                an.font = D.fontsize + "px/" + (J().height + 1) + "px " + D.font;
                an.color = D.fontcolor;
                an.textAlign = "center";
                an.fontWeight = D.fontweight;
                an.fontStyle = D.fontstyle;
                an.cursor = "default";
                at = 14 + 3 * D.fontsize
              } else {
                if (al.indexOf("divider") === 0) {
                  if (ai) {
                    if (!isNaN(parseInt(ai))) {
                      at = parseInt(ai)
                    }
                  } else {
                    if (ak) {
                      var ap = k.skin.getSkinElement("controlbar", ak);
                      if (ap) {
                        an.background = "url(" + ap.src + ") repeat-x center left";
                        at = ap.width
                      }
                    } else {
                      an.background = "url(" + k.skin.getSkinElement("controlbar", "divider").src + ") repeat-x center left";
                      at = k.skin.getSkinElement("controlbar", "divider").width
                    }
                  }
                } else {
                  an.background = "url(" + k.skin.getSkinElement("controlbar", al).src + ") repeat-x center left";
                  at = k.skin.getSkinElement("controlbar", al).width
                }
              } if (ao == "left") {
                an.left = isNaN(am) ? ab : am;
                if (aj) {
                  ab += at
                }
              } else {
                if (ao == "right") {
                  an.right = isNaN(am) ? E : am;
                  if (aj) {
                    E += at
                  }
                }
              } if (_utils.typeOf(ar) == "undefined") {
                ar = Q.elements
              }
              an.width = at;
              if (p) {
                _css(Q[al], an)
              } else {
                var aq = Z(al, ar, an);
                if (_utils.exists(k.skin.getSkinElement("controlbar", al + "Over"))) {
                  aq.onmouseover = function(au) {
                    aq.style.backgroundImage = ["url(", k.skin.getSkinElement("controlbar", al + "Over").src, ")"].join("")
                  };
                  aq.onmouseout = function(au) {
                    aq.style.backgroundImage = ["url(", k.skin.getSkinElement("controlbar", al).src, ")"].join("")
                  }
                }
              }
            }
          }
    
          function F() {
            k.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED, B);
            k.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM, s);
            k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_BUFFER, u);
            k.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE, r);
            k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_TIME, I);
            k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE, ag);
            k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_VOLUME, m);
            k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_COMPLETE, L)
          }
    
          function B() {
            N();
            M();
            w();
            ae()
          }
    
          function s(ai) {
            ad = k.jwGetPlaylist()[ai.index].duration;
            I({
              id: k.id,
              duration: ad,
              position: 0
            });
            u({
              id: k.id,
              bufferProgress: 0
            })
          }
    
          function ae() {
            I({
              id: k.id,
              duration: k.jwGetDuration(),
              position: 0
            });
            u({
              id: k.id,
              bufferProgress: 0
            });
            ag({
              id: k.id,
              mute: k.jwGetMute()
            });
            r({
              id: k.id,
              newstate: a.api.events.state.IDLE
            });
            m({
              id: k.id,
              volume: k.jwGetVolume()
            })
          }
    
          function R(ak, al, aj) {
            if (p) {
              return
            }
            if (_utils.exists(k.skin.getSkinElement("controlbar", ak))) {
              var ai = Q[ak];
              if (_utils.exists(ai)) {
                _css(ai, {
                  cursor: "pointer"
                });
                if (al == "fullscreen") {
                  ai.onmouseup = function(am) {
                    am.stopPropagation();
                    k.jwSetFullscreen(!k.jwGetFullscreen())
                  }
                } else {
                  ai.onmouseup = function(am) {
                    am.stopPropagation();
                    if (_utils.exists(aj)) {
                      k[al](aj)
                    } else {
                      k[al]()
                    }
                  }
                }
              }
            }
          }
    
          function X(ai) {
            if (p) {
              return
            }
            var aj = Q[ai + "Slider"];
            _css(Q.elements, {
              cursor: "pointer"
            });
            _css(aj, {
              cursor: "pointer"
            });
            aj.onmousedown = function(ak) {
              v = ai
            };
            aj.onmouseup = function(ak) {
              ak.stopPropagation();
              af(ak.pageX)
            };
            aj.onmousemove = function(ak) {
              if (v == "time") {
                g = true;
                var al = ak.pageX - c[ai + "Slider"].left - window.pageXOffset;
                _css(Q.timeSliderThumb, {
                  left: al
                })
              }
            }
          }
    
          function af(aj) {
            g = false;
            var ai;
            if (v == "time") {
              ai = aj - c.timeSliderRail.left + window.pageXOffset;
              var al = ai / c.timeSliderRail.width * ad;
              if (al < 0) {
                al = 0
              } else {
                if (al > ad) {
                  al = ad - 3
                }
              } if (k.jwGetState() == a.api.events.state.PAUSED || k.jwGetState() == a.api.events.state.IDLE) {
                k.jwPlay()
              }
              k.jwSeek(al)
            } else {
              if (v == "volume") {
                ai = aj - c.volumeSliderRail.left - window.pageXOffset;
                var ak = Math.round(ai / c.volumeSliderRail.width * 100);
                if (ak < 0) {
                  ak = 0
                } else {
                  if (ak > 100) {
                    ak = 100
                  }
                } if (k.jwGetMute()) {
                  k.jwSetMute(false)
                }
                k.jwSetVolume(ak)
              }
            }
            v = "none"
          }
    
          function u(aj) {
            if (_utils.exists(aj.bufferPercent)) {
              f = aj.bufferPercent
            }
            if (c.timeSliderRail) {
              var ak = c.timeSliderRail.width;
              var ai = isNaN(Math.round(ak * f / 100)) ? 0 : Math.round(ak * f / 100);
              _css(Q.timeSliderBuffer, {
                width: ai
              })
            }
          }
    
          function ag(ai) {
            if (ai.mute) {
              _hide(Q.muteButton);
              _show(Q.unmuteButton);
              _hide(Q.volumeSliderProgress)
            } else {
              _show(Q.muteButton);
              _hide(Q.unmuteButton);
              _show(Q.volumeSliderProgress)
            }
          }
    
          function r(ai) {
            if (ai.newstate == a.api.events.state.BUFFERING || ai.newstate == a.api.events.state.PLAYING) {
              _show(Q.pauseButton);
              _hide(Q.playButton)
            } else {
              _hide(Q.pauseButton);
              _show(Q.playButton)
            }
            A();
            if (ai.newstate == a.api.events.state.IDLE) {
              _hide(Q.timeSliderBuffer);
              _hide(Q.timeSliderProgress);
              _hide(Q.timeSliderThumb);
              I({
                id: k.id,
                duration: k.jwGetDuration(),
                position: 0
              })
            } else {
              _show(Q.timeSliderBuffer);
              if (ai.newstate != a.api.events.state.BUFFERING) {
                _show(Q.timeSliderProgress);
                _show(Q.timeSliderThumb)
              }
            }
          }
    
          function L(ai) {
            u({
              bufferPercent: 0
            });
            I(_utils.extend(ai, {
              position: 0,
              duration: ad
            }))
          }
    
          function I(al) {
            if (_utils.exists(al.position)) {
              j = al.position
            }
            if (_utils.exists(al.duration)) {
              ad = al.duration
            }
            var aj = (j === ad === 0) ? 0 : j / ad;
            var am = c.timeSliderRail;
            if (am) {
              var ai = isNaN(Math.round(am.width * aj)) ? 0 : Math.round(am.width * aj);
              var ak = ai;
              if (Q.timeSliderProgress) {
                Q.timeSliderProgress.style.width = ai + "px";
                if (!g) {
                  if (Q.timeSliderThumb) {
                    Q.timeSliderThumb.style.left = ak + "px"
                  }
                }
              }
            }
            if (Q.durationText) {
              Q.durationText.innerHTML = _utils.timeFormat(ad)
            }
            if (Q.elapsedText) {
              Q.elapsedText.innerHTML = _utils.timeFormat(j)
            }
          }
    
          function n() {
            var am, aj;
            var ak = document.getElementById(ac.id + "_elements");
            if (!ak) {
              return
            }
            var al = ak.childNodes;
            for (var ai in ak.childNodes) {
              if (isNaN(parseInt(ai, 10))) {
                continue
              }
              if (al[ai].id.indexOf(ac.id + "_divider") === 0 && aj && aj.id.indexOf(ac.id + "_divider") === 0 && al[ai].style.backgroundImage == aj.style.backgroundImage) {
                al[ai].style.display = "none"
              } else {
                if (al[ai].id.indexOf(ac.id + "_divider") === 0 && am && am.style.display != "none") {
                  al[ai].style.display = "block"
                }
              } if (al[ai].style.display != "none") {
                aj = al[ai]
              }
              am = al[ai]
            }
          }
    
          function w() {
            n();
            if (k.jwGetFullscreen()) {
              _show(Q.normalscreenButton);
              _hide(Q.fullscreenButton)
            } else {
              _hide(Q.normalscreenButton);
              _show(Q.fullscreenButton)
            }
            var aj = {
              width: e
            };
            var ai = {};
            if (D.position == a.html5.view.positions.OVER || k.jwGetFullscreen()) {
              aj.left = D.margin;
              aj.width -= 2 * D.margin;
              aj.top = y - J().height - D.margin;
              aj.height = J().height
            }
            var al = k.skin.getSkinElement("controlbar", "capLeft");
            var ak = k.skin.getSkinElement("controlbar", "capRight");
            ai.left = al ? al.width : 0;
            ai.width = aj.width - ai.left - (ak ? ak.width : 0);
            var am = !_utils.exists(k.skin.getSkinElement("controlbar", "timeSliderCapLeft")) ? 0 : k.skin.getSkinElement("controlbar", "timeSliderCapLeft").width;
            _css(Q.timeSliderRail, {
              width: (ai.width - ab - E),
              left: am
            });
            if (_utils.exists(Q.timeSliderCapRight)) {
              _css(Q.timeSliderCapRight, {
                left: am + (ai.width - ab - E)
              })
            }
            _css(ac, aj);
            _css(Q.elements, ai);
            _css(Q.background, ai);
            q();
            return aj
          }
    
          function m(am) {
            if (_utils.exists(Q.volumeSliderRail)) {
              var ak = isNaN(am.volume / 100) ? 1 : am.volume / 100;
              var al = _utils.parseDimension(Q.volumeSliderRail.style.width);
              var ai = isNaN(Math.round(al * ak)) ? 0 : Math.round(al * ak);
              var an = _utils.parseDimension(Q.volumeSliderRail.style.right);
              var aj = (!_utils.exists(k.skin.getSkinElement("controlbar", "volumeSliderCapLeft"))) ? 0 : k.skin.getSkinElement("controlbar", "volumeSliderCapLeft").width;
              _css(Q.volumeSliderProgress, {
                width: ai,
                left: aj
              });
              if (_utils.exists(Q.volumeSliderCapLeft)) {
                _css(Q.volumeSliderCapLeft, {
                  left: 0
                })
              }
            }
          }
    
          function t() {
            N();
            M();
            q();
            p = true;
            F();
            D.idlehide = (D.idlehide.toString().toLowerCase() == "true");
            if (D.position == a.html5.view.positions.OVER && D.idlehide) {
              ac.style.opacity = 0;
              S = true
            } else {
              setTimeout((function() {
                S = true;
                T()
              }), 1)
            }
            ae()
          }
          t();
          return this
        }
      })(jwplayer);
      (function(b) {
        var a = ["width", "height", "state", "playlist", "item", "position", "buffer", "duration", "volume", "mute", "fullscreen"];
        var c = b.utils;
        b.html5.controller = function(z, w, h, v) {
          var C = z;
          var G = h;
          var g = v;
          var o = w;
          var J = true;
          var e = -1;
          var A = c.exists(G.config.debug) && (G.config.debug.toString().toLowerCase() == "console");
          var m = new b.html5.eventdispatcher(o.id, A);
          c.extend(this, m);
          var E = [];
          var d = false;
    
          function r(M) {
            if (d) {
              m.sendEvent(M.type, M)
            } else {
              E.push(M)
            }
          }
    
          function K(M) {
            if (!d) {
              m.sendEvent(b.api.events.JWPLAYER_READY, M);
              if (b.utils.exists(window.playerReady)) {
                playerReady(M)
              }
              if (b.utils.exists(window[h.config.playerReady])) {
                window[h.config.playerReady](M)
              }
              while (E.length > 0) {
                var O = E.shift();
                m.sendEvent(O.type, O)
              }
              if (h.config.autostart && !b.utils.isIOS()) {
                t(G.item)
              }
              while (p.length > 0) {
                var N = p.shift();
                x(N.method, N.arguments)
              }
              d = true
            }
          }
          G.addGlobalListener(r);
          G.addEventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL, function() {
            G.getMedia().play()
          });
          G.addEventListener(b.api.events.JWPLAYER_MEDIA_TIME, function(M) {
            if (M.position >= G.playlist[G.item].start && e >= 0) {
              G.playlist[G.item].start = e;
              e = -1
            }
          });
          G.addEventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE, function(M) {
            setTimeout(s, 25)
          });
    
          function u() {
            try {
              f(G.item);
              if (G.playlist[G.item].levels[0].file.length > 0) {
                if (J || G.state == b.api.events.state.IDLE) {
                  G.getMedia().load(G.playlist[G.item]);
                  J = false
                } else {
                  if (G.state == b.api.events.state.PAUSED) {
                    G.getMedia().play()
                  }
                }
              }
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function I() {
            try {
              if (G.playlist[G.item].levels[0].file.length > 0) {
                switch (G.state) {
                  case b.api.events.state.PLAYING:
                  case b.api.events.state.BUFFERING:
                    G.getMedia().pause();
                    break
                }
              }
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function D(M) {
            try {
              if (G.playlist[G.item].levels[0].file.length > 0) {
                if (typeof M != "number") {
                  M = parseFloat(M)
                }
                switch (G.state) {
                  case b.api.events.state.IDLE:
                    if (e < 0) {
                      e = G.playlist[G.item].start;
                      G.playlist[G.item].start = M
                    }
                    u();
                    break;
                  case b.api.events.state.PLAYING:
                  case b.api.events.state.PAUSED:
                  case b.api.events.state.BUFFERING:
                    G.seek(M);
                    break
                }
              }
              return true
            } catch (N) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, N)
            }
            return false
          }
    
          function n(M) {
            if (!c.exists(M)) {
              M = true
            }
            try {
              G.getMedia().stop(M);
              return true
            } catch (N) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, N)
            }
            return false
          }
    
          function k() {
            try {
              if (G.playlist[G.item].levels[0].file.length > 0) {
                if (G.config.shuffle) {
                  f(y())
                } else {
                  if (G.item + 1 == G.playlist.length) {
                    f(0)
                  } else {
                    f(G.item + 1)
                  }
                }
              }
              if (G.state != b.api.events.state.IDLE) {
                var N = G.state;
                G.state = b.api.events.state.IDLE;
                m.sendEvent(b.api.events.JWPLAYER_PLAYER_STATE, {
                  oldstate: N,
                  newstate: b.api.events.state.IDLE
                })
              }
              u();
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function j() {
            try {
              if (G.playlist[G.item].levels[0].file.length > 0) {
                if (G.config.shuffle) {
                  f(y())
                } else {
                  if (G.item === 0) {
                    f(G.playlist.length - 1)
                  } else {
                    f(G.item - 1)
                  }
                }
              }
              if (G.state != b.api.events.state.IDLE) {
                var N = G.state;
                G.state = b.api.events.state.IDLE;
                m.sendEvent(b.api.events.JWPLAYER_PLAYER_STATE, {
                  oldstate: N,
                  newstate: b.api.events.state.IDLE
                })
              }
              u();
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function y() {
            var M = null;
            if (G.playlist.length > 1) {
              while (!c.exists(M)) {
                M = Math.floor(Math.random() * G.playlist.length);
                if (M == G.item) {
                  M = null
                }
              }
            } else {
              M = 0
            }
            return M
          }
    
          function t(N) {
            if (!G.playlist || !G.playlist[N]) {
              return false
            }
            try {
              if (G.playlist[N].levels[0].file.length > 0) {
                var O = G.state;
                if (O !== b.api.events.state.IDLE) {
                  if (G.playlist[G.item].provider == G.playlist[N].provider) {
                    n(false)
                  } else {
                    n()
                  }
                }
                f(N);
                u()
              }
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function f(M) {
            if (!G.playlist[M]) {
              return
            }
            G.setActiveMediaProvider(G.playlist[M]);
            if (G.item != M) {
              G.item = M;
              J = true;
              m.sendEvent(b.api.events.JWPLAYER_PLAYLIST_ITEM, {
                index: M
              })
            }
          }
    
          function H(N) {
            try {
              f(G.item);
              var O = G.getMedia();
              switch (typeof(N)) {
                case "number":
                  O.volume(N);
                  break;
                case "string":
                  O.volume(parseInt(N, 10));
                  break
              }
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function q(N) {
            try {
              f(G.item);
              var O = G.getMedia();
              if (typeof N == "undefined") {
                O.mute(!G.mute)
              } else {
                if (N.toString().toLowerCase() == "true") {
                  O.mute(true)
                } else {
                  O.mute(false)
                }
              }
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function l(N, M) {
            try {
              G.width = N;
              G.height = M;
              g.resize(N, M);
              m.sendEvent(b.api.events.JWPLAYER_RESIZE, {
                width: G.width,
                height: G.height
              });
              return true
            } catch (O) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, O)
            }
            return false
          }
    
          function B(N) {
            try {
              if (typeof N == "undefined") {
                G.fullscreen = !G.fullscreen;
                g.fullscreen(!G.fullscreen)
              } else {
                if (N.toString().toLowerCase() == "true") {
                  G.fullscreen = true;
                  g.fullscreen(true)
                } else {
                  G.fullscreen = false;
                  g.fullscreen(false)
                }
              }
              m.sendEvent(b.api.events.JWPLAYER_RESIZE, {
                width: G.width,
                height: G.height
              });
              m.sendEvent(b.api.events.JWPLAYER_FULLSCREEN, {
                fullscreen: N
              });
              return true
            } catch (M) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, M)
            }
            return false
          }
    
          function L(M) {
            try {
              n();
              G.loadPlaylist(M);
              f(G.item);
              return true
            } catch (N) {
              m.sendEvent(b.api.events.JWPLAYER_ERROR, N)
            }
            return false
          }
          b.html5.controller.repeatoptions = {
            LIST: "LIST",
            ALWAYS: "ALWAYS",
            SINGLE: "SINGLE",
            NONE: "NONE"
          };
    
          function s() {
            switch (G.config.repeat.toUpperCase()) {
              case b.html5.controller.repeatoptions.SINGLE:
                u();
                break;
              case b.html5.controller.repeatoptions.ALWAYS:
                if (G.item == G.playlist.length - 1 && !G.config.shuffle) {
                  t(0)
                } else {
                  k()
                }
                break;
              case b.html5.controller.repeatoptions.LIST:
                if (G.item == G.playlist.length - 1 && !G.config.shuffle) {
                  n();
                  f(0)
                } else {
                  k()
                }
                break;
              default:
                n();
                break
            }
          }
          var p = [];
    
          function F(M) {
            return function() {
              if (d) {
                x(M, arguments)
              } else {
                p.push({
                  method: M,
                  arguments: arguments
                })
              }
            }
          }
    
          function x(O, N) {
            var M = [];
            for (i = 0; i < N.length; i++) {
              M.push(N[i])
            }
            O.apply(this, M)
          }
          this.play = F(u);
          this.pause = F(I);
          this.seek = F(D);
          this.stop = F(n);
          this.next = F(k);
          this.prev = F(j);
          this.item = F(t);
          this.setVolume = F(H);
          this.setMute = F(q);
          this.resize = F(l);
          this.setFullscreen = F(B);
          this.load = F(L);
          this.playerReady = K
        }
      })(jwplayer);
      (function(a) {
        a.html5.defaultSkin = function() {
          this.text = '<?xml version="1.0" ?><skin author="LongTail Video" name="Five" version="1.0"><settings><setting name="backcolor" value="0xFFFFFF"/><setting name="frontcolor" value="0x000000"/><setting name="lightcolor" value="0x000000"/><setting name="screencolor" value="0x000000"/></settings><components><component name="controlbar"><settings><setting name="margin" value="20"/><setting name="fontsize" value="11"/></settings><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFJJREFUeNrslLENwAAIwxLU/09j5AiOgD5hVQzNAVY8JK4qEfHMIKBnd2+BQlBINaiRtL/aV2rdzYBsM6CIONbI1NZENTr3RwdB2PlnJgJ6BRgA4hwu5Qg5iswAAAAASUVORK5CYII="/><element name="capLeft" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="capRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="divider" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="playButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEhJREFUeNpiYqABYBo1dNRQ+hr6H4jvA3E8NS39j4SpZvh/LJig4YxEGEqy3kET+w+AOGFQRhTJhrEQkGcczfujhg4CQwECDADpTRWU/B3wHQAAAABJRU5ErkJggg=="/><element name="pauseButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiYBgFo2DwA0YC8v/R1P4nRu+ooaOGUtnQUTAKhgIACDAAFCwQCfAJ4gwAAAAASUVORK5CYII="/><element name="prevButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtJREFUeNpiYBgFo2Dog/9QDAPyQHweTYwiQ/2B+D0Wi8g2tB+JTdBQRiIMJVkvEy0iglhDF9Aq9uOpHVEwoE+NJDUKRsFgAAABBgDe2hqZcNNL0AAAAABJRU5ErkJggg=="/><element name="nextButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUeNpiYBgFo2Dog/9AfB6I5dHE/lNqKAi/B2J/ahsKw/3EGMpIhKEk66WJoaR6fz61IyqemhEFSlL61ExSo2AUDAYAEGAAiG4hj+5t7M8AAAAASUVORK5CYII="/><element name="timeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpiYBgFo2AU0Bwwzluw+D8tLWARFhKiqQ9YuLg4aWsBGxs7bS1gZ6e5BWyjSX0UjIKhDgACDABlYQOGh5pYywAAAABJRU5ErkJggg=="/><element name="timeSliderBuffer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFo2AU0Bww1jc0/aelBSz8/Pw09QELOzs7bS1gY2OjrQWsrKy09gHraFIfBaNgqAOAAAMAvy0DChXHsZMAAAAASUVORK5CYII="/><element name="timeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpiYBgFo2AU0BwwAvF/WlrARGsfjFow8BaMglEwCugAAAIMAOHfAQunR+XzAAAAAElFTkSuQmCC"/><element name="timeSliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAYAAAA870V8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUeNpiZICA/yCCiQEJUJcDEGAAY0gBD1/m7Q0AAAAASUVORK5CYII="/><element name="muteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiYBgFIw3MB+L/5Gj8j6yRiRTFyICJXHfTXyMLAXlGati4YDRFDj8AEGAABk8GSqqS4CoAAAAASUVORK5CYII="/><element name="unmuteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFgxz8p7bm+cQa+h8LHy7GhEcjIz4bmAjYykiun/8j0fakGPIfTfPgiSr6aB4FVAcAAQYAWdwR1G1Wd2gAAAAASUVORK5CYII="/><element name="volumeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGpJREFUeNpi/P//PwM9ABMDncCoRYPfIqqDZcuW1UPp/6AUDcNM1DQYKtRAlaAj1mCSLSLXYIIWUctgDItoZfDA5aOoqKhGEANIM9LVR7SymGDQUctikuOIXkFNdhHEOFrDjlpEd4sAAgwAriRMub95fu8AAAAASUVORK5CYII="/><element name="volumeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi/P//PwM9ABMDncCoRYPfIlqAeij9H5SiYZiqBqPTlFqE02BKLSLaYFItIttgQhZRzWB8FjENiuRJ7aAbsMQwYMl7wDIsWUUQ42gNO2oR3S0CCDAAKhKq6MLLn8oAAAAASUVORK5CYII="/><element name="fullscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE5JREFUeNpiYBgFo2DQA0YC8v/xqP1PjDlMRDrEgUgxkgHIlfZoriVGjmzLsLFHAW2D6D8eA/9Tw7L/BAwgJE90PvhPpNgoGAVDEQAEGAAMdhTyXcPKcAAAAABJRU5ErkJggg=="/><element name="normalscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNpiYBgFo2DIg/9UUkOUAf8JiFFsyX88fJyAkcQgYMQjNkzBoAgiezyRbE+tFGSPxQJ7auYBmma0UTAKBhgABBgAJAEY6zON61sAAAAASUVORK5CYII="/></elements></component><component name="display"><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC"/><element name="playIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg=="/><element name="muteIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNrs1jEOgCAMBVAg7t5/8qaoIy4uoobyXsLCxA+0NCUAAADGUWvdQoQ41x4ixNBB2hBvBskdD3w5ZCkl3+33VqI0kjBBlh9rp+uTcyOP33TnolfsU85XX3yIRpQph8ZQY3wTZtU5AACASA4BBgDHoVuY1/fvOQAAAABJRU5ErkJggg=="/><element name="errorIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWlJREFUeNrsl+1twjAQhsHq/7BBYQLYIBmBDcoGMAIjtBPQTcII2SDtBDBBwrU6pGsUO7YbO470PtKJkz9iH++d4ywWAAAAAABgljRNsyWr2bZzDuJG1rLdZhcMbTjrBCGDyUKsqQLFciJb9bSvuG/WagRVRUVUI6gqy5HVeKWfSgRyJruKIU//TrZTSn2nmlaXThrloi/v9F2STC1W4+Aw5cBzkquRc09bofFNc6YLxEON0VUZS5FPTftO49vMjRsIF3RhOGr7/D/pJw+FKU+q0vDyq8W42jCunDqI3LC5XxNj2wHLU1XjaRnb0Lhykhqhhd8MtSF5J9tbjCv4mXGvKJz/65FF/qJryyaaIvzP2QRxZTX2nTuXjvV/VPFSwyLnW7mpH99yTh1FEVro6JBSd40/pMrRdV8vPtcKl28T2pT8TnFZ4yNosct3Q0io6JfBiz1FlGdqVQH3VHnepAEAAAAAADDzEGAAcTwB10jWgxcAAAAASUVORK5CYII="/><element name="bufferIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuhJREFUeNrsWr9rU1EUznuNGqvFQh1ULOhiBx0KDtIuioO4pJuik3FxFfUPaAV1FTdx0Q5d2g4FFxehTnEpZHFoBy20tCIWtGq0TZP4HfkeHB5N8m6Sl/sa74XDybvv3vvOd8/Pe4lXrVZT3dD8VJc0B8QBcUAcEAfESktHGeR5XtMfqFQq/f92zPe/NbtGlKTdCY30kuxrpMGO94BlQCXs+rbh3ONgA6BlzP1p20d80gEI5hmA2A92Qua1Q2PtAFISM+bvjMG8U+Q7oA3rQGASwrYCU6WpNdLGYbA+Pq5jjXIiwi8EEa2UDbQSaKOIuV+SlkcCrfjY8XTI9EpKGwP0C2kru2hLtHqa4zoXtZRWyvi4CLwv9Opr6Hkn6A9HKgEANsQ1iqC3Ub/vRUk2JgmRkatK36kVrnt0qObunwUdUUMXMWYpakJsO5Am8tAw2GBIgwWA+G2S2dMpiw0gDioQRQJoKhRb1QiDwlHZUABYbaXWsm5ae6loTE4ZDxN4CZar8foVzOJ2iyZ2kWF3t7YIevffaMT5yJ70kQb2fQ1sE5SHr2wazs2wgMxgbsEKEAgxAvZUJbQLBGTSBMgNrncJbA6AljtS/eKDJ0Ez+DmrQEzXS2h1Ck25kAg0IZcUOaydCy4sYnN2fOA+2AP16gNoHALlQ+fwH7XO4CxLenUpgj4xr6ugY2roPMbMx+Xs18m/E8CVEIhxsNeg83XWOAN6grG3lGbk8uE5fr4B/WH3cJw+co/l9nTYsSGYCJ/lY5/qv0thn6nrIWmjeJcPSnWOeY++AkF8tpJHIMAUs/MaBBpj3znZfQo5psY+ZrG4gv5HickjEOymKjEeRpgyST6IuZcTcWbnjcgdPi5ghxciRKsl1lDSsgwA1i8fssonJgzmTSqfGUkCENndNdAL7PS6QQ7ZYISTo+1qq0LEWjTWcvY4isa4z+yfQB+7ooyHVg5RI7/i1Ijn/vnggDggDogD4oC00P4KMACd/juEHOrS4AAAAABJRU5ErkJggg=="/></elements></component><component name="dock"><elements><element name="button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUeNrs0cEJACAQA8Eofu0fu/W6EM5ZSAFDRpKTBs00CQQEBAQEBAQEBAQEBAQEBATkK8iqbY+AgICAgICAgICAgICAgICAgIC86QowAG5PAQzEJ0lKAAAAAElFTkSuQmCC"/></elements></component><component name="playlist"><elements><element name="item" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAIAAAC1nk4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNrs2NEJwCAMBcBYuv/CFuIE9VN47WWCR7iocXR3pdWdGPqqwIoMjYfQeAiNh9B4JHc6MHQVHnjggQceeOCBBx77TifyeOY0iHi8DqIdEY8dD5cL094eePzINB5CO/LwcOTptNB4CP25L4TIbZzpU7UEGAA5wz1uF5rF9AAAAABJRU5ErkJggg=="/><element name="sliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNrsy6ENACAMAMHClp2wYxZLAg5Fcu9e3OjuOKqqfTMzbs14CIZhGIZhGIZhGP4VLwEGAK/BBnVFpB0oAAAAAElFTkSuQmCC"/><element name="sliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNrsy7ENACAMBLE8++8caFFKKiRffU53112SGs3ttOohGIZhGIZhGIZh+Fe8BRgAiaUGde6NOSEAAAAASUVORK5CYII="/></elements></component></components></skin>';
          this.xml = null;
          if (window.DOMParser) {
            parser = new DOMParser();
            this.xml = parser.parseFromString(this.text, "text/xml")
          } else {
            this.xml = new ActiveXObject("Microsoft.XMLDOM");
            this.xml.async = "false";
            this.xml.loadXML(this.text)
          }
          return this
        }
      })(jwplayer);
      (function(a) {
        _utils = a.utils;
        _css = _utils.css;
        _hide = function(b) {
          _css(b, {
            display: "none"
          })
        };
        _show = function(b) {
          _css(b, {
            display: "block"
          })
        };
        a.html5.display = function(k, G) {
          var j = {
            icons: true,
            showmute: false
          };
          var Q = _utils.extend({}, j, G);
          var h = k;
          var P = {};
          var e;
          var u;
          var w;
          var N;
          var s;
          var I;
          var A;
          var J = !_utils.exists(h.skin.getComponentSettings("display").bufferrotation) ? 15 : parseInt(h.skin.getComponentSettings("display").bufferrotation, 10);
          var q = !_utils.exists(h.skin.getComponentSettings("display").bufferinterval) ? 100 : parseInt(h.skin.getComponentSettings("display").bufferinterval, 10);
          var z = -1;
          var t = "";
          var K = true;
          var d;
          var g = false;
          var n = false;
          var H = new a.html5.eventdispatcher();
          _utils.extend(this, H);
          var D = {
            display: {
              style: {
                cursor: "pointer",
                top: 0,
                left: 0,
                overflow: "hidden"
              },
              click: m
            },
            display_icon: {
              style: {
                cursor: "pointer",
                position: "absolute",
                top: ((h.skin.getSkinElement("display", "background").height - h.skin.getSkinElement("display", "playIcon").height) / 2),
                left: ((h.skin.getSkinElement("display", "background").width - h.skin.getSkinElement("display", "playIcon").width) / 2),
                border: 0,
                margin: 0,
                padding: 0,
                zIndex: 3,
                display: "none"
              }
            },
            display_iconBackground: {
              style: {
                cursor: "pointer",
                position: "absolute",
                top: ((u - h.skin.getSkinElement("display", "background").height) / 2),
                left: ((e - h.skin.getSkinElement("display", "background").width) / 2),
                border: 0,
                backgroundImage: (["url(", h.skin.getSkinElement("display", "background").src, ")"]).join(""),
                width: h.skin.getSkinElement("display", "background").width,
                height: h.skin.getSkinElement("display", "background").height,
                margin: 0,
                padding: 0,
                zIndex: 2,
                display: "none"
              }
            },
            display_image: {
              style: {
                display: "none",
                width: e,
                height: u,
                position: "absolute",
                cursor: "pointer",
                left: 0,
                top: 0,
                margin: 0,
                padding: 0,
                textDecoration: "none",
                zIndex: 1
              }
            },
            display_text: {
              style: {
                zIndex: 4,
                position: "relative",
                opacity: 0.8,
                backgroundColor: parseInt("000000", 16),
                color: parseInt("ffffff", 16),
                textAlign: "center",
                fontFamily: "Arial,sans-serif",
                padding: "0 5px",
                fontSize: 14
              }
            }
          };
          h.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE, p);
          h.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE, p);
          h.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM, p);
          h.jwAddEventListener(a.api.events.JWPLAYER_ERROR, o);
          L();
    
          function L() {
            P.display = C("div", "display");
            P.display_text = C("div", "display_text");
            P.display.appendChild(P.display_text);
            P.display_image = C("img", "display_image");
            P.display_image.onerror = function(R) {
              _hide(P.display_image)
            };
            P.display_image.onload = y;
            P.display_icon = C("div", "display_icon");
            P.display_iconBackground = C("div", "display_iconBackground");
            P.display.appendChild(P.display_image);
            P.display_iconBackground.appendChild(P.display_icon);
            P.display.appendChild(P.display_iconBackground);
            f();
            setTimeout((function() {
              n = true;
              if (Q.icons.toString() == "true") {
                F()
              }
            }), 1)
          }
          this.getDisplayElement = function() {
            return P.display
          };
          this.resize = function(S, R) {
            _css(P.display, {
              width: S,
              height: R
            });
            _css(P.display_text, {
              width: (S - 10),
              top: ((R - P.display_text.getBoundingClientRect().height) / 2)
            });
            _css(P.display_iconBackground, {
              top: ((R - h.skin.getSkinElement("display", "background").height) / 2),
              left: ((S - h.skin.getSkinElement("display", "background").width) / 2)
            });
            if (e != S || u != R) {
              e = S;
              u = R;
              d = undefined;
              F()
            }
            c();
            p({})
          };
          this.show = function() {
            if (g) {
              g = false;
              r(h.jwGetState())
            }
          };
          this.hide = function() {
            if (!g) {
              B();
              g = true
            }
          };
    
          function y(R) {
            w = P.display_image.naturalWidth;
            N = P.display_image.naturalHeight;
            c()
          }
    
          function c() {
            _utils.stretch(h.jwGetStretching(), P.display_image, e, u, w, N)
          }
    
          function C(R, T) {
            var S = document.createElement(R);
            S.id = h.id + "_jwplayer_" + T;
            _css(S, D[T].style);
            return S
          }
    
          function f() {
            for (var R in P) {
              if (_utils.exists(D[R].click)) {
                P[R].onclick = D[R].click
              }
            }
          }
    
          function m(R) {
            if (typeof R.preventDefault != "undefined") {
              R.preventDefault()
            } else {
              R.returnValue = false
            } if (h.jwGetState() != a.api.events.state.PLAYING) {
              h.jwPlay()
            } else {
              h.jwPause()
            }
          }
    
          function O(R) {
            if (A) {
              B();
              return
            }
            P.display_icon.style.backgroundImage = (["url(", h.skin.getSkinElement("display", R).src, ")"]).join("");
            _css(P.display_icon, {
              width: h.skin.getSkinElement("display", R).width,
              height: h.skin.getSkinElement("display", R).height,
              top: (h.skin.getSkinElement("display", "background").height - h.skin.getSkinElement("display", R).height) / 2,
              left: (h.skin.getSkinElement("display", "background").width - h.skin.getSkinElement("display", R).width) / 2
            });
            b();
            if (_utils.exists(h.skin.getSkinElement("display", R + "Over"))) {
              P.display_icon.onmouseover = function(S) {
                P.display_icon.style.backgroundImage = ["url(", h.skin.getSkinElement("display", R + "Over").src, ")"].join("")
              };
              P.display_icon.onmouseout = function(S) {
                P.display_icon.style.backgroundImage = ["url(", h.skin.getSkinElement("display", R).src, ")"].join("")
              }
            } else {
              P.display_icon.onmouseover = null;
              P.display_icon.onmouseout = null
            }
          }
    
          function B() {
            if (Q.icons.toString() == "true") {
              _hide(P.display_icon);
              _hide(P.display_iconBackground);
              M()
            }
          }
    
          function b() {
            if (!g && Q.icons.toString() == "true") {
              _show(P.display_icon);
              _show(P.display_iconBackground);
              F()
            }
          }
    
          function o(R) {
            A = true;
            B();
            P.display_text.innerHTML = R.error;
            _show(P.display_text);
            P.display_text.style.top = ((u - P.display_text.getBoundingClientRect().height) / 2) + "px"
          }
    
          function E() {
            P.display_image.style.display = "none"
          }
    
          function p(R) {
            if ((R.type == a.api.events.JWPLAYER_PLAYER_STATE || R.type == a.api.events.JWPLAYER_PLAYLIST_ITEM) && A) {
              A = false;
              _hide(P.display_text)
            }
            var S = h.jwGetState();
            if (S == t) {
              return
            }
            t = S;
            if (z >= 0) {
              clearTimeout(z)
            }
            if (K || h.jwGetState() == a.api.events.state.PLAYING || h.jwGetState() == a.api.events.state.PAUSED) {
              r(h.jwGetState())
            } else {
              z = setTimeout(l(h.jwGetState()), 500)
            }
          }
    
          function l(R) {
            return (function() {
              r(R)
            })
          }
    
          function r(R) {
            if (_utils.exists(I)) {
              clearInterval(I);
              I = null;
              _utils.animations.rotate(P.display_icon, 0)
            }
            switch (R) {
              case a.api.events.state.BUFFERING:
                if (_utils.isIOS()) {
                  E();
                  B()
                } else {
                  if (h.jwGetPlaylist()[h.jwGetItem()].provider == "sound") {
                    v()
                  }
                  s = 0;
                  I = setInterval(function() {
                    s += J;
                    _utils.animations.rotate(P.display_icon, s % 360)
                  }, q);
                  O("bufferIcon");
                  K = true
                }
                break;
              case a.api.events.state.PAUSED:
                if (!_utils.isIOS()) {
                  if (h.jwGetPlaylist()[h.jwGetItem()].provider != "sound") {
                    _css(P.display_image, {
                      background: "transparent no-repeat center center"
                    })
                  }
                  O("playIcon");
                  K = true
                }
                break;
              case a.api.events.state.IDLE:
                if (h.jwGetPlaylist()[h.jwGetItem()] && h.jwGetPlaylist()[h.jwGetItem()].image) {
                  v()
                } else {
                  E()
                }
                O("playIcon");
                K = true;
                break;
              default:
                if (h.jwGetPlaylist()[h.jwGetItem()] && h.jwGetPlaylist()[h.jwGetItem()].provider == "sound") {
                  if (_utils.isIOS()) {
                    E();
                    K = false
                  } else {
                    v()
                  }
                } else {
                  E();
                  K = false
                } if (h.jwGetMute() && Q.showmute) {
                  O("muteIcon")
                } else {
                  B()
                }
                break
            }
            z = -1
          }
    
          function v() {
            if (h.jwGetPlaylist()[h.jwGetItem()] && h.jwGetPlaylist()[h.jwGetItem()].image) {
              _css(P.display_image, {
                display: "block"
              });
              P.display_image.src = _utils.getAbsolutePath(h.jwGetPlaylist()[h.jwGetItem()].image)
            }
          }
    
          function x(R) {
            return function() {
              if (!n) {
                return
              }
              if (!g && d != R) {
                d = R;
                H.sendEvent(R, {
                  component: "display",
                  boundingRect: _utils.getDimensions(P.display_iconBackground)
                })
              }
            }
          }
          var F = x(a.api.events.JWPLAYER_COMPONENT_SHOW);
          var M = x(a.api.events.JWPLAYER_COMPONENT_HIDE);
          return this
        }
      })(jwplayer);
      (function(a) {
        _css = a.utils.css;
        a.html5.dock = function(p, u) {
          function q() {
            return {
              align: a.html5.view.positions.RIGHT
            }
          }
          var k = a.utils.extend({}, q(), u);
          if (k.align == "FALSE") {
            return
          }
          var f = {};
          var s = [];
          var g;
          var v;
          var d = false;
          var t = false;
          var e = {
            x: 0,
            y: 0,
            width: 0,
            height: 0
          };
          var r;
          var j = new a.html5.eventdispatcher();
          _utils.extend(this, j);
          var m = document.createElement("div");
          m.id = p.id + "_jwplayer_dock";
          p.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE, l);
          this.getDisplayElement = function() {
            return m
          };
          this.setButton = function(A, x, y, z) {
            if (!x && f[A]) {
              a.utils.arrays.remove(s, A);
              m.removeChild(f[A].div);
              delete f[A]
            } else {
              if (x) {
                if (!f[A]) {
                  f[A] = {}
                }
                f[A].handler = x;
                f[A].outGraphic = y;
                f[A].overGraphic = z;
                if (!f[A].div) {
                  s.push(A);
                  f[A].div = document.createElement("div");
                  f[A].div.style.position = "relative";
                  m.appendChild(f[A].div);
                  f[A].div.appendChild(document.createElement("img"));
                  f[A].div.childNodes[0].style.position = "absolute";
                  f[A].div.childNodes[0].style.left = 0;
                  f[A].div.childNodes[0].style.top = 0;
                  f[A].div.childNodes[0].style.zIndex = 10;
                  f[A].div.childNodes[0].style.cursor = "pointer";
                  f[A].div.appendChild(document.createElement("img"));
                  f[A].div.childNodes[1].style.position = "absolute";
                  f[A].div.childNodes[1].style.left = 0;
                  f[A].div.childNodes[1].style.top = 0;
                  if (p.skin.getSkinElement("dock", "button")) {
                    f[A].div.childNodes[1].src = p.skin.getSkinElement("dock", "button").src
                  }
                  f[A].div.childNodes[1].style.zIndex = 9;
                  f[A].div.childNodes[1].style.cursor = "pointer";
                  f[A].div.onmouseover = function() {
                    if (f[A].overGraphic) {
                      f[A].div.childNodes[0].src = f[A].overGraphic
                    }
                    if (p.skin.getSkinElement("dock", "buttonOver")) {
                      f[A].div.childNodes[1].src = p.skin.getSkinElement("dock", "buttonOver").src
                    }
                  };
                  f[A].div.onmouseout = function() {
                    if (f[A].outGraphic) {
                      f[A].div.childNodes[0].src = f[A].outGraphic
                    }
                    if (p.skin.getSkinElement("dock", "button")) {
                      f[A].div.childNodes[1].src = p.skin.getSkinElement("dock", "button").src
                    }
                  };
                  if (f[A].overGraphic) {
                    f[A].div.childNodes[0].src = f[A].overGraphic
                  }
                  if (f[A].outGraphic) {
                    f[A].div.childNodes[0].src = f[A].outGraphic
                  }
                  if (p.skin.getSkinElement("dock", "button")) {
                    f[A].div.childNodes[1].src = p.skin.getSkinElement("dock", "button").src
                  }
                }
                if (x) {
                  f[A].div.onclick = function(B) {
                    B.preventDefault();
                    a(p.id).callback(A);
                    if (f[A].overGraphic) {
                      f[A].div.childNodes[0].src = f[A].overGraphic
                    }
                    if (p.skin.getSkinElement("dock", "button")) {
                      f[A].div.childNodes[1].src = p.skin.getSkinElement("dock", "button").src
                    }
                  }
                }
              }
            }
            h(g, v)
          };
    
          function h(x, J) {
            if (s.length > 0) {
              var y = 10;
              var I = y;
              var F = -1;
              var G = p.skin.getSkinElement("dock", "button").height;
              var E = p.skin.getSkinElement("dock", "button").width;
              var C = x - E - y;
              var H, B;
              if (k.align == a.html5.view.positions.LEFT) {
                F = 1;
                C = y
              }
              for (var z = 0; z < s.length; z++) {
                var K = Math.floor(I / J);
                if ((I + G + y) > ((K + 1) * J)) {
                  I = ((K + 1) * J) + y;
                  K = Math.floor(I / J)
                }
                var A = f[s[z]].div;
                A.style.top = (I % J) + "px";
                A.style.left = (C + (p.skin.getSkinElement("dock", "button").width + y) * K * F) + "px";
                var D = {
                  x: a.utils.parseDimension(A.style.left),
                  y: a.utils.parseDimension(A.style.top),
                  width: E,
                  height: G
                };
                if (!H || (D.x <= H.x && D.y <= H.y)) {
                  H = D
                }
                if (!B || (D.x >= B.x && D.y >= B.y)) {
                  B = D
                }
                I += p.skin.getSkinElement("dock", "button").height + y
              }
              e = {
                x: H.x,
                y: H.y,
                width: B.x - H.x + B.width,
                height: H.y - B.y + B.height
              }
            }
            if (t != p.jwGetFullscreen() || g != x || v != J) {
              g = x;
              v = J;
              t = p.jwGetFullscreen();
              r = undefined;
              setTimeout(n, 1)
            }
          }
    
          function b(x) {
            return function() {
              if (!d && r != x && s.length > 0) {
                r = x;
                j.sendEvent(x, {
                  component: "dock",
                  boundingRect: e
                })
              }
            }
          }
    
          function l(x) {
            if (a.utils.isIOS()) {
              switch (x.newstate) {
                case a.api.events.state.IDLE:
                  o();
                  break;
                default:
                  c();
                  break
              }
            }
          }
          var n = b(a.api.events.JWPLAYER_COMPONENT_SHOW);
          var w = b(a.api.events.JWPLAYER_COMPONENT_HIDE);
          this.resize = h;
          var o = function() {
            _css(m, {
              display: "block"
            });
            if (d) {
              d = false;
              n()
            }
          };
          var c = function() {
            _css(m, {
              display: "none"
            });
            if (!d) {
              w();
              d = true
            }
          };
          this.hide = c;
          this.show = o;
          return this
        }
      })(jwplayer);
      (function(a) {
        a.html5.eventdispatcher = function(d, b) {
          var c = new a.events.eventdispatcher(b);
          a.utils.extend(this, c);
          this.sendEvent = function(e, f) {
            if (!a.utils.exists(f)) {
              f = {}
            }
            a.utils.extend(f, {
              id: d,
              version: a.version,
              type: e
            });
            c.sendEvent(e, f)
          }
        }
      })(jwplayer);
      (function(a) {
        var b = {
          prefix: "http://l.longtailvideo.com/html5/",
          file: "logo.png",
          link: "http://www.longtailvideo.com/players/jw-flv-player/",
          margin: 8,
          out: 0.5,
          over: 1,
          timeout: 5,
          hide: true,
          position: "bottom-left"
        };
        _css = a.utils.css;
        a.html5.logo = function(n, r) {
          var q = n;
          var u;
          var d;
          var t;
          var h = false;
          g();
    
          function g() {
            o();
            c();
            l()
          }
    
          function o() {
            if (b.prefix) {
              var v = n.version.split(/\W/).splice(0, 2).join("/");
              if (b.prefix.indexOf(v) < 0) {
                b.prefix += v + "/"
              }
            }
            if (r.position == a.html5.view.positions.OVER) {
              r.position = b.position
            }
            d = a.utils.extend({}, b)
          }
    
          function c() {
            t = document.createElement("img");
            t.id = q.id + "_jwplayer_logo";
            t.style.display = "none";
            t.onload = function(v) {
              _css(t, k());
              q.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE, j);
              p()
            };
            if (!d.file) {
              return
            }
            if (d.file.indexOf("http://") === 0) {
              t.src = d.file
            } else {
              t.src = d.prefix + d.file
            }
          }
          if (!d.file) {
            return
          }
          this.resize = function(w, v) {};
          this.getDisplayElement = function() {
            return t
          };
    
          function l() {
            if (d.link) {
              t.onmouseover = f;
              t.onmouseout = p;
              t.onclick = s
            } else {
              this.mouseEnabled = false
            }
          }
    
          function s(v) {
            if (typeof v != "undefined") {
              v.stopPropagation()
            }
            if (!h) {
              return
            }
            q.jwPause();
            q.jwSetFullscreen(false);
            if (d.link) {
              window.open(d.link, "_top")
            }
            return
          }
    
          function p(v) {
            if (d.link && h) {
              t.style.opacity = d.out
            }
            return
          }
    
          function f(v) {
            if (d.hide.toString() == "true" && h) {
              t.style.opacity = d.over
            }
            return
          }
    
          function k() {
            var x = {
              textDecoration: "none",
              position: "absolute",
              cursor: "pointer"
            };
            x.display = (d.hide.toString() == "true") ? "none" : "block";
            var w = d.position.toLowerCase().split("-");
            for (var v in w) {
              x[w[v]] = d.margin
            }
            return x
          }
    
          function m() {
            if (d.hide.toString() == "true") {
              t.style.display = "block";
              t.style.opacity = 0;
              a.utils.fadeTo(t, d.out, 0.1, parseFloat(t.style.opacity));
              u = setTimeout(function() {
                e()
              }, d.timeout * 1000)
            }
            h = true
          }
    
          function e() {
            h = false;
            if (d.hide.toString() == "true") {
              a.utils.fadeTo(t, 0, 0.1, parseFloat(t.style.opacity))
            }
          }
    
          function j(v) {
            if (v.newstate == a.api.events.state.BUFFERING) {
              clearTimeout(u);
              m()
            }
          }
          return this
        }
      })(jwplayer);
      (function(a) {
        var c = {
          ended: a.api.events.state.IDLE,
          playing: a.api.events.state.PLAYING,
          pause: a.api.events.state.PAUSED,
          buffering: a.api.events.state.BUFFERING
        };
        var e = a.utils;
        var b = e.css;
        var d = e.isIOS();
        a.html5.mediavideo = function(h, s) {
          var r = {
            abort: n,
            canplay: k,
            canplaythrough: k,
            durationchange: G,
            emptied: n,
            ended: k,
            error: u,
            loadeddata: G,
            loadedmetadata: G,
            loadstart: k,
            pause: k,
            play: n,
            playing: k,
            progress: v,
            ratechange: n,
            seeked: k,
            seeking: k,
            stalled: k,
            suspend: k,
            timeupdate: D,
            volumechange: n,
            waiting: k,
            canshowcurrentframe: n,
            dataunavailable: n,
            empty: n,
            load: z,
            loadedfirstframe: n
          };
          var j = new a.html5.eventdispatcher();
          e.extend(this, j);
          var y = h,
            l = s,
            m, B, A, x, f, H = false,
            C, p, q;
          o();
          this.load = function(J, K) {
            if (typeof K == "undefined") {
              K = true
            }
            x = J;
            e.empty(m);
            q = 0;
            if (J.levels && J.levels.length > 0) {
              if (J.levels.length == 1) {
                m.src = J.levels[0].file
              } else {
                if (m.src) {
                  m.removeAttribute("src")
                }
                for (var I = 0; I < J.levels.length; I++) {
                  var L = m.ownerDocument.createElement("source");
                  L.src = J.levels[I].file;
                  m.appendChild(L);
                  q++
                }
              }
            } else {
              m.src = J.file
            } if (d) {
              if (J.image) {
                m.poster = J.image
              }
              m.controls = "controls";
              m.style.display = "block"
            }
            C = p = A = false;
            y.buffer = 0;
            if (!e.exists(J.start)) {
              J.start = 0
            }
            y.duration = J.duration;
            j.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);
            if ((!d && J.levels.length == 1) || !H) {
              m.load()
            }
            H = false;
            if (K) {
              E(a.api.events.state.BUFFERING);
              j.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER, {
                bufferPercent: 0
              });
              this.play()
            }
          };
          this.play = function() {
            if (B != a.api.events.state.PLAYING) {
              t();
              if (p) {
                E(a.api.events.state.PLAYING)
              } else {
                E(a.api.events.state.BUFFERING)
              }
              m.play()
            }
          };
          this.pause = function() {
            m.pause();
            E(a.api.events.state.PAUSED)
          };
          this.seek = function(I) {
            if (!(y.duration <= 0 || isNaN(y.duration)) && !(y.position <= 0 || isNaN(y.position))) {
              m.currentTime = I;
              m.play()
            }
          };
          _stop = this.stop = function(I) {
            if (!e.exists(I)) {
              I = true
            }
            g();
            if (I) {
              m.style.display = "none";
              p = false;
              var J = navigator.userAgent;
              if (J.match(/chrome/i)) {
                m.src = undefined
              } else {
                if (J.match(/safari/i)) {
                  m.removeAttribute("src")
                } else {
                  m.src = ""
                }
              }
              m.removeAttribute("controls");
              m.removeAttribute("poster");
              e.empty(m);
              m.load();
              H = true;
              if (m.webkitSupportsFullscreen) {
                try {
                  m.webkitExitFullscreen()
                } catch (K) {}
              }
            }
            E(a.api.events.state.IDLE)
          };
          this.fullscreen = function(I) {
            if (I === true) {
              this.resize("100%", "100%")
            } else {
              this.resize(y.config.width, y.config.height)
            }
          };
          this.resize = function(J, I) {
            if (false) {
              b(l, {
                width: J,
                height: I
              })
            }
            j.sendEvent(a.api.events.JWPLAYER_MEDIA_RESIZE, {
              fullscreen: y.fullscreen,
              width: J,
              hieght: I
            })
          };
          this.volume = function(I) {
            if (!d) {
              m.volume = I / 100;
              y.volume = I;
              j.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME, {
                volume: Math.round(I)
              })
            }
          };
          this.mute = function(I) {
            if (!d) {
              m.muted = I;
              y.mute = I;
              j.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE, {
                mute: I
              })
            }
          };
          this.getDisplayElement = function() {
            return m
          };
          this.hasChrome = function() {
            return false
          };
    
          function o() {
            m = document.createElement("video");
            B = a.api.events.state.IDLE;
            for (var I in r) {
              m.addEventListener(I, function(J) {
                if (e.exists(J.target.parentNode)) {
                  r[J.type](J)
                }
              }, true)
            }
            m.setAttribute("x-webkit-airplay", "allow");
            if (l.parentNode) {
              l.parentNode.replaceChild(m, l)
            }
            if (!m.id) {
              m.id = l.id
            }
          }
    
          function E(I) {
            if (I == a.api.events.state.PAUSED && B == a.api.events.state.IDLE) {
              return
            }
            if (B != I) {
              var J = B;
              y.state = B = I;
              j.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE, {
                oldstate: J,
                newstate: I
              })
            }
          }
    
          function n(I) {}
    
          function v(K) {
            var J;
            if (e.exists(K) && K.lengthComputable && K.total) {
              J = K.loaded / K.total * 100
            } else {
              if (e.exists(m.buffered) && (m.buffered.length > 0)) {
                var I = m.buffered.length - 1;
                if (I >= 0) {
                  J = m.buffered.end(I) / m.duration * 100
                }
              }
            } if (p === false && B == a.api.events.state.BUFFERING) {
              j.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL);
              p = true
            }
            if (!C) {
              if (J == 100) {
                C = true
              }
              if (e.exists(J) && (J > y.buffer)) {
                y.buffer = Math.round(J);
                j.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER, {
                  bufferPercent: Math.round(J)
                })
              }
            }
          }
    
          function D(J) {
            if (e.exists(J) && e.exists(J.target)) {
              if (!isNaN(J.target.duration) && (isNaN(y.duration) || y.duration < 1)) {
                if (J.target.duration == Infinity) {
                  y.duration = 0
                } else {
                  y.duration = Math.round(J.target.duration * 10) / 10
                }
              }
              if (!A && m.readyState > 0) {
                m.style.display = "block";
                E(a.api.events.state.PLAYING)
              }
              if (B == a.api.events.state.PLAYING) {
                if (!A && m.readyState > 0) {
                  A = true;
                  try {
                    if (m.currentTime < x.start) {
                      m.currentTime = x.start
                    }
                  } catch (I) {}
                  m.volume = y.volume / 100;
                  m.muted = y.mute
                }
                y.position = y.duration > 0 ? (Math.round(J.target.currentTime * 10) / 10) : 0;
                j.sendEvent(a.api.events.JWPLAYER_MEDIA_TIME, {
                  position: y.position,
                  duration: y.duration
                });
                if (y.position >= y.duration && (y.position > 0 || y.duration > 0)) {
                  w()
                }
              }
            }
            v(J)
          }
    
          function z(I) {}
    
          function k(I) {
            if (c[I.type]) {
              if (I.type == "ended") {
                w()
              } else {
                E(c[I.type])
              }
            }
          }
    
          function G(I) {
            var J = {
              height: I.target.videoHeight,
              width: I.target.videoWidth,
              duration: Math.round(I.target.duration * 10) / 10
            };
            if ((y.duration === 0 || isNaN(y.duration)) && I.target.duration != Infinity) {
              y.duration = Math.round(I.target.duration * 10) / 10
            }
            j.sendEvent(a.api.events.JWPLAYER_MEDIA_META, {
              metadata: J
            })
          }
    
          function u(K) {
            if (B == a.api.events.state.IDLE) {
              return
            }
            var J = "There was an error: ";
            if ((K.target.error && K.target.tagName.toLowerCase() == "video") || K.target.parentNode.error && K.target.parentNode.tagName.toLowerCase() == "video") {
              var I = !e.exists(K.target.error) ? K.target.parentNode.error : K.target.error;
              switch (I.code) {
                case I.MEDIA_ERR_ABORTED:
                  J = "You aborted the video playback: ";
                  break;
                case I.MEDIA_ERR_NETWORK:
                  J = "A network error caused the video download to fail part-way: ";
                  break;
                case I.MEDIA_ERR_DECODE:
                  J = "The video playback was aborted due to a corruption problem or because the video used features your browser did not support: ";
                  break;
                case I.MEDIA_ERR_SRC_NOT_SUPPORTED:
                  J = "The video could not be loaded, either because the server or network failed or because the format is not supported: ";
                  break;
                default:
                  J = "An unknown error occurred: ";
                  break
              }
            } else {
              if (K.target.tagName.toLowerCase() == "source") {
                q--;
                if (q > 0) {
                  return
                }
                J = "The video could not be loaded, either because the server or network failed or because the format is not supported: "
              } else {
                e.log("An unknown error occurred.  Continuing...");
                return
              }
            }
            _stop(false);
            J += F();
            _error = true;
            j.sendEvent(a.api.events.JWPLAYER_ERROR, {
              error: J
            });
            return
          }
    
          function F() {
            var K = "";
            for (var J in x.levels) {
              var I = x.levels[J];
              var L = l.ownerDocument.createElement("source");
              K += a.utils.getAbsolutePath(I.file);
              if (J < (x.levels.length - 1)) {
                K += ", "
              }
            }
            return K
          }
    
          function t() {
            if (!e.exists(f)) {
              f = setInterval(function() {
                v()
              }, 100)
            }
          }
    
          function g() {
            clearInterval(f);
            f = null
          }
    
          function w() {
            if (B != a.api.events.state.IDLE) {
              _stop(false);
              j.sendEvent(a.api.events.JWPLAYER_MEDIA_COMPLETE)
            }
          }
        }
      })(jwplayer);
      (function(a) {
        var c = {
          ended: a.api.events.state.IDLE,
          playing: a.api.events.state.PLAYING,
          pause: a.api.events.state.PAUSED,
          buffering: a.api.events.state.BUFFERING
        };
        var b = a.utils.css;
        a.html5.mediayoutube = function(j, e) {
          var f = new a.html5.eventdispatcher();
          a.utils.extend(this, f);
          var l = j;
          var h = document.getElementById(e.id);
          var g = a.api.events.state.IDLE;
          var n, m;
    
          function k(p) {
            if (g != p) {
              var q = g;
              l.state = p;
              g = p;
              f.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE, {
                oldstate: q,
                newstate: p
              })
            }
          }
          this.getDisplayElement = function() {
            return h
          };
          this.play = function() {
            if (g == a.api.events.state.IDLE) {
              f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER, {
                bufferPercent: 100
              });
              f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL);
              k(a.api.events.state.PLAYING)
            } else {
              if (g == a.api.events.state.PAUSED) {
                k(a.api.events.state.PLAYING)
              }
            }
          };
          this.pause = function() {
            k(a.api.events.state.PAUSED)
          };
          this.seek = function(p) {};
          this.stop = function(p) {
            if (!_utils.exists(p)) {
              p = true
            }
            l.position = 0;
            k(a.api.events.state.IDLE);
            if (p) {
              b(h, {
                display: "none"
              })
            }
          };
          this.volume = function(p) {
            l.volume = p;
            f.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME, {
              volume: Math.round(p)
            })
          };
          this.mute = function(p) {
            h.muted = p;
            l.mute = p;
            f.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE, {
              mute: p
            })
          };
          this.resize = function(q, p) {
            if (q * p > 0 && n) {
              n.width = m.width = q;
              n.height = m.height = p
            }
            f.sendEvent(a.api.events.JWPLAYER_MEDIA_RESIZE, {
              fullscreen: l.fullscreen,
              width: q,
              height: p
            })
          };
          this.fullscreen = function(p) {
            if (p === true) {
              this.resize("100%", "100%")
            } else {
              this.resize(l.config.width, l.config.height)
            }
          };
          this.load = function(p) {
            o(p);
            b(n, {
              display: "block"
            });
            k(a.api.events.state.BUFFERING);
            f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER, {
              bufferPercent: 0
            });
            f.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);
            this.play()
          };
          this.hasChrome = function() {
            return (g != a.api.events.state.IDLE)
          };
    
          function o(v) {
            var s = v.levels[0].file;
            s = ["http://www.youtube.com/v/", d(s), "&amp;hl=en_US&amp;fs=1&autoplay=1"].join("");
            n = document.createElement("object");
            n.id = h.id;
            n.style.position = "absolute";
            var u = {
              movie: s,
              allowfullscreen: "true",
              allowscriptaccess: "always"
            };
            for (var p in u) {
              var t = document.createElement("param");
              t.name = p;
              t.value = u[p];
              n.appendChild(t)
            }
            m = document.createElement("embed");
            n.appendChild(m);
            var q = {
              src: s,
              type: "application/x-shockwave-flash",
              allowfullscreen: "true",
              allowscriptaccess: "always",
              width: n.width,
              height: n.height
            };
            for (var r in q) {
              m.setAttribute(r, q[r])
            }
            n.appendChild(m);
            n.style.zIndex = 2147483000;
            if (h != n && h.parentNode) {
              h.parentNode.replaceChild(n, h)
            }
            h = n
          }
    
          function d(q) {
            var p = q.split(/\?|\#\!/);
            var s = "";
            for (var r = 0; r < p.length; r++) {
              if (p[r].substr(0, 2) == "v=") {
                s = p[r].substr(2)
              }
            }
            if (s == "") {
              if (q.indexOf("/v/") >= 0) {
                s = q.substr(q.indexOf("/v/") + 3)
              } else {
                if (q.indexOf("youtu.be") >= 0) {
                  s = q.substr(q.indexOf("youtu.be/") + 9)
                } else {
                  s = q
                }
              }
            }
            if (s.indexOf("?") > -1) {
              s = s.substr(0, s.indexOf("?"))
            }
            if (s.indexOf("&") > -1) {
              s = s.substr(0, s.indexOf("&"))
            }
            return s
          }
          this.embed = m;
          return this
        }
      })(jwplayer);
      (function(jwplayer) {
        var _configurableStateVariables = ["width", "height", "start", "duration", "volume", "mute", "fullscreen", "item", "plugins", "stretching"];
        jwplayer.html5.model = function(api, container, options) {
          var _api = api;
          var _container = container;
          var _model = {
            id: _container.id,
            playlist: [],
            state: jwplayer.api.events.state.IDLE,
            position: 0,
            buffer: 0,
            config: {
              width: 480,
              height: 320,
              item: -1,
              skin: undefined,
              file: undefined,
              image: undefined,
              start: 0,
              duration: 0,
              bufferlength: 5,
              volume: 90,
              mute: false,
              fullscreen: false,
              repeat: "",
              stretching: jwplayer.utils.stretching.UNIFORM,
              autostart: false,
              debug: undefined,
              screencolor: undefined
            }
          };
          var _media;
          var _eventDispatcher = new jwplayer.html5.eventdispatcher();
          var _components = ["display", "logo", "controlbar", "playlist", "dock"];
          jwplayer.utils.extend(_model, _eventDispatcher);
          for (var option in options) {
            if (typeof options[option] == "string") {
              var type = /color$/.test(option) ? "color" : null;
              options[option] = jwplayer.utils.typechecker(options[option], type)
            }
            var config = _model.config;
            var path = option.split(".");
            for (var edge in path) {
              if (edge == path.length - 1) {
                config[path[edge]] = options[option]
              } else {
                if (!jwplayer.utils.exists(config[path[edge]])) {
                  config[path[edge]] = {}
                }
                config = config[path[edge]]
              }
            }
          }
          for (var index in _configurableStateVariables) {
            var configurableStateVariable = _configurableStateVariables[index];
            _model[configurableStateVariable] = _model.config[configurableStateVariable]
          }
          var pluginorder = _components.concat([]);
          if (jwplayer.utils.exists(_model.plugins)) {
            if (typeof _model.plugins == "string") {
              var userplugins = _model.plugins.split(",");
              for (var userplugin in userplugins) {
                if (typeof userplugins[userplugin] == "string") {
                  pluginorder.push(userplugins[userplugin].replace(/^\s+|\s+$/g, ""))
                }
              }
            }
          }
          if (jwplayer.utils.isIOS()) {
            pluginorder = ["display", "logo", "dock", "playlist"];
            if (!jwplayer.utils.exists(_model.config.repeat)) {
              _model.config.repeat = "list"
            }
          } else {
            if (_model.config.chromeless) {
              pluginorder = ["logo", "dock", "playlist"];
              if (!jwplayer.utils.exists(_model.config.repeat)) {
                _model.config.repeat = "list"
              }
            }
          }
          _model.plugins = {
            order: pluginorder,
            config: {},
            object: {}
          };
          if (typeof _model.config.components != "undefined") {
            for (var component in _model.config.components) {
              _model.plugins.config[component] = _model.config.components[component]
            }
          }
          for (var pluginIndex in _model.plugins.order) {
            var pluginName = _model.plugins.order[pluginIndex];
            var pluginConfig = !jwplayer.utils.exists(_model.plugins.config[pluginName]) ? {} : _model.plugins.config[pluginName];
            _model.plugins.config[pluginName] = !jwplayer.utils.exists(_model.plugins.config[pluginName]) ? pluginConfig : jwplayer.utils.extend(_model.plugins.config[pluginName], pluginConfig);
            if (!jwplayer.utils.exists(_model.plugins.config[pluginName].position)) {
              if (pluginName == "playlist") {
                _model.plugins.config[pluginName].position = jwplayer.html5.view.positions.NONE
              } else {
                _model.plugins.config[pluginName].position = jwplayer.html5.view.positions.OVER
              }
            } else {
              _model.plugins.config[pluginName].position = _model.plugins.config[pluginName].position.toString().toUpperCase()
            }
          }
          if (typeof _model.plugins.config.dock != "undefined") {
            if (typeof _model.plugins.config.dock != "object") {
              var position = _model.plugins.config.dock.toString().toUpperCase();
              _model.plugins.config.dock = {
                position: position
              }
            }
            if (typeof _model.plugins.config.dock.position != "undefined") {
              _model.plugins.config.dock.align = _model.plugins.config.dock.position;
              _model.plugins.config.dock.position = jwplayer.html5.view.positions.OVER
            }
          }
    
          function _loadExternal(playlistfile) {
            var loader = new jwplayer.html5.playlistloader();
            loader.addEventListener(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED, function(evt) {
              _model.playlist = new jwplayer.html5.playlist(evt);
              _loadComplete(true)
            });
            loader.addEventListener(jwplayer.api.events.JWPLAYER_ERROR, function(evt) {
              _model.playlist = new jwplayer.html5.playlist({
                playlist: []
              });
              _loadComplete(false)
            });
            loader.load(playlistfile)
          }
    
          function _loadComplete() {
            if (_model.config.shuffle) {
              _model.item = _getShuffleItem()
            } else {
              if (_model.config.item >= _model.playlist.length) {
                _model.config.item = _model.playlist.length - 1
              } else {
                if (_model.config.item < 0) {
                  _model.config.item = 0
                }
              }
              _model.item = _model.config.item
            }
            _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED, {
              playlist: _model.playlist
            });
            _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM, {
              index: _model.item
            })
          }
          _model.loadPlaylist = function(arg) {
            var input;
            if (typeof arg == "string") {
              if (arg.indexOf("[") == 0 || arg.indexOf("{") == "0") {
                try {
                  input = eval(arg)
                } catch (err) {
                  input = arg
                }
              } else {
                input = arg
              }
            } else {
              input = arg
            }
            var config;
            switch (jwplayer.utils.typeOf(input)) {
              case "object":
                config = input;
                break;
              case "array":
                config = {
                  playlist: input
                };
                break;
              default:
                _loadExternal(input);
                return;
                break
            }
            _model.playlist = new jwplayer.html5.playlist(config);
            if (jwplayer.utils.extension(_model.playlist[0].file) == "xml") {
              _loadExternal(_model.playlist[0].file)
            } else {
              _loadComplete()
            }
          };
    
          function _getShuffleItem() {
            var result = null;
            if (_model.playlist.length > 1) {
              while (!jwplayer.utils.exists(result)) {
                result = Math.floor(Math.random() * _model.playlist.length);
                if (result == _model.item) {
                  result = null
                }
              }
            } else {
              result = 0
            }
            return result
          }
    
          function forward(evt) {
            if (evt.type == jwplayer.api.events.JWPLAYER_MEDIA_LOADED) {
              _container = _media.getDisplayElement()
            }
            _eventDispatcher.sendEvent(evt.type, evt)
          }
          var _mediaProviders = {};
          _model.setActiveMediaProvider = function(playlistItem) {
            if (playlistItem.provider == "audio") {
              playlistItem.provider = "sound"
            }
            var provider = playlistItem.provider;
            var current = _media ? _media.getDisplayElement() : null;
            if (provider == "sound" || provider == "http" || provider == "") {
              provider = "video"
            }
            if (!jwplayer.utils.exists(_mediaProviders[provider])) {
              switch (provider) {
                case "video":
                  _media = new jwplayer.html5.mediavideo(_model, current ? current : _container);
                  break;
                case "youtube":
                  _media = new jwplayer.html5.mediayoutube(_model, current ? current : _container);
                  break
              }
              if (!jwplayer.utils.exists(_media)) {
                return false
              }
              _media.addGlobalListener(forward);
              _mediaProviders[provider] = _media
            } else {
              if (_media != _mediaProviders[provider]) {
                if (_media) {
                  _media.stop()
                }
                _media = _mediaProviders[provider]
              }
            }
            return true
          };
          _model.getMedia = function() {
            return _media
          };
          _model.seek = function(pos) {
            _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_SEEK, {
              position: _model.position,
              offset: pos
            });
            return _media.seek(pos)
          };
          _model.setupPlugins = function() {
            if (!jwplayer.utils.exists(_model.plugins) || !jwplayer.utils.exists(_model.plugins.order) || _model.plugins.order.length == 0) {
              jwplayer.utils.log("No plugins to set up");
              return _model
            }
            for (var i = 0; i < _model.plugins.order.length; i++) {
              try {
                var pluginName = _model.plugins.order[i];
                if (jwplayer.utils.exists(jwplayer.html5[pluginName])) {
                  if (pluginName == "playlist") {
                    _model.plugins.object[pluginName] = new jwplayer.html5.playlistcomponent(_api, _model.plugins.config[pluginName])
                  } else {
                    _model.plugins.object[pluginName] = new jwplayer.html5[pluginName](_api, _model.plugins.config[pluginName])
                  }
                } else {
                  _model.plugins.order.splice(plugin, plugin + 1)
                } if (typeof _model.plugins.object[pluginName].addGlobalListener == "function") {
                  _model.plugins.object[pluginName].addGlobalListener(forward)
                }
              } catch (err) {
                jwplayer.utils.log("Could not setup " + pluginName)
              }
            }
          };
          return _model
        }
      })(jwplayer);
      (function(a) {
        a.html5.playlist = function(b) {
          var d = [];
          if (b.playlist && b.playlist instanceof Array && b.playlist.length > 0) {
            for (var c in b.playlist) {
              if (!isNaN(parseInt(c))) {
                d.push(new a.html5.playlistitem(b.playlist[c]))
              }
            }
          } else {
            d.push(new a.html5.playlistitem(b))
          }
          return d
        }
      })(jwplayer);
      (function(a) {
        var c = {
          size: 180,
          position: a.html5.view.positions.NONE,
          itemheight: 60,
          thumbs: true,
          fontcolor: "#000000",
          overcolor: "",
          activecolor: "",
          backgroundcolor: "#f8f8f8",
          font: "_sans",
          fontsize: "",
          fontstyle: "",
          fontweight: ""
        };
        var b = {
          _sans: "Arial, Helvetica, sans-serif",
          _serif: "Times, Times New Roman, serif",
          _typewriter: "Courier New, Courier, monospace"
        };
        _utils = a.utils;
        _css = _utils.css;
        _hide = function(d) {
          _css(d, {
            display: "none"
          })
        };
        _show = function(d) {
          _css(d, {
            display: "block"
          })
        };
        a.html5.playlistcomponent = function(r, B) {
          var w = r;
          var e = a.utils.extend({}, c, w.skin.getComponentSettings("playlist"), B);
          if (e.position == a.html5.view.positions.NONE || typeof a.html5.view.positions[e.position] == "undefined") {
            return
          }
          var x;
          var l;
          var C;
          var d;
          var g;
          var f;
          var k = -1;
          var h = {
            background: undefined,
            item: undefined,
            itemOver: undefined,
            itemImage: undefined,
            itemActive: undefined
          };
          this.getDisplayElement = function() {
            return x
          };
          this.resize = function(F, D) {
            l = F;
            C = D;
            if (w.jwGetFullscreen()) {
              _hide(x)
            } else {
              var E = {
                display: "block",
                width: l,
                height: C
              };
              _css(x, E)
            }
          };
          this.show = function() {
            _show(x)
          };
          this.hide = function() {
            _hide(x)
          };
    
          function j() {
            x = document.createElement("div");
            x.id = w.id + "_jwplayer_playlistcomponent";
            switch (e.position) {
              case a.html5.view.positions.RIGHT:
              case a.html5.view.positions.LEFT:
                x.style.width = e.size + "px";
                break;
              case a.html5.view.positions.TOP:
              case a.html5.view.positions.BOTTOM:
                x.style.height = e.size + "px";
                break
            }
            A();
            if (h.item) {
              e.itemheight = h.item.height
            }
            x.style.backgroundColor = "#C6C6C6";
            w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED, s);
            w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM, u);
            w.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE, m)
          }
    
          function p() {
            var D = document.createElement("ul");
            _css(D, {
              width: x.style.width,
              minWidth: x.style.width,
              height: x.style.height,
              backgroundColor: e.backgroundcolor,
              backgroundImage: h.background ? "url(" + h.background.src + ")" : "",
              color: e.fontcolor,
              listStyle: "none",
              margin: 0,
              padding: 0,
              fontFamily: b[e.font] ? b[e.font] : b._sans,
              fontSize: (e.fontsize ? e.fontsize : 11) + "px",
              fontStyle: e.fontstyle,
              fontWeight: e.fontweight,
              overflowY: "auto"
            });
            return D
          }
    
          function y(D) {
            return function() {
              var E = f.getElementsByClassName("item")[D];
              var F = e.fontcolor;
              var G = h.item ? "url(" + h.item.src + ")" : "";
              if (D == w.jwGetPlaylistIndex()) {
                if (e.activecolor !== "") {
                  F = e.activecolor
                }
                if (h.itemActive) {
                  G = "url(" + h.itemActive.src + ")"
                }
              }
              _css(E, {
                color: e.overcolor !== "" ? e.overcolor : F,
                backgroundImage: h.itemOver ? "url(" + h.itemOver.src + ")" : G
              })
            }
          }
    
          function o(D) {
            return function() {
              var E = f.getElementsByClassName("item")[D];
              var F = e.fontcolor;
              var G = h.item ? "url(" + h.item.src + ")" : "";
              if (D == w.jwGetPlaylistIndex()) {
                if (e.activecolor !== "") {
                  F = e.activecolor
                }
                if (h.itemActive) {
                  G = "url(" + h.itemActive.src + ")"
                }
              }
              _css(E, {
                color: F,
                backgroundImage: G
              })
            }
          }
    
          function q(I) {
            var P = d[I];
            var O = document.createElement("li");
            O.className = "item";
            _css(O, {
              height: e.itemheight,
              display: "block",
              cursor: "pointer",
              backgroundImage: h.item ? "url(" + h.item.src + ")" : "",
              backgroundSize: "100% " + e.itemheight + "px"
            });
            O.onmouseover = y(I);
            O.onmouseout = o(I);
            var J = document.createElement("div");
            var F = new Image();
            var K = 0;
            var L = 0;
            var M = 0;
            if (v() && (P.image || P["playlist.image"] || h.itemImage)) {
              F.className = "image";
              if (h.itemImage) {
                K = (e.itemheight - h.itemImage.height) / 2;
                L = h.itemImage.width;
                M = h.itemImage.height
              } else {
                L = e.itemheight * 4 / 3;
                M = e.itemheight
              }
              _css(J, {
                height: M,
                width: L,
                "float": "left",
                styleFloat: "left",
                cssFloat: "left",
                margin: "0 5px 0 0",
                background: "black",
                overflow: "hidden",
                margin: K + "px",
                position: "relative"
              });
              _css(F, {
                position: "relative"
              });
              J.appendChild(F);
              F.onload = function() {
                a.utils.stretch(a.utils.stretching.FILL, F, L, M, this.naturalWidth, this.naturalHeight)
              };
              if (P["playlist.image"]) {
                F.src = P["playlist.image"]
              } else {
                if (P.image) {
                  F.src = P.image
                } else {
                  if (h.itemImage) {
                    F.src = h.itemImage.src
                  }
                }
              }
              O.appendChild(J)
            }
            var E = l - L - K * 2;
            if (C < e.itemheight * d.length) {
              E -= 15
            }
            var D = document.createElement("div");
            _css(D, {
              position: "relative",
              height: "100%",
              overflow: "hidden"
            });
            var G = document.createElement("span");
            if (P.duration > 0) {
              G.className = "duration";
              _css(G, {
                fontSize: (e.fontsize ? e.fontsize : 11) + "px",
                fontWeight: (e.fontweight ? e.fontweight : "bold"),
                width: "40px",
                height: e.fontsize ? e.fontsize + 10 : 20,
                lineHeight: 24,
                "float": "right",
                styleFloat: "right",
                cssFloat: "right"
              });
              G.innerHTML = _utils.timeFormat(P.duration);
              D.appendChild(G)
            }
            var N = document.createElement("span");
            N.className = "title";
            _css(N, {
              padding: "5px 5px 0 " + (K ? 0 : "5px"),
              height: e.fontsize ? e.fontsize + 10 : 20,
              lineHeight: e.fontsize ? e.fontsize + 10 : 20,
              overflow: "hidden",
              "float": "left",
              styleFloat: "left",
              cssFloat: "left",
              width: ((P.duration > 0) ? E - 50 : E) - 10 + "px",
              fontSize: (e.fontsize ? e.fontsize : 13) + "px",
              fontWeight: (e.fontweight ? e.fontweight : "bold")
            });
            N.innerHTML = P ? P.title : "";
            D.appendChild(N);
            if (P.description) {
              var H = document.createElement("span");
              H.className = "description";
              _css(H, {
                display: "block",
                "float": "left",
                styleFloat: "left",
                cssFloat: "left",
                margin: 0,
                paddingLeft: N.style.paddingLeft,
                paddingRight: N.style.paddingRight,
                lineHeight: (e.fontsize ? e.fontsize + 4 : 16) + "px",
                overflow: "hidden",
                position: "relative"
              });
              H.innerHTML = P.description;
              D.appendChild(H)
            }
            O.appendChild(D);
            return O
          }
    
          function s(E) {
            x.innerHTML = "";
            d = w.jwGetPlaylist();
            if (!d) {
              return
            }
            items = [];
            f = p();
            for (var F = 0; F < d.length; F++) {
              var D = q(F);
              D.onclick = z(F);
              f.appendChild(D);
              items.push(D)
            }
            k = w.jwGetPlaylistIndex();
            o(k)();
            x.appendChild(f);
            if (_utils.isIOS() && window.iScroll) {
              f.style.height = e.itemheight * d.length + "px";
              var G = new iScroll(x.id)
            }
          }
    
          function z(D) {
            return function() {
              w.jwPlaylistItem(D);
              w.jwPlay(true)
            }
          }
    
          function n() {
            f.scrollTop = w.jwGetPlaylistIndex() * e.itemheight
          }
    
          function v() {
            return e.thumbs.toString().toLowerCase() == "true"
          }
    
          function u(D) {
            if (k >= 0) {
              o(k)();
              k = D.index
            }
            o(D.index)();
            n()
          }
    
          function m() {
            if (e.position == a.html5.view.positions.OVER) {
              switch (w.jwGetState()) {
                case a.api.events.state.IDLE:
                  _show(x);
                  break;
                default:
                  _hide(x);
                  break
              }
            }
          }
    
          function A() {
            for (var D in h) {
              h[D] = t(D)
            }
          }
    
          function t(D) {
            return w.skin.getSkinElement("playlist", D)
          }
          j();
          return this
        }
      })(jwplayer);
      (function(b) {
        b.html5.playlistitem = function(d) {
          var e = {
            author: "",
            date: "",
            description: "",
            image: "",
            link: "",
            mediaid: "",
            tags: "",
            title: "",
            provider: "",
            file: "",
            streamer: "",
            duration: -1,
            start: 0,
            currentLevel: -1,
            levels: []
          };
          var c = b.utils.extend({}, e, d);
          if (c.type) {
            c.provider = c.type;
            delete c.type
          }
          if (c.levels.length === 0) {
            c.levels[0] = new b.html5.playlistitemlevel(c)
          }
          if (!c.provider) {
            c.provider = a(c.levels[0])
          } else {
            c.provider = c.provider.toLowerCase()
          }
          return c
        };
    
        function a(e) {
          if (b.utils.isYouTube(e.file)) {
            return "youtube"
          } else {
            var f = b.utils.extension(e.file);
            var c;
            if (f && b.utils.extensionmap[f]) {
              if (f == "m3u8") {
                return "video"
              }
              c = b.utils.extensionmap[f].html5
            } else {
              if (e.type) {
                c = e.type
              }
            } if (c) {
              var d = c.split("/")[0];
              if (d == "audio") {
                return "sound"
              } else {
                if (d == "video") {
                  return d
                }
              }
            }
          }
          return ""
        }
      })(jwplayer);
      (function(a) {
        a.html5.playlistitemlevel = function(b) {
          var d = {
            file: "",
            streamer: "",
            bitrate: 0,
            width: 0
          };
          for (var c in d) {
            if (a.utils.exists(b[c])) {
              d[c] = b[c]
            }
          }
          return d
        }
      })(jwplayer);
      (function(a) {
        a.html5.playlistloader = function() {
          var c = new a.html5.eventdispatcher();
          a.utils.extend(this, c);
          this.load = function(e) {
            a.utils.ajax(e, d, b)
          };
    
          function d(g) {
            var f = [];
            try {
              var f = a.utils.parsers.rssparser.parse(g.responseXML.firstChild);
              c.sendEvent(a.api.events.JWPLAYER_PLAYLIST_LOADED, {
                playlist: new a.html5.playlist({
                  playlist: f
                })
              })
            } catch (h) {
              b("Could not parse the playlist")
            }
          }
    
          function b(e) {
            c.sendEvent(a.api.events.JWPLAYER_ERROR, {
              error: e ? e : "could not load playlist for whatever reason.  too bad"
            })
          }
        }
      })(jwplayer);
      (function(a) {
        a.html5.skin = function() {
          var b = {};
          var c = false;
          this.load = function(d, e) {
            new a.html5.skinloader(d, function(f) {
              c = true;
              b = f;
              e()
            }, function() {
              new a.html5.skinloader("", function(f) {
                c = true;
                b = f;
                e()
              })
            })
          };
          this.getSkinElement = function(d, e) {
            if (c) {
              try {
                return b[d].elements[e]
              } catch (f) {
                a.utils.log("No such skin component / element: ", [d, e])
              }
            }
            return null
          };
          this.getComponentSettings = function(d) {
            if (c) {
              return b[d].settings
            }
            return null
          };
          this.getComponentLayout = function(d) {
            if (c) {
              return b[d].layout
            }
            return null
          }
        }
      })(jwplayer);
      (function(a) {
        a.html5.skinloader = function(f, p, k) {
          var o = {};
          var c = p;
          var l = k;
          var e = true;
          var j;
          var n = f;
          var s = false;
    
          function m() {
            if (typeof n != "string" || n === "") {
              d(a.html5.defaultSkin().xml)
            } else {
              a.utils.ajax(a.utils.getAbsolutePath(n), function(t) {
                try {
                  if (a.utils.exists(t.responseXML)) {
                    d(t.responseXML);
                    return
                  }
                } catch (u) {
                  h()
                }
                d(a.html5.defaultSkin().xml)
              }, function(t) {
                d(a.html5.defaultSkin().xml)
              })
            }
          }
    
          function d(y) {
            var E = y.getElementsByTagName("component");
            if (E.length === 0) {
              return
            }
            for (var H = 0; H < E.length; H++) {
              var C = E[H].getAttribute("name");
              var B = {
                settings: {},
                elements: {},
                layout: {}
              };
              o[C] = B;
              var G = E[H].getElementsByTagName("elements")[0].getElementsByTagName("element");
              for (var F = 0; F < G.length; F++) {
                b(G[F], C)
              }
              var z = E[H].getElementsByTagName("settings")[0];
              if (z && z.childNodes.length > 0) {
                var K = z.getElementsByTagName("setting");
                for (var P = 0; P < K.length; P++) {
                  var Q = K[P].getAttribute("name");
                  var I = K[P].getAttribute("value");
                  var x = /color$/.test(Q) ? "color" : null;
                  o[C].settings[Q] = a.utils.typechecker(I, x)
                }
              }
              var L = E[H].getElementsByTagName("layout")[0];
              if (L && L.childNodes.length > 0) {
                var M = L.getElementsByTagName("group");
                for (var w = 0; w < M.length; w++) {
                  var A = M[w];
                  o[C].layout[A.getAttribute("position")] = {
                    elements: []
                  };
                  for (var O = 0; O < A.attributes.length; O++) {
                    var D = A.attributes[O];
                    o[C].layout[A.getAttribute("position")][D.name] = D.value
                  }
                  var N = A.getElementsByTagName("*");
                  for (var v = 0; v < N.length; v++) {
                    var t = N[v];
                    o[C].layout[A.getAttribute("position")].elements.push({
                      type: t.tagName
                    });
                    for (var u = 0; u < t.attributes.length; u++) {
                      var J = t.attributes[u];
                      o[C].layout[A.getAttribute("position")].elements[v][J.name] = J.value
                    }
                    if (!a.utils.exists(o[C].layout[A.getAttribute("position")].elements[v].name)) {
                      o[C].layout[A.getAttribute("position")].elements[v].name = t.tagName
                    }
                  }
                }
              }
              e = false;
              r()
            }
          }
    
          function r() {
            clearInterval(j);
            if (!s) {
              j = setInterval(function() {
                q()
              }, 100)
            }
          }
    
          function b(y, x) {
            var w = new Image();
            var t = y.getAttribute("name");
            var v = y.getAttribute("src");
            var A;
            if (v.indexOf("data:image/png;base64,") === 0) {
              A = v
            } else {
              var u = a.utils.getAbsolutePath(n);
              var z = u.substr(0, u.lastIndexOf("/"));
              A = [z, x, v].join("/")
            }
            o[x].elements[t] = {
              height: 0,
              width: 0,
              src: "",
              ready: false,
              image: w
            };
            w.onload = function(B) {
              g(w, t, x)
            };
            w.onerror = function(B) {
              s = true;
              r();
              l()
            };
            w.src = A
          }
    
          function h() {
            for (var u in o) {
              var w = o[u];
              for (var t in w.elements) {
                var x = w.elements[t];
                var v = x.image;
                v.onload = null;
                v.onerror = null;
                delete x.image;
                delete w.elements[t]
              }
              delete o[u]
            }
          }
    
          function q() {
            for (var t in o) {
              if (t != "properties") {
                for (var u in o[t].elements) {
                  if (!o[t].elements[u].ready) {
                    return
                  }
                }
              }
            }
            if (e === false) {
              clearInterval(j);
              c(o)
            }
          }
    
          function g(t, v, u) {
            if (o[u] && o[u].elements[v]) {
              o[u].elements[v].height = t.height;
              o[u].elements[v].width = t.width;
              o[u].elements[v].src = t.src;
              o[u].elements[v].ready = true;
              r()
            } else {
              a.utils.log("Loaded an image for a missing element: " + u + "." + v)
            }
          }
          m()
        }
      })(jwplayer);
      (function(a) {
        a.html5.api = function(c, n) {
          var m = {};
          var f = document.createElement("div");
          c.parentNode.replaceChild(f, c);
          f.id = c.id;
          m.version = a.version;
          m.id = f.id;
          var l = new a.html5.model(m, f, n);
          var j = new a.html5.view(m, f, l);
          var k = new a.html5.controller(m, f, l, j);
          m.skin = new a.html5.skin();
          m.jwPlay = function(o) {
            if (typeof o == "undefined") {
              e()
            } else {
              if (o.toString().toLowerCase() == "true") {
                k.play()
              } else {
                k.pause()
              }
            }
          };
          m.jwPause = function(o) {
            if (typeof o == "undefined") {
              e()
            } else {
              if (o.toString().toLowerCase() == "true") {
                k.pause()
              } else {
                k.play()
              }
            }
          };
    
          function e() {
            if (l.state == a.api.events.state.PLAYING || l.state == a.api.events.state.BUFFERING) {
              k.pause()
            } else {
              k.play()
            }
          }
          m.jwStop = k.stop;
          m.jwSeek = k.seek;
          m.jwPlaylistItem = k.item;
          m.jwPlaylistNext = k.next;
          m.jwPlaylistPrev = k.prev;
          m.jwResize = k.resize;
          m.jwLoad = k.load;
    
          function h(o) {
            return function() {
              return l[o]
            }
          }
    
          function d(o, q, p) {
            return function() {
              var r = l.plugins.object[o];
              if (r && r[q] && typeof r[q] == "function") {
                r[q].apply(r, p)
              }
            }
          }
          m.jwGetItem = h("item");
          m.jwGetPosition = h("position");
          m.jwGetDuration = h("duration");
          m.jwGetBuffer = h("buffer");
          m.jwGetWidth = h("width");
          m.jwGetHeight = h("height");
          m.jwGetFullscreen = h("fullscreen");
          m.jwSetFullscreen = k.setFullscreen;
          m.jwGetVolume = h("volume");
          m.jwSetVolume = k.setVolume;
          m.jwGetMute = h("mute");
          m.jwSetMute = k.setMute;
          m.jwGetStretching = h("stretching");
          m.jwGetState = h("state");
          m.jwGetVersion = function() {
            return m.version
          };
          m.jwGetPlaylist = function() {
            return l.playlist
          };
          m.jwGetPlaylistIndex = m.jwGetItem;
          m.jwAddEventListener = k.addEventListener;
          m.jwRemoveEventListener = k.removeEventListener;
          m.jwSendEvent = k.sendEvent;
          m.jwDockSetButton = function(r, o, p, q) {
            if (l.plugins.object.dock && l.plugins.object.dock.setButton) {
              l.plugins.object.dock.setButton(r, o, p, q)
            }
          };
          m.jwControlbarShow = d("controlbar", "show");
          m.jwControlbarHide = d("controlbar", "hide");
          m.jwDockShow = d("dock", "show");
          m.jwDockHide = d("dock", "hide");
          m.jwDisplayShow = d("display", "show");
          m.jwDisplayHide = d("display", "hide");
          m.jwGetLevel = function() {};
          m.jwGetBandwidth = function() {};
          m.jwGetLockState = function() {};
          m.jwLock = function() {};
          m.jwUnlock = function() {};
    
          function b() {
            if (l.config.playlistfile) {
              l.addEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED, g);
              l.loadPlaylist(l.config.playlistfile)
            } else {
              if (typeof l.config.playlist == "string") {
                l.addEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED, g);
                l.loadPlaylist(l.config.playlist)
              } else {
                l.loadPlaylist(l.config);
                setTimeout(g, 25)
              }
            }
          }
    
          function g(o) {
            l.removeEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED, g);
            l.setupPlugins();
            j.setup();
            var o = {
              id: m.id,
              version: m.version
            };
            k.playerReady(o)
          }
          if (l.config.chromeless && !a.utils.isIOS()) {
            b()
          } else {
            m.skin.load(l.config.skin, b)
          }
          return m
        }
      })(jwplayer)
    };

Test runner

Ready to run.

Testing in
TestOps/sec
Using DOMs excessively
// Cực kì không tốt
for (var i = 0; i < 100; i++) {
  document.getElementById("test").innerHTML += "<span>" + i + "</span>";
}
ready
Using DOMs wisely
// Tốt
var test = "";

for (var i = 0; i < 100; i++) {
  test += "<span>" + i + "</span>";
}

document.getElementById("test").innerHTML = test;
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.