Changeset 2180
- Timestamp:
- 05/02/12 09:37:17 (13 months ago)
- Location:
- branches/jw6
- Files:
-
- 1 deleted
- 13 edited
-
bin-debug/jwplayer.js (modified) (95 diffs)
-
jwplayer.min.js (modified) (1 diff)
-
src/js/html5/jwplayer.html5.controlbar.js (modified) (35 diffs)
-
src/js/html5/jwplayer.html5.controller.js (modified) (3 diffs)
-
src/js/html5/jwplayer.html5.display.js (modified) (16 diffs)
-
src/js/html5/jwplayer.html5.model.js (modified) (2 diffs)
-
src/js/html5/jwplayer.html5.player.js (modified) (3 diffs)
-
src/js/html5/jwplayer.html5.setup.js (modified) (6 diffs)
-
src/js/html5/jwplayer.html5.video.js (modified) (10 diffs)
-
src/js/html5/jwplayer.html5.view.js (modified) (15 diffs)
-
src/js/utils/jwplayer.utils.js (modified) (4 diffs)
-
src/js/utils/jwplayer.utils.strings.js (modified) (1 diff)
-
test/animations.html (deleted)
-
test/controller.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/jw6/bin-debug/jwplayer.js
r2179 r2180 57 57 } 58 58 59 var _styleSheet; 60 var _rules = {} 61 62 /** 63 * @param {Object} or {String} domelement If domelement is a string, create a document-wide CSS rule for that string 64 * @param {Object} styles 65 */ 66 utils.css = function(domelement, styles) { 67 if (utils.exists(domelement)) { 68 for (var style in styles) { 69 try { 70 if (typeof styles[style] === "undefined") { 71 continue; 72 } else if (typeof styles[style] == "number" && !(style == "zIndex" || style == "opacity")) { 73 if (isNaN(styles[style])) { 74 continue; 75 } 76 if (style.match(/color/i)) { 77 styles[style] = "#" + utils.strings.pad(styles[style].toString(16), 6); 78 } else { 79 styles[style] = Math.ceil(styles[style]) + "px"; 80 } 81 } 82 if (styles[style]) { 83 domelement.style[style] = styles[style]; 84 } 85 } catch (err) { 86 } 87 } 88 } 89 }; 90 91 var foo =false; 92 93 utils.appendStylesheet = function(selector, styles) { 94 if (!_styleSheet) { 95 _styleSheet = DOCUMENT.createElement("style"); 96 _styleSheet.type = "text/css"; 97 DOCUMENT.getElementsByTagName('head')[0].appendChild(_styleSheet); 59 var _styleSheets={}, 60 _rules = {}; 61 62 utils.css = function(selector, styles) { 63 if (!_styleSheets[selector]) { 64 var styleSheet = DOCUMENT.createElement("style"); 65 styleSheet.type = "text/css"; 66 DOCUMENT.getElementsByTagName('head')[0].appendChild(styleSheet); 67 _styleSheets[selector] = styleSheet; 98 68 } 99 69 … … 111 81 } 112 82 113 _updateStylesheet( );83 _updateStylesheet(selector); 114 84 } 115 85 … … 141 111 } 142 112 143 function _updateStylesheet() { 144 if (_styleSheet) { 145 var ruleText = ""; 146 for (var rule in _rules) { 147 var styles = _rules[rule]; 148 ruleText += rule + "{\n"; 149 for (var style in styles) { 150 ruleText += " "+style + ": " + styles[style] + ";\n"; 151 } 152 ruleText += "}\n"; 153 } 154 _styleSheet.innerHTML = ruleText; 113 function _updateStylesheet(selector) { 114 if (_styleSheets[selector]) { 115 var ruleText = selector + "{\n"; 116 var styles = _rules[selector]; 117 for (var style in styles) { 118 ruleText += " "+style + ": " + styles[style] + ";\n"; 119 } 120 ruleText += "}\n"; 121 _styleSheets[selector].innerHTML = ruleText; 155 122 } 156 123 } … … 166 133 } 167 134 } 168 _updateStylesheet(); 135 for (var selector in _styleSheets) { 136 if (selector.indexOf(filter) >= 0) { 137 _styleSheets[selector].innerHTML = ''; 138 } 139 } 169 140 } 170 141 … … 617 588 } 618 589 } 619 } 620 590 }; 591 592 /** Returns the extension of a file name * */ 593 strings.extension = function(path) { 594 if (!path) { return ""; } 595 path = path.substring(path.lastIndexOf("/") + 1, path.length).split("?")[0]; 596 if (path.lastIndexOf('.') > -1) { 597 return path.substr(path.lastIndexOf('.') + 1, path.length).toLowerCase(); 598 } 599 }; 600 621 601 })(jwplayer.utils); 622 602 /** … … 1201 1181 _events = jwplayer.events, 1202 1182 _states = jwplayer.events.state, 1203 _ style = _utils.appendStylesheet,1183 _css = _utils.css, 1204 1184 1205 1185 /** Controlbar element types **/ … … 1219 1199 JW_CSS_RIGHT = "right", 1220 1200 JW_CSS_100PCT = "100%", 1221 JW_CSS_SMOOTH_EASE = "width .25s linear, left .25s linear, opacity .25s, background .25s" 1201 JW_CSS_SMOOTH_EASE = "width .25s linear, left .25s linear, opacity .25s, background .25s", 1222 1202 1223 1203 CB_CLASS = '.jwcontrolbar', … … 1239 1219 // buttoncolor : parseInt("ffffff", 16), 1240 1220 // position : html5.view.positions.BOTTOM, 1241 // position: "OVER",1242 1221 // idlehide : false, 1243 1222 // hideplaylistcontrols : false, … … 1311 1290 _duration, 1312 1291 _currentVolume, 1292 _dragging = false, 1293 _lastSeekTime = 0, 1313 1294 1314 1295 _toggles = { … … 1336 1317 volume: _volume 1337 1318 }; 1338 1339 1340 1319 1341 1320 function _init() { … … 1394 1373 case _states.BUFFERING: 1395 1374 case _states.PLAYING: 1396 if (_elements['timeSliderThumb']) { 1397 _elements['timeSliderThumb'].style.opacity = 1; 1398 } 1375 _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 1 }); 1399 1376 _toggleButton("play", true); 1400 1377 break; … … 1406 1383 case _states.IDLE: 1407 1384 _toggleButton("play", false); 1408 if (_elements['timeSliderThumb']) { 1409 _elements['timeSliderThumb'].style.opacity = 0; 1410 } 1385 _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 0 }); 1411 1386 if (_elements["timeRail"]) { 1412 1387 _elements["timeRail"].className = "jwrail"; … … 1420 1395 break; 1421 1396 case _states.COMPLETED: 1422 _c ontrolbar.style.opacity = 0;1397 _css(_internalSelector(), { opacity: 0 }); 1423 1398 break; 1424 1399 } … … 1448 1423 function _createStyles() { 1449 1424 _utils.clearCss('#'+_id); 1450 1451 _ style('#'+_id, {1425 1426 _css('#'+_id, { 1452 1427 height: _getSkinElement("background").height, 1453 bottom: _settings. position == "OVER"? _settings.margin : 0,1454 left: _settings. position == "OVER"? _settings.margin : 0,1455 right: _settings. position == "OVER"? _settings.margin : 01428 bottom: _settings.margin ? _settings.margin : 0, 1429 left: _settings.margin ? _settings.margin : 0, 1430 right: _settings.margin ? _settings.margin : 0 1456 1431 }); 1457 1432 1458 _ style(_internalSelector(".jwtext"), {1433 _css(_internalSelector(".jwtext"), { 1459 1434 font: _settings.fontsize + "px/" + _getSkinElement("background").height + "px " + _settings.font, 1460 1435 color: _settings.fontcolor, … … 1535 1510 } 1536 1511 1537 _ style(_internalSelector('.jw'+name), _utils.extend(newStyle, style));1512 _css(_internalSelector('.jw'+name), _utils.extend(newStyle, style)); 1538 1513 _elements[name] = element; 1539 1514 return element; … … 1570 1545 } 1571 1546 1572 _ style(selector, {1547 _css(selector, { 1573 1548 width: out.width, 1574 1549 background: 'url('+ out.src +') center no-repeat' … … 1576 1551 1577 1552 if (over.src) { 1578 _ style(selector + ':hover', {1553 _css(selector + ':hover', { 1579 1554 background: 'url('+ over.src +') center no-repeat' 1580 1555 }); … … 1612 1587 1613 1588 function _seek(pct) { 1614 if (!_dragging) {1615 _api.jwPlay();1616 }1617 1589 _api.jwSeek(pct * _duration); 1618 1590 } … … 1661 1633 } 1662 1634 1663 _ style(_internalSelector('.jw'+name), css);1635 _css(_internalSelector('.jw'+name), css); 1664 1636 element.innerHTML = "00:00"; 1665 1637 _elements[name] = element; … … 1671 1643 var element = _createSpan(); 1672 1644 element.className = "jwblankDivider"; 1673 _ style(element, {1645 _css(element, { 1674 1646 width: parseInt(divider.width) 1675 1647 }); … … 1697 1669 if (capLeft) slider.appendChild(capRight); 1698 1670 1699 _ style(_internalSelector(".jw" + name + " .jwrail"), {1671 _css(_internalSelector(".jw" + name + " .jwrail"), { 1700 1672 left: _getSkinElement(name+"SliderCapLeft").width, 1701 1673 right: _getSkinElement(name+"SliderCapRight").width, … … 1732 1704 var thumb = _buildImage(name + "SliderThumb"); 1733 1705 if (thumb) { 1706 _css(_internalSelector('.'+thumb.className), { opacity: 0 }); 1734 1707 thumb.className += " jwthumb"; 1735 thumb.style.opacity = 0;1736 1708 rail.appendChild(thumb); 1737 1709 } … … 1744 1716 } 1745 1717 1746 var _dragging; 1747 1718 function _idle() { 1719 var currentState = _api.jwGetState(); 1720 return (currentState == _states.IDLE || currentState == _states.COMPLETED); 1721 } 1722 1748 1723 function _sliderMouseDown(name) { 1749 1724 return (function(evt) { … … 1755 1730 if (name == "time") { 1756 1731 if (!_idle()) { 1732 _api.jwSeekDrag(true); 1757 1733 _dragging = name; 1758 1734 } … … 1763 1739 } 1764 1740 1765 function _idle() {1766 var currentState = _api.jwGetState();1767 return (currentState == _states.IDLE || currentState == _states.COMPLETED);1768 }1769 1770 var _lastSeekTime = 0;1771 1772 1741 function _sliderMouseEvent(evt) { 1773 1742 if (!_dragging || evt.button != 0) { … … 1781 1750 if (evt.type == 'mouseup') { 1782 1751 var name = _dragging; 1752 1753 if (name == "time") { 1754 _api.jwSeekDrag(false); 1755 } 1756 1783 1757 _elements[name+'Rail'].className = "jwrail jwsmooth"; 1784 1758 _dragging = null; … … 1792 1766 var currentTime = (new Date()).getTime(); 1793 1767 if (currentTime - _lastSeekTime > 500) { 1794 _api.jwPause();1795 1768 _lastSeekTime = currentTime; 1796 1769 _sliderMapping[_dragging](pct); … … 1802 1775 function _styleTimeSlider(slider) { 1803 1776 if (_elements['timeSliderThumb']) { 1804 _ style(_internalSelector(".jwtimeSliderThumb"), {1777 _css(_internalSelector(".jwtimeSliderThumb"), { 1805 1778 'margin-left': (_getSkinElement("timeSliderThumb").width/-2) 1806 1779 }); … … 1817 1790 railWidth = _getSkinElement("volumeSliderRail").width; 1818 1791 1819 _ style(_internalSelector(".jwvolume"), {1792 _css(_internalSelector(".jwvolume"), { 1820 1793 width: (capLeftWidth + railWidth + capRightWidth) 1821 1794 }); … … 1832 1805 _controlbar.appendChild(_groups.right); 1833 1806 1834 _ style(_internalSelector(".jwright"), {1807 _css(_internalSelector(".jwright"), { 1835 1808 right: _getSkinElement("capRight").width 1836 1809 }); … … 1859 1832 1860 1833 var _resize = this.resize = function(width, height) { 1861 _ style(_internalSelector('.jwgroup.jwcenter'), {1834 _css(_internalSelector('.jwgroup.jwcenter'), { 1862 1835 left: Math.round(_utils.parseDimension(_groups.left.offsetWidth) + _getSkinElement("capLeft").width), 1863 1836 right: Math.round(_utils.parseDimension(_groups.right.offsetWidth) + _getSkinElement("capRight").width) … … 1871 1844 function _setBuffer(pct) { 1872 1845 pct = Math.min(Math.max(0, pct), 1); 1873 _elements['timeSliderBuffer'].style.width = pct * 100 + "%"; 1874 } 1875 1876 function _sliderPercent(name, pct, fixedWidth) { 1877 if (!_elements[name]) return; 1878 1879 pct = Math.min(Math.max(0, pct), 1); 1880 1881 var progress = _elements[name+'SliderProgress']; 1882 var thumb = _elements[name+'SliderThumb']; 1883 var width = 100 * pct + "%"; 1884 1885 if (progress) { 1886 progress.style.width = width; 1887 } 1888 if (thumb) { 1889 thumb.style.left = width; 1890 } 1846 _css(_internalSelector('.jwtimeSliderBuffer'), { width: pct * 100 + "%" }); 1847 } 1848 1849 function _sliderPercent(prefix, pct, fixedWidth) { 1850 var width = 100 * Math.min(Math.max(0, pct), 1) + "%"; 1851 _css(_internalSelector(prefix+'Progress'), { width: width }); 1852 _css(_internalSelector(prefix+'Thumb'), { left: width }); 1891 1853 } 1892 1854 1893 1855 function _setVolume (pct) { 1894 _sliderPercent(' volume', pct, true);1856 _sliderPercent('.jwvolumeSlider', pct, true); 1895 1857 } 1896 1858 1897 1859 function _setProgress(pct) { 1898 _sliderPercent(' time', pct);1860 _sliderPercent('.jwtimeSlider', pct); 1899 1861 } 1900 1862 … … 1914 1876 } 1915 1877 1878 this.show = function() { 1879 _css(_internalSelector(), { opacity: 1 }); 1880 } 1881 1882 this.hide = function() { 1883 _css(_internalSelector(), { opacity: 0 }); 1884 } 1885 1916 1886 // Call constructor 1917 1887 _init(); … … 1924 1894 *************************************************************/ 1925 1895 1926 _ style(CB_CLASS, {1896 _css(CB_CLASS, { 1927 1897 position: JW_CSS_ABSOLUTE, 1928 1898 overflow: 'hidden', … … 1932 1902 }) 1933 1903 1934 _ style(CB_CLASS+' span',{1904 _css(CB_CLASS+' span',{ 1935 1905 height: JW_CSS_100PCT, 1936 1906 '-webkit-user-select': JW_CSS_NONE, … … 1940 1910 }); 1941 1911 1942 _ style(CB_CLASS+' .jwgroup', {1912 _css(CB_CLASS+' .jwgroup', { 1943 1913 display: JW_CSS_INLINE 1944 1914 }); 1945 1915 1946 _ style(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', {1916 _css(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', { 1947 1917 position: JW_CSS_RELATIVE, 1948 1918 'float': JW_CSS_LEFT 1949 1919 }); 1950 1920 1951 _ style(CB_CLASS+' .jwright', {1921 _css(CB_CLASS+' .jwright', { 1952 1922 position: JW_CSS_ABSOLUTE 1953 1923 }); 1954 1924 1955 _ style(CB_CLASS+' .jwcenter', {1925 _css(CB_CLASS+' .jwcenter', { 1956 1926 position: JW_CSS_ABSOLUTE 1957 1927 }); 1958 1928 1959 _ style(CB_CLASS+' button', {1929 _css(CB_CLASS+' button', { 1960 1930 display: JW_CSS_INLINE_BLOCK, 1961 1931 height: JW_CSS_100PCT, … … 1967 1937 }); 1968 1938 1969 _ style(CB_CLASS+' .jwcapRight', {1939 _css(CB_CLASS+' .jwcapRight', { 1970 1940 right: 0, 1971 1941 position: JW_CSS_ABSOLUTE 1972 1942 }); 1973 1943 1974 _ style(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', {1944 _css(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', { 1975 1945 position: JW_CSS_ABSOLUTE, 1976 1946 height: JW_CSS_100PCT, … … 1981 1951 1982 1952 1983 _ style(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', {1953 _css(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', { 1984 1954 position: JW_CSS_ABSOLUTE, 1985 1955 height: JW_CSS_100PCT, … … 1987 1957 }); 1988 1958 1989 _ style(CB_CLASS + ' .jwtime .jwsmooth span', {1959 _css(CB_CLASS + ' .jwtime .jwsmooth span', { 1990 1960 '-webkit-transition': JW_CSS_SMOOTH_EASE, 1991 1961 '-moz-transition': JW_CSS_SMOOTH_EASE, … … 1993 1963 }); 1994 1964 1995 _ style(CB_CLASS + ' .jwdivider+.jwdivider', {1965 _css(CB_CLASS + ' .jwdivider+.jwdivider', { 1996 1966 display: JW_CSS_NONE 1997 1967 }); 1998 1968 1999 _ style(CB_CLASS + ' .jwtext', {1969 _css(CB_CLASS + ' .jwtext', { 2000 1970 padding: '0 5px', 2001 1971 'text-align': 'center' 2002 1972 }); 2003 1973 2004 _ style(CB_CLASS + ' .jwtoggling', {1974 _css(CB_CLASS + ' .jwtoggling', { 2005 1975 '-webkit-transition': JW_CSS_NONE, 2006 1976 '-moz-transition': JW_CSS_NONE, … … 2041 2011 } 2042 2012 2043 var file;2044 2045 2013 function _load(item) { 2046 if (_model.state == _states.PLAYING || _model.state == _states.BUFFERING) { 2047 _video.stop(); 2048 } 2014 _stop(); 2049 2015 2050 2016 switch (_utils.typeOf(item)) { 2051 2017 case "string": 2052 file = item; 2018 _model.setPlaylist(new html5.playlist({file:item})); 2019 _model.setItem(0); 2053 2020 break; 2054 2021 case "object": 2055 file = item.file; 2022 case "array": 2023 _model.setPlaylist(new html5.playlist(item)); 2024 _model.setItem(0); 2056 2025 break; 2057 2026 case "number": 2058 file = _model.playlist[item].file;2027 _model.setItem(item); 2059 2028 break; 2060 default:2061 file = _model.playlist[_model.item].file;2062 2029 } 2063 2030 2064 // if (_video.getTag().canPlayType("video/mp4")) {2065 // file = "http://playertest.longtailvideo.com/bunny.mp4";2066 // } else if (_video.getTag().canPlayType("video/webm")) {2067 // file = "http://playertest.longtailvideo.com/bunny.webm";2068 // } else {2069 // file = "http://playertest.longtailvideo.com/bunny.ogv";2070 // }2071 // if (_utils.isMobile()) {2072 // _video.load(file);2073 // }2074 2031 } 2075 2032 2076 2033 function _play() { 2077 2034 if (_model.state == _states.IDLE) { 2078 _video.load( file);2035 _video.load(_model.playlist[_model.item]); 2079 2036 } else if (_model.state == _states.PAUSED) { 2080 2037 _video.play(); … … 2109 2066 } 2110 2067 2111 2112 function _item(item) { 2113 _stop(); 2114 _model.setItem(item); 2068 function _setStretching(stretching) { 2069 _model.stretching = stretching; 2070 _view.resize(); 2071 } 2072 2073 function _item(index) { 2115 2074 _load(_model.item); 2116 2075 _play(); … … 2144 2103 this.setMute = _waitForReady(_setMute); 2145 2104 this.setFullscreen = _waitForReady(_setFullscreen); 2105 this.setStretching = _waitForReady(_setStretching); 2146 2106 2147 2107 /* this.playerReady = _playerReady; … … 2191 2151 var _utils = jwplayer.utils, 2192 2152 _css = _utils.css, 2193 _style = _utils.appendStylesheet,2194 2153 _events = jwplayer.events, 2195 2154 _states = _events.state, 2196 2155 _rotate = html5.utils.animations.rotate, 2197 2156 2157 2158 DOCUMENT = document, 2198 2159 D_CLASS = ".jwdisplay", 2160 D_PREVIEW_CLASS = ".jwpreview", 2199 2161 2200 2162 /** Some CSS constants we should use for minimization **/ … … 2208 2170 //JW_CSS_RIGHT = "right", 2209 2171 JW_CSS_100PCT = "100%", 2210 JW_CSS_SMOOTH_EASE = "opacity . 5s, background .5s";2172 JW_CSS_SMOOTH_EASE = "opacity .25s"; 2211 2173 2212 2174 … … 2214 2176 var _api = api, 2215 2177 _skin = api.skin, 2216 _display, 2217 _config = config ? config : {}, 2218 _image, _imageWidth, _imageHeight, 2178 _display, _preview, 2179 _image, _imageWidth, _imageHeight, _imageURL, 2219 2180 _icons = {}, 2220 2181 _hiding, … … 2222 2183 _degreesRotated, 2223 2184 _rotationInterval, 2224 _bufferRotation = !_utils.exists(config.bufferrotation) ? 15 : parseInt(config.bufferrotation, 10), 2225 _bufferInterval = !_utils.exists(config.bufferinterval) ? 100 : parseInt(config.bufferinterval, 10); 2185 _config = _utils.extend({ 2186 backgroundcolor: '#000' 2187 }, config); 2188 _bufferRotation = !_utils.exists(_config.bufferrotation) ? 15 : parseInt(_config.bufferrotation, 10), 2189 _bufferInterval = !_utils.exists(_config.bufferinterval) ? 100 : parseInt(_config.bufferinterval, 10); 2226 2190 2227 2191 function _init() { … … 2230 2194 _display.className = "jwdisplay"; 2231 2195 2196 _preview = DOCUMENT.createElement("div"); 2197 _preview.className = "jwpreview"; 2198 _display.appendChild(_preview); 2199 2232 2200 _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 2233 2201 _api.jwAddEventListener(_events.JWPLAYER_PLAYLIST_ITEM, _itemHandler); … … 2238 2206 2239 2207 _stateHandler({newstate:_states.IDLE}); 2240 2241 2208 } 2242 2209 … … 2304 2271 } 2305 2272 2306 _ style(selector, {2273 _css(selector, { 2307 2274 width: out.width, 2308 2275 height: out.height, … … 2313 2280 2314 2281 if (over && over.src) { 2315 _ style(selector + ".jwhover", {2282 _css(selector + ".jwhover", { 2316 2283 background: 'url('+ over.src +') center no-repeat' 2317 2284 }); … … 2329 2296 } 2330 2297 2331 function _itemHandler( evt) {2298 function _itemHandler() { 2332 2299 var item = _api.jwGetPlaylist()[_api.jwGetPlaylistIndex()]; 2333 _image = item ? item.image : ""; 2334 _getImageDimensions(); 2335 _style('#' + _display.id, { 2336 'background': 'url('+_image+') no-repeat center' 2337 }); 2300 var newImage = item ? item.image : ""; 2301 if (_image != newImage) { 2302 _image = newImage; 2303 _setVisibility(D_PREVIEW_CLASS, false); 2304 _getImage(); 2305 } 2338 2306 } 2339 2307 … … 2345 2313 case _states.IDLE: 2346 2314 _setIcon('play'); 2347 if (_image) { 2348 _style('#' + _display.id, { 2349 'background': 'url('+_image+') no-repeat center' 2350 }); 2351 } 2315 _setVisibility(D_PREVIEW_CLASS, true); 2352 2316 break; 2353 2317 case _states.BUFFERING: … … 2361 2325 case _states.PLAYING: 2362 2326 _setIcon(); 2363 _style('#' + _display.id, { 2364 'background': 'transparent' 2365 }); 2327 _setVisibility(D_PREVIEW_CLASS, false); 2366 2328 break; 2367 2329 case _states.PAUSED: … … 2375 2337 } 2376 2338 2377 function _getImageDimensions() { 2339 function _internalSelector(selector) { 2340 return '#' + _display.id + ' ' + selector; 2341 } 2342 2343 function _getImage() { 2378 2344 if (_image) { 2379 2345 // Find image size and stretch exactfit if close enough 2380 var img = DOCUMENT.createElement("img");2346 var img = new Image(); 2381 2347 img.addEventListener('load', function() { 2382 2348 _imageWidth = img.width; 2383 2349 _imageHeight = img.height; 2384 2350 _resize(); 2351 _css(_internalSelector(D_PREVIEW_CLASS), { 2352 'background-image': _image ? ('url('+_image+')') : '', 2353 }); 2354 _setVisibility(D_PREVIEW_CLASS, true); 2385 2355 }, false); 2386 2356 img.src = _image; 2387 2357 } else { 2358 _setVisibility(D_PREVIEW_CLASS, false); 2388 2359 _imageWidth = _imageHeight = 0; 2389 2360 } … … 2397 2368 return null; 2398 2369 } 2399 2400 2370 2401 2371 function _resize() { 2402 _utils.stretch(_api.jwGetStretching(), _ display, _display.clientWidth, _display.clientHeight, _imageWidth, _imageHeight);2372 _utils.stretch(_api.jwGetStretching(), _preview, _display.clientWidth, _display.clientHeight, _imageWidth, _imageHeight); 2403 2373 } 2404 2374 2405 2375 this.resize = _resize; 2376 2377 function _setVisibility(selector, state) { 2378 _css(_internalSelector(selector), { 2379 opacity: state ? 1 : 0 2380 }); 2381 } 2382 2383 this.show = function() { 2384 _setVisibility('', true); 2385 } 2386 2387 this.hide = function() { 2388 _setVisibility('', false); 2389 } 2406 2390 2407 2391 _init(); 2408 2392 }; 2409 2393 2410 _ style(D_CLASS, {2394 _css(D_CLASS, { 2411 2395 position: JW_CSS_ABSOLUTE, 2412 2396 cursor: "pointer", … … 2415 2399 overflow: 'hidden' 2416 2400 }); 2417 2418 _style(D_CLASS + ' *', { 2401 2402 _css(D_CLASS + ' .jwpreview', { 2403 position: JW_CSS_ABSOLUTE, 2404 width: JW_CSS_100PCT, 2405 height: JW_CSS_100PCT, 2406 'background-repeat': 'no-repeat', 2407 'background-position': 'center', 2408 overflow: 'hidden' 2409 }); 2410 2411 _css(D_CLASS +', '+D_CLASS + ' *', { 2419 2412 '-webkit-transition': JW_CSS_SMOOTH_EASE, 2420 2413 '-moz-transition': JW_CSS_SMOOTH_EASE, … … 2422 2415 }); 2423 2416 2424 _ style(D_CLASS+' button, ' + D_CLASS+' .jwicon', {2417 _css(D_CLASS+' button, ' + D_CLASS+' .jwicon', { 2425 2418 border: JW_CSS_NONE, 2426 2419 position: JW_CSS_ABSOLUTE, … … 2431 2424 }); 2432 2425 2433 _style( {2434 position: JW_CSS_ABSOLUTE,2435 left: "50%",2436 top: "50%",2437 padding: 0,2438 cursor: 'pointer'2439 });2440 2441 2442 2426 })(jwplayer.html5);/** 2443 2427 * jwplayer.html5 model … … 2519 2503 } 2520 2504 2505 this.seekDrag = function(state) { 2506 _video.seekDrag(state); 2507 } 2508 2521 2509 this.setFullscreen = function(state) { 2522 2510 if (state != _model.fullscreen) { … … 2524 2512 _model.sendEvent(_events.JWPLAYER_FULLSCREEN, { fullscreen: state } ); 2525 2513 } 2514 } 2515 2516 this.setPlaylist = function(playlist) { 2517 _model.item = -1; 2518 _model.playlist = playlist; 2519 _model.sendEvent(_events.JWPLAYER_PLAYLIST_LOADED, { 2520 playlist: playlist 2521 }); 2526 2522 } 2527 2523 … … 2562 2558 _api.id = _model.id; 2563 2559 2564 // _controller.load();2565 /*2566 (new html5.skinloader(config.skin, function(skin) {2567 _api.skin = skin;2568 _view.setup();2569 }, function(err) { _utils.log(err); }));2570 */2571 2560 var setup = new html5.setup(_model, _view, _controller); 2572 2561 setup.addEventListener(jwplayer.events.JWPLAYER_READY, _readyHandler); … … 2576 2565 2577 2566 function _readyHandler(evt) { 2567 _view.completeSetup(); 2578 2568 _controller.sendEvent(evt.type, evt); 2579 2569 _controller.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_LOADED, {playlist: _model.playlist}); … … 2602 2592 this.jwPlaylistItem = _controller.item; 2603 2593 this.jwSetFullscreen = _controller.setFullscreen; 2604 this.jwResize = _view.resize; 2594 this.jwResize = _view.resize; 2595 this.jwSeekDrag = _model.seekDrag; 2596 this.jwSetStretching = _controller.setStretching; 2597 2605 2598 2606 2599 … … 2786 2779 var _jw = jwplayer, _utils = _jw.utils, _events = _jw.events, 2787 2780 2788 PARSE_CONFIG = "config",2789 LOAD_SKIN = "skin",2790 LOAD_PLAYLIST = "playlist",2791 LOAD_PREVIEW = "preview",2792 SETUP_COMPONENTS = "components",2793 INIT_PLUGINS = "plugins",2794 SEND_READY = "ready";2781 PARSE_CONFIG = 1, 2782 LOAD_SKIN = 2, 2783 LOAD_PLAYLIST = 3, 2784 LOAD_PREVIEW = 4, 2785 SETUP_COMPONENTS = 5, 2786 INIT_PLUGINS = 6, 2787 SEND_READY = 7; 2795 2788 2796 2789 html5.setup = function(model, view, controller) { … … 2810 2803 _addTask(LOAD_PLAYLIST, _loadPlaylist, PARSE_CONFIG); 2811 2804 _addTask(LOAD_PREVIEW, _loadPreview, LOAD_PLAYLIST); 2812 _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_ SKIN);2805 _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_PREVIEW + "," + LOAD_SKIN); 2813 2806 _addTask(INIT_PLUGINS, _initPlugins, SETUP_COMPONENTS + "," + LOAD_PLAYLIST); 2814 2807 _addTask(SEND_READY, _sendReady, INIT_PLUGINS); … … 2841 2834 function _allComplete(dependencies) { 2842 2835 if (!dependencies) return true; 2843 var split = dependencies. split(",");2836 var split = dependencies.toString().split(","); 2844 2837 for (var i=0; i<split.length; i++) { 2845 2838 if (!_completed[split[i]]) … … 2881 2874 2882 2875 function _playlistLoaded(evt) { 2883 _model. playlist = evt.playlist;2876 _model.setPlaylist(evt.playlist); 2884 2877 _taskComplete(LOAD_PLAYLIST); 2885 2878 } … … 2897 2890 img.addEventListener('error', _previewLoaded, false); 2898 2891 img.src = preview; 2892 } else { 2893 _taskComplete(LOAD_PREVIEW); 2899 2894 } 2900 2895 } … … 2908 2903 _taskComplete(SETUP_COMPONENTS); 2909 2904 } 2910 2905 2911 2906 function _initPlugins() { 2912 2907 _taskComplete(INIT_PLUGINS); … … 3195 3190 _utils = _jw.utils, 3196 3191 _events = _jw.events, 3197 _states = _events.state, 3198 _isMobile = _utils.isMobile(); 3192 _states = _events.state; 3199 3193 3200 3194 … … 3227 3221 "waiting" : _bufferStateHandler 3228 3222 }, 3229 3223 3224 _extensions = { 3225 "mp4": "video/mp4", 3226 "webm": "video/webm", 3227 "m3u8": "audio/x-mpegurl" 3228 }, 3229 3230 3231 // Current playlist item 3232 _item, 3233 // Currently playing file 3234 _file, 3230 3235 // Reference to the video tag 3231 3236 _video, … … 3238 3243 // Whether seeking is ready yet 3239 3244 _canSeek, 3245 // Whether we have sent out the BUFFER_FULL event 3246 _bufferFull, 3240 3247 // If we should seek on canplay 3241 3248 _delayedSeek, 3249 // If we're currently dragging the seek bar 3250 _dragging, 3242 3251 // Current media state 3243 3252 _state = _states.IDLE, … … 3284 3293 3285 3294 function _timeUpdateHandler(evt) { 3286 if (_state == _states.PLAYING ) {3295 if (_state == _states.PLAYING && !_dragging) { 3287 3296 _position = _video.currentTime; 3288 3297 _sendEvent(_events.JWPLAYER_MEDIA_TIME, { … … 3299 3308 if (!_canSeek) { 3300 3309 _canSeek = true; 3301 _send Event(_events.JWPLAYER_MEDIA_BUFFER_FULL);3310 _sendBufferFull(); 3302 3311 if (_delayedSeek > 0) { 3303 3312 _seek(_delayedSeek); … … 3305 3314 } 3306 3315 } 3316 3317 function _sendBufferFull() { 3318 if (!_bufferFull) { 3319 _bufferFull = true; 3320 _sendEvent(_events.JWPLAYER_MEDIA_BUFFER_FULL); 3321 } 3322 } 3307 3323 3308 3324 function _playHandler(evt) { 3325 if (_dragging) return; 3326 3309 3327 if (_video.paused) { 3310 3328 _setState(_states.PAUSED); … … 3323 3341 } 3324 3342 3325 this.load = function(videoURL) { 3343 function _canPlay(file) { 3344 var type = _extensions[_utils.strings.extension(file)]; 3345 return (!!type && _video.canPlayType(type)); 3346 } 3347 3348 /** Selects the appropriate file out of all available options **/ 3349 function _selectFile(item) { 3350 if (item.levels && item.levels.length > 0) { 3351 for (var i=0; i<item.levels.length; i++) { 3352 if (_canPlay(item.levels[i].file)) 3353 return item.levels[i].file; 3354 } 3355 } else if (item.file && _canPlay(item.file)) { 3356 return item.file; 3357 } 3358 return null; 3359 } 3360 3361 this.load = function(item) { 3362 _item = item; 3326 3363 _canSeek = false; 3364 _bufferFull = false; 3327 3365 _delayedSeek = 0; 3328 3366 _duration = 0; 3329 3367 _position = 0; 3368 3369 _file = _selectFile(_item); 3370 3371 if (!_file) { 3372 _utils.log("Could not find a file to play."); 3373 return; 3374 } 3375 3330 3376 _setState(_states.BUFFERING); 3331 _video.src = videoURL; 3332 3377 _video.src = _file; 3333 3378 _video.load(); 3334 3379 3335 3380 _bufferInterval = setInterval(_sendBufferUpdate, 100); 3336 3381 3337 if (_isMobile) { 3382 // Use native browser controls on mobile 3383 if (_utils.isMobile()) { 3338 3384 _video.controls = true; 3339 _video.style.opacity = 1; 3385 } 3386 3387 if (_utils.isIPod()) { 3388 _sendBufferFull(); 3340 3389 } 3341 3390 } 3342 3391 3343 3392 var _stop = this.stop = function() { 3344 // _video.src = "";3345 3393 _video.removeAttribute("src"); 3346 3394 _video.load(); 3347 _video.style.opacity = 0;3348 3395 clearInterval(_bufferInterval); 3349 3396 _setState(_states.IDLE); … … 3351 3398 3352 3399 this.play = function() { 3353 _video.style.opacity = 1;3354 3400 _video.play(); 3355 3401 } … … 3359 3405 } 3360 3406 3407 this.seekDrag = function(state) { 3408 _dragging = state; 3409 if (state) _video.pause(); 3410 else _video.play(); 3411 } 3412 3361 3413 var _seek = this.seek = function(pos) { 3362 3414 if (_canSeek) { 3363 3415 _delayedSeek = 0; 3364 _sendEvent(_events.JWPLAYER_MEDIA_SEEK, { 3365 position: _position, 3366 offset: pos 3367 }); 3416 if (!_dragging) { 3417 _sendEvent(_events.JWPLAYER_MEDIA_SEEK, { 3418 position: _position, 3419 offset: pos 3420 }); 3421 } 3368 3422 _video.currentTime = pos; 3369 3423 } else { … … 3404 3458 return; 3405 3459 } 3460 3461 // Ignore state changes while dragging the seekbar 3462 if (_dragging) return 3406 3463 3407 3464 if (_state != newstate) { … … 3459 3516 */ 3460 3517 (function(html5) { 3461 var _jw = jwplayer, _utils = _jw.utils, _style = _utils.appendStylesheet, _events = jwplayer.events, _states = _events.state; 3462 3463 DOCUMENT = document, 3464 VIEW_CONTAINER_CLASS = "jwplayer", 3465 VIEW_VIDEO_CONTAINER_CLASS = "jwvideocontainer", 3466 VIEW_CONTROLS_CONTAINER_CLASS = "jwcontrolscontainer"; 3518 var _jw = jwplayer, 3519 _utils = _jw.utils, 3520 _css = _utils.css, 3521 _events = jwplayer.events, 3522 _states = _events.state, 3523 3524 DOCUMENT = document, 3525 VIEW_CONTAINER_CLASS = "jwplayer", 3526 VIEW_VIDEO_CONTAINER_CLASS = "jwvideocontainer", 3527 VIEW_CONTROLS_CONTAINER_CLASS = "jwcontrolscontainer"; 3467 3528 3468 3529 html5.view = function(api, model) { … … 3503 3564 3504 3565 _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 3566 3567 _stateHandler({newstate:_states.IDLE}); 3505 3568 3506 3569 _container.addEventListener('mouseout', _fadeControls, false); 3507 3508 3570 _container.addEventListener('mousemove', function(evt) { 3509 3571 _showControls(); … … 3523 3585 3524 3586 function _setupControls() { 3525 var width = _ api.jwGetWidth(),3526 height = _ api.jwGetHeight(),3587 var width = _model.width, 3588 height = _model.height, 3527 3589 cbSettings = _api.skin.getComponentSettings('controlbar'), 3528 3590 displaySettings = _api.skin.getComponentSettings('display') … … 3536 3598 } 3537 3599 3538 _ style('#'+_container.id, {3539 'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0,3540 width: width,3541 height: height3600 _resize(width, height); 3601 3602 _css('#'+_container.id, { 3603 'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0 3542 3604 }); 3543 3605 … … 3559 3621 if (state) { 3560 3622 if (!_model.fullscreen) { 3561 _fakeFullscreen(true);3562 3563 3623 if (_container.requestFullScreen) { 3564 3624 _container.requestFullScreen(); 3565 3625 } else if (_container.mozRequestFullScreen) { 3566 3626 _container.mozRequestFullScreen(); 3567 } else if (_container.webkitRequestFullScreenWithKeys) {3568 _container.webkitRequestFullScreenWithKeys();3569 3627 } else if (_container.webkitRequestFullScreen) { 3570 3628 _container.webkitRequestFullScreen(); 3629 } else { 3630 _fakeFullscreen(true); 3571 3631 } 3572 3632 } … … 3589 3649 */ 3590 3650 function _resize(width, height) { 3651 if (_utils.exists(width) && _utils.exists(height)) { 3652 _css('#'+_container.id, { 3653 width: width, 3654 height: height 3655 }); 3656 _model.width = width; 3657 _model.height = height; 3658 } 3659 3591 3660 if (_controls.display) { 3592 3661 _controls.display.resize(width, height); … … 3595 3664 _controls.controlbar.resize(width, height); 3596 3665 } 3597 if (_container.style.opacity == 0) { 3598 _container.style.opacity = 1; 3599 } 3666 3600 3667 return; 3601 3668 } 3602 3669 3603 3670 this.resize = _resize; 3604 3671 3672 this.completeSetup = function() { 3673 _css('#'+_container.id, {opacity: 1}); 3674 } 3605 3675 3606 3676 /** … … 3638 3708 */ 3639 3709 function _isNativeFullscreen() { 3640 return (DOCUMENT.mozFullScreenElement == _container || 3641 DOCUMENT.webkitCurrentFullScreenElement == _container); 3710 if (DOCUMENT.mozFullScreenElement) return DOCUMENT.mozFullScreenElement.id == _container.id; 3711 else if (DOCUMENT.webkitCurrentFullScreenElement) return DOCUMENT.webkitCurrentFullScreenElement.id == _container.id; 3712 else return false; 3642 3713 } 3643 3714 … … 3651 3722 3652 3723 function _hideControls() { 3653 _controlsLayer.style.opacity = 0; 3724 if (_controls.controlbar) _controls.controlbar.hide(); 3725 if (_controls.display) _controls.display.hide(); 3654 3726 } 3655 3727 3656 3728 function _showControls() { 3657 _controlsLayer.style.opacity = 1; 3729 if (_controls.controlbar) _controls.controlbar.show(); 3730 if (_controls.display) _controls.display.show(); 3658 3731 } 3659 3732 … … 3662 3735 */ 3663 3736 function _stateHandler(evt) { 3737 var vidstyle = {}; 3664 3738 switch(evt.newstate) { 3665 3739 case _states.PLAYING: 3740 if (_utils.isIPod) { 3741 vidstyle.display = "block"; 3742 } 3743 vidstyle.opacity = 1; 3744 _css('#'+_container.id+' .'+VIEW_VIDEO_CONTAINER_CLASS, vidstyle); 3666 3745 _hideControls(); 3667 3746 break; 3668 3747 case _states.COMPLETED: 3669 3748 case _states.IDLE: 3749 if (_utils.isIPod) { 3750 vidstyle.display = "none"; 3751 } 3752 vidstyle.opacity = 0; 3753 _css('#'+_container.id+' .'+VIEW_VIDEO_CONTAINER_CLASS, vidstyle); 3754 _showControls(); 3755 break; 3670 3756 case _states.BUFFERING: 3671 3757 case _states.PAUSED: 3672 _showControls(); 3758 if (!_utils.isMobile()) { 3759 _showControls(); 3760 } 3673 3761 break; 3674 3762 } 3675 3763 } 3676 3677 3678 3764 } 3679 3765 … … 3683 3769 *************************************************************/ 3684 3770 3685 var JW_CSS_SMOOTH_EASE = "opacity . 25s ease";3771 var JW_CSS_SMOOTH_EASE = "opacity .5s ease"; 3686 3772 3687 3773 3688 3774 // Container styles 3689 _ style('.' + VIEW_CONTAINER_CLASS, {3775 _css('.' + VIEW_CONTAINER_CLASS, { 3690 3776 position : "relative", 3691 3777 overflow: "hidden", … … 3696 3782 }); 3697 3783 3698 _ style('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, {3784 _css('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, { 3699 3785 position : "absolute", 3700 3786 width : "100%", … … 3705 3791 }); 3706 3792 3707 _ style('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", {3793 _css('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", { 3708 3794 background : "transparent", 3709 3795 width : "100%", 3710 height : "100%", 3711 opacity : 0, 3712 '-webkit-transition' : 'opacity .15s ease' 3796 height : "100%" 3713 3797 }); 3714 3798 … … 3717 3801 // Fullscreen styles 3718 3802 3719 _ style('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', {3803 _css('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', { 3720 3804 width: "100% !important", 3721 3805 height: "100% !important" 3722 3806 }); 3723 3807 3724 _ style('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', {3808 _css('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', { 3725 3809 width: "100% !important", 3726 3810 height: "100% !important" 3727 3811 }); 3728 3812 3729 _ style('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', {3813 _css('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', { 3730 3814 left: 0, 3731 3815 right: 0, … … 3736 3820 }); 3737 3821 3738 _ style('.' + VIEW_CONTAINER_CLASS+' .jwuniform', {3822 _css('.' + VIEW_CONTAINER_CLASS+' .jwuniform', { 3739 3823 'background-size': 'contain !important' 3740 3824 }); 3741 3825 3742 _ style('.' + VIEW_CONTAINER_CLASS+' .jwfill', {3826 _css('.' + VIEW_CONTAINER_CLASS+' .jwfill', { 3743 3827 'background-size': 'cover !important' 3744 3828 }); 3745 3829 3746 _ style('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', {3830 _css('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', { 3747 3831 'background-size': '100% 100% !important' 3748 3832 }); 3749 3833 3750 _ style('.' + VIEW_CONTAINER_CLASS+' .jwnone', {3834 _css('.' + VIEW_CONTAINER_CLASS+' .jwnone', { 3751 3835 'background-size': null 3752 3836 }); -
branches/jw6/jwplayer.min.js
r2179 r2180 1 if(typeof jwplayer=="undefined"){jwplayer=function(a){if(jwplayer.api){return jwplayer.api.selectPlayer(a)}};var $jw=jwplayer;jwplayer.version="6.0";jwplayer.vid=document.createElement("video");jwplayer.audio=document.createElement("audio");jwplayer.source=document.createElement("source");(function( d){var i=document;var e=window;var k=d.utils=function(){};k.exists=function(p){switch(typeof(p)){case"string":return(p.length>0);break;case"object":return(p!==null);case"undefined":return false}return true};var j;var a={};k.css=function(p,s){if(k.exists(p)){for(var q in s){try{if(typeof s[q]==="undefined"){continue}else{if(typeof s[q]=="number"&&!(q=="zIndex"||q=="opacity")){if(isNaN(s[q])){continue}if(q.match(/color/i)){s[q]="#"+k.strings.pad(s[q].toString(16),6)}else{s[q]=Math.ceil(s[q])+"px"}}}if(s[q]){p.style[q]=s[q]}}catch(r){}}}};var g=false;k.appendStylesheet=function(p,r){if(!j){j=i.createElement("style");j.type="text/css";i.getElementsByTagName("head")[0].appendChild(j)}if(!a[p]){a[p]={}}for(var q in r){var s=o(q,r[q]);if(k.exists(a[p][q])&&!k.exists(s)){delete a[p][q]}else{a[p][q]=s}}f()};function o(p,q){if(typeof q==="undefined"){return undefined}if(typeof q=="number"){if(isNaN(q)){return undefined}switch(p){case"z-index":case"opacity":return q;break;default:if(p.match(/color/i)){return"#"+k.strings.pad(q.toString(16),6)}else{return Math.ceil(q)+"px"}break}}else{return q}}function f(){if(j){var p="";for(var s in a){var r=a[s];p+=s+"{\n";for(var q in r){p+=" "+q+": "+r[q]+";\n"}p+="}\n"}j.innerHTML=p}}k.clearCss=function(p){for(var q in a){if(q.indexOf(p)>=0){delete a[q]}}f()};k.getAbsolutePath=function(v,u){if(!k.exists(u)){u=i.location.href}if(!k.exists(v)){return undefined}if(b(v)){return v}var w=u.substring(0,u.indexOf("://")+3);var t=u.substring(w.length,u.indexOf("/",w.length+1));var q;if(v.indexOf("/")===0){q=v.split("/")}else{var r=u.split("?")[0];r=r.substring(w.length+t.length+1,r.lastIndexOf("/"));q=r.split("/").concat(v.split("/"))}var p=[];for(var s=0;s<q.length;s++){if(!q[s]||!k.exists(q[s])||q[s]=="."){continue}else{if(q[s]==".."){p.pop()}else{p.push(q[s])}}}return w+t+"/"+p.join("/")};function b(q){if(!k.exists(q)){return}var r=q.indexOf("://");var p=q.indexOf("?");return(r>0&&(p<0||(p>r)))}k.extend=function(){var p=k.extend["arguments"];if(p.length>1){for(var r=1;r<p.length;r++){for(var q in p[r]){p[0][q]=p[r][q]}}return p[0]}return null};k.parseDimension=function(p){if(typeof p=="string"){if(p===""){return 0}else{if(p.lastIndexOf("%")>-1){return p}else{return parseInt(p.replace("px",""),10)}}}return p};k.timeFormat=function(p){if(p>0){str=Math.floor(p/60)<10?"0"+Math.floor(p/60)+":":Math.floor(p/60)+":";str+=Math.floor(p%60)<10?"0"+Math.floor(p%60):Math.floor(p%60);return str}else{return"00:00"}};k.log=function(q,p){if(typeof console!="undefined"&&typeof console.log!="undefined"){if(p){console.log(q,p)}else{console.log(q)}}};k.getBoundingClientRect=function(p){if(typeof p.getBoundingClientRect=="function"){return p.getBoundingClientRect()}else{return{left:p.offsetLeft+i.body.scrollLeft,top:p.offsetTop+i.body.scrollTop,width:p.offsetWidth,height:p.offsetHeight}}};k.userAgentMatch=function(q){var p=navigator.userAgent.toLowerCase();return(p.match(q)!==null)};k.isMobile=function(){return k.userAgentMatch(/(iP(hone|ad|od))|android/i)};k.isIPod=function(){return d.utils.userAgentMatch(/iP(hone|od)/i)};k.saveCookie=function(p,q){i.cookie="jwplayer."+p+"="+q+"; path=/"};k.getCookies=function(){var s={};var r=i.cookie.split("; ");for(var q=0;q<r.length;q++){var p=r[q].split("=");if(p[0].indexOf("jwplayer.")==0){s[p[0].substring(9,p[0].length)]=p[1]}}return s};k.ajax=function(t,s,p){var r;if(c(t)&&k.exists(e.XDomainRequest)){r=new XDomainRequest();r.onload=n(r,t,s,p);r.onerror=m(p,t,r)}else{if(k.exists(e.XMLHttpRequest)){r=new XMLHttpRequest();r.onreadystatechange=h(r,t,s,p);r.onerror=m(p,t)}else{if(p){p()}}}try{r.open("GET",t,true);r.send(null)}catch(q){if(p){p(t)}}return r};function c(p){if(p&&p.indexOf("://")>=0){if(p.split("/")[2]!=window.location.href.split("/")[2]){return true}}return false}function m(p,r,q){return function(){p(r)}}function h(q,s,r,p){return function(){if(q.readyState===4){if(q.status==200){n(q,s,r,p)()}else{if(p){p(s)}}}}}function n(q,s,r,p){return function(){if(!k.exists(q.responseXML)){try{var t;if(e.DOMParser){t=(new DOMParser()).parseFromString(q.responseText,"text/xml")}else{t=new ActiveXObject("Microsoft.XMLDOM");t.async="false";t.loadXML(q.responseText)}if(t){q=d.utils.extend({},q,{responseXML:t})}}catch(u){if(p){p(s)}return}}r(q)}}k.typeOf=function(q){var p=typeof q;if(p==="object"){if(!q){return"null"}return(q instanceof Array)?"array":p}else{return p}};k.stretch=function(v,D,C,t,B,u,r){var q=(k.exists(C)&&k.exists(B))?C/B:0,s=(k.exists(t)&&k.exists(u))?t/u:0,A=0,z=0,p={},w;switch(v.toLowerCase()){case l.NONE:case l.FILL:case l.EXACTFIT:w="jw"+v.toLowerCase();break;case l.UNIFORM:w="jw"+v.toLowerCase();if(q>s){if((B*s)/C>0.95){w="jwexactfit"}}else{if((u*q)/t>0.95){w="jwexactfit"}}break;default:break}D.className=D.className.replace(/jw(none|exactfit|uniform|fill)/g,"");D.className+=" "+w};var l=k.stretching={NONE:"none",FILL:"fill",UNIFORM:"uniform",EXACTFIT:"exactfit"}})(jwplayer);(function(b){var a=b.strings=function(){};a.trim=function(c){return c.replace(/^\s*/,"").replace(/\s*$/,"")};a.pad=function(d,e,c){if(!c){c="0"}while(d.length<e){d=c+d}return d};a.serialize=function(c){if(c==null){return null}else{if(c=="true"){return true}else{if(c=="false"){return false}else{if(isNaN(Number(c))||c.length>5||c.length==0){return c}else{return Number(c)}}}}};a.seconds=function(e){e=e.replace(",",".");var c=e.split(":");var d=0;if(e.substr(-1)=="s"){d=Number(e.substr(0,e.length-1))}else{if(e.substr(-1)=="m"){d=Number(e.substr(0,e.length-1))*60}else{if(e.substr(-1)=="h"){d=Number(e.substr(0,e.length-1))*3600}else{if(c.length>1){d=Number(c[c.length-1]);d+=Number(c[c.length-2])*60;if(c.length==3){d+=Number(c[c.length-3])*3600}}else{d=Number(e)}}}}return d};a.xmlAttribute=function(c,d){for(var e=0;e<c.attributes.length;e++){if(c.attributes[e].name&&c.attributes[e].name.toLowerCase()==d.toLowerCase()){return c.attributes[e].value.toString()}}return""};a.jsonToString=function(g){var i=i||{};if(i&&i.stringify){return i.stringify(g)}var d=typeof(g);if(d!="object"||g===null){if(d=="string"){g='"'+g.replace(/"/g,'\\"')+'"'}else{return String(g)}}else{var h=[],c=(g&&g.constructor==Array);for(var e in g){var f=g[e];switch(typeof(f)){case"string":f='"'+f.replace(/"/g,'\\"')+'"';break;case"object":if(b.exists(f)){f=a.jsonToString(f)}break}if(c){if(typeof(f)!="function"){h.push(String(f))}}else{if(typeof(f)!="function"){h.push('"'+e+'":'+String(f))}}}if(c){return"["+String(h)+"]"}else{return"{"+String(h)+"}"}}}})(jwplayer.utils);(function(b){var d=new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);b.typechecker=function(g,f){f=!b.exists(f)?c(g):f;return e(g,f)};function c(f){var g=["true","false","t","f"];if(g.toString().indexOf(f.toLowerCase().replace(" ",""))>=0){return"boolean"}else{if(d.test(f)){return"color"}else{if(!isNaN(parseInt(f,10))&&parseInt(f,10).toString().length==f.length){return"integer"}else{if(!isNaN(parseFloat(f))&&parseFloat(f).toString().length==f.length){return"float"}}}}return"string"}function e(g,f){if(!b.exists(f)){return g}switch(f){case"color":if(g.length>0){return a(g)}return null;case"integer":return parseInt(g,10);case"float":return parseFloat(g);case"boolean":if(g.toLowerCase()=="true"){return true}else{if(g=="1"){return true}}return false}return g}function a(f){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)}})(jwplayer.utils);(function(a){a.events={COMPLETE:"COMPLETE",ERROR:"ERROR",API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_MEDIA_BEFOREPLAY:"jwplayerMediaBeforePlay",JWPLAYER_MEDIA_BEFORECOMPLETE:"jwplayerMediaBeforeComplete",JWPLAYER_COMPONENT_SHOW:"jwplayerComponentShow",JWPLAYER_COMPONENT_HIDE:"jwplayerComponentHide",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",JWPLAYER_MEDIA_SEEK:"jwplayerMediaSeek",JWPLAYER_MEDIA_TIME:"jwplayerMediaTime",JWPLAYER_MEDIA_VOLUME:"jwplayerMediaVolume",JWPLAYER_MEDIA_META:"jwplayerMediaMeta",JWPLAYER_MEDIA_MUTE:"jwplayerMediaMute",JWPLAYER_PLAYER_STATE:"jwplayerPlayerState",state:{BUFFERING:"BUFFERING",IDLE:"IDLE",PAUSED:"PAUSED",PLAYING:"PLAYING",COMPLETED:"COMPLETED"},JWPLAYER_PLAYLIST_LOADED:"jwplayerPlaylistLoaded",JWPLAYER_PLAYLIST_ITEM:"jwplayerPlaylistItem",JWPLAYER_INSTREAM_CLICK:"jwplayerInstreamClicked",JWPLAYER_INSTREAM_DESTROYED:"jwplayerInstreamDestroyed"}})(jwplayer);(function(a){var b=jwplayer.utils;a.eventdispatcher=function(h,c){var e=h,g=c,f,d;this.resetEventListeners=function(){f={};d=[]};this.resetEventListeners();this.addEventListener=function(i,l,k){try{if(!b.exists(f[i])){f[i]=[]}if(b.typeOf(l)=="string"){l=(new Function("return "+l))()}f[i].push({listener:l,count:k})}catch(j){b.log("error",j)}return false};this.removeEventListener=function(j,l){if(!f[j]){return}try{for(var i=0;i<f[j].length;i++){if(f[j][i].listener.toString()==l.toString()){f[j].splice(i,1);break}}}catch(k){b.log("error",k)}return false};this.addGlobalListener=function(k,j){try{if(b.typeOf(k)=="string"){k=(new Function("return "+k))()}d.push({listener:k,count:j})}catch(i){b.log("error",i)}return false};this.removeGlobalListener=function(k){if(!k){return}try{for(var i=0;i<d.length;i++){if(d[i].listener.toString()==k.toString()){d.splice(i,1);break}}}catch(j){b.log("error",j)}return false};this.sendEvent=function(k,m){if(!b.exists(m)){m={}}b.extend(m,{id:e,version:jwplayer.version,type:k});if(g){b.log(k,m)}if(b.typeOf(f[k])!="undefined"){for(var j=0;j<f[k].length;j++){try{f[k][j].listener(m)}catch(l){b.log("There was an error while handling a listener: "+l.toString(),f[k][j].listener)}if(f[k][j]){if(f[k][j].count===1){delete f[k][j]}else{if(f[k][j].count>0){f[k][j].count=f[k][j].count-1}}}}}var i;for(i=0;i<d.length;i++){try{d[i].listener(m)}catch(l){b.log("There was an error while handling a listener: "+l.toString(),d[i].listener)}if(d[i]){if(d[i].count===1){delete d[i]}else{if(d[i].count>0){d[i].count=d[i].count-1}}}}}}})(jwplayer.events);(function(a){a.html5={}})(jwplayer);(function(a){a.utils={}})(jwplayer.html5);(function(a){var b=a.animations=function(){};b.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d;c.style.msTransform=d};b.transformOrigin=function(c,d){c.style.webkitTransformOrigin=d;c.style.MozTransformOrigin=d;c.style.OTransformOrigin=d;c.style.msTransformOrigin=d};b.rotate=function(c,d){b.transform(c,"rotate("+d+"deg)")}})(jwplayer.html5.utils);(function(a){a.parsers={localName:function(b){if(!b){return""}else{if(b.localName){return b.localName}else{if(b.baseName){return b.baseName}else{return""}}}},textContent:function(b){if(!b){return""}else{if(b.textContent){return b.textContent}else{if(b.text){return b.text}else{return""}}}},getChildNode:function(c,b){return c.childNodes[b]},numChildren:function(b){if(b.childNodes){return b.childNodes.length}else{return 0}}}})(jwplayer.html5);(function(b){var a=b.html5.parsers;var d=a.jwparser=function(){};var c="jwplayer";d.parseEntry=function(h,j){for(var f=0;f<h.childNodes.length;f++){var g=h.childNodes[f];if(g.prefix==c){var e=a.localName(g);j[e]=b.utils.strings.serialize(a.textContent(g));if(e=="file"&&j.levels){delete j.levels}}if(!j.file){j.file=j.link}}return j}})(jwplayer);(function(d){var h=jwplayer.utils.strings,g=h.xmlAttribute,b=d.localName,a=d.textContent,c=d.numChildren;var f=d.mediaparser=function(){};var e="media";f.parseGroup=function(m,n){for(var k=0;k<c(m);k++){var l=m.childNodes[k];if(l.prefix==e){if(!b(l)){continue}switch(b(l).toLowerCase()){case"content":n.file=g(l,"url");if(g(l,"duration")){n.duration=h.seconds(g(l,"duration"))}if(g(l,"start")){n.start=h.seconds(g(l,"start"))}if(c(l)>0){n=f.parseGroup(l,n)}if(g(l,"width")||g(l,"bitrate")||g(l,"url")){if(!n.levels){n.levels=[]}n.levels.push({width:g(l,"width"),bitrate:g(l,"bitrate"),file:g(l,"url")})}break;case"title":n.title=a(l);break;case"description":n.description=a(l);break;case"keywords":n.tags=a(l);break;case"thumbnail":n.image=g(l,"url");break;case"credit":n.author=a(l);break;case"player":var j=l.url;break;case"group":f.parseGroup(l,n);break}}}return n}})(jwplayer.html5.parsers);(function(f){var g=jwplayer.utils,a=f.textContent,d=f.getChildNode,e=f.numChildren,c=f.localName;f.rssparser={};f.rssparser.parse=function(o){var h=[];for(var m=0;m<e(o);m++){var n=d(o,m),k=c(n).toLowerCase();if(k=="channel"){for(var l=0;l<e(n);l++){var p=d(n,l);if(c(p).toLowerCase()=="item"){h.push(b(p))}}}}return h};function b(l){var m={};for(var j=0;j<l.childNodes.length;j++){var k=l.childNodes[j];var h=c(k);if(!h){continue}switch(h.toLowerCase()){case"enclosure":m.file=g.strings.xmlAttribute(k,"url");break;case"title":m.title=a(k);break;case"pubdate":m.date=a(k);break;case"description":m.description=a(k);break;case"link":m.link=a(k);break;case"category":if(m.tags){m.tags+=a(k)}else{m.tags=a(k)}break}}m=f.mediaparser.parseGroup(l,m);m=f.jwparser.parseEntry(l,m);return new jwplayer.html5.playlistitem(m)}})(jwplayer.html5.parsers);(function(l){var s=l.html5,h=l.utils,i=l.events,o=l.events.state,g=h.appendStylesheet,b="button",n="text",d="divider",p="slider",e="relative",f="absolute",a="none",m="block",r="inline",k="inline-block",c="left",t="right",j="100%",q="width .25s linear, left .25s linear, opacity .25s, background .25s";CB_CLASS=".jwcontrolbar",DOCUMENT=document;s.controlbar=function(A,an){var y,Q,z={margin:10,font:"Arial,sans-serif",fontsize:10,fontcolor:parseInt("000000",16),fontstyle:"normal",fontweight:"bold",layout:{left:{position:"left",elements:[{name:"play",type:b},{name:"divider",type:d},{name:"prev",type:b},{name:"divider",type:d},{name:"next",type:b},{name:"divider",type:d},{name:"elapsed",type:n}]},center:{position:"center",elements:[{name:"time",type:p}]},right:{position:"right",elements:[{name:"duration",type:n},{name:"blank",type:b},{name:"divider",type:d},{name:"mute",type:b},{name:"volume",type:p},{name:"divider",type:d},{name:"fullscreen",type:b}]}}},P,aw,ah,au,ak,aE,J,U={play:"pause",mute:"unmute",fullscreen:"normalscreen"},av={play:false,mute:false,fullscreen:false},x={play:Z,mute:K,fullscreen:W,next:w,prev:ac},B={time:T,volume:az};function ay(){ah={};y=A;ak=y.id+"_controlbar";aE=0;au=L();au.id=ak;au.className="jwcontrolbar";window.addEventListener("mousemove",aD,false);window.addEventListener("mouseup",aD,false);Q=y.skin;P=h.extend({},z,an);aw=Q.getComponentLayout("controlbar");if(!aw){aw=z.layout}S();ap();u()}function u(){y.jwAddEventListener(l.events.JWPLAYER_MEDIA_TIME,aF);y.jwAddEventListener(l.events.JWPLAYER_PLAYER_STATE,E);y.jwAddEventListener(l.events.JWPLAYER_MEDIA_MUTE,aA);y.jwAddEventListener(l.events.JWPLAYER_MEDIA_VOLUME,C);y.jwAddEventListener(l.events.JWPLAYER_MEDIA_BUFFER,H);y.jwAddEventListener(l.events.JWPLAYER_FULLSCREEN,D)}function aF(aG){aE=aG.duration;if(ah.elapsed){ah.elapsed.innerHTML=h.timeFormat(aG.position)}if(ah.duration){ah.duration.innerHTML=h.timeFormat(aG.duration)}if(aG.duration>0){at(aG.position/aG.duration)}else{at(0)}}function E(aG){switch(aG.newstate){case o.BUFFERING:case o.PLAYING:if(ah.timeSliderThumb){ah.timeSliderThumb.style.opacity=1}O("play",true);break;case o.PAUSED:if(!ae){O("play",false)}break;case o.IDLE:O("play",false);if(ah.timeSliderThumb){ah.timeSliderThumb.style.opacity=0}if(ah.timeRail){ah.timeRail.className="jwrail";setTimeout(function(){ah.timeRail.className+=" jwsmooth"},100)}ax(0);aF({position:0,duration:0});break;case o.COMPLETED:au.style.opacity=0;break}}function aA(aG){O("mute",aG.mute);v(aG.mute?0:J)}function C(aG){J=aG.volume/100;v(J)}function H(aG){ax(aG.bufferPercent/100)}function D(aG){O("fullscreen",aG.fullscreen)}function S(){h.clearCss("#"+ak);g("#"+ak,{height:Y("background").height,bottom:P.position=="OVER"?P.margin:0,left:P.position=="OVER"?P.margin:0,right:P.position=="OVER"?P.margin:0});g(ao(".jwtext"),{font:P.fontsize+"px/"+Y("background").height+"px "+P.font,color:P.fontcolor,"font-weight":P.fontweight,"font-style":P.fontstyle,"text-align":"center",padding:"0 5px"})}function ao(aG){return"#"+ak+" "+aG}function L(){return DOCUMENT.createElement("span")}function ap(){var aI=ai("capLeft");var aH=ai("capRight");var aG=ai("background",{position:f,left:Y("capLeft").width,right:Y("capRight").width,"background-repeat":"repeat-x"},true);if(aG){au.appendChild(aG)}if(aI){au.appendChild(aI)}aq();if(aH){au.appendChild(aH)}}function M(aG){switch(aG.type){case d:return ab(aG);break;case n:return aj(aG.name);break;case b:if(aG.name!="blank"){return aa(aG.name)}break;case p:return N(aG.name);break}}function ai(aI,aL,aH,aN){var aK=L();aK.className="jw"+aI;var aG=aN?" left center":" center";var aJ=Y(aI);aK.innerHTML=" ";if(!aJ||aJ.src==""){return}var aM;if(aH){aM={background:"url('"+aJ.src+"') repeat-x "+aG}}else{aM={background:"url('"+aJ.src+"') no-repeat"+aG,width:aJ.width}}g(ao(".jw"+aI),h.extend(aM,aL));ah[aI]=aK;return aK}function aa(aI){if(!Y(aI+"Button").src){return null}var aJ=DOCUMENT.createElement("button");aJ.className="jw"+aI;aJ.addEventListener("click",af(aI),false);var aK=Y(aI+"Button");var aH=Y(aI+"ButtonOver");aJ.innerHTML=" ";R(ao(".jw"+aI),aK,aH);var aG=U[aI];if(aG){R(ao(".jw"+aI+".jwtoggle"),Y(aG+"Button"),Y(aG+"ButtonOver"))}ah[aI]=aJ;return aJ}function R(aG,aH,aI){if(!aH.src){return}g(aG,{width:aH.width,background:"url("+aH.src+") center no-repeat"});if(aI.src){g(aG+":hover",{background:"url("+aI.src+") center no-repeat"})}}function af(aG){return function(){if(x[aG]){x[aG]()}}}function Z(){if(av.play){y.jwPause()}else{y.jwPlay()}}function K(){y.jwSetMute();aA({mute:av.mute})}function az(aG){if(aG<0.1){aG=0}if(aG>0.9){aG=1}y.jwSetVolume(aG*100);v(aG)}function T(aG){if(!ae){y.jwPlay()}y.jwSeek(aG*aE)}function W(){y.jwSetFullscreen()}function w(){y.jwPlaylistNext()}function ac(){y.jwPlaylistNext()}function O(aG,aH){if(!h.exists(aH)){aH=!av[aG]}if(ah[aG]){ah[aG].className="jw"+aG+(aH?" jwtoggle jwtoggling":" jwtoggling");setTimeout(function(){ah[aG].className=ah[aG].className.replace(" jwtoggling","")},100)}av[aG]=aH}function I(aG){return ak+"_"+aG}function aj(aG,aK){var aI=L();aI.id=I(aG);aI.className="jwtext jw"+aG;var aH={};var aJ=Y(aG+"Background");if(aJ.src){aH.background="url("+aJ.src+") no-repeat center";aH["background-size"]="100% "+Y("background").height+"px"}g(ao(".jw"+aG),aH);aI.innerHTML="00:00";ah[aG]=aI;return aI}function ab(aH){if(aH.width){var aG=L();aG.className="jwblankDivider";g(aG,{width:parseInt(aH.width)});return aG}else{if(aH.element){return ai(aH.element)}else{return ai(aH.name)}}}function N(aG){var aJ=L();aJ.className="jwslider jw"+aG;var aI=ai(aG+"SliderCapLeft");var aH=ai(aG+"SliderCapRight");if(aH){aH.className+=" jwcapRight"}var aK=al(aG);if(aI){aJ.appendChild(aI)}aJ.appendChild(aK);if(aI){aJ.appendChild(aH)}g(ao(".jw"+aG+" .jwrail"),{left:Y(aG+"SliderCapLeft").width,right:Y(aG+"SliderCapRight").width,});ah[aG]=aJ;if(aG=="time"){aC(aJ);at(0);ax(0)}else{if(aG=="volume"){ar(aJ)}}return aJ}function al(aI){var aL=L();aL.className="jwrail jwsmooth";var aG=["Rail","Buffer","Progress"];for(var aK=0;aK<aG.length;aK++){var aJ=ai(aI+"Slider"+aG[aK],null,true,(aI=="volume"));if(aJ){aJ.className+=" jwstretch";aL.appendChild(aJ)}}var aH=ai(aI+"SliderThumb");if(aH){aH.className+=" jwthumb";aH.style.opacity=0;aL.appendChild(aH)}aL.addEventListener("mousedown",G(aI),false);ah[aI+"Rail"]=aL;return aL}var ae;function G(aG){return(function(aH){if(aH.button!=0){return}ah[aG+"Rail"].className="jwrail";if(aG=="time"){if(!F()){ae=aG}}else{ae=aG}})}function F(){var aG=y.jwGetState();return(aG==o.IDLE||aG==o.COMPLETED)}var am=0;function aD(aG){if(!ae||aG.button!=0){return}var aK=ah[ae].getElementsByClassName("jwrail")[0],aL=h.getBoundingClientRect(aK),aJ=(aG.clientX-aL.left)/aL.width;if(aG.type=="mouseup"){var aH=ae;ah[aH+"Rail"].className="jwrail jwsmooth";ae=null;B[aH](aJ)}else{if(ae=="time"){at(aJ)}else{v(aJ)}var aI=(new Date()).getTime();if(aI-am>500){y.jwPause();am=aI;B[ae](aJ)}}}function aC(aG){if(ah.timeSliderThumb){g(ao(".jwtimeSliderThumb"),{"margin-left":(Y("timeSliderThumb").width/-2)})}ax(0);at(0)}function ar(aI){var aH=Y("volumeSliderCapLeft").width,aG=Y("volumeSliderCapRight").width,aJ=Y("volumeSliderRail").width;g(ao(".jwvolume"),{width:(aH+aJ+aG)})}var V={};function aq(){aB("left");aB("center");aB("right");au.appendChild(V.left);au.appendChild(V.center);au.appendChild(V.right);g(ao(".jwright"),{right:Y("capRight").width})}function aB(aH){var aG=L();aG.className="jwgroup jw"+aH;V[aH]=aG;if(aw[aH]){X(aw[aH],V[aH])}}function X(aJ,aG){if(aJ&&aJ.elements.length>0){for(var aI=0;aI<aJ.elements.length;aI++){var aH=M(aJ.elements[aI]);if(aH){aG.appendChild(aH)}}}}var ad=this.resize=function(aH,aG){g(ao(".jwgroup.jwcenter"),{left:Math.round(h.parseDimension(V.left.offsetWidth)+Y("capLeft").width),right:Math.round(h.parseDimension(V.right.offsetWidth)+Y("capRight").width)})};this.getDisplayElement=function(){return au};function ax(aG){aG=Math.min(Math.max(0,aG),1);ah.timeSliderBuffer.style.width=aG*100+"%"}function ag(aI,aK,aL){if(!ah[aI]){return}aK=Math.min(Math.max(0,aK),1);var aH=ah[aI+"SliderProgress"];var aG=ah[aI+"SliderThumb"];var aJ=100*aK+"%";if(aH){aH.style.width=aJ}if(aG){aG.style.left=aJ}}function v(aG){ag("volume",aG,true)}function at(aG){ag("time",aG)}function Y(aG){var aH=Q.getSkinElement("controlbar",aG);if(aH){return aH}else{return{width:0,height:0,src:"",image:undefined,ready:false}}}ay()};g(CB_CLASS,{position:f,overflow:"hidden","-webkit-transition":q,"-moz-transition":q,"-o-transition":q});g(CB_CLASS+" span",{height:j,"-webkit-user-select":a,"-webkit-user-drag":a,"user-select":a,"user-drag":a});g(CB_CLASS+" .jwgroup",{display:r});g(CB_CLASS+" span, "+CB_CLASS+" .jwgroup button,"+CB_CLASS+" .jwleft",{position:e,"float":c});g(CB_CLASS+" .jwright",{position:f});g(CB_CLASS+" .jwcenter",{position:f});g(CB_CLASS+" button",{display:k,height:j,border:a,cursor:"pointer","-webkit-transition":q,"-moz-transition":q,"-o-transition":q});g(CB_CLASS+" .jwcapRight",{right:0,position:f});g(CB_CLASS+" .jwtime,"+CB_CLASS+" .jwgroup span.jwstretch",{position:f,height:j,width:j,left:0});g(CB_CLASS+" .jwrail,"+CB_CLASS+" .jwthumb",{position:f,height:j,cursor:"pointer"});g(CB_CLASS+" .jwtime .jwsmooth span",{"-webkit-transition":q,"-moz-transition":q,"-o-transition":q});g(CB_CLASS+" .jwdivider+.jwdivider",{display:a});g(CB_CLASS+" .jwtext",{padding:"0 5px","text-align":"center"});g(CB_CLASS+" .jwtoggling",{"-webkit-transition":a,"-moz-transition":a,"-o-transition":a})})(jwplayer);(function(a){var e=jwplayer,c=e.utils,d=e.events,b=d.state;a.controller=function(g,q){var v=g,f=q,l=g.getVideo(),j=new d.eventdispatcher(v.id,v.config.debug);c.extend(this,j);function m(){v.addGlobalListener(y);v.addEventListener(d.JWPLAYER_MEDIA_BUFFER_FULL,s)}function y(B){j.sendEvent(B.type,B)}function s(B){l.play()}var z;function A(B){if(v.state==b.PLAYING||v.state==b.BUFFERING){l.stop()}switch(c.typeOf(B)){case"string":z=B;break;case"object":z=B.file;break;case"number":z=v.playlist[B].file;break;default:z=v.playlist[v.item].file}}function p(){if(v.state==b.IDLE){l.load(z)}else{if(v.state==b.PAUSED){l.play()}}}function k(){l.stop()}function x(){if(v.state==b.PLAYING||v.state==b.BUFFERING){l.pause()}}function t(B){l.seek(B)}function w(B){l.volume(B)}function n(B){if(!c.exists(B)){B=!v.mute}l.mute(B)}function r(B){f.fullscreen(B)}function o(B){k();v.setItem(B);A(v.item);p()}function h(){o(v.item-1)}function i(){o(v.item+1)}function u(B){return function(){B.apply(this,arguments)}}this.play=u(p);this.pause=u(x);this.seek=u(t);this.stop=u(k);this.load=u(A);this.next=u(i);this.prev=u(h);this.item=u(o);this.setVolume=u(w);this.setMute=u(n);this.setFullscreen=u(r);m()}})(jwplayer.html5);(function(a){a.html5.defaultskin=function(){this.text='<?xml version="1.0" ?><skin author="LongTail Video" name="Five" version="1.1"><components><component name="controlbar"><settings><setting name="margin" value="20"/><setting name="fontsize" value="11"/><setting name="fontcolor" value="0x000000"/></settings><layout><group position="left"><button name="play"/><divider name="divider"/><button name="prev"/><divider name="divider"/><button name="next"/><divider name="divider"/><text name="elapsed"/></group><group position="center"><slider name="time"/></group><group position="right"><text name="duration"/><divider name="divider"/><button name="blank"/><divider name="divider"/><button name="mute"/><slider name="volume"/><divider name="divider"/><button name="fullscreen"/></group></layout><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUOI3t1LERACAMQlFgGvcfxNIhHMK4gsUvUviOmgtNsiAZkBSEKxKEnCYkkQrJn/YwbUNiSDDYRZaQRDaShv+oX9GBZEIuK+8hXVLs+/YAAAAASUVORK5CYII="/><element name="blankButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAYCAYAAAAyJzegAAAAFElEQVQYV2P8//8/AzpgHBUc7oIAGZdH0RjKN8EAAAAASUVORK5CYII="/><element name="capLeft" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAQElEQVQIWz3LsRGAMADDQJ0XB5bMINABZ9GENGrszxhjT2WLSqxEJG2JQrTMdV2q5LpOAvyRaVmsi7WdeZ/7+AAaOTq7BVrfOQAAAABJRU5ErkJggg=="/><element name="capRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAQElEQVQIWz3LsRGAMADDQJ0XB5bMINABZ9GENGrszxhjT2WLSqxEJG2JQrTMdV2q5LpOAvyRaVmsi7WdeZ/7+AAaOTq7BVrfOQAAAABJRU5ErkJggg=="/><element name="divider" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUCB0FwcENgEAAw7Aq+893g8APUILNOQcbFRktVGqUVFRkWNz3xTa2sUaLNUosKlRUvvf5AdbWOTtzmzyWAAAAAElFTkSuQmCC"/><element name="playButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAANUlEQVR42u2RsQkAAAjD/NTTPaW6dXLrINJA1kBpGPMAjDWmOgp1HFQXx+b1KOefO4oxY57R73YnVYCQUCQAAAAASUVORK5CYII="/><element name="pauseButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAIUlEQVQ4jWNgGAWjYOiD/0gYG3/U0FFDB4Oho2AUDAYAAEwiL9HrpdMVAAAAAElFTkSuQmCC"/><element name="prevButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAQklEQVQ4y2NgGAWjYOiD/1AMA/JAfB5NjCJD/YH4PRaLyDa0H4lNNUP/DxlD59PCUBCIp3ZEwYA+NZLUKBgFgwEAAN+HLX9sB8u8AAAAAElFTkSuQmCC"/><element name="nextButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAQElEQVQ4y2NgGAWjYOiD/0B8Hojl0cT+U2ooCL8HYn9qGwrD/bQw9P+QMXQ+tSMqnpoRBUpS+tRMUqNgFAwGAADxZy1/mHvFnAAAAABJRU5ErkJggg=="/><element name="timeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAOElEQVRIDe3BwQkAIRADwAhhw/nU/kWwUK+KPITMABFh19Y+F0acY8CJvX9wYpXgRElwolSIiMf9ZWEDhtwurFsAAAAASUVORK5CYII="/><element name="timeSliderBuffer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAN0lEQVRIDe3BwQkAMQwDMBcc55mRe9zi7RR+FCwBEWG39vcfGHFm4MTuhhMlwYlVBSdKhYh43AW/LQMKm1spzwAAAABJRU5ErkJggg=="/><element name="timeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAIElEQVRIiWNgGAWjYBTQBfynMR61YCRYMApGwSigMQAAiVWPcbq6UkIAAAAASUVORK5CYII="/><element name="timeSliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAYCAYAAAA/OUfnAAAAO0lEQVQYlWP4//8/Awwz0JgDBP/BeN6Cxf/hnI2btiI4u/fsQ3AOHjqK4Jw4eQbBOX/hEoKDYjSd/AMA4cS4mfLsorgAAAAASUVORK5CYII="/><element name="muteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAJklEQVQ4y2NgGAUjDcwH4v/kaPxPikZkxcNVI9mBQ5XoGAWDFwAAsKAXKQQmfbUAAAAASUVORK5CYII="/><element name="unmuteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAMklEQVQ4y2NgGAWDHPyntub5xBr6Hwv/Pzk2/yfVG/8psRFE25Oq8T+tQnsIaB4FVAcAi2YVysVY52AAAAAASUVORK5CYII="/><element name="volumeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAACmpqampqbBXAu8AAAAAnRSTlMAgJsrThgAAAArSURBVAhbY2AgErBAyA4I2QEhOyBkB4TsYOhAoaCCUCUwDTDtMMNgRuMHAFB5FoGH5T0UAAAAAElFTkSuQmCC"/><element name="volumeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAAAAAAAAAACDY+nAAAAAAnRSTlMAgJsrThgAAAArSURBVAhbY2AgErBAyA4I2QEhOyBkB4TsYOhAoaCCUCUwDTDtMMNgRuMHAFB5FoGH5T0UAAAAAElFTkSuQmCC"/><element name="volumeSliderCapRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAYCAYAAAAyJzegAAAAFElEQVQYV2P8//8/AzpgHBUc7oIAGZdH0RjKN8EAAAAASUVORK5CYII="/><element name="fullscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAQklEQVRIiWNgGAWjYMiD/0iYFDmSLbDHImdPLQtgBpEiR7Zl2NijAA5oEkT/0Whi5UiyAJ8BVMsHNMtoo2AUDAIAAGdcIN3IDNXoAAAAAElFTkSuQmCC"/><element name="normalscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAP0lEQVRIx2NgGAWjYMiD/1RSQ5QB/wmIUWzJfzx8qhj+n4DYCAY0DyJ7PBbYU8sHMEvwiZFtODXUjIJRMJgBACpWIN2ZxdPTAAAAAElFTkSuQmCC"/></elements></component><component name="display"><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlOZpuml+rYAAAASSURBVBhXY2AYJuA/GBwY6jQAyDyoK8QcL4QAAAAASUVORK5CYII="/><element name="playIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiUlEQVR42u3XSw2AMBREURwgAQlIQAISKgUpSEFKJeCg5b0E0kWBTVcD9ySTsL0Jn9IBAAAA+K2UUrBlW/Rr5ZDoIeeuoFkxJD9ss03aIXXQqB9SttoG7ZA6qNcOKdttiwcJh9RB+iFl4SshkRBuLR72+9cvH0SOKI2HRo7x/Fi1/uoCAAAAwLsD8ki99IlO2dQAAAAASUVORK5CYII="/><element name="muteIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAVUlEQVR42u3WMQrAIAxAUW/g/SdvGmvpoOBeSHgPsjj5QTANAACARCJilIhYM0tEvJM+Ik3Id9E957kQIb+F3OdCPC0hPkQriqWx9hp/x/QGAABQyAPLB22VGrpLDgAAAABJRU5ErkJggg=="/><element name="errorIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAA/0lEQVR42u2U0QmEMBAF7cASLMESUoIlpARLSCkpwRJSgiWkhOvAXD4WsgRkyaG5DbyB+Yvg8KITAAAAAAAYk+u61mwk15EjPtlEfihmqIiZR1Qx80ghjgdUuiHXGHSVsoag0x6x8DUoyjD5KovmEJ9NTDMRPIT0mtdIUkjlonuNohO+Ha99DTmkuGgKCTcvebAzx82ZoCWC3/3aIMWSRucaxcjORSFY4xpFdjYJGp1rFGcyCYZ/RVh6AUnfcNZ2zih3/mGj1jVCdiNDwyrq1rA/xMdeEXvDVdnYc1vDc3uPkDObXrlaxbNHSOohQhr/WOeLEWfWTgAAAAAAADzNF9sHJ7PJ57MlAAAAAElFTkSuQmCC"/><element name="bufferIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACBklEQVR42u3Zv0sCYRzH8USTzOsHHEWGkC1HgaDgkktGDjUYtDQ01RDSljQ1BLU02+rk1NTm2NLq4Nx/0L/h9fnCd3j4cnZe1/U8xiO8h3uurufF0/3COd/3/0UWYiEWYiEWYiGJQ+J8xuPxKhXjEMZANinjIZhkGuVRNioE4wVURo4JkHm0xKWmhRAc1bh1EyCUw5BcBIjHiApKa4CErko6DEJwuRo6IRKzyJD8FJAyI3Zp2zRImiBcRhlfo5RtlxCcE3CcDNpGrhYIT2IhAJKilO0VRmzJ32fAMTpBTS0QMfGwlcuKMRftE0DJ0wCJdcOsCkBdXP3Mh9CEFUBTPS9mDZJBG6io4aqVzMdCokCw9H3kT6j/C/9iDdSeUMNC7DkyyxAs/Rk6Qss8FPWRZgdVtUH4DjxEn1zxh+/zj1wHlf4MQhNGrwqA6sY40U8JonRJwEQh+AO3AvCG6gHv4U7IY4krxkroWoAOkoQMGfCBrgIm+YBGqPENpIJ66CJg3x66Y0gnSUidAEEnNr9jjLiWMn5DiWP0OC/oAsCgkq43xBdGDMQr7YASP/vEkHvdl1+JOCcEV5sC4hGEOzTlPuKgd0b0xD4JkRcOgnRRTjdErkYhAsQVq6IdUuPJtmk7BCL3t/h88cx91pKQkI/pkDx6pmYTIjEoxiHsN1YWYiEWYiEWknhflZ5IErA5nr8AAAAASUVORK5CYII="/></elements></component><component name="dock"><settings><setting name="fontcolor" value="0xffffff"/></settings><elements><element name="button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlOZpuml+rYAAAASSURBVBhXY2AYJuA/GBwY6jQAyDyoK8QcL4QAAAAASUVORK5CYII="/></elements></component><component name="playlist"><settings><setting name="backgroundcolor" value="0xe8e8e8"/></settings><elements><element name="item" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAIAAAC1nk4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUaN7t2MENwCAMBEEe9N8wSKYC/D8YV7CyJoRkVtVImxkZPQInMxoP0XiIxkM0HsGbjjSNBx544IEHHnjggUe/6UQeey0PIh7XTftGxKPj4eXCtLsHHh+ZxkO0Iw8PR55Ni8ZD9Hu/EAoP0dc5RRg9qeRjVF8AAAAASUVORK5CYII="/><element name="sliderCapTop" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAHCAYAAADnCQYGAAAAFUlEQVQokWP8//8/A7UB46ihI9hQAKt6FPPXhVGHAAAAAElFTkSuQmCC"/><element name="sliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAKElEQVQ4y2P4//8/Az68bNmy/+iYkB6GUUNHDR01dNTQUUNHDaXcUABUDOKhcxnsSwAAAABJRU5ErkJggg=="/><element name="sliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAJUlEQVQ4T2P4//8/Ay4MBP9xYbz6Rg0dNXTU0FFDRw0dNZRyQwHH4NBa7GJsXAAAAABJRU5ErkJggg=="/><element name="sliderCapBottom" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAHCAYAAADnCQYGAAAAFUlEQVQokWP8//8/A7UB46ihI9hQAKt6FPPXhVGHAAAAAElFTkSuQmCC"/></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(h){var l=jwplayer.utils,j=l.css,d=l.appendStylesheet,e=jwplayer.events,f=e.state,k=h.utils.animations.rotate,a=".jwdisplay",b="absolute",c="none",i="100%",g="opacity .5s, background .5s";h.display=function(B,M){var H=B,w=B.skin,p,t=M?M:{},o,u,I,A={},m,y,K,E,z=!l.exists(M.bufferrotation)?15:parseInt(M.bufferrotation,10),q=!l.exists(M.bufferinterval)?100:parseInt(M.bufferinterval,10);function x(){p=DOCUMENT.createElement("div");p.id=H.id+"_display";p.className="jwdisplay";H.jwAddEventListener(e.JWPLAYER_PLAYER_STATE,v);H.jwAddEventListener(e.JWPLAYER_PLAYLIST_ITEM,G);p.addEventListener("click",J,false);n();v({newstate:f.IDLE})}function J(O){switch(H.jwGetState()){case f.PLAYING:case f.BUFFERING:H.jwPause();break;default:H.jwPlay();break}}function n(){var O=["play","buffer"];for(var R=0;R<O.length;R++){var V=O[R],T=C(V+"Icon"),Q=C(V+"IconOver"),S=DOCUMENT.createElement("div"),P=C("background"),U=C("backgroundOver");button=DOCUMENT.createElement("button");if(T){button.className="jw"+V;S.className="jwicon";button.appendChild(S);r("#"+p.id+" ."+button.className,P,U);r("#"+p.id+" ."+button.className+" div",T,Q);if(U||Q){button.addEventListener("mouseover",D(button),false);button.addEventListener("mouseout",F(button),false)}A[V]=button}}}function D(O){return function(P){if(O.className.indexOf("jwhover")<0){O.className+=" jwhover"}if(O.childNodes[0].className.indexOf("jwhover")<0){O.childNodes[0].className+=" jwhover"}}}function F(O){return function(P){O.className=O.className.replace(" jwhover","");O.childNodes[0].className=O.childNodes[0].className.replace(" jwhover","")}}function r(O,P,Q){if(!(P&&P.src)){return}d(O,{width:P.width,height:P.height,"margin-left":P.width/-2,"margin-top":P.height/-2,background:"url("+P.src+") center no-repeat"});if(Q&&Q.src){d(O+".jwhover",{background:"url("+Q.src+") center no-repeat"})}}function N(O){if(y){p.removeChild(y)}y=A[O];if(y){p.appendChild(y)}}function G(O){var P=H.jwGetPlaylist()[H.jwGetPlaylistIndex()];o=P?P.image:"";L();d("#"+p.id,{background:"url("+o+") no-repeat center"})}function v(O){clearInterval(E);switch(O.newstate){case f.COMPLETED:case f.IDLE:N("play");if(o){d("#"+p.id,{background:"url("+o+") no-repeat center"})}break;case f.BUFFERING:N("buffer");K=0;E=setInterval(function(){K+=z;k(y.childNodes[0],K%360)},q);break;case f.PLAYING:N();d("#"+p.id,{background:"transparent"});break;case f.PAUSED:N("play");break}}this.getDisplayElement=function(){return p};function L(){if(o){var O=DOCUMENT.createElement("img");O.addEventListener("load",function(){u=O.width;I=O.height;s()},false);O.src=o}else{u=I=0}}function C(O){var P=w.getSkinElement("display",O);if(P){return P}return null}function s(){l.stretch(H.jwGetStretching(),p,p.clientWidth,p.clientHeight,u,I)}this.resize=s;x()};d(a,{position:b,cursor:"pointer",width:i,height:i,overflow:"hidden"});d(a+" *",{"-webkit-transition":g,"-moz-transition":g,"-o-transition":g});d(a+" button, "+a+" .jwicon",{border:c,position:b,left:"50%",top:"50%",padding:0,cursor:"pointer"});d({position:b,left:"50%",top:"50%",padding:0,cursor:"pointer"})})(jwplayer.html5);(function(a){var b=jwplayer.utils,c=jwplayer.events;a.model=function(d){var j=this,f,l,m=b.getCookies(),h={width:480,height:320,item:0,playlist:[],skin:undefined,volume:90,mute:false,repeat:"",stretching:b.stretching.UNIFORM,autostart:false,debug:undefined};function i(n){return n}function k(){b.extend(j,new c.eventdispatcher());j.config=b.extend({},h,m,i(d));b.extend(j,{id:d.id,state:c.state.IDLE,position:0,buffer:0,},j.config);j.setItem(j.config.item);l=document.createElement("video");f=new a.video(l);f.addGlobalListener(e)}var g={};g[c.JWPLAYER_MEDIA_MUTE]="mute";g[c.JWPLAYER_MEDIA_VOLUME]="volume";g[c.JWPLAYER_PLAYER_STATE]="newstate->state";g[c.JWPLAYER_MEDIA_BUFFER]="bufferPercent->buffer";g[c.JWPLAYER_MEDIA_TIME]="position";function e(n){var p=g[n.type];if(p){var q=p.split("->"),r=q[0],o=q[1]?q[1]:r;if(j[o]!=n[r]){j[o]=n[r];j.sendEvent(n.type,n)}}else{j.sendEvent(n.type,n)}}this.getVideo=function(){return f};this.setFullscreen=function(n){if(n!=j.fullscreen){j.fullscreen=n;j.sendEvent(c.JWPLAYER_FULLSCREEN,{fullscreen:n})}};this.setItem=function(n){var o;if(n==j.playlist.length||n<-1){o=0}else{if(n==-1||n>j.playlist.length){o=j.playlist.length-1}else{o=n}}if(o!=j.item){j.item=o;j.sendEvent(c.JWPLAYER_PLAYLIST_ITEM,{index:j.item})}};k()}})(jwplayer.html5);(function(a){a.player=function(b){var j=this,h=new a.model(b),e=new a.view(this,h),f=new a.controller(h,e);function i(){j.id=h.id;var k=new a.setup(h,e,f);k.addEventListener(jwplayer.events.JWPLAYER_READY,c);k.addEventListener(jwplayer.events.JWPLAYER_ERROR,g);k.start()}function c(k){f.sendEvent(k.type,k);f.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_LOADED,{playlist:h.playlist});f.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_ITEM,{index:h.item});f.load();setTimeout(e.resize,0)}function g(k){console.log(k);alert("Can't set up: "+k.message)}this.jwPlay=f.play;this.jwPause=f.pause;this.jwStop=f.stop;this.jwSeek=f.seek;this.jwSetVolume=f.setVolume;this.jwSetMute=f.setMute;this.jwLoad=f.load;this.jwPlaylistNext=f.next;this.jwPlaylistPrev=f.prev;this.jwPlaylistItem=f.item;this.jwSetFullscreen=f.setFullscreen;this.jwResize=e.resize;function d(k){return function(){return h[k]}}this.jwGetPlaylistIndex=d("item");this.jwGetPosition=d("position");this.jwGetDuration=d("duration");this.jwGetBuffer=d("buffer");this.jwGetWidth=d("width");this.jwGetHeight=d("height");this.jwGetFullscreen=d("fullscreen");this.jwGetVolume=d("volume");this.jwGetMute=d("mute");this.jwGetState=d("state");this.jwGetStretching=d("stretching");this.jwGetPlaylist=d("playlist");this.jwAddEventListener=f.addEventListener;this.jwRemoveEventListener=f.removeEventListener;i()}})(jwplayer.html5);(function(a){var b=jwplayer.utils;a.playlist=function(c){var e=[];if(c&&c instanceof Array&&c.length>0){for(var d in c){if(!isNaN(parseInt(d))){e.push(new a.playlistitem(c[d]))}}}else{e.push(new a.playlistitem(c))}return e}})(jwplayer.html5);(function(a){a.playlistitem=function(c){var d={description:"",image:"",link:"",mediaid:"",title:"",provider:"",file:"",duration:-1,start:0,currentLevel:-1,levels:[]};var b=jwplayer.utils.extend({},d,c);if(b.levels.length===0){b.levels[0]=new a.playlistitemlevel(b)}return b}})(jwplayer.html5);(function(a){a.html5.playlistitemlevel=function(b){var d={file:"",streamer:"",bitrate:0,width:0};for(var c in d){if(a.utils.exists(b[c])){d[c]=b[c]}}return d}})(jwplayer);(function(a){var d=jwplayer,b=d.utils,c=d.events;a.playlistloader=function(){var f=new c.eventdispatcher();b.extend(this,f);this.load=function(h){b.ajax(h,g,e)};function g(i){try{var k=i.responseXML.firstChild;if(a.parsers.localName(k)=="xml"){k=k.nextSibling}var h=a.parsers.rssparser.parse(k);f.sendEvent(c.JWPLAYER_PLAYLIST_LOADED,{playlist:new a.playlist(h)})}catch(j){e("Could not load the playlist.")}}function e(h){f.sendEvent(c.JWPLAYER_ERROR,{message:h?h:"Could not load playlist an unknown reason."})}}})(jwplayer.html5);(function(f){var h=jwplayer,k=h.utils,e=h.events,i="config",d="skin",c="playlist",j="preview",b="components",a="plugins",g="ready";f.setup=function(q,F,G){var J=q,o=F,D=G,s={},A={},y,x=new e.eventdispatcher(),t=false,u=[];function r(){p(i,n);p(d,N,i);p(c,w,i);p(j,I,c);p(b,M,d);p(a,H,b+","+c);p(g,B,a)}function p(O,Q,P){u.push({name:O,method:Q,depends:P})}function E(){for(var Q=0;Q<u.length;Q++){var O=u[Q];if(L(O.depends)){u.splice(Q,1);try{O.method();E()}catch(P){v(P.message)}return}}if(u.length>0&&!t){setTimeout(E,500)}}function L(Q){if(!Q){return true}var P=Q.split(",");for(var O=0;O<P.length;O++){if(!s[P[O]]){return false}}return true}function m(O){s[O]=true}function n(){m(i)}function N(){y=new f.skin();y.load(J.config.skin,z)}function z(O){m(d)}function w(){switch(k.typeOf(J.config.playlist)){case"string":var O=new f.playlistloader();O.addEventListener(e.JWPLAYER_PLAYLIST_LOADED,l);O.addEventListener(e.JWPLAYER_ERROR,C);O.load(J.config.playlist);break;case"array":J.playlist=new f.playlist(J.config.playlist);m(c)}}function l(O){J.playlist=O.playlist;m(c)}function C(O){v(O.message)}function I(){var P=J.playlist[J.item].image;if(P){var O=new Image();O.addEventListener("load",K,false);O.addEventListener("error",K,false);O.src=P}}function K(O){m(j)}function M(){o.setup(y);m(b)}function H(){m(a)}function B(){x.sendEvent(e.JWPLAYER_READY);m(g)}function v(O){t=true;x.sendEvent(e.JWPLAYER_ERROR,{message:O})}k.extend(this,x);this.start=E;r()}})(jwplayer.html5);(function(a){a.skin=function(){var b={};var c=false;this.load=function(d,e){new a.skinloader(d,function(f){c=true;b=f;e()},function(){new a.skinloader("",function(f){c=true;b=f;e()})})};this.getSkinElement=function(d,e){if(c){try{return b[d].elements[e]}catch(f){jwplayer.utils.log("No such skin component / element: ",[d,e])}}return null};this.getComponentSettings=function(d){if(c&&b&&b[d]){return b[d].settings}return null};this.getComponentLayout=function(d){if(c){var e=b[d].layout;if(e&&(e.left||e.right||e.center)){return b[d].layout}}return null}}})(jwplayer.html5);(function(a){var b=jwplayer.utils;a.skinloader=function(g,p,k){var o={};var d=p;var l=k;var f=true;var j;var n=g;var s=false;function m(){if(typeof n!="string"||n===""){e(a.defaultskin().xml)}else{b.ajax(b.getAbsolutePath(n),function(t){try{if(b.exists(t.responseXML)){e(t.responseXML);return}}catch(u){i()}e(a.defaultskin().xml)},function(t){e(a.defaultskin().xml)})}}function e(y){var E=y.getElementsByTagName("component");if(E.length===0){return}for(var H=0;H<E.length;H++){var C=E[H].getAttribute("name");var B={settings:{},elements:{},layout:{}};o[C]=B;var G=E[H].getElementsByTagName("elements")[0].getElementsByTagName("element");for(var F=0;F<G.length;F++){c(G[F],C)}var z=E[H].getElementsByTagName("settings")[0];if(z&&z.childNodes.length>0){var K=z.getElementsByTagName("setting");for(var P=0;P<K.length;P++){var Q=K[P].getAttribute("name");var I=K[P].getAttribute("value");var x=/color$/.test(Q)?"color":null;o[C].settings[Q]=b.typechecker(I,x)}}var L=E[H].getElementsByTagName("layout")[0];if(L&&L.childNodes.length>0){var M=L.getElementsByTagName("group");for(var w=0;w<M.length;w++){var A=M[w];o[C].layout[A.getAttribute("position")]={elements:[]};for(var O=0;O<A.attributes.length;O++){var D=A.attributes[O];o[C].layout[A.getAttribute("position")][D.name]=D.value}var N=A.getElementsByTagName("*");for(var v=0;v<N.length;v++){var t=N[v];o[C].layout[A.getAttribute("position")].elements.push({type:t.tagName});for(var u=0;u<t.attributes.length;u++){var J=t.attributes[u];o[C].layout[A.getAttribute("position")].elements[v][J.name]=J.value}if(!b.exists(o[C].layout[A.getAttribute("position")].elements[v].name)){o[C].layout[A.getAttribute("position")].elements[v].name=t.tagName}}}}f=false;r()}}function r(){clearInterval(j);if(!s){j=setInterval(function(){q()},100)}}function c(y,x){var w=new Image();var t=y.getAttribute("name");var v=y.getAttribute("src");var A;if(v.indexOf("data:image/png;base64,")===0){A=v}else{var u=b.getAbsolutePath(n);var z=u.substr(0,u.lastIndexOf("/"));A=[z,x,v].join("/")}o[x].elements[t]={height:0,width:0,src:"",ready:false,image:w};w.onload=function(B){h(w,t,x)};w.onerror=function(B){s=true;r();l()};w.src=A}function i(){for(var u in o){var w=o[u];for(var t in w.elements){var x=w.elements[t];var v=x.image;v.onload=null;v.onerror=null;delete x.image;delete w.elements[t]}delete o[u]}}function q(){for(var t in o){if(t!="properties"){for(var u in o[t].elements){if(!o[t].elements[u].ready){return}}}}if(f===false){clearInterval(j);d(o)}}function h(t,v,u){if(o[u]&&o[u].elements[v]){o[u].elements[v].height=t.height;o[u].elements[v].width=t.width;o[u].elements[v].src=t.src;o[u].elements[v].ready=true;r()}else{b.log("Loaded an image for a missing element: "+u+"."+v)}}m()}})(jwplayer.html5);(function(a){var f=jwplayer,d=f.utils,e=f.events,c=e.state,b=d.isMobile();a.video=function(D){var w={abort:t,canplay:J,canplaythrough:t,durationchange:h,emptied:t,ended:t,error:A,loadeddata:t,loadedmetadata:J,loadstart:t,pause:o,play:o,playing:o,progress:t,ratechange:t,readystatechange:t,seeked:t,seeking:t,stalled:t,suspend:t,timeupdate:k,volumechange:G,waiting:x},s,m,l,E,y,v,H=c.IDLE,r=0,n=-1,z=-1,p=new e.eventdispatcher();d.extend(this,p);function u(L){s=L;K();s.controls=true;s.controls=false}function K(){for(var L in w){s.addEventListener(L,w[L],false)}}function C(L,M){p.sendEvent(L,M)}function t(L){}function h(L){m=s.duration;k()}function k(L){if(H==c.PLAYING){l=s.currentTime;C(e.JWPLAYER_MEDIA_TIME,{position:l,duration:m});if(l>=m&&m>0){F()}}}function J(L){if(!y){y=true;C(e.JWPLAYER_MEDIA_BUFFER_FULL);if(v>0){B(v)}}}function o(L){if(s.paused){I(c.PAUSED)}else{I(c.PLAYING)}}function x(L){I(c.BUFFERING)}function A(L){d.log("Error: %o",s.error);I(c.IDLE)}this.load=function(L){y=false;v=0;m=0;l=0;I(c.BUFFERING);s.src=L;s.load();n=setInterval(i,100);if(b){s.controls=true;s.style.opacity=1}};var q=this.stop=function(){s.removeAttribute("src");s.load();s.style.opacity=0;clearInterval(n);I(c.IDLE)};this.play=function(){s.style.opacity=1;s.play()};this.pause=function(){s.pause()};var B=this.seek=function(L){if(y){v=0;C(e.JWPLAYER_MEDIA_SEEK,{position:l,offset:L});s.currentTime=L}else{v=L}};var j=this.volume=function(L){if(s.muted){s.muted=false}s.volume=L/100};function G(L){C(e.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(s.volume*100)});C(e.JWPLAYER_MEDIA_MUTE,{mute:s.muted})}this.mute=function(L){if(!d.exists(L)){L=!s.mute}if(L){r=s.volume*100;j(0);s.muted=true}else{j(r)}};function I(L){if(L==c.PAUSED&&H==c.IDLE){return}if(H!=L){var M=H;H=L;C(e.JWPLAYER_PLAYER_STATE,{oldstate:M,newstate:L})}}function i(){var L=g();if(L!=z){z=L;C(e.JWPLAYER_MEDIA_BUFFER,{bufferPercent:Math.round(z*100)})}if(L>=1){clearInterval(n)}}function g(){if(s.buffered.length==0||s.duration==0){return 0}else{return s.buffered.end(s.buffered.length-1)/s.duration}}function F(){q();C(e.JWPLAYER_MEDIA_COMPLETE)}this.getTag=function(){return D};u(D)}})(jwplayer.html5);(function(c){var g=jwplayer,e=g.utils,b=e.appendStylesheet,f=jwplayer.events,d=f.state;DOCUMENT=document,VIEW_CONTAINER_CLASS="jwplayer",VIEW_VIDEO_CONTAINER_CLASS="jwvideocontainer",VIEW_CONTROLS_CONTAINER_CLASS="jwcontrolscontainer";c.view=function(t,j){var w=t,y=j,x={},p,B,h=0,u=2000,q;this.setup=function(D){w.skin=D;p=DOCUMENT.createElement("div");p.className=VIEW_CONTAINER_CLASS;p.id=w.id;var C=document.getElementById(w.id);C.parentNode.replaceChild(p,C);q=DOCUMENT.createElement("span");q.className=VIEW_VIDEO_CONTAINER_CLASS;q.appendChild(y.getVideo().getTag());B=DOCUMENT.createElement("span");B.className=VIEW_CONTROLS_CONTAINER_CLASS;s();p.appendChild(q);p.appendChild(B);DOCUMENT.addEventListener("webkitfullscreenchange",i,false);DOCUMENT.addEventListener("mozfullscreenchange",i,false);DOCUMENT.addEventListener("keydown",m,false);w.jwAddEventListener(f.JWPLAYER_PLAYER_STATE,o);p.addEventListener("mouseout",v,false);p.addEventListener("mousemove",function(E){l();clearTimeout(h);h=setTimeout(v,u)},false)};function v(){if(w.jwGetState()==d.PLAYING){r()}clearTimeout(h);h=0}function s(){var E=w.jwGetWidth(),C=w.jwGetHeight(),F=w.skin.getComponentSettings("controlbar"),D=w.skin.getComponentSettings("display");if(C>40||C.indexOf("%")){x.display=new c.display(w,D);B.appendChild(x.display.getDisplayElement())}else{D.backgroundcolor="transparent";F.margin=0}b("#"+p.id,{"background-color":D.backgroundcolor?D.backgroundcolor:0,width:E,height:C});if(!e.isMobile()){x.controlbar=new c.controlbar(w,F);B.appendChild(x.controlbar.getDisplayElement())}}var A=this.fullscreen=function(C){if(!e.exists(C)){C=!y.fullscreen}if(C){if(!y.fullscreen){k(true);if(p.requestFullScreen){p.requestFullScreen()}else{if(p.mozRequestFullScreen){p.mozRequestFullScreen()}else{if(p.webkitRequestFullScreenWithKeys){p.webkitRequestFullScreenWithKeys()}else{if(p.webkitRequestFullScreen){p.webkitRequestFullScreen()}}}}}y.setFullscreen(true)}else{k(false);if(DOCUMENT.cancelFullScreen){DOCUMENT.cancelFullScreen()}else{if(DOCUMENT.mozCancelFullScreen){DOCUMENT.mozCancelFullScreen()}else{if(DOCUMENT.webkitCancelFullScreen){DOCUMENT.webkitCancelFullScreen()}}}y.setFullscreen(false)}};function n(D,C){if(x.display){x.display.resize(D,C)}if(x.controlbar){x.controlbar.resize(D,C)}if(p.style.opacity==0){p.style.opacity=1}return}this.resize=n;function m(C){switch(C.keyCode){case 27:if(y.fullscreen){A(false)}break;case 32:w.jwPlay();break}}function k(C){if(C){p.className+=" jwfullscreen"}else{p.className=p.className.replace(/\s+jwfullscreen/,"")}}function z(){return(DOCUMENT.mozFullScreenElement==p||DOCUMENT.webkitCurrentFullScreenElement==p)}function i(C){y.setFullscreen(z());A(y.fullscreen)}function r(){B.style.opacity=0}function l(){B.style.opacity=1}function o(C){switch(C.newstate){case d.PLAYING:r();break;case d.COMPLETED:case d.IDLE:case d.BUFFERING:case d.PAUSED:l();break}}};var a="opacity .25s ease";b("."+VIEW_CONTAINER_CLASS,{position:"relative",overflow:"hidden",opacity:0,"-webkit-transition":a,"-moz-transition":a,"-o-transition":a});b("."+VIEW_VIDEO_CONTAINER_CLASS+" ,."+VIEW_CONTROLS_CONTAINER_CLASS,{position:"absolute",width:"100%",height:"100%","-webkit-transition":a,"-moz-transition":a,"-o-transition":a});b("."+VIEW_VIDEO_CONTAINER_CLASS+" video",{background:"transparent",width:"100%",height:"100%",opacity:0,"-webkit-transition":"opacity .15s ease"});b("."+VIEW_CONTAINER_CLASS+":-webkit-full-screen",{width:"100% !important",height:"100% !important"});b("."+VIEW_CONTAINER_CLASS+":-moz-full-screen",{width:"100% !important",height:"100% !important"});b("."+VIEW_CONTAINER_CLASS+".jwfullscreen",{left:0,right:0,top:0,bottom:0,"z-index":1000,position:"fixed !important"});b("."+VIEW_CONTAINER_CLASS+" .jwuniform",{"background-size":"contain !important"});b("."+VIEW_CONTAINER_CLASS+" .jwfill",{"background-size":"cover !important"});b("."+VIEW_CONTAINER_CLASS+" .jwexactfit",{"background-size":"100% 100% !important"});b("."+VIEW_CONTAINER_CLASS+" .jwnone",{"background-size":null})})(jwplayer.html5)};1 if(typeof jwplayer=="undefined"){jwplayer=function(a){if(jwplayer.api){return jwplayer.api.selectPlayer(a)}};var $jw=jwplayer;jwplayer.version="6.0";jwplayer.vid=document.createElement("video");jwplayer.audio=document.createElement("audio");jwplayer.source=document.createElement("source");(function(e){var i=document;var f=window;var j=e.utils=function(){};j.exists=function(o){switch(typeof(o)){case"string":return(o.length>0);break;case"object":return(o!==null);case"undefined":return false}return true};var a={},b={};j.css=function(o,q){if(!a[o]){var s=i.createElement("style");s.type="text/css";i.getElementsByTagName("head")[0].appendChild(s);a[o]=s}if(!b[o]){b[o]={}}for(var p in q){var r=n(p,q[p]);if(j.exists(b[o][p])&&!j.exists(r)){delete b[o][p]}else{b[o][p]=r}}g(o)};function n(o,p){if(typeof p==="undefined"){return undefined}if(typeof p=="number"){if(isNaN(p)){return undefined}switch(o){case"z-index":case"opacity":return p;break;default:if(o.match(/color/i)){return"#"+j.strings.pad(p.toString(16),6)}else{return Math.ceil(p)+"px"}break}}else{return p}}function g(o){if(a[o]){var p=o+"{\n";var r=b[o];for(var q in r){p+=" "+q+": "+r[q]+";\n"}p+="}\n";a[o].innerHTML=p}}j.clearCss=function(p){for(var q in b){if(q.indexOf(p)>=0){delete b[q]}}for(var o in a){if(o.indexOf(p)>=0){a[o].innerHTML=""}}};j.getAbsolutePath=function(u,t){if(!j.exists(t)){t=i.location.href}if(!j.exists(u)){return undefined}if(c(u)){return u}var v=t.substring(0,t.indexOf("://")+3);var s=t.substring(v.length,t.indexOf("/",v.length+1));var p;if(u.indexOf("/")===0){p=u.split("/")}else{var q=t.split("?")[0];q=q.substring(v.length+s.length+1,q.lastIndexOf("/"));p=q.split("/").concat(u.split("/"))}var o=[];for(var r=0;r<p.length;r++){if(!p[r]||!j.exists(p[r])||p[r]=="."){continue}else{if(p[r]==".."){o.pop()}else{o.push(p[r])}}}return v+s+"/"+o.join("/")};function c(p){if(!j.exists(p)){return}var q=p.indexOf("://");var o=p.indexOf("?");return(q>0&&(o<0||(o>q)))}j.extend=function(){var o=j.extend["arguments"];if(o.length>1){for(var q=1;q<o.length;q++){for(var p in o[q]){o[0][p]=o[q][p]}}return o[0]}return null};j.parseDimension=function(o){if(typeof o=="string"){if(o===""){return 0}else{if(o.lastIndexOf("%")>-1){return o}else{return parseInt(o.replace("px",""),10)}}}return o};j.timeFormat=function(o){if(o>0){str=Math.floor(o/60)<10?"0"+Math.floor(o/60)+":":Math.floor(o/60)+":";str+=Math.floor(o%60)<10?"0"+Math.floor(o%60):Math.floor(o%60);return str}else{return"00:00"}};j.log=function(p,o){if(typeof console!="undefined"&&typeof console.log!="undefined"){if(o){console.log(p,o)}else{console.log(p)}}};j.getBoundingClientRect=function(o){if(typeof o.getBoundingClientRect=="function"){return o.getBoundingClientRect()}else{return{left:o.offsetLeft+i.body.scrollLeft,top:o.offsetTop+i.body.scrollTop,width:o.offsetWidth,height:o.offsetHeight}}};j.userAgentMatch=function(p){var o=navigator.userAgent.toLowerCase();return(o.match(p)!==null)};j.isMobile=function(){return j.userAgentMatch(/(iP(hone|ad|od))|android/i)};j.isIPod=function(){return e.utils.userAgentMatch(/iP(hone|od)/i)};j.saveCookie=function(o,p){i.cookie="jwplayer."+o+"="+p+"; path=/"};j.getCookies=function(){var r={};var q=i.cookie.split("; ");for(var p=0;p<q.length;p++){var o=q[p].split("=");if(o[0].indexOf("jwplayer.")==0){r[o[0].substring(9,o[0].length)]=o[1]}}return r};j.ajax=function(s,r,o){var q;if(d(s)&&j.exists(f.XDomainRequest)){q=new XDomainRequest();q.onload=m(q,s,r,o);q.onerror=l(o,s,q)}else{if(j.exists(f.XMLHttpRequest)){q=new XMLHttpRequest();q.onreadystatechange=h(q,s,r,o);q.onerror=l(o,s)}else{if(o){o()}}}try{q.open("GET",s,true);q.send(null)}catch(p){if(o){o(s)}}return q};function d(o){if(o&&o.indexOf("://")>=0){if(o.split("/")[2]!=window.location.href.split("/")[2]){return true}}return false}function l(o,q,p){return function(){o(q)}}function h(p,r,q,o){return function(){if(p.readyState===4){if(p.status==200){m(p,r,q,o)()}else{if(o){o(r)}}}}}function m(p,r,q,o){return function(){if(!j.exists(p.responseXML)){try{var s;if(f.DOMParser){s=(new DOMParser()).parseFromString(p.responseText,"text/xml")}else{s=new ActiveXObject("Microsoft.XMLDOM");s.async="false";s.loadXML(p.responseText)}if(s){p=e.utils.extend({},p,{responseXML:s})}}catch(t){if(o){o(r)}return}}q(p)}}j.typeOf=function(p){var o=typeof p;if(o==="object"){if(!p){return"null"}return(p instanceof Array)?"array":o}else{return o}};j.stretch=function(u,C,B,s,A,t,q){var p=(j.exists(B)&&j.exists(A))?B/A:0,r=(j.exists(s)&&j.exists(t))?s/t:0,z=0,w=0,o={},v;switch(u.toLowerCase()){case k.NONE:case k.FILL:case k.EXACTFIT:v="jw"+u.toLowerCase();break;case k.UNIFORM:v="jw"+u.toLowerCase();if(p>r){if((A*r)/B>0.95){v="jwexactfit"}}else{if((t*p)/s>0.95){v="jwexactfit"}}break;default:break}C.className=C.className.replace(/jw(none|exactfit|uniform|fill)/g,"");C.className+=" "+v};var k=j.stretching={NONE:"none",FILL:"fill",UNIFORM:"uniform",EXACTFIT:"exactfit"}})(jwplayer);(function(b){var a=b.strings=function(){};a.trim=function(c){return c.replace(/^\s*/,"").replace(/\s*$/,"")};a.pad=function(d,e,c){if(!c){c="0"}while(d.length<e){d=c+d}return d};a.serialize=function(c){if(c==null){return null}else{if(c=="true"){return true}else{if(c=="false"){return false}else{if(isNaN(Number(c))||c.length>5||c.length==0){return c}else{return Number(c)}}}}};a.seconds=function(e){e=e.replace(",",".");var c=e.split(":");var d=0;if(e.substr(-1)=="s"){d=Number(e.substr(0,e.length-1))}else{if(e.substr(-1)=="m"){d=Number(e.substr(0,e.length-1))*60}else{if(e.substr(-1)=="h"){d=Number(e.substr(0,e.length-1))*3600}else{if(c.length>1){d=Number(c[c.length-1]);d+=Number(c[c.length-2])*60;if(c.length==3){d+=Number(c[c.length-3])*3600}}else{d=Number(e)}}}}return d};a.xmlAttribute=function(c,d){for(var e=0;e<c.attributes.length;e++){if(c.attributes[e].name&&c.attributes[e].name.toLowerCase()==d.toLowerCase()){return c.attributes[e].value.toString()}}return""};a.jsonToString=function(g){var i=i||{};if(i&&i.stringify){return i.stringify(g)}var d=typeof(g);if(d!="object"||g===null){if(d=="string"){g='"'+g.replace(/"/g,'\\"')+'"'}else{return String(g)}}else{var h=[],c=(g&&g.constructor==Array);for(var e in g){var f=g[e];switch(typeof(f)){case"string":f='"'+f.replace(/"/g,'\\"')+'"';break;case"object":if(b.exists(f)){f=a.jsonToString(f)}break}if(c){if(typeof(f)!="function"){h.push(String(f))}}else{if(typeof(f)!="function"){h.push('"'+e+'":'+String(f))}}}if(c){return"["+String(h)+"]"}else{return"{"+String(h)+"}"}}};a.extension=function(c){if(!c){return""}c=c.substring(c.lastIndexOf("/")+1,c.length).split("?")[0];if(c.lastIndexOf(".")>-1){return c.substr(c.lastIndexOf(".")+1,c.length).toLowerCase()}}})(jwplayer.utils);(function(b){var d=new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);b.typechecker=function(g,f){f=!b.exists(f)?c(g):f;return e(g,f)};function c(f){var g=["true","false","t","f"];if(g.toString().indexOf(f.toLowerCase().replace(" ",""))>=0){return"boolean"}else{if(d.test(f)){return"color"}else{if(!isNaN(parseInt(f,10))&&parseInt(f,10).toString().length==f.length){return"integer"}else{if(!isNaN(parseFloat(f))&&parseFloat(f).toString().length==f.length){return"float"}}}}return"string"}function e(g,f){if(!b.exists(f)){return g}switch(f){case"color":if(g.length>0){return a(g)}return null;case"integer":return parseInt(g,10);case"float":return parseFloat(g);case"boolean":if(g.toLowerCase()=="true"){return true}else{if(g=="1"){return true}}return false}return g}function a(f){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)}})(jwplayer.utils);(function(a){a.events={COMPLETE:"COMPLETE",ERROR:"ERROR",API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_MEDIA_BEFOREPLAY:"jwplayerMediaBeforePlay",JWPLAYER_MEDIA_BEFORECOMPLETE:"jwplayerMediaBeforeComplete",JWPLAYER_COMPONENT_SHOW:"jwplayerComponentShow",JWPLAYER_COMPONENT_HIDE:"jwplayerComponentHide",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",JWPLAYER_MEDIA_SEEK:"jwplayerMediaSeek",JWPLAYER_MEDIA_TIME:"jwplayerMediaTime",JWPLAYER_MEDIA_VOLUME:"jwplayerMediaVolume",JWPLAYER_MEDIA_META:"jwplayerMediaMeta",JWPLAYER_MEDIA_MUTE:"jwplayerMediaMute",JWPLAYER_PLAYER_STATE:"jwplayerPlayerState",state:{BUFFERING:"BUFFERING",IDLE:"IDLE",PAUSED:"PAUSED",PLAYING:"PLAYING",COMPLETED:"COMPLETED"},JWPLAYER_PLAYLIST_LOADED:"jwplayerPlaylistLoaded",JWPLAYER_PLAYLIST_ITEM:"jwplayerPlaylistItem",JWPLAYER_INSTREAM_CLICK:"jwplayerInstreamClicked",JWPLAYER_INSTREAM_DESTROYED:"jwplayerInstreamDestroyed"}})(jwplayer);(function(a){var b=jwplayer.utils;a.eventdispatcher=function(h,c){var e=h,g=c,f,d;this.resetEventListeners=function(){f={};d=[]};this.resetEventListeners();this.addEventListener=function(i,l,k){try{if(!b.exists(f[i])){f[i]=[]}if(b.typeOf(l)=="string"){l=(new Function("return "+l))()}f[i].push({listener:l,count:k})}catch(j){b.log("error",j)}return false};this.removeEventListener=function(j,l){if(!f[j]){return}try{for(var i=0;i<f[j].length;i++){if(f[j][i].listener.toString()==l.toString()){f[j].splice(i,1);break}}}catch(k){b.log("error",k)}return false};this.addGlobalListener=function(k,j){try{if(b.typeOf(k)=="string"){k=(new Function("return "+k))()}d.push({listener:k,count:j})}catch(i){b.log("error",i)}return false};this.removeGlobalListener=function(k){if(!k){return}try{for(var i=0;i<d.length;i++){if(d[i].listener.toString()==k.toString()){d.splice(i,1);break}}}catch(j){b.log("error",j)}return false};this.sendEvent=function(k,m){if(!b.exists(m)){m={}}b.extend(m,{id:e,version:jwplayer.version,type:k});if(g){b.log(k,m)}if(b.typeOf(f[k])!="undefined"){for(var j=0;j<f[k].length;j++){try{f[k][j].listener(m)}catch(l){b.log("There was an error while handling a listener: "+l.toString(),f[k][j].listener)}if(f[k][j]){if(f[k][j].count===1){delete f[k][j]}else{if(f[k][j].count>0){f[k][j].count=f[k][j].count-1}}}}}var i;for(i=0;i<d.length;i++){try{d[i].listener(m)}catch(l){b.log("There was an error while handling a listener: "+l.toString(),d[i].listener)}if(d[i]){if(d[i].count===1){delete d[i]}else{if(d[i].count>0){d[i].count=d[i].count-1}}}}}}})(jwplayer.events);(function(a){a.html5={}})(jwplayer);(function(a){a.utils={}})(jwplayer.html5);(function(a){var b=a.animations=function(){};b.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d;c.style.msTransform=d};b.transformOrigin=function(c,d){c.style.webkitTransformOrigin=d;c.style.MozTransformOrigin=d;c.style.OTransformOrigin=d;c.style.msTransformOrigin=d};b.rotate=function(c,d){b.transform(c,"rotate("+d+"deg)")}})(jwplayer.html5.utils);(function(a){a.parsers={localName:function(b){if(!b){return""}else{if(b.localName){return b.localName}else{if(b.baseName){return b.baseName}else{return""}}}},textContent:function(b){if(!b){return""}else{if(b.textContent){return b.textContent}else{if(b.text){return b.text}else{return""}}}},getChildNode:function(c,b){return c.childNodes[b]},numChildren:function(b){if(b.childNodes){return b.childNodes.length}else{return 0}}}})(jwplayer.html5);(function(b){var a=b.html5.parsers;var d=a.jwparser=function(){};var c="jwplayer";d.parseEntry=function(h,j){for(var f=0;f<h.childNodes.length;f++){var g=h.childNodes[f];if(g.prefix==c){var e=a.localName(g);j[e]=b.utils.strings.serialize(a.textContent(g));if(e=="file"&&j.levels){delete j.levels}}if(!j.file){j.file=j.link}}return j}})(jwplayer);(function(d){var h=jwplayer.utils.strings,g=h.xmlAttribute,b=d.localName,a=d.textContent,c=d.numChildren;var f=d.mediaparser=function(){};var e="media";f.parseGroup=function(m,n){for(var k=0;k<c(m);k++){var l=m.childNodes[k];if(l.prefix==e){if(!b(l)){continue}switch(b(l).toLowerCase()){case"content":n.file=g(l,"url");if(g(l,"duration")){n.duration=h.seconds(g(l,"duration"))}if(g(l,"start")){n.start=h.seconds(g(l,"start"))}if(c(l)>0){n=f.parseGroup(l,n)}if(g(l,"width")||g(l,"bitrate")||g(l,"url")){if(!n.levels){n.levels=[]}n.levels.push({width:g(l,"width"),bitrate:g(l,"bitrate"),file:g(l,"url")})}break;case"title":n.title=a(l);break;case"description":n.description=a(l);break;case"keywords":n.tags=a(l);break;case"thumbnail":n.image=g(l,"url");break;case"credit":n.author=a(l);break;case"player":var j=l.url;break;case"group":f.parseGroup(l,n);break}}}return n}})(jwplayer.html5.parsers);(function(f){var g=jwplayer.utils,a=f.textContent,d=f.getChildNode,e=f.numChildren,c=f.localName;f.rssparser={};f.rssparser.parse=function(o){var h=[];for(var m=0;m<e(o);m++){var n=d(o,m),k=c(n).toLowerCase();if(k=="channel"){for(var l=0;l<e(n);l++){var p=d(n,l);if(c(p).toLowerCase()=="item"){h.push(b(p))}}}}return h};function b(l){var m={};for(var j=0;j<l.childNodes.length;j++){var k=l.childNodes[j];var h=c(k);if(!h){continue}switch(h.toLowerCase()){case"enclosure":m.file=g.strings.xmlAttribute(k,"url");break;case"title":m.title=a(k);break;case"pubdate":m.date=a(k);break;case"description":m.description=a(k);break;case"link":m.link=a(k);break;case"category":if(m.tags){m.tags+=a(k)}else{m.tags=a(k)}break}}m=f.mediaparser.parseGroup(l,m);m=f.jwparser.parseEntry(l,m);return new jwplayer.html5.playlistitem(m)}})(jwplayer.html5.parsers);(function(l){var u=l.html5,h=l.utils,i=l.events,p=l.events.state,o=h.css,b="button",n="text",e="divider",q="slider",f="relative",g="absolute",a="none",m="block",s="inline",k="inline-block",c="left",v="right",j="100%",r="width .25s linear, left .25s linear, opacity .25s, background .25s",t=".jwcontrolbar",d=document;u.controlbar=function(C,ao){var A,S,B={margin:10,font:"Arial,sans-serif",fontsize:10,fontcolor:parseInt("000000",16),fontstyle:"normal",fontweight:"bold",layout:{left:{position:"left",elements:[{name:"play",type:b},{name:"divider",type:e},{name:"prev",type:b},{name:"divider",type:e},{name:"next",type:b},{name:"divider",type:e},{name:"elapsed",type:n}]},center:{position:"center",elements:[{name:"time",type:q}]},right:{position:"right",elements:[{name:"duration",type:n},{name:"blank",type:b},{name:"divider",type:e},{name:"mute",type:b},{name:"volume",type:q},{name:"divider",type:e},{name:"fullscreen",type:b}]}}},R,ay,aj,aw,am,aG,L,ag=false,ap=0,W={play:"pause",mute:"unmute",fullscreen:"normalscreen"},ax={play:false,mute:false,fullscreen:false},z={play:ab,mute:M,fullscreen:Y,next:y,prev:ae},D={time:V,volume:aB};function aA(){aj={};A=C;am=A.id+"_controlbar";aG=0;aw=N();aw.id=am;aw.className="jwcontrolbar";window.addEventListener("mousemove",aF,false);window.addEventListener("mouseup",aF,false);S=A.skin;R=h.extend({},B,ao);ay=S.getComponentLayout("controlbar");if(!ay){ay=B.layout}U();ar();w()}function w(){A.jwAddEventListener(l.events.JWPLAYER_MEDIA_TIME,aH);A.jwAddEventListener(l.events.JWPLAYER_PLAYER_STATE,G);A.jwAddEventListener(l.events.JWPLAYER_MEDIA_MUTE,aC);A.jwAddEventListener(l.events.JWPLAYER_MEDIA_VOLUME,E);A.jwAddEventListener(l.events.JWPLAYER_MEDIA_BUFFER,J);A.jwAddEventListener(l.events.JWPLAYER_FULLSCREEN,F)}function aH(aI){aG=aI.duration;if(aj.elapsed){aj.elapsed.innerHTML=h.timeFormat(aI.position)}if(aj.duration){aj.duration.innerHTML=h.timeFormat(aI.duration)}if(aI.duration>0){av(aI.position/aI.duration)}else{av(0)}}function G(aI){switch(aI.newstate){case p.BUFFERING:case p.PLAYING:o(aq(".jwtimeSliderThumb"),{opacity:1});Q("play",true);break;case p.PAUSED:if(!ag){Q("play",false)}break;case p.IDLE:Q("play",false);o(aq(".jwtimeSliderThumb"),{opacity:0});if(aj.timeRail){aj.timeRail.className="jwrail";setTimeout(function(){aj.timeRail.className+=" jwsmooth"},100)}az(0);aH({position:0,duration:0});break;case p.COMPLETED:o(aq(),{opacity:0});break}}function aC(aI){Q("mute",aI.mute);x(aI.mute?0:L)}function E(aI){L=aI.volume/100;x(L)}function J(aI){az(aI.bufferPercent/100)}function F(aI){Q("fullscreen",aI.fullscreen)}function U(){h.clearCss("#"+am);o("#"+am,{height:aa("background").height,bottom:R.margin?R.margin:0,left:R.margin?R.margin:0,right:R.margin?R.margin:0});o(aq(".jwtext"),{font:R.fontsize+"px/"+aa("background").height+"px "+R.font,color:R.fontcolor,"font-weight":R.fontweight,"font-style":R.fontstyle,"text-align":"center",padding:"0 5px"})}function aq(aI){return"#"+am+" "+aI}function N(){return d.createElement("span")}function ar(){var aK=ak("capLeft");var aJ=ak("capRight");var aI=ak("background",{position:g,left:aa("capLeft").width,right:aa("capRight").width,"background-repeat":"repeat-x"},true);if(aI){aw.appendChild(aI)}if(aK){aw.appendChild(aK)}at();if(aJ){aw.appendChild(aJ)}}function O(aI){switch(aI.type){case e:return ad(aI);break;case n:return al(aI.name);break;case b:if(aI.name!="blank"){return ac(aI.name)}break;case q:return P(aI.name);break}}function ak(aK,aN,aJ,aP){var aM=N();aM.className="jw"+aK;var aI=aP?" left center":" center";var aL=aa(aK);aM.innerHTML=" ";if(!aL||aL.src==""){return}var aO;if(aJ){aO={background:"url('"+aL.src+"') repeat-x "+aI}}else{aO={background:"url('"+aL.src+"') no-repeat"+aI,width:aL.width}}o(aq(".jw"+aK),h.extend(aO,aN));aj[aK]=aM;return aM}function ac(aK){if(!aa(aK+"Button").src){return null}var aL=d.createElement("button");aL.className="jw"+aK;aL.addEventListener("click",ah(aK),false);var aM=aa(aK+"Button");var aJ=aa(aK+"ButtonOver");aL.innerHTML=" ";T(aq(".jw"+aK),aM,aJ);var aI=W[aK];if(aI){T(aq(".jw"+aK+".jwtoggle"),aa(aI+"Button"),aa(aI+"ButtonOver"))}aj[aK]=aL;return aL}function T(aI,aJ,aK){if(!aJ.src){return}o(aI,{width:aJ.width,background:"url("+aJ.src+") center no-repeat"});if(aK.src){o(aI+":hover",{background:"url("+aK.src+") center no-repeat"})}}function ah(aI){return function(){if(z[aI]){z[aI]()}}}function ab(){if(ax.play){A.jwPause()}else{A.jwPlay()}}function M(){A.jwSetMute();aC({mute:ax.mute})}function aB(aI){if(aI<0.1){aI=0}if(aI>0.9){aI=1}A.jwSetVolume(aI*100);x(aI)}function V(aI){A.jwSeek(aI*aG)}function Y(){A.jwSetFullscreen()}function y(){A.jwPlaylistNext()}function ae(){A.jwPlaylistNext()}function Q(aI,aJ){if(!h.exists(aJ)){aJ=!ax[aI]}if(aj[aI]){aj[aI].className="jw"+aI+(aJ?" jwtoggle jwtoggling":" jwtoggling");setTimeout(function(){aj[aI].className=aj[aI].className.replace(" jwtoggling","")},100)}ax[aI]=aJ}function K(aI){return am+"_"+aI}function al(aI,aM){var aK=N();aK.id=K(aI);aK.className="jwtext jw"+aI;var aJ={};var aL=aa(aI+"Background");if(aL.src){aJ.background="url("+aL.src+") no-repeat center";aJ["background-size"]="100% "+aa("background").height+"px"}o(aq(".jw"+aI),aJ);aK.innerHTML="00:00";aj[aI]=aK;return aK}function ad(aJ){if(aJ.width){var aI=N();aI.className="jwblankDivider";o(aI,{width:parseInt(aJ.width)});return aI}else{if(aJ.element){return ak(aJ.element)}else{return ak(aJ.name)}}}function P(aI){var aL=N();aL.className="jwslider jw"+aI;var aK=ak(aI+"SliderCapLeft");var aJ=ak(aI+"SliderCapRight");if(aJ){aJ.className+=" jwcapRight"}var aM=an(aI);if(aK){aL.appendChild(aK)}aL.appendChild(aM);if(aK){aL.appendChild(aJ)}o(aq(".jw"+aI+" .jwrail"),{left:aa(aI+"SliderCapLeft").width,right:aa(aI+"SliderCapRight").width,});aj[aI]=aL;if(aI=="time"){aE(aL);av(0);az(0)}else{if(aI=="volume"){au(aL)}}return aL}function an(aK){var aN=N();aN.className="jwrail jwsmooth";var aI=["Rail","Buffer","Progress"];for(var aM=0;aM<aI.length;aM++){var aL=ak(aK+"Slider"+aI[aM],null,true,(aK=="volume"));if(aL){aL.className+=" jwstretch";aN.appendChild(aL)}}var aJ=ak(aK+"SliderThumb");if(aJ){o(aq("."+aJ.className),{opacity:0});aJ.className+=" jwthumb";aN.appendChild(aJ)}aN.addEventListener("mousedown",H(aK),false);aj[aK+"Rail"]=aN;return aN}function I(){var aI=A.jwGetState();return(aI==p.IDLE||aI==p.COMPLETED)}function H(aI){return(function(aJ){if(aJ.button!=0){return}aj[aI+"Rail"].className="jwrail";if(aI=="time"){if(!I()){A.jwSeekDrag(true);ag=aI}}else{ag=aI}})}function aF(aI){if(!ag||aI.button!=0){return}var aM=aj[ag].getElementsByClassName("jwrail")[0],aN=h.getBoundingClientRect(aM),aL=(aI.clientX-aN.left)/aN.width;if(aI.type=="mouseup"){var aJ=ag;if(aJ=="time"){A.jwSeekDrag(false)}aj[aJ+"Rail"].className="jwrail jwsmooth";ag=null;D[aJ](aL)}else{if(ag=="time"){av(aL)}else{x(aL)}var aK=(new Date()).getTime();if(aK-ap>500){ap=aK;D[ag](aL)}}}function aE(aI){if(aj.timeSliderThumb){o(aq(".jwtimeSliderThumb"),{"margin-left":(aa("timeSliderThumb").width/-2)})}az(0);av(0)}function au(aK){var aJ=aa("volumeSliderCapLeft").width,aI=aa("volumeSliderCapRight").width,aL=aa("volumeSliderRail").width;o(aq(".jwvolume"),{width:(aJ+aL+aI)})}var X={};function at(){aD("left");aD("center");aD("right");aw.appendChild(X.left);aw.appendChild(X.center);aw.appendChild(X.right);o(aq(".jwright"),{right:aa("capRight").width})}function aD(aJ){var aI=N();aI.className="jwgroup jw"+aJ;X[aJ]=aI;if(ay[aJ]){Z(ay[aJ],X[aJ])}}function Z(aL,aI){if(aL&&aL.elements.length>0){for(var aK=0;aK<aL.elements.length;aK++){var aJ=O(aL.elements[aK]);if(aJ){aI.appendChild(aJ)}}}}var af=this.resize=function(aJ,aI){o(aq(".jwgroup.jwcenter"),{left:Math.round(h.parseDimension(X.left.offsetWidth)+aa("capLeft").width),right:Math.round(h.parseDimension(X.right.offsetWidth)+aa("capRight").width)})};this.getDisplayElement=function(){return aw};function az(aI){aI=Math.min(Math.max(0,aI),1);o(aq(".jwtimeSliderBuffer"),{width:aI*100+"%"})}function ai(aK,aJ,aL){var aI=100*Math.min(Math.max(0,aJ),1)+"%";o(aq(aK+"Progress"),{width:aI});o(aq(aK+"Thumb"),{left:aI})}function x(aI){ai(".jwvolumeSlider",aI,true)}function av(aI){ai(".jwtimeSlider",aI)}function aa(aI){var aJ=S.getSkinElement("controlbar",aI);if(aJ){return aJ}else{return{width:0,height:0,src:"",image:undefined,ready:false}}}this.show=function(){o(aq(),{opacity:1})};this.hide=function(){o(aq(),{opacity:0})};aA()};o(t,{position:g,overflow:"hidden","-webkit-transition":r,"-moz-transition":r,"-o-transition":r});o(t+" span",{height:j,"-webkit-user-select":a,"-webkit-user-drag":a,"user-select":a,"user-drag":a});o(t+" .jwgroup",{display:s});o(t+" span, "+t+" .jwgroup button,"+t+" .jwleft",{position:f,"float":c});o(t+" .jwright",{position:g});o(t+" .jwcenter",{position:g});o(t+" button",{display:k,height:j,border:a,cursor:"pointer","-webkit-transition":r,"-moz-transition":r,"-o-transition":r});o(t+" .jwcapRight",{right:0,position:g});o(t+" .jwtime,"+t+" .jwgroup span.jwstretch",{position:g,height:j,width:j,left:0});o(t+" .jwrail,"+t+" .jwthumb",{position:g,height:j,cursor:"pointer"});o(t+" .jwtime .jwsmooth span",{"-webkit-transition":r,"-moz-transition":r,"-o-transition":r});o(t+" .jwdivider+.jwdivider",{display:a});o(t+" .jwtext",{padding:"0 5px","text-align":"center"});o(t+" .jwtoggling",{"-webkit-transition":a,"-moz-transition":a,"-o-transition":a})})(jwplayer);(function(a){var e=jwplayer,c=e.utils,d=e.events,b=d.state;a.controller=function(g,r){var w=g,f=r,l=g.getVideo(),j=new d.eventdispatcher(w.id,w.config.debug);c.extend(this,j);function m(){w.addGlobalListener(z);w.addEventListener(d.JWPLAYER_MEDIA_BUFFER_FULL,t)}function z(B){j.sendEvent(B.type,B)}function t(B){l.play()}function A(B){k();switch(c.typeOf(B)){case"string":w.setPlaylist(new a.playlist({file:B}));w.setItem(0);break;case"object":case"array":w.setPlaylist(new a.playlist(B));w.setItem(0);break;case"number":w.setItem(B);break}}function q(){if(w.state==b.IDLE){l.load(w.playlist[w.item])}else{if(w.state==b.PAUSED){l.play()}}}function k(){l.stop()}function y(){if(w.state==b.PLAYING||w.state==b.BUFFERING){l.pause()}}function u(B){l.seek(B)}function x(B){l.volume(B)}function n(B){if(!c.exists(B)){B=!w.mute}l.mute(B)}function s(B){f.fullscreen(B)}function p(B){w.stretching=B;f.resize()}function o(B){A(w.item);q()}function h(){o(w.item-1)}function i(){o(w.item+1)}function v(B){return function(){B.apply(this,arguments)}}this.play=v(q);this.pause=v(y);this.seek=v(u);this.stop=v(k);this.load=v(A);this.next=v(i);this.prev=v(h);this.item=v(o);this.setVolume=v(x);this.setMute=v(n);this.setFullscreen=v(s);this.setStretching=v(p);m()}})(jwplayer.html5);(function(a){a.html5.defaultskin=function(){this.text='<?xml version="1.0" ?><skin author="LongTail Video" name="Five" version="1.1"><components><component name="controlbar"><settings><setting name="margin" value="20"/><setting name="fontsize" value="11"/><setting name="fontcolor" value="0x000000"/></settings><layout><group position="left"><button name="play"/><divider name="divider"/><button name="prev"/><divider name="divider"/><button name="next"/><divider name="divider"/><text name="elapsed"/></group><group position="center"><slider name="time"/></group><group position="right"><text name="duration"/><divider name="divider"/><button name="blank"/><divider name="divider"/><button name="mute"/><slider name="volume"/><divider name="divider"/><button name="fullscreen"/></group></layout><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUOI3t1LERACAMQlFgGvcfxNIhHMK4gsUvUviOmgtNsiAZkBSEKxKEnCYkkQrJn/YwbUNiSDDYRZaQRDaShv+oX9GBZEIuK+8hXVLs+/YAAAAASUVORK5CYII="/><element name="blankButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAYCAYAAAAyJzegAAAAFElEQVQYV2P8//8/AzpgHBUc7oIAGZdH0RjKN8EAAAAASUVORK5CYII="/><element name="capLeft" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAQElEQVQIWz3LsRGAMADDQJ0XB5bMINABZ9GENGrszxhjT2WLSqxEJG2JQrTMdV2q5LpOAvyRaVmsi7WdeZ/7+AAaOTq7BVrfOQAAAABJRU5ErkJggg=="/><element name="capRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAQElEQVQIWz3LsRGAMADDQJ0XB5bMINABZ9GENGrszxhjT2WLSqxEJG2JQrTMdV2q5LpOAvyRaVmsi7WdeZ/7+AAaOTq7BVrfOQAAAABJRU5ErkJggg=="/><element name="divider" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUCB0FwcENgEAAw7Aq+893g8APUILNOQcbFRktVGqUVFRkWNz3xTa2sUaLNUosKlRUvvf5AdbWOTtzmzyWAAAAAElFTkSuQmCC"/><element name="playButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAANUlEQVR42u2RsQkAAAjD/NTTPaW6dXLrINJA1kBpGPMAjDWmOgp1HFQXx+b1KOefO4oxY57R73YnVYCQUCQAAAAASUVORK5CYII="/><element name="pauseButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAIUlEQVQ4jWNgGAWjYOiD/0gYG3/U0FFDB4Oho2AUDAYAAEwiL9HrpdMVAAAAAElFTkSuQmCC"/><element name="prevButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAQklEQVQ4y2NgGAWjYOiD/1AMA/JAfB5NjCJD/YH4PRaLyDa0H4lNNUP/DxlD59PCUBCIp3ZEwYA+NZLUKBgFgwEAAN+HLX9sB8u8AAAAAElFTkSuQmCC"/><element name="nextButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAQElEQVQ4y2NgGAWjYOiD/0B8Hojl0cT+U2ooCL8HYn9qGwrD/bQw9P+QMXQ+tSMqnpoRBUpS+tRMUqNgFAwGAADxZy1/mHvFnAAAAABJRU5ErkJggg=="/><element name="timeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAOElEQVRIDe3BwQkAIRADwAhhw/nU/kWwUK+KPITMABFh19Y+F0acY8CJvX9wYpXgRElwolSIiMf9ZWEDhtwurFsAAAAASUVORK5CYII="/><element name="timeSliderBuffer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAN0lEQVRIDe3BwQkAMQwDMBcc55mRe9zi7RR+FCwBEWG39vcfGHFm4MTuhhMlwYlVBSdKhYh43AW/LQMKm1spzwAAAABJRU5ErkJggg=="/><element name="timeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAIElEQVRIiWNgGAWjYBTQBfynMR61YCRYMApGwSigMQAAiVWPcbq6UkIAAAAASUVORK5CYII="/><element name="timeSliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAYCAYAAAA/OUfnAAAAO0lEQVQYlWP4//8/Awwz0JgDBP/BeN6Cxf/hnI2btiI4u/fsQ3AOHjqK4Jw4eQbBOX/hEoKDYjSd/AMA4cS4mfLsorgAAAAASUVORK5CYII="/><element name="muteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAJklEQVQ4y2NgGAUjDcwH4v/kaPxPikZkxcNVI9mBQ5XoGAWDFwAAsKAXKQQmfbUAAAAASUVORK5CYII="/><element name="unmuteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAMklEQVQ4y2NgGAWDHPyntub5xBr6Hwv/Pzk2/yfVG/8psRFE25Oq8T+tQnsIaB4FVAcAi2YVysVY52AAAAAASUVORK5CYII="/><element name="volumeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAACmpqampqbBXAu8AAAAAnRSTlMAgJsrThgAAAArSURBVAhbY2AgErBAyA4I2QEhOyBkB4TsYOhAoaCCUCUwDTDtMMNgRuMHAFB5FoGH5T0UAAAAAElFTkSuQmCC"/><element name="volumeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAAAAAAAAAACDY+nAAAAAAnRSTlMAgJsrThgAAAArSURBVAhbY2AgErBAyA4I2QEhOyBkB4TsYOhAoaCCUCUwDTDtMMNgRuMHAFB5FoGH5T0UAAAAAElFTkSuQmCC"/><element name="volumeSliderCapRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAYCAYAAAAyJzegAAAAFElEQVQYV2P8//8/AzpgHBUc7oIAGZdH0RjKN8EAAAAASUVORK5CYII="/><element name="fullscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAQklEQVRIiWNgGAWjYMiD/0iYFDmSLbDHImdPLQtgBpEiR7Zl2NijAA5oEkT/0Whi5UiyAJ8BVMsHNMtoo2AUDAIAAGdcIN3IDNXoAAAAAElFTkSuQmCC"/><element name="normalscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAP0lEQVRIx2NgGAWjYMiD/1RSQ5QB/wmIUWzJfzx8qhj+n4DYCAY0DyJ7PBbYU8sHMEvwiZFtODXUjIJRMJgBACpWIN2ZxdPTAAAAAElFTkSuQmCC"/></elements></component><component name="display"><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlOZpuml+rYAAAASSURBVBhXY2AYJuA/GBwY6jQAyDyoK8QcL4QAAAAASUVORK5CYII="/><element name="playIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiUlEQVR42u3XSw2AMBREURwgAQlIQAISKgUpSEFKJeCg5b0E0kWBTVcD9ySTsL0Jn9IBAAAA+K2UUrBlW/Rr5ZDoIeeuoFkxJD9ss03aIXXQqB9SttoG7ZA6qNcOKdttiwcJh9RB+iFl4SshkRBuLR72+9cvH0SOKI2HRo7x/Fi1/uoCAAAAwLsD8ki99IlO2dQAAAAASUVORK5CYII="/><element name="muteIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAVUlEQVR42u3WMQrAIAxAUW/g/SdvGmvpoOBeSHgPsjj5QTANAACARCJilIhYM0tEvJM+Ik3Id9E957kQIb+F3OdCPC0hPkQriqWx9hp/x/QGAABQyAPLB22VGrpLDgAAAABJRU5ErkJggg=="/><element name="errorIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAA/0lEQVR42u2U0QmEMBAF7cASLMESUoIlpARLSCkpwRJSgiWkhOvAXD4WsgRkyaG5DbyB+Yvg8KITAAAAAAAYk+u61mwk15EjPtlEfihmqIiZR1Qx80ghjgdUuiHXGHSVsoag0x6x8DUoyjD5KovmEJ9NTDMRPIT0mtdIUkjlonuNohO+Ha99DTmkuGgKCTcvebAzx82ZoCWC3/3aIMWSRucaxcjORSFY4xpFdjYJGp1rFGcyCYZ/RVh6AUnfcNZ2zih3/mGj1jVCdiNDwyrq1rA/xMdeEXvDVdnYc1vDc3uPkDObXrlaxbNHSOohQhr/WOeLEWfWTgAAAAAAADzNF9sHJ7PJ57MlAAAAAElFTkSuQmCC"/><element name="bufferIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACBklEQVR42u3Zv0sCYRzH8USTzOsHHEWGkC1HgaDgkktGDjUYtDQ01RDSljQ1BLU02+rk1NTm2NLq4Nx/0L/h9fnCd3j4cnZe1/U8xiO8h3uurufF0/3COd/3/0UWYiEWYiEWYiGJQ+J8xuPxKhXjEMZANinjIZhkGuVRNioE4wVURo4JkHm0xKWmhRAc1bh1EyCUw5BcBIjHiApKa4CErko6DEJwuRo6IRKzyJD8FJAyI3Zp2zRImiBcRhlfo5RtlxCcE3CcDNpGrhYIT2IhAJKilO0VRmzJ32fAMTpBTS0QMfGwlcuKMRftE0DJ0wCJdcOsCkBdXP3Mh9CEFUBTPS9mDZJBG6io4aqVzMdCokCw9H3kT6j/C/9iDdSeUMNC7DkyyxAs/Rk6Qss8FPWRZgdVtUH4DjxEn1zxh+/zj1wHlf4MQhNGrwqA6sY40U8JonRJwEQh+AO3AvCG6gHv4U7IY4krxkroWoAOkoQMGfCBrgIm+YBGqPENpIJ66CJg3x66Y0gnSUidAEEnNr9jjLiWMn5DiWP0OC/oAsCgkq43xBdGDMQr7YASP/vEkHvdl1+JOCcEV5sC4hGEOzTlPuKgd0b0xD4JkRcOgnRRTjdErkYhAsQVq6IdUuPJtmk7BCL3t/h88cx91pKQkI/pkDx6pmYTIjEoxiHsN1YWYiEWYiEWknhflZ5IErA5nr8AAAAASUVORK5CYII="/></elements></component><component name="dock"><settings><setting name="fontcolor" value="0xffffff"/></settings><elements><element name="button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlOZpuml+rYAAAASSURBVBhXY2AYJuA/GBwY6jQAyDyoK8QcL4QAAAAASUVORK5CYII="/></elements></component><component name="playlist"><settings><setting name="backgroundcolor" value="0xe8e8e8"/></settings><elements><element name="item" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAIAAAC1nk4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUaN7t2MENwCAMBEEe9N8wSKYC/D8YV7CyJoRkVtVImxkZPQInMxoP0XiIxkM0HsGbjjSNBx544IEHHnjggUe/6UQeey0PIh7XTftGxKPj4eXCtLsHHh+ZxkO0Iw8PR55Ni8ZD9Hu/EAoP0dc5RRg9qeRjVF8AAAAASUVORK5CYII="/><element name="sliderCapTop" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAHCAYAAADnCQYGAAAAFUlEQVQokWP8//8/A7UB46ihI9hQAKt6FPPXhVGHAAAAAElFTkSuQmCC"/><element name="sliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAKElEQVQ4y2P4//8/Az68bNmy/+iYkB6GUUNHDR01dNTQUUNHDaXcUABUDOKhcxnsSwAAAABJRU5ErkJggg=="/><element name="sliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAJUlEQVQ4T2P4//8/Ay4MBP9xYbz6Rg0dNXTU0FFDRw0dNZRyQwHH4NBa7GJsXAAAAABJRU5ErkJggg=="/><element name="sliderCapBottom" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAHCAYAAADnCQYGAAAAFUlEQVQokWP8//8/A7UB46ihI9hQAKt6FPPXhVGHAAAAAElFTkSuQmCC"/></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(g){var m=jwplayer.utils,j=m.css,d=jwplayer.events,e=d.state,l=g.utils.animations.rotate,k=document,a=".jwdisplay",i=".jwpreview",b="absolute",c="none",h="100%",f="opacity .25s";g.display=function(D,P){var J=D,z=D.skin,s,n,q,w,K,O,C={},o,B,M,G,x=m.extend({backgroundcolor:"#000"},P);_bufferRotation=!m.exists(x.bufferrotation)?15:parseInt(x.bufferrotation,10),_bufferInterval=!m.exists(x.bufferinterval)?100:parseInt(x.bufferinterval,10);function A(){s=k.createElement("div");s.id=J.id+"_display";s.className="jwdisplay";n=k.createElement("div");n.className="jwpreview";s.appendChild(n);J.jwAddEventListener(d.JWPLAYER_PLAYER_STATE,y);J.jwAddEventListener(d.JWPLAYER_PLAYLIST_ITEM,I);s.addEventListener("click",L,false);p();y({newstate:e.IDLE})}function L(R){switch(J.jwGetState()){case e.PLAYING:case e.BUFFERING:J.jwPause();break;default:J.jwPlay();break}}function p(){var R=["play","buffer"];for(var U=0;U<R.length;U++){var Y=R[U],W=E(Y+"Icon"),T=E(Y+"IconOver"),V=k.createElement("div"),S=E("background"),X=E("backgroundOver");button=k.createElement("button");if(W){button.className="jw"+Y;V.className="jwicon";button.appendChild(V);u("#"+s.id+" ."+button.className,S,X);u("#"+s.id+" ."+button.className+" div",W,T);if(X||T){button.addEventListener("mouseover",F(button),false);button.addEventListener("mouseout",H(button),false)}C[Y]=button}}}function F(R){return function(S){if(R.className.indexOf("jwhover")<0){R.className+=" jwhover"}if(R.childNodes[0].className.indexOf("jwhover")<0){R.childNodes[0].className+=" jwhover"}}}function H(R){return function(S){R.className=R.className.replace(" jwhover","");R.childNodes[0].className=R.childNodes[0].className.replace(" jwhover","")}}function u(R,S,T){if(!(S&&S.src)){return}j(R,{width:S.width,height:S.height,"margin-left":S.width/-2,"margin-top":S.height/-2,background:"url("+S.src+") center no-repeat"});if(T&&T.src){j(R+".jwhover",{background:"url("+T.src+") center no-repeat"})}}function Q(R){if(B){s.removeChild(B)}B=C[R];if(B){s.appendChild(B)}}function I(){var R=J.jwGetPlaylist()[J.jwGetPlaylistIndex()];var S=R?R.image:"";if(q!=S){q=S;N(i,false);t()}}function y(R){clearInterval(G);switch(R.newstate){case e.COMPLETED:case e.IDLE:Q("play");N(i,true);break;case e.BUFFERING:Q("buffer");M=0;G=setInterval(function(){M+=_bufferRotation;l(B.childNodes[0],M%360)},_bufferInterval);break;case e.PLAYING:Q();N(i,false);break;case e.PAUSED:Q("play");break}}this.getDisplayElement=function(){return s};function r(R){return"#"+s.id+" "+R}function t(){if(q){var R=new Image();R.addEventListener("load",function(){w=R.width;K=R.height;v();j(r(i),{"background-image":q?("url("+q+")"):"",});N(i,true)},false);R.src=q}else{N(i,false);w=K=0}}function E(R){var S=z.getSkinElement("display",R);if(S){return S}return null}function v(){m.stretch(J.jwGetStretching(),n,s.clientWidth,s.clientHeight,w,K)}this.resize=v;function N(R,S){j(r(R),{opacity:S?1:0})}this.show=function(){N("",true)};this.hide=function(){N("",false)};A()};j(a,{position:b,cursor:"pointer",width:h,height:h,overflow:"hidden"});j(a+" .jwpreview",{position:b,width:h,height:h,"background-repeat":"no-repeat","background-position":"center",overflow:"hidden"});j(a+", "+a+" *",{"-webkit-transition":f,"-moz-transition":f,"-o-transition":f});j(a+" button, "+a+" .jwicon",{border:c,position:b,left:"50%",top:"50%",padding:0,cursor:"pointer"})})(jwplayer.html5);(function(a){var b=jwplayer.utils,c=jwplayer.events;a.model=function(d){var j=this,f,l,m=b.getCookies(),h={width:480,height:320,item:0,playlist:[],skin:undefined,volume:90,mute:false,repeat:"",stretching:b.stretching.UNIFORM,autostart:false,debug:undefined};function i(n){return n}function k(){b.extend(j,new c.eventdispatcher());j.config=b.extend({},h,m,i(d));b.extend(j,{id:d.id,state:c.state.IDLE,position:0,buffer:0,},j.config);j.setItem(j.config.item);l=document.createElement("video");f=new a.video(l);f.addGlobalListener(e)}var g={};g[c.JWPLAYER_MEDIA_MUTE]="mute";g[c.JWPLAYER_MEDIA_VOLUME]="volume";g[c.JWPLAYER_PLAYER_STATE]="newstate->state";g[c.JWPLAYER_MEDIA_BUFFER]="bufferPercent->buffer";g[c.JWPLAYER_MEDIA_TIME]="position";function e(n){var p=g[n.type];if(p){var q=p.split("->"),r=q[0],o=q[1]?q[1]:r;if(j[o]!=n[r]){j[o]=n[r];j.sendEvent(n.type,n)}}else{j.sendEvent(n.type,n)}}this.getVideo=function(){return f};this.seekDrag=function(n){f.seekDrag(n)};this.setFullscreen=function(n){if(n!=j.fullscreen){j.fullscreen=n;j.sendEvent(c.JWPLAYER_FULLSCREEN,{fullscreen:n})}};this.setPlaylist=function(n){j.item=-1;j.playlist=n;j.sendEvent(c.JWPLAYER_PLAYLIST_LOADED,{playlist:n})};this.setItem=function(n){var o;if(n==j.playlist.length||n<-1){o=0}else{if(n==-1||n>j.playlist.length){o=j.playlist.length-1}else{o=n}}if(o!=j.item){j.item=o;j.sendEvent(c.JWPLAYER_PLAYLIST_ITEM,{index:j.item})}};k()}})(jwplayer.html5);(function(a){a.player=function(b){var j=this,h=new a.model(b),e=new a.view(this,h),f=new a.controller(h,e);function i(){j.id=h.id;var k=new a.setup(h,e,f);k.addEventListener(jwplayer.events.JWPLAYER_READY,c);k.addEventListener(jwplayer.events.JWPLAYER_ERROR,g);k.start()}function c(k){e.completeSetup();f.sendEvent(k.type,k);f.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_LOADED,{playlist:h.playlist});f.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_ITEM,{index:h.item});f.load();setTimeout(e.resize,0)}function g(k){console.log(k);alert("Can't set up: "+k.message)}this.jwPlay=f.play;this.jwPause=f.pause;this.jwStop=f.stop;this.jwSeek=f.seek;this.jwSetVolume=f.setVolume;this.jwSetMute=f.setMute;this.jwLoad=f.load;this.jwPlaylistNext=f.next;this.jwPlaylistPrev=f.prev;this.jwPlaylistItem=f.item;this.jwSetFullscreen=f.setFullscreen;this.jwResize=e.resize;this.jwSeekDrag=h.seekDrag;this.jwSetStretching=f.setStretching;function d(k){return function(){return h[k]}}this.jwGetPlaylistIndex=d("item");this.jwGetPosition=d("position");this.jwGetDuration=d("duration");this.jwGetBuffer=d("buffer");this.jwGetWidth=d("width");this.jwGetHeight=d("height");this.jwGetFullscreen=d("fullscreen");this.jwGetVolume=d("volume");this.jwGetMute=d("mute");this.jwGetState=d("state");this.jwGetStretching=d("stretching");this.jwGetPlaylist=d("playlist");this.jwAddEventListener=f.addEventListener;this.jwRemoveEventListener=f.removeEventListener;i()}})(jwplayer.html5);(function(a){var b=jwplayer.utils;a.playlist=function(c){var e=[];if(c&&c instanceof Array&&c.length>0){for(var d in c){if(!isNaN(parseInt(d))){e.push(new a.playlistitem(c[d]))}}}else{e.push(new a.playlistitem(c))}return e}})(jwplayer.html5);(function(a){a.playlistitem=function(c){var d={description:"",image:"",link:"",mediaid:"",title:"",provider:"",file:"",duration:-1,start:0,currentLevel:-1,levels:[]};var b=jwplayer.utils.extend({},d,c);if(b.levels.length===0){b.levels[0]=new a.playlistitemlevel(b)}return b}})(jwplayer.html5);(function(a){a.html5.playlistitemlevel=function(b){var d={file:"",streamer:"",bitrate:0,width:0};for(var c in d){if(a.utils.exists(b[c])){d[c]=b[c]}}return d}})(jwplayer);(function(a){var d=jwplayer,b=d.utils,c=d.events;a.playlistloader=function(){var f=new c.eventdispatcher();b.extend(this,f);this.load=function(h){b.ajax(h,g,e)};function g(i){try{var k=i.responseXML.firstChild;if(a.parsers.localName(k)=="xml"){k=k.nextSibling}var h=a.parsers.rssparser.parse(k);f.sendEvent(c.JWPLAYER_PLAYLIST_LOADED,{playlist:new a.playlist(h)})}catch(j){e("Could not load the playlist.")}}function e(h){f.sendEvent(c.JWPLAYER_ERROR,{message:h?h:"Could not load playlist an unknown reason."})}}})(jwplayer.html5);(function(f){var h=jwplayer,k=h.utils,e=h.events,i=1,d=2,c=3,j=4,b=5,a=6,g=7;f.setup=function(q,F,G){var J=q,o=F,D=G,s={},A={},y,x=new e.eventdispatcher(),t=false,u=[];function r(){p(i,n);p(d,N,i);p(c,w,i);p(j,I,c);p(b,M,j+","+d);p(a,H,b+","+c);p(g,B,a)}function p(O,Q,P){u.push({name:O,method:Q,depends:P})}function E(){for(var Q=0;Q<u.length;Q++){var O=u[Q];if(L(O.depends)){u.splice(Q,1);try{O.method();E()}catch(P){v(P.message)}return}}if(u.length>0&&!t){setTimeout(E,500)}}function L(Q){if(!Q){return true}var P=Q.toString().split(",");for(var O=0;O<P.length;O++){if(!s[P[O]]){return false}}return true}function m(O){s[O]=true}function n(){m(i)}function N(){y=new f.skin();y.load(J.config.skin,z)}function z(O){m(d)}function w(){switch(k.typeOf(J.config.playlist)){case"string":var O=new f.playlistloader();O.addEventListener(e.JWPLAYER_PLAYLIST_LOADED,l);O.addEventListener(e.JWPLAYER_ERROR,C);O.load(J.config.playlist);break;case"array":J.playlist=new f.playlist(J.config.playlist);m(c)}}function l(O){J.setPlaylist(O.playlist);m(c)}function C(O){v(O.message)}function I(){var P=J.playlist[J.item].image;if(P){var O=new Image();O.addEventListener("load",K,false);O.addEventListener("error",K,false);O.src=P}else{m(j)}}function K(O){m(j)}function M(){o.setup(y);m(b)}function H(){m(a)}function B(){x.sendEvent(e.JWPLAYER_READY);m(g)}function v(O){t=true;x.sendEvent(e.JWPLAYER_ERROR,{message:O})}k.extend(this,x);this.start=E;r()}})(jwplayer.html5);(function(a){a.skin=function(){var b={};var c=false;this.load=function(d,e){new a.skinloader(d,function(f){c=true;b=f;e()},function(){new a.skinloader("",function(f){c=true;b=f;e()})})};this.getSkinElement=function(d,e){if(c){try{return b[d].elements[e]}catch(f){jwplayer.utils.log("No such skin component / element: ",[d,e])}}return null};this.getComponentSettings=function(d){if(c&&b&&b[d]){return b[d].settings}return null};this.getComponentLayout=function(d){if(c){var e=b[d].layout;if(e&&(e.left||e.right||e.center)){return b[d].layout}}return null}}})(jwplayer.html5);(function(a){var b=jwplayer.utils;a.skinloader=function(g,p,k){var o={};var d=p;var l=k;var f=true;var j;var n=g;var s=false;function m(){if(typeof n!="string"||n===""){e(a.defaultskin().xml)}else{b.ajax(b.getAbsolutePath(n),function(t){try{if(b.exists(t.responseXML)){e(t.responseXML);return}}catch(u){i()}e(a.defaultskin().xml)},function(t){e(a.defaultskin().xml)})}}function e(y){var E=y.getElementsByTagName("component");if(E.length===0){return}for(var H=0;H<E.length;H++){var C=E[H].getAttribute("name");var B={settings:{},elements:{},layout:{}};o[C]=B;var G=E[H].getElementsByTagName("elements")[0].getElementsByTagName("element");for(var F=0;F<G.length;F++){c(G[F],C)}var z=E[H].getElementsByTagName("settings")[0];if(z&&z.childNodes.length>0){var K=z.getElementsByTagName("setting");for(var P=0;P<K.length;P++){var Q=K[P].getAttribute("name");var I=K[P].getAttribute("value");var x=/color$/.test(Q)?"color":null;o[C].settings[Q]=b.typechecker(I,x)}}var L=E[H].getElementsByTagName("layout")[0];if(L&&L.childNodes.length>0){var M=L.getElementsByTagName("group");for(var w=0;w<M.length;w++){var A=M[w];o[C].layout[A.getAttribute("position")]={elements:[]};for(var O=0;O<A.attributes.length;O++){var D=A.attributes[O];o[C].layout[A.getAttribute("position")][D.name]=D.value}var N=A.getElementsByTagName("*");for(var v=0;v<N.length;v++){var t=N[v];o[C].layout[A.getAttribute("position")].elements.push({type:t.tagName});for(var u=0;u<t.attributes.length;u++){var J=t.attributes[u];o[C].layout[A.getAttribute("position")].elements[v][J.name]=J.value}if(!b.exists(o[C].layout[A.getAttribute("position")].elements[v].name)){o[C].layout[A.getAttribute("position")].elements[v].name=t.tagName}}}}f=false;r()}}function r(){clearInterval(j);if(!s){j=setInterval(function(){q()},100)}}function c(y,x){var w=new Image();var t=y.getAttribute("name");var v=y.getAttribute("src");var A;if(v.indexOf("data:image/png;base64,")===0){A=v}else{var u=b.getAbsolutePath(n);var z=u.substr(0,u.lastIndexOf("/"));A=[z,x,v].join("/")}o[x].elements[t]={height:0,width:0,src:"",ready:false,image:w};w.onload=function(B){h(w,t,x)};w.onerror=function(B){s=true;r();l()};w.src=A}function i(){for(var u in o){var w=o[u];for(var t in w.elements){var x=w.elements[t];var v=x.image;v.onload=null;v.onerror=null;delete x.image;delete w.elements[t]}delete o[u]}}function q(){for(var t in o){if(t!="properties"){for(var u in o[t].elements){if(!o[t].elements[u].ready){return}}}}if(f===false){clearInterval(j);d(o)}}function h(t,v,u){if(o[u]&&o[u].elements[v]){o[u].elements[v].height=t.height;o[u].elements[v].width=t.width;o[u].elements[v].src=t.src;o[u].elements[v].ready=true;r()}else{b.log("Loaded an image for a missing element: "+u+"."+v)}}m()}})(jwplayer.html5);(function(a){var e=jwplayer,c=e.utils,d=e.events,b=d.state;a.video=function(M){var G={abort:t,canplay:o,canplaythrough:t,durationchange:x,emptied:t,ended:t,error:k,loadeddata:t,loadedmetadata:o,loadstart:t,pause:L,play:L,playing:L,progress:t,ratechange:t,readystatechange:t,seeked:t,seeking:t,stalled:t,suspend:t,timeupdate:N,volumechange:i,waiting:q},s={mp4:"video/mp4",webm:"video/webm",m3u8:"audio/x-mpegurl"},y,v,j,R,m,J,Q,B,H,z,f=b.IDLE,C=0,l=-1,A=-1,E=new d.eventdispatcher();c.extend(this,E);function O(S){j=S;I();j.controls=true;j.controls=false}function I(){for(var S in G){j.addEventListener(S,G[S],false)}}function p(S,T){E.sendEvent(S,T)}function t(S){}function x(S){R=j.duration;N()}function N(S){if(f==b.PLAYING&&!z){m=j.currentTime;p(d.JWPLAYER_MEDIA_TIME,{position:m,duration:R});if(m>=R&&R>0){K()}}}function o(S){if(!Q){Q=true;n();if(H>0){w(H)}}}function n(){if(!B){B=true;p(d.JWPLAYER_MEDIA_BUFFER_FULL)}}function L(S){if(z){return}if(j.paused){r(b.PAUSED)}else{r(b.PLAYING)}}function q(S){r(b.BUFFERING)}function k(S){c.log("Error: %o",j.error);r(b.IDLE)}function g(S){var T=s[c.strings.extension(S)];return(!!T&&j.canPlayType(T))}function D(T){if(T.levels&&T.levels.length>0){for(var S=0;S<T.levels.length;S++){if(g(T.levels[S].file)){return T.levels[S].file}}}else{if(T.file&&g(T.file)){return T.file}}return null}this.load=function(S){y=S;Q=false;B=false;H=0;R=0;m=0;v=D(y);if(!v){c.log("Could not find a file to play.");return}r(b.BUFFERING);j.src=v;j.load();l=setInterval(h,100);if(c.isMobile()){j.controls=true}if(c.isIPod()){n()}};var u=this.stop=function(){j.removeAttribute("src");j.load();clearInterval(l);r(b.IDLE)};this.play=function(){j.play()};this.pause=function(){j.pause()};this.seekDrag=function(S){z=S;if(S){j.pause()}else{j.play()}};var w=this.seek=function(S){if(Q){H=0;if(!z){p(d.JWPLAYER_MEDIA_SEEK,{position:m,offset:S})}j.currentTime=S}else{H=S}};var P=this.volume=function(S){if(j.muted){j.muted=false}j.volume=S/100};function i(S){p(d.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(j.volume*100)});p(d.JWPLAYER_MEDIA_MUTE,{mute:j.muted})}this.mute=function(S){if(!c.exists(S)){S=!j.mute}if(S){C=j.volume*100;P(0);j.muted=true}else{P(C)}};function r(S){if(S==b.PAUSED&&f==b.IDLE){return}if(z){return}if(f!=S){var T=f;f=S;p(d.JWPLAYER_PLAYER_STATE,{oldstate:T,newstate:S})}}function h(){var S=F();if(S!=A){A=S;p(d.JWPLAYER_MEDIA_BUFFER,{bufferPercent:Math.round(A*100)})}if(S>=1){clearInterval(l)}}function F(){if(j.buffered.length==0||j.duration==0){return 0}else{return j.buffered.end(j.buffered.length-1)/j.duration}}function K(){u();p(d.JWPLAYER_MEDIA_COMPLETE)}this.getTag=function(){return M};O(M)}})(jwplayer.html5);(function(f){var g=jwplayer,k=g.utils,h=k.css,c=jwplayer.events,d=c.state,j=document,a="jwplayer",b="jwvideocontainer",i="jwcontrolscontainer";f.view=function(x,n){var A=x,C=n,B={},t,F,l=0,y=2000,u;this.setup=function(H){A.skin=H;t=j.createElement("div");t.className=a;t.id=A.id;var G=document.getElementById(A.id);G.parentNode.replaceChild(t,G);u=j.createElement("span");u.className=b;u.appendChild(C.getVideo().getTag());F=j.createElement("span");F.className=i;w();t.appendChild(u);t.appendChild(F);j.addEventListener("webkitfullscreenchange",m,false);j.addEventListener("mozfullscreenchange",m,false);j.addEventListener("keydown",q,false);A.jwAddEventListener(c.JWPLAYER_PLAYER_STATE,s);s({newstate:d.IDLE});t.addEventListener("mouseout",z,false);t.addEventListener("mousemove",function(I){p();clearTimeout(l);l=setTimeout(z,y)},false)};function z(){if(A.jwGetState()==d.PLAYING){v()}clearTimeout(l);l=0}function w(){var I=C.width,G=C.height,J=A.skin.getComponentSettings("controlbar"),H=A.skin.getComponentSettings("display");if(G>40||G.indexOf("%")){B.display=new f.display(A,H);F.appendChild(B.display.getDisplayElement())}else{H.backgroundcolor="transparent";J.margin=0}r(I,G);h("#"+t.id,{"background-color":H.backgroundcolor?H.backgroundcolor:0});if(!k.isMobile()){B.controlbar=new f.controlbar(A,J);F.appendChild(B.controlbar.getDisplayElement())}}var E=this.fullscreen=function(G){if(!k.exists(G)){G=!C.fullscreen}if(G){if(!C.fullscreen){if(t.requestFullScreen){t.requestFullScreen()}else{if(t.mozRequestFullScreen){t.mozRequestFullScreen()}else{if(t.webkitRequestFullScreen){t.webkitRequestFullScreen()}else{o(true)}}}}C.setFullscreen(true)}else{o(false);if(j.cancelFullScreen){j.cancelFullScreen()}else{if(j.mozCancelFullScreen){j.mozCancelFullScreen()}else{if(j.webkitCancelFullScreen){j.webkitCancelFullScreen()}}}C.setFullscreen(false)}};function r(H,G){if(k.exists(H)&&k.exists(G)){h("#"+t.id,{width:H,height:G});C.width=H;C.height=G}if(B.display){B.display.resize(H,G)}if(B.controlbar){B.controlbar.resize(H,G)}return}this.resize=r;this.completeSetup=function(){h("#"+t.id,{opacity:1})};function q(G){switch(G.keyCode){case 27:if(C.fullscreen){E(false)}break;case 32:A.jwPlay();break}}function o(G){if(G){t.className+=" jwfullscreen"}else{t.className=t.className.replace(/\s+jwfullscreen/,"")}}function D(){if(j.mozFullScreenElement){return j.mozFullScreenElement.id==t.id}else{if(j.webkitCurrentFullScreenElement){return j.webkitCurrentFullScreenElement.id==t.id}else{return false}}}function m(G){C.setFullscreen(D());E(C.fullscreen)}function v(){if(B.controlbar){B.controlbar.hide()}if(B.display){B.display.hide()}}function p(){if(B.controlbar){B.controlbar.show()}if(B.display){B.display.show()}}function s(G){var H={};switch(G.newstate){case d.PLAYING:if(k.isIPod){H.display="block"}H.opacity=1;h("#"+t.id+" ."+b,H);v();break;case d.COMPLETED:case d.IDLE:if(k.isIPod){H.display="none"}H.opacity=0;h("#"+t.id+" ."+b,H);p();break;case d.BUFFERING:case d.PAUSED:if(!k.isMobile()){p()}break}}};var e="opacity .5s ease";h("."+a,{position:"relative",overflow:"hidden",opacity:0,"-webkit-transition":e,"-moz-transition":e,"-o-transition":e});h("."+b+" ,."+i,{position:"absolute",width:"100%",height:"100%","-webkit-transition":e,"-moz-transition":e,"-o-transition":e});h("."+b+" video",{background:"transparent",width:"100%",height:"100%"});h("."+a+":-webkit-full-screen",{width:"100% !important",height:"100% !important"});h("."+a+":-moz-full-screen",{width:"100% !important",height:"100% !important"});h("."+a+".jwfullscreen",{left:0,right:0,top:0,bottom:0,"z-index":1000,position:"fixed !important"});h("."+a+" .jwuniform",{"background-size":"contain !important"});h("."+a+" .jwfill",{"background-size":"cover !important"});h("."+a+" .jwexactfit",{"background-size":"100% 100% !important"});h("."+a+" .jwnone",{"background-size":null})})(jwplayer.html5)}; -
branches/jw6/src/js/html5/jwplayer.html5.controlbar.js
r2179 r2180 11 11 _events = jwplayer.events, 12 12 _states = jwplayer.events.state, 13 _ style = _utils.appendStylesheet,13 _css = _utils.css, 14 14 15 15 /** Controlbar element types **/ … … 29 29 JW_CSS_RIGHT = "right", 30 30 JW_CSS_100PCT = "100%", 31 JW_CSS_SMOOTH_EASE = "width .25s linear, left .25s linear, opacity .25s, background .25s" 31 JW_CSS_SMOOTH_EASE = "width .25s linear, left .25s linear, opacity .25s, background .25s", 32 32 33 33 CB_CLASS = '.jwcontrolbar', … … 49 49 // buttoncolor : parseInt("ffffff", 16), 50 50 // position : html5.view.positions.BOTTOM, 51 // position: "OVER",52 51 // idlehide : false, 53 52 // hideplaylistcontrols : false, … … 121 120 _duration, 122 121 _currentVolume, 122 _dragging = false, 123 _lastSeekTime = 0, 123 124 124 125 _toggles = { … … 146 147 volume: _volume 147 148 }; 148 149 150 149 151 150 function _init() { … … 204 203 case _states.BUFFERING: 205 204 case _states.PLAYING: 206 if (_elements['timeSliderThumb']) { 207 _elements['timeSliderThumb'].style.opacity = 1; 208 } 205 _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 1 }); 209 206 _toggleButton("play", true); 210 207 break; … … 216 213 case _states.IDLE: 217 214 _toggleButton("play", false); 218 if (_elements['timeSliderThumb']) { 219 _elements['timeSliderThumb'].style.opacity = 0; 220 } 215 _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 0 }); 221 216 if (_elements["timeRail"]) { 222 217 _elements["timeRail"].className = "jwrail"; … … 230 225 break; 231 226 case _states.COMPLETED: 232 _c ontrolbar.style.opacity = 0;227 _css(_internalSelector(), { opacity: 0 }); 233 228 break; 234 229 } … … 258 253 function _createStyles() { 259 254 _utils.clearCss('#'+_id); 260 261 _ style('#'+_id, {255 256 _css('#'+_id, { 262 257 height: _getSkinElement("background").height, 263 bottom: _settings. position == "OVER"? _settings.margin : 0,264 left: _settings. position == "OVER"? _settings.margin : 0,265 right: _settings. position == "OVER"? _settings.margin : 0258 bottom: _settings.margin ? _settings.margin : 0, 259 left: _settings.margin ? _settings.margin : 0, 260 right: _settings.margin ? _settings.margin : 0 266 261 }); 267 262 268 _ style(_internalSelector(".jwtext"), {263 _css(_internalSelector(".jwtext"), { 269 264 font: _settings.fontsize + "px/" + _getSkinElement("background").height + "px " + _settings.font, 270 265 color: _settings.fontcolor, … … 345 340 } 346 341 347 _ style(_internalSelector('.jw'+name), _utils.extend(newStyle, style));342 _css(_internalSelector('.jw'+name), _utils.extend(newStyle, style)); 348 343 _elements[name] = element; 349 344 return element; … … 380 375 } 381 376 382 _ style(selector, {377 _css(selector, { 383 378 width: out.width, 384 379 background: 'url('+ out.src +') center no-repeat' … … 386 381 387 382 if (over.src) { 388 _ style(selector + ':hover', {383 _css(selector + ':hover', { 389 384 background: 'url('+ over.src +') center no-repeat' 390 385 }); … … 422 417 423 418 function _seek(pct) { 424 if (!_dragging) {425 _api.jwPlay();426 }427 419 _api.jwSeek(pct * _duration); 428 420 } … … 471 463 } 472 464 473 _ style(_internalSelector('.jw'+name), css);465 _css(_internalSelector('.jw'+name), css); 474 466 element.innerHTML = "00:00"; 475 467 _elements[name] = element; … … 481 473 var element = _createSpan(); 482 474 element.className = "jwblankDivider"; 483 _ style(element, {475 _css(element, { 484 476 width: parseInt(divider.width) 485 477 }); … … 507 499 if (capLeft) slider.appendChild(capRight); 508 500 509 _ style(_internalSelector(".jw" + name + " .jwrail"), {501 _css(_internalSelector(".jw" + name + " .jwrail"), { 510 502 left: _getSkinElement(name+"SliderCapLeft").width, 511 503 right: _getSkinElement(name+"SliderCapRight").width, … … 542 534 var thumb = _buildImage(name + "SliderThumb"); 543 535 if (thumb) { 536 _css(_internalSelector('.'+thumb.className), { opacity: 0 }); 544 537 thumb.className += " jwthumb"; 545 thumb.style.opacity = 0;546 538 rail.appendChild(thumb); 547 539 } … … 554 546 } 555 547 556 var _dragging; 557 548 function _idle() { 549 var currentState = _api.jwGetState(); 550 return (currentState == _states.IDLE || currentState == _states.COMPLETED); 551 } 552 558 553 function _sliderMouseDown(name) { 559 554 return (function(evt) { … … 565 560 if (name == "time") { 566 561 if (!_idle()) { 562 _api.jwSeekDrag(true); 567 563 _dragging = name; 568 564 } … … 573 569 } 574 570 575 function _idle() {576 var currentState = _api.jwGetState();577 return (currentState == _states.IDLE || currentState == _states.COMPLETED);578 }579 580 var _lastSeekTime = 0;581 582 571 function _sliderMouseEvent(evt) { 583 572 if (!_dragging || evt.button != 0) { … … 591 580 if (evt.type == 'mouseup') { 592 581 var name = _dragging; 582 583 if (name == "time") { 584 _api.jwSeekDrag(false); 585 } 586 593 587 _elements[name+'Rail'].className = "jwrail jwsmooth"; 594 588 _dragging = null; … … 602 596 var currentTime = (new Date()).getTime(); 603 597 if (currentTime - _lastSeekTime > 500) { 604 _api.jwPause();605 598 _lastSeekTime = currentTime; 606 599 _sliderMapping[_dragging](pct); … … 612 605 function _styleTimeSlider(slider) { 613 606 if (_elements['timeSliderThumb']) { 614 _ style(_internalSelector(".jwtimeSliderThumb"), {607 _css(_internalSelector(".jwtimeSliderThumb"), { 615 608 'margin-left': (_getSkinElement("timeSliderThumb").width/-2) 616 609 }); … … 627 620 railWidth = _getSkinElement("volumeSliderRail").width; 628 621 629 _ style(_internalSelector(".jwvolume"), {622 _css(_internalSelector(".jwvolume"), { 630 623 width: (capLeftWidth + railWidth + capRightWidth) 631 624 }); … … 642 635 _controlbar.appendChild(_groups.right); 643 636 644 _ style(_internalSelector(".jwright"), {637 _css(_internalSelector(".jwright"), { 645 638 right: _getSkinElement("capRight").width 646 639 }); … … 669 662 670 663 var _resize = this.resize = function(width, height) { 671 _ style(_internalSelector('.jwgroup.jwcenter'), {664 _css(_internalSelector('.jwgroup.jwcenter'), { 672 665 left: Math.round(_utils.parseDimension(_groups.left.offsetWidth) + _getSkinElement("capLeft").width), 673 666 right: Math.round(_utils.parseDimension(_groups.right.offsetWidth) + _getSkinElement("capRight").width) … … 681 674 function _setBuffer(pct) { 682 675 pct = Math.min(Math.max(0, pct), 1); 683 _elements['timeSliderBuffer'].style.width = pct * 100 + "%"; 684 } 685 686 function _sliderPercent(name, pct, fixedWidth) { 687 if (!_elements[name]) return; 688 689 pct = Math.min(Math.max(0, pct), 1); 690 691 var progress = _elements[name+'SliderProgress']; 692 var thumb = _elements[name+'SliderThumb']; 693 var width = 100 * pct + "%"; 694 695 if (progress) { 696 progress.style.width = width; 697 } 698 if (thumb) { 699 thumb.style.left = width; 700 } 676 _css(_internalSelector('.jwtimeSliderBuffer'), { width: pct * 100 + "%" }); 677 } 678 679 function _sliderPercent(prefix, pct, fixedWidth) { 680 var width = 100 * Math.min(Math.max(0, pct), 1) + "%"; 681 _css(_internalSelector(prefix+'Progress'), { width: width }); 682 _css(_internalSelector(prefix+'Thumb'), { left: width }); 701 683 } 702 684 703 685 function _setVolume (pct) { 704 _sliderPercent(' volume', pct, true);686 _sliderPercent('.jwvolumeSlider', pct, true); 705 687 } 706 688 707 689 function _setProgress(pct) { 708 _sliderPercent(' time', pct);690 _sliderPercent('.jwtimeSlider', pct); 709 691 } 710 692 … … 724 706 } 725 707 708 this.show = function() { 709 _css(_internalSelector(), { opacity: 1 }); 710 } 711 712 this.hide = function() { 713 _css(_internalSelector(), { opacity: 0 }); 714 } 715 726 716 // Call constructor 727 717 _init(); … … 734 724 *************************************************************/ 735 725 736 _ style(CB_CLASS, {726 _css(CB_CLASS, { 737 727 position: JW_CSS_ABSOLUTE, 738 728 overflow: 'hidden', … … 742 732 }) 743 733 744 _ style(CB_CLASS+' span',{734 _css(CB_CLASS+' span',{ 745 735 height: JW_CSS_100PCT, 746 736 '-webkit-user-select': JW_CSS_NONE, … … 750 740 }); 751 741 752 _ style(CB_CLASS+' .jwgroup', {742 _css(CB_CLASS+' .jwgroup', { 753 743 display: JW_CSS_INLINE 754 744 }); 755 745 756 _ style(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', {746 _css(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', { 757 747 position: JW_CSS_RELATIVE, 758 748 'float': JW_CSS_LEFT 759 749 }); 760 750 761 _ style(CB_CLASS+' .jwright', {751 _css(CB_CLASS+' .jwright', { 762 752 position: JW_CSS_ABSOLUTE 763 753 }); 764 754 765 _ style(CB_CLASS+' .jwcenter', {755 _css(CB_CLASS+' .jwcenter', { 766 756 position: JW_CSS_ABSOLUTE 767 757 }); 768 758 769 _ style(CB_CLASS+' button', {759 _css(CB_CLASS+' button', { 770 760 display: JW_CSS_INLINE_BLOCK, 771 761 height: JW_CSS_100PCT, … … 777 767 }); 778 768 779 _ style(CB_CLASS+' .jwcapRight', {769 _css(CB_CLASS+' .jwcapRight', { 780 770 right: 0, 781 771 position: JW_CSS_ABSOLUTE 782 772 }); 783 773 784 _ style(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', {774 _css(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', { 785 775 position: JW_CSS_ABSOLUTE, 786 776 height: JW_CSS_100PCT, … … 791 781 792 782 793 _ style(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', {783 _css(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', { 794 784 position: JW_CSS_ABSOLUTE, 795 785 height: JW_CSS_100PCT, … … 797 787 }); 798 788 799 _ style(CB_CLASS + ' .jwtime .jwsmooth span', {789 _css(CB_CLASS + ' .jwtime .jwsmooth span', { 800 790 '-webkit-transition': JW_CSS_SMOOTH_EASE, 801 791 '-moz-transition': JW_CSS_SMOOTH_EASE, … … 803 793 }); 804 794 805 _ style(CB_CLASS + ' .jwdivider+.jwdivider', {795 _css(CB_CLASS + ' .jwdivider+.jwdivider', { 806 796 display: JW_CSS_NONE 807 797 }); 808 798 809 _ style(CB_CLASS + ' .jwtext', {799 _css(CB_CLASS + ' .jwtext', { 810 800 padding: '0 5px', 811 801 'text-align': 'center' 812 802 }); 813 803 814 _ style(CB_CLASS + ' .jwtoggling', {804 _css(CB_CLASS + ' .jwtoggling', { 815 805 '-webkit-transition': JW_CSS_NONE, 816 806 '-moz-transition': JW_CSS_NONE, -
branches/jw6/src/js/html5/jwplayer.html5.controller.js
r2177 r2180 32 32 } 33 33 34 var file;35 36 34 function _load(item) { 37 if (_model.state == _states.PLAYING || _model.state == _states.BUFFERING) { 38 _video.stop(); 39 } 35 _stop(); 40 36 41 37 switch (_utils.typeOf(item)) { 42 38 case "string": 43 file = item; 39 _model.setPlaylist(new html5.playlist({file:item})); 40 _model.setItem(0); 44 41 break; 45 42 case "object": 46 file = item.file; 43 case "array": 44 _model.setPlaylist(new html5.playlist(item)); 45 _model.setItem(0); 47 46 break; 48 47 case "number": 49 file = _model.playlist[item].file;48 _model.setItem(item); 50 49 break; 51 default:52 file = _model.playlist[_model.item].file;53 50 } 54 51 55 // if (_video.getTag().canPlayType("video/mp4")) {56 // file = "http://playertest.longtailvideo.com/bunny.mp4";57 // } else if (_video.getTag().canPlayType("video/webm")) {58 // file = "http://playertest.longtailvideo.com/bunny.webm";59 // } else {60 // file = "http://playertest.longtailvideo.com/bunny.ogv";61 // }62 // if (_utils.isMobile()) {63 // _video.load(file);64 // }65 52 } 66 53 67 54 function _play() { 68 55 if (_model.state == _states.IDLE) { 69 _video.load( file);56 _video.load(_model.playlist[_model.item]); 70 57 } else if (_model.state == _states.PAUSED) { 71 58 _video.play(); … … 100 87 } 101 88 102 103 function _item(item) { 104 _stop(); 105 _model.setItem(item); 89 function _setStretching(stretching) { 90 _model.stretching = stretching; 91 _view.resize(); 92 } 93 94 function _item(index) { 106 95 _load(_model.item); 107 96 _play(); … … 135 124 this.setMute = _waitForReady(_setMute); 136 125 this.setFullscreen = _waitForReady(_setFullscreen); 126 this.setStretching = _waitForReady(_setStretching); 137 127 138 128 /* this.playerReady = _playerReady; -
branches/jw6/src/js/html5/jwplayer.html5.display.js
r2179 r2180 8 8 var _utils = jwplayer.utils, 9 9 _css = _utils.css, 10 _style = _utils.appendStylesheet,11 10 _events = jwplayer.events, 12 11 _states = _events.state, 13 12 _rotate = html5.utils.animations.rotate, 14 13 14 15 DOCUMENT = document, 15 16 D_CLASS = ".jwdisplay", 17 D_PREVIEW_CLASS = ".jwpreview", 16 18 17 19 /** Some CSS constants we should use for minimization **/ … … 25 27 //JW_CSS_RIGHT = "right", 26 28 JW_CSS_100PCT = "100%", 27 JW_CSS_SMOOTH_EASE = "opacity . 5s, background .5s";29 JW_CSS_SMOOTH_EASE = "opacity .25s"; 28 30 29 31 … … 31 33 var _api = api, 32 34 _skin = api.skin, 33 _display, 34 _config = config ? config : {}, 35 _image, _imageWidth, _imageHeight, 35 _display, _preview, 36 _image, _imageWidth, _imageHeight, _imageURL, 36 37 _icons = {}, 37 38 _hiding, … … 39 40 _degreesRotated, 40 41 _rotationInterval, 41 _bufferRotation = !_utils.exists(config.bufferrotation) ? 15 : parseInt(config.bufferrotation, 10), 42 _bufferInterval = !_utils.exists(config.bufferinterval) ? 100 : parseInt(config.bufferinterval, 10); 42 _config = _utils.extend({ 43 backgroundcolor: '#000' 44 }, config); 45 _bufferRotation = !_utils.exists(_config.bufferrotation) ? 15 : parseInt(_config.bufferrotation, 10), 46 _bufferInterval = !_utils.exists(_config.bufferinterval) ? 100 : parseInt(_config.bufferinterval, 10); 43 47 44 48 function _init() { … … 47 51 _display.className = "jwdisplay"; 48 52 53 _preview = DOCUMENT.createElement("div"); 54 _preview.className = "jwpreview"; 55 _display.appendChild(_preview); 56 49 57 _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 50 58 _api.jwAddEventListener(_events.JWPLAYER_PLAYLIST_ITEM, _itemHandler); … … 55 63 56 64 _stateHandler({newstate:_states.IDLE}); 57 58 65 } 59 66 … … 121 128 } 122 129 123 _ style(selector, {130 _css(selector, { 124 131 width: out.width, 125 132 height: out.height, … … 130 137 131 138 if (over && over.src) { 132 _ style(selector + ".jwhover", {139 _css(selector + ".jwhover", { 133 140 background: 'url('+ over.src +') center no-repeat' 134 141 }); … … 146 153 } 147 154 148 function _itemHandler( evt) {155 function _itemHandler() { 149 156 var item = _api.jwGetPlaylist()[_api.jwGetPlaylistIndex()]; 150 _image = item ? item.image : ""; 151 _getImageDimensions(); 152 _style('#' + _display.id, { 153 'background': 'url('+_image+') no-repeat center' 154 }); 157 var newImage = item ? item.image : ""; 158 if (_image != newImage) { 159 _image = newImage; 160 _setVisibility(D_PREVIEW_CLASS, false); 161 _getImage(); 162 } 155 163 } 156 164 … … 162 170 case _states.IDLE: 163 171 _setIcon('play'); 164 if (_image) { 165 _style('#' + _display.id, { 166 'background': 'url('+_image+') no-repeat center' 167 }); 168 } 172 _setVisibility(D_PREVIEW_CLASS, true); 169 173 break; 170 174 case _states.BUFFERING: … … 178 182 case _states.PLAYING: 179 183 _setIcon(); 180 _style('#' + _display.id, { 181 'background': 'transparent' 182 }); 184 _setVisibility(D_PREVIEW_CLASS, false); 183 185 break; 184 186 case _states.PAUSED: … … 192 194 } 193 195 194 function _getImageDimensions() { 196 function _internalSelector(selector) { 197 return '#' + _display.id + ' ' + selector; 198 } 199 200 function _getImage() { 195 201 if (_image) { 196 202 // Find image size and stretch exactfit if close enough 197 var img = DOCUMENT.createElement("img");203 var img = new Image(); 198 204 img.addEventListener('load', function() { 199 205 _imageWidth = img.width; 200 206 _imageHeight = img.height; 201 207 _resize(); 208 _css(_internalSelector(D_PREVIEW_CLASS), { 209 'background-image': _image ? ('url('+_image+')') : '', 210 }); 211 _setVisibility(D_PREVIEW_CLASS, true); 202 212 }, false); 203 213 img.src = _image; 204 214 } else { 215 _setVisibility(D_PREVIEW_CLASS, false); 205 216 _imageWidth = _imageHeight = 0; 206 217 } … … 214 225 return null; 215 226 } 216 217 227 218 228 function _resize() { 219 _utils.stretch(_api.jwGetStretching(), _ display, _display.clientWidth, _display.clientHeight, _imageWidth, _imageHeight);229 _utils.stretch(_api.jwGetStretching(), _preview, _display.clientWidth, _display.clientHeight, _imageWidth, _imageHeight); 220 230 } 221 231 222 232 this.resize = _resize; 233 234 function _setVisibility(selector, state) { 235 _css(_internalSelector(selector), { 236 opacity: state ? 1 : 0 237 }); 238 } 239 240 this.show = function() { 241 _setVisibility('', true); 242 } 243 244 this.hide = function() { 245 _setVisibility('', false); 246 } 223 247 224 248 _init(); 225 249 }; 226 250 227 _ style(D_CLASS, {251 _css(D_CLASS, { 228 252 position: JW_CSS_ABSOLUTE, 229 253 cursor: "pointer", … … 232 256 overflow: 'hidden' 233 257 }); 234 235 _style(D_CLASS + ' *', { 258 259 _css(D_CLASS + ' .jwpreview', { 260 position: JW_CSS_ABSOLUTE, 261 width: JW_CSS_100PCT, 262 height: JW_CSS_100PCT, 263 'background-repeat': 'no-repeat', 264 'background-position': 'center', 265 overflow: 'hidden' 266 }); 267 268 _css(D_CLASS +', '+D_CLASS + ' *', { 236 269 '-webkit-transition': JW_CSS_SMOOTH_EASE, 237 270 '-moz-transition': JW_CSS_SMOOTH_EASE, … … 239 272 }); 240 273 241 _ style(D_CLASS+' button, ' + D_CLASS+' .jwicon', {274 _css(D_CLASS+' button, ' + D_CLASS+' .jwicon', { 242 275 border: JW_CSS_NONE, 243 276 position: JW_CSS_ABSOLUTE, … … 248 281 }); 249 282 250 _style( {251 position: JW_CSS_ABSOLUTE,252 left: "50%",253 top: "50%",254 padding: 0,255 cursor: 'pointer'256 });257 258 259 283 })(jwplayer.html5); -
branches/jw6/src/js/html5/jwplayer.html5.model.js
r2179 r2180 78 78 } 79 79 80 this.seekDrag = function(state) { 81 _video.seekDrag(state); 82 } 83 80 84 this.setFullscreen = function(state) { 81 85 if (state != _model.fullscreen) { … … 83 87 _model.sendEvent(_events.JWPLAYER_FULLSCREEN, { fullscreen: state } ); 84 88 } 89 } 90 91 this.setPlaylist = function(playlist) { 92 _model.item = -1; 93 _model.playlist = playlist; 94 _model.sendEvent(_events.JWPLAYER_PLAYLIST_LOADED, { 95 playlist: playlist 96 }); 85 97 } 86 98 -
branches/jw6/src/js/html5/jwplayer.html5.player.js
r2179 r2180 15 15 _api.id = _model.id; 16 16 17 // _controller.load();18 /*19 (new html5.skinloader(config.skin, function(skin) {20 _api.skin = skin;21 _view.setup();22 }, function(err) { _utils.log(err); }));23 */24 17 var setup = new html5.setup(_model, _view, _controller); 25 18 setup.addEventListener(jwplayer.events.JWPLAYER_READY, _readyHandler); … … 29 22 30 23 function _readyHandler(evt) { 24 _view.completeSetup(); 31 25 _controller.sendEvent(evt.type, evt); 32 26 _controller.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_LOADED, {playlist: _model.playlist}); … … 55 49 this.jwPlaylistItem = _controller.item; 56 50 this.jwSetFullscreen = _controller.setFullscreen; 57 this.jwResize = _view.resize; 51 this.jwResize = _view.resize; 52 this.jwSeekDrag = _model.seekDrag; 53 this.jwSetStretching = _controller.setStretching; 54 58 55 59 56 -
branches/jw6/src/js/html5/jwplayer.html5.setup.js
r2179 r2180 18 18 var _jw = jwplayer, _utils = _jw.utils, _events = _jw.events, 19 19 20 PARSE_CONFIG = "config",21 LOAD_SKIN = "skin",22 LOAD_PLAYLIST = "playlist",23 LOAD_PREVIEW = "preview",24 SETUP_COMPONENTS = "components",25 INIT_PLUGINS = "plugins",26 SEND_READY = "ready";20 PARSE_CONFIG = 1, 21 LOAD_SKIN = 2, 22 LOAD_PLAYLIST = 3, 23 LOAD_PREVIEW = 4, 24 SETUP_COMPONENTS = 5, 25 INIT_PLUGINS = 6, 26 SEND_READY = 7; 27 27 28 28 html5.setup = function(model, view, controller) { … … 42 42 _addTask(LOAD_PLAYLIST, _loadPlaylist, PARSE_CONFIG); 43 43 _addTask(LOAD_PREVIEW, _loadPreview, LOAD_PLAYLIST); 44 _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_ SKIN);44 _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_PREVIEW + "," + LOAD_SKIN); 45 45 _addTask(INIT_PLUGINS, _initPlugins, SETUP_COMPONENTS + "," + LOAD_PLAYLIST); 46 46 _addTask(SEND_READY, _sendReady, INIT_PLUGINS); … … 73 73 function _allComplete(dependencies) { 74 74 if (!dependencies) return true; 75 var split = dependencies. split(",");75 var split = dependencies.toString().split(","); 76 76 for (var i=0; i<split.length; i++) { 77 77 if (!_completed[split[i]]) … … 113 113 114 114 function _playlistLoaded(evt) { 115 _model. playlist = evt.playlist;115 _model.setPlaylist(evt.playlist); 116 116 _taskComplete(LOAD_PLAYLIST); 117 117 } … … 129 129 img.addEventListener('error', _previewLoaded, false); 130 130 img.src = preview; 131 } else { 132 _taskComplete(LOAD_PREVIEW); 131 133 } 132 134 } … … 140 142 _taskComplete(SETUP_COMPONENTS); 141 143 } 142 144 143 145 function _initPlugins() { 144 146 _taskComplete(INIT_PLUGINS); -
branches/jw6/src/js/html5/jwplayer.html5.video.js
r2177 r2180 10 10 _utils = _jw.utils, 11 11 _events = _jw.events, 12 _states = _events.state, 13 _isMobile = _utils.isMobile(); 12 _states = _events.state; 14 13 15 14 … … 42 41 "waiting" : _bufferStateHandler 43 42 }, 44 43 44 _extensions = { 45 "mp4": "video/mp4", 46 "webm": "video/webm", 47 "m3u8": "audio/x-mpegurl" 48 }, 49 50 51 // Current playlist item 52 _item, 53 // Currently playing file 54 _file, 45 55 // Reference to the video tag 46 56 _video, … … 53 63 // Whether seeking is ready yet 54 64 _canSeek, 65 // Whether we have sent out the BUFFER_FULL event 66 _bufferFull, 55 67 // If we should seek on canplay 56 68 _delayedSeek, 69 // If we're currently dragging the seek bar 70 _dragging, 57 71 // Current media state 58 72 _state = _states.IDLE, … … 99 113 100 114 function _timeUpdateHandler(evt) { 101 if (_state == _states.PLAYING ) {115 if (_state == _states.PLAYING && !_dragging) { 102 116 _position = _video.currentTime; 103 117 _sendEvent(_events.JWPLAYER_MEDIA_TIME, { … … 114 128 if (!_canSeek) { 115 129 _canSeek = true; 116 _send Event(_events.JWPLAYER_MEDIA_BUFFER_FULL);130 _sendBufferFull(); 117 131 if (_delayedSeek > 0) { 118 132 _seek(_delayedSeek); … … 120 134 } 121 135 } 136 137 function _sendBufferFull() { 138 if (!_bufferFull) { 139 _bufferFull = true; 140 _sendEvent(_events.JWPLAYER_MEDIA_BUFFER_FULL); 141 } 142 } 122 143 123 144 function _playHandler(evt) { 145 if (_dragging) return; 146 124 147 if (_video.paused) { 125 148 _setState(_states.PAUSED); … … 138 161 } 139 162 140 this.load = function(videoURL) { 163 function _canPlay(file) { 164 var type = _extensions[_utils.strings.extension(file)]; 165 return (!!type && _video.canPlayType(type)); 166 } 167 168 /** Selects the appropriate file out of all available options **/ 169 function _selectFile(item) { 170 if (item.levels && item.levels.length > 0) { 171 for (var i=0; i<item.levels.length; i++) { 172 if (_canPlay(item.levels[i].file)) 173 return item.levels[i].file; 174 } 175 } else if (item.file && _canPlay(item.file)) { 176 return item.file; 177 } 178 return null; 179 } 180 181 this.load = function(item) { 182 _item = item; 141 183 _canSeek = false; 184 _bufferFull = false; 142 185 _delayedSeek = 0; 143 186 _duration = 0; 144 187 _position = 0; 188 189 _file = _selectFile(_item); 190 191 if (!_file) { 192 _utils.log("Could not find a file to play."); 193 return; 194 } 195 145 196 _setState(_states.BUFFERING); 146 _video.src = videoURL; 147 197 _video.src = _file; 148 198 _video.load(); 149 199 150 200 _bufferInterval = setInterval(_sendBufferUpdate, 100); 151 201 152 if (_isMobile) { 202 // Use native browser controls on mobile 203 if (_utils.isMobile()) { 153 204 _video.controls = true; 154 _video.style.opacity = 1; 205 } 206 207 if (_utils.isIPod()) { 208 _sendBufferFull(); 155 209 } 156 210 } 157 211 158 212 var _stop = this.stop = function() { 159 // _video.src = "";160 213 _video.removeAttribute("src"); 161 214 _video.load(); 162 _video.style.opacity = 0;163 215 clearInterval(_bufferInterval); 164 216 _setState(_states.IDLE); … … 166 218 167 219 this.play = function() { 168 _video.style.opacity = 1;169 220 _video.play(); 170 221 } … … 174 225 } 175 226 227 this.seekDrag = function(state) { 228 _dragging = state; 229 if (state) _video.pause(); 230 else _video.play(); 231 } 232 176 233 var _seek = this.seek = function(pos) { 177 234 if (_canSeek) { 178 235 _delayedSeek = 0; 179 _sendEvent(_events.JWPLAYER_MEDIA_SEEK, { 180 position: _position, 181 offset: pos 182 }); 236 if (!_dragging) { 237 _sendEvent(_events.JWPLAYER_MEDIA_SEEK, { 238 position: _position, 239 offset: pos 240 }); 241 } 183 242 _video.currentTime = pos; 184 243 } else { … … 219 278 return; 220 279 } 280 281 // Ignore state changes while dragging the seekbar 282 if (_dragging) return 221 283 222 284 if (_state != newstate) { -
branches/jw6/src/js/html5/jwplayer.html5.view.js
r2179 r2180 6 6 */ 7 7 (function(html5) { 8 var _jw = jwplayer, _utils = _jw.utils, _style = _utils.appendStylesheet, _events = jwplayer.events, _states = _events.state; 9 10 DOCUMENT = document, 11 VIEW_CONTAINER_CLASS = "jwplayer", 12 VIEW_VIDEO_CONTAINER_CLASS = "jwvideocontainer", 13 VIEW_CONTROLS_CONTAINER_CLASS = "jwcontrolscontainer"; 8 var _jw = jwplayer, 9 _utils = _jw.utils, 10 _css = _utils.css, 11 _events = jwplayer.events, 12 _states = _events.state, 13 14 DOCUMENT = document, 15 VIEW_CONTAINER_CLASS = "jwplayer", 16 VIEW_VIDEO_CONTAINER_CLASS = "jwvideocontainer", 17 VIEW_CONTROLS_CONTAINER_CLASS = "jwcontrolscontainer"; 14 18 15 19 html5.view = function(api, model) { … … 50 54 51 55 _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 56 57 _stateHandler({newstate:_states.IDLE}); 52 58 53 59 _container.addEventListener('mouseout', _fadeControls, false); 54 55 60 _container.addEventListener('mousemove', function(evt) { 56 61 _showControls(); … … 70 75 71 76 function _setupControls() { 72 var width = _ api.jwGetWidth(),73 height = _ api.jwGetHeight(),77 var width = _model.width, 78 height = _model.height, 74 79 cbSettings = _api.skin.getComponentSettings('controlbar'), 75 80 displaySettings = _api.skin.getComponentSettings('display') … … 83 88 } 84 89 85 _ style('#'+_container.id, {86 'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0,87 width: width,88 height: height90 _resize(width, height); 91 92 _css('#'+_container.id, { 93 'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0 89 94 }); 90 95 … … 106 111 if (state) { 107 112 if (!_model.fullscreen) { 108 _fakeFullscreen(true);109 110 113 if (_container.requestFullScreen) { 111 114 _container.requestFullScreen(); 112 115 } else if (_container.mozRequestFullScreen) { 113 116 _container.mozRequestFullScreen(); 114 } else if (_container.webkitRequestFullScreenWithKeys) {115 _container.webkitRequestFullScreenWithKeys();116 117 } else if (_container.webkitRequestFullScreen) { 117 118 _container.webkitRequestFullScreen(); 119 } else { 120 _fakeFullscreen(true); 118 121 } 119 122 } … … 136 139 */ 137 140 function _resize(width, height) { 141 if (_utils.exists(width) && _utils.exists(height)) { 142 _css('#'+_container.id, { 143 width: width, 144 height: height 145 }); 146 _model.width = width; 147 _model.height = height; 148 } 149 138 150 if (_controls.display) { 139 151 _controls.display.resize(width, height); … … 142 154 _controls.controlbar.resize(width, height); 143 155 } 144 if (_container.style.opacity == 0) { 145 _container.style.opacity = 1; 146 } 156 147 157 return; 148 158 } 149 159 150 160 this.resize = _resize; 151 161 162 this.completeSetup = function() { 163 _css('#'+_container.id, {opacity: 1}); 164 } 152 165 153 166 /** … … 185 198 */ 186 199 function _isNativeFullscreen() { 187 return (DOCUMENT.mozFullScreenElement == _container || 188 DOCUMENT.webkitCurrentFullScreenElement == _container); 200 if (DOCUMENT.mozFullScreenElement) return DOCUMENT.mozFullScreenElement.id == _container.id; 201 else if (DOCUMENT.webkitCurrentFullScreenElement) return DOCUMENT.webkitCurrentFullScreenElement.id == _container.id; 202 else return false; 189 203 } 190 204 … … 198 212 199 213 function _hideControls() { 200 _controlsLayer.style.opacity = 0; 214 if (_controls.controlbar) _controls.controlbar.hide(); 215 if (_controls.display) _controls.display.hide(); 201 216 } 202 217 203 218 function _showControls() { 204 _controlsLayer.style.opacity = 1; 219 if (_controls.controlbar) _controls.controlbar.show(); 220 if (_controls.display) _controls.display.show(); 205 221 } 206 222 … … 209 225 */ 210 226 function _stateHandler(evt) { 227 var vidstyle = {}; 211 228 switch(evt.newstate) { 212 229 case _states.PLAYING: 230 if (_utils.isIPod) { 231 vidstyle.display = "block"; 232 } 233 vidstyle.opacity = 1; 234 _css('#'+_container.id+' .'+VIEW_VIDEO_CONTAINER_CLASS, vidstyle); 213 235 _hideControls(); 214 236 break; 215 237 case _states.COMPLETED: 216 238 case _states.IDLE: 239 if (_utils.isIPod) { 240 vidstyle.display = "none"; 241 } 242 vidstyle.opacity = 0; 243 _css('#'+_container.id+' .'+VIEW_VIDEO_CONTAINER_CLASS, vidstyle); 244 _showControls(); 245 break; 217 246 case _states.BUFFERING: 218 247 case _states.PAUSED: 219 _showControls();220 break;221 }222 }223 224 248 if (!_utils.isMobile()) { 249 _showControls(); 250 } 251 break; 252 } 253 } 225 254 } 226 255 … … 230 259 *************************************************************/ 231 260 232 var JW_CSS_SMOOTH_EASE = "opacity . 25s ease";261 var JW_CSS_SMOOTH_EASE = "opacity .5s ease"; 233 262 234 263 235 264 // Container styles 236 _ style('.' + VIEW_CONTAINER_CLASS, {265 _css('.' + VIEW_CONTAINER_CLASS, { 237 266 position : "relative", 238 267 overflow: "hidden", … … 243 272 }); 244 273 245 _ style('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, {274 _css('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, { 246 275 position : "absolute", 247 276 width : "100%", … … 252 281 }); 253 282 254 _ style('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", {283 _css('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", { 255 284 background : "transparent", 256 285 width : "100%", 257 height : "100%", 258 opacity : 0, 259 '-webkit-transition' : 'opacity .15s ease' 286 height : "100%" 260 287 }); 261 288 … … 264 291 // Fullscreen styles 265 292 266 _ style('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', {293 _css('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', { 267 294 width: "100% !important", 268 295 height: "100% !important" 269 296 }); 270 297 271 _ style('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', {298 _css('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', { 272 299 width: "100% !important", 273 300 height: "100% !important" 274 301 }); 275 302 276 _ style('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', {303 _css('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', { 277 304 left: 0, 278 305 right: 0, … … 283 310 }); 284 311 285 _ style('.' + VIEW_CONTAINER_CLASS+' .jwuniform', {312 _css('.' + VIEW_CONTAINER_CLASS+' .jwuniform', { 286 313 'background-size': 'contain !important' 287 314 }); 288 315 289 _ style('.' + VIEW_CONTAINER_CLASS+' .jwfill', {316 _css('.' + VIEW_CONTAINER_CLASS+' .jwfill', { 290 317 'background-size': 'cover !important' 291 318 }); 292 319 293 _ style('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', {320 _css('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', { 294 321 'background-size': '100% 100% !important' 295 322 }); 296 323 297 _ style('.' + VIEW_CONTAINER_CLASS+' .jwnone', {324 _css('.' + VIEW_CONTAINER_CLASS+' .jwnone', { 298 325 'background-size': null 299 326 }); -
branches/jw6/src/js/utils/jwplayer.utils.js
r2179 r2180 32 32 } 33 33 34 var _styleSheet; 35 var _rules = {} 36 37 /** 38 * @param {Object} or {String} domelement If domelement is a string, create a document-wide CSS rule for that string 39 * @param {Object} styles 40 */ 41 utils.css = function(domelement, styles) { 42 if (utils.exists(domelement)) { 43 for (var style in styles) { 44 try { 45 if (typeof styles[style] === "undefined") { 46 continue; 47 } else if (typeof styles[style] == "number" && !(style == "zIndex" || style == "opacity")) { 48 if (isNaN(styles[style])) { 49 continue; 50 } 51 if (style.match(/color/i)) { 52 styles[style] = "#" + utils.strings.pad(styles[style].toString(16), 6); 53 } else { 54 styles[style] = Math.ceil(styles[style]) + "px"; 55 } 56 } 57 if (styles[style]) { 58 domelement.style[style] = styles[style]; 59 } 60 } catch (err) { 61 } 62 } 63 } 64 }; 65 66 var foo =false; 67 68 utils.appendStylesheet = function(selector, styles) { 69 if (!_styleSheet) { 70 _styleSheet = DOCUMENT.createElement("style"); 71 _styleSheet.type = "text/css"; 72 DOCUMENT.getElementsByTagName('head')[0].appendChild(_styleSheet); 34 var _styleSheets={}, 35 _rules = {}; 36 37 utils.css = function(selector, styles) { 38 if (!_styleSheets[selector]) { 39 var styleSheet = DOCUMENT.createElement("style"); 40 styleSheet.type = "text/css"; 41 DOCUMENT.getElementsByTagName('head')[0].appendChild(styleSheet); 42 _styleSheets[selector] = styleSheet; 73 43 } 74 44 … … 86 56 } 87 57 88 _updateStylesheet( );58 _updateStylesheet(selector); 89 59 } 90 60 … … 116 86 } 117 87 118 function _updateStylesheet() { 119 if (_styleSheet) { 120 var ruleText = ""; 121 for (var rule in _rules) { 122 var styles = _rules[rule]; 123 ruleText += rule + "{\n"; 124 for (var style in styles) { 125 ruleText += " "+style + ": " + styles[style] + ";\n"; 126 } 127 ruleText += "}\n"; 128 } 129 _styleSheet.innerHTML = ruleText; 88 function _updateStylesheet(selector) { 89 if (_styleSheets[selector]) { 90 var ruleText = selector + "{\n"; 91 var styles = _rules[selector]; 92 for (var style in styles) { 93 ruleText += " "+style + ": " + styles[style] + ";\n"; 94 } 95 ruleText += "}\n"; 96 _styleSheets[selector].innerHTML = ruleText; 130 97 } 131 98 } … … 141 108 } 142 109 } 143 _updateStylesheet(); 110 for (var selector in _styleSheets) { 111 if (selector.indexOf(filter) >= 0) { 112 _styleSheets[selector].innerHTML = ''; 113 } 114 } 144 115 } 145 116 -
branches/jw6/src/js/utils/jwplayer.utils.strings.js
r2177 r2180 153 153 } 154 154 } 155 } 155 }; 156 156 157 /** Returns the extension of a file name * */ 158 strings.extension = function(path) { 159 if (!path) { return ""; } 160 path = path.substring(path.lastIndexOf("/") + 1, path.length).split("?")[0]; 161 if (path.lastIndexOf('.') > -1) { 162 return path.substr(path.lastIndexOf('.') + 1, path.length).toLowerCase(); 163 } 164 }; 165 157 166 })(jwplayer.utils); -
branches/jw6/test/controller.html
r2179 r2180 15 15 16 16 <script type="text/javascript"> 17 var player; 18 var form; 17 var player; 18 var form; 19 20 function update(form) { 21 document.getElementById("player").style.width = form.size.value + "px"; 22 cb.resize(100, 100); 23 cb.setBuffer(form.buf.value / 100); 24 cb.setProgress(form.pct.value / 100); 25 } 19 26 20 function update(form) { 21 document.getElementById("player").style.width = form.size.value + "px"; 22 cb.resize(100, 100); 23 cb.setBuffer(form.buf.value / 100); 24 cb.setProgress(form.pct.value / 100); 25 } 26 27 function init() { 28 form = document.getElementById("form"); 29 document.getElementById("player").innerHTML = ""; 30 player = new jwplayer.html5.player({ 31 id: "player", 32 skin: form.skin.options[form.skin.selectedIndex].value, 33 playlist: "http://content.bitsontherun.com/feeds/Hilgq9Ju.rss", 34 debug: 'console', 35 width: "100%", 36 height: "100%" 37 }); 38 } 27 function init() { 28 form = document.getElementById("form"); 29 document.getElementById("player").innerHTML = ""; 30 player = new jwplayer.html5.player({ 31 id: "player", 32 skin: form.skin.options[form.skin.selectedIndex].value, 33 playlist: [{ 34 levels:[ 35 { file: 'http://content.bitsontherun.com/videos/nPripu9l-1ahmry41.mp4' }, 36 { file: 'http://content.bitsontherun.com/videos/nPripu9l-1Lq5Mnwq.webm' } 37 ], 38 image: 'http://content.bitsontherun.com/thumbs/gSzpo2wh-480.jpg' 39 }], 40 debug: 'console', 41 width: "100%", 42 height: "100%" 43 }); 44 } 39 45 </script> 40 46 </head> 41 47 42 48 <body onload="init()"> 43 44 <a href="http://sitetophone.com/316502-1120">site</a>45 49 46 50 <form id="form" onsubmit="update(this); return false;">
Note: See TracChangeset
for help on using the changeset viewer.
