Changeset 2180


Ignore:
Timestamp:
05/02/12 09:37:17 (13 months ago)
Author:
pablo
Message:

Updates for iOS compatibility, styling changes

Location:
branches/jw6
Files:
1 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • branches/jw6/bin-debug/jwplayer.js

    r2179 r2180  
    5757        } 
    5858 
    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; 
    9868                } 
    9969 
     
    11181                } 
    11282 
    113                 _updateStylesheet(); 
     83                _updateStylesheet(selector); 
    11484        } 
    11585         
     
    141111        } 
    142112         
    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; 
    155122                } 
    156123        } 
     
    166133                        } 
    167134                } 
    168                 _updateStylesheet(); 
     135                for (var selector in _styleSheets) { 
     136                        if (selector.indexOf(filter) >= 0) { 
     137                                _styleSheets[selector].innerHTML = ''; 
     138                        } 
     139                } 
    169140        } 
    170141         
     
    617588                        } 
    618589                } 
    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 
    621601})(jwplayer.utils); 
    622602/** 
     
    12011181                _events = jwplayer.events, 
    12021182                _states = jwplayer.events.state, 
    1203                 _style = _utils.appendStylesheet, 
     1183                _css = _utils.css, 
    12041184 
    12051185                /** Controlbar element types **/ 
     
    12191199                JW_CSS_RIGHT = "right", 
    12201200                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", 
    12221202                 
    12231203                CB_CLASS = '.jwcontrolbar', 
     
    12391219                                // buttoncolor : parseInt("ffffff", 16), 
    12401220                                // position : html5.view.positions.BOTTOM, 
    1241                                 // position: "OVER", 
    12421221                                // idlehide : false, 
    12431222                                // hideplaylistcontrols : false, 
     
    13111290                        _duration, 
    13121291                        _currentVolume, 
     1292                        _dragging = false, 
     1293                        _lastSeekTime = 0, 
    13131294                         
    13141295                        _toggles = { 
     
    13361317                                volume: _volume 
    13371318                        }; 
    1338                  
    1339                  
    13401319 
    13411320                function _init() { 
     
    13941373                        case _states.BUFFERING: 
    13951374                        case _states.PLAYING: 
    1396                                 if (_elements['timeSliderThumb']) { 
    1397                                         _elements['timeSliderThumb'].style.opacity = 1; 
    1398                                 } 
     1375                                _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 1 }); 
    13991376                                _toggleButton("play", true); 
    14001377                                break; 
     
    14061383                        case _states.IDLE: 
    14071384                                _toggleButton("play", false); 
    1408                                 if (_elements['timeSliderThumb']) { 
    1409                                         _elements['timeSliderThumb'].style.opacity = 0; 
    1410                                 } 
     1385                                _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 0 }); 
    14111386                                if (_elements["timeRail"]) { 
    14121387                                        _elements["timeRail"].className = "jwrail"; 
     
    14201395                                break; 
    14211396                        case _states.COMPLETED: 
    1422                                 _controlbar.style.opacity = 0; 
     1397                                _css(_internalSelector(), { opacity: 0 }); 
    14231398                                break; 
    14241399                        } 
     
    14481423                function _createStyles() { 
    14491424                        _utils.clearCss('#'+_id); 
    1450                          
    1451                         _style('#'+_id, { 
     1425 
     1426                        _css('#'+_id, { 
    14521427                                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 : 0 
     1428                                bottom: _settings.margin ? _settings.margin : 0, 
     1429                                left: _settings.margin ? _settings.margin : 0, 
     1430                                right: _settings.margin ? _settings.margin : 0 
    14561431                        }); 
    14571432                         
    1458                         _style(_internalSelector(".jwtext"), { 
     1433                        _css(_internalSelector(".jwtext"), { 
    14591434                                font: _settings.fontsize + "px/" + _getSkinElement("background").height + "px " + _settings.font, 
    14601435                                color: _settings.fontcolor, 
     
    15351510                        } 
    15361511                         
    1537                         _style(_internalSelector('.jw'+name), _utils.extend(newStyle, style)); 
     1512                        _css(_internalSelector('.jw'+name), _utils.extend(newStyle, style)); 
    15381513                        _elements[name] = element; 
    15391514                        return element; 
     
    15701545                        } 
    15711546                         
    1572                         _style(selector, {  
     1547                        _css(selector, {  
    15731548                                width: out.width, 
    15741549                                background: 'url('+ out.src +') center no-repeat' 
     
    15761551                         
    15771552                        if (over.src) { 
    1578                                 _style(selector + ':hover', {  
     1553                                _css(selector + ':hover', {  
    15791554                                        background: 'url('+ over.src +') center no-repeat' 
    15801555                                }); 
     
    16121587                 
    16131588                function _seek(pct) { 
    1614                         if (!_dragging) { 
    1615                                 _api.jwPlay(); 
    1616                         } 
    16171589                        _api.jwSeek(pct * _duration); 
    16181590                } 
     
    16611633                        } 
    16621634 
    1663                         _style(_internalSelector('.jw'+name), css); 
     1635                        _css(_internalSelector('.jw'+name), css); 
    16641636                        element.innerHTML = "00:00"; 
    16651637                        _elements[name] = element; 
     
    16711643                                var element = _createSpan(); 
    16721644                                element.className = "jwblankDivider"; 
    1673                                 _style(element, { 
     1645                                _css(element, { 
    16741646                                        width: parseInt(divider.width) 
    16751647                                }); 
     
    16971669                        if (capLeft) slider.appendChild(capRight); 
    16981670 
    1699                         _style(_internalSelector(".jw" + name + " .jwrail"), { 
     1671                        _css(_internalSelector(".jw" + name + " .jwrail"), { 
    17001672                                left: _getSkinElement(name+"SliderCapLeft").width, 
    17011673                                right: _getSkinElement(name+"SliderCapRight").width, 
     
    17321704                        var thumb = _buildImage(name + "SliderThumb"); 
    17331705                        if (thumb) { 
     1706                                _css(_internalSelector('.'+thumb.className), { opacity: 0 }); 
    17341707                                thumb.className += " jwthumb"; 
    1735                                 thumb.style.opacity = 0; 
    17361708                                rail.appendChild(thumb); 
    17371709                        } 
     
    17441716                } 
    17451717                 
    1746                 var _dragging; 
    1747                  
     1718                function _idle() { 
     1719                        var currentState = _api.jwGetState(); 
     1720                        return (currentState == _states.IDLE || currentState == _states.COMPLETED);  
     1721                } 
     1722 
    17481723                function _sliderMouseDown(name) { 
    17491724                        return (function(evt) { 
     
    17551730                                if (name == "time") { 
    17561731                                        if (!_idle()) { 
     1732                                                _api.jwSeekDrag(true); 
    17571733                                                _dragging = name; 
    17581734                                        } 
     
    17631739                } 
    17641740                 
    1765                 function _idle() { 
    1766                         var currentState = _api.jwGetState(); 
    1767                         return (currentState == _states.IDLE || currentState == _states.COMPLETED);  
    1768                 } 
    1769                  
    1770                 var _lastSeekTime = 0; 
    1771                  
    17721741                function _sliderMouseEvent(evt) { 
    17731742                        if (!_dragging || evt.button != 0) { 
     
    17811750                        if (evt.type == 'mouseup') { 
    17821751                                var name = _dragging; 
     1752                                 
     1753                                if (name == "time") { 
     1754                                        _api.jwSeekDrag(false); 
     1755                                } 
     1756 
    17831757                                _elements[name+'Rail'].className = "jwrail jwsmooth"; 
    17841758                                _dragging = null; 
     
    17921766                                var currentTime = (new Date()).getTime(); 
    17931767                                if (currentTime - _lastSeekTime > 500) { 
    1794                                         _api.jwPause(); 
    17951768                                        _lastSeekTime = currentTime; 
    17961769                                        _sliderMapping[_dragging](pct); 
     
    18021775                function _styleTimeSlider(slider) { 
    18031776                        if (_elements['timeSliderThumb']) { 
    1804                                 _style(_internalSelector(".jwtimeSliderThumb"), { 
     1777                                _css(_internalSelector(".jwtimeSliderThumb"), { 
    18051778                                        'margin-left': (_getSkinElement("timeSliderThumb").width/-2) 
    18061779                                }); 
     
    18171790                                railWidth = _getSkinElement("volumeSliderRail").width; 
    18181791                         
    1819                         _style(_internalSelector(".jwvolume"), { 
     1792                        _css(_internalSelector(".jwvolume"), { 
    18201793                                width: (capLeftWidth + railWidth + capRightWidth) 
    18211794                        }); 
     
    18321805                        _controlbar.appendChild(_groups.right); 
    18331806                         
    1834                         _style(_internalSelector(".jwright"), { 
     1807                        _css(_internalSelector(".jwright"), { 
    18351808                                right: _getSkinElement("capRight").width 
    18361809                        }); 
     
    18591832 
    18601833                var _resize = this.resize = function(width, height) { 
    1861                         _style(_internalSelector('.jwgroup.jwcenter'), { 
     1834                        _css(_internalSelector('.jwgroup.jwcenter'), { 
    18621835                                left: Math.round(_utils.parseDimension(_groups.left.offsetWidth) + _getSkinElement("capLeft").width), 
    18631836                                right: Math.round(_utils.parseDimension(_groups.right.offsetWidth) + _getSkinElement("capRight").width) 
     
    18711844                function _setBuffer(pct) { 
    18721845                        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 }); 
    18911853                } 
    18921854                 
    18931855                function _setVolume (pct) { 
    1894                         _sliderPercent('volume', pct, true); 
     1856                        _sliderPercent('.jwvolumeSlider', pct, true); 
    18951857                } 
    18961858 
    18971859                function _setProgress(pct) { 
    1898                         _sliderPercent('time', pct); 
     1860                        _sliderPercent('.jwtimeSlider', pct); 
    18991861                } 
    19001862 
     
    19141876                } 
    19151877                 
     1878                this.show = function() { 
     1879                        _css(_internalSelector(), { opacity: 1 }); 
     1880                } 
     1881                 
     1882                this.hide = function() { 
     1883                        _css(_internalSelector(), { opacity: 0 }); 
     1884                } 
     1885                 
    19161886                // Call constructor 
    19171887                _init(); 
     
    19241894         *************************************************************/ 
    19251895 
    1926         _style(CB_CLASS, { 
     1896        _css(CB_CLASS, { 
    19271897                position: JW_CSS_ABSOLUTE, 
    19281898                overflow: 'hidden', 
     
    19321902        }) 
    19331903         
    1934         _style(CB_CLASS+' span',{ 
     1904        _css(CB_CLASS+' span',{ 
    19351905                height: JW_CSS_100PCT, 
    19361906                '-webkit-user-select': JW_CSS_NONE, 
     
    19401910        }); 
    19411911         
    1942     _style(CB_CLASS+' .jwgroup', { 
     1912    _css(CB_CLASS+' .jwgroup', { 
    19431913        display: JW_CSS_INLINE 
    19441914    }); 
    19451915     
    1946     _style(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', { 
     1916    _css(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', { 
    19471917        position: JW_CSS_RELATIVE, 
    19481918                'float': JW_CSS_LEFT 
    19491919    }); 
    19501920     
    1951         _style(CB_CLASS+' .jwright', { 
     1921        _css(CB_CLASS+' .jwright', { 
    19521922                position: JW_CSS_ABSOLUTE 
    19531923        }); 
    19541924         
    1955     _style(CB_CLASS+' .jwcenter', { 
     1925    _css(CB_CLASS+' .jwcenter', { 
    19561926        position: JW_CSS_ABSOLUTE 
    19571927    }); 
    19581928     
    1959     _style(CB_CLASS+' button', { 
     1929    _css(CB_CLASS+' button', { 
    19601930        display: JW_CSS_INLINE_BLOCK, 
    19611931        height: JW_CSS_100PCT, 
     
    19671937    }); 
    19681938     
    1969     _style(CB_CLASS+' .jwcapRight', {  
     1939    _css(CB_CLASS+' .jwcapRight', {  
    19701940                right: 0, 
    19711941                position: JW_CSS_ABSOLUTE 
    19721942        }); 
    19731943     
    1974     _style(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', { 
     1944    _css(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', { 
    19751945        position: JW_CSS_ABSOLUTE, 
    19761946        height: JW_CSS_100PCT, 
     
    19811951    
    19821952     
    1983     _style(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', { 
     1953    _css(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', { 
    19841954        position: JW_CSS_ABSOLUTE, 
    19851955        height: JW_CSS_100PCT, 
     
    19871957    }); 
    19881958     
    1989     _style(CB_CLASS + ' .jwtime .jwsmooth span', { 
     1959    _css(CB_CLASS + ' .jwtime .jwsmooth span', { 
    19901960        '-webkit-transition': JW_CSS_SMOOTH_EASE, 
    19911961        '-moz-transition': JW_CSS_SMOOTH_EASE, 
     
    19931963    }); 
    19941964     
    1995     _style(CB_CLASS + ' .jwdivider+.jwdivider', { 
     1965    _css(CB_CLASS + ' .jwdivider+.jwdivider', { 
    19961966        display: JW_CSS_NONE 
    19971967    }); 
    19981968     
    1999     _style(CB_CLASS + ' .jwtext', { 
     1969    _css(CB_CLASS + ' .jwtext', { 
    20001970                padding: '0 5px', 
    20011971                'text-align': 'center' 
    20021972        }); 
    20031973     
    2004     _style(CB_CLASS + ' .jwtoggling', { 
     1974    _css(CB_CLASS + ' .jwtoggling', { 
    20051975        '-webkit-transition': JW_CSS_NONE, 
    20061976        '-moz-transition': JW_CSS_NONE, 
     
    20412011                } 
    20422012 
    2043                 var file; 
    2044                  
    20452013                function _load(item) { 
    2046                         if (_model.state == _states.PLAYING || _model.state == _states.BUFFERING) { 
    2047                                 _video.stop(); 
    2048                         } 
     2014                        _stop(); 
    20492015                         
    20502016                        switch (_utils.typeOf(item)) { 
    20512017                        case "string": 
    2052                                 file = item; 
     2018                                _model.setPlaylist(new html5.playlist({file:item})); 
     2019                                _model.setItem(0); 
    20532020                                break; 
    20542021                        case "object": 
    2055                                 file = item.file; 
     2022                        case "array": 
     2023                                _model.setPlaylist(new html5.playlist(item)); 
     2024                                _model.setItem(0); 
    20562025                                break; 
    20572026                        case "number": 
    2058                                 file = _model.playlist[item].file; 
     2027                                _model.setItem(item); 
    20592028                                break; 
    2060                         default: 
    2061                                 file = _model.playlist[_model.item].file; 
    20622029                        } 
    20632030                                 
    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 //                      } 
    20742031                } 
    20752032                 
    20762033                function _play() { 
    20772034                        if (_model.state == _states.IDLE) { 
    2078                                 _video.load(file); 
     2035                                _video.load(_model.playlist[_model.item]); 
    20792036                        } else if (_model.state == _states.PAUSED) { 
    20802037                                _video.play(); 
     
    21092066                } 
    21102067 
    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) { 
    21152074                        _load(_model.item); 
    21162075                        _play(); 
     
    21442103                this.setMute = _waitForReady(_setMute); 
    21452104                this.setFullscreen = _waitForReady(_setFullscreen); 
     2105                this.setStretching = _waitForReady(_setStretching); 
    21462106                 
    21472107/*              this.playerReady = _playerReady; 
     
    21912151        var _utils = jwplayer.utils, 
    21922152                _css = _utils.css, 
    2193                 _style = _utils.appendStylesheet, 
    21942153                _events = jwplayer.events, 
    21952154                _states = _events.state, 
    21962155                _rotate = html5.utils.animations.rotate, 
    2197  
     2156                 
     2157 
     2158                DOCUMENT = document, 
    21982159                D_CLASS = ".jwdisplay", 
     2160                D_PREVIEW_CLASS = ".jwpreview", 
    21992161 
    22002162                /** Some CSS constants we should use for minimization **/ 
     
    22082170                //JW_CSS_RIGHT = "right", 
    22092171                JW_CSS_100PCT = "100%", 
    2210                 JW_CSS_SMOOTH_EASE = "opacity .5s, background .5s"; 
     2172                JW_CSS_SMOOTH_EASE = "opacity .25s"; 
    22112173 
    22122174         
     
    22142176                var _api = api, 
    22152177                        _skin = api.skin, 
    2216                         _display, 
    2217                         _config = config ? config : {}, 
    2218                         _image, _imageWidth, _imageHeight, 
     2178                        _display, _preview, 
     2179                        _image, _imageWidth, _imageHeight, _imageURL, 
    22192180                        _icons = {}, 
    22202181                        _hiding, 
     
    22222183                        _degreesRotated,  
    22232184                        _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); 
    22262190                         
    22272191                function _init() { 
     
    22302194                        _display.className = "jwdisplay"; 
    22312195                         
     2196                        _preview = DOCUMENT.createElement("div"); 
     2197                        _preview.className = "jwpreview"; 
     2198                        _display.appendChild(_preview); 
     2199                         
    22322200                        _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 
    22332201                        _api.jwAddEventListener(_events.JWPLAYER_PLAYLIST_ITEM, _itemHandler); 
     
    22382206                         
    22392207                        _stateHandler({newstate:_states.IDLE}); 
    2240                          
    22412208                } 
    22422209                 
     
    23042271                        } 
    23052272                         
    2306                         _style(selector, {  
     2273                        _css(selector, {  
    23072274                                width: out.width, 
    23082275                                height: out.height, 
     
    23132280 
    23142281                        if (over && over.src) { 
    2315                                 _style(selector + ".jwhover", { 
     2282                                _css(selector + ".jwhover", { 
    23162283                                        background: 'url('+ over.src +') center no-repeat' 
    23172284                                }); 
     
    23292296                } 
    23302297 
    2331                 function _itemHandler(evt) { 
     2298                function _itemHandler() { 
    23322299                        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                        } 
    23382306                } 
    23392307                 
     
    23452313                        case _states.IDLE: 
    23462314                                _setIcon('play'); 
    2347                                 if (_image) { 
    2348                                         _style('#' + _display.id, { 
    2349                                                 'background': 'url('+_image+') no-repeat center'  
    2350                                         }); 
    2351                                 } 
     2315                                _setVisibility(D_PREVIEW_CLASS, true); 
    23522316                                break; 
    23532317                        case _states.BUFFERING: 
     
    23612325                        case _states.PLAYING: 
    23622326                                _setIcon(); 
    2363                                 _style('#' + _display.id, { 
    2364                                         'background': 'transparent' 
    2365                                 }); 
     2327                                _setVisibility(D_PREVIEW_CLASS, false); 
    23662328                                break; 
    23672329                        case _states.PAUSED: 
     
    23752337                } 
    23762338                 
    2377                 function _getImageDimensions() { 
     2339                function _internalSelector(selector) { 
     2340                        return '#' + _display.id + ' ' + selector; 
     2341                } 
     2342                 
     2343                function _getImage() { 
    23782344                        if (_image) { 
    23792345                                // Find image size and stretch exactfit if close enough 
    2380                                 var img = DOCUMENT.createElement("img"); 
     2346                                var img = new Image(); 
    23812347                                img.addEventListener('load', function() { 
    23822348                                        _imageWidth = img.width; 
    23832349                                        _imageHeight = img.height; 
    23842350                                        _resize(); 
     2351                                        _css(_internalSelector(D_PREVIEW_CLASS), { 
     2352                                                'background-image': _image ? ('url('+_image+')') : '', 
     2353                                        }); 
     2354                                        _setVisibility(D_PREVIEW_CLASS, true); 
    23852355                                }, false); 
    23862356                                img.src = _image; 
    23872357                        } else { 
     2358                                _setVisibility(D_PREVIEW_CLASS, false); 
    23882359                                _imageWidth = _imageHeight = 0; 
    23892360                        } 
     
    23972368                        return null; 
    23982369                } 
    2399  
    24002370                 
    24012371                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); 
    24032373                } 
    24042374 
    24052375                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                } 
    24062390 
    24072391                _init(); 
    24082392        }; 
    24092393         
    2410         _style(D_CLASS, { 
     2394        _css(D_CLASS, { 
    24112395                position: JW_CSS_ABSOLUTE, 
    24122396                cursor: "pointer", 
     
    24152399                overflow: 'hidden' 
    24162400        }); 
    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 + ' *', { 
    24192412        '-webkit-transition': JW_CSS_SMOOTH_EASE, 
    24202413        '-moz-transition': JW_CSS_SMOOTH_EASE, 
     
    24222415        }); 
    24232416         
    2424     _style(D_CLASS+' button, ' + D_CLASS+' .jwicon', { 
     2417    _css(D_CLASS+' button, ' + D_CLASS+' .jwicon', { 
    24252418        border: JW_CSS_NONE, 
    24262419        position: JW_CSS_ABSOLUTE, 
     
    24312424    }); 
    24322425 
    2433     _style( { 
    2434         position: JW_CSS_ABSOLUTE, 
    2435         left: "50%", 
    2436         top: "50%", 
    2437         padding: 0, 
    2438         cursor: 'pointer' 
    2439     }); 
    2440  
    2441          
    24422426})(jwplayer.html5);/** 
    24432427 * jwplayer.html5 model 
     
    25192503                } 
    25202504                 
     2505                this.seekDrag = function(state) { 
     2506                        _video.seekDrag(state); 
     2507                } 
     2508                 
    25212509                this.setFullscreen = function(state) { 
    25222510                        if (state != _model.fullscreen) { 
     
    25242512                                _model.sendEvent(_events.JWPLAYER_FULLSCREEN, { fullscreen: state } ); 
    25252513                        } 
     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                        }); 
    25262522                } 
    25272523                 
     
    25622558                        _api.id = _model.id; 
    25632559                         
    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 */ 
    25712560                        var setup = new html5.setup(_model, _view, _controller); 
    25722561                        setup.addEventListener(jwplayer.events.JWPLAYER_READY, _readyHandler); 
     
    25762565                 
    25772566                function _readyHandler(evt) { 
     2567                        _view.completeSetup(); 
    25782568                        _controller.sendEvent(evt.type, evt); 
    25792569                        _controller.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_LOADED, {playlist: _model.playlist}); 
     
    26022592                this.jwPlaylistItem = _controller.item; 
    26032593                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 
    26052598                 
    26062599 
     
    27862779        var _jw = jwplayer, _utils = _jw.utils, _events = _jw.events, 
    27872780         
    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; 
    27952788 
    27962789        html5.setup = function(model, view, controller) { 
     
    28102803                        _addTask(LOAD_PLAYLIST, _loadPlaylist, PARSE_CONFIG); 
    28112804                        _addTask(LOAD_PREVIEW, _loadPreview, LOAD_PLAYLIST); 
    2812                         _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_SKIN); 
     2805                        _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_PREVIEW + "," + LOAD_SKIN); 
    28132806                        _addTask(INIT_PLUGINS, _initPlugins, SETUP_COMPONENTS + "," + LOAD_PLAYLIST); 
    28142807                        _addTask(SEND_READY, _sendReady, INIT_PLUGINS); 
     
    28412834                function _allComplete(dependencies) { 
    28422835                        if (!dependencies) return true; 
    2843                         var split = dependencies.split(","); 
     2836                        var split = dependencies.toString().split(","); 
    28442837                        for (var i=0; i<split.length; i++) { 
    28452838                                if (!_completed[split[i]]) 
     
    28812874                 
    28822875                function _playlistLoaded(evt) { 
    2883                         _model.playlist = evt.playlist; 
     2876                        _model.setPlaylist(evt.playlist); 
    28842877                        _taskComplete(LOAD_PLAYLIST); 
    28852878                } 
     
    28972890                                img.addEventListener('error', _previewLoaded, false); 
    28982891                                img.src = preview;  
     2892                        } else { 
     2893                                _taskComplete(LOAD_PREVIEW);     
    28992894                        } 
    29002895                } 
     
    29082903                        _taskComplete(SETUP_COMPONENTS); 
    29092904                } 
    2910  
     2905                 
    29112906                function _initPlugins() { 
    29122907                        _taskComplete(INIT_PLUGINS); 
     
    31953190                _utils = _jw.utils,  
    31963191                _events = _jw.events,  
    3197                 _states = _events.state, 
    3198                 _isMobile = _utils.isMobile(); 
     3192                _states = _events.state; 
    31993193         
    32003194 
     
    32273221                        "waiting" : _bufferStateHandler 
    32283222                }, 
    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, 
    32303235                // Reference to the video tag 
    32313236                _video, 
     
    32383243                // Whether seeking is ready yet 
    32393244                _canSeek, 
     3245                // Whether we have sent out the BUFFER_FULL event 
     3246                _bufferFull, 
    32403247                // If we should seek on canplay 
    32413248                _delayedSeek, 
     3249                // If we're currently dragging the seek bar 
     3250                _dragging, 
    32423251                // Current media state 
    32433252                _state = _states.IDLE, 
     
    32843293 
    32853294                function _timeUpdateHandler(evt) { 
    3286                         if (_state == _states.PLAYING) { 
     3295                        if (_state == _states.PLAYING && !_dragging) { 
    32873296                                _position = _video.currentTime; 
    32883297                                _sendEvent(_events.JWPLAYER_MEDIA_TIME, { 
     
    32993308                        if (!_canSeek) { 
    33003309                                _canSeek = true; 
    3301                                 _sendEvent(_events.JWPLAYER_MEDIA_BUFFER_FULL); 
     3310                                _sendBufferFull(); 
    33023311                                if (_delayedSeek > 0) { 
    33033312                                        _seek(_delayedSeek); 
     
    33053314                        } 
    33063315                } 
     3316                 
     3317                function _sendBufferFull() { 
     3318                        if (!_bufferFull) { 
     3319                                _bufferFull = true; 
     3320                                _sendEvent(_events.JWPLAYER_MEDIA_BUFFER_FULL); 
     3321                        } 
     3322                } 
    33073323 
    33083324                function _playHandler(evt) { 
     3325                        if (_dragging) return; 
     3326                         
    33093327                        if (_video.paused) { 
    33103328                                _setState(_states.PAUSED); 
     
    33233341                } 
    33243342 
    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; 
    33263363                        _canSeek = false; 
     3364                        _bufferFull = false; 
    33273365                        _delayedSeek = 0; 
    33283366                        _duration = 0; 
    33293367                        _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                         
    33303376                        _setState(_states.BUFFERING);  
    3331                         _video.src = videoURL; 
    3332                          
     3377                        _video.src = _file; 
    33333378                        _video.load(); 
    33343379                         
    33353380                        _bufferInterval = setInterval(_sendBufferUpdate, 100); 
    33363381 
    3337                         if (_isMobile) { 
     3382                        // Use native browser controls on mobile 
     3383                        if (_utils.isMobile()) { 
    33383384                                _video.controls = true; 
    3339                                 _video.style.opacity = 1; 
     3385                        } 
     3386                         
     3387                        if (_utils.isIPod()) { 
     3388                                _sendBufferFull(); 
    33403389                        } 
    33413390                } 
    33423391 
    33433392                var _stop = this.stop = function() { 
    3344                         // _video.src = ""; 
    33453393                        _video.removeAttribute("src"); 
    33463394                        _video.load(); 
    3347                         _video.style.opacity = 0; 
    33483395                        clearInterval(_bufferInterval); 
    33493396                        _setState(_states.IDLE); 
     
    33513398 
    33523399                this.play = function() { 
    3353                         _video.style.opacity = 1; 
    33543400                        _video.play(); 
    33553401                } 
     
    33593405                } 
    33603406 
     3407                this.seekDrag = function(state) { 
     3408                        _dragging = state; 
     3409                        if (state) _video.pause(); 
     3410                        else _video.play(); 
     3411                } 
     3412                 
    33613413                var _seek = this.seek = function(pos) { 
    33623414                        if (_canSeek) { 
    33633415                                _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                                } 
    33683422                                _video.currentTime = pos; 
    33693423                        } else { 
     
    34043458                                return; 
    34053459                        } 
     3460                         
     3461                        // Ignore state changes while dragging the seekbar 
     3462                        if (_dragging) return 
    34063463 
    34073464                        if (_state != newstate) { 
     
    34593516 */ 
    34603517(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"; 
    34673528 
    34683529        html5.view = function(api, model) { 
     
    35033564                         
    35043565                        _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 
     3566 
     3567                        _stateHandler({newstate:_states.IDLE}); 
    35053568                         
    35063569                        _container.addEventListener('mouseout', _fadeControls, false); 
    3507                          
    35083570                        _container.addEventListener('mousemove', function(evt) { 
    35093571                                _showControls(); 
     
    35233585                 
    35243586                function _setupControls() { 
    3525                         var width = _api.jwGetWidth(), 
    3526                                 height = _api.jwGetHeight(), 
     3587                        var width = _model.width, 
     3588                                height = _model.height, 
    35273589                                cbSettings = _api.skin.getComponentSettings('controlbar'), 
    35283590                                displaySettings = _api.skin.getComponentSettings('display') 
     
    35363598                        } 
    35373599 
    3538                         _style('#'+_container.id, { 
    3539                                 'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0, 
    3540                                 width: width, 
    3541                                 height: height 
     3600                        _resize(width, height); 
     3601                         
     3602                        _css('#'+_container.id, { 
     3603                                'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0 
    35423604                        }); 
    35433605 
     
    35593621                        if (state) { 
    35603622                                if (!_model.fullscreen) { 
    3561                                         _fakeFullscreen(true); 
    3562                                          
    35633623                                        if (_container.requestFullScreen) { 
    35643624                                                _container.requestFullScreen(); 
    35653625                                        } else if (_container.mozRequestFullScreen) { 
    35663626                                                _container.mozRequestFullScreen(); 
    3567                                         } else if (_container.webkitRequestFullScreenWithKeys) { 
    3568                                                 _container.webkitRequestFullScreenWithKeys(); 
    35693627                                        } else if (_container.webkitRequestFullScreen) { 
    35703628                                                _container.webkitRequestFullScreen(); 
     3629                                        } else { 
     3630                                                _fakeFullscreen(true); 
    35713631                                        } 
    35723632                                } 
     
    35893649                 */ 
    35903650                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 
    35913660                        if (_controls.display) { 
    35923661                                _controls.display.resize(width, height); 
     
    35953664                                _controls.controlbar.resize(width, height); 
    35963665                        } 
    3597                         if (_container.style.opacity == 0) { 
    3598                                 _container.style.opacity = 1; 
    3599                         } 
     3666 
    36003667                        return; 
    36013668                } 
    36023669                 
    36033670                this.resize = _resize; 
    3604                  
     3671 
     3672                this.completeSetup = function() { 
     3673                        _css('#'+_container.id, {opacity: 1}); 
     3674                } 
    36053675                 
    36063676                /** 
     
    36383708                 */ 
    36393709                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; 
    36423713                } 
    36433714                 
     
    36513722 
    36523723                function _hideControls() { 
    3653                         _controlsLayer.style.opacity = 0; 
     3724                        if (_controls.controlbar) _controls.controlbar.hide(); 
     3725                        if (_controls.display) _controls.display.hide(); 
    36543726                } 
    36553727 
    36563728                function _showControls() { 
    3657                         _controlsLayer.style.opacity = 1; 
     3729                        if (_controls.controlbar) _controls.controlbar.show(); 
     3730                        if (_controls.display) _controls.display.show(); 
    36583731                } 
    36593732 
     
    36623735                 */ 
    36633736                function _stateHandler(evt) { 
     3737                        var vidstyle = {}; 
    36643738                        switch(evt.newstate) { 
    36653739                        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); 
    36663745                                _hideControls(); 
    36673746                                break; 
    36683747                        case _states.COMPLETED: 
    36693748                        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; 
    36703756                        case _states.BUFFERING: 
    36713757                        case _states.PAUSED: 
    3672                                 _showControls(); 
     3758                                if (!_utils.isMobile()) { 
     3759                                        _showControls(); 
     3760                                } 
    36733761                                break; 
    36743762                        } 
    36753763                } 
    3676  
    3677  
    36783764        } 
    36793765 
     
    36833769         *************************************************************/ 
    36843770 
    3685         var JW_CSS_SMOOTH_EASE = "opacity .25s ease"; 
     3771        var JW_CSS_SMOOTH_EASE = "opacity .5s ease"; 
    36863772 
    36873773         
    36883774        // Container styles 
    3689         _style('.' + VIEW_CONTAINER_CLASS, { 
     3775        _css('.' + VIEW_CONTAINER_CLASS, { 
    36903776                position : "relative", 
    36913777                overflow: "hidden", 
     
    36963782        }); 
    36973783 
    3698         _style('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, { 
     3784        _css('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, { 
    36993785                position : "absolute", 
    37003786                width : "100%", 
     
    37053791        }); 
    37063792 
    3707         _style('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", { 
     3793        _css('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", { 
    37083794                background : "transparent", 
    37093795                width : "100%", 
    3710                 height : "100%", 
    3711                 opacity : 0, 
    3712                 '-webkit-transition' : 'opacity .15s ease' 
     3796                height : "100%" 
    37133797        }); 
    37143798 
     
    37173801        // Fullscreen styles 
    37183802         
    3719         _style('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', { 
     3803        _css('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', { 
    37203804                width: "100% !important", 
    37213805                height: "100% !important" 
    37223806        }); 
    37233807         
    3724         _style('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', { 
     3808        _css('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', { 
    37253809                width: "100% !important", 
    37263810                height: "100% !important" 
    37273811        }); 
    37283812         
    3729         _style('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', { 
     3813        _css('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', { 
    37303814                left: 0, 
    37313815                right: 0, 
     
    37363820        }); 
    37373821 
    3738         _style('.' + VIEW_CONTAINER_CLASS+' .jwuniform', { 
     3822        _css('.' + VIEW_CONTAINER_CLASS+' .jwuniform', { 
    37393823                'background-size': 'contain !important' 
    37403824        }); 
    37413825 
    3742         _style('.' + VIEW_CONTAINER_CLASS+' .jwfill', { 
     3826        _css('.' + VIEW_CONTAINER_CLASS+' .jwfill', { 
    37433827                'background-size': 'cover !important' 
    37443828        }); 
    37453829 
    3746         _style('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', { 
     3830        _css('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', { 
    37473831                'background-size': '100% 100% !important' 
    37483832        }); 
    37493833 
    3750         _style('.' + VIEW_CONTAINER_CLASS+' .jwnone', { 
     3834        _css('.' + VIEW_CONTAINER_CLASS+' .jwnone', { 
    37513835                'background-size': null 
    37523836        }); 
  • 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="&nbsp;";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="&nbsp;";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)}; 
     1if(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="&nbsp;";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="&nbsp;";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  
    1111                _events = jwplayer.events, 
    1212                _states = jwplayer.events.state, 
    13                 _style = _utils.appendStylesheet, 
     13                _css = _utils.css, 
    1414 
    1515                /** Controlbar element types **/ 
     
    2929                JW_CSS_RIGHT = "right", 
    3030                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", 
    3232                 
    3333                CB_CLASS = '.jwcontrolbar', 
     
    4949                                // buttoncolor : parseInt("ffffff", 16), 
    5050                                // position : html5.view.positions.BOTTOM, 
    51                                 // position: "OVER", 
    5251                                // idlehide : false, 
    5352                                // hideplaylistcontrols : false, 
     
    121120                        _duration, 
    122121                        _currentVolume, 
     122                        _dragging = false, 
     123                        _lastSeekTime = 0, 
    123124                         
    124125                        _toggles = { 
     
    146147                                volume: _volume 
    147148                        }; 
    148                  
    149                  
    150149 
    151150                function _init() { 
     
    204203                        case _states.BUFFERING: 
    205204                        case _states.PLAYING: 
    206                                 if (_elements['timeSliderThumb']) { 
    207                                         _elements['timeSliderThumb'].style.opacity = 1; 
    208                                 } 
     205                                _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 1 }); 
    209206                                _toggleButton("play", true); 
    210207                                break; 
     
    216213                        case _states.IDLE: 
    217214                                _toggleButton("play", false); 
    218                                 if (_elements['timeSliderThumb']) { 
    219                                         _elements['timeSliderThumb'].style.opacity = 0; 
    220                                 } 
     215                                _css(_internalSelector('.jwtimeSliderThumb'), { opacity: 0 }); 
    221216                                if (_elements["timeRail"]) { 
    222217                                        _elements["timeRail"].className = "jwrail"; 
     
    230225                                break; 
    231226                        case _states.COMPLETED: 
    232                                 _controlbar.style.opacity = 0; 
     227                                _css(_internalSelector(), { opacity: 0 }); 
    233228                                break; 
    234229                        } 
     
    258253                function _createStyles() { 
    259254                        _utils.clearCss('#'+_id); 
    260                          
    261                         _style('#'+_id, { 
     255 
     256                        _css('#'+_id, { 
    262257                                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 : 0 
     258                                bottom: _settings.margin ? _settings.margin : 0, 
     259                                left: _settings.margin ? _settings.margin : 0, 
     260                                right: _settings.margin ? _settings.margin : 0 
    266261                        }); 
    267262                         
    268                         _style(_internalSelector(".jwtext"), { 
     263                        _css(_internalSelector(".jwtext"), { 
    269264                                font: _settings.fontsize + "px/" + _getSkinElement("background").height + "px " + _settings.font, 
    270265                                color: _settings.fontcolor, 
     
    345340                        } 
    346341                         
    347                         _style(_internalSelector('.jw'+name), _utils.extend(newStyle, style)); 
     342                        _css(_internalSelector('.jw'+name), _utils.extend(newStyle, style)); 
    348343                        _elements[name] = element; 
    349344                        return element; 
     
    380375                        } 
    381376                         
    382                         _style(selector, {  
     377                        _css(selector, {  
    383378                                width: out.width, 
    384379                                background: 'url('+ out.src +') center no-repeat' 
     
    386381                         
    387382                        if (over.src) { 
    388                                 _style(selector + ':hover', {  
     383                                _css(selector + ':hover', {  
    389384                                        background: 'url('+ over.src +') center no-repeat' 
    390385                                }); 
     
    422417                 
    423418                function _seek(pct) { 
    424                         if (!_dragging) { 
    425                                 _api.jwPlay(); 
    426                         } 
    427419                        _api.jwSeek(pct * _duration); 
    428420                } 
     
    471463                        } 
    472464 
    473                         _style(_internalSelector('.jw'+name), css); 
     465                        _css(_internalSelector('.jw'+name), css); 
    474466                        element.innerHTML = "00:00"; 
    475467                        _elements[name] = element; 
     
    481473                                var element = _createSpan(); 
    482474                                element.className = "jwblankDivider"; 
    483                                 _style(element, { 
     475                                _css(element, { 
    484476                                        width: parseInt(divider.width) 
    485477                                }); 
     
    507499                        if (capLeft) slider.appendChild(capRight); 
    508500 
    509                         _style(_internalSelector(".jw" + name + " .jwrail"), { 
     501                        _css(_internalSelector(".jw" + name + " .jwrail"), { 
    510502                                left: _getSkinElement(name+"SliderCapLeft").width, 
    511503                                right: _getSkinElement(name+"SliderCapRight").width, 
     
    542534                        var thumb = _buildImage(name + "SliderThumb"); 
    543535                        if (thumb) { 
     536                                _css(_internalSelector('.'+thumb.className), { opacity: 0 }); 
    544537                                thumb.className += " jwthumb"; 
    545                                 thumb.style.opacity = 0; 
    546538                                rail.appendChild(thumb); 
    547539                        } 
     
    554546                } 
    555547                 
    556                 var _dragging; 
    557                  
     548                function _idle() { 
     549                        var currentState = _api.jwGetState(); 
     550                        return (currentState == _states.IDLE || currentState == _states.COMPLETED);  
     551                } 
     552 
    558553                function _sliderMouseDown(name) { 
    559554                        return (function(evt) { 
     
    565560                                if (name == "time") { 
    566561                                        if (!_idle()) { 
     562                                                _api.jwSeekDrag(true); 
    567563                                                _dragging = name; 
    568564                                        } 
     
    573569                } 
    574570                 
    575                 function _idle() { 
    576                         var currentState = _api.jwGetState(); 
    577                         return (currentState == _states.IDLE || currentState == _states.COMPLETED);  
    578                 } 
    579                  
    580                 var _lastSeekTime = 0; 
    581                  
    582571                function _sliderMouseEvent(evt) { 
    583572                        if (!_dragging || evt.button != 0) { 
     
    591580                        if (evt.type == 'mouseup') { 
    592581                                var name = _dragging; 
     582                                 
     583                                if (name == "time") { 
     584                                        _api.jwSeekDrag(false); 
     585                                } 
     586 
    593587                                _elements[name+'Rail'].className = "jwrail jwsmooth"; 
    594588                                _dragging = null; 
     
    602596                                var currentTime = (new Date()).getTime(); 
    603597                                if (currentTime - _lastSeekTime > 500) { 
    604                                         _api.jwPause(); 
    605598                                        _lastSeekTime = currentTime; 
    606599                                        _sliderMapping[_dragging](pct); 
     
    612605                function _styleTimeSlider(slider) { 
    613606                        if (_elements['timeSliderThumb']) { 
    614                                 _style(_internalSelector(".jwtimeSliderThumb"), { 
     607                                _css(_internalSelector(".jwtimeSliderThumb"), { 
    615608                                        'margin-left': (_getSkinElement("timeSliderThumb").width/-2) 
    616609                                }); 
     
    627620                                railWidth = _getSkinElement("volumeSliderRail").width; 
    628621                         
    629                         _style(_internalSelector(".jwvolume"), { 
     622                        _css(_internalSelector(".jwvolume"), { 
    630623                                width: (capLeftWidth + railWidth + capRightWidth) 
    631624                        }); 
     
    642635                        _controlbar.appendChild(_groups.right); 
    643636                         
    644                         _style(_internalSelector(".jwright"), { 
     637                        _css(_internalSelector(".jwright"), { 
    645638                                right: _getSkinElement("capRight").width 
    646639                        }); 
     
    669662 
    670663                var _resize = this.resize = function(width, height) { 
    671                         _style(_internalSelector('.jwgroup.jwcenter'), { 
     664                        _css(_internalSelector('.jwgroup.jwcenter'), { 
    672665                                left: Math.round(_utils.parseDimension(_groups.left.offsetWidth) + _getSkinElement("capLeft").width), 
    673666                                right: Math.round(_utils.parseDimension(_groups.right.offsetWidth) + _getSkinElement("capRight").width) 
     
    681674                function _setBuffer(pct) { 
    682675                        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 }); 
    701683                } 
    702684                 
    703685                function _setVolume (pct) { 
    704                         _sliderPercent('volume', pct, true); 
     686                        _sliderPercent('.jwvolumeSlider', pct, true); 
    705687                } 
    706688 
    707689                function _setProgress(pct) { 
    708                         _sliderPercent('time', pct); 
     690                        _sliderPercent('.jwtimeSlider', pct); 
    709691                } 
    710692 
     
    724706                } 
    725707                 
     708                this.show = function() { 
     709                        _css(_internalSelector(), { opacity: 1 }); 
     710                } 
     711                 
     712                this.hide = function() { 
     713                        _css(_internalSelector(), { opacity: 0 }); 
     714                } 
     715                 
    726716                // Call constructor 
    727717                _init(); 
     
    734724         *************************************************************/ 
    735725 
    736         _style(CB_CLASS, { 
     726        _css(CB_CLASS, { 
    737727                position: JW_CSS_ABSOLUTE, 
    738728                overflow: 'hidden', 
     
    742732        }) 
    743733         
    744         _style(CB_CLASS+' span',{ 
     734        _css(CB_CLASS+' span',{ 
    745735                height: JW_CSS_100PCT, 
    746736                '-webkit-user-select': JW_CSS_NONE, 
     
    750740        }); 
    751741         
    752     _style(CB_CLASS+' .jwgroup', { 
     742    _css(CB_CLASS+' .jwgroup', { 
    753743        display: JW_CSS_INLINE 
    754744    }); 
    755745     
    756     _style(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', { 
     746    _css(CB_CLASS+' span, '+CB_CLASS+' .jwgroup button,'+CB_CLASS+' .jwleft', { 
    757747        position: JW_CSS_RELATIVE, 
    758748                'float': JW_CSS_LEFT 
    759749    }); 
    760750     
    761         _style(CB_CLASS+' .jwright', { 
     751        _css(CB_CLASS+' .jwright', { 
    762752                position: JW_CSS_ABSOLUTE 
    763753        }); 
    764754         
    765     _style(CB_CLASS+' .jwcenter', { 
     755    _css(CB_CLASS+' .jwcenter', { 
    766756        position: JW_CSS_ABSOLUTE 
    767757    }); 
    768758     
    769     _style(CB_CLASS+' button', { 
     759    _css(CB_CLASS+' button', { 
    770760        display: JW_CSS_INLINE_BLOCK, 
    771761        height: JW_CSS_100PCT, 
     
    777767    }); 
    778768     
    779     _style(CB_CLASS+' .jwcapRight', {  
     769    _css(CB_CLASS+' .jwcapRight', {  
    780770                right: 0, 
    781771                position: JW_CSS_ABSOLUTE 
    782772        }); 
    783773     
    784     _style(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', { 
     774    _css(CB_CLASS+' .jwtime,' + CB_CLASS + ' .jwgroup span.jwstretch', { 
    785775        position: JW_CSS_ABSOLUTE, 
    786776        height: JW_CSS_100PCT, 
     
    791781    
    792782     
    793     _style(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', { 
     783    _css(CB_CLASS+' .jwrail,' + CB_CLASS + ' .jwthumb', { 
    794784        position: JW_CSS_ABSOLUTE, 
    795785        height: JW_CSS_100PCT, 
     
    797787    }); 
    798788     
    799     _style(CB_CLASS + ' .jwtime .jwsmooth span', { 
     789    _css(CB_CLASS + ' .jwtime .jwsmooth span', { 
    800790        '-webkit-transition': JW_CSS_SMOOTH_EASE, 
    801791        '-moz-transition': JW_CSS_SMOOTH_EASE, 
     
    803793    }); 
    804794     
    805     _style(CB_CLASS + ' .jwdivider+.jwdivider', { 
     795    _css(CB_CLASS + ' .jwdivider+.jwdivider', { 
    806796        display: JW_CSS_NONE 
    807797    }); 
    808798     
    809     _style(CB_CLASS + ' .jwtext', { 
     799    _css(CB_CLASS + ' .jwtext', { 
    810800                padding: '0 5px', 
    811801                'text-align': 'center' 
    812802        }); 
    813803     
    814     _style(CB_CLASS + ' .jwtoggling', { 
     804    _css(CB_CLASS + ' .jwtoggling', { 
    815805        '-webkit-transition': JW_CSS_NONE, 
    816806        '-moz-transition': JW_CSS_NONE, 
  • branches/jw6/src/js/html5/jwplayer.html5.controller.js

    r2177 r2180  
    3232                } 
    3333 
    34                 var file; 
    35                  
    3634                function _load(item) { 
    37                         if (_model.state == _states.PLAYING || _model.state == _states.BUFFERING) { 
    38                                 _video.stop(); 
    39                         } 
     35                        _stop(); 
    4036                         
    4137                        switch (_utils.typeOf(item)) { 
    4238                        case "string": 
    43                                 file = item; 
     39                                _model.setPlaylist(new html5.playlist({file:item})); 
     40                                _model.setItem(0); 
    4441                                break; 
    4542                        case "object": 
    46                                 file = item.file; 
     43                        case "array": 
     44                                _model.setPlaylist(new html5.playlist(item)); 
     45                                _model.setItem(0); 
    4746                                break; 
    4847                        case "number": 
    49                                 file = _model.playlist[item].file; 
     48                                _model.setItem(item); 
    5049                                break; 
    51                         default: 
    52                                 file = _model.playlist[_model.item].file; 
    5350                        } 
    5451                                 
    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 //                      } 
    6552                } 
    6653                 
    6754                function _play() { 
    6855                        if (_model.state == _states.IDLE) { 
    69                                 _video.load(file); 
     56                                _video.load(_model.playlist[_model.item]); 
    7057                        } else if (_model.state == _states.PAUSED) { 
    7158                                _video.play(); 
     
    10087                } 
    10188 
    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) { 
    10695                        _load(_model.item); 
    10796                        _play(); 
     
    135124                this.setMute = _waitForReady(_setMute); 
    136125                this.setFullscreen = _waitForReady(_setFullscreen); 
     126                this.setStretching = _waitForReady(_setStretching); 
    137127                 
    138128/*              this.playerReady = _playerReady; 
  • branches/jw6/src/js/html5/jwplayer.html5.display.js

    r2179 r2180  
    88        var _utils = jwplayer.utils, 
    99                _css = _utils.css, 
    10                 _style = _utils.appendStylesheet, 
    1110                _events = jwplayer.events, 
    1211                _states = _events.state, 
    1312                _rotate = html5.utils.animations.rotate, 
    14  
     13                 
     14 
     15                DOCUMENT = document, 
    1516                D_CLASS = ".jwdisplay", 
     17                D_PREVIEW_CLASS = ".jwpreview", 
    1618 
    1719                /** Some CSS constants we should use for minimization **/ 
     
    2527                //JW_CSS_RIGHT = "right", 
    2628                JW_CSS_100PCT = "100%", 
    27                 JW_CSS_SMOOTH_EASE = "opacity .5s, background .5s"; 
     29                JW_CSS_SMOOTH_EASE = "opacity .25s"; 
    2830 
    2931         
     
    3133                var _api = api, 
    3234                        _skin = api.skin, 
    33                         _display, 
    34                         _config = config ? config : {}, 
    35                         _image, _imageWidth, _imageHeight, 
     35                        _display, _preview, 
     36                        _image, _imageWidth, _imageHeight, _imageURL, 
    3637                        _icons = {}, 
    3738                        _hiding, 
     
    3940                        _degreesRotated,  
    4041                        _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); 
    4347                         
    4448                function _init() { 
     
    4751                        _display.className = "jwdisplay"; 
    4852                         
     53                        _preview = DOCUMENT.createElement("div"); 
     54                        _preview.className = "jwpreview"; 
     55                        _display.appendChild(_preview); 
     56                         
    4957                        _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 
    5058                        _api.jwAddEventListener(_events.JWPLAYER_PLAYLIST_ITEM, _itemHandler); 
     
    5563                         
    5664                        _stateHandler({newstate:_states.IDLE}); 
    57                          
    5865                } 
    5966                 
     
    121128                        } 
    122129                         
    123                         _style(selector, {  
     130                        _css(selector, {  
    124131                                width: out.width, 
    125132                                height: out.height, 
     
    130137 
    131138                        if (over && over.src) { 
    132                                 _style(selector + ".jwhover", { 
     139                                _css(selector + ".jwhover", { 
    133140                                        background: 'url('+ over.src +') center no-repeat' 
    134141                                }); 
     
    146153                } 
    147154 
    148                 function _itemHandler(evt) { 
     155                function _itemHandler() { 
    149156                        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                        } 
    155163                } 
    156164                 
     
    162170                        case _states.IDLE: 
    163171                                _setIcon('play'); 
    164                                 if (_image) { 
    165                                         _style('#' + _display.id, { 
    166                                                 'background': 'url('+_image+') no-repeat center'  
    167                                         }); 
    168                                 } 
     172                                _setVisibility(D_PREVIEW_CLASS, true); 
    169173                                break; 
    170174                        case _states.BUFFERING: 
     
    178182                        case _states.PLAYING: 
    179183                                _setIcon(); 
    180                                 _style('#' + _display.id, { 
    181                                         'background': 'transparent' 
    182                                 }); 
     184                                _setVisibility(D_PREVIEW_CLASS, false); 
    183185                                break; 
    184186                        case _states.PAUSED: 
     
    192194                } 
    193195                 
    194                 function _getImageDimensions() { 
     196                function _internalSelector(selector) { 
     197                        return '#' + _display.id + ' ' + selector; 
     198                } 
     199                 
     200                function _getImage() { 
    195201                        if (_image) { 
    196202                                // Find image size and stretch exactfit if close enough 
    197                                 var img = DOCUMENT.createElement("img"); 
     203                                var img = new Image(); 
    198204                                img.addEventListener('load', function() { 
    199205                                        _imageWidth = img.width; 
    200206                                        _imageHeight = img.height; 
    201207                                        _resize(); 
     208                                        _css(_internalSelector(D_PREVIEW_CLASS), { 
     209                                                'background-image': _image ? ('url('+_image+')') : '', 
     210                                        }); 
     211                                        _setVisibility(D_PREVIEW_CLASS, true); 
    202212                                }, false); 
    203213                                img.src = _image; 
    204214                        } else { 
     215                                _setVisibility(D_PREVIEW_CLASS, false); 
    205216                                _imageWidth = _imageHeight = 0; 
    206217                        } 
     
    214225                        return null; 
    215226                } 
    216  
    217227                 
    218228                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); 
    220230                } 
    221231 
    222232                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                } 
    223247 
    224248                _init(); 
    225249        }; 
    226250         
    227         _style(D_CLASS, { 
     251        _css(D_CLASS, { 
    228252                position: JW_CSS_ABSOLUTE, 
    229253                cursor: "pointer", 
     
    232256                overflow: 'hidden' 
    233257        }); 
    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 + ' *', { 
    236269        '-webkit-transition': JW_CSS_SMOOTH_EASE, 
    237270        '-moz-transition': JW_CSS_SMOOTH_EASE, 
     
    239272        }); 
    240273         
    241     _style(D_CLASS+' button, ' + D_CLASS+' .jwicon', { 
     274    _css(D_CLASS+' button, ' + D_CLASS+' .jwicon', { 
    242275        border: JW_CSS_NONE, 
    243276        position: JW_CSS_ABSOLUTE, 
     
    248281    }); 
    249282 
    250     _style( { 
    251         position: JW_CSS_ABSOLUTE, 
    252         left: "50%", 
    253         top: "50%", 
    254         padding: 0, 
    255         cursor: 'pointer' 
    256     }); 
    257  
    258          
    259283})(jwplayer.html5); 
  • branches/jw6/src/js/html5/jwplayer.html5.model.js

    r2179 r2180  
    7878                } 
    7979                 
     80                this.seekDrag = function(state) { 
     81                        _video.seekDrag(state); 
     82                } 
     83                 
    8084                this.setFullscreen = function(state) { 
    8185                        if (state != _model.fullscreen) { 
     
    8387                                _model.sendEvent(_events.JWPLAYER_FULLSCREEN, { fullscreen: state } ); 
    8488                        } 
     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                        }); 
    8597                } 
    8698                 
  • branches/jw6/src/js/html5/jwplayer.html5.player.js

    r2179 r2180  
    1515                        _api.id = _model.id; 
    1616                         
    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 */ 
    2417                        var setup = new html5.setup(_model, _view, _controller); 
    2518                        setup.addEventListener(jwplayer.events.JWPLAYER_READY, _readyHandler); 
     
    2922                 
    3023                function _readyHandler(evt) { 
     24                        _view.completeSetup(); 
    3125                        _controller.sendEvent(evt.type, evt); 
    3226                        _controller.sendEvent(jwplayer.events.JWPLAYER_PLAYLIST_LOADED, {playlist: _model.playlist}); 
     
    5549                this.jwPlaylistItem = _controller.item; 
    5650                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 
    5855                 
    5956 
  • branches/jw6/src/js/html5/jwplayer.html5.setup.js

    r2179 r2180  
    1818        var _jw = jwplayer, _utils = _jw.utils, _events = _jw.events, 
    1919         
    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; 
    2727 
    2828        html5.setup = function(model, view, controller) { 
     
    4242                        _addTask(LOAD_PLAYLIST, _loadPlaylist, PARSE_CONFIG); 
    4343                        _addTask(LOAD_PREVIEW, _loadPreview, LOAD_PLAYLIST); 
    44                         _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_SKIN); 
     44                        _addTask(SETUP_COMPONENTS, _setupComponents, LOAD_PREVIEW + "," + LOAD_SKIN); 
    4545                        _addTask(INIT_PLUGINS, _initPlugins, SETUP_COMPONENTS + "," + LOAD_PLAYLIST); 
    4646                        _addTask(SEND_READY, _sendReady, INIT_PLUGINS); 
     
    7373                function _allComplete(dependencies) { 
    7474                        if (!dependencies) return true; 
    75                         var split = dependencies.split(","); 
     75                        var split = dependencies.toString().split(","); 
    7676                        for (var i=0; i<split.length; i++) { 
    7777                                if (!_completed[split[i]]) 
     
    113113                 
    114114                function _playlistLoaded(evt) { 
    115                         _model.playlist = evt.playlist; 
     115                        _model.setPlaylist(evt.playlist); 
    116116                        _taskComplete(LOAD_PLAYLIST); 
    117117                } 
     
    129129                                img.addEventListener('error', _previewLoaded, false); 
    130130                                img.src = preview;  
     131                        } else { 
     132                                _taskComplete(LOAD_PREVIEW);     
    131133                        } 
    132134                } 
     
    140142                        _taskComplete(SETUP_COMPONENTS); 
    141143                } 
    142  
     144                 
    143145                function _initPlugins() { 
    144146                        _taskComplete(INIT_PLUGINS); 
  • branches/jw6/src/js/html5/jwplayer.html5.video.js

    r2177 r2180  
    1010                _utils = _jw.utils,  
    1111                _events = _jw.events,  
    12                 _states = _events.state, 
    13                 _isMobile = _utils.isMobile(); 
     12                _states = _events.state; 
    1413         
    1514 
     
    4241                        "waiting" : _bufferStateHandler 
    4342                }, 
    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, 
    4555                // Reference to the video tag 
    4656                _video, 
     
    5363                // Whether seeking is ready yet 
    5464                _canSeek, 
     65                // Whether we have sent out the BUFFER_FULL event 
     66                _bufferFull, 
    5567                // If we should seek on canplay 
    5668                _delayedSeek, 
     69                // If we're currently dragging the seek bar 
     70                _dragging, 
    5771                // Current media state 
    5872                _state = _states.IDLE, 
     
    99113 
    100114                function _timeUpdateHandler(evt) { 
    101                         if (_state == _states.PLAYING) { 
     115                        if (_state == _states.PLAYING && !_dragging) { 
    102116                                _position = _video.currentTime; 
    103117                                _sendEvent(_events.JWPLAYER_MEDIA_TIME, { 
     
    114128                        if (!_canSeek) { 
    115129                                _canSeek = true; 
    116                                 _sendEvent(_events.JWPLAYER_MEDIA_BUFFER_FULL); 
     130                                _sendBufferFull(); 
    117131                                if (_delayedSeek > 0) { 
    118132                                        _seek(_delayedSeek); 
     
    120134                        } 
    121135                } 
     136                 
     137                function _sendBufferFull() { 
     138                        if (!_bufferFull) { 
     139                                _bufferFull = true; 
     140                                _sendEvent(_events.JWPLAYER_MEDIA_BUFFER_FULL); 
     141                        } 
     142                } 
    122143 
    123144                function _playHandler(evt) { 
     145                        if (_dragging) return; 
     146                         
    124147                        if (_video.paused) { 
    125148                                _setState(_states.PAUSED); 
     
    138161                } 
    139162 
    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; 
    141183                        _canSeek = false; 
     184                        _bufferFull = false; 
    142185                        _delayedSeek = 0; 
    143186                        _duration = 0; 
    144187                        _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                         
    145196                        _setState(_states.BUFFERING);  
    146                         _video.src = videoURL; 
    147                          
     197                        _video.src = _file; 
    148198                        _video.load(); 
    149199                         
    150200                        _bufferInterval = setInterval(_sendBufferUpdate, 100); 
    151201 
    152                         if (_isMobile) { 
     202                        // Use native browser controls on mobile 
     203                        if (_utils.isMobile()) { 
    153204                                _video.controls = true; 
    154                                 _video.style.opacity = 1; 
     205                        } 
     206                         
     207                        if (_utils.isIPod()) { 
     208                                _sendBufferFull(); 
    155209                        } 
    156210                } 
    157211 
    158212                var _stop = this.stop = function() { 
    159                         // _video.src = ""; 
    160213                        _video.removeAttribute("src"); 
    161214                        _video.load(); 
    162                         _video.style.opacity = 0; 
    163215                        clearInterval(_bufferInterval); 
    164216                        _setState(_states.IDLE); 
     
    166218 
    167219                this.play = function() { 
    168                         _video.style.opacity = 1; 
    169220                        _video.play(); 
    170221                } 
     
    174225                } 
    175226 
     227                this.seekDrag = function(state) { 
     228                        _dragging = state; 
     229                        if (state) _video.pause(); 
     230                        else _video.play(); 
     231                } 
     232                 
    176233                var _seek = this.seek = function(pos) { 
    177234                        if (_canSeek) { 
    178235                                _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                                } 
    183242                                _video.currentTime = pos; 
    184243                        } else { 
     
    219278                                return; 
    220279                        } 
     280                         
     281                        // Ignore state changes while dragging the seekbar 
     282                        if (_dragging) return 
    221283 
    222284                        if (_state != newstate) { 
  • branches/jw6/src/js/html5/jwplayer.html5.view.js

    r2179 r2180  
    66 */ 
    77(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"; 
    1418 
    1519        html5.view = function(api, model) { 
     
    5054                         
    5155                        _api.jwAddEventListener(_events.JWPLAYER_PLAYER_STATE, _stateHandler); 
     56 
     57                        _stateHandler({newstate:_states.IDLE}); 
    5258                         
    5359                        _container.addEventListener('mouseout', _fadeControls, false); 
    54                          
    5560                        _container.addEventListener('mousemove', function(evt) { 
    5661                                _showControls(); 
     
    7075                 
    7176                function _setupControls() { 
    72                         var width = _api.jwGetWidth(), 
    73                                 height = _api.jwGetHeight(), 
     77                        var width = _model.width, 
     78                                height = _model.height, 
    7479                                cbSettings = _api.skin.getComponentSettings('controlbar'), 
    7580                                displaySettings = _api.skin.getComponentSettings('display') 
     
    8388                        } 
    8489 
    85                         _style('#'+_container.id, { 
    86                                 'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0, 
    87                                 width: width, 
    88                                 height: height 
     90                        _resize(width, height); 
     91                         
     92                        _css('#'+_container.id, { 
     93                                'background-color': displaySettings.backgroundcolor ? displaySettings.backgroundcolor : 0 
    8994                        }); 
    9095 
     
    106111                        if (state) { 
    107112                                if (!_model.fullscreen) { 
    108                                         _fakeFullscreen(true); 
    109                                          
    110113                                        if (_container.requestFullScreen) { 
    111114                                                _container.requestFullScreen(); 
    112115                                        } else if (_container.mozRequestFullScreen) { 
    113116                                                _container.mozRequestFullScreen(); 
    114                                         } else if (_container.webkitRequestFullScreenWithKeys) { 
    115                                                 _container.webkitRequestFullScreenWithKeys(); 
    116117                                        } else if (_container.webkitRequestFullScreen) { 
    117118                                                _container.webkitRequestFullScreen(); 
     119                                        } else { 
     120                                                _fakeFullscreen(true); 
    118121                                        } 
    119122                                } 
     
    136139                 */ 
    137140                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 
    138150                        if (_controls.display) { 
    139151                                _controls.display.resize(width, height); 
     
    142154                                _controls.controlbar.resize(width, height); 
    143155                        } 
    144                         if (_container.style.opacity == 0) { 
    145                                 _container.style.opacity = 1; 
    146                         } 
     156 
    147157                        return; 
    148158                } 
    149159                 
    150160                this.resize = _resize; 
    151                  
     161 
     162                this.completeSetup = function() { 
     163                        _css('#'+_container.id, {opacity: 1}); 
     164                } 
    152165                 
    153166                /** 
     
    185198                 */ 
    186199                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; 
    189203                } 
    190204                 
     
    198212 
    199213                function _hideControls() { 
    200                         _controlsLayer.style.opacity = 0; 
     214                        if (_controls.controlbar) _controls.controlbar.hide(); 
     215                        if (_controls.display) _controls.display.hide(); 
    201216                } 
    202217 
    203218                function _showControls() { 
    204                         _controlsLayer.style.opacity = 1; 
     219                        if (_controls.controlbar) _controls.controlbar.show(); 
     220                        if (_controls.display) _controls.display.show(); 
    205221                } 
    206222 
     
    209225                 */ 
    210226                function _stateHandler(evt) { 
     227                        var vidstyle = {}; 
    211228                        switch(evt.newstate) { 
    212229                        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); 
    213235                                _hideControls(); 
    214236                                break; 
    215237                        case _states.COMPLETED: 
    216238                        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; 
    217246                        case _states.BUFFERING: 
    218247                        case _states.PAUSED: 
    219                                 _showControls(); 
    220                                 break; 
    221                         } 
    222                 } 
    223  
    224  
     248                                if (!_utils.isMobile()) { 
     249                                        _showControls(); 
     250                                } 
     251                                break; 
     252                        } 
     253                } 
    225254        } 
    226255 
     
    230259         *************************************************************/ 
    231260 
    232         var JW_CSS_SMOOTH_EASE = "opacity .25s ease"; 
     261        var JW_CSS_SMOOTH_EASE = "opacity .5s ease"; 
    233262 
    234263         
    235264        // Container styles 
    236         _style('.' + VIEW_CONTAINER_CLASS, { 
     265        _css('.' + VIEW_CONTAINER_CLASS, { 
    237266                position : "relative", 
    238267                overflow: "hidden", 
     
    243272        }); 
    244273 
    245         _style('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, { 
     274        _css('.' + VIEW_VIDEO_CONTAINER_CLASS + ' ,.'+ VIEW_CONTROLS_CONTAINER_CLASS, { 
    246275                position : "absolute", 
    247276                width : "100%", 
     
    252281        }); 
    253282 
    254         _style('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", { 
     283        _css('.' + VIEW_VIDEO_CONTAINER_CLASS + " video", { 
    255284                background : "transparent", 
    256285                width : "100%", 
    257                 height : "100%", 
    258                 opacity : 0, 
    259                 '-webkit-transition' : 'opacity .15s ease' 
     286                height : "100%" 
    260287        }); 
    261288 
     
    264291        // Fullscreen styles 
    265292         
    266         _style('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', { 
     293        _css('.' + VIEW_CONTAINER_CLASS+':-webkit-full-screen', { 
    267294                width: "100% !important", 
    268295                height: "100% !important" 
    269296        }); 
    270297         
    271         _style('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', { 
     298        _css('.' + VIEW_CONTAINER_CLASS+':-moz-full-screen', { 
    272299                width: "100% !important", 
    273300                height: "100% !important" 
    274301        }); 
    275302         
    276         _style('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', { 
     303        _css('.' + VIEW_CONTAINER_CLASS+'.jwfullscreen', { 
    277304                left: 0, 
    278305                right: 0, 
     
    283310        }); 
    284311 
    285         _style('.' + VIEW_CONTAINER_CLASS+' .jwuniform', { 
     312        _css('.' + VIEW_CONTAINER_CLASS+' .jwuniform', { 
    286313                'background-size': 'contain !important' 
    287314        }); 
    288315 
    289         _style('.' + VIEW_CONTAINER_CLASS+' .jwfill', { 
     316        _css('.' + VIEW_CONTAINER_CLASS+' .jwfill', { 
    290317                'background-size': 'cover !important' 
    291318        }); 
    292319 
    293         _style('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', { 
     320        _css('.' + VIEW_CONTAINER_CLASS+' .jwexactfit', { 
    294321                'background-size': '100% 100% !important' 
    295322        }); 
    296323 
    297         _style('.' + VIEW_CONTAINER_CLASS+' .jwnone', { 
     324        _css('.' + VIEW_CONTAINER_CLASS+' .jwnone', { 
    298325                'background-size': null 
    299326        }); 
  • branches/jw6/src/js/utils/jwplayer.utils.js

    r2179 r2180  
    3232        } 
    3333 
    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; 
    7343                } 
    7444 
     
    8656                } 
    8757 
    88                 _updateStylesheet(); 
     58                _updateStylesheet(selector); 
    8959        } 
    9060         
     
    11686        } 
    11787         
    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; 
    13097                } 
    13198        } 
     
    141108                        } 
    142109                } 
    143                 _updateStylesheet(); 
     110                for (var selector in _styleSheets) { 
     111                        if (selector.indexOf(filter) >= 0) { 
     112                                _styleSheets[selector].innerHTML = ''; 
     113                        } 
     114                } 
    144115        } 
    145116         
  • branches/jw6/src/js/utils/jwplayer.utils.strings.js

    r2177 r2180  
    153153                        } 
    154154                } 
    155         } 
     155        }; 
    156156         
     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 
    157166})(jwplayer.utils); 
  • branches/jw6/test/controller.html

    r2179 r2180  
    1515           
    1616          <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                  } 
    1926 
    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                  } 
    3945          </script> 
    4046        </head> 
    4147         
    4248        <body onload="init()"> 
    43          
    44         <a href="http://sitetophone.com/316502-1120">site</a> 
    4549         
    4650    <form id="form" onsubmit="update(this); return false;"> 
Note: See TracChangeset for help on using the changeset viewer.