Changeset 1410
- Timestamp:
- 11/09/10 14:16:38 (3 years ago)
- Location:
- trunk
- Files:
-
- 1 deleted
- 29 edited
- 4 copied
-
html5 (deleted)
-
js/bin-debug/jwplayer.js (modified) (1 diff)
-
js/build/build.xml (modified) (2 diffs)
-
js/build/skin-builder.py (copied) (copied from trunk/html5/build/skin-builder.py) (1 diff)
-
js/doc/html5 (copied) (copied from trunk/html5/doc)
-
js/jwplayer.min.js (modified) (1 diff)
-
js/src/html5 (copied) (copied from trunk/html5/src/html5)
-
js/test/examples (copied) (copied from trunk/html5/test/examples)
-
js/test/examples/api.html (modified) (1 diff)
-
js/test/examples/badfile.html (modified) (1 diff)
-
js/test/examples/badskin.html (modified) (1 diff)
-
js/test/examples/chromeless.html (modified) (1 diff)
-
js/test/examples/controlbar.html (modified) (1 diff)
-
js/test/examples/custom_skin.html (modified) (1 diff)
-
js/test/examples/failover.html (modified) (1 diff)
-
js/test/examples/filepathsabsolute.html (modified) (1 diff)
-
js/test/examples/filepathsrelative.html (modified) (1 diff)
-
js/test/examples/filepathsroot.html (modified) (1 diff)
-
js/test/examples/listeners.html (modified) (1 diff)
-
js/test/examples/load.html (modified) (1 diff)
-
js/test/examples/logo.html (modified) (1 diff)
-
js/test/examples/mp4_ogg.html (modified) (1 diff)
-
js/test/examples/multiple_customs.html (modified) (1 diff)
-
js/test/examples/multiple_players.html (modified) (1 diff)
-
js/test/examples/nodoctype.html (modified) (1 diff)
-
js/test/examples/nofile.html (modified) (1 diff)
-
js/test/examples/objectembed.html (modified) (1 diff)
-
js/test/examples/playlist.html (modified) (1 diff)
-
js/test/examples/plugins.html (modified) (1 diff)
-
js/test/examples/resize.html (modified) (1 diff)
-
js/test/examples/single_mp4.html (modified) (1 diff)
-
js/test/examples/single_ogg.html (modified) (1 diff)
-
js/test/examples/videotag.html (modified) (1 diff)
-
js/test/examples/youtube.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/js/bin-debug/jwplayer.js
r1404 r1410 1168 1168 1169 1169 })(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"), "&hl=en_US&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 14 14 <fileset dir="${basedir}/src/api" includes="**/*.js" /> 15 15 <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" /> 16 23 </concat> 17 24 </target> 18 25 19 26 <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" /> 21 31 </target> 22 32 23 33 <target name="build-release" depends="concat"> 34 <replace file="${basedir}/jwplayer.min.js" token=", logoConfig);" value=");"/> 24 35 <java jar="${basedir}/build/yuicompressor-2.4.2.jar" fork="true"> 25 36 <arg line="'${basedir}/bin-debug/jwplayer.js'"/> … … 27 38 </java> 28 39 </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>35 40 </project> -
trunk/js/build/skin-builder.py
r988 r1410 3 3 import re 4 4 5 basePath = '../ assets'5 basePath = '../../../skins' 6 6 skinName = 'five' 7 7 skinPath = 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); 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);(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"),"&hl=en_US&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 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/badfile.html
r1326 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/badskin.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/chromeless.html
r1369 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/controlbar.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/custom_skin.html
r1399 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/failover.html
r1407 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/filepathsabsolute.html
r1399 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/filepathsrelative.html
r1399 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/filepathsroot.html
r1399 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/listeners.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/load.html
r1382 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/logo.html
r1379 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/mp4_ogg.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/multiple_customs.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/multiple_players.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/nodoctype.html
r1361 r1410 2 2 <head> 3 3 <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"> 7 5 </script> 8 6 </head> -
trunk/js/test/examples/nofile.html
r1326 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/objectembed.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/playlist.html
r1334 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/plugins.html
r1379 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/resize.html
r1365 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/single_mp4.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/single_ogg.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/videotag.html
r1361 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head> -
trunk/js/test/examples/youtube.html
r1314 r1410 3 3 <head> 4 4 <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"> 8 6 </script> 9 7 </head>
Note: See TracChangeset
for help on using the changeset viewer.
