Changeset 1410


Ignore:
Timestamp:
11/09/10 14:16:38 (3 years ago)
Author:
zach
Message:

Merging HTML5 and JS

Location:
trunk
Files:
1 deleted
29 edited
4 copied

Legend:

Unmodified
Added
Removed
  • trunk/js/bin-debug/jwplayer.js

    r1404 r1410  
    11681168         
    11691169})(jwplayer); 
     1170/** 
     1171 * Core component of the JW Player (initialization, API). 
     1172 * 
     1173 * @author zach 
     1174 * @version 1.0 
     1175 */ 
     1176(function(jwplayer) { 
     1177        jwplayer.html5 = function(container) { 
     1178                var _container = container; 
     1179                 
     1180                this.setup = function(options) { 
     1181                        jwplayer.utils.extend(this, new jwplayer.html5.api(_container, options)); 
     1182                        return this; 
     1183                }; 
     1184                 
     1185                return this; 
     1186        }; 
     1187         
     1188        jwplayer.html5.version = '5.3'; 
     1189})(jwplayer); 
     1190 
     1191/** 
     1192 * Utility methods for the JW Player. 
     1193 * 
     1194 * @author zach 
     1195 * @version 1.0 
     1196 */ 
     1197(function(jwplayer) { 
     1198 
     1199        jwplayer.html5.utils = function() { 
     1200        }; 
     1201         
     1202        /** Returns the extension of a file name **/ 
     1203        jwplayer.html5.utils.extension = function(path) { 
     1204                return path.substr(path.lastIndexOf('.') + 1, path.length).toLowerCase(); 
     1205        }; 
     1206         
     1207        /** Gets an absolute file path based on a relative filepath **/ 
     1208        jwplayer.html5.utils.getAbsolutePath = function(path) { 
     1209                if (path === undefined) { 
     1210                        return undefined; 
     1211                } 
     1212                if (isAbsolutePath(path)) { 
     1213                        return path; 
     1214                } 
     1215                var protocol = document.location.href.substring(0, document.location.href.indexOf("://") + 3); 
     1216                var domain = document.location.href.substring(protocol.length, document.location.href.indexOf('/', protocol.length + 1)); 
     1217                var patharray; 
     1218                if (path.indexOf("/") === 0) { 
     1219                        patharray = path.split("/"); 
     1220                } else { 
     1221                        var basepath = document.location.href.split("?")[0]; 
     1222                        basepath = basepath.substring(protocol.length + domain.length + 1, basepath.lastIndexOf('/')); 
     1223                        patharray = basepath.split("/").concat(path.split("/")); 
     1224                } 
     1225                var result = []; 
     1226                for (var i = 0; i < patharray.length; i++) { 
     1227                        if (!patharray[i] || patharray[i] === undefined || patharray[i] == ".") { 
     1228                                continue; 
     1229                        } else if (patharray[i] == "..") { 
     1230                                result.pop(); 
     1231                        } else { 
     1232                                result.push(patharray[i]); 
     1233                        } 
     1234                } 
     1235                return protocol + domain + "/" + result.join("/"); 
     1236        }; 
     1237         
     1238        function isAbsolutePath(path) { 
     1239                if (path === null) { 
     1240                        return; 
     1241                } 
     1242                var protocol = path.indexOf("://"); 
     1243                var queryparams = path.indexOf("?"); 
     1244                return (protocol > 0 && (queryparams < 0 || (queryparams > protocol))); 
     1245        } 
     1246         
     1247         
     1248        jwplayer.html5.utils.mapEmpty = function(map) { 
     1249                for (var val in map) { 
     1250                        return false; 
     1251                } 
     1252                return true; 
     1253        }; 
     1254         
     1255        jwplayer.html5.utils.mapLength = function(map) { 
     1256                var result = 0; 
     1257                for (var val in map) { 
     1258                        result++; 
     1259                } 
     1260                return result; 
     1261        }; 
     1262         
     1263        /** Logger **/ 
     1264        jwplayer.html5.utils.log = function(msg, obj) { 
     1265                if (typeof console != "undefined" && typeof console.log != "undefined") { 
     1266                        if (obj) { 
     1267                                console.log(msg, obj); 
     1268                        } else { 
     1269                                console.log(msg); 
     1270                        } 
     1271                } 
     1272        }; 
     1273         
     1274        jwplayer.html5.utils.css = function(domelement, styles, debug) { 
     1275                if (domelement !== undefined) { 
     1276                        for (var style in styles) { 
     1277                                try { 
     1278                                        if (typeof styles[style] === "undefined") { 
     1279                                                continue; 
     1280                                        } else if (typeof styles[style] == "number" && !(style == "zIndex" || style == "opacity")) { 
     1281                                                if (isNaN(styles[style])) { 
     1282                                                        continue; 
     1283                                                } 
     1284                                                if (style.match(/color/i)) { 
     1285                                                        styles[style] = "#" + _pad(styles[style].toString(16), 6); 
     1286                                                } else { 
     1287                                                        styles[style] = styles[style] + "px"; 
     1288                                                } 
     1289                                        } 
     1290                                        domelement.style[style] = styles[style]; 
     1291                                } catch (err) { 
     1292                                } 
     1293                        } 
     1294                } 
     1295        }; 
     1296         
     1297        function _pad(string, length) { 
     1298                while (string.length < length) { 
     1299                        string = "0" + string; 
     1300                } 
     1301                return string; 
     1302        } 
     1303         
     1304        jwplayer.html5.utils.isYouTube = function(path) { 
     1305                return path.indexOf("youtube.com") > -1; 
     1306        }; 
     1307         
     1308        jwplayer.html5.utils.getYouTubeId = function(path) { 
     1309                path.indexOf("youtube.com" > 0); 
     1310        }; 
     1311         
     1312})(jwplayer); 
     1313/** 
     1314 * JW Player view component 
     1315 * 
     1316 * @author zach 
     1317 * @version 1.0 
     1318 */ 
     1319(function(jwplayer) { 
     1320 
     1321        var _css = jwplayer.html5.utils.css; 
     1322         
     1323        jwplayer.html5.view = function(api, container, model) { 
     1324                var _api = api; 
     1325                var _container = container; 
     1326                var _model = model; 
     1327                var _wrapper; 
     1328                var _width; 
     1329                var _height; 
     1330                var _box; 
     1331                var _zIndex; 
     1332                var _resizeInterval; 
     1333                 
     1334                function createWrapper() { 
     1335                        _wrapper = document.createElement("div"); 
     1336                        _wrapper.id = _container.id; 
     1337                        _wrapper.className = _container.className; 
     1338                        _container.id = _wrapper.id + "_video"; 
     1339                         
     1340                        _css(_wrapper, { 
     1341                                position: "relative", 
     1342                                height: _model.height, 
     1343                                width: _model.width, 
     1344                                padding: 0, 
     1345                                backgroundColor: getBackgroundColor(), 
     1346                                zIndex: 0 
     1347                        }); 
     1348                         
     1349                        function getBackgroundColor() { 
     1350                                if (_api.skin.getComponentSettings("display") && _api.skin.getComponentSettings("display").backgroundcolor) { 
     1351                                        return _api.skin.getComponentSettings("display").backgroundcolor; 
     1352                                } 
     1353                                return parseInt("000000", 16); 
     1354                        } 
     1355                         
     1356                        _css(_container, { 
     1357                                position: "absolute", 
     1358                                width: _model.width, 
     1359                                height: _model.height, 
     1360                                top: 0, 
     1361                                left: 0, 
     1362                                zIndex: 1, 
     1363                                margin: "auto", 
     1364                                display: "block" 
     1365                        }); 
     1366                         
     1367                        jwplayer.utils.wrap(_container, _wrapper); 
     1368                         
     1369                        _box = document.createElement("div"); 
     1370                        _box.id = _wrapper.id + "_displayarea"; 
     1371                        _wrapper.appendChild(_box); 
     1372                } 
     1373                 
     1374                function layoutComponents() { 
     1375                        for (var pluginIndex in _model.plugins.order) { 
     1376                                var pluginName = _model.plugins.order[pluginIndex]; 
     1377                                if (_model.plugins.object[pluginName].getDisplayElement !== undefined) { 
     1378                                        _model.plugins.object[pluginName].height = getNumber(_model.plugins.object[pluginName].getDisplayElement().style.height); 
     1379                                        _model.plugins.object[pluginName].width = getNumber(_model.plugins.object[pluginName].getDisplayElement().style.width); 
     1380                                        _model.plugins.config[pluginName].currentPosition = _model.plugins.config[pluginName].position; 
     1381                                } 
     1382                        } 
     1383                        _loadedHandler(); 
     1384                } 
     1385                 
     1386                function _loadedHandler(evt) { 
     1387                        if (_model.getMedia() !== undefined) { 
     1388                                for (var pluginIndex in _model.plugins.order) { 
     1389                                        var pluginName = _model.plugins.order[pluginIndex]; 
     1390                                        if (_model.plugins.object[pluginName].getDisplayElement !== undefined) { 
     1391                                                if (_model.config.chromeless || _model.getMedia().hasChrome()) { 
     1392                                                        _model.plugins.config[pluginName].currentPosition = jwplayer.html5.view.positions.NONE; 
     1393                                                } else { 
     1394                                                        _model.plugins.config[pluginName].currentPosition = _model.plugins.config[pluginName].position; 
     1395                                                } 
     1396                                        } 
     1397                                } 
     1398                        } 
     1399                        _resize(_model.width, _model.height); 
     1400                } 
     1401                 
     1402                function getNumber(style) { 
     1403                        if (typeof style == "number") { 
     1404                                return style; 
     1405                        } 
     1406                        if (style === "") { 
     1407                                return 0; 
     1408                        } 
     1409                        return parseInt(style.replace("px", ""), 10); 
     1410                } 
     1411                 
     1412                function setResizeInterval() { 
     1413                        _resizeInterval = setInterval(function() { 
     1414                                if (_wrapper.width && _wrapper.height && (_model.width !== getNumber(_wrapper.width) || _model.height !== getNumber(_wrapper.height))) { 
     1415                                        _resize(getNumber(_wrapper.width), getNumber(_wrapper.height)); 
     1416                                } else { 
     1417                                        var rect = _wrapper.getBoundingClientRect(); 
     1418                                        if (_model.width !== rect.width || _model.height !== rect.height) { 
     1419                                                _resize(rect.width, rect.height); 
     1420                                        } 
     1421                                        delete rect; 
     1422                                } 
     1423                        }, 100); 
     1424                } 
     1425                 
     1426                this.setup = function(container) { 
     1427                        _container = container; 
     1428                        createWrapper(); 
     1429                        layoutComponents(); 
     1430                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_MEDIA_LOADED, _loadedHandler); 
     1431                        setResizeInterval(); 
     1432                        var oldresize; 
     1433                        if (window.onresize !== null) { 
     1434                                oldresize = window.onresize; 
     1435                        } 
     1436                        window.onresize = function(evt) { 
     1437                                if (oldresize !== undefined) { 
     1438                                        try { 
     1439                                                oldresize(evt); 
     1440                                        } catch (err) { 
     1441                                         
     1442                                        } 
     1443                                } 
     1444                                if (_api.jwGetFullscreen()) { 
     1445                                        _model.width = window.innerWidth; 
     1446                                        _model.height = window.innerHeight; 
     1447                                } 
     1448                                _resize(_model.width, _model.height); 
     1449                        }; 
     1450                }; 
     1451                 
     1452                function _keyHandler(evt) { 
     1453                        switch (evt.keyCode) { 
     1454                                case 27: 
     1455                                        if (_api.jwGetFullscreen()) { 
     1456                                                _api.jwSetFullscreen(false); 
     1457                                        } 
     1458                                        break; 
     1459                                case 32: 
     1460                                        // For spacebar. Not sure what to do when there are multiple players 
     1461                                        if (_api.jwGetState() != jwplayer.api.events.state.IDLE && _api.jwGetState() != jwplayer.api.events.state.PAUSED) { 
     1462                                                _api.jwPause(); 
     1463                                        } else { 
     1464                                                _api.jwPlay(); 
     1465                                        } 
     1466                                        break; 
     1467                        } 
     1468                } 
     1469                 
     1470                function _resize(width, height) { 
     1471                        if (_wrapper.style.display == "none") { 
     1472                                return; 
     1473                        } 
     1474                        var plugins = [].concat(_model.plugins.order); 
     1475                        plugins.reverse(); 
     1476                        _zIndex = plugins.length + 2; 
     1477                        if (!_model.fullscreen) { 
     1478                                _model.width = width; 
     1479                                _model.height = height; 
     1480                                _width = width; 
     1481                                _height = height; 
     1482                                _css(_box, { 
     1483                                        top: 0, 
     1484                                        bottom: 0, 
     1485                                        left: 0, 
     1486                                        right: 0, 
     1487                                        width: width, 
     1488                                        height: height 
     1489                                }); 
     1490                                _css(_wrapper, { 
     1491                                        height: _height, 
     1492                                        width: _width 
     1493                                }); 
     1494                                var failed = _resizeComponents(_normalscreenComponentResizer, plugins); 
     1495                                if (failed.length > 0) { 
     1496                                        _zIndex += failed.length; 
     1497                                        _resizeComponents(_overlayComponentResizer, failed, true); 
     1498                                } 
     1499                                _resizeMedia(); 
     1500                        } else { 
     1501                                _resizeComponents(_fullscreenComponentResizer, plugins, true); 
     1502                        } 
     1503                } 
     1504                 
     1505                function _resizeComponents(componentResizer, plugins, sizeToBox) { 
     1506                        var failed = []; 
     1507                        for (var pluginIndex in plugins) { 
     1508                                var pluginName = plugins[pluginIndex]; 
     1509                                if (_model.plugins.object[pluginName].getDisplayElement !== undefined) { 
     1510                                        if (_model.plugins.config[pluginName].currentPosition.toUpperCase() !== jwplayer.html5.view.positions.NONE) { 
     1511                                                var style = componentResizer(pluginName, _zIndex--); 
     1512                                                if (!style) { 
     1513                                                        failed.push(pluginName); 
     1514                                                } else { 
     1515                                                        _model.plugins.object[pluginName].resize(style.width, style.height); 
     1516                                                        if (sizeToBox) { 
     1517                                                                delete style.width; 
     1518                                                                delete style.height; 
     1519                                                        } 
     1520                                                        _css(_model.plugins.object[pluginName].getDisplayElement(), style); 
     1521                                                } 
     1522                                        } else { 
     1523                                                _css(_model.plugins.object[pluginName].getDisplayElement(), { 
     1524                                                        display: "none" 
     1525                                                }); 
     1526                                        } 
     1527                                } 
     1528                        } 
     1529                        return failed; 
     1530                } 
     1531                 
     1532                function _normalscreenComponentResizer(pluginName, zIndex) { 
     1533                        if (_model.plugins.object[pluginName].getDisplayElement !== undefined) { 
     1534                                if (_hasPosition(_model.plugins.config[pluginName].position)) { 
     1535                                        if (_model.plugins.object[pluginName].getDisplayElement().parentNode === null) { 
     1536                                                _wrapper.appendChild(_model.plugins.object[pluginName].getDisplayElement()); 
     1537                                        } 
     1538                                        var style = _getComponentPosition(pluginName); 
     1539                                        style.zIndex = zIndex; 
     1540                                        return style; 
     1541                                } 
     1542                        } 
     1543                        return false; 
     1544                } 
     1545                 
     1546                function _overlayComponentResizer(pluginName, zIndex) { 
     1547                        if (_model.plugins.object[pluginName].getDisplayElement().parentNode === null) { 
     1548                                _box.appendChild(_model.plugins.object[pluginName].getDisplayElement()); 
     1549                        } 
     1550                        return { 
     1551                                position: "absolute", 
     1552                                width: (_model.width - getNumber(_box.style.left) - getNumber(_box.style.right)), 
     1553                                height: (_model.height - getNumber(_box.style.top) - getNumber(_box.style.bottom)), 
     1554                                zIndex: zIndex 
     1555                        }; 
     1556                } 
     1557                 
     1558                function _fullscreenComponentResizer(pluginName, zIndex) { 
     1559                        return { 
     1560                                position: "fixed", 
     1561                                width: _model.width, 
     1562                                height: _model.height, 
     1563                                zIndex: zIndex 
     1564                        }; 
     1565                } 
     1566                 
     1567                function _resizeMedia() { 
     1568                        _box.style.position = "absolute"; 
     1569                        var style = { 
     1570                                position: "absolute", 
     1571                                width: getNumber(_box.style.width), 
     1572                                height: getNumber(_box.style.height), 
     1573                                top: getNumber(_box.style.top), 
     1574                                left: getNumber(_box.style.left) 
     1575                        }; 
     1576                        _css(_model.getMedia().getDisplayElement(), style); 
     1577                } 
     1578                 
     1579                function _getComponentPosition(pluginName) { 
     1580                        var plugincss = { 
     1581                                position: "absolute", 
     1582                                margin: 0, 
     1583                                padding: 0, 
     1584                                top: null 
     1585                        }; 
     1586                        var position = _model.plugins.config[pluginName].currentPosition.toLowerCase(); 
     1587                        switch (position.toUpperCase()) { 
     1588                                case jwplayer.html5.view.positions.TOP: 
     1589                                        plugincss.top = getNumber(_box.style.top); 
     1590                                        plugincss.left = getNumber(_box.style.left); 
     1591                                        plugincss.width = _width - getNumber(_box.style.left) - getNumber(_box.style.right); 
     1592                                        plugincss.height = _model.plugins.object[pluginName].height; 
     1593                                        _box.style[position] = getNumber(_box.style[position]) + _model.plugins.object[pluginName].height + "px"; 
     1594                                        _box.style.height = getNumber(_box.style.height) - plugincss.height + "px"; 
     1595                                        break; 
     1596                                case jwplayer.html5.view.positions.RIGHT: 
     1597                                        plugincss.top = getNumber(_box.style.top); 
     1598                                        plugincss.right = getNumber(_box.style.right); 
     1599                                        plugincss.width = plugincss.width = _model.plugins.object[pluginName].width; 
     1600                                        plugincss.height = _height - getNumber(_box.style.top) - getNumber(_box.style.bottom); 
     1601                                        _box.style[position] = getNumber(_box.style[position]) + _model.plugins.object[pluginName].width + "px"; 
     1602                                        _box.style.width = getNumber(_box.style.width) - plugincss.width + "px"; 
     1603                                        break; 
     1604                                case jwplayer.html5.view.positions.BOTTOM: 
     1605                                        plugincss.bottom = getNumber(_box.style.bottom); 
     1606                                        plugincss.left = getNumber(_box.style.left); 
     1607                                        plugincss.width = _width - getNumber(_box.style.left) - getNumber(_box.style.right); 
     1608                                        plugincss.height = _model.plugins.object[pluginName].height; 
     1609                                        _box.style[position] = getNumber(_box.style[position]) + _model.plugins.object[pluginName].height + "px"; 
     1610                                        _box.style.height = getNumber(_box.style.height) - plugincss.height + "px"; 
     1611                                        break; 
     1612                                case jwplayer.html5.view.positions.LEFT: 
     1613                                        plugincss.top = getNumber(_box.style.top); 
     1614                                        plugincss.left = getNumber(_box.style.left); 
     1615                                        plugincss.width = _model.plugins.object[pluginName].width; 
     1616                                        plugincss.height = _height - getNumber(_box.style.top) - getNumber(_box.style.bottom); 
     1617                                        _box.style[position] = getNumber(_box.style[position]) + _model.plugins.object[pluginName].width + "px"; 
     1618                                        _box.style.width = getNumber(_box.style.width) - plugincss.width + "px"; 
     1619                                        break; 
     1620                                default: 
     1621                                        break; 
     1622                        } 
     1623                        return plugincss; 
     1624                } 
     1625                 
     1626                 
     1627                this.resize = _resize; 
     1628                 
     1629                this.fullscreen = function(state) { 
     1630                        if (navigator.vendor.indexOf("Apple") === 0) { 
     1631                                if (_model.getMedia().getDisplayElement().webkitSupportsFullscreen) { 
     1632                                        if (state) { 
     1633                                                _model.fullscreen = false; 
     1634                                                _model.getMedia().getDisplayElement().webkitEnterFullscreen(); 
     1635                                        } else { 
     1636                                                _model.getMedia().getDisplayElement().webkitExitFullscreen(); 
     1637                                        } 
     1638                                } else { 
     1639                                        _model.fullscreen = false; 
     1640                                } 
     1641                        } else { 
     1642                                if (state) { 
     1643                                        document.onkeydown = _keyHandler; 
     1644                                        clearInterval(_resizeInterval); 
     1645                                        _model.width = window.innerWidth; 
     1646                                        _model.height = window.innerHeight; 
     1647                                        var style = { 
     1648                                                position: "fixed", 
     1649                                                width: "100%", 
     1650                                                height: "100%", 
     1651                                                top: 0, 
     1652                                                left: 0, 
     1653                                                zIndex: 2147483000 
     1654                                        }; 
     1655                                        _css(_wrapper, style); 
     1656                                        style.zIndex = 1; 
     1657                                        _css(_model.getMedia().getDisplayElement(), style); 
     1658                                        style.zIndex = 2; 
     1659                                        _css(_box, style); 
     1660                                } else { 
     1661                                        document.onkeydown = ""; 
     1662                                        setResizeInterval(); 
     1663                                        _model.width = _width; 
     1664                                        _model.height = _height; 
     1665                                        _css(_wrapper, { 
     1666                                                position: "relative", 
     1667                                                height: _model.height, 
     1668                                                width: _model.width, 
     1669                                                zIndex: 0 
     1670                                        }); 
     1671                                } 
     1672                                _resize(_model.width, _model.height); 
     1673                        } 
     1674                }; 
     1675                 
     1676        }; 
     1677         
     1678        function _hasPosition(position) { 
     1679                return ([jwplayer.html5.view.positions.TOP, jwplayer.html5.view.positions.RIGHT, jwplayer.html5.view.positions.BOTTOM, jwplayer.html5.view.positions.LEFT].indexOf(position.toUpperCase()) > -1); 
     1680        } 
     1681         
     1682        jwplayer.html5.view.positions = { 
     1683                TOP: "TOP", 
     1684                RIGHT: "RIGHT", 
     1685                BOTTOM: "BOTTOM", 
     1686                LEFT: "LEFT", 
     1687                OVER: "OVER", 
     1688                NONE: "NONE" 
     1689        }; 
     1690})(jwplayer); 
     1691/** 
     1692 * jwplayer controlbar component of the JW Player. 
     1693 * 
     1694 * @author zach 
     1695 * @version 1.0 
     1696 */ 
     1697(function(jwplayer) { 
     1698        /** Map with config for the jwplayerControlbar plugin. **/ 
     1699        var _defaults = { 
     1700                backgroundcolor: "", 
     1701                margin: 10, 
     1702                font: "Arial,sans-serif", 
     1703                fontsize: 10, 
     1704                fontcolor: parseInt("000000", 16), 
     1705                fontstyle: "normal", 
     1706                fontweight: "bold", 
     1707                buttoncolor: parseInt("ffffff", 16), 
     1708                position: jwplayer.html5.view.positions.BOTTOM, 
     1709                idlehide: false, 
     1710                layout: { 
     1711                        "left": { 
     1712                                "position": "left", 
     1713                                "elements": [{ 
     1714                                        "name": "play", 
     1715                                        "type": "button" 
     1716                                }, { 
     1717                                        "name": "divider", 
     1718                                        "type": "divider" 
     1719                                }, { 
     1720                                        "name": "prev", 
     1721                                        "type": "button" 
     1722                                }, { 
     1723                                        "name": "divider", 
     1724                                        "type": "divider" 
     1725                                }, { 
     1726                                        "name": "next", 
     1727                                        "type": "button" 
     1728                                }, { 
     1729                                        "name": "divider", 
     1730                                        "type": "divider" 
     1731                                }, { 
     1732                                        "name": "elapsed", 
     1733                                        "type": "text" 
     1734                                }] 
     1735                        }, 
     1736                        "center": { 
     1737                                "position": "center", 
     1738                                "elements": [{ 
     1739                                        "name": "time", 
     1740                                        "type": "slider" 
     1741                                }] 
     1742                        }, 
     1743                        "right": { 
     1744                                "position": "right", 
     1745                                "elements": [{ 
     1746                                        "name": "duration", 
     1747                                        "type": "text" 
     1748                                }, { 
     1749                                        "name": "blank", 
     1750                                        "type": "button" 
     1751                                }, { 
     1752                                        "name": "divider", 
     1753                                        "type": "divider" 
     1754                                }, { 
     1755                                        "name": "mute", 
     1756                                        "type": "button" 
     1757                                }, { 
     1758                                        "name": "volume", 
     1759                                        "type": "slider" 
     1760                                }, { 
     1761                                        "name": "divider", 
     1762                                        "type": "divider" 
     1763                                }, { 
     1764                                        "name": "fullscreen", 
     1765                                        "type": "button" 
     1766                                }] 
     1767                        } 
     1768                } 
     1769        }; 
     1770         
     1771        _css = jwplayer.html5.utils.css; 
     1772         
     1773        _hide = function(element) { 
     1774                _css(element, { 
     1775                        display: "none" 
     1776                }); 
     1777        }; 
     1778         
     1779        _show = function(element) { 
     1780                _css(element, { 
     1781                        display: "block" 
     1782                }); 
     1783        }; 
     1784         
     1785        jwplayer.html5.controlbar = function(api, config) { 
     1786                var _api = api; 
     1787                var _settings = jwplayer.utils.extend({}, _defaults, _api.skin.getComponentSettings("controlbar"), config); 
     1788                if (jwplayer.html5.utils.mapLength(_api.skin.getComponentLayout("controlbar")) > 0) { 
     1789                        _settings.layout = _api.skin.getComponentLayout("controlbar"); 
     1790                } 
     1791                var _wrapper; 
     1792                var _dividerid; 
     1793                var _marginleft; 
     1794                var _marginright; 
     1795                var _scrubber = "none"; 
     1796                var _mousedown; 
     1797                var _currentPosition; 
     1798                var _currentDuration; 
     1799                var _currentBuffer; 
     1800                var _width; 
     1801                var _height; 
     1802                var _prevElement; 
     1803                var _elements = {}; 
     1804                var _ready = false; 
     1805                var _positions = {}; 
     1806                 
     1807                 
     1808                function _buildBase() { 
     1809                        _marginleft = 0; 
     1810                        _marginright = 0; 
     1811                        _dividerid = 0; 
     1812                        if (!_ready) { 
     1813                                var wrappercss = { 
     1814                                        height: _api.skin.getSkinElement("controlbar", "background").height, 
     1815                                        backgroundColor: _settings.backgroundcolor 
     1816                                }; 
     1817                                 
     1818                                _wrapper = document.createElement("div"); 
     1819                                _wrapper.id = _api.id + "_jwplayer_controlbar"; 
     1820                                _css(_wrapper, wrappercss); 
     1821                        } 
     1822                         
     1823                        _addElement("capLeft", "left", false, _wrapper); 
     1824                        var domelementcss = { 
     1825                                position: "absolute", 
     1826                                height: _api.skin.getSkinElement("controlbar", "background").height, 
     1827                                background: " url(" + _api.skin.getSkinElement("controlbar", "background").src + ") repeat-x center left", 
     1828                                left: _api.skin.getSkinElement("controlbar", "capLeft").width 
     1829                        }; 
     1830                        _appendNewElement("elements", _wrapper, domelementcss); 
     1831                        _addElement("capRight", "right", false, _wrapper); 
     1832                } 
     1833                 
     1834                this.getDisplayElement = function() { 
     1835                        return _wrapper; 
     1836                }; 
     1837                 
     1838                this.resize = function(width, height) { 
     1839                        jwplayer.html5.utils.cancelAnimation(_wrapper); 
     1840                        document.getElementById(_api.id).onmousemove = _setVisiblity; 
     1841                        _width = width; 
     1842                        _height = height; 
     1843                        _setVisiblity(); 
     1844                        var style = _resizeBar(); 
     1845                        _timeHandler({ 
     1846                                id: _api.id, 
     1847                                duration: _currentDuration, 
     1848                                position: _currentPosition 
     1849                        }); 
     1850                        _bufferHandler({ 
     1851                                id: _api.id, 
     1852                                bufferPercent: _currentBuffer 
     1853                        }); 
     1854                        return style; 
     1855                }; 
     1856                 
     1857                function _updatePositions() { 
     1858                        var positionElements = ["timeSlider", "volumeSlider", "timeSliderRail", "volumeSliderRail"]; 
     1859                        for (var positionElement in positionElements) { 
     1860                                var elementName = positionElements[positionElement]; 
     1861                                if (typeof _elements[elementName] != "undefined") { 
     1862                                        _positions[elementName] = _elements[elementName].getBoundingClientRect(); 
     1863                                } 
     1864                        } 
     1865                } 
     1866                 
     1867                 
     1868                function _setVisiblity() { 
     1869                        jwplayer.html5.utils.cancelAnimation(_wrapper); 
     1870                        if (_remainVisible()) { 
     1871                                jwplayer.html5.utils.fadeTo(_wrapper, 1, 0, 1, 0); 
     1872                        } else { 
     1873                                jwplayer.html5.utils.fadeTo(_wrapper, 0, 0.1, 1, 2); 
     1874                        } 
     1875                } 
     1876                 
     1877                function _remainVisible() { 
     1878                        if (_api.jwGetState() == jwplayer.api.events.state.IDLE || _api.jwGetState() == jwplayer.api.events.state.PAUSED) { 
     1879                                if (_settings.idlehide) { 
     1880                                        return false; 
     1881                                } 
     1882                                return true; 
     1883                        } 
     1884                        if (_api.jwGetFullscreen()) { 
     1885                                return false; 
     1886                        } 
     1887                        if (_settings.position.toUpperCase() == jwplayer.html5.view.positions.OVER) { 
     1888                                return false; 
     1889                        } 
     1890                        return true; 
     1891                } 
     1892                 
     1893                function _appendNewElement(id, parent, css) { 
     1894                        var element; 
     1895                        if (!_ready) { 
     1896                                element = document.createElement("div"); 
     1897                                _elements[id] = element; 
     1898                                element.id = _wrapper.id + "_" + id; 
     1899                                parent.appendChild(element); 
     1900                        } else { 
     1901                                element = document.getElementById(_wrapper.id + "_" + id); 
     1902                        } 
     1903                        if (css !== undefined) { 
     1904                                _css(element, css); 
     1905                        } 
     1906                        return element; 
     1907                } 
     1908                 
     1909                /** Draw the jwplayerControlbar elements. **/ 
     1910                function _buildElements() { 
     1911                        _buildGroup(_settings.layout.left); 
     1912                        _buildGroup(_settings.layout.right, -1); 
     1913                        _buildGroup(_settings.layout.center); 
     1914                } 
     1915                 
     1916                /** Layout a group of elements**/ 
     1917                function _buildGroup(group, order) { 
     1918                        var alignment = group.position == "right" ? "right" : "left"; 
     1919                        var elements = jwplayer.utils.extend([], group.elements); 
     1920                        if (order !== undefined) { 
     1921                                elements.reverse(); 
     1922                        } 
     1923                        for (var i = 0; i < elements.length; i++) { 
     1924                                _buildElement(elements[i], alignment); 
     1925                        } 
     1926                } 
     1927                 
     1928                function getNewDividerId() { 
     1929                        return _dividerid++; 
     1930                } 
     1931                 
     1932                /** Draw a single element into the jwplayerControlbar. **/ 
     1933                function _buildElement(element, alignment) { 
     1934                        var offset, offsetLeft, offsetRight, width, slidercss; 
     1935                        switch (element.name) { 
     1936                                case "play": 
     1937                                        _addElement("playButton", alignment, false); 
     1938                                        _addElement("pauseButton", alignment, true); 
     1939                                        _buildHandler("playButton", "jwPlay"); 
     1940                                        _buildHandler("pauseButton", "jwPause"); 
     1941                                        break; 
     1942                                case "divider": 
     1943                                        _addElement("divider" + getNewDividerId(), alignment, true); 
     1944                                        break; 
     1945                                case "prev": 
     1946                                        _addElement("prevButton", alignment, true); 
     1947                                        _buildHandler("prevButton", "jwPlaylistPrev"); 
     1948                                        break; 
     1949                                case "next": 
     1950                                        _addElement("nextButton", alignment, true); 
     1951                                        _buildHandler("nextButton", "jwPlaylistNext"); 
     1952                                        break; 
     1953                                case "elapsed": 
     1954                                        _addElement("elapsedText", alignment, true); 
     1955                                        break; 
     1956                                case "time": 
     1957                                        offsetLeft = _api.skin.getSkinElement("controlbar", "timeSliderCapLeft") === undefined ? 0 : _api.skin.getSkinElement("controlbar", "timeSliderCapLeft").width; 
     1958                                        offsetRight = _api.skin.getSkinElement("controlbar", "timeSliderCapRight") === undefined ? 0 : _api.skin.getSkinElement("controlbar", "timeSliderCapRight").width; 
     1959                                        offset = alignment == "left" ? offsetLeft : offsetRight; 
     1960                                        width = _api.skin.getSkinElement("controlbar", "timeSliderRail").width + offsetLeft + offsetRight; 
     1961                                        slidercss = { 
     1962                                                height: _api.skin.getSkinElement("controlbar", "background").height, 
     1963                                                position: "absolute", 
     1964                                                top: 0, 
     1965                                                width: width 
     1966                                        }; 
     1967                                        slidercss[alignment] = alignment == "left" ? _marginleft : _marginright; 
     1968                                        var _timeslider = _appendNewElement("timeSlider", _elements.elements, slidercss); 
     1969                                        _addElement("timeSliderCapLeft", alignment, true, _timeslider, alignment == "left" ? 0 : offset); 
     1970                                        _addElement("timeSliderRail", alignment, false, _timeslider, offset); 
     1971                                        _addElement("timeSliderBuffer", alignment, false, _timeslider, offset); 
     1972                                        _addElement("timeSliderProgress", alignment, false, _timeslider, offset); 
     1973                                        _addElement("timeSliderThumb", alignment, false, _timeslider, offset); 
     1974                                        _addElement("timeSliderCapRight", alignment, true, _timeslider, alignment == "right" ? 0 : offset); 
     1975                                        _addSliderListener("time"); 
     1976                                        break; 
     1977                                case "fullscreen": 
     1978                                        _addElement("fullscreenButton", alignment, false); 
     1979                                        _addElement("normalscreenButton", alignment, true); 
     1980                                        _buildHandler("fullscreenButton", "jwSetFullscreen", true); 
     1981                                        _buildHandler("normalscreenButton", "jwSetFullscreen", false); 
     1982                                        break; 
     1983                                case "volume": 
     1984                                        offsetLeft = _api.skin.getSkinElement("controlbar", "volumeSliderCapLeft") === undefined ? 0 : _api.skin.getSkinElement("controlbar", "volumeSliderCapLeft").width; 
     1985                                        offsetRight = _api.skin.getSkinElement("controlbar", "volumeSliderCapRight") === undefined ? 0 : _api.skin.getSkinElement("controlbar", "volumeSliderCapRight").width; 
     1986                                        offset = alignment == "left" ? offsetLeft : offsetRight; 
     1987                                        width = _api.skin.getSkinElement("controlbar", "volumeSliderRail").width + offsetLeft + offsetRight; 
     1988                                        slidercss = { 
     1989                                                height: _api.skin.getSkinElement("controlbar", "background").height, 
     1990                                                position: "absolute", 
     1991                                                top: 0, 
     1992                                                width: width 
     1993                                        }; 
     1994                                        slidercss[alignment] = alignment == "left" ? _marginleft : _marginright; 
     1995                                        var _volumeslider = _appendNewElement("volumeSlider", _elements.elements, slidercss); 
     1996                                        _addElement("volumeSliderCapLeft", alignment, true, _volumeslider, alignment == "left" ? 0 : offset); 
     1997                                        _addElement("volumeSliderRail", alignment, true, _volumeslider, offset); 
     1998                                        _addElement("volumeSliderProgress", alignment, false, _volumeslider, offset); 
     1999                                        _addElement("volumeSliderCapRight", alignment, true, _volumeslider, alignment == "right" ? 0 : offset); 
     2000                                        _addSliderListener("volume"); 
     2001                                        break; 
     2002                                case "mute": 
     2003                                        _addElement("muteButton", alignment, false); 
     2004                                        _addElement("unmuteButton", alignment, true); 
     2005                                        _buildHandler("muteButton", "jwSetMute", true); 
     2006                                        _buildHandler("unmuteButton", "jwSetMute", false); 
     2007                                         
     2008                                        break; 
     2009                                case "duration": 
     2010                                        _addElement("durationText", alignment, true); 
     2011                                        break; 
     2012                        } 
     2013                } 
     2014                 
     2015                function _addElement(element, alignment, offset, parent, position) { 
     2016                        if ((_api.skin.getSkinElement("controlbar", element) !== undefined || element.indexOf("Text") > 0 || element.indexOf("divider") === 0) && !(element.indexOf("divider") === 0 && _prevElement.indexOf("divider") === 0)) { 
     2017                                _prevElement = element; 
     2018                                var css = { 
     2019                                        height: _api.skin.getSkinElement("controlbar", "background").height, 
     2020                                        position: "absolute", 
     2021                                        display: "block", 
     2022                                        top: 0 
     2023                                }; 
     2024                                if ((element.indexOf("next") === 0 || element.indexOf("prev") === 0) && _api.jwGetPlaylist().length < 2) { 
     2025                                        offset = false; 
     2026                                        css.display = "none"; 
     2027                                } 
     2028                                var wid; 
     2029                                if (element.indexOf("Text") > 0) { 
     2030                                        element.innerhtml = "00:00"; 
     2031                                        css.font = _settings.fontsize + "px/" + (_api.skin.getSkinElement("controlbar", "background").height + 1) + "px " + _settings.font; 
     2032                                        css.color = _settings.fontcolor; 
     2033                                        css.textAlign = "center"; 
     2034                                        css.fontWeight = _settings.fontweight; 
     2035                                        css.fontStyle = _settings.fontstyle; 
     2036                                        css.cursor = "default"; 
     2037                                        wid = 14 + 3 * _settings.fontsize; 
     2038                                } else if (element.indexOf("divider") === 0) { 
     2039                                        css.background = "url(" + _api.skin.getSkinElement("controlbar", "divider").src + ") repeat-x center left"; 
     2040                                        wid = _api.skin.getSkinElement("controlbar", "divider").width; 
     2041                                } else { 
     2042                                        css.background = "url(" + _api.skin.getSkinElement("controlbar", element).src + ") repeat-x center left"; 
     2043                                        wid = _api.skin.getSkinElement("controlbar", element).width; 
     2044                                } 
     2045                                if (alignment == "left") { 
     2046                                        css.left = position === undefined ? _marginleft : position; 
     2047                                        if (offset) { 
     2048                                                _marginleft += wid; 
     2049                                        } 
     2050                                } else if (alignment == "right") { 
     2051                                        css.right = position === undefined ? _marginright : position; 
     2052                                        if (offset) { 
     2053                                                _marginright += wid; 
     2054                                        } 
     2055                                } 
     2056                                 
     2057                                if (parent === undefined) { 
     2058                                        parent = _elements.elements; 
     2059                                } 
     2060                                 
     2061                                css.width = wid; 
     2062                                 
     2063                                if (_ready) { 
     2064                                        _css(_elements[element], css); 
     2065                                } else { 
     2066                                        var newelement = _appendNewElement(element, parent, css); 
     2067                                        if (_api.skin.getSkinElement("controlbar", element + "Over") !== undefined) { 
     2068                                                newelement.onmouseover = function(evt) { 
     2069                                                        newelement.style.backgroundImage = ["url(", _api.skin.getSkinElement("controlbar", element + "Over").src, ")"].join(""); 
     2070                                                }; 
     2071                                                newelement.onmouseout = function(evt) { 
     2072                                                        newelement.style.backgroundImage = ["url(", _api.skin.getSkinElement("controlbar", element).src, ")"].join(""); 
     2073                                                }; 
     2074                                        } 
     2075                                } 
     2076                        } 
     2077                } 
     2078                 
     2079                function _addListeners() { 
     2080                        // Register events with the player. 
     2081                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED, _playlistHandler); 
     2082                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_MEDIA_BUFFER, _bufferHandler); 
     2083                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_PLAYER_STATE, _stateHandler); 
     2084                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_MEDIA_TIME, _timeHandler); 
     2085                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_MEDIA_MUTE, _muteHandler); 
     2086                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_MEDIA_VOLUME, _volumeHandler); 
     2087                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_MEDIA_COMPLETE, _completeHandler); 
     2088                } 
     2089                 
     2090                function _playlistHandler() { 
     2091                        _buildBase(); 
     2092                        _buildElements(); 
     2093                        _resizeBar(); 
     2094                        _init(); 
     2095                } 
     2096                 
     2097                /** Add interactivity to the jwplayerControlbar elements. **/ 
     2098                function _init() { 
     2099                        // Trigger a few events so the bar looks good on startup. 
     2100                        _timeHandler({ 
     2101                                id: _api.id, 
     2102                                duration: _api.jwGetDuration(), 
     2103                                position: 0 
     2104                        }); 
     2105                        _bufferHandler({ 
     2106                                id: _api.id, 
     2107                                bufferProgress: 0 
     2108                        }); 
     2109                        _muteHandler({ 
     2110                                id: _api.id, 
     2111                                mute: _api.jwGetMute() 
     2112                        }); 
     2113                        _stateHandler({ 
     2114                                id: _api.id, 
     2115                                newstate: jwplayer.api.events.state.IDLE 
     2116                        }); 
     2117                        _volumeHandler({ 
     2118                                id: _api.id, 
     2119                                volume: _api.jwGetVolume() 
     2120                        }); 
     2121                } 
     2122                 
     2123                 
     2124                /** Set a single button handler. **/ 
     2125                function _buildHandler(element, handler, args) { 
     2126                        if (_ready) { 
     2127                                return; 
     2128                        } 
     2129                        if (_api.skin.getSkinElement("controlbar", element) !== undefined) { 
     2130                                var _element = _elements[element]; 
     2131                                if (_element !== null) { 
     2132                                        _css(_element, { 
     2133                                                cursor: "pointer" 
     2134                                        }); 
     2135                                        if (handler == "fullscreen") { 
     2136                                                _element.onmouseup = function(evt) { 
     2137                                                        evt.stopPropagation(); 
     2138                                                        _api.jwSetFullscreen(!_api.jwGetFullscreen()); 
     2139                                                }; 
     2140                                        } else { 
     2141                                                _element.onmouseup = function(evt) { 
     2142                                                        evt.stopPropagation(); 
     2143                                                        if (args !== null) { 
     2144                                                                _api[handler](args); 
     2145                                                        } else { 
     2146                                                                _api[handler](); 
     2147                                                        } 
     2148                                                         
     2149                                                }; 
     2150                                        } 
     2151                                } 
     2152                        } 
     2153                } 
     2154                 
     2155                /** Set the volume drag handler. **/ 
     2156                function _addSliderListener(name) { 
     2157                        if (_ready) { 
     2158                                return; 
     2159                        } 
     2160                        var bar = _elements[name + "Slider"]; 
     2161                        _css(_elements.elements, { 
     2162                                "cursor": "pointer" 
     2163                        }); 
     2164                        _css(bar, { 
     2165                                "cursor": "pointer" 
     2166                        }); 
     2167                        bar.onmousedown = function(evt) { 
     2168                                _scrubber = name; 
     2169                        }; 
     2170                        bar.onmouseup = function(evt) { 
     2171                                evt.stopPropagation(); 
     2172                                _sliderUp(evt.pageX); 
     2173                        }; 
     2174                        bar.onmousemove = function(evt) { 
     2175                                if (_scrubber == "time") { 
     2176                                        _mousedown = true; 
     2177                                        var xps = evt.pageX - _positions[name + "Slider"].left - window.pageXOffset; 
     2178                                        _css(_elements.timeSliderThumb, { 
     2179                                                left: xps 
     2180                                        }); 
     2181                                } 
     2182                        }; 
     2183                } 
     2184                 
     2185                 
     2186                /** The slider has been moved up. **/ 
     2187                function _sliderUp(msx) { 
     2188                        _mousedown = false; 
     2189                        var xps; 
     2190                        if (_scrubber == "time") { 
     2191                                xps = msx - _positions.timeSliderRail.left + window.pageXOffset; 
     2192                                var pos = xps / _positions.timeSliderRail.width * _currentDuration; 
     2193                                if (pos < 0) { 
     2194                                        pos = 0; 
     2195                                } else if (pos > _currentDuration) { 
     2196                                        pos = _currentDuration - 3; 
     2197                                } 
     2198                                _api.jwSeek(pos); 
     2199                                if (_api.jwGetState() != jwplayer.api.events.state.PLAYING) { 
     2200                                        _api.jwPlay(); 
     2201                                } 
     2202                        } else if (_scrubber == "volume") { 
     2203                                xps = msx - _positions.volumeSliderRail.left - window.pageXOffset; 
     2204                                var pct = Math.round(xps / _positions.volumeSliderRail.width * 100); 
     2205                                if (pct < 0) { 
     2206                                        pct = 0; 
     2207                                } else if (pct > 100) { 
     2208                                        pct = 100; 
     2209                                } 
     2210                                if (_api.jwGetMute()) { 
     2211                                        _api.jwSetMute(false); 
     2212                                } 
     2213                                _api.jwSetVolume(pct); 
     2214                        } 
     2215                        _scrubber = "none"; 
     2216                } 
     2217                 
     2218                 
     2219                /** Update the buffer percentage. **/ 
     2220                function _bufferHandler(event) { 
     2221                        if (event.bufferPercent !== null) { 
     2222                                _currentBuffer = event.bufferPercent; 
     2223                        } 
     2224                        var wid = _positions.timeSliderRail.width; 
     2225                        var bufferWidth = isNaN(Math.round(wid * _currentBuffer / 100)) ? 0 : Math.round(wid * _currentBuffer / 100); 
     2226                        _css(_elements.timeSliderBuffer, { 
     2227                                width: bufferWidth 
     2228                        }); 
     2229                } 
     2230                 
     2231                 
     2232                /** Update the mute state. **/ 
     2233                function _muteHandler(event) { 
     2234                        if (event.mute) { 
     2235                                _hide(_elements.muteButton); 
     2236                                _show(_elements.unmuteButton); 
     2237                                _hide(_elements.volumeSliderProgress); 
     2238                        } else { 
     2239                                _show(_elements.muteButton); 
     2240                                _hide(_elements.unmuteButton); 
     2241                                _show(_elements.volumeSliderProgress); 
     2242                        } 
     2243                } 
     2244                 
     2245                 
     2246                /** Update the playback state. **/ 
     2247                function _stateHandler(event) { 
     2248                        // Handle the play / pause button 
     2249                        if (event.newstate == jwplayer.api.events.state.BUFFERING || event.newstate == jwplayer.api.events.state.PLAYING) { 
     2250                                _show(_elements.pauseButton); 
     2251                                _hide(_elements.playButton); 
     2252                        } else { 
     2253                                _hide(_elements.pauseButton); 
     2254                                _show(_elements.playButton); 
     2255                        } 
     2256                         
     2257                        _setVisiblity(); 
     2258                        // Show / hide progress bar 
     2259                        if (event.newstate == jwplayer.api.events.state.IDLE) { 
     2260                                _hide(_elements.timeSliderBuffer); 
     2261                                _hide(_elements.timeSliderProgress); 
     2262                                _hide(_elements.timeSliderThumb); 
     2263                                _timeHandler({ 
     2264                                        id: _api.id, 
     2265                                        duration: _api.jwGetDuration(), 
     2266                                        position: 0 
     2267                                }); 
     2268                        } else { 
     2269                                _show(_elements.timeSliderBuffer); 
     2270                                if (event.newstate != jwplayer.api.events.state.BUFFERING) { 
     2271                                        _show(_elements.timeSliderProgress); 
     2272                                        _show(_elements.timeSliderThumb); 
     2273                                } 
     2274                        } 
     2275                } 
     2276                 
     2277                 
     2278                /** Handles event completion **/ 
     2279                function _completeHandler(event) { 
     2280                        _timeHandler(jwplayer.utils.extend(event, { 
     2281                                position: 0, 
     2282                                duration: _currentDuration 
     2283                        })); 
     2284                } 
     2285                 
     2286                 
     2287                /** Update the playback time. **/ 
     2288                function _timeHandler(event) { 
     2289                        if (event.position !== null) { 
     2290                                _currentPosition = event.position; 
     2291                        } 
     2292                        if (event.duration !== null) { 
     2293                                _currentDuration = event.duration; 
     2294                        } 
     2295                        var progress = (_currentPosition === _currentDuration === 0) ? 0 : _currentPosition / _currentDuration; 
     2296                        var progressWidth = isNaN(Math.round(_positions.timeSliderRail.width * progress)) ? 0 : Math.round(_positions.timeSliderRail.width * progress); 
     2297                        var thumbPosition = progressWidth; 
     2298                         
     2299                        _elements.timeSliderProgress.style.width = progressWidth + "px"; 
     2300                        if (!_mousedown) { 
     2301                                if (_elements.timeSliderThumb) { 
     2302                                        _elements.timeSliderThumb.style.left = thumbPosition + "px"; 
     2303                                } 
     2304                        } 
     2305                        if (_elements.durationText) { 
     2306                                _elements.durationText.innerHTML = _timeFormat(_currentDuration); 
     2307                        } 
     2308                        if (_elements.elapsedText) { 
     2309                                _elements.elapsedText.innerHTML = _timeFormat(_currentPosition); 
     2310                        } 
     2311                } 
     2312                 
     2313                 
     2314                /** Format the elapsed / remaining text. **/ 
     2315                function _timeFormat(sec) { 
     2316                        str = "00:00"; 
     2317                        if (sec > 0) { 
     2318                                str = Math.floor(sec / 60) < 10 ? "0" + Math.floor(sec / 60) + ":" : Math.floor(sec / 60) + ":"; 
     2319                                str += Math.floor(sec % 60) < 10 ? "0" + Math.floor(sec % 60) : Math.floor(sec % 60); 
     2320                        } 
     2321                        return str; 
     2322                } 
     2323                 
     2324                 
     2325                function cleanupDividers() { 
     2326                        var lastElement, lastVisibleElement; 
     2327                        var childNodes = document.getElementById(_wrapper.id + "_elements").childNodes; 
     2328                        for (var childNode in document.getElementById(_wrapper.id + "_elements").childNodes) { 
     2329                                if (isNaN(parseInt(childNode, 10))) { 
     2330                                        continue; 
     2331                                } 
     2332                                if (childNodes[childNode].id.indexOf(_wrapper.id + "_divider") === 0 && lastVisibleElement.id.indexOf(_wrapper.id + "_divider") === 0) { 
     2333                                        childNodes[childNode].style.display = "none"; 
     2334                                } else if (childNodes[childNode].id.indexOf(_wrapper.id + "_divider") === 0 && lastElement.style.display != "none") { 
     2335                                        childNodes[childNode].style.display = "block"; 
     2336                                } 
     2337                                if (childNodes[childNode].style.display != "none") { 
     2338                                        lastVisibleElement = childNodes[childNode]; 
     2339                                } 
     2340                                lastElement = childNodes[childNode]; 
     2341                        } 
     2342                } 
     2343                 
     2344                /** Resize the jwplayerControlbar. **/ 
     2345                function _resizeBar() { 
     2346                        cleanupDividers(); 
     2347                        if (_api.jwGetFullscreen()) { 
     2348                                _show(_elements.normalscreenButton); 
     2349                                _hide(_elements.fullscreenButton); 
     2350                        } else { 
     2351                                _hide(_elements.normalscreenButton); 
     2352                                _show(_elements.fullscreenButton); 
     2353                        } 
     2354                        var controlbarcss = { 
     2355                                width: _width 
     2356                        }; 
     2357                        var elementcss = {}; 
     2358                        if (_settings.position.toUpperCase() == jwplayer.html5.view.positions.OVER || _api.jwGetFullscreen()) { 
     2359                                controlbarcss.left = _settings.margin; 
     2360                                controlbarcss.width -= 2 * _settings.margin; 
     2361                                controlbarcss.top = _height - _api.skin.getSkinElement("controlbar", "background").height - _settings.margin; 
     2362                                controlbarcss.height = _api.skin.getSkinElement("controlbar", "background").height; 
     2363                        } else { 
     2364                                controlbarcss.left = 0; 
     2365                        } 
     2366                         
     2367                        elementcss.left = _api.skin.getSkinElement("controlbar", "capLeft").width; 
     2368                        elementcss.width = controlbarcss.width - _api.skin.getSkinElement("controlbar", "capLeft").width - _api.skin.getSkinElement("controlbar", "capRight").width; 
     2369                         
     2370                        var timeSliderLeft = _api.skin.getSkinElement("controlbar", "timeSliderCapLeft") === undefined ? 0 : _api.skin.getSkinElement("controlbar", "timeSliderCapLeft").width; 
     2371                        _css(_elements.timeSliderRail, { 
     2372                                width: (elementcss.width - _marginleft - _marginright), 
     2373                                left: timeSliderLeft 
     2374                        }); 
     2375                        if (_elements.timeSliderCapRight !== undefined) { 
     2376                                _css(_elements.timeSliderCapRight, { 
     2377                                        left: timeSliderLeft + (elementcss.width - _marginleft - _marginright) 
     2378                                }); 
     2379                        } 
     2380                        _css(_wrapper, controlbarcss); 
     2381                        _css(_elements.elements, elementcss); 
     2382                        _updatePositions(); 
     2383                        return controlbarcss; 
     2384                } 
     2385                 
     2386                 
     2387                /** Update the volume level. **/ 
     2388                function _volumeHandler(event) { 
     2389                        if (_elements.volumeSliderRail !== undefined) { 
     2390                                var progress = isNaN(event.volume / 100) ? 1 : event.volume / 100; 
     2391                                var width = parseInt(_elements.volumeSliderRail.style.width.replace("px", ""), 10); 
     2392                                var progressWidth = isNaN(Math.round(width * progress)) ? 0 : Math.round(width * progress); 
     2393                                var offset = parseInt(_elements.volumeSliderRail.style.right.replace("px", ""), 10); 
     2394                                 
     2395                                var volumeSliderLeft = _api.skin.getSkinElement("controlbar", "volumeSliderCapLeft") === undefined ? 0 : _api.skin.getSkinElement("controlbar", "volumeSliderCapLeft").width; 
     2396                                _css(_elements.volumeSliderProgress, { 
     2397                                        width: progressWidth, 
     2398                                        left: volumeSliderLeft 
     2399                                }); 
     2400                                 
     2401                                if (_elements.volumeSliderCapLeft !== undefined) { 
     2402                                        _css(_elements.volumeSliderCapLeft, { 
     2403                                                left: 0 
     2404                                        }); 
     2405                                } 
     2406                        } 
     2407                } 
     2408                 
     2409                function _setup() { 
     2410                        _buildBase(); 
     2411                        _buildElements(); 
     2412                        _updatePositions(); 
     2413                        _ready = true; 
     2414                        _addListeners(); 
     2415                        _init(); 
     2416                        _wrapper.style.opacity = _settings.idlehide ? 0 : 1; 
     2417                } 
     2418                 
     2419                _setup(); 
     2420                return this; 
     2421        }; 
     2422})(jwplayer); 
     2423/** 
     2424 * JW Player controller component 
     2425 * 
     2426 * @author zach 
     2427 * @version 1.0 
     2428 */ 
     2429(function(jwplayer) { 
     2430 
     2431        var _mediainfovariables = ["width", "height", "state", "playlist", "item", "position", "buffer", "duration", "volume", "mute", "fullscreen"]; 
     2432         
     2433        jwplayer.html5.controller = function(api, container, model, view) { 
     2434                var _api = api; 
     2435                var _model = model; 
     2436                var _view = view; 
     2437                var _container = container; 
     2438                var _itemUpdated = true; 
     2439                 
     2440                var debug = (_model.config.debug !== undefined) && (_model.config.debug.toString().toLowerCase() == 'console'); 
     2441                var _eventDispatcher = new jwplayer.html5.eventdispatcher(_container.id, debug); 
     2442                jwplayer.utils.extend(this, _eventDispatcher); 
     2443                 
     2444                function forward(evt) { 
     2445                        _eventDispatcher.sendEvent(evt.type, evt); 
     2446                } 
     2447                 
     2448                _model.addGlobalListener(forward); 
     2449                 
     2450                function _play() { 
     2451                        try { 
     2452                                if (_model.playlist[0].levels[0].file.length > 0) { 
     2453                                        if (_itemUpdated || _model.state == jwplayer.api.events.state.IDLE) { 
     2454                                                _model.setActiveMediaProvider(_model.playlist[_model.item]); 
     2455                                                _model.addEventListener(jwplayer.api.events.JWPLAYER_MEDIA_BUFFER_FULL, function() { 
     2456                                                        _model.getMedia().play(); 
     2457                                                }); 
     2458                                                if (_model.config.repeat) { 
     2459                                                        _model.addEventListener(jwplayer.api.events.JWPLAYER_MEDIA_COMPLETE, function(evt) { 
     2460                                                                setTimeout(_completeHandler, 25); 
     2461                                                        }); 
     2462                                                } 
     2463                                                _model.getMedia().load(_model.playlist[_model.item]); 
     2464                                                _itemUpdated = false; 
     2465                                        } else if (_model.state == jwplayer.api.events.state.PAUSED) { 
     2466                                                _model.getMedia().play(); 
     2467                                        } 
     2468                                } 
     2469                                return true; 
     2470                        } catch (err) { 
     2471                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2472                        } 
     2473                        return false; 
     2474                } 
     2475                 
     2476                 
     2477                /** Switch the pause state of the player. **/ 
     2478                function _pause() { 
     2479                        try { 
     2480                                if (_model.playlist[0].levels[0].file.length > 0) { 
     2481                                        switch (_model.state) { 
     2482                                                case jwplayer.api.events.state.PLAYING: 
     2483                                                case jwplayer.api.events.state.BUFFERING: 
     2484                                                        _model.getMedia().pause(); 
     2485                                                        break; 
     2486                                        } 
     2487                                } 
     2488                                return true; 
     2489                        } catch (err) { 
     2490                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2491                        } 
     2492                        return false; 
     2493                } 
     2494                 
     2495                 
     2496                /** Seek to a position in the video. **/ 
     2497                function _seek(position) { 
     2498                        try { 
     2499                                if (_model.playlist[0].levels[0].file.length > 0) { 
     2500                                        switch (_model.state) { 
     2501                                                case jwplayer.api.events.state.PLAYING: 
     2502                                                case jwplayer.api.events.state.PAUSED: 
     2503                                                case jwplayer.api.events.state.BUFFERING: 
     2504                                                        _model.getMedia().seek(position); 
     2505                                                        break; 
     2506                                        } 
     2507                                } 
     2508                                return true; 
     2509                        } catch (err) { 
     2510                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2511                        } 
     2512                        return false; 
     2513                } 
     2514                 
     2515                 
     2516                /** Stop playback and loading of the video. **/ 
     2517                function _stop() { 
     2518                        try { 
     2519                                if (_model.playlist[0].levels[0].file.length > 0 && _model.state != jwplayer.api.events.state.IDLE) { 
     2520                                        _model.getMedia().stop(); 
     2521                                } 
     2522                                return true; 
     2523                        } catch (err) { 
     2524                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2525                        } 
     2526                        return false; 
     2527                } 
     2528                 
     2529                /** Stop playback and loading of the video. **/ 
     2530                function _next() { 
     2531                        try { 
     2532                                if (_model.playlist[0].levels[0].file.length > 0) { 
     2533                                        if (_model.config.shuffle) { 
     2534                                                _item(_getShuffleItem()); 
     2535                                        } else if (_model.item + 1 == _model.playlist.length) { 
     2536                                                _item(0); 
     2537                                        } else { 
     2538                                                _item(_model.item + 1); 
     2539                                        } 
     2540                                } 
     2541                                if (_model.state != jwplayer.api.events.state.PLAYING && _model.state != jwplayer.api.events.state.BUFFERING) { 
     2542                                        _play(); 
     2543                                } 
     2544                                return true; 
     2545                        } catch (err) { 
     2546                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2547                        } 
     2548                        return false; 
     2549                } 
     2550                 
     2551                /** Stop playback and loading of the video. **/ 
     2552                function _prev() { 
     2553                        try { 
     2554                                if (_model.playlist[0].levels[0].file.length > 0) { 
     2555                                        if (_model.config.shuffle) { 
     2556                                                _item(_getShuffleItem()); 
     2557                                        } else if (_model.item === 0) { 
     2558                                                _item(_model.playlist.length - 1); 
     2559                                        } else { 
     2560                                                _item(_model.item - 1); 
     2561                                        } 
     2562                                } 
     2563                                if (_model.state != jwplayer.api.events.state.PLAYING && _model.state != jwplayer.api.events.state.BUFFERING) { 
     2564                                        _play(); 
     2565                                } 
     2566                                return true; 
     2567                        } catch (err) { 
     2568                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2569                        } 
     2570                        return false; 
     2571                } 
     2572                 
     2573                function _getShuffleItem() { 
     2574                        var result = null; 
     2575                        if (_model.playlist.length > 1) { 
     2576                                while (result === null) { 
     2577                                        result = Math.floor(Math.random() * _model.playlist.length); 
     2578                                        if (result == _model.item) { 
     2579                                                result = null; 
     2580                                        } 
     2581                                } 
     2582                        } else { 
     2583                                result = 0; 
     2584                        } 
     2585                        return result; 
     2586                } 
     2587                 
     2588                /** Stop playback and loading of the video. **/ 
     2589                function _item(item) { 
     2590                        _model.resetEventListeners(); 
     2591                        _model.addGlobalListener(forward); 
     2592                        try { 
     2593                                if (_model.playlist[0].levels[0].file.length > 0) { 
     2594                                        var oldstate = _model.state; 
     2595                                        if (oldstate !== jwplayer.api.events.state.IDLE) { 
     2596                                                _stop(); 
     2597                                        } 
     2598                                        _model.item = item; 
     2599                                        _itemUpdated = true; 
     2600                                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM, { 
     2601                                                "item": item 
     2602                                        }); 
     2603                                        if (oldstate == jwplayer.api.events.state.PLAYING || oldstate == jwplayer.api.events.state.BUFFERING) { 
     2604                                                _play(); 
     2605                                        } 
     2606                                } 
     2607                                return true; 
     2608                        } catch (err) { 
     2609                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2610                        } 
     2611                        return false; 
     2612                } 
     2613                 
     2614                /** Get / set the video's volume level. **/ 
     2615                function _setVolume(volume) { 
     2616                        try { 
     2617                                switch (typeof(volume)) { 
     2618                                        case "number": 
     2619                                                _model.getMedia().volume(volume); 
     2620                                                break; 
     2621                                        case "string": 
     2622                                                _model.getMedia().volume(parseInt(volume, 10)); 
     2623                                                break; 
     2624                                } 
     2625                                return true; 
     2626                        } catch (err) { 
     2627                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2628                        } 
     2629                        return false; 
     2630                } 
     2631                 
     2632                 
     2633                /** Get / set the mute state of the player. **/ 
     2634                function _setMute(state) { 
     2635                        try { 
     2636                                _model.getMedia().mute(state); 
     2637                                return true; 
     2638                        } catch (err) { 
     2639                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2640                        } 
     2641                        return false; 
     2642                } 
     2643                 
     2644                 
     2645                /** Resizes the video **/ 
     2646                function _resize(width, height) { 
     2647                        try { 
     2648                                _model.width = width; 
     2649                                _model.height = height; 
     2650                                _view.resize(width, height); 
     2651                                return true; 
     2652                        } catch (err) { 
     2653                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2654                        } 
     2655                        return false; 
     2656                } 
     2657                 
     2658                 
     2659                /** Jumping the player to/from fullscreen. **/ 
     2660                function _setFullscreen(state) { 
     2661                        try { 
     2662                                _model.fullscreen = state; 
     2663                                _view.fullscreen(state); 
     2664                                return true; 
     2665                        } catch (err) { 
     2666                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2667                        } 
     2668                        return false; 
     2669                } 
     2670                 
     2671                 
     2672                /** Loads a new video **/ 
     2673                function _load(arg) { 
     2674                        try { 
     2675                                _stop(); 
     2676                                _model.loadPlaylist(arg); 
     2677                                _itemUpdated = true; 
     2678                                return true; 
     2679                        } catch (err) { 
     2680                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, err); 
     2681                        } 
     2682                        return false; 
     2683                } 
     2684                 
     2685                jwplayer.html5.controller.repeatoptions = { 
     2686                        LIST: "LIST", 
     2687                        ALWAYS: "ALWAYS", 
     2688                        SINGLE: "SINGLE", 
     2689                        NONE: "NONE" 
     2690                }; 
     2691                 
     2692                function _completeHandler() { 
     2693                        _model.resetEventListeners(); 
     2694                        _model.addGlobalListener(forward); 
     2695                        switch (_model.config.repeat.toUpperCase()) { 
     2696                                case jwplayer.html5.controller.repeatoptions.SINGLE: 
     2697                                        _play(); 
     2698                                        break; 
     2699                                case jwplayer.html5.controller.repeatoptions.ALWAYS: 
     2700                                        if (_model.item == _model.playlist.length - 1 && !_model.config.shuffle) { 
     2701                                                _item(0); 
     2702                                                _play(); 
     2703                                        } else { 
     2704                                                _next(); 
     2705                                        } 
     2706                                        break; 
     2707                                case jwplayer.html5.controller.repeatoptions.LIST: 
     2708                                        if (_model.item == _model.playlist.length - 1 && !_model.config.shuffle) { 
     2709                                                _item(0); 
     2710                                        } else { 
     2711                                                _next(); 
     2712                                        } 
     2713                                        break; 
     2714                        } 
     2715                } 
     2716                 
     2717                this.play = _play; 
     2718                this.pause = _pause; 
     2719                this.seek = _seek; 
     2720                this.stop = _stop; 
     2721                this.next = _next; 
     2722                this.prev = _prev; 
     2723                this.item = _item; 
     2724                this.setVolume = _setVolume; 
     2725                this.setMute = _setMute; 
     2726                this.resize = _resize; 
     2727                this.setFullscreen = _setFullscreen; 
     2728                this.load = _load; 
     2729        }; 
     2730})(jwplayer); 
     2731/** 
     2732 * JW Player Default skin 
     2733 * 
     2734 * @author zach 
     2735 * @version 1.0 
     2736 */ 
     2737(function(jwplayer) { 
     2738        jwplayer.html5.defaultSkin = function() { 
     2739                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>'; 
     2740                this.xml = null; 
     2741                 
     2742                //http://www.w3schools.com/Dom/dom_parser.asp  
     2743                if (window.DOMParser) { 
     2744                        parser = new DOMParser(); 
     2745                        this.xml = parser.parseFromString(this.text, "text/xml"); 
     2746                } else { 
     2747                        //IE 
     2748                        this.xml = new ActiveXObject("Microsoft.XMLDOM"); 
     2749                        this.xml.async = "false"; 
     2750                        this.xml.loadXML(this.text); 
     2751                } 
     2752                return this; 
     2753        }; 
     2754         
     2755})(jwplayer); 
     2756/** 
     2757 * JW Player display component 
     2758 * 
     2759 * @author zach 
     2760 * @version 1.0 
     2761 */ 
     2762(function(jwplayer) { 
     2763        _css = jwplayer.html5.utils.css; 
     2764         
     2765        _hide = function(element) { 
     2766                _css(element, { 
     2767                        display: "none" 
     2768                }); 
     2769        }; 
     2770         
     2771        _show = function(element) { 
     2772                _css(element, { 
     2773                        display: "block" 
     2774                }); 
     2775        }; 
     2776         
     2777        jwplayer.html5.display = function(api, config) { 
     2778                var _api = api; 
     2779                var _display = {}; 
     2780                var _width; 
     2781                var _height; 
     2782                var _degreesRotated; 
     2783                var _rotationInterval; 
     2784                var _error; 
     2785                var _bufferRotation = _api.skin.getComponentSettings("display").bufferrotation === undefined ? 15 : parseInt(_api.skin.getComponentSettings("display").bufferrotation, 10); 
     2786                var _bufferInterval = _api.skin.getComponentSettings("display").bufferinterval === undefined ? 100 : parseInt(_api.skin.getComponentSettings("display").bufferinterval, 10); 
     2787                var _elements = { 
     2788                        display: { 
     2789                                style: { 
     2790                                        cursor: "pointer", 
     2791                                        top: 0, 
     2792                                        left: 0 
     2793                                }, 
     2794                                click: _displayClickHandler 
     2795                        }, 
     2796                        display_icon: { 
     2797                                style: { 
     2798                                        cursor: "pointer", 
     2799                                        position: "absolute", 
     2800                                        top: ((_api.skin.getSkinElement("display", "background").height - _api.skin.getSkinElement("display", "playIcon").height) / 2), 
     2801                                        left: ((_api.skin.getSkinElement("display", "background").width - _api.skin.getSkinElement("display", "playIcon").width) / 2), 
     2802                                        border: 0, 
     2803                                        margin: 0, 
     2804                                        padding: 0, 
     2805                                        zIndex: 3 
     2806                                } 
     2807                        }, 
     2808                        display_iconBackground: { 
     2809                                style: { 
     2810                                        cursor: "pointer", 
     2811                                        position: "absolute", 
     2812                                        top: ((_height - _api.skin.getSkinElement("display", "background").height) / 2), 
     2813                                        left: ((_width - _api.skin.getSkinElement("display", "background").width) / 2), 
     2814                                        border: 0, 
     2815                                        backgroundImage: (["url(", _api.skin.getSkinElement("display", "background").src, ")"]).join(""), 
     2816                                        width: _api.skin.getSkinElement("display", "background").width, 
     2817                                        height: _api.skin.getSkinElement("display", "background").height, 
     2818                                        margin: 0, 
     2819                                        padding: 0, 
     2820                                        zIndex: 2 
     2821                                } 
     2822                        }, 
     2823                        display_image: { 
     2824                                style: { 
     2825                                        display: "none", 
     2826                                        width: _width, 
     2827                                        height: _height, 
     2828                                        position: "absolute", 
     2829                                        cursor: "pointer", 
     2830                                        left: 0, 
     2831                                        top: 0, 
     2832                                        margin: 0, 
     2833                                        padding: 0, 
     2834                                        textDecoration: "none", 
     2835                                        zIndex: 1 
     2836                                } 
     2837                        }, 
     2838                        display_text: { 
     2839                                style: { 
     2840                                        zIndex: 4, 
     2841                                        position: "relative", 
     2842                                        opacity: 0.8, 
     2843                                        backgroundColor: parseInt("000000", 16), 
     2844                                        color: parseInt("ffffff", 16), 
     2845                                        textAlign: "center", 
     2846                                        fontFamily: "Arial,sans-serif", 
     2847                                        padding: "0 5px", 
     2848                                        fontSize: 14 
     2849                                } 
     2850                        } 
     2851                }; 
     2852                _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_PLAYER_STATE, _stateHandler); 
     2853                _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_MEDIA_MUTE, _stateHandler); 
     2854                _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM, _stateHandler); 
     2855                _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_ERROR, _errorHandler); 
     2856                _setupDisplay(); 
     2857                 
     2858                function _setupDisplay() { 
     2859                        _display.display = createElement("div", "display"); 
     2860                        _display.display_text = createElement("div", "display_text"); 
     2861                        _display.display.appendChild(_display.display_text); 
     2862                        _display.display_image = createElement("img", "display_image"); 
     2863                        _display.display_image.onerror = function(evt) { 
     2864                                _hide(_display.display_image); 
     2865                        }; 
     2866                        _display.display_icon = createElement("div", "display_icon"); 
     2867                        _display.display_iconBackground = createElement("div", "display_iconBackground"); 
     2868                        _display.display.appendChild(_display.display_image); 
     2869                        _display.display_iconBackground.appendChild(_display.display_icon); 
     2870                        _display.display.appendChild(_display.display_iconBackground); 
     2871                        _setupDisplayElements(); 
     2872                } 
     2873                 
     2874                 
     2875                this.getDisplayElement = function() { 
     2876                        return _display.display; 
     2877                }; 
     2878                 
     2879                this.resize = function(width, height) { 
     2880                        _width = width; 
     2881                        _height = height; 
     2882                        _css(_display.display, { 
     2883                                width: width, 
     2884                                height: height 
     2885                        }); 
     2886                        _css(_display.display_text, { 
     2887                                width: (width - 10), 
     2888                                top: ((_height - _display.display_text.getBoundingClientRect().height) / 2) 
     2889                        }); 
     2890                        _css(_display.display_image, { 
     2891                                width: width, 
     2892                                height: height 
     2893                        }); 
     2894                        _css(_display.display_iconBackground, { 
     2895                                top: ((_height - _api.skin.getSkinElement("display", "background").height) / 2), 
     2896                                left: ((_width - _api.skin.getSkinElement("display", "background").width) / 2) 
     2897                        }); 
     2898                        _stateHandler({}); 
     2899                }; 
     2900                 
     2901                function createElement(tag, element) { 
     2902                        var _element = document.createElement(tag); 
     2903                        _element.id = _api.id + "_jwplayer_" + element; 
     2904                        _css(_element, _elements[element].style); 
     2905                        return _element; 
     2906                } 
     2907                 
     2908                 
     2909                function _setupDisplayElements() { 
     2910                        for (var element in _display) { 
     2911                                if (_elements[element].click !== undefined) { 
     2912                                        _display[element].onclick = _elements[element].click; 
     2913                                } 
     2914                        } 
     2915                } 
     2916                 
     2917                 
     2918                function _displayClickHandler(evt) { 
     2919                        if (typeof evt.preventDefault != "undefined") { 
     2920                                evt.preventDefault(); // W3C 
     2921                        } else { 
     2922                                evt.returnValue = false; // IE 
     2923                        } 
     2924                        if (_api.jwGetState() != jwplayer.api.events.state.PLAYING) { 
     2925                                _api.jwPlay(); 
     2926                        } else { 
     2927                                _api.jwPause(); 
     2928                        } 
     2929                } 
     2930                 
     2931                 
     2932                function _setDisplayIcon(newIcon) { 
     2933                        if (_error) { 
     2934                                return; 
     2935                        } 
     2936                        _show(_display.display_iconBackground); 
     2937                        _display.display_icon.style.backgroundImage = (["url(", _api.skin.getSkinElement("display", newIcon).src, ")"]).join(""); 
     2938                        _css(_display.display_icon, { 
     2939                                display: "block", 
     2940                                width: _api.skin.getSkinElement("display", newIcon).width, 
     2941                                height: _api.skin.getSkinElement("display", newIcon).height, 
     2942                                top: (_api.skin.getSkinElement("display", "background").height - _api.skin.getSkinElement("display", newIcon).height) / 2, 
     2943                                left: (_api.skin.getSkinElement("display", "background").width - _api.skin.getSkinElement("display", newIcon).width) / 2 
     2944                        }); 
     2945                        if (_api.skin.getSkinElement("display", newIcon + "Over") !== undefined) { 
     2946                                _display.display_icon.onmouseover = function(evt) { 
     2947                                        _display.display_icon.style.backgroundImage = ["url(", _api.skin.getSkinElement("display", newIcon + "Over").src, ")"].join(""); 
     2948                                }; 
     2949                                _display.display_icon.onmouseout = function(evt) { 
     2950                                        _display.display_icon.style.backgroundImage = ["url(", _api.skin.getSkinElement("display", newIcon).src, ")"].join(""); 
     2951                                }; 
     2952                        } else { 
     2953                                _display.display_icon.onmouseover = null; 
     2954                                _display.display_icon.onmouseout = null; 
     2955                        } 
     2956                } 
     2957                 
     2958                function _hideDisplayIcon() { 
     2959                        _hide(_display.display_icon); 
     2960                        _hide(_display.display_iconBackground); 
     2961                } 
     2962                 
     2963                function _errorHandler(evt) { 
     2964                        _error = true; 
     2965                        _hideDisplayIcon(); 
     2966                        _display.display_text.innerHTML = evt.error; 
     2967                        _show(_display.display_text); 
     2968                        _display.display_text.style.top = ((_height - _display.display_text.getBoundingClientRect().height) / 2) + "px"; 
     2969                } 
     2970                 
     2971                function _stateHandler(evt) { 
     2972                        if ((evt.type == jwplayer.api.events.JWPLAYER_PLAYER_STATE || 
     2973                        evt.type == jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM) && 
     2974                        _error) { 
     2975                                _error = false; 
     2976                                _hide(_display.display_text); 
     2977                        } 
     2978                        if (_rotationInterval !== undefined) { 
     2979                                clearInterval(_rotationInterval); 
     2980                                _rotationInterval = null; 
     2981                                jwplayer.html5.utils.animations.rotate(_display.display_icon, 0); 
     2982                        } 
     2983                        switch (_api.jwGetState()) { 
     2984                                case jwplayer.api.events.state.BUFFERING: 
     2985                                        _setDisplayIcon("bufferIcon"); 
     2986                                        _degreesRotated = 0; 
     2987                                        _rotationInterval = setInterval(function() { 
     2988                                                _degreesRotated += _bufferRotation; 
     2989                                                jwplayer.html5.utils.animations.rotate(_display.display_icon, _degreesRotated % 360); 
     2990                                        }, _bufferInterval); 
     2991                                        _setDisplayIcon("bufferIcon"); 
     2992                                        break; 
     2993                                case jwplayer.api.events.state.PAUSED: 
     2994                                        _css(_display.display_image, { 
     2995                                                background: "transparent no-repeat center center" 
     2996                                        }); 
     2997                                        _setDisplayIcon("playIcon"); 
     2998                                        break; 
     2999                                case jwplayer.api.events.state.IDLE: 
     3000                                        if (_api.jwGetPlaylist()[_api.jwGetItem()].image) { 
     3001                                                _css(_display.display_image, { 
     3002                                                        display: "block" 
     3003                                                }); 
     3004                                                _display.display_image.src = jwplayer.html5.utils.getAbsolutePath(_api.jwGetPlaylist()[_api.jwGetItem()].image); 
     3005                                        } else { 
     3006                                                _css(_display.display_image, { 
     3007                                                        display: "none" 
     3008                                                }); 
     3009                                                delete _display.display_image.src; 
     3010                                        } 
     3011                                        _setDisplayIcon("playIcon"); 
     3012                                        break; 
     3013                                default: 
     3014                                        if (_api.jwGetMute()) { 
     3015                                                _css(_display.display_image, { 
     3016                                                        display: "none" 
     3017                                                }); 
     3018                                                delete _display.display_image.src; 
     3019                                                _setDisplayIcon("muteIcon"); 
     3020                                        } else { 
     3021                                                _css(_display.display_image, { 
     3022                                                        display: "none" 
     3023                                                }); 
     3024                                                delete _display.display_image.src; 
     3025                                                _hide(_display.display_iconBackground); 
     3026                                                _hide(_display.display_icon); 
     3027                                        } 
     3028                                        break; 
     3029                        } 
     3030                } 
     3031                 
     3032                return this; 
     3033        }; 
     3034         
     3035         
     3036         
     3037})(jwplayer); 
     3038/** 
     3039 * Event dispatcher for the JW Player for HTML5 
     3040 * 
     3041 * @author zach 
     3042 * @version 1.0 
     3043 */ 
     3044(function(jwplayer) { 
     3045        jwplayer.html5.eventdispatcher = function(id, debug) { 
     3046                var _id = id; 
     3047                var _debug = debug; 
     3048                var _listeners; 
     3049                var _globallisteners; 
     3050                 
     3051                /** Clears all event listeners **/ 
     3052                this.resetEventListeners = function() { 
     3053                        _listeners = {}; 
     3054                        _globallisteners = []; 
     3055                }; 
     3056                 
     3057                this.resetEventListeners(); 
     3058                 
     3059                /** Add an event listener for a specific type of event. **/ 
     3060                this.addEventListener = function(type, listener, count) { 
     3061                        try { 
     3062                                if (_listeners[type] === undefined) { 
     3063                                        _listeners[type] = []; 
     3064                                } 
     3065                                 
     3066                                if (typeof(listener) == "string") { 
     3067                                        eval("listener = " + listener); 
     3068                                } 
     3069                                _listeners[type].push({ 
     3070                                        listener: listener, 
     3071                                        count: count 
     3072                                }); 
     3073                        } catch (err) { 
     3074                                jwplayer.html5.utils.log("error", err); 
     3075                        } 
     3076                        return false; 
     3077                }; 
     3078                 
     3079                 
     3080                /** Remove an event listener for a specific type of event. **/ 
     3081                this.removeEventListener = function(type, listener) { 
     3082                        try { 
     3083                                for (var lisenterIndex in _listeners[type]) { 
     3084                                        if (_listeners[type][lisenterIndex].toString() == listener.toString()) { 
     3085                                                _listeners[type].slice(lisenterIndex, lisenterIndex + 1); 
     3086                                                break; 
     3087                                        } 
     3088                                } 
     3089                        } catch (err) { 
     3090                                jwplayer.html5.utils.log("error", err); 
     3091                        } 
     3092                        return false; 
     3093                }; 
     3094                 
     3095                /** Add an event listener for all events. **/ 
     3096                this.addGlobalListener = function(listener, count) { 
     3097                        try { 
     3098                                if (typeof(listener) == "string") { 
     3099                                        eval("listener = " + listener); 
     3100                                } 
     3101                                _globallisteners.push({ 
     3102                                        listener: listener, 
     3103                                        count: count 
     3104                                }); 
     3105                        } catch (err) { 
     3106                                jwplayer.html5.utils.log("error", err); 
     3107                        } 
     3108                        return false; 
     3109                }; 
     3110                 
     3111                /** Add an event listener for all events. **/ 
     3112                this.removeGlobalListener = function(listener) { 
     3113                        try { 
     3114                                for (var lisenterIndex in _globallisteners) { 
     3115                                        if (_globallisteners[lisenterIndex].toString() == listener.toString()) { 
     3116                                                _globallisteners.slice(lisenterIndex, lisenterIndex + 1); 
     3117                                                break; 
     3118                                        } 
     3119                                } 
     3120                        } catch (err) { 
     3121                                jwplayer.html5.utils.log("error", err); 
     3122                        } 
     3123                        return false; 
     3124                }; 
     3125                 
     3126                 
     3127                /** Send an event **/ 
     3128                this.sendEvent = function(type, data) { 
     3129                        if (data === undefined) { 
     3130                                data = {}; 
     3131                        } 
     3132                        jwplayer.utils.extend(data, { 
     3133                                id: _id, 
     3134                                version: jwplayer.html5.version, 
     3135                                type: type 
     3136                        }); 
     3137                        if (_debug) { 
     3138                                jwplayer.html5.utils.log(type, data); 
     3139                        } 
     3140                        for (var listenerIndex in _listeners[type]) { 
     3141                                try { 
     3142                                        _listeners[type][listenerIndex].listener(data); 
     3143                                } catch (err) { 
     3144                                        jwplayer.html5.utils.log("There was an error while handling a listener", _listeners[type][listenerIndex].listener, err); 
     3145                                } 
     3146                                if (_listeners[type][listenerIndex].count === 1) { 
     3147                                        delete _listeners[type][listenerIndex]; 
     3148                                } else if (_listeners[type][listenerIndex].count > 0) { 
     3149                                        _listeners[type][listenerIndex].count = _listeners[type][listenerIndex].count - 1; 
     3150                                } 
     3151                        } 
     3152                        for (var globalListenerIndex in _globallisteners) { 
     3153                                try { 
     3154                                        _globallisteners[globalListenerIndex].listener(data); 
     3155                                } catch (err) { 
     3156                                        jwplayer.html5.utils.log("There was an error while handling a listener", _globallisteners[globalListenerIndex].listener, err); 
     3157                                } 
     3158                                if (_globallisteners[globalListenerIndex].count === 1) { 
     3159                                        delete _globallisteners[globalListenerIndex]; 
     3160                                } else if (_globallisteners[globalListenerIndex].count > 0) { 
     3161                                        _globallisteners[globalListenerIndex].count = _globallisteners[globalListenerIndex].count - 1; 
     3162                                } 
     3163                        } 
     3164                }; 
     3165        }; 
     3166})(jwplayer); 
     3167/** 
     3168 * JW Player Video Media component 
     3169 * 
     3170 * @author zach 
     3171 * @version 1.0 
     3172 */ 
     3173(function(jwplayer) { 
     3174        jwplayer.html5.extensionmap = { 
     3175                "3gp": "video/3gpp", 
     3176                "3gpp": "video/3gpp", 
     3177                "3g2": "video/3gpp2", 
     3178                "3gpp2": "video/3gpp2", 
     3179                "flv": "video/x-flv", 
     3180                "f4a": "audio/mp4", 
     3181                "f4b": "audio/mp4", 
     3182                "f4p": "video/mp4", 
     3183                "f4v": "video/mp4", 
     3184                "mov": "video/quicktime", 
     3185                "m4a": "audio/mp4", 
     3186                "m4b": "audio/mp4", 
     3187                "m4p": "audio/mp4", 
     3188                "m4v": "video/mp4", 
     3189                "mkv": "video/x-matroska", 
     3190                "mp4": "video/mp4", 
     3191                "sdp": "application/sdp", 
     3192                "vp6": "video/x-vp6", 
     3193                "aac": "audio/aac", 
     3194                "mp3": "audio/mp3", 
     3195                "ogg": "audio/ogg", 
     3196                "ogv": "video/ogg", 
     3197                "webm": "video/webm" 
     3198        }; 
     3199})(jwplayer); 
     3200/** 
     3201 * JW Player logo component 
     3202 * 
     3203 * @author zach 
     3204 * @version 1.0 
     3205 */ 
     3206(function(jwplayer) { 
     3207 
     3208        var _defaults = { 
     3209                prefix: "http://l.longtailvideo.com/html5/", 
     3210                file: "logo.png", 
     3211                link: "http://www.longtailvideo.com/players/jw-flv-player/", 
     3212                margin: 8, 
     3213                out: 0.5, 
     3214                over: 1, 
     3215                timeout: 3, 
     3216                hide: true, 
     3217                position: "bottom-left" 
     3218        }; 
     3219         
     3220        _css = jwplayer.html5.utils.css; 
     3221         
     3222        jwplayer.html5.logo = function(api, logoConfig) { 
     3223                var _api = api; 
     3224                var _timeout; 
     3225                 
     3226                if (_defaults.prefix) { 
     3227                        var version = api.version.split(/\W/).splice(0, 2).join("/"); 
     3228                        if (_defaults.prefix.indexOf(version) < 0) { 
     3229                                _defaults.prefix += version + "/"; 
     3230                        } 
     3231                } 
     3232                 
     3233                if (logoConfig.position == jwplayer.html5.view.positions.OVER){ 
     3234                        logoConfig.position = _defaults.position; 
     3235                } 
     3236                 
     3237                var _settings = jwplayer.utils.extend({}, _defaults, logoConfig); 
     3238                 
     3239                if (!_settings.file){ 
     3240                        return; 
     3241                } 
     3242                 
     3243                var _logo = document.createElement("img"); 
     3244                _logo.id = _api.id + "_jwplayer_logo"; 
     3245                _logo.style.display = "none"; 
     3246                 
     3247                _logo.onload = function(evt) { 
     3248                        _css(_logo, _getStyle()); 
     3249                        _api.jwAddEventListener(jwplayer.api.events.JWPLAYER_PLAYER_STATE, _stateHandler); 
     3250                }; 
     3251                 
     3252                if (_settings.file.indexOf("http://") === 0) { 
     3253                        _logo.src = _settings.file; 
     3254                } else { 
     3255                        _logo.src = _settings.prefix + _settings.file; 
     3256                } 
     3257                 
     3258                _logo.onmouseover = function(evt) { 
     3259                        _logo.style.opacity = _settings.over; 
     3260                        fade(); 
     3261                }; 
     3262                 
     3263                _logo.onmouseout = function(evt) { 
     3264                        _logo.style.opacity = _settings.out; 
     3265                        fade(); 
     3266                }; 
     3267                 
     3268                _logo.onclick = _logoClickHandler; 
     3269                 
     3270                function _getStyle() { 
     3271                        var _imageStyle = { 
     3272                                textDecoration: "none", 
     3273                                position: "absolute" 
     3274                        }; 
     3275                        _imageStyle.display = _settings.hide ? "none" : "block"; 
     3276                        var positions = _settings.position.toLowerCase().split("-"); 
     3277                        for (var position in positions) { 
     3278                                _imageStyle[positions[position]] = _settings.margin; 
     3279                        } 
     3280                        return _imageStyle; 
     3281                } 
     3282                 
     3283                this.resize = function(width, height) { 
     3284                }; 
     3285                 
     3286                this.getDisplayElement = function() { 
     3287                        return _logo; 
     3288                }; 
     3289                 
     3290                function _logoClickHandler(evt) { 
     3291                        evt.stopPropagation(); 
     3292                        window.open(_settings.link, "_blank"); 
     3293                        return; 
     3294                } 
     3295                 
     3296                function fade() { 
     3297                        if (_timeout) { 
     3298                                clearTimeout(_timeout); 
     3299                        } 
     3300                        _timeout = setTimeout(function() { 
     3301                                jwplayer.html5.utils.fadeTo(_logo, 0, 0.1, parseFloat(_logo.style.opacity)); 
     3302                        }, _settings.timeout * 1000); 
     3303                } 
     3304                 
     3305                function _stateHandler(obj) { 
     3306                        switch (_api.jwGetState()) { 
     3307                                case jwplayer.api.events.state.BUFFERING: 
     3308                                        _logo.style.display = "block"; 
     3309                                        _logo.style.opacity = _settings.out; 
     3310                                        if (_settings.hide) { 
     3311                                                fade(); 
     3312                                        } 
     3313                                        break; 
     3314                                case jwplayer.api.events.state.PAUSED: 
     3315                                        break; 
     3316                                case jwplayer.api.events.state.IDLE: 
     3317                                        break; 
     3318                                case jwplayer.api.events.state.PLAYING: 
     3319                                        break; 
     3320                                default: 
     3321                                        if (_settings.hide) { 
     3322                                                fade(); 
     3323                                        } 
     3324                                        break; 
     3325                        } 
     3326                } 
     3327                 
     3328                return this; 
     3329        }; 
     3330         
     3331})(jwplayer); 
     3332/** 
     3333 * JW Player Video Media component 
     3334 * 
     3335 * @author zach 
     3336 * @version 1.0 
     3337 */ 
     3338(function(jwplayer) { 
     3339 
     3340        var _states = { 
     3341                "ended": jwplayer.api.events.state.IDLE, 
     3342                "playing": jwplayer.api.events.state.PLAYING, 
     3343                "pause": jwplayer.api.events.state.PAUSED, 
     3344                "buffering": jwplayer.api.events.state.BUFFERING 
     3345        }; 
     3346         
     3347        var _css = jwplayer.html5.utils.css; 
     3348         
     3349        jwplayer.html5.mediavideo = function(model, container) { 
     3350                var _events = { 
     3351                        'abort': _generalHandler, 
     3352                        'canplay': _stateHandler, 
     3353                        'canplaythrough': _stateHandler, 
     3354                        'durationchange': _metaHandler, 
     3355                        'emptied': _generalHandler, 
     3356                        'ended': _stateHandler, 
     3357                        'error': _errorHandler, 
     3358                        'loadeddata': _metaHandler, 
     3359                        'loadedmetadata': _metaHandler, 
     3360                        'loadstart': _stateHandler, 
     3361                        'pause': _stateHandler, 
     3362                        'play': _positionHandler, 
     3363                        'playing': _stateHandler, 
     3364                        'progress': _progressHandler, 
     3365                        'ratechange': _generalHandler, 
     3366                        'seeked': _stateHandler, 
     3367                        'seeking': _stateHandler, 
     3368                        'stalled': _stateHandler, 
     3369                        'suspend': _stateHandler, 
     3370                        'timeupdate': _positionHandler, 
     3371                        'volumechange': _generalHandler, 
     3372                        'waiting': _stateHandler, 
     3373                        'canshowcurrentframe': _generalHandler, 
     3374                        'dataunavailable': _generalHandler, 
     3375                        'empty': _generalHandler, 
     3376                        'load': _loadHandler, 
     3377                        'loadedfirstframe': _generalHandler 
     3378                }; 
     3379                var _eventDispatcher = new jwplayer.html5.eventdispatcher(); 
     3380                jwplayer.utils.extend(this, _eventDispatcher); 
     3381                var _model = model; 
     3382                var _container = container; 
     3383                var _bufferFull; 
     3384                var _bufferingComplete; 
     3385                var _state = jwplayer.api.events.state.IDLE; 
     3386                var _interval = null; 
     3387                var _stopped; 
     3388                var _loadcount = 0; 
     3389                var _start = false; 
     3390                var _hasChrome = false; 
     3391                var _currentItem; 
     3392                var _sourceError; 
     3393                var _bufferTimes = []; 
     3394                var _bufferBackupTimeout; 
     3395                var _error = false; 
     3396                 
     3397                function _getState() { 
     3398                        return _state; 
     3399                } 
     3400                 
     3401                function _loadHandler(evt) { 
     3402                } 
     3403                 
     3404                function _generalHandler(event) { 
     3405                } 
     3406                 
     3407                function _stateHandler(event) { 
     3408                        if (_states[event.type]) { 
     3409                                _setState(_states[event.type]); 
     3410                        } 
     3411                } 
     3412                 
     3413                function _setState(newstate) { 
     3414                        if (_error) { 
     3415                                return; 
     3416                        } 
     3417                        if (_stopped) { 
     3418                                newstate = jwplayer.api.events.state.IDLE; 
     3419                        } 
     3420                        if (newstate == jwplayer.api.events.state.PAUSED && _state == jwplayer.api.events.state.IDLE) { 
     3421                                return; 
     3422                        } 
     3423                        if (_state != newstate) { 
     3424                                var oldstate = _state; 
     3425                                _model.state = newstate; 
     3426                                _state = newstate; 
     3427                                var _sendComplete = false; 
     3428                                if (newstate == jwplayer.api.events.state.IDLE) { 
     3429                                        _clearInterval(); 
     3430                                        if (_model.position >= _model.duration && (_model.position || _model.duration)) { 
     3431                                                _sendComplete = true; 
     3432                                        } 
     3433                                         
     3434                                        if (_container.style.display != 'none' && !_model.config.chromeless) { 
     3435                                                _container.style.display = 'none'; 
     3436                                        } 
     3437                                } 
     3438                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYER_STATE, { 
     3439                                        oldstate: oldstate, 
     3440                                        newstate: newstate 
     3441                                }); 
     3442                                if (_sendComplete) { 
     3443                                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_COMPLETE); 
     3444                                } 
     3445                        } 
     3446                        _stopped = false; 
     3447                } 
     3448                 
     3449                 
     3450                function _metaHandler(event) { 
     3451                        var meta = { 
     3452                                height: event.target.videoHeight, 
     3453                                width: event.target.videoWidth, 
     3454                                duration: Math.round(event.target.duration * 10) / 10 
     3455                        }; 
     3456                        if (_model.duration === 0 || isNaN(_model.duration)) { 
     3457                                _model.duration = Math.round(event.target.duration * 10) / 10; 
     3458                        } 
     3459                        _model.playlist[_model.item] = jwplayer.utils.extend(_model.playlist[_model.item], meta); 
     3460                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_META, { 
     3461                                metadata: meta 
     3462                        }); 
     3463                } 
     3464                 
     3465                 
     3466                function _positionHandler(event) { 
     3467                        if (_stopped) { 
     3468                                return; 
     3469                        } 
     3470                         
     3471                        if (event !== undefined && event.target !== undefined) { 
     3472                                if (_model.duration === 0 || isNaN(_model.duration)) { 
     3473                                        _model.duration = Math.round(event.target.duration * 10) / 10; 
     3474                                } 
     3475                                if (!_start && _container.readyState > 0) { 
     3476                                        _setState(jwplayer.api.events.state.PLAYING); 
     3477                                } 
     3478                                if (_state == jwplayer.api.events.state.PLAYING) { 
     3479                                        if (!_start && _container.readyState > 0) { 
     3480                                                _start = true; 
     3481                                                try { 
     3482                                                        _container.currentTime = _model.playlist[_model.item].start; 
     3483                                                } catch (err) { 
     3484                                                 
     3485                                                } 
     3486                                                _container.volume = _model.volume / 100; 
     3487                                                _container.muted = _model.mute; 
     3488                                        } 
     3489                                        _model.position = Math.round(event.target.currentTime * 10) / 10; 
     3490                                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_TIME, { 
     3491                                                position: Math.round(event.target.currentTime * 10) / 10, 
     3492                                                duration: Math.round(event.target.duration * 10) / 10 
     3493                                        }); 
     3494                                } 
     3495                        } 
     3496                        _progressHandler(event); 
     3497                } 
     3498                 
     3499                function _bufferBackup() { 
     3500                        var timeout = (_bufferTimes[_bufferTimes.length - 1] - _bufferTimes[0]) / _bufferTimes.length; 
     3501                        _bufferBackupTimeout = setTimeout(function() { 
     3502                                if (!_bufferingComplete) { 
     3503                                        _progressHandler({ 
     3504                                                lengthComputable: true, 
     3505                                                loaded: 1, 
     3506                                                total: 1 
     3507                                        }); 
     3508                                } 
     3509                        }, timeout * 10); 
     3510                } 
     3511                 
     3512                function _progressHandler(event) { 
     3513                        var bufferPercent, bufferTime; 
     3514                        if (event !== undefined && event.lengthComputable && event.total) { 
     3515                                _addBufferEvent(); 
     3516                                bufferPercent = event.loaded / event.total * 100; 
     3517                                bufferTime = bufferPercent / 100 * (_model.duration - _container.currentTime); 
     3518                                if (50 < bufferPercent && !_bufferingComplete) { 
     3519                                        clearTimeout(_bufferBackupTimeout); 
     3520                                        _bufferBackup(); 
     3521                                } 
     3522                        } else if ((_container.buffered !== undefined) && (_container.buffered.length > 0)) { 
     3523                                maxBufferIndex = 0; 
     3524                                if (maxBufferIndex >= 0) { 
     3525                                        bufferPercent = _container.buffered.end(maxBufferIndex) / _container.duration * 100; 
     3526                                        bufferTime = _container.buffered.end(maxBufferIndex) - _container.currentTime; 
     3527                                } 
     3528                        } 
     3529                         
     3530                        if (_bufferFull === false && _state == jwplayer.api.events.state.BUFFERING) { 
     3531                                _bufferFull = true; 
     3532                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_BUFFER_FULL); 
     3533                        } 
     3534                         
     3535                        if (!_bufferingComplete) { 
     3536                                if (bufferPercent == 100 && _bufferingComplete === false) { 
     3537                                        _bufferingComplete = true; 
     3538                                } 
     3539                                 
     3540                                if (bufferPercent !== null && (bufferPercent > _model.buffer)) { 
     3541                                        _model.buffer = Math.round(bufferPercent); 
     3542                                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_BUFFER, { 
     3543                                                bufferPercent: Math.round(bufferPercent) 
     3544                                        }); 
     3545                                } 
     3546                                 
     3547                        } 
     3548                } 
     3549                 
     3550                 
     3551                function _startInterval() { 
     3552                        if (_interval === null) { 
     3553                                _interval = setInterval(function() { 
     3554                                        _positionHandler(); 
     3555                                }, 100); 
     3556                        } 
     3557                } 
     3558                 
     3559                function _clearInterval() { 
     3560                        clearInterval(_interval); 
     3561                        _interval = null; 
     3562                } 
     3563                 
     3564                function _errorHandler(event) { 
     3565                        var message = "There was an error: "; 
     3566                        if ((event.target.error && event.target.tagName.toLowerCase() == "video") || 
     3567                        event.target.parentNode.error && event.target.parentNode.tagName.toLowerCase() == "video") { 
     3568                                var element = event.target.error === undefined ? event.target.parentNode.error : event.target.error; 
     3569                                switch (element.code) { 
     3570                                        case element.MEDIA_ERR_ABORTED: 
     3571                                                message = "You aborted the video playback: "; 
     3572                                                break; 
     3573                                        case element.MEDIA_ERR_NETWORK: 
     3574                                                message = "A network error caused the video download to fail part-way: "; 
     3575                                                break; 
     3576                                        case element.MEDIA_ERR_DECODE: 
     3577                                                message = "The video playback was aborted due to a corruption problem or because the video used features your browser did not support: "; 
     3578                                                break; 
     3579                                        case element.MEDIA_ERR_SRC_NOT_SUPPORTED: 
     3580                                                message = "The video could not be loaded, either because the server or network failed or because the format is not supported: "; 
     3581                                                break; 
     3582                                        default: 
     3583                                                message = "An unknown error occurred: "; 
     3584                                                break; 
     3585                                } 
     3586                        } else if (event.target.tagName.toLowerCase() == "source") { 
     3587                                _sourceError--; 
     3588                                if (_sourceError > 0) { 
     3589                                        return; 
     3590                                } 
     3591                                message = "The video could not be loaded, either because the server or network failed or because the format is not supported: "; 
     3592                        } else { 
     3593                                jwplayer.html5.utils.log("Erroneous error received. Continuing..."); 
     3594                                return; 
     3595                        } 
     3596                        _stop(); 
     3597                        message += joinFiles(); 
     3598                        _error = true; 
     3599                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, { 
     3600                                error: message 
     3601                        }); 
     3602                        return; 
     3603                } 
     3604                 
     3605                function joinFiles() { 
     3606                        var result = ""; 
     3607                        for (var sourceIndex in _currentItem.levels) { 
     3608                                var sourceModel = _currentItem.levels[sourceIndex]; 
     3609                                var source = _container.ownerDocument.createElement("source"); 
     3610                                result += jwplayer.html5.utils.getAbsolutePath(sourceModel.file); 
     3611                                if (sourceIndex < (_currentItem.levels.length - 1)) { 
     3612                                        result += ", "; 
     3613                                } 
     3614                        } 
     3615                        return result; 
     3616                } 
     3617                 
     3618                this.getDisplayElement = function() { 
     3619                        return _container; 
     3620                }; 
     3621                 
     3622                this.play = function() { 
     3623                        if (_state != jwplayer.api.events.state.PLAYING) { 
     3624                                if (_container.style.display != "block") { 
     3625                                        _container.style.display = "block"; 
     3626                                } 
     3627                                _container.play(); 
     3628                                _startInterval(); 
     3629                        } 
     3630                }; 
     3631                 
     3632                 
     3633                /** Switch the pause state of the player. **/ 
     3634                this.pause = function() { 
     3635                        _container.pause(); 
     3636                        _setState(jwplayer.api.events.state.PAUSED); 
     3637                }; 
     3638                 
     3639                 
     3640                /** Seek to a position in the video. **/ 
     3641                this.seek = function(position) { 
     3642                        if (!(_model.duration === 0 || isNaN(_model.duration)) && 
     3643                        !(_model.position === 0 || isNaN(_model.position))) { 
     3644                                _container.currentTime = position; 
     3645                                _container.play(); 
     3646                        } 
     3647                }; 
     3648                 
     3649                 
     3650                /** Stop playback and loading of the video. **/ 
     3651                function _stop() { 
     3652                        _container.pause(); 
     3653                        _clearInterval(); 
     3654                        _model.position = 0; 
     3655                        _stopped = true; 
     3656                        _setState(jwplayer.api.events.state.IDLE); 
     3657                } 
     3658                 
     3659                this.stop = _stop; 
     3660                 
     3661                /** Change the video's volume level. **/ 
     3662                this.volume = function(position) { 
     3663                        _container.volume = position / 100; 
     3664                        _model.volume = position; 
     3665                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_VOLUME, { 
     3666                                volume: Math.round(position) 
     3667                        }); 
     3668                }; 
     3669                 
     3670                 
     3671                /** Switch the mute state of the player. **/ 
     3672                this.mute = function(state) { 
     3673                        _container.muted = state; 
     3674                        _model.mute = state; 
     3675                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_MUTE, { 
     3676                                mute: state 
     3677                        }); 
     3678                }; 
     3679                 
     3680                 
     3681                /** Resize the player. **/ 
     3682                this.resize = function(width, height) { 
     3683                        if (false) { 
     3684                                _css(_container, { 
     3685                                        width: width, 
     3686                                        height: height 
     3687                                }); 
     3688                        } 
     3689                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_RESIZE, { 
     3690                                fullscreen: _model.fullscreen, 
     3691                                width: width, 
     3692                                hieght: height 
     3693                        }); 
     3694                }; 
     3695                 
     3696                 
     3697                /** Switch the fullscreen state of the player. **/ 
     3698                this.fullscreen = function(state) { 
     3699                        if (state === true) { 
     3700                                this.resize("100%", "100%"); 
     3701                        } else { 
     3702                                this.resize(_model.config.width, _model.config.height); 
     3703                        } 
     3704                }; 
     3705                 
     3706                 
     3707                /** Load a new video into the player. **/ 
     3708                this.load = function(playlistItem) { 
     3709                        _embed(playlistItem); 
     3710                        _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_LOADED); 
     3711                        _bufferFull = false; 
     3712                        _bufferingComplete = false; 
     3713                        _start = false; 
     3714                        if (!_model.config.chromeless) { 
     3715                                _bufferTimes = []; 
     3716                                _addBufferEvent(); 
     3717                                _setState(jwplayer.api.events.state.BUFFERING); 
     3718                                 
     3719                                setTimeout(function() { 
     3720                                        _positionHandler(); 
     3721                                }, 25); 
     3722                        } 
     3723                }; 
     3724                 
     3725                function _addBufferEvent() { 
     3726                        var currentTime = new Date().getTime(); 
     3727                        _bufferTimes.push(currentTime); 
     3728                } 
     3729                 
     3730                this.hasChrome = function() { 
     3731                        return _hasChrome; 
     3732                }; 
     3733                 
     3734                function _embed(playlistItem) { 
     3735                        _model.duration = playlistItem.duration; 
     3736                        _hasChrome = false; 
     3737                        _currentItem = playlistItem; 
     3738                        var vid = document.createElement("video"); 
     3739                        vid.preload = "none"; 
     3740                        _error = false; 
     3741                        _sourceError = 0; 
     3742                        for (var sourceIndex in playlistItem.levels) { 
     3743                                var sourceModel = playlistItem.levels[sourceIndex]; 
     3744                                if (jwplayer.html5.utils.isYouTube(sourceModel.file)) { 
     3745                                        delete vid; 
     3746                                        _embedYouTube(sourceModel.file); 
     3747                                        return; 
     3748                                } 
     3749                                var sourceType; 
     3750                                if (sourceModel.type === undefined) { 
     3751                                        var extension = jwplayer.html5.utils.extension(sourceModel.file); 
     3752                                        if (jwplayer.html5.extensionmap[extension] !== undefined) { 
     3753                                                sourceType = jwplayer.html5.extensionmap[extension]; 
     3754                                        } else { 
     3755                                                sourceType = 'video/' + extension + ';'; 
     3756                                        } 
     3757                                } else { 
     3758                                        sourceType = sourceModel.type; 
     3759                                } 
     3760                                if (vid.canPlayType(sourceType) === "") { 
     3761                                        continue; 
     3762                                } 
     3763                                var source = _container.ownerDocument.createElement("source"); 
     3764                                source.src = jwplayer.html5.utils.getAbsolutePath(sourceModel.file); 
     3765                                source.type = sourceType; 
     3766                                _sourceError++; 
     3767                                vid.appendChild(source); 
     3768                        } 
     3769                         
     3770                        if (_sourceError === 0) { 
     3771                                _error = true; 
     3772                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_ERROR, { 
     3773                                        error: "The video could not be loaded because the format is not supported by your browser: " + joinFiles() 
     3774                                }); 
     3775                        } 
     3776                         
     3777                        if (_model.config.chromeless) { 
     3778                                vid.poster = jwplayer.html5.utils.getAbsolutePath(playlistItem.image); 
     3779                                vid.controls = "controls"; 
     3780                        } 
     3781                        vid.style.position = _container.style.position; 
     3782                        vid.style.top = _container.style.top; 
     3783                        vid.style.left = _container.style.left; 
     3784                        vid.style.width = _container.style.width; 
     3785                        vid.style.height = _container.style.height; 
     3786                        vid.style.zIndex = _container.style.zIndex; 
     3787                        vid.onload = _loadHandler; 
     3788                        vid.volume = 0; 
     3789                        _container.parentNode.replaceChild(vid, _container); 
     3790                        vid.id = _container.id; 
     3791                        _container = vid; 
     3792                        for (var event in _events) { 
     3793                                _container.addEventListener(event, function(evt) { 
     3794                                        if (evt.target.parentNode !== null) { 
     3795                                                _events[evt.type](evt); 
     3796                                        } 
     3797                                }, true); 
     3798                        } 
     3799                } 
     3800                 
     3801                function _embedYouTube(path) { 
     3802                        var object = document.createElement("object"); 
     3803                        path = ["http://www.youtube.com/v/", path.replace(/^[^v]+v.(.{11}).*/, "$1"), "&amp;hl=en_US&amp;fs=1&autoplay=1"].join(""); 
     3804                        var objectParams = { 
     3805                                movie: path, 
     3806                                allowFullScreen: "true", 
     3807                                allowscriptaccess: "always" 
     3808                        }; 
     3809                        for (var objectParam in objectParams) { 
     3810                                var param = document.createElement("param"); 
     3811                                param.name = objectParam; 
     3812                                param.value = objectParams[objectParam]; 
     3813                                object.appendChild(param); 
     3814                        } 
     3815                         
     3816                        var embed = document.createElement("embed"); 
     3817                        var embedParams = { 
     3818                                src: path, 
     3819                                type: "application/x-shockwave-flash", 
     3820                                allowscriptaccess: "always", 
     3821                                allowfullscreen: "true", 
     3822                                width: document.getElementById(model.id).style.width, 
     3823                                height: document.getElementById(model.id).style.height 
     3824                        }; 
     3825                        for (var embedParam in embedParams) { 
     3826                                embed[embedParam] = embedParams[embedParam]; 
     3827                        } 
     3828                        object.appendChild(embed); 
     3829                         
     3830                        object.style.position = _container.style.position; 
     3831                        object.style.top = _container.style.top; 
     3832                        object.style.left = _container.style.left; 
     3833                        object.style.width = document.getElementById(model.id).style.width; 
     3834                        object.style.height = document.getElementById(model.id).style.height; 
     3835                        object.style.zIndex = 2147483000; 
     3836                        _container.parentNode.replaceChild(object, _container); 
     3837                        object.id = _container.id; 
     3838                        _container = object; 
     3839                        _hasChrome = true; 
     3840                } 
     3841                 
     3842                this.embed = _embed; 
     3843                 
     3844                return this; 
     3845        }; 
     3846})(jwplayer); 
     3847/** 
     3848 * JW Player model component 
     3849 * 
     3850 * @author zach 
     3851 * @version 1.0 
     3852 */ 
     3853(function(jwplayer) { 
     3854        var _configurableStateVariables = ["width", "height", "start", "duration", "volume", "mute", "fullscreen", "item", "plugins"]; 
     3855         
     3856        jwplayer.html5.model = function(api, container, options) { 
     3857                var _api = api; 
     3858                var _container = container; 
     3859                var _model = { 
     3860                        id: _container.id, 
     3861                        playlist: [], 
     3862                        state: jwplayer.api.events.state.IDLE, 
     3863                        position: 0, 
     3864                        buffer: 0, 
     3865                        config: { 
     3866                                width: 480, 
     3867                                height: 320, 
     3868                                item: 0, 
     3869                                skin: undefined, 
     3870                                file: undefined, 
     3871                                image: undefined, 
     3872                                start: 0, 
     3873                                duration: 0, 
     3874                                bufferlength: 5, 
     3875                                volume: 90, 
     3876                                mute: false, 
     3877                                fullscreen: false, 
     3878                                repeat: "none", 
     3879                                autostart: false, 
     3880                                debug: undefined, 
     3881                                screencolor: undefined 
     3882                        } 
     3883                }; 
     3884                var _media; 
     3885                var _eventDispatcher = new jwplayer.html5.eventdispatcher(); 
     3886                var _components = ["display", "logo", "controlbar"]; 
     3887                 
     3888                jwplayer.utils.extend(_model, _eventDispatcher); 
     3889                 
     3890                for (var option in options) { 
     3891                        if (typeof options[option] == "string") { 
     3892                                var type = /color$/.test(option) ? "color" : null; 
     3893                                options[option] = jwplayer.html5.utils.typechecker(options[option], type); 
     3894                        } 
     3895                        var config = _model.config; 
     3896                        var path = option.split("."); 
     3897                        for (var edge in path) { 
     3898                                if (edge == path.length - 1) { 
     3899                                        config[path[edge]] = options[option]; 
     3900                                } else { 
     3901                                        if (config[path[edge]] === undefined) { 
     3902                                                config[path[edge]] = {}; 
     3903                                        } 
     3904                                        config = config[path[edge]]; 
     3905                                } 
     3906                        } 
     3907                } 
     3908                for (var index in _configurableStateVariables) { 
     3909                        var configurableStateVariable = _configurableStateVariables[index]; 
     3910                        _model[configurableStateVariable] = _model.config[configurableStateVariable]; 
     3911                } 
     3912                 
     3913                var pluginorder = _components.concat([]); 
     3914                 
     3915                if (_model.plugins !== undefined) { 
     3916                        if (typeof _model.plugins == "string") { 
     3917                                var userplugins = _model.plugins.split(","); 
     3918                                for (var userplugin in userplugins) { 
     3919                                        pluginorder.push(userplugin.replace(/^\s+|\s+$/g, "")); 
     3920                                } 
     3921                        } else { 
     3922                                for (var plugin in _model.plugins) { 
     3923                                        pluginorder.push(plugin.replace(/^\s+|\s+$/g, "")); 
     3924                                } 
     3925                        } 
     3926                } 
     3927                 
     3928                if (jwplayer.utils.isIOS()) { 
     3929                        _model.config.chromeless = true; 
     3930                } 
     3931                 
     3932                if (_model.config.chromeless) { 
     3933                        pluginorder = []; 
     3934                } 
     3935                 
     3936                _model.plugins = { 
     3937                        order: pluginorder, 
     3938                        config: { 
     3939                                controlbar: { 
     3940                                        position: jwplayer.html5.view.positions.BOTTOM 
     3941                                } 
     3942                        }, 
     3943                        object: {} 
     3944                }; 
     3945                 
     3946                if (typeof _model.config.components != "undefined") { 
     3947                        for (var component in _model.config.components) { 
     3948                                _model.plugins.config[component] = _model.config.components[component]; 
     3949                        } 
     3950                } 
     3951                 
     3952                for (var pluginIndex in _model.plugins.order) { 
     3953                        var pluginName = _model.plugins.order[pluginIndex]; 
     3954                        var pluginConfig = _model.config[pluginName] === undefined ? {} : _model.config[pluginName]; 
     3955                        _model.plugins.config[pluginName] = _model.plugins.config[pluginName] === undefined ? pluginConfig : jwplayer.utils.extend(_model.plugins.config[pluginName], pluginConfig); 
     3956                        if (_model.plugins.config[pluginName].position === undefined) { 
     3957                                _model.plugins.config[pluginName].position = jwplayer.html5.view.positions.OVER; 
     3958                        } 
     3959                } 
     3960                 
     3961                _model.loadPlaylist = function(arg, ready) { 
     3962                        var input; 
     3963                        if (typeof arg == "string") { 
     3964                                try { 
     3965                                        input = eval(arg); 
     3966                                } catch (err) { 
     3967                                        input = arg; 
     3968                                } 
     3969                        } else { 
     3970                                input = arg; 
     3971                        } 
     3972                        var config; 
     3973                        switch (jwplayer.utils.typeOf(input)) { 
     3974                                case "object": 
     3975                                        config = input; 
     3976                                        break; 
     3977                                case "array": 
     3978                                        config = { 
     3979                                                playlist: input 
     3980                                        }; 
     3981                                        break; 
     3982                                default: 
     3983                                        config = { 
     3984                                                file: input 
     3985                                        }; 
     3986                                        break; 
     3987                        } 
     3988                        _model.playlist = new jwplayer.html5.playlist(config); 
     3989                        if (_model.config.shuffle) { 
     3990                                _model.item = _getShuffleItem(); 
     3991                        } else { 
     3992                                if (_model.config.item >= _model.playlist.length) { 
     3993                                        _model.config.item = _model.playlist.length - 1; 
     3994                                } 
     3995                                _model.item = _model.config.item; 
     3996                        } 
     3997                        if (!ready) { 
     3998                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED); 
     3999                                _eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM, { 
     4000                                        "item": _model.item 
     4001                                }); 
     4002                        } 
     4003                        _model.setActiveMediaProvider(_model.playlist[_model.item]); 
     4004                }; 
     4005                 
     4006                function _getShuffleItem() { 
     4007                        var result = null; 
     4008                        if (_model.playlist.length > 1) { 
     4009                                while (result === null) { 
     4010                                        result = Math.floor(Math.random() * _model.playlist.length); 
     4011                                        if (result == _model.item) { 
     4012                                                result = null; 
     4013                                        } 
     4014                                } 
     4015                        } else { 
     4016                                result = 0; 
     4017                        } 
     4018                        return result; 
     4019                } 
     4020                 
     4021                function forward(evt) { 
     4022                        if (evt.type == jwplayer.api.events.JWPLAYER_MEDIA_LOADED) { 
     4023                                _container = _media.getDisplayElement(); 
     4024                        } 
     4025                        _eventDispatcher.sendEvent(evt.type, evt); 
     4026                } 
     4027                 
     4028                _model.setActiveMediaProvider = function(playlistItem) { 
     4029                        if (_media !== undefined) { 
     4030                                _media.resetEventListeners(); 
     4031                        } 
     4032                        _media = new jwplayer.html5.mediavideo(_model, _container); 
     4033                        _media.addGlobalListener(forward); 
     4034                        if (_model.config.chromeless) { 
     4035                                _media.load(playlistItem); 
     4036                        } 
     4037                        return true; 
     4038                }; 
     4039                 
     4040                _model.getMedia = function() { 
     4041                        return _media; 
     4042                }; 
     4043                 
     4044                 
     4045                _model.setupPlugins = function() { 
     4046                        for (var plugin in _model.plugins.order) { 
     4047                                try { 
     4048                                        if (jwplayer.html5[_model.plugins.order[plugin]] !== undefined) { 
     4049                                                _model.plugins.object[_model.plugins.order[plugin]] = new jwplayer.html5[_model.plugins.order[plugin]](_api, _model.plugins.config[_model.plugins.order[plugin]]); 
     4050                                        } else if (window[_model.plugins.order[plugin]] !== undefined) { 
     4051                                                _model.plugins.object[_model.plugins.order[plugin]] = new window[_model.plugins.order[plugin]](_api, _model.plugins.config[_model.plugins.order[plugin]]); 
     4052                                        } else { 
     4053                                                _model.plugins.order.splice(plugin, plugin+1); 
     4054                                        } 
     4055                                } catch (err) { 
     4056                                        jwplayer.html5.utils.log("Could not setup " + _model.plugins.order[plugin]); 
     4057                                } 
     4058                        } 
     4059                         
     4060                }; 
     4061                 
     4062                return _model; 
     4063        }; 
     4064         
     4065         
     4066})(jwplayer); 
     4067/** 
     4068 * JW Player playlist model 
     4069 * 
     4070 * @author zach 
     4071 * @version 1.0 
     4072 */ 
     4073(function(jwplayer) { 
     4074        jwplayer.html5.playlist = function(config) { 
     4075                var _playlist = []; 
     4076                if (config.playlist && config.playlist.length > 0) { 
     4077                        for (var playlistItem in config.playlist) { 
     4078                                _playlist.push(new jwplayer.html5.playlistitem(config.playlist[playlistItem])); 
     4079                        } 
     4080                } else { 
     4081                        _playlist.push(new jwplayer.html5.playlistitem(config)); 
     4082                } 
     4083                return _playlist; 
     4084        }; 
     4085         
     4086})(jwplayer); 
     4087/** 
     4088 * JW Player playlist item model 
     4089 * 
     4090 * @author zach 
     4091 * @version 1.0 
     4092 */ 
     4093(function(jwplayer) { 
     4094        jwplayer.html5.playlistitem = function(config) { 
     4095                var _playlistitem = { 
     4096                        author: "", 
     4097                        date: "", 
     4098                        description: "", 
     4099                        image: "", 
     4100                        link: "", 
     4101                        mediaid: "", 
     4102                        tags: "", 
     4103                        title: "", 
     4104                        provider: "", 
     4105                         
     4106                        file: "", 
     4107                        streamer: "", 
     4108                        duration: -1, 
     4109                        start: 0, 
     4110                         
     4111                        currentLevel: -1, 
     4112                        levels: [] 
     4113                }; 
     4114                 
     4115                for (var property in _playlistitem) { 
     4116                        if (config[property] !== undefined) { 
     4117                                _playlistitem[property] = config[property]; 
     4118                        } 
     4119                } 
     4120                if (_playlistitem.levels.length === 0) { 
     4121                        _playlistitem.levels[0] = new jwplayer.html5.playlistitemlevel(_playlistitem); 
     4122                } 
     4123                return _playlistitem; 
     4124        }; 
     4125})(jwplayer); 
     4126/** 
     4127 * JW Player playlist item level model 
     4128 * 
     4129 * @author zach 
     4130 * @version 1.0 
     4131 */ 
     4132(function(jwplayer) { 
     4133        jwplayer.html5.playlistitemlevel = function(config) { 
     4134                var _playlistitemlevel = { 
     4135                        file: "", 
     4136                        streamer: "", 
     4137                        bitrate: 0, 
     4138                        width: 0 
     4139                }; 
     4140                 
     4141                for (var property in _playlistitemlevel) { 
     4142                        if (config[property] !== undefined) { 
     4143                                _playlistitemlevel[property] = config[property]; 
     4144                        } 
     4145                } 
     4146                return _playlistitemlevel; 
     4147        }; 
     4148         
     4149})(jwplayer); 
     4150/** 
     4151 * JW Player component that loads PNG skins. 
     4152 * 
     4153 * @author zach 
     4154 * @version 1.0 
     4155 */ 
     4156(function(jwplayer) { 
     4157        jwplayer.html5.skin = function() { 
     4158                var _components = {}; 
     4159                var _loaded = false; 
     4160                 
     4161                this.load = function(path, callback) { 
     4162                        new jwplayer.html5.skinloader(path, function(skin) { 
     4163                                _loaded = true; 
     4164                                _components = skin; 
     4165                                callback(); 
     4166                        }, function() { 
     4167                                new jwplayer.html5.skinloader("", function(skin) { 
     4168                                        _loaded = true; 
     4169                                        _components = skin; 
     4170                                        callback(); 
     4171                                }); 
     4172                        }); 
     4173                         
     4174                }; 
     4175                 
     4176                this.getSkinElement = function(component, element) { 
     4177                        if (_loaded) { 
     4178                                try { 
     4179                                        return _components[component].elements[element]; 
     4180                                } catch (err) { 
     4181                                        jwplayer.html5.utils.log("No such skin component / element: ", [component, element]); 
     4182                                } 
     4183                        } 
     4184                        return null; 
     4185                }; 
     4186                 
     4187                this.getComponentSettings = function(component) { 
     4188                        if (_loaded) { 
     4189                                return _components[component].settings; 
     4190                        } 
     4191                        return null; 
     4192                }; 
     4193                 
     4194                this.getComponentLayout = function(component) { 
     4195                        if (_loaded) { 
     4196                                return _components[component].layout; 
     4197                        } 
     4198                        return null; 
     4199                }; 
     4200                 
     4201        }; 
     4202})(jwplayer); 
     4203/** 
     4204 * JW Player component that loads PNG skins. 
     4205 * 
     4206 * @author zach 
     4207 * @version 1.0 
     4208 */ 
     4209(function(jwplayer) { 
     4210        /** Constructor **/ 
     4211        jwplayer.html5.skinloader = function(skinPath, completeHandler, errorHandler) { 
     4212                var _skin = {}; 
     4213                var _completeHandler = completeHandler; 
     4214                var _errorHandler = errorHandler; 
     4215                var _loading = true; 
     4216                var _completeInterval; 
     4217                var _skinPath = skinPath; 
     4218                var _error = false; 
     4219                 
     4220                /** Load the skin **/ 
     4221                function _load() { 
     4222                        if (_skinPath === undefined || _skinPath === "") { 
     4223                                _loadSkin(jwplayer.html5.defaultSkin().xml); 
     4224                        } else { 
     4225                                jwplayer.utils.ajax(jwplayer.html5.utils.getAbsolutePath(_skinPath), function(xmlrequest) { 
     4226                                        _loadSkin(xmlrequest.responseXML); 
     4227                                }, function(path) { 
     4228                                        _loadSkin(jwplayer.html5.defaultSkin().xml); 
     4229                                }); 
     4230                        } 
     4231                         
     4232                } 
     4233                 
     4234                 
     4235                function _loadSkin(xml) { 
     4236                        var components = xml.getElementsByTagName('component'); 
     4237                        if (components.length === 0) { 
     4238                                return; 
     4239                        } 
     4240                        for (var componentIndex = 0; componentIndex < components.length; componentIndex++) { 
     4241                                var componentName = components[componentIndex].getAttribute("name"); 
     4242                                var component = { 
     4243                                        settings: {}, 
     4244                                        elements: {}, 
     4245                                        layout: {} 
     4246                                }; 
     4247                                _skin[componentName] = component; 
     4248                                var elements = components[componentIndex].getElementsByTagName('elements')[0].getElementsByTagName('element'); 
     4249                                for (var elementIndex = 0; elementIndex < elements.length; elementIndex++) { 
     4250                                        _loadImage(elements[elementIndex], componentName); 
     4251                                } 
     4252                                var settingsElement = components[componentIndex].getElementsByTagName('settings')[0]; 
     4253                                if (settingsElement !== undefined && settingsElement.childNodes.length > 0) { 
     4254                                        var settings = settingsElement.getElementsByTagName('setting'); 
     4255                                        for (var settingIndex = 0; settingIndex < settings.length; settingIndex++) { 
     4256                                                var name = settings[settingIndex].getAttribute("name"); 
     4257                                                var value = settings[settingIndex].getAttribute("value"); 
     4258                                                var type = /color$/.test(name) ? "color" : null; 
     4259                                                _skin[componentName].settings[name] = jwplayer.html5.utils.typechecker(value, type); 
     4260                                        } 
     4261                                } 
     4262                                var layout = components[componentIndex].getElementsByTagName('layout')[0]; 
     4263                                if (layout !== undefined && layout.childNodes.length > 0) { 
     4264                                        var groups = layout.getElementsByTagName('group'); 
     4265                                        for (var groupIndex = 0; groupIndex < groups.length; groupIndex++) { 
     4266                                                var group = groups[groupIndex]; 
     4267                                                _skin[componentName].layout[group.getAttribute("position")] = { 
     4268                                                        elements: [] 
     4269                                                }; 
     4270                                                for (var attributeIndex = 0; attributeIndex < group.attributes.length; attributeIndex++) { 
     4271                                                        var attribute = group.attributes[attributeIndex]; 
     4272                                                        _skin[componentName].layout[group.getAttribute("position")][attribute.name] = attribute.value; 
     4273                                                } 
     4274                                                var groupElements = group.getElementsByTagName('*'); 
     4275                                                for (var groupElementIndex = 0; groupElementIndex < groupElements.length; groupElementIndex++) { 
     4276                                                        var element = groupElements[groupElementIndex]; 
     4277                                                        _skin[componentName].layout[group.getAttribute("position")].elements.push({ 
     4278                                                                type: element.tagName 
     4279                                                        }); 
     4280                                                        for (var elementAttributeIndex = 0; elementAttributeIndex < element.attributes.length; elementAttributeIndex++) { 
     4281                                                                var elementAttribute = element.attributes[elementAttributeIndex]; 
     4282                                                                _skin[componentName].layout[group.getAttribute("position")].elements[groupElementIndex][elementAttribute.name] = elementAttribute.value; 
     4283                                                        } 
     4284                                                        if (_skin[componentName].layout[group.getAttribute("position")].elements[groupElementIndex].name === undefined) { 
     4285                                                                _skin[componentName].layout[group.getAttribute("position")].elements[groupElementIndex].name = element.tagName; 
     4286                                                        } 
     4287                                                } 
     4288                                        } 
     4289                                } 
     4290                                 
     4291                                _loading = false; 
     4292                                 
     4293                                _resetCompleteIntervalTest(); 
     4294                        } 
     4295                } 
     4296                 
     4297                 
     4298                function _resetCompleteIntervalTest() { 
     4299                        clearInterval(_completeInterval); 
     4300                        if (!_error) { 
     4301                                _completeInterval = setInterval(function() { 
     4302                                        _checkComplete(); 
     4303                                }, 100); 
     4304                        } 
     4305                } 
     4306                 
     4307                 
     4308                /** Load the data for a single element. **/ 
     4309                function _loadImage(element, component) { 
     4310                        var img = new Image(); 
     4311                        var elementName = element.getAttribute("name"); 
     4312                        var elementSource = element.getAttribute("src"); 
     4313                        var imgUrl; 
     4314                        if (elementSource.indexOf('data:image/png;base64,') === 0) { 
     4315                                imgUrl = elementSource; 
     4316                        } else { 
     4317                                var skinUrl = jwplayer.html5.utils.getAbsolutePath(_skinPath); 
     4318                                var skinRoot = skinUrl.substr(0, skinUrl.lastIndexOf('/')); 
     4319                                imgUrl = [skinRoot, component, elementSource].join('/'); 
     4320                        } 
     4321                         
     4322                        _skin[component].elements[elementName] = { 
     4323                                height: 0, 
     4324                                width: 0, 
     4325                                src: '', 
     4326                                ready: false 
     4327                        }; 
     4328                         
     4329                        img.onload = function(evt) { 
     4330                                _completeImageLoad(img, elementName, component); 
     4331                        }; 
     4332                        img.onerror = function(evt) { 
     4333                                _error = true; 
     4334                                _resetCompleteIntervalTest(); 
     4335                                _errorHandler(); 
     4336                        }; 
     4337                         
     4338                        img.src = imgUrl; 
     4339                } 
     4340                 
     4341                 
     4342                function _checkComplete() { 
     4343                        for (var component in _skin) { 
     4344                                if (component != 'properties') { 
     4345                                        for (var element in _skin[component].elements) { 
     4346                                                if (!_skin[component].elements[element].ready) { 
     4347                                                        return; 
     4348                                                } 
     4349                                        } 
     4350                                } 
     4351                        } 
     4352                        if (_loading === false) { 
     4353                                clearInterval(_completeInterval); 
     4354                                _completeHandler(_skin); 
     4355                        } 
     4356                } 
     4357                 
     4358                 
     4359                function _completeImageLoad(img, element, component) { 
     4360                        _skin[component].elements[element].height = img.height; 
     4361                        _skin[component].elements[element].width = img.width; 
     4362                        _skin[component].elements[element].src = img.src; 
     4363                        _skin[component].elements[element].ready = true; 
     4364                        _resetCompleteIntervalTest(); 
     4365                } 
     4366                 
     4367                _load(); 
     4368        }; 
     4369})(jwplayer); 
     4370/** 
     4371 * Utility methods for the JW Player. 
     4372 * 
     4373 * @author zach 
     4374 * @version 1.0 
     4375 */ 
     4376(function(jwplayer) { 
     4377        var _animations = {}; 
     4378         
     4379        jwplayer.html5.utils.animations = function() { 
     4380        }; 
     4381         
     4382        jwplayer.html5.utils.animations.transform = function(domelement, value) { 
     4383                domelement.style.webkitTransform = value; 
     4384                domelement.style.MozTransform = value; 
     4385                domelement.style.OTransform = value; 
     4386        }; 
     4387         
     4388        jwplayer.html5.utils.animations.transformOrigin = function(domelement, value) { 
     4389                domelement.style.webkitTransformOrigin = value; 
     4390                domelement.style.MozTransformOrigin = value; 
     4391                domelement.style.OTransformOrigin = value; 
     4392        }; 
     4393         
     4394        jwplayer.html5.utils.animations.rotate = function(domelement, deg) { 
     4395                jwplayer.html5.utils.animations.transform(domelement, ["rotate(", deg, "deg)"].join("")); 
     4396        }; 
     4397         
     4398        jwplayer.html5.utils.cancelAnimation = function(domelement) { 
     4399                delete _animations[domelement.id]; 
     4400        }; 
     4401         
     4402        jwplayer.html5.utils.fadeTo = function(domelement, endAlpha, time, startAlpha, delay, startTime) { 
     4403                // Interrupting 
     4404                if (_animations[domelement.id] != startTime && startTime !== undefined) { 
     4405                        return; 
     4406                } 
     4407                var currentTime = new Date().getTime(); 
     4408                if (startTime > currentTime) { 
     4409                        setTimeout(function() { 
     4410                                jwplayer.html5.utils.fadeTo(domelement, endAlpha, time, startAlpha, 0, startTime); 
     4411                        }, startTime - currentTime); 
     4412                } 
     4413                domelement.style.display = "block"; 
     4414                if (startAlpha === undefined) { 
     4415                        startAlpha = domelement.style.opacity === "" ? 1 : domelement.style.opacity; 
     4416                } 
     4417                if (domelement.style.opacity == endAlpha && domelement.style.opacity !== "" && startTime !== undefined) { 
     4418                        if (endAlpha === 0) { 
     4419                                domelement.style.display = "none"; 
     4420                        } 
     4421                        return; 
     4422                } 
     4423                if (startTime === undefined) { 
     4424                        startTime = currentTime; 
     4425                        _animations[domelement.id] = startTime; 
     4426                } 
     4427                if (delay === undefined) { 
     4428                        delay = 0; 
     4429                } 
     4430                var percentTime = (currentTime - startTime) / (time * 1000); 
     4431                percentTime = percentTime > 1 ? 1 : percentTime; 
     4432                var delta = endAlpha - startAlpha; 
     4433                var alpha = startAlpha + (percentTime * delta); 
     4434                if (alpha > 1) { 
     4435                        alpha = 1; 
     4436                } else if (alpha < 0) { 
     4437                        alpha = 0; 
     4438                } 
     4439                domelement.style.opacity = alpha; 
     4440                if (delay > 0) { 
     4441                        _animations[domelement.id] = startTime + delay * 1000; 
     4442                        jwplayer.html5.utils.fadeTo(domelement, endAlpha, time, startAlpha, 0, _animations[domelement.id]); 
     4443                        return; 
     4444                } 
     4445                setTimeout(function() { 
     4446                        jwplayer.html5.utils.fadeTo(domelement, endAlpha, time, startAlpha, 0, startTime); 
     4447                }, 10); 
     4448        }; 
     4449})(jwplayer); 
     4450/** 
     4451 * Utility methods for the JW Player. 
     4452 * 
     4453 * @author zach 
     4454 * @version 1.0 
     4455 */ 
     4456(function(jwplayer) { 
     4457        var _colorPattern = new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/); 
     4458        jwplayer.html5.utils.typechecker = function(value, type) { 
     4459                type = type === null ? _guessType(value) : type; 
     4460                return _typeData(value, type); 
     4461        }; 
     4462         
     4463        function _guessType(value) { 
     4464                var bools = ["true", "false", "t", "f"]; 
     4465                if (bools.indexOf(value.toLowerCase().replace(" ", "")) >= 0) { 
     4466                        return "boolean"; 
     4467                } else if (_colorPattern.test(value)) { 
     4468                        return "color"; 
     4469                } else if (!isNaN(parseInt(value, 10)) && parseInt(value, 10).toString().length == value.length) { 
     4470                        return "integer"; 
     4471                } else if (!isNaN(parseFloat(value)) && parseFloat(value).toString().length == value.length) { 
     4472                        return "float"; 
     4473                } 
     4474                return "string"; 
     4475        } 
     4476         
     4477        function _typeData(value, type) { 
     4478                if (type === null) { 
     4479                        return value; 
     4480                } 
     4481                 
     4482                switch (type) { 
     4483                        case "color": 
     4484                                if (value.length > 0) { 
     4485                                        return _stringToColor(value); 
     4486                                } 
     4487                                return null; 
     4488                        case "integer": 
     4489                                return parseInt(value, 10); 
     4490                        case "float": 
     4491                                return parseFloat(value); 
     4492                        case "boolean": 
     4493                                if (value.toLowerCase() == "true") { 
     4494                                        return true; 
     4495                                } else if (value == "1") { 
     4496                                        return true; 
     4497                                } 
     4498                                return false; 
     4499                } 
     4500                return value; 
     4501        } 
     4502         
     4503        function _stringToColor(value) { 
     4504                switch (value.toLowerCase()) { 
     4505                        case "blue": 
     4506                                return parseInt("0000FF", 16); 
     4507                        case "green": 
     4508                                return parseInt("00FF00", 16); 
     4509                        case "red": 
     4510                                return parseInt("FF0000", 16); 
     4511                        case "cyan": 
     4512                                return parseInt("00FFFF", 16); 
     4513                        case "magenta": 
     4514                                return parseInt("FF00FF", 16); 
     4515                        case "yellow": 
     4516                                return parseInt("FFFF00", 16); 
     4517                        case "black": 
     4518                                return parseInt("000000", 16); 
     4519                        case "white": 
     4520                                return parseInt("FFFFFF", 16); 
     4521                        default: 
     4522                                value = value.replace(/(#|0x)?([0-9A-F]{3,6})$/gi, "$2"); 
     4523                                if (value.length == 3) { 
     4524                                        value = value.charAt(0) + value.charAt(0) + value.charAt(1) + value.charAt(1) + value.charAt(2) + value.charAt(2); 
     4525                                } 
     4526                                return parseInt(value, 16); 
     4527                } 
     4528                 
     4529                return parseInt("000000", 16); 
     4530        } 
     4531         
     4532})(jwplayer); 
     4533/**  
     4534 * A factory for API calls that either set listeners or return data 
     4535 * 
     4536 * @author zach 
     4537 * @version 1.0 
     4538 */ 
     4539(function(jwplayer) { 
     4540 
     4541        jwplayer.html5.api = function(container, options) { 
     4542                var _api = {}; 
     4543                 
     4544                if (!jwplayer.utils.hasHTML5()) { 
     4545                        return _api; 
     4546                } 
     4547                 
     4548                var _container = document.createElement('div'); 
     4549                container.parentNode.replaceChild(_container, container); 
     4550                _container.id = container.id; 
     4551                 
     4552                _api.version = jwplayer.html5.version; 
     4553                _api.id = _container.id; 
     4554                 
     4555                var _model = new jwplayer.html5.model(_api, _container, options); 
     4556                var _view = new jwplayer.html5.view(_api, _container, _model); 
     4557                var _controller = new jwplayer.html5.controller(_api, _container, _model, _view); 
     4558                 
     4559                _api.skin = new jwplayer.html5.skin(); 
     4560                 
     4561                _api.jwPlay = _controller.play; 
     4562                _api.jwPause = _controller.pause; 
     4563                _api.jwStop = _controller.stop; 
     4564                _api.jwSeek = _controller.seek; 
     4565                _api.jwPlaylistItem = _controller.item; 
     4566                _api.jwPlaylistNext = _controller.next; 
     4567                _api.jwPlaylistPrev = _controller.prev; 
     4568                _api.jwResize = _controller.resize; 
     4569                _api.jwLoad = _controller.load; 
     4570                 
     4571                function _statevarFactory(statevar) { 
     4572                        return function() { 
     4573                                return _model[statevar]; 
     4574                        }; 
     4575                } 
     4576                 
     4577                _api.jwGetItem = _statevarFactory('item'); 
     4578                _api.jwGetPosition = _statevarFactory('position'); 
     4579                _api.jwGetDuration = _statevarFactory('duration'); 
     4580                _api.jwGetBuffer = _statevarFactory('buffer'); 
     4581                _api.jwGetWidth = _statevarFactory('width'); 
     4582                _api.jwGetHeight = _statevarFactory('height'); 
     4583                _api.jwGetFullscreen = _statevarFactory('fullscreen'); 
     4584                _api.jwSetFullscreen = _controller.setFullscreen; 
     4585                _api.jwGetVolume = _statevarFactory('volume'); 
     4586                _api.jwSetVolume = _controller.setVolume; 
     4587                _api.jwGetMute = _statevarFactory('mute'); 
     4588                _api.jwSetMute = _controller.setMute; 
     4589                 
     4590                _api.jwGetState = _statevarFactory('state'); 
     4591                _api.jwGetVersion = function() { 
     4592                        return _api.version; 
     4593                }; 
     4594                _api.jwGetPlaylist = function() { 
     4595                        return _model.playlist; 
     4596                }; 
     4597                 
     4598                _api.jwAddEventListener = _controller.addEventListener; 
     4599                _api.jwRemoveEventListener = _controller.removeEventListener; 
     4600                _api.jwSendEvent = _controller.sendEvent; 
     4601                 
     4602                //UNIMPLEMENTED 
     4603                _api.jwGetLevel = function() { 
     4604                }; 
     4605                _api.jwGetBandwidth = function() { 
     4606                }; 
     4607                _api.jwGetLockState = function() { 
     4608                }; 
     4609                _api.jwLock = function() { 
     4610                }; 
     4611                _api.jwUnlock = function() { 
     4612                }; 
     4613                 
     4614                function _finishLoad(model, view, controller) { 
     4615                        return function() { 
     4616                                model.loadPlaylist(model.config, true); 
     4617                                model.setupPlugins(); 
     4618                                view.setup(model.getMedia().getDisplayElement()); 
     4619                                var evt = { 
     4620                                        id: _api.id, 
     4621                                        version: _api.version 
     4622                                }; 
     4623                                controller.sendEvent(jwplayer.api.events.JWPLAYER_READY, evt); 
     4624                                if (playerReady !== undefined) { 
     4625                                        playerReady(evt); 
     4626                                } 
     4627                                 
     4628                                if (window[model.config.playerReady] !== undefined) { 
     4629                                        window[model.config.playerReady](evt); 
     4630                                } 
     4631                                 
     4632                                model.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED); 
     4633                                model.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM, { 
     4634                                        "item": model.config.item 
     4635                                }); 
     4636                                 
     4637                                if (model.config.autostart === true && !model.config.chromeless) { 
     4638                                        controller.play(); 
     4639                                } 
     4640                        }; 
     4641                } 
     4642                 
     4643                if (_model.config.chromeless) { 
     4644                        setTimeout(_finishLoad(_model, _view, _controller), 25); 
     4645                } else { 
     4646                        _api.skin.load(_model.config.skin, _finishLoad(_model, _view, _controller)); 
     4647                } 
     4648                return _api; 
     4649        }; 
     4650         
     4651})(jwplayer); 
  • trunk/js/build/build.xml

    r1392 r1410  
    1414                        <fileset dir="${basedir}/src/api" includes="**/*.js" /> 
    1515                        <fileset dir="${basedir}/src/embed" includes="**/*.js" /> 
     16                        <fileset dir="${basedir}/src/html5" includes="jwplayer.html5.js" /> 
     17                        <fileset dir="${basedir}/src/html5" includes="jwplayer.html5.utils.js" /> 
     18                        <fileset dir="${basedir}/src/html5" includes="jwplayer.html5.states.js" /> 
     19                        <fileset dir="${basedir}/src/html5" includes="jwplayer.html5.events.js" /> 
     20                        <fileset dir="${basedir}/src/html5" includes="jwplayer.html5.view.js" /> 
     21                        <fileset dir="${basedir}/src/html5" includes="jwplayer.html5.*.js" excludes="jwplayer.html5.js,jwplayer.html5.states.js,jwplayer.html5.events.js,jwplayer.html5.utils.js,jwplayer.html5.api.js,jwplayer.html5.view.js" /> 
     22                        <fileset dir="${basedir}/src/html5" includes="jwplayer.html5.api.js" /> 
    1623                </concat> 
    1724        </target> 
    1825 
    1926        <target name="build-debug"> 
    20                 <antcall target="concat" /> 
     27                <antcall target="concat"> 
     28                        <param name="outputpath" value="${basedir}/bin-debug/jwplayer.js"/> 
     29                </antcall> 
     30                <copy file="${basedir}/bin-debug/jwplayer.js" tofile="${basedir}/jwplayer.min.js" /> 
    2131        </target> 
    2232 
    2333        <target name="build-release" depends="concat"> 
     34                <replace file="${basedir}/jwplayer.min.js" token=", logoConfig);" value=");"/> 
    2435                <java jar="${basedir}/build/yuicompressor-2.4.2.jar" fork="true"> 
    2536                        <arg line="'${basedir}/bin-debug/jwplayer.js'"/> 
     
    2738                </java> 
    2839        </target> 
    29  
    30         <target name="build-release-with-html5" depends="build-release"> 
    31                 <concat destfile="${basedir}/jwplayer.min.js" append="true"> 
    32                         <filelist dir="${basedir}/../html5" files="jwplayer.html5.min.js" /> 
    33                 </concat> 
    34         </target> 
    3540</project> 
  • trunk/js/build/skin-builder.py

    r988 r1410  
    33import re 
    44 
    5 basePath = '../assets' 
     5basePath = '../../../skins' 
    66skinName = 'five' 
    77skinPath = basePath + '/' + skinName + '/' + skinName + '.xml' 
  • trunk/js/jwplayer.min.js

    r1404 r1410  
    1 jwplayer=function(a){return jwplayer.constructor(a)};jwplayer.constructor=function(a){};$jw=jwplayer;jwplayer.utils=function(){};jwplayer.utils.typeOf=function(b){var a=typeof b;if(a==="object"){if(b){if(b instanceof Array){a="array"}}else{a="null"}}return a};jwplayer.utils.extend=function(){var a=jwplayer.utils.extend["arguments"];if(a.length>1){for(var b=1;b<a.length;b++){for(element in a[b]){a[0][element]=a[b][element]}}return a[0]}return null};jwplayer.utils.extension=function(a){return a.substr(a.lastIndexOf(".")+1,a.length).toLowerCase()};jwplayer.utils.html=function(a,b){a.innerHTML=b};jwplayer.utils.append=function(a,b){a.appendChild(b)};jwplayer.utils.wrap=function(a,b){a.parentNode.replaceChild(b,a);b.appendChild(a)};jwplayer.utils.ajax=function(d,c,a){var b;if(window.XMLHttpRequest){b=new XMLHttpRequest()}else{b=new ActiveXObject("Microsoft.XMLHTTP")}b.onreadystatechange=function(){if(b.readyState===4){if(b.status===200){if(c){c(b)}}else{if(a){a(d)}}}};b.open("GET",d,true);b.send(null);return b};jwplayer.utils.load=function(b,c,a){b.onreadystatechange=function(){if(b.readyState===4){if(b.status===200){if(c){c()}}else{if(a){a()}}}}};jwplayer.utils.find=function(b,a){return b.getElementsByTagName(a)};jwplayer.utils.append=function(a,b){a.appendChild(b)};jwplayer.utils.isIE=function(){return(!+"\v1")};jwplayer.utils.isIOS=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/iP(hone|ad)/i)!==null)};jwplayer.utils.hasHTML5=function(b){var a=document.createElement("video");if(!!a.canPlayType){if(b){var d={};if(b.playlist&&b.playlist.length){d.file=b.playlist[0].file;d.levels=b.playlist[0].levels}else{d.file=b.file;d.levels=b.levels}if(d.file){return jwplayer.utils.vidCanPlay(a,d.file)}else{if(d.levels&&d.levels.length){for(var c=0;c<d.levels.length;c++){if(d.levels[c].file&&jwplayer.utils.vidCanPlay(a,d.levels[c].file)){return true}}}}}else{return true}}return false};jwplayer.utils.vidCanPlay=function(b,a){var c=jwplayer.utils.strings.extension(a);if(jwplayer.utils.extensionmap[c]!==undefined){sourceType=jwplayer.utils.extensionmap[c]}else{sourceType="video/"+c+";"}return(b.canPlayType(sourceType)||a.toLowerCase().indexOf("youtube.com")>-1)};jwplayer.utils.hasFlash=function(){return(typeof navigator.plugins!="undefined"&&typeof navigator.plugins["Shockwave Flash"]!="undefined")||(typeof window.ActiveXObject!="undefined")};(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(i){return d(i)};function c(j,i){if(i===undefined){i=g[j]}else{e.utils.extend(i,g[j])}return i}function d(m,i){if(f[m.tagName.toLowerCase()]&&(i===undefined)){return f[m.tagName.toLowerCase()](m)}else{i=c("element",i);var n={};for(var j in i){if(j!="length"){var l=m.getAttribute(j);if(!(l===""||l===undefined||l===null)){n[i[j]]=m.getAttribute(j)}}}var k=m.style["#background-color"];if(k&&!(k=="transparent"||k=="rgba(0, 0, 0, 0)")){n.screencolor=k}return n}}function h(o,k){k=c("media",k);var m=[];if(e.utils.isIE()){var l=o.nextSibling;if(l!==undefined){while(l.tagName.toLowerCase()=="source"){m.push(a(l));l=l.nextSibling}}}else{var j=e.utils.selectors("source",o);for(var n in j){if(!isNaN(n)){m.push(a(j[n]))}}}var p=d(o,k);if(p.file!==undefined){m[0]={file:p.file}}p.levels=m;return p}function a(k,j){j=c("source",j);var i=d(k,j);i.width=i.width?i.width:0;i.bitrate=i.bitrate?i.bitrate:0;return i}function b(k,j){j=c("video",j);var i=h(k,j);return i}e.utils.mediaparser.replaceMediaElement=function(i,k){if(e.utils.isIE()){var l=false;var n=[];var m=i.nextSibling;while(m&&!l){n.push(m);if(m.nodeType==1&&m.tagName.toLowerCase()==("/")+i.tagName.toLowerCase()){l=true}m=m.nextSibling}if(l){while(n.length>0){var j=n.pop();j.parentNode.removeChild(j)}}i.outerHTML=k}};f.media=h;f.audio=h;f.source=a;f.video=b})(jwplayer);jwplayer.utils.selectors=function(a,c){if(c===undefined){c=document}a=jwplayer.utils.strings.trim(a);var b=a.charAt(0);if(b=="#"){return c.getElementById(a.substr(1))}else{if(b=="."){if(c.getElementsByClassName){return c.getElementsByClassName(a.substr(1))}else{return jwplayer.utils.selectors.getElementsByTagAndClass("*",a.substr(1))}}else{if(a.indexOf(".")>0){selectors=a.split(".");return jwplayer.utils.selectors.getElementsByTagAndClass(selectors[0],selectors[1])}else{return c.getElementsByTagName(a)}}}return null};jwplayer.utils.selectors.getElementsByTagAndClass=function(d,g,f){elements=[];if(f===undefined){f=document}var e=f.getElementsByTagName(d);for(var c=0;c<e.length;c++){if(e[c].className!==undefined){var b=e[c].className.split(" ");for(var a=0;a<b.length;a++){if(b[a]==g){elements.push(e[c])}}}}return elements};jwplayer.utils.strings=function(){};jwplayer.utils.strings.trim=function(a){return a.replace(/^\s*/,"").replace(/\s*$/,"")};jwplayer.utils.strings.extension=function(a){return a.substr(a.lastIndexOf(".")+1,a.length).toLowerCase()};(function(a){a.utils.extensionmap={"3gp":"video/3gpp","3gpp":"video/3gpp","3g2":"video/3gpp2","3gpp2":"video/3gpp2",flv:"video/x-flv",f4a:"audio/mp4",f4b:"audio/mp4",f4p:"video/mp4",f4v:"video/mp4",mov:"video/quicktime",m4a:"audio/mp4",m4b:"audio/mp4",m4p:"audio/mp4",m4v:"video/mp4",mkv:"video/x-matroska",mp4:"video/mp4",sdp:"application/sdp",vp6:"video/x-vp6",aac:"audio/aac",mp3:"audio/mp3",ogg:"audio/ogg",ogv:"video/ogg",webm:"video/webm"}})(jwplayer);(function(b){var a=[];b.constructor=function(c){return b.api.selectPlayer(c)};b.api=function(){};b.api.events={API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",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.PlayerAPI=function(d){this.container=d;this.id=d.id;var j={};var o={};var c=[];var g=undefined;var i=false;var h=[];var m=d.outerHTML;var n={};var k=0;this.setPlayer=function(p){g=p};this.stateListener=function(p,q){if(!o[p]){o[p]=[];this.eventListener(b.api.events.JWPLAYER_PLAYER_STATE,f(p))}o[p].push(q);return this};function f(p){return function(r){var q=r.newstate,t=r.oldstate;if(q==p){var s=o[q];if(s){for(var u in s){if(typeof s[u]=="function"){s[u].call(this,{oldstate:t,newstate:q})}}}}}}this.addInternalListener=function(p,q){p.jwAddEventListener(q,'function(dat) { jwplayer("'+this.id+'").dispatchEvent("'+q+'", dat); }')};this.eventListener=function(p,q){if(!j[p]){j[p]=[];if(g&&i){this.addInternalListener(g,p)}}j[p].push(q);return this};this.dispatchEvent=function(r){if(j[r]){var q=e(r,arguments[1]);for(var p in j[r]){if(typeof j[r][p]=="function"){j[r][p].call(this,q)}}}};function e(q,p){var r=b.utils.extend({},p);if(q==b.api.events.JWPLAYER_FULLSCREEN){r.fullscreen=r.message;delete r.message}else{if(q==b.api.events.JWPLAYER_PLAYLIST_ITEM){if(r.item&&r.index===undefined){r.index=r.item;delete r.item}}else{if(typeof r.data=="object"){r=b.utils.extend(r,r.data);delete r.data}}}return r}this.callInternal=function(q,p){if(i){if(typeof g!="undefined"&&typeof g[q]=="function"){if(p!==undefined){return(g[q])(p)}else{return(g[q])()}}return null}else{h.push({method:q,parameters:p})}};this.playerReady=function(r){i=true;if(!g){this.setPlayer(document.getElementById(r.id))}this.container=document.getElementById(this.id);for(var p in j){this.addInternalListener(g,p)}this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,function(s){if(s.index!==undefined){k=s.index}else{if(s.item!==undefined){k=s.item}}n={}});this.eventListener(b.api.events.JWPLAYER_MEDIA_META,function(s){b.utils.extend(n,s.metadata)});this.dispatchEvent(b.api.events.API_READY);while(h.length>0){var q=h.shift();this.callInternal(q.method,q.parameters)}};this.getItemMeta=function(){return n};this.getCurrentItem=function(){return k};this.destroy=function(){j={};h=[];if(this.container.outerHTML!=m){b.api.destroyPlayer(this.id,m)}};function l(r,t,s){var p=[];if(!t){t=0}if(!s){s=r.length-1}for(var q=t;q<=s;q++){p.push(r[q])}return p}};b.api.PlayerAPI.prototype={container:undefined,options:undefined,id:undefined,getBuffer:function(){return this.callInternal("jwGetBuffer")},getDuration:function(){return this.callInternal("jwGetDuration")},getFullscreen:function(){return this.callInternal("jwGetFullscreen")},getHeight:function(){return this.callInternal("jwGetHeight")},getLockState:function(){return this.callInternal("jwGetLockState")},getMeta:function(){return this.getItemMeta()},getMute:function(){return this.callInternal("jwGetMute")},getPlaylist:function(){var d=this.callInternal("jwGetPlaylist");for(var c=0;c<d.length;c++){if(d[c].index===undefined){d[c].index=c}}return d},getPlaylistItem:function(c){if(c==undefined){c=this.getCurrentItem()}return this.getPlaylist()[c]},getPosition:function(){return this.callInternal("jwGetPosition")},getState:function(){return this.callInternal("jwGetState")},getVolume:function(){return this.callInternal("jwGetVolume")},getWidth:function(){return this.callInternal("jwGetWidth")},setFullscreen:function(c){if(c===undefined){this.callInternal("jwSetFullscreen",true)}else{this.callInternal("jwSetFullscreen",c)}return this},setMute:function(c){if(c===undefined){this.callInternal("jwSetMute",true)}else{this.callInternal("jwSetMute",c)}return this},lock:function(){return this},unlock:function(){return this},load:function(c){this.callInternal("jwLoad",c);return this},playlistItem:function(c){this.callInternal("jwPlaylistItem",c);return this},playlistPrev:function(){this.callInternal("jwPlaylistPrev");return this},playlistNext:function(){this.callInternal("jwPlaylistNext");return this},resize:function(d,c){this.container.width=d;this.container.height=c;return this},play:function(c){if(typeof c==="undefined"){var c=this.getState();if(c==b.api.events.state.PLAYING||c==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPlay",c)}return this},pause:function(){var c=this.getState();switch(c){case b.api.events.state.PLAYING:case b.api.events.state.BUFFERING:this.callInternal("jwPause");break;case b.api.events.state.PAUSED:this.callInternal("jwPlay");break}return this},stop:function(){this.callInternal("jwStop");return this},seek:function(c){this.callInternal("jwSeek",c);return this},setVolume:function(c){this.callInternal("jwSetVolume",c);return this},onBufferChange:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER,c)},onBufferFull:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,c)},onError:function(c){return this.eventListener(b.api.events.JWPLAYER_ERROR,c)},onFullscreen:function(c){return this.eventListener(b.api.events.JWPLAYER_FULLSCREEN,c)},onMeta:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_META,c)},onMute:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_MUTE,c)},onPlaylist:function(c){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_LOADED,c)},onPlaylistItem:function(c){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,c)},onReady:function(c){return this.eventListener(b.api.events.API_READY,c)},onResize:function(c){return this.eventListener(b.api.events.JWPLAYER_RESIZE,c)},onComplete:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,c)},onTime:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_TIME,c)},onVolume:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_VOLUME,c)},onBuffer:function(c){return this.stateListener(b.api.events.state.BUFFERING,c)},onPause:function(c){return this.stateListener(b.api.events.state.PAUSED,c)},onPlay:function(c){return this.stateListener(b.api.events.state.PLAYING,c)},onIdle:function(c){return this.stateListener(b.api.events.state.IDLE,c)},setup:function(c){return this},remove:function(){this.destroy()},initializePlugin:function(c,d){return this}};b.api.selectPlayer=function(d){var c;if(d==undefined){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.PlayerAPI(c))}}else{if(typeof d=="number"){return b.getPlayers()[d]}}return null};b.api.playerById=function(d){for(var c in a){if(a[c].id==d){return a[c]}}return null};b.api.addPlayer=function(d){for(var c in a){if(a[c]==d){return d}}a.push(d);return d};b.api.destroyPlayer=function(f,d){var e=-1;for(var h in a){if(a[h].id==f){e=h;continue}}if(e>=0){var c=document.getElementById(a[e].id);if(c){if(d){c.outerHTML=d}else{var g=document.createElement("div");g.setAttribute("id",c.id);c.parentNode.replaceChild(g,c)}}a.splice(e,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)}if(_userPlayerReady){_userPlayerReady.call(this,b)}};(function(a){a.embed=function(){};a.embed.Embedder=function(c){this.constructor(c)};a.embed.defaults={width:400,height:300,players:[{type:"flash",src:"player.swf"},{type:"html5"}],components:{controlbar:{position:"over"}}};a.embed.Embedder.prototype={config:undefined,api:undefined,events:{},players:undefined,constructor:function(d){this.api=d;var c=a.utils.mediaparser.parseMedia(this.api.container);this.config=this.parseConfig(a.utils.extend({},a.embed.defaults,c,this.api.config))},embedPlayer:function(){var c=this.players[0];if(c&&c.type){switch(c.type){case"flash":if(a.utils.hasFlash()){if(this.config.file&&!this.config.provider){switch(a.utils.extension(this.config.file).toLowerCase()){case"webm":case"ogv":case"ogg":this.config.provider="video";break}}if(this.config.levels||this.config.playlist){this.api.onReady(this.loadAfterReady(this.config))}this.config.id=this.api.id;var e=a.embed.embedFlash(document.getElementById(this.api.id),c,this.config);this.api.container=e;this.api.setPlayer(e)}else{this.players.splice(0,1);return this.embedPlayer()}break;case"html5":if(a.utils.hasHTML5(this.config)){var d=a.embed.embedHTML5(document.getElementById(this.api.id),c,this.config);this.api.container=document.getElementById(this.api.id);this.api.setPlayer(d)}else{this.players.splice(0,1);return this.embedPlayer()}break}}else{this.api.container.innerHTML="<p>No suitable players found</p>"}this.setupEvents();return this.api},setupEvents:function(){for(evt in this.events){if(typeof this.api[evt]=="function"){(this.api[evt]).call(this.api,this.events[evt])}}},loadAfterReady:function(c){return function(e){if(c.playlist){this.load(c.playlist)}else{if(c.levels){var d=this.getPlaylistItem(0);if(!d){d={file:c.levels[0].file,provider:(c.provider?c.provider:"video")}}if(!d.image){d.image=c.image}d.levels=c.levels;this.load(d)}}}},parseConfig:function(c){var d=a.utils.extend({},c);if(d.events){this.events=d.events;delete d.events}if(d.players){this.players=d.players;delete d.players}if(d.plugins){if(typeof d.plugins=="object"){d=a.utils.extend(d,a.embed.parsePlugins(d.plugins))}}if(d.playlist&&typeof d.playlist==="string"&&!d["playlist.position"]){d["playlist.position"]=d.playlist;delete d.playlist}if(d.controlbar&&typeof d.controlbar==="string"&&!d["controlbar.position"]){d["controlbar.position"]=d.controlbar;delete d.controlbar}return d}};a.embed.embedFlash=function(e,i,d){var j=a.utils.extend({},d);var g=j.width;delete j.width;var c=j.height;delete j.height;delete j.levels;delete j.playlist;a.embed.parseConfigBlock(j,"components");a.embed.parseConfigBlock(j,"providers");if(a.utils.isIE()){var f='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+g+'" height="'+c+'" id="'+e.id+'" name="'+e.id+'">';f+='<param name="movie" value="'+i.src+'">';f+='<param name="allowfullscreen" value="true">';f+='<param name="allowscriptaccess" value="always">';f+='<param name="wmode" value="opaque">';f+='<param name="flashvars" value="'+a.embed.jsonToFlashvars(j)+'">';f+="</object>";if(e.tagName.toLowerCase()=="video"){a.utils.mediaparser.replaceMediaElement(e,f)}else{e.outerHTML=f}return document.getElementById(e.id)}else{var h=document.createElement("object");h.setAttribute("type","application/x-shockwave-flash");h.setAttribute("data",i.src);h.setAttribute("width",g);h.setAttribute("height",c);h.setAttribute("id",e.id);h.setAttribute("name",e.id);a.embed.appendAttribute(h,"allowfullscreen","true");a.embed.appendAttribute(h,"allowscriptaccess","always");a.embed.appendAttribute(h,"wmode","opaque");a.embed.appendAttribute(h,"flashvars",a.embed.jsonToFlashvars(j));e.parentNode.replaceChild(h,e);return h}};a.embed.embedHTML5=function(d,f,e){if(a.html5){d.innerHTML="";var c=a.utils.extend({screencolor:"0x000000"},e);a.embed.parseConfigBlock(c,"components");if(c.levels&&!c.sources){c.sources=e.levels}if(c.skin&&c.skin.toLowerCase().indexOf(".zip")>0){c.skin=c.skin.replace(/\.zip/i,".xml")}return new (a.html5(d)).setup(c)}else{return null}};a.embed.appendAttribute=function(d,c,e){var f=document.createElement("param");f.setAttribute("name",c);f.setAttribute("value",e);d.appendChild(f)};a.embed.jsonToFlashvars=function(d){var c="";for(key in d){c+=key+"="+escape(d[key])+"&"}return c.substring(0,c.length-1)};a.embed.parsePlugins=function(e){if(!e){return{}}var g={},f=[];for(plugin in e){var d=plugin.indexOf("-")>0?plugin.substring(0,plugin.indexOf("-")):plugin;var c=e[plugin];f.push(plugin);for(param in c){g[d+"."+param]=c[param]}}g.plugins=f.join(",");return g};a.embed.parseConfigBlock=function(f,e){if(f[e]){var h=f[e];for(var d in h){var c=h[d];if(typeof c=="string"){if(!f[d]){f[d]=c}}else{for(var g in c){if(!f[d+"."+g]){f[d+"."+g]=c[g]}}}}delete f[e]}};a.api.PlayerAPI.prototype.setup=function(d,e){if(d&&d.flashplayer&&!d.players){d.players=[{type:"flash",src:d.flashplayer},{type:"html5"}];delete d.flashplayer}if(e&&!d.players){if(typeof e=="string"){d.players=[{type:"flash",src:e}]}else{if(e instanceof Array){d.players=e}else{if(typeof e=="object"&&e.type){d.players=[e]}}}}var c=this.id;this.remove();var f=a(c);f.config=d;return(new a.embed.Embedder(f)).embedPlayer()};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({players:[{type:"flash",src:"/jwplayer/player.swf"},{type:"html5"}]})}}b()})(jwplayer); 
     1jwplayer=function(a){return jwplayer.constructor(a)};jwplayer.constructor=function(a){};$jw=jwplayer;jwplayer.utils=function(){};jwplayer.utils.typeOf=function(b){var a=typeof b;if(a==="object"){if(b){if(b instanceof Array){a="array"}}else{a="null"}}return a};jwplayer.utils.extend=function(){var a=jwplayer.utils.extend["arguments"];if(a.length>1){for(var b=1;b<a.length;b++){for(element in a[b]){a[0][element]=a[b][element]}}return a[0]}return null};jwplayer.utils.extension=function(a){return a.substr(a.lastIndexOf(".")+1,a.length).toLowerCase()};jwplayer.utils.html=function(a,b){a.innerHTML=b};jwplayer.utils.append=function(a,b){a.appendChild(b)};jwplayer.utils.wrap=function(a,b){a.parentNode.replaceChild(b,a);b.appendChild(a)};jwplayer.utils.ajax=function(d,c,a){var b;if(window.XMLHttpRequest){b=new XMLHttpRequest()}else{b=new ActiveXObject("Microsoft.XMLHTTP")}b.onreadystatechange=function(){if(b.readyState===4){if(b.status===200){if(c){c(b)}}else{if(a){a(d)}}}};b.open("GET",d,true);b.send(null);return b};jwplayer.utils.load=function(b,c,a){b.onreadystatechange=function(){if(b.readyState===4){if(b.status===200){if(c){c()}}else{if(a){a()}}}}};jwplayer.utils.find=function(b,a){return b.getElementsByTagName(a)};jwplayer.utils.append=function(a,b){a.appendChild(b)};jwplayer.utils.isIE=function(){return(!+"\v1")};jwplayer.utils.isIOS=function(){var a=navigator.userAgent.toLowerCase();return(a.match(/iP(hone|ad)/i)!==null)};jwplayer.utils.hasHTML5=function(b){var a=document.createElement("video");if(!!a.canPlayType){if(b){var d={};if(b.playlist&&b.playlist.length){d.file=b.playlist[0].file;d.levels=b.playlist[0].levels}else{d.file=b.file;d.levels=b.levels}if(d.file){return jwplayer.utils.vidCanPlay(a,d.file)}else{if(d.levels&&d.levels.length){for(var c=0;c<d.levels.length;c++){if(d.levels[c].file&&jwplayer.utils.vidCanPlay(a,d.levels[c].file)){return true}}}}}else{return true}}return false};jwplayer.utils.vidCanPlay=function(b,a){var c=jwplayer.utils.strings.extension(a);if(jwplayer.utils.extensionmap[c]!==undefined){sourceType=jwplayer.utils.extensionmap[c]}else{sourceType="video/"+c+";"}return(b.canPlayType(sourceType)||a.toLowerCase().indexOf("youtube.com")>-1)};jwplayer.utils.hasFlash=function(){return(typeof navigator.plugins!="undefined"&&typeof navigator.plugins["Shockwave Flash"]!="undefined")||(typeof window.ActiveXObject!="undefined")};(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(i){return d(i)};function c(j,i){if(i===undefined){i=g[j]}else{e.utils.extend(i,g[j])}return i}function d(m,i){if(f[m.tagName.toLowerCase()]&&(i===undefined)){return f[m.tagName.toLowerCase()](m)}else{i=c("element",i);var n={};for(var j in i){if(j!="length"){var l=m.getAttribute(j);if(!(l===""||l===undefined||l===null)){n[i[j]]=m.getAttribute(j)}}}var k=m.style["#background-color"];if(k&&!(k=="transparent"||k=="rgba(0, 0, 0, 0)")){n.screencolor=k}return n}}function h(o,k){k=c("media",k);var m=[];if(e.utils.isIE()){var l=o.nextSibling;if(l!==undefined){while(l.tagName.toLowerCase()=="source"){m.push(a(l));l=l.nextSibling}}}else{var j=e.utils.selectors("source",o);for(var n in j){if(!isNaN(n)){m.push(a(j[n]))}}}var p=d(o,k);if(p.file!==undefined){m[0]={file:p.file}}p.levels=m;return p}function a(k,j){j=c("source",j);var i=d(k,j);i.width=i.width?i.width:0;i.bitrate=i.bitrate?i.bitrate:0;return i}function b(k,j){j=c("video",j);var i=h(k,j);return i}e.utils.mediaparser.replaceMediaElement=function(i,k){if(e.utils.isIE()){var l=false;var n=[];var m=i.nextSibling;while(m&&!l){n.push(m);if(m.nodeType==1&&m.tagName.toLowerCase()==("/")+i.tagName.toLowerCase()){l=true}m=m.nextSibling}if(l){while(n.length>0){var j=n.pop();j.parentNode.removeChild(j)}}i.outerHTML=k}};f.media=h;f.audio=h;f.source=a;f.video=b})(jwplayer);jwplayer.utils.selectors=function(a,c){if(c===undefined){c=document}a=jwplayer.utils.strings.trim(a);var b=a.charAt(0);if(b=="#"){return c.getElementById(a.substr(1))}else{if(b=="."){if(c.getElementsByClassName){return c.getElementsByClassName(a.substr(1))}else{return jwplayer.utils.selectors.getElementsByTagAndClass("*",a.substr(1))}}else{if(a.indexOf(".")>0){selectors=a.split(".");return jwplayer.utils.selectors.getElementsByTagAndClass(selectors[0],selectors[1])}else{return c.getElementsByTagName(a)}}}return null};jwplayer.utils.selectors.getElementsByTagAndClass=function(d,g,f){elements=[];if(f===undefined){f=document}var e=f.getElementsByTagName(d);for(var c=0;c<e.length;c++){if(e[c].className!==undefined){var b=e[c].className.split(" ");for(var a=0;a<b.length;a++){if(b[a]==g){elements.push(e[c])}}}}return elements};jwplayer.utils.strings=function(){};jwplayer.utils.strings.trim=function(a){return a.replace(/^\s*/,"").replace(/\s*$/,"")};jwplayer.utils.strings.extension=function(a){return a.substr(a.lastIndexOf(".")+1,a.length).toLowerCase()};(function(a){a.utils.extensionmap={"3gp":"video/3gpp","3gpp":"video/3gpp","3g2":"video/3gpp2","3gpp2":"video/3gpp2",flv:"video/x-flv",f4a:"audio/mp4",f4b:"audio/mp4",f4p:"video/mp4",f4v:"video/mp4",mov:"video/quicktime",m4a:"audio/mp4",m4b:"audio/mp4",m4p:"audio/mp4",m4v:"video/mp4",mkv:"video/x-matroska",mp4:"video/mp4",sdp:"application/sdp",vp6:"video/x-vp6",aac:"audio/aac",mp3:"audio/mp3",ogg:"audio/ogg",ogv:"video/ogg",webm:"video/webm"}})(jwplayer);(function(b){var a=[];b.constructor=function(c){return b.api.selectPlayer(c)};b.api=function(){};b.api.events={API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",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.PlayerAPI=function(d){this.container=d;this.id=d.id;var j={};var o={};var c=[];var g=undefined;var i=false;var h=[];var m=d.outerHTML;var n={};var k=0;this.setPlayer=function(p){g=p};this.stateListener=function(p,q){if(!o[p]){o[p]=[];this.eventListener(b.api.events.JWPLAYER_PLAYER_STATE,f(p))}o[p].push(q);return this};function f(p){return function(r){var q=r.newstate,t=r.oldstate;if(q==p){var s=o[q];if(s){for(var u in s){if(typeof s[u]=="function"){s[u].call(this,{oldstate:t,newstate:q})}}}}}}this.addInternalListener=function(p,q){p.jwAddEventListener(q,'function(dat) { jwplayer("'+this.id+'").dispatchEvent("'+q+'", dat); }')};this.eventListener=function(p,q){if(!j[p]){j[p]=[];if(g&&i){this.addInternalListener(g,p)}}j[p].push(q);return this};this.dispatchEvent=function(r){if(j[r]){var q=e(r,arguments[1]);for(var p in j[r]){if(typeof j[r][p]=="function"){j[r][p].call(this,q)}}}};function e(q,p){var r=b.utils.extend({},p);if(q==b.api.events.JWPLAYER_FULLSCREEN){r.fullscreen=r.message;delete r.message}else{if(q==b.api.events.JWPLAYER_PLAYLIST_ITEM){if(r.item&&r.index===undefined){r.index=r.item;delete r.item}}else{if(typeof r.data=="object"){r=b.utils.extend(r,r.data);delete r.data}}}return r}this.callInternal=function(q,p){if(i){if(typeof g!="undefined"&&typeof g[q]=="function"){if(p!==undefined){return(g[q])(p)}else{return(g[q])()}}return null}else{h.push({method:q,parameters:p})}};this.playerReady=function(r){i=true;if(!g){this.setPlayer(document.getElementById(r.id))}this.container=document.getElementById(this.id);for(var p in j){this.addInternalListener(g,p)}this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,function(s){if(s.index!==undefined){k=s.index}else{if(s.item!==undefined){k=s.item}}n={}});this.eventListener(b.api.events.JWPLAYER_MEDIA_META,function(s){b.utils.extend(n,s.metadata)});this.dispatchEvent(b.api.events.API_READY);while(h.length>0){var q=h.shift();this.callInternal(q.method,q.parameters)}};this.getItemMeta=function(){return n};this.getCurrentItem=function(){return k};this.destroy=function(){j={};h=[];if(this.container.outerHTML!=m){b.api.destroyPlayer(this.id,m)}};function l(r,t,s){var p=[];if(!t){t=0}if(!s){s=r.length-1}for(var q=t;q<=s;q++){p.push(r[q])}return p}};b.api.PlayerAPI.prototype={container:undefined,options:undefined,id:undefined,getBuffer:function(){return this.callInternal("jwGetBuffer")},getDuration:function(){return this.callInternal("jwGetDuration")},getFullscreen:function(){return this.callInternal("jwGetFullscreen")},getHeight:function(){return this.callInternal("jwGetHeight")},getLockState:function(){return this.callInternal("jwGetLockState")},getMeta:function(){return this.getItemMeta()},getMute:function(){return this.callInternal("jwGetMute")},getPlaylist:function(){var d=this.callInternal("jwGetPlaylist");for(var c=0;c<d.length;c++){if(d[c].index===undefined){d[c].index=c}}return d},getPlaylistItem:function(c){if(c==undefined){c=this.getCurrentItem()}return this.getPlaylist()[c]},getPosition:function(){return this.callInternal("jwGetPosition")},getState:function(){return this.callInternal("jwGetState")},getVolume:function(){return this.callInternal("jwGetVolume")},getWidth:function(){return this.callInternal("jwGetWidth")},setFullscreen:function(c){if(c===undefined){this.callInternal("jwSetFullscreen",true)}else{this.callInternal("jwSetFullscreen",c)}return this},setMute:function(c){if(c===undefined){this.callInternal("jwSetMute",true)}else{this.callInternal("jwSetMute",c)}return this},lock:function(){return this},unlock:function(){return this},load:function(c){this.callInternal("jwLoad",c);return this},playlistItem:function(c){this.callInternal("jwPlaylistItem",c);return this},playlistPrev:function(){this.callInternal("jwPlaylistPrev");return this},playlistNext:function(){this.callInternal("jwPlaylistNext");return this},resize:function(d,c){this.container.width=d;this.container.height=c;return this},play:function(c){if(typeof c==="undefined"){var c=this.getState();if(c==b.api.events.state.PLAYING||c==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPlay",c)}return this},pause:function(){var c=this.getState();switch(c){case b.api.events.state.PLAYING:case b.api.events.state.BUFFERING:this.callInternal("jwPause");break;case b.api.events.state.PAUSED:this.callInternal("jwPlay");break}return this},stop:function(){this.callInternal("jwStop");return this},seek:function(c){this.callInternal("jwSeek",c);return this},setVolume:function(c){this.callInternal("jwSetVolume",c);return this},onBufferChange:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER,c)},onBufferFull:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,c)},onError:function(c){return this.eventListener(b.api.events.JWPLAYER_ERROR,c)},onFullscreen:function(c){return this.eventListener(b.api.events.JWPLAYER_FULLSCREEN,c)},onMeta:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_META,c)},onMute:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_MUTE,c)},onPlaylist:function(c){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_LOADED,c)},onPlaylistItem:function(c){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,c)},onReady:function(c){return this.eventListener(b.api.events.API_READY,c)},onResize:function(c){return this.eventListener(b.api.events.JWPLAYER_RESIZE,c)},onComplete:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,c)},onTime:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_TIME,c)},onVolume:function(c){return this.eventListener(b.api.events.JWPLAYER_MEDIA_VOLUME,c)},onBuffer:function(c){return this.stateListener(b.api.events.state.BUFFERING,c)},onPause:function(c){return this.stateListener(b.api.events.state.PAUSED,c)},onPlay:function(c){return this.stateListener(b.api.events.state.PLAYING,c)},onIdle:function(c){return this.stateListener(b.api.events.state.IDLE,c)},setup:function(c){return this},remove:function(){this.destroy()},initializePlugin:function(c,d){return this}};b.api.selectPlayer=function(d){var c;if(d==undefined){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.PlayerAPI(c))}}else{if(typeof d=="number"){return b.getPlayers()[d]}}return null};b.api.playerById=function(d){for(var c in a){if(a[c].id==d){return a[c]}}return null};b.api.addPlayer=function(d){for(var c in a){if(a[c]==d){return d}}a.push(d);return d};b.api.destroyPlayer=function(f,d){var e=-1;for(var h in a){if(a[h].id==f){e=h;continue}}if(e>=0){var c=document.getElementById(a[e].id);if(c){if(d){c.outerHTML=d}else{var g=document.createElement("div");g.setAttribute("id",c.id);c.parentNode.replaceChild(g,c)}}a.splice(e,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)}if(_userPlayerReady){_userPlayerReady.call(this,b)}};(function(a){a.embed=function(){};a.embed.Embedder=function(c){this.constructor(c)};a.embed.defaults={width:400,height:300,players:[{type:"flash",src:"player.swf"},{type:"html5"}],components:{controlbar:{position:"over"}}};a.embed.Embedder.prototype={config:undefined,api:undefined,events:{},players:undefined,constructor:function(d){this.api=d;var c=a.utils.mediaparser.parseMedia(this.api.container);this.config=this.parseConfig(a.utils.extend({},a.embed.defaults,c,this.api.config))},embedPlayer:function(){var c=this.players[0];if(c&&c.type){switch(c.type){case"flash":if(a.utils.hasFlash()){if(this.config.file&&!this.config.provider){switch(a.utils.extension(this.config.file).toLowerCase()){case"webm":case"ogv":case"ogg":this.config.provider="video";break}}if(this.config.levels||this.config.playlist){this.api.onReady(this.loadAfterReady(this.config))}this.config.id=this.api.id;var e=a.embed.embedFlash(document.getElementById(this.api.id),c,this.config);this.api.container=e;this.api.setPlayer(e)}else{this.players.splice(0,1);return this.embedPlayer()}break;case"html5":if(a.utils.hasHTML5(this.config)){var d=a.embed.embedHTML5(document.getElementById(this.api.id),c,this.config);this.api.container=document.getElementById(this.api.id);this.api.setPlayer(d)}else{this.players.splice(0,1);return this.embedPlayer()}break}}else{this.api.container.innerHTML="<p>No suitable players found</p>"}this.setupEvents();return this.api},setupEvents:function(){for(evt in this.events){if(typeof this.api[evt]=="function"){(this.api[evt]).call(this.api,this.events[evt])}}},loadAfterReady:function(c){return function(e){if(c.playlist){this.load(c.playlist)}else{if(c.levels){var d=this.getPlaylistItem(0);if(!d){d={file:c.levels[0].file,provider:(c.provider?c.provider:"video")}}if(!d.image){d.image=c.image}d.levels=c.levels;this.load(d)}}}},parseConfig:function(c){var d=a.utils.extend({},c);if(d.events){this.events=d.events;delete d.events}if(d.players){this.players=d.players;delete d.players}if(d.plugins){if(typeof d.plugins=="object"){d=a.utils.extend(d,a.embed.parsePlugins(d.plugins))}}if(d.playlist&&typeof d.playlist==="string"&&!d["playlist.position"]){d["playlist.position"]=d.playlist;delete d.playlist}if(d.controlbar&&typeof d.controlbar==="string"&&!d["controlbar.position"]){d["controlbar.position"]=d.controlbar;delete d.controlbar}return d}};a.embed.embedFlash=function(e,i,d){var j=a.utils.extend({},d);var g=j.width;delete j.width;var c=j.height;delete j.height;delete j.levels;delete j.playlist;a.embed.parseConfigBlock(j,"components");a.embed.parseConfigBlock(j,"providers");if(a.utils.isIE()){var f='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+g+'" height="'+c+'" id="'+e.id+'" name="'+e.id+'">';f+='<param name="movie" value="'+i.src+'">';f+='<param name="allowfullscreen" value="true">';f+='<param name="allowscriptaccess" value="always">';f+='<param name="wmode" value="opaque">';f+='<param name="flashvars" value="'+a.embed.jsonToFlashvars(j)+'">';f+="</object>";if(e.tagName.toLowerCase()=="video"){a.utils.mediaparser.replaceMediaElement(e,f)}else{e.outerHTML=f}return document.getElementById(e.id)}else{var h=document.createElement("object");h.setAttribute("type","application/x-shockwave-flash");h.setAttribute("data",i.src);h.setAttribute("width",g);h.setAttribute("height",c);h.setAttribute("id",e.id);h.setAttribute("name",e.id);a.embed.appendAttribute(h,"allowfullscreen","true");a.embed.appendAttribute(h,"allowscriptaccess","always");a.embed.appendAttribute(h,"wmode","opaque");a.embed.appendAttribute(h,"flashvars",a.embed.jsonToFlashvars(j));e.parentNode.replaceChild(h,e);return h}};a.embed.embedHTML5=function(d,f,e){if(a.html5){d.innerHTML="";var c=a.utils.extend({screencolor:"0x000000"},e);a.embed.parseConfigBlock(c,"components");if(c.levels&&!c.sources){c.sources=e.levels}if(c.skin&&c.skin.toLowerCase().indexOf(".zip")>0){c.skin=c.skin.replace(/\.zip/i,".xml")}return new (a.html5(d)).setup(c)}else{return null}};a.embed.appendAttribute=function(d,c,e){var f=document.createElement("param");f.setAttribute("name",c);f.setAttribute("value",e);d.appendChild(f)};a.embed.jsonToFlashvars=function(d){var c="";for(key in d){c+=key+"="+escape(d[key])+"&"}return c.substring(0,c.length-1)};a.embed.parsePlugins=function(e){if(!e){return{}}var g={},f=[];for(plugin in e){var d=plugin.indexOf("-")>0?plugin.substring(0,plugin.indexOf("-")):plugin;var c=e[plugin];f.push(plugin);for(param in c){g[d+"."+param]=c[param]}}g.plugins=f.join(",");return g};a.embed.parseConfigBlock=function(f,e){if(f[e]){var h=f[e];for(var d in h){var c=h[d];if(typeof c=="string"){if(!f[d]){f[d]=c}}else{for(var g in c){if(!f[d+"."+g]){f[d+"."+g]=c[g]}}}}delete f[e]}};a.api.PlayerAPI.prototype.setup=function(d,e){if(d&&d.flashplayer&&!d.players){d.players=[{type:"flash",src:d.flashplayer},{type:"html5"}];delete d.flashplayer}if(e&&!d.players){if(typeof e=="string"){d.players=[{type:"flash",src:e}]}else{if(e instanceof Array){d.players=e}else{if(typeof e=="object"&&e.type){d.players=[e]}}}}var c=this.id;this.remove();var f=a(c);f.config=d;return(new a.embed.Embedder(f)).embedPlayer()};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({players:[{type:"flash",src:"/jwplayer/player.swf"},{type:"html5"}]})}}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};a.html5.version="5.3"})(jwplayer);(function(b){b.html5.utils=function(){};b.html5.utils.extension=function(d){return d.substr(d.lastIndexOf(".")+1,d.length).toLowerCase()};b.html5.utils.getAbsolutePath=function(j){if(j===undefined){return undefined}if(a(j)){return j}var k=document.location.href.substring(0,document.location.href.indexOf("://")+3);var h=document.location.href.substring(k.length,document.location.href.indexOf("/",k.length+1));var e;if(j.indexOf("/")===0){e=j.split("/")}else{var f=document.location.href.split("?")[0];f=f.substring(k.length+h.length+1,f.lastIndexOf("/"));e=f.split("/").concat(j.split("/"))}var d=[];for(var g=0;g<e.length;g++){if(!e[g]||e[g]===undefined||e[g]=="."){continue}else{if(e[g]==".."){d.pop()}else{d.push(e[g])}}}return k+h+"/"+d.join("/")};function a(e){if(e===null){return}var f=e.indexOf("://");var d=e.indexOf("?");return(f>0&&(d<0||(d>f)))}b.html5.utils.mapEmpty=function(d){for(var e in d){return false}return true};b.html5.utils.mapLength=function(e){var d=0;for(var f in e){d++}return d};b.html5.utils.log=function(e,d){if(typeof console!="undefined"&&typeof console.log!="undefined"){if(d){console.log(e,d)}else{console.log(e)}}};b.html5.utils.css=function(e,h,d){if(e!==undefined){for(var f in h){try{if(typeof h[f]==="undefined"){continue}else{if(typeof h[f]=="number"&&!(f=="zIndex"||f=="opacity")){if(isNaN(h[f])){continue}if(f.match(/color/i)){h[f]="#"+c(h[f].toString(16),6)}else{h[f]=h[f]+"px"}}}e.style[f]=h[f]}catch(g){}}}};function c(d,e){while(d.length<e){d="0"+d}return d}b.html5.utils.isYouTube=function(d){return d.indexOf("youtube.com")>-1};b.html5.utils.getYouTubeId=function(d){d.indexOf("youtube.com">0)}})(jwplayer);(function(b){var c=b.html5.utils.css;b.html5.view=function(p,n,e){var s=p;var k=n;var v=e;var u;var f;var z;var q;var A;var m;function x(){u=document.createElement("div");u.id=k.id;u.className=k.className;k.id=u.id+"_video";c(u,{position:"relative",height:v.height,width:v.width,padding:0,backgroundColor:C(),zIndex:0});function C(){if(s.skin.getComponentSettings("display")&&s.skin.getComponentSettings("display").backgroundcolor){return s.skin.getComponentSettings("display").backgroundcolor}return parseInt("000000",16)}c(k,{position:"absolute",width:v.width,height:v.height,top:0,left:0,zIndex:1,margin:"auto",display:"block"});b.utils.wrap(k,u);q=document.createElement("div");q.id=u.id+"_displayarea";u.appendChild(q)}function i(){for(var C in v.plugins.order){var D=v.plugins.order[C];if(v.plugins.object[D].getDisplayElement!==undefined){v.plugins.object[D].height=B(v.plugins.object[D].getDisplayElement().style.height);v.plugins.object[D].width=B(v.plugins.object[D].getDisplayElement().style.width);v.plugins.config[D].currentPosition=v.plugins.config[D].position}}t()}function t(D){if(v.getMedia()!==undefined){for(var C in v.plugins.order){var E=v.plugins.order[C];if(v.plugins.object[E].getDisplayElement!==undefined){if(v.config.chromeless||v.getMedia().hasChrome()){v.plugins.config[E].currentPosition=b.html5.view.positions.NONE}else{v.plugins.config[E].currentPosition=v.plugins.config[E].position}}}}h(v.width,v.height)}function B(C){if(typeof C=="number"){return C}if(C===""){return 0}return parseInt(C.replace("px",""),10)}function o(){m=setInterval(function(){if(u.width&&u.height&&(v.width!==B(u.width)||v.height!==B(u.height))){h(B(u.width),B(u.height))}else{var C=u.getBoundingClientRect();if(v.width!==C.width||v.height!==C.height){h(C.width,C.height)}delete C}},100)}this.setup=function(C){k=C;x();i();s.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_LOADED,t);o();var D;if(window.onresize!==null){D=window.onresize}window.onresize=function(E){if(D!==undefined){try{D(E)}catch(F){}}if(s.jwGetFullscreen()){v.width=window.innerWidth;v.height=window.innerHeight}h(v.width,v.height)}};function g(C){switch(C.keyCode){case 27:if(s.jwGetFullscreen()){s.jwSetFullscreen(false)}break;case 32:if(s.jwGetState()!=b.api.events.state.IDLE&&s.jwGetState()!=b.api.events.state.PAUSED){s.jwPause()}else{s.jwPlay()}break}}function h(F,C){if(u.style.display=="none"){return}var E=[].concat(v.plugins.order);E.reverse();A=E.length+2;if(!v.fullscreen){v.width=F;v.height=C;f=F;z=C;c(q,{top:0,bottom:0,left:0,right:0,width:F,height:C});c(u,{height:z,width:f});var D=l(r,E);if(D.length>0){A+=D.length;l(j,D,true)}w()}else{l(y,E,true)}}function l(H,E,F){var D=[];for(var C in E){var I=E[C];if(v.plugins.object[I].getDisplayElement!==undefined){if(v.plugins.config[I].currentPosition.toUpperCase()!==b.html5.view.positions.NONE){var G=H(I,A--);if(!G){D.push(I)}else{v.plugins.object[I].resize(G.width,G.height);if(F){delete G.width;delete G.height}c(v.plugins.object[I].getDisplayElement(),G)}}else{c(v.plugins.object[I].getDisplayElement(),{display:"none"})}}}return D}function r(D,E){if(v.plugins.object[D].getDisplayElement!==undefined){if(a(v.plugins.config[D].position)){if(v.plugins.object[D].getDisplayElement().parentNode===null){u.appendChild(v.plugins.object[D].getDisplayElement())}var C=d(D);C.zIndex=E;return C}}return false}function j(C,D){if(v.plugins.object[C].getDisplayElement().parentNode===null){q.appendChild(v.plugins.object[C].getDisplayElement())}return{position:"absolute",width:(v.width-B(q.style.left)-B(q.style.right)),height:(v.height-B(q.style.top)-B(q.style.bottom)),zIndex:D}}function y(C,D){return{position:"fixed",width:v.width,height:v.height,zIndex:D}}function w(){q.style.position="absolute";var C={position:"absolute",width:B(q.style.width),height:B(q.style.height),top:B(q.style.top),left:B(q.style.left)};c(v.getMedia().getDisplayElement(),C)}function d(D){var E={position:"absolute",margin:0,padding:0,top:null};var C=v.plugins.config[D].currentPosition.toLowerCase();switch(C.toUpperCase()){case b.html5.view.positions.TOP:E.top=B(q.style.top);E.left=B(q.style.left);E.width=f-B(q.style.left)-B(q.style.right);E.height=v.plugins.object[D].height;q.style[C]=B(q.style[C])+v.plugins.object[D].height+"px";q.style.height=B(q.style.height)-E.height+"px";break;case b.html5.view.positions.RIGHT:E.top=B(q.style.top);E.right=B(q.style.right);E.width=E.width=v.plugins.object[D].width;E.height=z-B(q.style.top)-B(q.style.bottom);q.style[C]=B(q.style[C])+v.plugins.object[D].width+"px";q.style.width=B(q.style.width)-E.width+"px";break;case b.html5.view.positions.BOTTOM:E.bottom=B(q.style.bottom);E.left=B(q.style.left);E.width=f-B(q.style.left)-B(q.style.right);E.height=v.plugins.object[D].height;q.style[C]=B(q.style[C])+v.plugins.object[D].height+"px";q.style.height=B(q.style.height)-E.height+"px";break;case b.html5.view.positions.LEFT:E.top=B(q.style.top);E.left=B(q.style.left);E.width=v.plugins.object[D].width;E.height=z-B(q.style.top)-B(q.style.bottom);q.style[C]=B(q.style[C])+v.plugins.object[D].width+"px";q.style.width=B(q.style.width)-E.width+"px";break;default:break}return E}this.resize=h;this.fullscreen=function(D){if(navigator.vendor.indexOf("Apple")===0){if(v.getMedia().getDisplayElement().webkitSupportsFullscreen){if(D){v.fullscreen=false;v.getMedia().getDisplayElement().webkitEnterFullscreen()}else{v.getMedia().getDisplayElement().webkitExitFullscreen()}}else{v.fullscreen=false}}else{if(D){document.onkeydown=g;clearInterval(m);v.width=window.innerWidth;v.height=window.innerHeight;var C={position:"fixed",width:"100%",height:"100%",top:0,left:0,zIndex:2147483000};c(u,C);C.zIndex=1;c(v.getMedia().getDisplayElement(),C);C.zIndex=2;c(q,C)}else{document.onkeydown="";o();v.width=f;v.height=z;c(u,{position:"relative",height:v.height,width:v.width,zIndex:0})}h(v.width,v.height)}}};function a(d){return([b.html5.view.positions.TOP,b.html5.view.positions.RIGHT,b.html5.view.positions.BOTTOM,b.html5.view.positions.LEFT].indexOf(d.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"}]}}};_css=a.html5.utils.css;_hide=function(c){_css(c,{display:"none"})};_show=function(c){_css(c,{display:"block"})};a.html5.controlbar=function(j,L){var i=j;var A=a.utils.extend({},b,i.skin.getComponentSettings("controlbar"),L);if(a.html5.utils.mapLength(i.skin.getComponentLayout("controlbar"))>0){A.layout=i.skin.getComponentLayout("controlbar")}var P;var I;var O;var B;var t="none";var f;var h;var Q;var e;var d;var w;var s;var J={};var n=false;var c={};function H(){O=0;B=0;I=0;if(!n){var V={height:i.skin.getSkinElement("controlbar","background").height,backgroundColor:A.backgroundcolor};P=document.createElement("div");P.id=i.id+"_jwplayer_controlbar";_css(P,V)}v("capLeft","left",false,P);var W={position:"absolute",height:i.skin.getSkinElement("controlbar","background").height,background:" url("+i.skin.getSkinElement("controlbar","background").src+") repeat-x center left",left:i.skin.getSkinElement("controlbar","capLeft").width};N("elements",P,W);v("capRight","right",false,P)}this.getDisplayElement=function(){return P};this.resize=function(X,V){a.html5.utils.cancelAnimation(P);document.getElementById(i.id).onmousemove=x;d=X;w=V;x();var W=u();D({id:i.id,duration:Q,position:h});r({id:i.id,bufferPercent:e});return W};function o(){var W=["timeSlider","volumeSlider","timeSliderRail","volumeSliderRail"];for(var X in W){var V=W[X];if(typeof J[V]!="undefined"){c[V]=J[V].getBoundingClientRect()}}}function x(){a.html5.utils.cancelAnimation(P);if(g()){a.html5.utils.fadeTo(P,1,0,1,0)}else{a.html5.utils.fadeTo(P,0,0.1,1,2)}}function g(){if(i.jwGetState()==a.api.events.state.IDLE||i.jwGetState()==a.api.events.state.PAUSED){if(A.idlehide){return false}return true}if(i.jwGetFullscreen()){return false}if(A.position.toUpperCase()==a.html5.view.positions.OVER){return false}return true}function N(Y,X,W){var V;if(!n){V=document.createElement("div");J[Y]=V;V.id=P.id+"_"+Y;X.appendChild(V)}else{V=document.getElementById(P.id+"_"+Y)}if(W!==undefined){_css(V,W)}return V}function G(){U(A.layout.left);U(A.layout.right,-1);U(A.layout.center)}function U(Y,V){var Z=Y.position=="right"?"right":"left";var X=a.utils.extend([],Y.elements);if(V!==undefined){X.reverse()}for(var W=0;W<X.length;W++){z(X[W],Z)}}function E(){return I++}function z(Z,ab){var Y,W,X,V,ad;switch(Z.name){case"play":v("playButton",ab,false);v("pauseButton",ab,true);K("playButton","jwPlay");K("pauseButton","jwPause");break;case"divider":v("divider"+E(),ab,true);break;case"prev":v("prevButton",ab,true);K("prevButton","jwPlaylistPrev");break;case"next":v("nextButton",ab,true);K("nextButton","jwPlaylistNext");break;case"elapsed":v("elapsedText",ab,true);break;case"time":W=i.skin.getSkinElement("controlbar","timeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","timeSliderCapLeft").width;X=i.skin.getSkinElement("controlbar","timeSliderCapRight")===undefined?0:i.skin.getSkinElement("controlbar","timeSliderCapRight").width;Y=ab=="left"?W:X;V=i.skin.getSkinElement("controlbar","timeSliderRail").width+W+X;ad={height:i.skin.getSkinElement("controlbar","background").height,position:"absolute",top:0,width:V};ad[ab]=ab=="left"?O:B;var aa=N("timeSlider",J.elements,ad);v("timeSliderCapLeft",ab,true,aa,ab=="left"?0:Y);v("timeSliderRail",ab,false,aa,Y);v("timeSliderBuffer",ab,false,aa,Y);v("timeSliderProgress",ab,false,aa,Y);v("timeSliderThumb",ab,false,aa,Y);v("timeSliderCapRight",ab,true,aa,ab=="right"?0:Y);M("time");break;case"fullscreen":v("fullscreenButton",ab,false);v("normalscreenButton",ab,true);K("fullscreenButton","jwSetFullscreen",true);K("normalscreenButton","jwSetFullscreen",false);break;case"volume":W=i.skin.getSkinElement("controlbar","volumeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;X=i.skin.getSkinElement("controlbar","volumeSliderCapRight")===undefined?0:i.skin.getSkinElement("controlbar","volumeSliderCapRight").width;Y=ab=="left"?W:X;V=i.skin.getSkinElement("controlbar","volumeSliderRail").width+W+X;ad={height:i.skin.getSkinElement("controlbar","background").height,position:"absolute",top:0,width:V};ad[ab]=ab=="left"?O:B;var ac=N("volumeSlider",J.elements,ad);v("volumeSliderCapLeft",ab,true,ac,ab=="left"?0:Y);v("volumeSliderRail",ab,true,ac,Y);v("volumeSliderProgress",ab,false,ac,Y);v("volumeSliderCapRight",ab,true,ac,ab=="right"?0:Y);M("volume");break;case"mute":v("muteButton",ab,false);v("unmuteButton",ab,true);K("muteButton","jwSetMute",true);K("unmuteButton","jwSetMute",false);break;case"duration":v("durationText",ab,true);break}}function v(Y,ac,ab,Z,V){if((i.skin.getSkinElement("controlbar",Y)!==undefined||Y.indexOf("Text")>0||Y.indexOf("divider")===0)&&!(Y.indexOf("divider")===0&&s.indexOf("divider")===0)){s=Y;var X={height:i.skin.getSkinElement("controlbar","background").height,position:"absolute",display:"block",top:0};if((Y.indexOf("next")===0||Y.indexOf("prev")===0)&&i.jwGetPlaylist().length<2){ab=false;X.display="none"}var aa;if(Y.indexOf("Text")>0){Y.innerhtml="00:00";X.font=A.fontsize+"px/"+(i.skin.getSkinElement("controlbar","background").height+1)+"px "+A.font;X.color=A.fontcolor;X.textAlign="center";X.fontWeight=A.fontweight;X.fontStyle=A.fontstyle;X.cursor="default";aa=14+3*A.fontsize}else{if(Y.indexOf("divider")===0){X.background="url("+i.skin.getSkinElement("controlbar","divider").src+") repeat-x center left";aa=i.skin.getSkinElement("controlbar","divider").width}else{X.background="url("+i.skin.getSkinElement("controlbar",Y).src+") repeat-x center left";aa=i.skin.getSkinElement("controlbar",Y).width}}if(ac=="left"){X.left=V===undefined?O:V;if(ab){O+=aa}}else{if(ac=="right"){X.right=V===undefined?B:V;if(ab){B+=aa}}}if(Z===undefined){Z=J.elements}X.width=aa;if(n){_css(J[Y],X)}else{var W=N(Y,Z,X);if(i.skin.getSkinElement("controlbar",Y+"Over")!==undefined){W.onmouseover=function(ad){W.style.backgroundImage=["url(",i.skin.getSkinElement("controlbar",Y+"Over").src,")"].join("")};W.onmouseout=function(ad){W.style.backgroundImage=["url(",i.skin.getSkinElement("controlbar",Y).src,")"].join("")}}}}}function C(){i.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,y);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_BUFFER,r);i.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,p);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_TIME,D);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,T);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_VOLUME,k);i.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_COMPLETE,F)}function y(){H();G();u();R()}function R(){D({id:i.id,duration:i.jwGetDuration(),position:0});r({id:i.id,bufferProgress:0});T({id:i.id,mute:i.jwGetMute()});p({id:i.id,newstate:a.api.events.state.IDLE});k({id:i.id,volume:i.jwGetVolume()})}function K(X,Y,W){if(n){return}if(i.skin.getSkinElement("controlbar",X)!==undefined){var V=J[X];if(V!==null){_css(V,{cursor:"pointer"});if(Y=="fullscreen"){V.onmouseup=function(Z){Z.stopPropagation();i.jwSetFullscreen(!i.jwGetFullscreen())}}else{V.onmouseup=function(Z){Z.stopPropagation();if(W!==null){i[Y](W)}else{i[Y]()}}}}}}function M(V){if(n){return}var W=J[V+"Slider"];_css(J.elements,{cursor:"pointer"});_css(W,{cursor:"pointer"});W.onmousedown=function(X){t=V};W.onmouseup=function(X){X.stopPropagation();S(X.pageX)};W.onmousemove=function(X){if(t=="time"){f=true;var Y=X.pageX-c[V+"Slider"].left-window.pageXOffset;_css(J.timeSliderThumb,{left:Y})}}}function S(W){f=false;var V;if(t=="time"){V=W-c.timeSliderRail.left+window.pageXOffset;var Y=V/c.timeSliderRail.width*Q;if(Y<0){Y=0}else{if(Y>Q){Y=Q-3}}i.jwSeek(Y);if(i.jwGetState()!=a.api.events.state.PLAYING){i.jwPlay()}}else{if(t=="volume"){V=W-c.volumeSliderRail.left-window.pageXOffset;var X=Math.round(V/c.volumeSliderRail.width*100);if(X<0){X=0}else{if(X>100){X=100}}if(i.jwGetMute()){i.jwSetMute(false)}i.jwSetVolume(X)}}t="none"}function r(W){if(W.bufferPercent!==null){e=W.bufferPercent}var X=c.timeSliderRail.width;var V=isNaN(Math.round(X*e/100))?0:Math.round(X*e/100);_css(J.timeSliderBuffer,{width:V})}function T(V){if(V.mute){_hide(J.muteButton);_show(J.unmuteButton);_hide(J.volumeSliderProgress)}else{_show(J.muteButton);_hide(J.unmuteButton);_show(J.volumeSliderProgress)}}function p(V){if(V.newstate==a.api.events.state.BUFFERING||V.newstate==a.api.events.state.PLAYING){_show(J.pauseButton);_hide(J.playButton)}else{_hide(J.pauseButton);_show(J.playButton)}x();if(V.newstate==a.api.events.state.IDLE){_hide(J.timeSliderBuffer);_hide(J.timeSliderProgress);_hide(J.timeSliderThumb);D({id:i.id,duration:i.jwGetDuration(),position:0})}else{_show(J.timeSliderBuffer);if(V.newstate!=a.api.events.state.BUFFERING){_show(J.timeSliderProgress);_show(J.timeSliderThumb)}}}function F(V){D(a.utils.extend(V,{position:0,duration:Q}))}function D(Y){if(Y.position!==null){h=Y.position}if(Y.duration!==null){Q=Y.duration}var W=(h===Q===0)?0:h/Q;var V=isNaN(Math.round(c.timeSliderRail.width*W))?0:Math.round(c.timeSliderRail.width*W);var X=V;J.timeSliderProgress.style.width=V+"px";if(!f){if(J.timeSliderThumb){J.timeSliderThumb.style.left=X+"px"}}if(J.durationText){J.durationText.innerHTML=m(Q)}if(J.elapsedText){J.elapsedText.innerHTML=m(h)}}function m(V){str="00:00";if(V>0){str=Math.floor(V/60)<10?"0"+Math.floor(V/60)+":":Math.floor(V/60)+":";str+=Math.floor(V%60)<10?"0"+Math.floor(V%60):Math.floor(V%60)}return str}function l(){var Y,W;var X=document.getElementById(P.id+"_elements").childNodes;for(var V in document.getElementById(P.id+"_elements").childNodes){if(isNaN(parseInt(V,10))){continue}if(X[V].id.indexOf(P.id+"_divider")===0&&W.id.indexOf(P.id+"_divider")===0){X[V].style.display="none"}else{if(X[V].id.indexOf(P.id+"_divider")===0&&Y.style.display!="none"){X[V].style.display="block"}}if(X[V].style.display!="none"){W=X[V]}Y=X[V]}}function u(){l();if(i.jwGetFullscreen()){_show(J.normalscreenButton);_hide(J.fullscreenButton)}else{_hide(J.normalscreenButton);_show(J.fullscreenButton)}var W={width:d};var V={};if(A.position.toUpperCase()==a.html5.view.positions.OVER||i.jwGetFullscreen()){W.left=A.margin;W.width-=2*A.margin;W.top=w-i.skin.getSkinElement("controlbar","background").height-A.margin;W.height=i.skin.getSkinElement("controlbar","background").height}else{W.left=0}V.left=i.skin.getSkinElement("controlbar","capLeft").width;V.width=W.width-i.skin.getSkinElement("controlbar","capLeft").width-i.skin.getSkinElement("controlbar","capRight").width;var X=i.skin.getSkinElement("controlbar","timeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","timeSliderCapLeft").width;_css(J.timeSliderRail,{width:(V.width-O-B),left:X});if(J.timeSliderCapRight!==undefined){_css(J.timeSliderCapRight,{left:X+(V.width-O-B)})}_css(P,W);_css(J.elements,V);o();return W}function k(Z){if(J.volumeSliderRail!==undefined){var X=isNaN(Z.volume/100)?1:Z.volume/100;var Y=parseInt(J.volumeSliderRail.style.width.replace("px",""),10);var V=isNaN(Math.round(Y*X))?0:Math.round(Y*X);var aa=parseInt(J.volumeSliderRail.style.right.replace("px",""),10);var W=i.skin.getSkinElement("controlbar","volumeSliderCapLeft")===undefined?0:i.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;_css(J.volumeSliderProgress,{width:V,left:W});if(J.volumeSliderCapLeft!==undefined){_css(J.volumeSliderCapLeft,{left:0})}}}function q(){H();G();o();n=true;C();R();P.style.opacity=A.idlehide?0:1}q();return this}})(jwplayer);(function(b){var a=["width","height","state","playlist","item","position","buffer","duration","volume","mute","fullscreen"];b.html5.controller=function(s,q,d,p){var v=s;var x=d;var c=p;var j=q;var z=true;var t=(x.config.debug!==undefined)&&(x.config.debug.toString().toLowerCase()=="console");var h=new b.html5.eventdispatcher(j.id,t);b.utils.extend(this,h);function l(C){h.sendEvent(C.type,C)}x.addGlobalListener(l);function o(){try{if(x.playlist[0].levels[0].file.length>0){if(z||x.state==b.api.events.state.IDLE){x.setActiveMediaProvider(x.playlist[x.item]);x.addEventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,function(){x.getMedia().play()});if(x.config.repeat){x.addEventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,function(D){setTimeout(m,25)})}x.getMedia().load(x.playlist[x.item]);z=false}else{if(x.state==b.api.events.state.PAUSED){x.getMedia().play()}}}return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function A(){try{if(x.playlist[0].levels[0].file.length>0){switch(x.state){case b.api.events.state.PLAYING:case b.api.events.state.BUFFERING:x.getMedia().pause();break}}return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function w(C){try{if(x.playlist[0].levels[0].file.length>0){switch(x.state){case b.api.events.state.PLAYING:case b.api.events.state.PAUSED:case b.api.events.state.BUFFERING:x.getMedia().seek(C);break}}return true}catch(D){h.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}function i(){try{if(x.playlist[0].levels[0].file.length>0&&x.state!=b.api.events.state.IDLE){x.getMedia().stop()}return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function f(){try{if(x.playlist[0].levels[0].file.length>0){if(x.config.shuffle){n(r())}else{if(x.item+1==x.playlist.length){n(0)}else{n(x.item+1)}}}if(x.state!=b.api.events.state.PLAYING&&x.state!=b.api.events.state.BUFFERING){o()}return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function e(){try{if(x.playlist[0].levels[0].file.length>0){if(x.config.shuffle){n(r())}else{if(x.item===0){n(x.playlist.length-1)}else{n(x.item-1)}}}if(x.state!=b.api.events.state.PLAYING&&x.state!=b.api.events.state.BUFFERING){o()}return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function r(){var C=null;if(x.playlist.length>1){while(C===null){C=Math.floor(Math.random()*x.playlist.length);if(C==x.item){C=null}}}else{C=0}return C}function n(D){x.resetEventListeners();x.addGlobalListener(l);try{if(x.playlist[0].levels[0].file.length>0){var E=x.state;if(E!==b.api.events.state.IDLE){i()}x.item=D;z=true;h.sendEvent(b.api.events.JWPLAYER_PLAYLIST_ITEM,{item:D});if(E==b.api.events.state.PLAYING||E==b.api.events.state.BUFFERING){o()}}return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function y(D){try{switch(typeof(D)){case"number":x.getMedia().volume(D);break;case"string":x.getMedia().volume(parseInt(D,10));break}return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function k(D){try{x.getMedia().mute(D);return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function g(D,C){try{x.width=D;x.height=C;c.resize(D,C);return true}catch(E){h.sendEvent(b.api.events.JWPLAYER_ERROR,E)}return false}function u(D){try{x.fullscreen=D;c.fullscreen(D);return true}catch(C){h.sendEvent(b.api.events.JWPLAYER_ERROR,C)}return false}function B(C){try{i();x.loadPlaylist(C);z=true;return true}catch(D){h.sendEvent(b.api.events.JWPLAYER_ERROR,D)}return false}b.html5.controller.repeatoptions={LIST:"LIST",ALWAYS:"ALWAYS",SINGLE:"SINGLE",NONE:"NONE"};function m(){x.resetEventListeners();x.addGlobalListener(l);switch(x.config.repeat.toUpperCase()){case b.html5.controller.repeatoptions.SINGLE:o();break;case b.html5.controller.repeatoptions.ALWAYS:if(x.item==x.playlist.length-1&&!x.config.shuffle){n(0);o()}else{f()}break;case b.html5.controller.repeatoptions.LIST:if(x.item==x.playlist.length-1&&!x.config.shuffle){n(0)}else{f()}break}}this.play=o;this.pause=A;this.seek=w;this.stop=i;this.next=f;this.prev=e;this.item=n;this.setVolume=y;this.setMute=k;this.resize=g;this.setFullscreen=u;this.load=B}})(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){_css=a.html5.utils.css;_hide=function(b){_css(b,{display:"none"})};_show=function(b){_css(b,{display:"block"})};a.html5.display=function(k,s){var q=k;var d={};var f;var t;var r;var l;var g;var j=q.skin.getComponentSettings("display").bufferrotation===undefined?15:parseInt(q.skin.getComponentSettings("display").bufferrotation,10);var e=q.skin.getComponentSettings("display").bufferinterval===undefined?100:parseInt(q.skin.getComponentSettings("display").bufferinterval,10);var c={display:{style:{cursor:"pointer",top:0,left:0},click:p},display_icon:{style:{cursor:"pointer",position:"absolute",top:((q.skin.getSkinElement("display","background").height-q.skin.getSkinElement("display","playIcon").height)/2),left:((q.skin.getSkinElement("display","background").width-q.skin.getSkinElement("display","playIcon").width)/2),border:0,margin:0,padding:0,zIndex:3}},display_iconBackground:{style:{cursor:"pointer",position:"absolute",top:((t-q.skin.getSkinElement("display","background").height)/2),left:((f-q.skin.getSkinElement("display","background").width)/2),border:0,backgroundImage:(["url(",q.skin.getSkinElement("display","background").src,")"]).join(""),width:q.skin.getSkinElement("display","background").width,height:q.skin.getSkinElement("display","background").height,margin:0,padding:0,zIndex:2}},display_image:{style:{display:"none",width:f,height:t,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}}};q.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,i);q.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,i);q.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,i);q.jwAddEventListener(a.api.events.JWPLAYER_ERROR,o);u();function u(){d.display=n("div","display");d.display_text=n("div","display_text");d.display.appendChild(d.display_text);d.display_image=n("img","display_image");d.display_image.onerror=function(v){_hide(d.display_image)};d.display_icon=n("div","display_icon");d.display_iconBackground=n("div","display_iconBackground");d.display.appendChild(d.display_image);d.display_iconBackground.appendChild(d.display_icon);d.display.appendChild(d.display_iconBackground);b()}this.getDisplayElement=function(){return d.display};this.resize=function(w,v){f=w;t=v;_css(d.display,{width:w,height:v});_css(d.display_text,{width:(w-10),top:((t-d.display_text.getBoundingClientRect().height)/2)});_css(d.display_image,{width:w,height:v});_css(d.display_iconBackground,{top:((t-q.skin.getSkinElement("display","background").height)/2),left:((f-q.skin.getSkinElement("display","background").width)/2)});i({})};function n(v,x){var w=document.createElement(v);w.id=q.id+"_jwplayer_"+x;_css(w,c[x].style);return w}function b(){for(var v in d){if(c[v].click!==undefined){d[v].onclick=c[v].click}}}function p(v){if(typeof v.preventDefault!="undefined"){v.preventDefault()}else{v.returnValue=false}if(q.jwGetState()!=a.api.events.state.PLAYING){q.jwPlay()}else{q.jwPause()}}function h(v){if(g){return}_show(d.display_iconBackground);d.display_icon.style.backgroundImage=(["url(",q.skin.getSkinElement("display",v).src,")"]).join("");_css(d.display_icon,{display:"block",width:q.skin.getSkinElement("display",v).width,height:q.skin.getSkinElement("display",v).height,top:(q.skin.getSkinElement("display","background").height-q.skin.getSkinElement("display",v).height)/2,left:(q.skin.getSkinElement("display","background").width-q.skin.getSkinElement("display",v).width)/2});if(q.skin.getSkinElement("display",v+"Over")!==undefined){d.display_icon.onmouseover=function(w){d.display_icon.style.backgroundImage=["url(",q.skin.getSkinElement("display",v+"Over").src,")"].join("")};d.display_icon.onmouseout=function(w){d.display_icon.style.backgroundImage=["url(",q.skin.getSkinElement("display",v).src,")"].join("")}}else{d.display_icon.onmouseover=null;d.display_icon.onmouseout=null}}function m(){_hide(d.display_icon);_hide(d.display_iconBackground)}function o(v){g=true;m();d.display_text.innerHTML=v.error;_show(d.display_text);d.display_text.style.top=((t-d.display_text.getBoundingClientRect().height)/2)+"px"}function i(v){if((v.type==a.api.events.JWPLAYER_PLAYER_STATE||v.type==a.api.events.JWPLAYER_PLAYLIST_ITEM)&&g){g=false;_hide(d.display_text)}if(l!==undefined){clearInterval(l);l=null;a.html5.utils.animations.rotate(d.display_icon,0)}switch(q.jwGetState()){case a.api.events.state.BUFFERING:h("bufferIcon");r=0;l=setInterval(function(){r+=j;a.html5.utils.animations.rotate(d.display_icon,r%360)},e);h("bufferIcon");break;case a.api.events.state.PAUSED:_css(d.display_image,{background:"transparent no-repeat center center"});h("playIcon");break;case a.api.events.state.IDLE:if(q.jwGetPlaylist()[q.jwGetItem()].image){_css(d.display_image,{display:"block"});d.display_image.src=a.html5.utils.getAbsolutePath(q.jwGetPlaylist()[q.jwGetItem()].image)}else{_css(d.display_image,{display:"none"});delete d.display_image.src}h("playIcon");break;default:if(q.jwGetMute()){_css(d.display_image,{display:"none"});delete d.display_image.src;h("muteIcon")}else{_css(d.display_image,{display:"none"});delete d.display_image.src;_hide(d.display_iconBackground);_hide(d.display_icon)}break}}return this}})(jwplayer);(function(jwplayer){jwplayer.html5.eventdispatcher=function(id,debug){var _id=id;var _debug=debug;var _listeners;var _globallisteners;this.resetEventListeners=function(){_listeners={};_globallisteners=[]};this.resetEventListeners();this.addEventListener=function(type,listener,count){try{if(_listeners[type]===undefined){_listeners[type]=[]}if(typeof(listener)=="string"){eval("listener = "+listener)}_listeners[type].push({listener:listener,count:count})}catch(err){jwplayer.html5.utils.log("error",err)}return false};this.removeEventListener=function(type,listener){try{for(var lisenterIndex in _listeners[type]){if(_listeners[type][lisenterIndex].toString()==listener.toString()){_listeners[type].slice(lisenterIndex,lisenterIndex+1);break}}}catch(err){jwplayer.html5.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.html5.utils.log("error",err)}return false};this.removeGlobalListener=function(listener){try{for(var lisenterIndex in _globallisteners){if(_globallisteners[lisenterIndex].toString()==listener.toString()){_globallisteners.slice(lisenterIndex,lisenterIndex+1);break}}}catch(err){jwplayer.html5.utils.log("error",err)}return false};this.sendEvent=function(type,data){if(data===undefined){data={}}jwplayer.utils.extend(data,{id:_id,version:jwplayer.html5.version,type:type});if(_debug){jwplayer.html5.utils.log(type,data)}for(var listenerIndex in _listeners[type]){try{_listeners[type][listenerIndex].listener(data)}catch(err){jwplayer.html5.utils.log("There was an error while handling a listener",_listeners[type][listenerIndex].listener,err)}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 in _globallisteners){try{_globallisteners[globalListenerIndex].listener(data)}catch(err){jwplayer.html5.utils.log("There was an error while handling a listener",_globallisteners[globalListenerIndex].listener,err)}if(_globallisteners[globalListenerIndex].count===1){delete _globallisteners[globalListenerIndex]}else{if(_globallisteners[globalListenerIndex].count>0){_globallisteners[globalListenerIndex].count=_globallisteners[globalListenerIndex].count-1}}}}}})(jwplayer);(function(a){a.html5.extensionmap={"3gp":"video/3gpp","3gpp":"video/3gpp","3g2":"video/3gpp2","3gpp2":"video/3gpp2",flv:"video/x-flv",f4a:"audio/mp4",f4b:"audio/mp4",f4p:"video/mp4",f4v:"video/mp4",mov:"video/quicktime",m4a:"audio/mp4",m4b:"audio/mp4",m4p:"audio/mp4",m4v:"video/mp4",mkv:"video/x-matroska",mp4:"video/mp4",sdp:"application/sdp",vp6:"video/x-vp6",aac:"audio/aac",mp3:"audio/mp3",ogg:"audio/ogg",ogv:"video/ogg",webm:"video/webm"}})(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:3,hide:true,position:"bottom-left"};_css=a.html5.utils.css;a.html5.logo=function(g,h){var l=g;var j;if(b.prefix){var i=g.version.split(/\W/).splice(0,2).join("/");if(b.prefix.indexOf(i)<0){b.prefix+=i+"/"}}if(h.position==a.html5.view.positions.OVER){h.position=b.position}var f=a.utils.extend({},b,h);if(!f.file){return}var c=document.createElement("img");c.id=l.id+"_jwplayer_logo";c.style.display="none";c.onload=function(n){_css(c,k());l.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,m)};if(f.file.indexOf("http://")===0){c.src=f.file}else{c.src=f.prefix+f.file}c.onmouseover=function(n){c.style.opacity=f.over;d()};c.onmouseout=function(n){c.style.opacity=f.out;d()};c.onclick=e;function k(){var p={textDecoration:"none",position:"absolute"};p.display=f.hide?"none":"block";var o=f.position.toLowerCase().split("-");for(var n in o){p[o[n]]=f.margin}return p}this.resize=function(o,n){};this.getDisplayElement=function(){return c};function e(n){n.stopPropagation();window.open(f.link,"_blank");return}function d(){if(j){clearTimeout(j)}j=setTimeout(function(){a.html5.utils.fadeTo(c,0,0.1,parseFloat(c.style.opacity))},f.timeout*1000)}function m(n){switch(l.jwGetState()){case a.api.events.state.BUFFERING:c.style.display="block";c.style.opacity=f.out;if(f.hide){d()}break;case a.api.events.state.PAUSED:break;case a.api.events.state.IDLE:break;case a.api.events.state.PLAYING:break;default:if(f.hide){d()}break}}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 b=a.html5.utils.css;a.html5.mediavideo=function(f,C){var G={abort:t,canplay:m,canplaythrough:m,durationchange:q,emptied:t,ended:m,error:l,loadeddata:q,loadedmetadata:q,loadstart:m,pause:m,play:J,playing:m,progress:z,ratechange:t,seeked:m,seeking:m,stalled:m,suspend:m,timeupdate:J,volumechange:t,waiting:m,canshowcurrentframe:t,dataunavailable:t,empty:t,load:e,loadedfirstframe:t};var H=new a.html5.eventdispatcher();a.utils.extend(this,H);var h=f;var x=C;var D;var F;var d=a.api.events.state.IDLE;var A=null;var n;var g=0;var y=false;var r=false;var L;var K;var i=[];var M;var B=false;function v(){return d}function e(N){}function t(N){}function m(N){if(c[N.type]){s(c[N.type])}}function s(N){if(B){return}if(n){N=a.api.events.state.IDLE}if(N==a.api.events.state.PAUSED&&d==a.api.events.state.IDLE){return}if(d!=N){var O=d;h.state=N;d=N;var P=false;if(N==a.api.events.state.IDLE){p();if(h.position>=h.duration&&(h.position||h.duration)){P=true}if(x.style.display!="none"&&!h.config.chromeless){x.style.display="none"}}H.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE,{oldstate:O,newstate:N});if(P){H.sendEvent(a.api.events.JWPLAYER_MEDIA_COMPLETE)}}n=false}function q(N){var O={height:N.target.videoHeight,width:N.target.videoWidth,duration:Math.round(N.target.duration*10)/10};if(h.duration===0||isNaN(h.duration)){h.duration=Math.round(N.target.duration*10)/10}h.playlist[h.item]=a.utils.extend(h.playlist[h.item],O);H.sendEvent(a.api.events.JWPLAYER_MEDIA_META,{metadata:O})}function J(O){if(n){return}if(O!==undefined&&O.target!==undefined){if(h.duration===0||isNaN(h.duration)){h.duration=Math.round(O.target.duration*10)/10}if(!y&&x.readyState>0){s(a.api.events.state.PLAYING)}if(d==a.api.events.state.PLAYING){if(!y&&x.readyState>0){y=true;try{x.currentTime=h.playlist[h.item].start}catch(N){}x.volume=h.volume/100;x.muted=h.mute}h.position=Math.round(O.target.currentTime*10)/10;H.sendEvent(a.api.events.JWPLAYER_MEDIA_TIME,{position:Math.round(O.target.currentTime*10)/10,duration:Math.round(O.target.duration*10)/10})}}z(O)}function E(){var N=(i[i.length-1]-i[0])/i.length;M=setTimeout(function(){if(!F){z({lengthComputable:true,loaded:1,total:1})}},N*10)}function z(P){var O,N;if(P!==undefined&&P.lengthComputable&&P.total){o();O=P.loaded/P.total*100;N=O/100*(h.duration-x.currentTime);if(50<O&&!F){clearTimeout(M);E()}}else{if((x.buffered!==undefined)&&(x.buffered.length>0)){maxBufferIndex=0;if(maxBufferIndex>=0){O=x.buffered.end(maxBufferIndex)/x.duration*100;N=x.buffered.end(maxBufferIndex)-x.currentTime}}}if(D===false&&d==a.api.events.state.BUFFERING){D=true;H.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL)}if(!F){if(O==100&&F===false){F=true}if(O!==null&&(O>h.buffer)){h.buffer=Math.round(O);H.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:Math.round(O)})}}}function w(){if(A===null){A=setInterval(function(){J()},100)}}function p(){clearInterval(A);A=null}function l(P){var O="There was an error: ";if((P.target.error&&P.target.tagName.toLowerCase()=="video")||P.target.parentNode.error&&P.target.parentNode.tagName.toLowerCase()=="video"){var N=P.target.error===undefined?P.target.parentNode.error:P.target.error;switch(N.code){case N.MEDIA_ERR_ABORTED:O="You aborted the video playback: ";break;case N.MEDIA_ERR_NETWORK:O="A network error caused the video download to fail part-way: ";break;case N.MEDIA_ERR_DECODE:O="The video playback was aborted due to a corruption problem or because the video used features your browser did not support: ";break;case N.MEDIA_ERR_SRC_NOT_SUPPORTED:O="The video could not be loaded, either because the server or network failed or because the format is not supported: ";break;default:O="An unknown error occurred: ";break}}else{if(P.target.tagName.toLowerCase()=="source"){K--;if(K>0){return}O="The video could not be loaded, either because the server or network failed or because the format is not supported: "}else{a.html5.utils.log("Erroneous error received. Continuing...");return}}u();O+=j();B=true;H.sendEvent(a.api.events.JWPLAYER_ERROR,{error:O});return}function j(){var P="";for(var O in L.levels){var N=L.levels[O];var Q=x.ownerDocument.createElement("source");P+=a.html5.utils.getAbsolutePath(N.file);if(O<(L.levels.length-1)){P+=", "}}return P}this.getDisplayElement=function(){return x};this.play=function(){if(d!=a.api.events.state.PLAYING){if(x.style.display!="block"){x.style.display="block"}x.play();w()}};this.pause=function(){x.pause();s(a.api.events.state.PAUSED)};this.seek=function(N){if(!(h.duration===0||isNaN(h.duration))&&!(h.position===0||isNaN(h.position))){x.currentTime=N;x.play()}};function u(){x.pause();p();h.position=0;n=true;s(a.api.events.state.IDLE)}this.stop=u;this.volume=function(N){x.volume=N/100;h.volume=N;H.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(N)})};this.mute=function(N){x.muted=N;h.mute=N;H.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE,{mute:N})};this.resize=function(O,N){if(false){b(x,{width:O,height:N})}H.sendEvent(a.api.events.JWPLAYER_MEDIA_RESIZE,{fullscreen:h.fullscreen,width:O,hieght:N})};this.fullscreen=function(N){if(N===true){this.resize("100%","100%")}else{this.resize(h.config.width,h.config.height)}};this.load=function(N){I(N);H.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);D=false;F=false;y=false;if(!h.config.chromeless){i=[];o();s(a.api.events.state.BUFFERING);setTimeout(function(){J()},25)}};function o(){var N=new Date().getTime();i.push(N)}this.hasChrome=function(){return r};function I(U){h.duration=U.duration;r=false;L=U;var P=document.createElement("video");P.preload="none";B=false;K=0;for(var O in U.levels){var N=U.levels[O];if(a.html5.utils.isYouTube(N.file)){delete P;k(N.file);return}var Q;if(N.type===undefined){var T=a.html5.utils.extension(N.file);if(a.html5.extensionmap[T]!==undefined){Q=a.html5.extensionmap[T]}else{Q="video/"+T+";"}}else{Q=N.type}if(P.canPlayType(Q)===""){continue}var S=x.ownerDocument.createElement("source");S.src=a.html5.utils.getAbsolutePath(N.file);S.type=Q;K++;P.appendChild(S)}if(K===0){B=true;H.sendEvent(a.api.events.JWPLAYER_ERROR,{error:"The video could not be loaded because the format is not supported by your browser: "+j()})}if(h.config.chromeless){P.poster=a.html5.utils.getAbsolutePath(U.image);P.controls="controls"}P.style.position=x.style.position;P.style.top=x.style.top;P.style.left=x.style.left;P.style.width=x.style.width;P.style.height=x.style.height;P.style.zIndex=x.style.zIndex;P.onload=e;P.volume=0;x.parentNode.replaceChild(P,x);P.id=x.id;x=P;for(var R in G){x.addEventListener(R,function(V){if(V.target.parentNode!==null){G[V.type](V)}},true)}}function k(R){var O=document.createElement("object");R=["http://www.youtube.com/v/",R.replace(/^[^v]+v.(.{11}).*/,"$1"),"&amp;hl=en_US&amp;fs=1&autoplay=1"].join("");var U={movie:R,allowFullScreen:"true",allowscriptaccess:"always"};for(var N in U){var S=document.createElement("param");S.name=N;S.value=U[N];O.appendChild(S)}var T=document.createElement("embed");var P={src:R,type:"application/x-shockwave-flash",allowscriptaccess:"always",allowfullscreen:"true",width:document.getElementById(f.id).style.width,height:document.getElementById(f.id).style.height};for(var Q in P){T[Q]=P[Q]}O.appendChild(T);O.style.position=x.style.position;O.style.top=x.style.top;O.style.left=x.style.left;O.style.width=document.getElementById(f.id).style.width;O.style.height=document.getElementById(f.id).style.height;O.style.zIndex=2147483000;x.parentNode.replaceChild(O,x);O.id=x.id;x=O;r=true}this.embed=I;return this}})(jwplayer);(function(jwplayer){var _configurableStateVariables=["width","height","start","duration","volume","mute","fullscreen","item","plugins"];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:0,skin:undefined,file:undefined,image:undefined,start:0,duration:0,bufferlength:5,volume:90,mute:false,fullscreen:false,repeat:"none",autostart:false,debug:undefined,screencolor:undefined}};var _media;var _eventDispatcher=new jwplayer.html5.eventdispatcher();var _components=["display","logo","controlbar"];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.html5.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(config[path[edge]]===undefined){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(_model.plugins!==undefined){if(typeof _model.plugins=="string"){var userplugins=_model.plugins.split(",");for(var userplugin in userplugins){pluginorder.push(userplugin.replace(/^\s+|\s+$/g,""))}}else{for(var plugin in _model.plugins){pluginorder.push(plugin.replace(/^\s+|\s+$/g,""))}}}if(jwplayer.utils.isIOS()){_model.config.chromeless=true}if(_model.config.chromeless){pluginorder=[]}_model.plugins={order:pluginorder,config:{controlbar:{position:jwplayer.html5.view.positions.BOTTOM}},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=_model.config[pluginName]===undefined?{}:_model.config[pluginName];_model.plugins.config[pluginName]=_model.plugins.config[pluginName]===undefined?pluginConfig:jwplayer.utils.extend(_model.plugins.config[pluginName],pluginConfig);if(_model.plugins.config[pluginName].position===undefined){_model.plugins.config[pluginName].position=jwplayer.html5.view.positions.OVER}}_model.loadPlaylist=function(arg,ready){var input;if(typeof arg=="string"){try{input=eval(arg)}catch(err){input=arg}}else{input=arg}var config;switch(jwplayer.utils.typeOf(input)){case"object":config=input;break;case"array":config={playlist:input};break;default:config={file:input};break}_model.playlist=new jwplayer.html5.playlist(config);if(_model.config.shuffle){_model.item=_getShuffleItem()}else{if(_model.config.item>=_model.playlist.length){_model.config.item=_model.playlist.length-1}_model.item=_model.config.item}if(!ready){_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED);_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM,{item:_model.item})}_model.setActiveMediaProvider(_model.playlist[_model.item])};function _getShuffleItem(){var result=null;if(_model.playlist.length>1){while(result===null){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)}_model.setActiveMediaProvider=function(playlistItem){if(_media!==undefined){_media.resetEventListeners()}_media=new jwplayer.html5.mediavideo(_model,_container);_media.addGlobalListener(forward);if(_model.config.chromeless){_media.load(playlistItem)}return true};_model.getMedia=function(){return _media};_model.setupPlugins=function(){for(var plugin in _model.plugins.order){try{if(jwplayer.html5[_model.plugins.order[plugin]]!==undefined){_model.plugins.object[_model.plugins.order[plugin]]=new jwplayer.html5[_model.plugins.order[plugin]](_api,_model.plugins.config[_model.plugins.order[plugin]])}else{if(window[_model.plugins.order[plugin]]!==undefined){_model.plugins.object[_model.plugins.order[plugin]]=new window[_model.plugins.order[plugin]](_api,_model.plugins.config[_model.plugins.order[plugin]])}else{_model.plugins.order.splice(plugin,plugin+1)}}}catch(err){jwplayer.html5.utils.log("Could not setup "+_model.plugins.order[plugin])}}};return _model}})(jwplayer);(function(a){a.html5.playlist=function(b){var d=[];if(b.playlist&&b.playlist.length>0){for(var c in b.playlist){d.push(new a.html5.playlistitem(b.playlist[c]))}}else{d.push(new a.html5.playlistitem(b))}return d}})(jwplayer);(function(a){a.html5.playlistitem=function(c){var b={author:"",date:"",description:"",image:"",link:"",mediaid:"",tags:"",title:"",provider:"",file:"",streamer:"",duration:-1,start:0,currentLevel:-1,levels:[]};for(var d in b){if(c[d]!==undefined){b[d]=c[d]}}if(b.levels.length===0){b.levels[0]=new a.html5.playlistitemlevel(b)}return b}})(jwplayer);(function(a){a.html5.playlistitemlevel=function(b){var d={file:"",streamer:"",bitrate:0,width:0};for(var c in d){if(b[c]!==undefined){d[c]=b[c]}}return d}})(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.html5.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,n,i){var m={};var c=n;var j=i;var e=true;var h;var l=f;var q=false;function k(){if(l===undefined||l===""){d(a.html5.defaultSkin().xml)}else{a.utils.ajax(a.html5.utils.getAbsolutePath(l),function(r){d(r.responseXML)},function(r){d(a.html5.defaultSkin().xml)})}}function d(w){var C=w.getElementsByTagName("component");if(C.length===0){return}for(var F=0;F<C.length;F++){var A=C[F].getAttribute("name");var z={settings:{},elements:{},layout:{}};m[A]=z;var E=C[F].getElementsByTagName("elements")[0].getElementsByTagName("element");for(var D=0;D<E.length;D++){b(E[D],A)}var x=C[F].getElementsByTagName("settings")[0];if(x!==undefined&&x.childNodes.length>0){var I=x.getElementsByTagName("setting");for(var N=0;N<I.length;N++){var O=I[N].getAttribute("name");var G=I[N].getAttribute("value");var v=/color$/.test(O)?"color":null;m[A].settings[O]=a.html5.utils.typechecker(G,v)}}var J=C[F].getElementsByTagName("layout")[0];if(J!==undefined&&J.childNodes.length>0){var K=J.getElementsByTagName("group");for(var u=0;u<K.length;u++){var y=K[u];m[A].layout[y.getAttribute("position")]={elements:[]};for(var M=0;M<y.attributes.length;M++){var B=y.attributes[M];m[A].layout[y.getAttribute("position")][B.name]=B.value}var L=y.getElementsByTagName("*");for(var t=0;t<L.length;t++){var r=L[t];m[A].layout[y.getAttribute("position")].elements.push({type:r.tagName});for(var s=0;s<r.attributes.length;s++){var H=r.attributes[s];m[A].layout[y.getAttribute("position")].elements[t][H.name]=H.value}if(m[A].layout[y.getAttribute("position")].elements[t].name===undefined){m[A].layout[y.getAttribute("position")].elements[t].name=r.tagName}}}}e=false;p()}}function p(){clearInterval(h);if(!q){h=setInterval(function(){o()},100)}}function b(w,v){var u=new Image();var r=w.getAttribute("name");var t=w.getAttribute("src");var y;if(t.indexOf("data:image/png;base64,")===0){y=t}else{var s=a.html5.utils.getAbsolutePath(l);var x=s.substr(0,s.lastIndexOf("/"));y=[x,v,t].join("/")}m[v].elements[r]={height:0,width:0,src:"",ready:false};u.onload=function(z){g(u,r,v)};u.onerror=function(z){q=true;p();j()};u.src=y}function o(){for(var r in m){if(r!="properties"){for(var s in m[r].elements){if(!m[r].elements[s].ready){return}}}}if(e===false){clearInterval(h);c(m)}}function g(r,t,s){m[s].elements[t].height=r.height;m[s].elements[t].width=r.width;m[s].elements[t].src=r.src;m[s].elements[t].ready=true;p()}k()}})(jwplayer);(function(a){var b={};a.html5.utils.animations=function(){};a.html5.utils.animations.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d};a.html5.utils.animations.transformOrigin=function(c,d){c.style.webkitTransformOrigin=d;c.style.MozTransformOrigin=d;c.style.OTransformOrigin=d};a.html5.utils.animations.rotate=function(c,d){a.html5.utils.animations.transform(c,["rotate(",d,"deg)"].join(""))};a.html5.utils.cancelAnimation=function(c){delete b[c.id]};a.html5.utils.fadeTo=function(l,f,e,i,h,d){if(b[l.id]!=d&&d!==undefined){return}var c=new Date().getTime();if(d>c){setTimeout(function(){a.html5.utils.fadeTo(l,f,e,i,0,d)},d-c)}l.style.display="block";if(i===undefined){i=l.style.opacity===""?1:l.style.opacity}if(l.style.opacity==f&&l.style.opacity!==""&&d!==undefined){if(f===0){l.style.display="none"}return}if(d===undefined){d=c;b[l.id]=d}if(h===undefined){h=0}var j=(c-d)/(e*1000);j=j>1?1:j;var k=f-i;var g=i+(j*k);if(g>1){g=1}else{if(g<0){g=0}}l.style.opacity=g;if(h>0){b[l.id]=d+h*1000;a.html5.utils.fadeTo(l,f,e,i,0,b[l.id]);return}setTimeout(function(){a.html5.utils.fadeTo(l,f,e,i,0,d)},10)}})(jwplayer);(function(c){var d=new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);c.html5.utils.typechecker=function(g,f){f=f===null?b(g):f;return e(g,f)};function b(f){var g=["true","false","t","f"];if(g.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(f===null){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.html5.api=function(b,j){var i={};if(!a.utils.hasHTML5()){return i}var d=document.createElement("div");b.parentNode.replaceChild(d,b);d.id=b.id;i.version=a.html5.version;i.id=d.id;var h=new a.html5.model(i,d,j);var e=new a.html5.view(i,d,h);var g=new a.html5.controller(i,d,h,e);i.skin=new a.html5.skin();i.jwPlay=g.play;i.jwPause=g.pause;i.jwStop=g.stop;i.jwSeek=g.seek;i.jwPlaylistItem=g.item;i.jwPlaylistNext=g.next;i.jwPlaylistPrev=g.prev;i.jwResize=g.resize;i.jwLoad=g.load;function f(k){return function(){return h[k]}}i.jwGetItem=f("item");i.jwGetPosition=f("position");i.jwGetDuration=f("duration");i.jwGetBuffer=f("buffer");i.jwGetWidth=f("width");i.jwGetHeight=f("height");i.jwGetFullscreen=f("fullscreen");i.jwSetFullscreen=g.setFullscreen;i.jwGetVolume=f("volume");i.jwSetVolume=g.setVolume;i.jwGetMute=f("mute");i.jwSetMute=g.setMute;i.jwGetState=f("state");i.jwGetVersion=function(){return i.version};i.jwGetPlaylist=function(){return h.playlist};i.jwAddEventListener=g.addEventListener;i.jwRemoveEventListener=g.removeEventListener;i.jwSendEvent=g.sendEvent;i.jwGetLevel=function(){};i.jwGetBandwidth=function(){};i.jwGetLockState=function(){};i.jwLock=function(){};i.jwUnlock=function(){};function c(m,l,k){return function(){m.loadPlaylist(m.config,true);m.setupPlugins();l.setup(m.getMedia().getDisplayElement());var n={id:i.id,version:i.version};k.sendEvent(a.api.events.JWPLAYER_READY,n);if(playerReady!==undefined){playerReady(n)}if(window[m.config.playerReady]!==undefined){window[m.config.playerReady](n)}m.sendEvent(a.api.events.JWPLAYER_PLAYLIST_LOADED);m.sendEvent(a.api.events.JWPLAYER_PLAYLIST_ITEM,{item:m.config.item});if(m.config.autostart===true&&!m.config.chromeless){k.play()}}}if(h.config.chromeless){setTimeout(c(h,e,g),25)}else{i.skin.load(h.config.skin,c(h,e,g))}return i}})(jwplayer); 
  • trunk/js/test/examples/api.html

    r1364 r1410  
    33    <head> 
    44        <title>API</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/badfile.html

    r1326 r1410  
    33    <head> 
    44        <title>Invalid file path</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/badskin.html

    r1361 r1410  
    33    <head> 
    44        <title>Invalid skin path</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/chromeless.html

    r1369 r1410  
    33    <head> 
    44        <title>Chromeless</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/controlbar.html

    r1361 r1410  
    33    <head> 
    44        <title>Controlbar</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/custom_skin.html

    r1399 r1410  
    33    <head> 
    44        <title>Custom skin</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/failover.html

    r1407 r1410  
    33    <head> 
    44        <title>Multiple sources</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/filepathsabsolute.html

    r1399 r1410  
    33    <head> 
    44        <title>Absolute file paths</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/filepathsrelative.html

    r1399 r1410  
    33    <head> 
    44        <title>Relative file paths</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/filepathsroot.html

    r1399 r1410  
    33    <head> 
    44        <title>Root file paths</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/listeners.html

    r1361 r1410  
    33    <head> 
    44        <title>Listeners</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/load.html

    r1382 r1410  
    33    <head> 
    44        <title>Load</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/logo.html

    r1379 r1410  
    33    <head> 
    44        <title>Logo</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/mp4_ogg.html

    r1361 r1410  
    33    <head> 
    44        <title>Multiple sources</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/multiple_customs.html

    r1361 r1410  
    33    <head> 
    44        <title>Multiple custom players</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/multiple_players.html

    r1361 r1410  
    33    <head> 
    44        <title>Multiple Video Example</title> 
    5                 <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/nodoctype.html

    r1361 r1410  
    22    <head> 
    33        <title>No document type</title> 
    4         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    5         </script> 
    6         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     4        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    75        </script> 
    86    </head> 
  • trunk/js/test/examples/nofile.html

    r1326 r1410  
    33    <head> 
    44        <title>No file path</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/objectembed.html

    r1361 r1410  
    33    <head> 
    44        <title>Object and Embed Tags</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/playlist.html

    r1334 r1410  
    33    <head> 
    44        <title>Playlists</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/plugins.html

    r1379 r1410  
    33    <head> 
    44        <title>Plugins</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/resize.html

    r1365 r1410  
    33    <head> 
    44        <title>Resize</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/single_mp4.html

    r1361 r1410  
    33    <head> 
    44        <title>Single MP4 Example</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/single_ogg.html

    r1361 r1410  
    33    <head> 
    44        <title>Single OGV Example</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/videotag.html

    r1361 r1410  
    33    <head> 
    44        <title>Video Tag</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
  • trunk/js/test/examples/youtube.html

    r1314 r1410  
    33    <head> 
    44        <title>YouTube</title> 
    5         <script type="text/javascript" src="../../../js/bin-debug/jwplayer.js"> 
    6         </script> 
    7         <script type="text/javascript" src="../../bin-debug/jwplayer.html5.js"> 
     5        <script type="text/javascript" src="../../bin-debug/jwplayer.js"> 
    86        </script> 
    97    </head> 
Note: See TracChangeset for help on using the changeset viewer.