WordPress.org

Make WordPress Core

Ticket #24015: 24015.diff

File 24015.diff, 271.2 KB (added by wonderboymusic, 2 years ago)
  • wp-includes/js/mediaelement/mediaelement-and-player.js

    diff --git wp-includes/js/mediaelement/mediaelement-and-player.js wp-includes/js/mediaelement/mediaelement-and-player.js
    index 3601e4c..bb49d60 100644
     
    88* Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3 
    99* 
    1010* Copyright 2010-2012, John Dyer (http://j.hn) 
    11 * Dual licensed under the MIT or GPL Version 2 licenses. 
     11* License: MIT 
    1212* 
    1313*/ 
    1414// Namespace 
    1515var mejs = mejs || {}; 
    1616 
    1717// version number 
    18 mejs.version = '2.10.1'; 
     18mejs.version = '2.11.0'; 
    1919 
    2020// player number (for missing, same id attr) 
    2121mejs.meIndex = 0; 
    mejs.plugins = { 
    3030                //,{version: [12,0], types: ['video/webm']} // for future reference (hopefully!) 
    3131        ], 
    3232        youtube: [ 
    33                 {version: null, types: ['video/youtube', 'video/x-youtube']} 
     33                {version: null, types: ['video/youtube', 'video/x-youtube', 'audio/youtube', 'audio/x-youtube']} 
    3434        ], 
    3535        vimeo: [ 
    3636                {version: null, types: ['video/vimeo', 'video/x-vimeo']} 
    3737        ] 
    3838}; 
    3939 
     40 
    4041/* 
    4142Utility methods 
    4243*/ 
    mejs.Utility = { 
    8586                } else if(typeof fps == 'undefined') { 
    8687                    fps = 25; 
    8788                } 
    88          
     89 
    8990                var hours = Math.floor(time / 3600) % 24, 
    9091                        minutes = Math.floor(time / 60) % 60, 
    9192                        seconds = Math.floor(time % 60), 
    9293                        frames = Math.floor(((time % 1)*fps).toFixed(3)), 
    93                         result =  
     94                        result = 
    9495                                        ( (forceHours || hours > 0) ? (hours < 10 ? '0' + hours : hours) + ':' : '') 
    9596                                                + (minutes < 10 ? '0' + minutes : minutes) + ':' 
    9697                                                + (seconds < 10 ? '0' + seconds : seconds) 
    9798                                                + ((showFrameCount) ? ':' + (frames < 10 ? '0' + frames : frames) : ''); 
    98          
     99 
    99100                return result; 
    100101        }, 
    101          
     102 
    102103        timeCodeToSeconds: function(hh_mm_ss_ff, forceHours, showFrameCount, fps){ 
    103104                if (typeof showFrameCount == 'undefined') { 
    104105                    showFrameCount=false; 
    105106                } else if(typeof fps == 'undefined') { 
    106107                    fps = 25; 
    107108                } 
    108          
     109 
    109110                var tc_array = hh_mm_ss_ff.split(":"), 
    110111                        tc_hh = parseInt(tc_array[0], 10), 
    111112                        tc_mm = parseInt(tc_array[1], 10), 
    112113                        tc_ss = parseInt(tc_array[2], 10), 
    113114                        tc_ff = 0, 
    114115                        tc_in_seconds = 0; 
    115                  
     116 
    116117                if (showFrameCount) { 
    117118                    tc_ff = parseInt(tc_array[3])/fps; 
    118119                } 
    119                  
     120 
    120121                tc_in_seconds = ( tc_hh * 3600 ) + ( tc_mm * 60 ) + tc_ss + tc_ff; 
    121                  
     122 
    122123                return tc_in_seconds; 
    123124        }, 
    124          
     125 
    125126 
    126127        convertSMPTEtoSeconds: function (SMPTE) { 
    127                 if (typeof SMPTE != 'string')  
     128                if (typeof SMPTE != 'string') 
    128129                        return false; 
    129130 
    130131                SMPTE = SMPTE.replace(',', '.'); 
    131                  
     132 
    132133                var secs = 0, 
    133134                        decimalLen = (SMPTE.indexOf('.') != -1) ? SMPTE.split('.')[1].length : 0, 
    134135                        multiplier = 1; 
    135                  
     136 
    136137                SMPTE = SMPTE.split(':').reverse(); 
    137                  
     138 
    138139                for (var i = 0; i < SMPTE.length; i++) { 
    139140                        multiplier = 1; 
    140141                        if (i > 0) { 
    141                                 multiplier = Math.pow(60, i);  
     142                                multiplier = Math.pow(60, i); 
    142143                        } 
    143144                        secs += Number(SMPTE[i]) * multiplier; 
    144145                } 
    145146                return Number(secs.toFixed(decimalLen)); 
    146         },       
    147          
     147        }, 
     148 
    148149        /* borrowed from SWFObject: http://code.google.com/p/swfobject/source/browse/trunk/swfobject/src/swfobject.js#474 */ 
    149150        removeSwf: function(id) { 
    150151                var obj = document.getElementById(id); 
    151                 if (obj && obj.nodeName == "OBJECT") { 
     152                if (obj && /object|embed/i.test(obj.nodeName)) { 
    152153                        if (mejs.MediaFeatures.isIE) { 
    153154                                obj.style.display = "none"; 
    154155                                (function(){ 
    mejs.Utility = { 
    172173                                } 
    173174                        } 
    174175                        obj.parentNode.removeChild(obj); 
    175                 }                
     176                } 
    176177        } 
    177178}; 
    178179 
    mejs.MediaFeatures = { 
    303304                t.isGecko = (ua.match(/gecko/gi) !== null) && !t.isWebkit; 
    304305                t.isOpera = (ua.match(/opera/gi) !== null); 
    305306                t.hasTouch = ('ontouchstart' in window); 
    306                  
     307 
    307308                // borrowed from Modernizr 
    308309                t.svg = !! document.createElementNS && 
    309310                                !! document.createElementNS('http://www.w3.org/2000/svg','svg').createSVGRect; 
    mejs.MediaFeatures = { 
    312313                for (i=0; i<html5Elements.length; i++) { 
    313314                        v = document.createElement(html5Elements[i]); 
    314315                } 
    315                  
     316 
    316317                t.supportsMediaTag = (typeof v.canPlayType !== 'undefined' || t.isBustedAndroid); 
    317318 
    318319                // detect native JavaScript fullscreen (Safari/Firefox only, Chrome still fails) 
    319                  
     320 
    320321                // iOS 
    321322                t.hasSemiNativeFullScreen = (typeof v.webkitEnterFullscreen !== 'undefined'); 
    322                  
     323 
    323324                // Webkit/firefox 
    324325                t.hasWebkitNativeFullScreen = (typeof v.webkitRequestFullScreen !== 'undefined'); 
    325326                t.hasMozNativeFullScreen = (typeof v.mozRequestFullScreen !== 'undefined'); 
    326                  
     327 
    327328                t.hasTrueNativeFullScreen = (t.hasWebkitNativeFullScreen || t.hasMozNativeFullScreen); 
    328329                t.nativeFullScreenEnabled = t.hasTrueNativeFullScreen; 
    329330                if (t.hasMozNativeFullScreen) { 
    330331                        t.nativeFullScreenEnabled = v.mozFullScreenEnabled; 
    331332                } 
    332                  
    333                  
     333 
     334 
    334335                if (this.isChrome) { 
    335336                        t.hasSemiNativeFullScreen = false; 
    336337                } 
    337                  
     338 
    338339                if (t.hasTrueNativeFullScreen) { 
    339340                        t.fullScreenEventName = (t.hasWebkitNativeFullScreen) ? 'webkitfullscreenchange' : 'mozfullscreenchange'; 
    340                          
    341                          
     341 
     342 
    342343                        t.isFullScreen = function() { 
    343344                                if (v.mozRequestFullScreen) { 
    344345                                        return d.mozFullScreen; 
    mejs.MediaFeatures = { 
    346347                                        return d.webkitIsFullScreen; 
    347348                                } 
    348349                        } 
    349                                          
     350 
    350351                        t.requestFullScreen = function(el) { 
    351                  
     352 
    352353                                if (t.hasWebkitNativeFullScreen) { 
    353354                                        el.webkitRequestFullScreen(); 
    354355                                } else if (t.hasMozNativeFullScreen) { 
    355356                                        el.mozRequestFullScreen(); 
    356357                                } 
    357358                        } 
    358                          
    359                         t.cancelFullScreen = function() {                                
     359 
     360                        t.cancelFullScreen = function() { 
    360361                                if (t.hasWebkitNativeFullScreen) { 
    361362                                        document.webkitCancelFullScreen(); 
    362363                                } else if (t.hasMozNativeFullScreen) { 
    363364                                        document.mozCancelFullScreen(); 
    364365                                } 
    365                         }        
    366                          
     366                        } 
     367 
    367368                } 
    368                  
    369                  
     369 
     370 
    370371                // OS X 10.5 can't do this even if it says it can :( 
    371372                if (t.hasSemiNativeFullScreen && ua.match(/mac os x 10_5/i)) { 
    372373                        t.hasNativeFullScreen = false; 
    373374                        t.hasSemiNativeFullScreen = false; 
    374375                } 
    375                  
     376 
    376377        } 
    377378}; 
    378379mejs.MediaFeatures.init(); 
    379380 
    380  
    381381/* 
    382382extension methods to <video> or <audio> object to bring it into parity with PluginMediaElement (see below) 
    383383*/ 
    mejs.HtmlMediaElement = { 
    405405        // This can be a url string 
    406406        // or an array [{src:'file.mp4',type:'video/mp4'},{src:'file.webm',type:'video/webm'}] 
    407407        setSrc: function (url) { 
    408                  
     408 
    409409                // Fix for IE9 which can't set .src when there are <source> elements. Awesome, right? 
    410                 var  
     410                var 
    411411                        existingSources = this.getElementsByTagName('source'); 
    412412                while (existingSources.length > 0){ 
    413413                        this.removeChild(existingSources[0]); 
    414414                } 
    415          
     415 
    416416                if (typeof url == 'string') { 
    417417                        this.src = url; 
    418418                } else { 
    mejs.PluginMediaElement = function (pluginid, pluginType, mediaUrl) { 
    442442        this.pluginType = pluginType; 
    443443        this.src = mediaUrl; 
    444444        this.events = {}; 
     445        this.attributes = {}; 
    445446}; 
    446447 
    447448// JavaScript values and ExternalInterface methods that match HTML5 video properties methods 
    mejs.PluginMediaElement.prototype = { 
    490491                        } else { 
    491492                                this.pluginApi.loadMedia(); 
    492493                        } 
    493                          
     494 
    494495                        this.paused = false; 
    495496                } 
    496497        }, 
    mejs.PluginMediaElement.prototype = { 
    500501                                this.pluginApi.pauseVideo(); 
    501502                        } else { 
    502503                                this.pluginApi.pauseMedia(); 
    503                         }                        
    504                          
    505                          
     504                        } 
     505 
     506 
    506507                        this.paused = true; 
    507508                } 
    508509        }, 
    mejs.PluginMediaElement.prototype = { 
    512513                                this.pluginApi.stopVideo(); 
    513514                        } else { 
    514515                                this.pluginApi.stopMedia(); 
    515                         }        
     516                        } 
    516517                        this.paused = true; 
    517518                } 
    518519        }, 
    mejs.PluginMediaElement.prototype = { 
    532533                                for (j=0; j<pluginInfo.types.length; j++) { 
    533534                                        // find plugin that can play the type 
    534535                                        if (type == pluginInfo.types[j]) { 
    535                                                 return true; 
     536                                                return 'probably'; 
    536537                                        } 
    537538                                } 
    538539                        } 
    539540                } 
    540541 
    541                 return false; 
     542                return ''; 
    542543        }, 
    543          
     544 
    544545        positionFullscreenButton: function(x,y,visibleAndAbove) { 
    545546                if (this.pluginApi != null && this.pluginApi.positionFullscreenButton) { 
    546547                        this.pluginApi.positionFullscreenButton(x,y,visibleAndAbove); 
    547548                } 
    548549        }, 
    549          
     550 
    550551        hideFullscreenButton: function() { 
    551552                if (this.pluginApi != null && this.pluginApi.hideFullscreenButton) { 
    552553                        this.pluginApi.hideFullscreenButton(); 
    553                 }                
    554         },       
    555          
     554                } 
     555        }, 
     556 
    556557 
    557558        // custom methods since not all JavaScript implementations support get/set 
    558559 
    mejs.PluginMediaElement.prototype = { 
    582583                                this.pluginApi.seekTo(time); 
    583584                        } else { 
    584585                                this.pluginApi.setCurrentTime(time); 
    585                         }                                
    586                          
    587                          
    588                          
     586                        } 
     587 
     588 
     589 
    589590                        this.currentTime = time; 
    590591                } 
    591592        }, 
    mejs.PluginMediaElement.prototype = { 
    619620 
    620621        // additional non-HTML5 methods 
    621622        setVideoSize: function (width, height) { 
    622                  
     623 
    623624                //if (this.pluginType == 'flash' || this.pluginType == 'silverlight') { 
    624625                        if ( this.pluginElement.style) { 
    625626                                this.pluginElement.style.width = width + 'px'; 
    mejs.PluginMediaElement.prototype = { 
    636637                        this.pluginApi.setFullscreen(fullscreen); 
    637638                } 
    638639        }, 
    639          
     640 
    640641        enterFullScreen: function() { 
    641642                if (this.pluginApi != null && this.pluginApi.setFullscreen) { 
    642643                        this.setFullscreen(true); 
    643                 }                
    644                  
     644                } 
     645 
    645646        }, 
    646          
     647 
    647648        exitFullScreen: function() { 
    648649                if (this.pluginApi != null && this.pluginApi.setFullscreen) { 
    649650                        this.setFullscreen(false); 
    650651                } 
    651         },       
     652        }, 
    652653 
    653654        // start: fake events 
    654655        addEventListener: function (eventName, callback, bubble) { 
    mejs.PluginMediaElement.prototype = { 
    667668                        } 
    668669                } 
    669670                return false; 
    670         },       
     671        }, 
    671672        dispatchEvent: function (eventName) { 
    672673                var i, 
    673674                        args, 
    mejs.PluginMediaElement.prototype = { 
    681682                } 
    682683        }, 
    683684        // end: fake events 
    684          
     685 
    685686        // fake DOM attribute methods 
    686         attributes: {}, 
    687687        hasAttribute: function(name){ 
    688                 return (name in this.attributes);   
     688                return (name in this.attributes); 
    689689        }, 
    690690        removeAttribute: function(name){ 
    691691                delete this.attributes[name]; 
    mejs.PluginMediaElement.prototype = { 
    702702 
    703703        remove: function() { 
    704704                mejs.Utility.removeSwf(this.pluginElement.id); 
     705                mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id); 
    705706        } 
    706707}; 
    707708 
    mejs.MediaPluginBridge = { 
    716717                this.htmlMediaElements[id] = htmlMediaElement; 
    717718        }, 
    718719 
     720        unregisterPluginElement: function (id) { 
     721                delete this.pluginMediaElements[id]; 
     722                delete this.htmlMediaElements[id]; 
     723        }, 
     724 
    719725        // when Flash/Silverlight is ready, it calls out to this method 
    720726        initPlugin: function (id) { 
    721727 
    mejs.MediaPluginBridge = { 
    733739                                        pluginMediaElement.pluginApi = pluginMediaElement.pluginElement.Content.MediaElementJS; 
    734740                                        break; 
    735741                        } 
    736          
     742 
    737743                        if (pluginMediaElement.pluginApi != null && pluginMediaElement.success) { 
    738744                                pluginMediaElement.success(pluginMediaElement, htmlMediaElement); 
    739745                        } 
    mejs.MediaElementDefaults = { 
    815821        // overrides <video height> 
    816822        pluginHeight: -1, 
    817823        // additional plugin variables in 'key=value' form 
    818         pluginVars: [],  
     824        pluginVars: [], 
    819825        // rate in milliseconds for Flash and Silverlight to fire the timeupdate event 
    820826        // larger number is less accurate, but less strain on plugin->JavaScript bridge 
    821827        timerRate: 250, 
    mejs.HtmlMediaElementShim = { 
    856862                } 
    857863 
    858864                // clean up attributes 
    859                 src =           (typeof src == 'undefined'      || src === null || src == '') ? null : src;              
     865                src =           (typeof src == 'undefined'      || src === null || src == '') ? null : src; 
    860866                poster =        (typeof poster == 'undefined'   || poster === null) ? '' : poster; 
    861867                preload =       (typeof preload == 'undefined'  || preload === null || preload === 'false') ? 'none' : preload; 
    862868                autoplay =      !(typeof autoplay == 'undefined' || autoplay === null || autoplay === 'false'); 
    mejs.HtmlMediaElementShim = { 
    874880                                        htmlMediaElement.play(); 
    875881                                }, false); 
    876882                        } 
    877                  
     883 
    878884                        // add methods to native HTMLMediaElement 
    879885                        return this.updateNative(playback, options, autoplay, preload); 
    880886                } else if (playback.method !== '') { 
    881887                        // create plugin to mimic HTMLMediaElement 
    882                          
     888 
    883889                        return this.createPlugin( playback,  options, poster, autoplay, preload, controls); 
    884890                } else { 
    885891                        // boo, no HTML5, no Flash, no Silverlight. 
    886892                        this.createErrorMessage( playback, options, poster ); 
    887                          
     893 
    888894                        return this; 
    889895                } 
    890896        }, 
    891          
     897 
    892898        determinePlayback: function(htmlMediaElement, options, supportsMediaTag, isMediaTag, src) { 
    893899                var 
    894900                        mediaFiles = [], 
    mejs.HtmlMediaElementShim = { 
    904910                        pluginInfo, 
    905911                        dummy, 
    906912                        media; 
    907                          
     913 
    908914                // STEP 1: Get URL and type from <video src> or <source src> 
    909915 
    910916                // supplied type overrides <video type> and <source type> 
    911917                if (typeof options.type != 'undefined' && options.type !== '') { 
    912                          
     918 
    913919                        // accept either string or array of types 
    914920                        if (typeof options.type == 'string') { 
    915921                                mediaFiles.push({type:options.type, url:src}); 
    916922                        } else { 
    917                                  
     923 
    918924                                for (i=0; i<options.type.length; i++) { 
    919925                                        mediaFiles.push({type:options.type[i], url:src}); 
    920926                                } 
    mejs.HtmlMediaElementShim = { 
    941947                                } 
    942948                        } 
    943949                } 
    944                  
     950 
    945951                // in the case of dynamicly created players 
    946952                // check for audio types 
    947953                if (!isMediaTag && mediaFiles.length > 0 && mediaFiles[0].url !== null && this.getTypeFromFile(mediaFiles[0].url).indexOf('audio') > -1) { 
    948954                        result.isVideo = false; 
    949955                } 
    950                  
     956 
    951957 
    952958                // STEP 2: Test for playback method 
    953                  
     959 
    954960                // special case for Android which sadly doesn't implement the canPlayType function (always returns '') 
    955961                if (mejs.MediaFeatures.isBustedAndroid) { 
    956962                        htmlMediaElement.canPlayType = function(type) { 
    957963                                return (type.match(/video\/(mp4|m4v)/gi) !== null) ? 'maybe' : ''; 
    958964                        }; 
    959                 }                
    960                  
     965                } 
     966 
    961967 
    962968                // test for native playback first 
    963969                if (supportsMediaTag && (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'native')) { 
    964                                                  
     970 
    965971                        if (!isMediaTag) { 
    966972 
    967                                 // create a real HTML5 Media Element  
    968                                 dummy = document.createElement( result.isVideo ? 'video' : 'audio');                     
     973                                // create a real HTML5 Media Element 
     974                                dummy = document.createElement( result.isVideo ? 'video' : 'audio'); 
    969975                                htmlMediaElement.parentNode.insertBefore(dummy, htmlMediaElement); 
    970976                                htmlMediaElement.style.display = 'none'; 
    971                                  
     977 
    972978                                // use this one from now on 
    973979                                result.htmlMediaElement = htmlMediaElement = dummy; 
    974980                        } 
    975                                  
     981 
    976982                        for (i=0; i<mediaFiles.length; i++) { 
    977983                                // normal check 
    978                                 if (htmlMediaElement.canPlayType(mediaFiles[i].type).replace(/no/, '') !== ''  
     984                                if (htmlMediaElement.canPlayType(mediaFiles[i].type).replace(/no/, '') !== '' 
    979985                                        // special case for Mac/Safari 5.0.3 which answers '' to canPlayType('audio/mp3') but 'maybe' to canPlayType('audio/mpeg') 
    980986                                        || htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/mp3/,'mpeg')).replace(/no/, '') !== '') { 
    981987                                        result.method = 'native'; 
    982988                                        result.url = mediaFiles[i].url; 
    983989                                        break; 
    984990                                } 
    985                         }                        
    986                          
     991                        } 
     992 
    987993                        if (result.method === 'native') { 
    988994                                if (result.url !== null) { 
    989995                                        htmlMediaElement.src = result.url; 
    990996                                } 
    991                          
     997 
    992998                                // if `auto_plugin` mode, then cache the native result but try plugins. 
    993999                                if (options.mode !== 'auto_plugin') { 
    9941000                                        return result; 
    mejs.HtmlMediaElementShim = { 
    10051011                                for (j=0; j<options.plugins.length; j++) { 
    10061012 
    10071013                                        pluginName = options.plugins[j]; 
    1008                          
     1014 
    10091015                                        // test version of plugin (for future features) 
    1010                                         pluginVersions = mejs.plugins[pluginName];                               
    1011                                          
     1016                                        pluginVersions = mejs.plugins[pluginName]; 
     1017 
    10121018                                        for (k=0; k<pluginVersions.length; k++) { 
    10131019                                                pluginInfo = pluginVersions[k]; 
    1014                                          
     1020 
    10151021                                                // test if user has the correct plugin version 
    1016                                                  
     1022 
    10171023                                                // for youtube/vimeo 
    1018                                                 if (pluginInfo.version == null ||  
    1019                                                          
     1024                                                if (pluginInfo.version == null || 
     1025 
    10201026                                                        mejs.PluginDetector.hasPluginVersion(pluginName, pluginInfo.version)) { 
    10211027 
    10221028                                                        // test for plugin playback types 
    mejs.HtmlMediaElementShim = { 
    10331039                                } 
    10341040                        } 
    10351041                } 
    1036                  
     1042 
    10371043                // at this point, being in 'auto_plugin' mode implies that we tried plugins but failed. 
    10381044                // if we have native support then return that. 
    10391045                if (options.mode === 'auto_plugin' && result.method === 'native') { 
    mejs.HtmlMediaElementShim = { 
    10521058                var ext; 
    10531059 
    10541060                // if no type is supplied, fake it with the extension 
    1055                 if (url && !type) {              
     1061                if (url && !type) { 
    10561062                        return this.getTypeFromFile(url); 
    10571063                } else { 
    10581064                        // only return the mime part of the type in case the attribute contains the codec 
    10591065                        // see http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#the-source-element 
    10601066                        // `video/mp4; codecs="avc1.42E01E, mp4a.40.2"` becomes `video/mp4` 
    1061                          
     1067 
    10621068                        if (type && ~type.indexOf(';')) { 
    1063                                 return type.substr(0, type.indexOf(';'));  
     1069                                return type.substr(0, type.indexOf(';')); 
    10641070                        } else { 
    10651071                                return type; 
    10661072                        } 
    10671073                } 
    10681074        }, 
    1069          
     1075 
    10701076        getTypeFromFile: function(url) { 
    10711077                url = url.split('?')[0]; 
    10721078                var ext = url.substring(url.lastIndexOf('.') + 1); 
    10731079                return (/(mp4|m4v|ogg|ogv|webm|webmv|flv|wmv|mpeg|mov)/gi.test(ext) ? 'video' : 'audio') + '/' + this.getTypeFromExtension(ext); 
    10741080        }, 
    1075          
     1081 
    10761082        getTypeFromExtension: function(ext) { 
    1077                  
     1083 
    10781084                switch (ext) { 
    10791085                        case 'mp4': 
    10801086                        case 'm4v': 
    10811087                                return 'mp4'; 
    10821088                        case 'webm': 
    10831089                        case 'webma': 
    1084                         case 'webmv':    
     1090                        case 'webmv': 
    10851091                                return 'webm'; 
    10861092                        case 'ogg': 
    10871093                        case 'oga': 
    1088                         case 'ogv':      
     1094                        case 'ogv': 
    10891095                                return 'ogg'; 
    10901096                        default: 
    10911097                                return ext; 
    mejs.HtmlMediaElementShim = { 
    10931099        }, 
    10941100 
    10951101        createErrorMessage: function(playback, options, poster) { 
    1096                 var  
     1102                var 
    10971103                        htmlMediaElement = playback.htmlMediaElement, 
    10981104                        errorContainer = document.createElement('div'); 
    1099                          
     1105 
    11001106                errorContainer.className = 'me-cannotplay'; 
    11011107 
    11021108                try { 
    mejs.HtmlMediaElementShim = { 
    11151121        }, 
    11161122 
    11171123        createPlugin:function(playback, options, poster, autoplay, preload, controls) { 
    1118                 var  
     1124                var 
    11191125                        htmlMediaElement = playback.htmlMediaElement, 
    11201126                        width = 1, 
    11211127                        height = 1, 
    mejs.HtmlMediaElementShim = { 
    11501156                if (playback.isVideo) { 
    11511157                        width = (options.videoWidth > 0) ? options.videoWidth : (htmlMediaElement.getAttribute('width') !== null) ? htmlMediaElement.getAttribute('width') : options.defaultVideoWidth; 
    11521158                        height = (options.videoHeight > 0) ? options.videoHeight : (htmlMediaElement.getAttribute('height') !== null) ? htmlMediaElement.getAttribute('height') : options.defaultVideoHeight; 
    1153                  
     1159 
    11541160                        // in case of '%' make sure it's encoded 
    11551161                        width = mejs.Utility.encodeUrl(width); 
    11561162                        height = mejs.Utility.encodeUrl(height); 
    1157                  
     1163 
    11581164                } else { 
    11591165                        if (options.enablePluginDebug) { 
    11601166                                width = 320; 
    mejs.HtmlMediaElementShim = { 
    11691175                // add container (must be added to DOM before inserting HTML for IE) 
    11701176                container.className = 'me-plugin'; 
    11711177                container.id = pluginid + '_container'; 
    1172                  
     1178 
    11731179                if (playback.isVideo) { 
    11741180                                htmlMediaElement.parentNode.insertBefore(container, htmlMediaElement); 
    11751181                } else { 
    mejs.HtmlMediaElementShim = { 
    12061212                } 
    12071213                if (options.pluginVars) { 
    12081214                        initVars = initVars.concat(options.pluginVars); 
    1209                 }                
     1215                } 
    12101216 
    12111217                switch (playback.method) { 
    12121218                        case 'silverlight': 
    12131219                                container.innerHTML = 
    1214 '<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="' + pluginid + '" name="' + pluginid + '" width="' + width + '" height="' + height + '">' + 
     1220'<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="' + pluginid + '" name="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' + 
    12151221'<param name="initParams" value="' + initVars.join(',') + '" />' + 
    12161222'<param name="windowless" value="true" />' + 
    12171223'<param name="background" value="black" />' + 
    mejs.HtmlMediaElementShim = { 
    12281234                                        container.appendChild(specialIEContainer); 
    12291235                                        specialIEContainer.outerHTML = 
    12301236'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' + 
    1231 'id="' + pluginid + '" width="' + width + '" height="' + height + '">' + 
     1237'id="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' + 
    12321238'<param name="movie" value="' + options.pluginPath + options.flashName + '?x=' + (new Date()) + '" />' + 
    12331239'<param name="flashvars" value="' + initVars.join('&amp;') + '" />' + 
    12341240'<param name="quality" value="high" />' + 
    mejs.HtmlMediaElementShim = { 
    12531259'src="' + options.pluginPath + options.flashName + '" ' + 
    12541260'flashvars="' + initVars.join('&') + '" ' + 
    12551261'width="' + width + '" ' + 
    1256 'height="' + height + '"></embed>'; 
     1262'height="' + height + '" ' + 
     1263'class="mejs-shim"></embed>'; 
    12571264                                } 
    12581265                                break; 
    1259                          
     1266 
    12601267                        case 'youtube': 
    1261                          
    1262                                  
     1268 
     1269 
    12631270                                var 
    12641271                                        videoId = playback.url.substr(playback.url.lastIndexOf('=')+1); 
    12651272                                        youtubeSettings = { 
    mejs.HtmlMediaElementShim = { 
    12691276                                                pluginId: pluginid, 
    12701277                                                videoId: videoId, 
    12711278                                                height: height, 
    1272                                                 width: width     
    1273                                         };                               
    1274                                  
     1279                                                width: width 
     1280                                        }; 
     1281 
    12751282                                if (mejs.PluginDetector.hasPluginVersion('flash', [10,0,0]) ) { 
    12761283                                        mejs.YouTubeApi.createFlash(youtubeSettings); 
    12771284                                } else { 
    1278                                         mejs.YouTubeApi.enqueueIframe(youtubeSettings);          
     1285                                        mejs.YouTubeApi.enqueueIframe(youtubeSettings); 
    12791286                                } 
    1280                                  
     1287 
    12811288                                break; 
    1282                          
     1289 
    12831290                        // DEMO Code. Does NOT work. 
    12841291                        case 'vimeo': 
    12851292                                //console.log('vimeoid'); 
    1286                                  
     1293 
    12871294                                pluginMediaElement.vimeoid = playback.url.substr(playback.url.lastIndexOf('/')+1); 
    1288                                  
    1289                                 container.innerHTML ='<iframe src="http://player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?portrait=0&byline=0&title=0" width="' + width +'" height="' + height +'" frameborder="0"></iframe>'; 
    1290                                  
     1295 
     1296                                container.innerHTML ='<iframe src="http://player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?portrait=0&byline=0&title=0" width="' + width +'" height="' + height +'" frameborder="0" class="mejs-shim"></iframe>'; 
     1297 
    12911298                                /* 
    12921299                                container.innerHTML = 
    1293                                         '<object width="' + width + '" height="' + height + '">' + 
     1300                                        '<object width="' + width + '" height="' + height + '" class="mejs-shim">' + 
    12941301                                                '<param name="allowfullscreen" value="true" />' + 
    12951302                                                '<param name="allowscriptaccess" value="always" />' + 
    1296                                                 '<param name="flashvars" value="api=1" />' +  
     1303                                                '<param name="flashvars" value="api=1" />' + 
    12971304                                                '<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=' + pluginMediaElement.vimeoid  + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" />' + 
    1298                                                 '<embed src="//vimeo.com/moogaloop.swf?api=1&amp;clip_id=' + pluginMediaElement.vimeoid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="' + width + '" height="' + height + '"></embed>' + 
     1305                                                '<embed src="//vimeo.com/moogaloop.swf?api=1&amp;clip_id=' + pluginMediaElement.vimeoid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="' + width + '" height="' + height + '" class="mejs-shim"></embed>' + 
    12991306                                        '</object>'; 
    13001307                                        */ 
    1301                                                                          
    1302                                 break;                   
     1308 
     1309                                break; 
    13031310                } 
    13041311                // hide original element 
    13051312                htmlMediaElement.style.display = 'none'; 
    13061313 
    13071314                // FYI: options.success will be fired by the MediaPluginBridge 
    1308                  
     1315 
    13091316                return pluginMediaElement; 
    13101317        }, 
    13111318 
    13121319        updateNative: function(playback, options, autoplay, preload) { 
    1313                  
     1320 
    13141321                var htmlMediaElement = playback.htmlMediaElement, 
    13151322                        m; 
    1316                  
    1317                  
     1323 
     1324 
    13181325                // add methods to video object to bring it into parity with Flash Object 
    13191326                for (m in mejs.HtmlMediaElement) { 
    13201327                        htmlMediaElement[m] = mejs.HtmlMediaElement[m]; 
    mejs.HtmlMediaElementShim = { 
    13231330                /* 
    13241331                Chrome now supports preload="none" 
    13251332                if (mejs.MediaFeatures.isChrome) { 
    1326                  
     1333 
    13271334                        // special case to enforce preload attribute (Chrome doesn't respect this) 
    13281335                        if (preload === 'none' && !autoplay) { 
    1329                          
     1336 
    13301337                                // forces the browser to stop loading (note: fails in IE9) 
    13311338                                htmlMediaElement.src = ''; 
    13321339                                htmlMediaElement.load(); 
    mejs.HtmlMediaElementShim = { 
    13501357 
    13511358                // fire success code 
    13521359                options.success(htmlMediaElement, htmlMediaElement); 
    1353                  
     1360 
    13541361                return htmlMediaElement; 
    13551362        } 
    13561363}; 
    mejs.YouTubeApi = { 
    13761383        }, 
    13771384        iframeQueue: [], 
    13781385        enqueueIframe: function(yt) { 
    1379                  
     1386 
    13801387                if (this.isLoaded) { 
    13811388                        this.createIframe(yt); 
    13821389                } else { 
    mejs.YouTubeApi = { 
    13851392                } 
    13861393        }, 
    13871394        createIframe: function(settings) { 
    1388                  
     1395 
    13891396                var 
    1390                 pluginMediaElement = settings.pluginMediaElement,        
     1397                pluginMediaElement = settings.pluginMediaElement, 
    13911398                player = new YT.Player(settings.containerId, { 
    13921399                        height: settings.height, 
    13931400                        width: settings.width, 
    mejs.YouTubeApi = { 
    13951402                        playerVars: {controls:0}, 
    13961403                        events: { 
    13971404                                'onReady': function() { 
    1398                                          
     1405 
    13991406                                        // hook up iframe object to MEjs 
    14001407                                        settings.pluginMediaElement.pluginApi = player; 
    1401                                          
     1408 
    14021409                                        // init mejs 
    14031410                                        mejs.MediaPluginBridge.initPlugin(settings.pluginId); 
    1404                                          
     1411 
    14051412                                        // create timer 
    14061413                                        setInterval(function() { 
    14071414                                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate'); 
    1408                                         }, 250);                                         
     1415                                        }, 250); 
    14091416                                }, 
    14101417                                'onStateChange': function(e) { 
    1411                                          
     1418 
    14121419                                        mejs.YouTubeApi.handleStateChange(e.data, player, pluginMediaElement); 
    1413                                          
     1420 
    14141421                                } 
    14151422                        } 
    14161423                }); 
    14171424        }, 
    1418          
     1425 
    14191426        createEvent: function (player, pluginMediaElement, eventName) { 
    14201427                var obj = { 
    14211428                        type: eventName, 
    mejs.YouTubeApi = { 
    14231430                }; 
    14241431 
    14251432                if (player && player.getDuration) { 
    1426                          
    1427                         // time  
     1433 
     1434                        // time 
    14281435                        pluginMediaElement.currentTime = obj.currentTime = player.getCurrentTime(); 
    14291436                        pluginMediaElement.duration = obj.duration = player.getDuration(); 
    1430                          
     1437 
    14311438                        // state 
    14321439                        obj.paused = pluginMediaElement.paused; 
    1433                         obj.ended = pluginMediaElement.ended;                    
    1434                          
     1440                        obj.ended = pluginMediaElement.ended; 
     1441 
    14351442                        // sound 
    14361443                        obj.muted = player.isMuted(); 
    14371444                        obj.volume = player.getVolume() / 100; 
    1438                          
     1445 
    14391446                        // progress 
    14401447                        obj.bytesTotal = player.getVideoBytesTotal(); 
    14411448                        obj.bufferedBytes = player.getVideoBytesLoaded(); 
    1442                          
     1449 
    14431450                        // fake the W3C buffered TimeRange 
    14441451                        var bufferedTime = obj.bufferedBytes / obj.bytesTotal * obj.duration; 
    1445                          
     1452 
    14461453                        obj.target.buffered = obj.buffered = { 
    14471454                                start: function(index) { 
    14481455                                        return 0; 
    mejs.YouTubeApi = { 
    14521459                                }, 
    14531460                                length: 1 
    14541461                        }; 
    1455                          
     1462 
    14561463                } 
    1457                  
     1464 
    14581465                // send event up the chain 
    14591466                pluginMediaElement.dispatchEvent(obj.type, obj); 
    1460         },       
    1461          
     1467        }, 
     1468 
    14621469        iFrameReady: function() { 
    1463                  
     1470 
    14641471                this.isLoaded = true; 
    14651472                this.isIframeLoaded = true; 
    1466                  
     1473 
    14671474                while (this.iframeQueue.length > 0) { 
    14681475                        var settings = this.iframeQueue.pop(); 
    14691476                        this.createIframe(settings); 
    1470                 }        
     1477                } 
    14711478        }, 
    1472          
     1479 
    14731480        // FLASH! 
    14741481        flashPlayers: {}, 
    14751482        createFlash: function(settings) { 
    1476                  
     1483 
    14771484                this.flashPlayers[settings.pluginId] = settings; 
    1478                  
     1485 
    14791486                /* 
    14801487                settings.container.innerHTML = 
    14811488                        '<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="//www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=' + settings.pluginId  + '&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0" ' + 
    1482                                 'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; ">' + 
     1489                                'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' + 
    14831490                                '<param name="allowScriptAccess" value="always">' + 
    14841491                                '<param name="wmode" value="transparent">' + 
    14851492                        '</object>'; 
    mejs.YouTubeApi = { 
    14871494 
    14881495                var specialIEContainer, 
    14891496                        youtubeUrl = 'http://www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=' + settings.pluginId  + '&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0'; 
    1490                          
     1497 
    14911498                if (mejs.MediaFeatures.isIE) { 
    1492                          
     1499 
    14931500                        specialIEContainer = document.createElement('div'); 
    14941501                        settings.container.appendChild(specialIEContainer); 
    14951502                        specialIEContainer.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' + 
    1496 'id="' + settings.pluginId + '" width="' + settings.width + '" height="' + settings.height + '">' + 
     1503'id="' + settings.pluginId + '" width="' + settings.width + '" height="' + settings.height + '" class="mejs-shim">' + 
    14971504        '<param name="movie" value="' + youtubeUrl + '" />' + 
    14981505        '<param name="wmode" value="transparent" />' + 
    14991506        '<param name="allowScriptAccess" value="always" />' + 
    mejs.YouTubeApi = { 
    15021509                } else { 
    15031510                settings.container.innerHTML = 
    15041511                        '<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="' + youtubeUrl + '" ' + 
    1505                                 'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; ">' + 
     1512                                'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' + 
    15061513                                '<param name="allowScriptAccess" value="always">' + 
    15071514                                '<param name="wmode" value="transparent">' + 
    15081515                        '</object>'; 
    1509                 }                
    1510                  
     1516                } 
     1517 
    15111518        }, 
    1512          
     1519 
    15131520        flashReady: function(id) { 
    15141521                var 
    15151522                        settings = this.flashPlayers[id], 
    15161523                        player = document.getElementById(id), 
    15171524                        pluginMediaElement = settings.pluginMediaElement; 
    1518                  
    1519                 // hook up and return to MediaELementPlayer.success      
    1520                 pluginMediaElement.pluginApi =  
     1525 
     1526                // hook up and return to MediaELementPlayer.success 
     1527                pluginMediaElement.pluginApi = 
    15211528                pluginMediaElement.pluginElement = player; 
    15221529                mejs.MediaPluginBridge.initPlugin(id); 
    1523                  
     1530 
    15241531                // load the youtube video 
    15251532                player.cueVideoById(settings.videoId); 
    1526                  
    1527                 var callbackName = settings.containerId + '_callback' 
    1528                  
     1533 
     1534                var callbackName = settings.containerId + '_callback'; 
     1535 
    15291536                window[callbackName] = function(e) { 
    15301537                        mejs.YouTubeApi.handleStateChange(e, player, pluginMediaElement); 
    15311538                } 
    1532                  
     1539 
    15331540                player.addEventListener('onStateChange', callbackName); 
    1534                  
     1541 
    15351542                setInterval(function() { 
    15361543                        mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate'); 
    15371544                }, 250); 
    15381545        }, 
    1539          
     1546 
    15401547        handleStateChange: function(youTubeState, player, pluginMediaElement) { 
    15411548                switch (youTubeState) { 
    15421549                        case -1: // not started 
    mejs.YouTubeApi = { 
    15521559                                break; 
    15531560                        case 1: 
    15541561                                pluginMediaElement.paused = false; 
    1555                                 pluginMediaElement.ended = false;                                
     1562                                pluginMediaElement.ended = false; 
    15561563                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'play'); 
    15571564                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'playing'); 
    15581565                                break; 
    15591566                        case 2: 
    15601567                                pluginMediaElement.paused = true; 
    1561                                 pluginMediaElement.ended = false;                                
     1568                                pluginMediaElement.ended = false; 
    15621569                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'pause'); 
    15631570                                break; 
    15641571                        case 3: // buffering 
    mejs.YouTubeApi = { 
    15661573                                break; 
    15671574                        case 5: 
    15681575                                // cued? 
    1569                                 break;                                           
    1570                          
    1571                 }                        
    1572                  
     1576                                break; 
     1577 
     1578                } 
     1579 
    15731580        } 
    15741581} 
    15751582// IFRAME 
    window.MediaElement = mejs.MediaElement; 
    18141821 * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper) 
    18151822 * 
    18161823 * Copyright 2010-2012, John Dyer (http://j.hn/) 
    1817  * Dual licensed under the MIT or GPL Version 2 licenses. 
     1824 * License: MIT 
    18181825 * 
    18191826 */ 
    18201827if (typeof jQuery != 'undefined') { 
    if (typeof jQuery != 'undefined') { 
    18411848                // default if the user doesn't specify 
    18421849                defaultAudioHeight: 30, 
    18431850 
    1844                 // default amount to move back when back key is pressed          
     1851                // default amount to move back when back key is pressed 
    18451852                defaultSeekBackwardInterval: function(media) { 
    18461853                        return (media.duration * 0.05); 
    1847                 },               
    1848                 // default amount to move forward when forward key is pressed                            
     1854                }, 
     1855                // default amount to move forward when forward key is pressed 
    18491856                defaultSeekForwardInterval: function(media) { 
    18501857                        return (media.duration * 0.05); 
    1851                 },               
    1852                  
     1858                }, 
     1859 
    18531860                // width of audio player 
    18541861                audioWidth: -1, 
    18551862                // height of audio player 
    1856                 audioHeight: -1,                 
     1863                audioHeight: -1, 
    18571864                // initial volume when the player starts (overrided by user cookie) 
    18581865                startVolume: 0.8, 
    18591866                // useful for <audio> player loops 
    18601867                loop: false, 
     1868                // rewind to beginning when media ends 
     1869                autoRewind: true, 
    18611870                // resize to media dimensions 
    18621871                enableAutosize: true, 
    18631872                // forces the hour marker (##:00:00) 
    if (typeof jQuery != 'undefined') { 
    18671876                showTimecodeFrameCount: false, 
    18681877                // used when showTimecodeFrameCount is set to true 
    18691878                framesPerSecond: 25, 
    1870                  
     1879 
    18711880                // automatically calculate the width of the progress bar based on the sizes of other elements 
    18721881                autosizeProgress : true, 
    18731882                // Hide controls when playing and mouse is not over the video 
    18741883                alwaysShowControls: false, 
     1884                // Display the video control 
     1885                hideVideoControlsOnLoad: false, 
     1886        // Enable click video element to toggle play/pause 
     1887        clickToPlayPause: true, 
    18751888                // force iPad's native controls 
    18761889                iPadUseNativeControls: false, 
    18771890                // force iPhone's native controls 
    1878                 iPhoneUseNativeControls: false,  
     1891                iPhoneUseNativeControls: false, 
    18791892                // force Android's native controls 
    1880                 AndroidUseNativeControls: false,                         
     1893                AndroidUseNativeControls: false, 
    18811894                // features to show 
    18821895                features: ['playpause','current','progress','duration','tracks','volume','fullscreen'], 
    18831896                // only for dynamic 
    18841897                isVideo: true, 
    1885                  
     1898 
    18861899                // turns keyboard support on and off for this instance 
    18871900                enableKeyboard: true, 
    1888                  
     1901 
    18891902                // whenthis player starts, it will pause other players 
    18901903                pauseOtherPlayers: true, 
    1891                  
     1904 
    18921905                // array of keyboard actions such as play pause 
    18931906                keyActions: [ 
    18941907                                { 
    if (typeof jQuery != 'undefined') { 
    18981911                                                          ], 
    18991912                                                action: function(player, media) { 
    19001913                                                                if (media.paused || media.ended) { 
    1901                                                                                 media.play();    
     1914                                                                                media.play(); 
    19021915                                                                } else { 
    19031916                                                                                media.pause(); 
    1904                                                                 }                                                                                
     1917                                                                } 
    19051918                                                } 
    19061919                                }, 
    19071920                                { 
    if (typeof jQuery != 'undefined') { 
    19291942                                                                                                player.showControls(); 
    19301943                                                                                                player.startControlsTimer(); 
    19311944                                                                                } 
    1932                                                                                  
     1945 
    19331946                                                                                // 5% 
    19341947                                                                                var newTime = Math.max(media.currentTime - player.options.defaultSeekBackwardInterval(media), 0); 
    19351948                                                                                media.setCurrentTime(newTime); 
    if (typeof jQuery != 'undefined') { 
    19401953                                                keys: [ 
    19411954                                                                39, // RIGHT 
    19421955                                                                228 // Google TV forward 
    1943                                                 ],  
     1956                                                ], 
    19441957                                                action: function(player, media) { 
    19451958                                                                if (!isNaN(media.duration) && media.duration > 0) { 
    19461959                                                                                if (player.isVideo) { 
    19471960                                                                                                player.showControls(); 
    19481961                                                                                                player.startControlsTimer(); 
    19491962                                                                                } 
    1950                                                                                  
     1963 
    19511964                                                                                // 5% 
    1952                                                                                 var newTime = Math.min(media.currentTime + player.options.defaultSeekForwardInterval(media), media.duration);                                                                            
     1965                                                                                var newTime = Math.min(media.currentTime + player.options.defaultSeekForwardInterval(media), media.duration); 
    19531966                                                                                media.setCurrentTime(newTime); 
    19541967                                                                } 
    19551968                                                } 
    if (typeof jQuery != 'undefined') { 
    19651978                                                                                } 
    19661979                                                                } 
    19671980                                                } 
    1968                                 }                                        
    1969                 ]                
     1981                                } 
     1982                ] 
    19701983        }; 
    19711984 
    19721985        mejs.mepIndex = 0; 
    1973          
    1974         mejs.players = []; 
     1986 
     1987        mejs.players = {}; 
    19751988 
    19761989        // wraps a MediaElement object in player controls 
    19771990        mejs.MediaElementPlayer = function(node, o) { 
    19781991                // enforce object, even without "new" (via John Resig) 
    19791992                if ( !(this instanceof mejs.MediaElementPlayer) ) { 
    19801993                        return new mejs.MediaElementPlayer(node, o); 
    1981                 }  
     1994                } 
    19821995 
    19831996                var t = this; 
    1984                  
     1997 
    19851998                // these will be reset after the MediaElement.success fires 
    19861999                t.$media = t.$node = $(node); 
    1987                 t.node = t.media = t.$media[0];          
    1988                  
     2000                t.node = t.media = t.$media[0]; 
     2001 
    19892002                // check for existing player 
    19902003                if (typeof t.node.player != 'undefined') { 
    19912004                        return t.node.player; 
    if (typeof jQuery != 'undefined') { 
    19932006                        // attach player to DOM node for reference 
    19942007                        t.node.player = t; 
    19952008                } 
    1996                                  
    1997                                  
     2009 
     2010 
    19982011                // try to get options from data-mejsoptions 
    19992012                if (typeof o == 'undefined') { 
    2000                         o = t.$node.data('mejsoptions');         
     2013                        o = t.$node.data('mejsoptions'); 
    20012014                } 
    2002                          
     2015 
    20032016                // extend default options 
    20042017                t.options = $.extend({},mejs.MepDefaults,o); 
    2005                  
     2018 
     2019                // unique ID 
     2020                t.id = 'mep_' + mejs.mepIndex++; 
     2021 
    20062022                // add to player array (for focus events) 
    2007                 mejs.players.push(t); 
    2008                  
     2023                mejs.players[t.id] = t; 
     2024 
    20092025                // start up 
    20102026                t.init(); 
    20112027 
    if (typeof jQuery != 'undefined') { 
    20142030 
    20152031        // actual player 
    20162032        mejs.MediaElementPlayer.prototype = { 
    2017                  
     2033 
    20182034                hasFocus: false, 
    2019                  
     2035 
    20202036                controlsAreVisible: true, 
    2021                  
     2037 
    20222038                init: function() { 
    20232039 
    20242040                        var 
    if (typeof jQuery != 'undefined') { 
    20302046                                        error: function(e) { t.handleError(e);} 
    20312047                                }), 
    20322048                                tagName = t.media.tagName.toLowerCase(); 
    2033                  
     2049 
    20342050                        t.isDynamic = (tagName !== 'audio' && tagName !== 'video'); 
    2035                          
    2036                         if (t.isDynamic) {       
    2037                                 // get video from src or href?                           
    2038                                 t.isVideo = t.options.isVideo;                                           
     2051 
     2052                        if (t.isDynamic) { 
     2053                                // get video from src or href? 
     2054                                t.isVideo = t.options.isVideo; 
    20392055                        } else { 
    20402056                                t.isVideo = (tagName !== 'audio' && t.options.isVideo); 
    20412057                        } 
    2042                  
    2043                         // use native controls in iPad, iPhone, and Android      
     2058 
     2059                        // use native controls in iPad, iPhone, and Android 
    20442060                        if ((mf.isiPad && t.options.iPadUseNativeControls) || (mf.isiPhone && t.options.iPhoneUseNativeControls)) { 
    2045                                  
     2061 
    20462062                                // add controls and stop 
    20472063                                t.$media.attr('controls', 'controls'); 
    20482064 
    if (typeof jQuery != 'undefined') { 
    20552071                                        t.media.load(); 
    20562072                                        t.media.play(); 
    20572073                                } 
    2058                                          
    2059                         } else if (mf.isAndroid && t.AndroidUseNativeControls) { 
    2060                                  
     2074 
     2075                        } else if (mf.isAndroid && t.options.AndroidUseNativeControls) { 
     2076 
    20612077                                // leave default player 
    20622078 
    20632079                        } else { 
    20642080 
    20652081                                // DESKTOP: use MediaElementPlayer controls 
    2066                                  
    2067                                 // remove native controls                        
    2068                                 t.$media.removeAttr('controls');                                         
    2069                                  
    2070                                 // unique ID 
    2071                                 t.id = 'mep_' + mejs.mepIndex++; 
     2082 
     2083                                // remove native controls 
     2084                                t.$media.removeAttr('controls'); 
    20722085 
    20732086                                // build container 
    20742087                                t.container = 
    if (typeof jQuery != 'undefined') { 
    20812094                                                '</div>' + 
    20822095                                        '</div>') 
    20832096                                        .addClass(t.$media[0].className) 
    2084                                         .insertBefore(t.$media);         
    2085                                          
     2097                                        .insertBefore(t.$media); 
     2098 
    20862099                                // add classes for user and content 
    20872100                                t.container.addClass( 
    20882101                                        (mf.isAndroid ? 'mejs-android ' : '') + 
    if (typeof jQuery != 'undefined') { 
    20902103                                        (mf.isiPad ? 'mejs-ipad ' : '') + 
    20912104                                        (mf.isiPhone ? 'mejs-iphone ' : '') + 
    20922105                                        (t.isVideo ? 'mejs-video ' : 'mejs-audio ') 
    2093                                 );       
    2094                                          
     2106                                ); 
     2107 
    20952108 
    20962109                                // move the <video/video> tag into the right spot 
    20972110                                if (mf.isiOS) { 
    2098                                  
     2111 
    20992112                                        // sadly, you can't move nodes in iOS, so we have to destroy and recreate it! 
    21002113                                        var $newMedia = t.$media.clone(); 
    2101                                          
     2114 
    21022115                                        t.container.find('.mejs-mediaelement').append($newMedia); 
    2103                                          
     2116 
    21042117                                        t.$media.remove(); 
    21052118                                        t.$node = t.$media = $newMedia; 
    21062119                                        t.node = t.media = $newMedia[0] 
    2107                                          
     2120 
    21082121                                } else { 
    2109                                          
     2122 
    21102123                                        // normal way of moving it into place (doesn't work on iOS) 
    21112124                                        t.container.find('.mejs-mediaelement').append(t.$media); 
    21122125                                } 
    2113                                  
     2126 
    21142127                                // find parts 
    21152128                                t.controls = t.container.find('.mejs-controls'); 
    21162129                                t.layers = t.container.find('.mejs-layers'); 
    21172130 
    21182131                                // determine the size 
    2119                                  
     2132 
    21202133                                /* size priority: 
    2121                                         (1) videoWidth (forced),  
     2134                                        (1) videoWidth (forced), 
    21222135                                        (2) style="width;height;" 
    21232136                                        (3) width attribute, 
    21242137                                        (4) defaultVideoWidth (for unspecified cases) 
    21252138                                */ 
    2126                                  
     2139 
    21272140                                var tagType = (t.isVideo ? 'video' : 'audio'), 
    21282141                                        capsTagName = tagType.substring(0,1).toUpperCase() + tagType.substring(1); 
    2129                                          
    2130                                  
     2142 
     2143 
    21312144                                if (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) { 
    21322145                                        t.width = t.options[tagType + 'Width']; 
    21332146                                } else if (t.media.style.width !== '' && t.media.style.width !== null) { 
    2134                                         t.width = t.media.style.width;                                           
     2147                                        t.width = t.media.style.width; 
    21352148                                } else if (t.media.getAttribute('width') !== null) { 
    21362149                                        t.width = t.$media.attr('width'); 
    21372150                                } else { 
    21382151                                        t.width = t.options['default' + capsTagName + 'Width']; 
    21392152                                } 
    2140                                  
     2153 
    21412154                                if (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) { 
    21422155                                        t.height = t.options[tagType + 'Height']; 
    21432156                                } else if (t.media.style.height !== '' && t.media.style.height !== null) { 
    21442157                                        t.height = t.media.style.height; 
    21452158                                } else if (t.$media[0].getAttribute('height') !== null) { 
    2146                                         t.height = t.$media.attr('height');      
     2159                                        t.height = t.$media.attr('height'); 
    21472160                                } else { 
    21482161                                        t.height = t.options['default' + capsTagName + 'Height']; 
    21492162                                } 
    21502163 
    21512164                                // set the size, while we wait for the plugins to load below 
    21522165                                t.setPlayerSize(t.width, t.height); 
    2153                                  
     2166 
    21542167                                // create MediaElementShim 
    21552168                                meOptions.pluginWidth = t.height; 
    2156                                 meOptions.pluginHeight = t.width;                                
     2169                                meOptions.pluginHeight = t.width; 
    21572170                        } 
    2158                          
    2159                          
     2171 
     2172 
    21602173 
    21612174                        // create MediaElement shim 
    21622175                        mejs.MediaElement(t.$media[0], meOptions); 
     2176 
     2177                        // controls are shown when loaded 
     2178                        t.container.trigger('controlsshown'); 
    21632179                }, 
    2164                  
     2180 
    21652181                showControls: function(doAnimation) { 
    21662182                        var t = this; 
    2167                          
     2183 
    21682184                        doAnimation = typeof doAnimation == 'undefined' || doAnimation; 
    2169                          
     2185 
    21702186                        if (t.controlsAreVisible) 
    21712187                                return; 
    2172                          
     2188 
    21732189                        if (doAnimation) { 
    21742190                                t.controls 
    21752191                                        .css('visibility','visible') 
    2176                                         .stop(true, true).fadeIn(200, function() {t.controlsAreVisible = true;});        
    2177          
     2192                                        .stop(true, true).fadeIn(200, function() { 
     2193                                              t.controlsAreVisible = true; 
     2194                                              t.container.trigger('controlsshown'); 
     2195                                        }); 
     2196 
    21782197                                // any additional controls people might add and want to hide 
    21792198                                t.container.find('.mejs-control') 
    21802199                                        .css('visibility','visible') 
    2181                                         .stop(true, true).fadeIn(200, function() {t.controlsAreVisible = true;});        
    2182                                          
     2200                                        .stop(true, true).fadeIn(200, function() {t.controlsAreVisible = true;}); 
     2201 
    21832202                        } else { 
    21842203                                t.controls 
    21852204                                        .css('visibility','visible') 
    21862205                                        .css('display','block'); 
    2187          
     2206 
    21882207                                // any additional controls people might add and want to hide 
    21892208                                t.container.find('.mejs-control') 
    21902209                                        .css('visibility','visible') 
    21912210                                        .css('display','block'); 
    2192                                          
     2211 
    21932212                                t.controlsAreVisible = true; 
     2213                                t.container.trigger('controlsshown'); 
    21942214                        } 
    2195                          
     2215 
    21962216                        t.setControlsSize(); 
    2197                          
     2217 
    21982218                }, 
    21992219 
    22002220                hideControls: function(doAnimation) { 
    22012221                        var t = this; 
    2202                          
     2222 
    22032223                        doAnimation = typeof doAnimation == 'undefined' || doAnimation; 
    2204                          
     2224 
    22052225                        if (!t.controlsAreVisible) 
    22062226                                return; 
    2207                          
     2227 
    22082228                        if (doAnimation) { 
    22092229                                // fade out main controls 
    22102230                                t.controls.stop(true, true).fadeOut(200, function() { 
    22112231                                        $(this) 
    22122232                                                .css('visibility','hidden') 
    22132233                                                .css('display','block'); 
    2214                                                  
     2234 
    22152235                                        t.controlsAreVisible = false; 
    2216                                 });      
    2217          
     2236                                        t.container.trigger('controlshidden'); 
     2237                                }); 
     2238 
    22182239                                // any additional controls people might add and want to hide 
    22192240                                t.container.find('.mejs-control').stop(true, true).fadeOut(200, function() { 
    22202241                                        $(this) 
    22212242                                                .css('visibility','hidden') 
    22222243                                                .css('display','block'); 
    2223                                 });      
     2244                                }); 
    22242245                        } else { 
    2225                                  
     2246 
    22262247                                // hide main controls 
    22272248                                t.controls 
    22282249                                        .css('visibility','hidden') 
    2229                                         .css('display','block');                 
    2230                                  
     2250                                        .css('display','block'); 
     2251 
    22312252                                // hide others 
    22322253                                t.container.find('.mejs-control') 
    22332254                                        .css('visibility','hidden') 
    22342255                                        .css('display','block'); 
    2235                                          
     2256 
    22362257                                t.controlsAreVisible = false; 
     2258                                t.container.trigger('controlshidden'); 
    22372259                        } 
    2238                 },               
     2260                }, 
    22392261 
    22402262                controlsTimer: null, 
    22412263 
    22422264                startControlsTimer: function(timeout) { 
    22432265 
    22442266                        var t = this; 
    2245                          
     2267 
    22462268                        timeout = typeof timeout != 'undefined' ? timeout : 1500; 
    22472269 
    22482270                        t.killControlsTimer('start'); 
    if (typeof jQuery != 'undefined') { 
    22632285                                delete t.controlsTimer; 
    22642286                                t.controlsTimer = null; 
    22652287                        } 
    2266                 },               
    2267                  
     2288                }, 
     2289 
    22682290                controlsEnabled: true, 
    2269                  
     2291 
    22702292                disableControls: function() { 
    22712293                        var t= this; 
    2272                          
     2294 
    22732295                        t.killControlsTimer(); 
    22742296                        t.hideControls(false); 
    22752297                        this.controlsEnabled = false; 
    22762298                }, 
    2277                  
     2299 
    22782300                enableControls: function() { 
    22792301                        var t= this; 
    2280                          
     2302 
    22812303                        t.showControls(false); 
    2282                          
     2304 
    22832305                        t.controlsEnabled = true; 
    2284                 },               
    2285                  
     2306                }, 
     2307 
    22862308 
    22872309                // Sets up all controls and events 
    2288                 meReady: function(media, domNode) {                      
    2289                  
    2290                  
     2310                meReady: function(media, domNode) { 
     2311 
     2312 
    22912313                        var t = this, 
    22922314                                mf = mejs.MediaFeatures, 
    22932315                                autoplayAttr = domNode.getAttribute('autoplay'), 
    if (typeof jQuery != 'undefined') { 
    22992321                        if (t.created) 
    23002322                                return; 
    23012323                        else 
    2302                                 t.created = true;                        
     2324                                t.created = true; 
    23032325 
    23042326                        t.media = media; 
    23052327                        t.domNode = domNode; 
    2306                          
    2307                         if (!(mf.isAndroid && t.options.AndroidUseNativeControls) && !(mf.isiPad && t.options.iPadUseNativeControls) && !(mf.isiPhone && t.options.iPhoneUseNativeControls)) {                           
    2308                                  
     2328 
     2329                        if (!(mf.isAndroid && t.options.AndroidUseNativeControls) && !(mf.isiPad && t.options.iPadUseNativeControls) && !(mf.isiPhone && t.options.iPhoneUseNativeControls)) { 
     2330 
    23092331                                // two built in features 
    23102332                                t.buildposter(t, t.controls, t.layers, t.media); 
    23112333                                t.buildkeyboard(t, t.controls, t.layers, t.media); 
    if (typeof jQuery != 'undefined') { 
    23302352                                } 
    23312353 
    23322354                                t.container.trigger('controlsready'); 
    2333                                  
     2355 
    23342356                                // reset all layers and controls 
    23352357                                t.setPlayerSize(t.width, t.height); 
    23362358                                t.setControlsSize(); 
    2337                                  
     2359 
    23382360 
    23392361                                // controls fade 
    23402362                                if (t.isVideo) { 
    2341                                  
     2363 
    23422364                                        if (mejs.MediaFeatures.hasTouch) { 
    2343                                                  
     2365 
    23442366                                                // for touch devices (iOS, Android) 
    23452367                                                // show/hide without animation on touch 
    2346                                                  
     2368 
    23472369                                                t.$media.bind('touchstart', function() { 
    2348                                                          
    2349                                                          
     2370 
     2371 
    23502372                                                        // toggle controls 
    23512373                                                        if (t.controlsAreVisible) { 
    23522374                                                                t.hideControls(false); 
    if (typeof jQuery != 'undefined') { 
    23552377                                                                        t.showControls(false); 
    23562378                                                                } 
    23572379                                                        } 
    2358                                                 });                                      
    2359                                          
     2380                                                }); 
     2381 
    23602382                                        } else { 
    23612383            // click to play/pause 
    23622384            t.media.addEventListener('click', function() { 
    2363               if (t.media.paused) { 
    2364                 t.media.play(); 
    2365               } else { 
    2366                 t.media.pause(); 
     2385              if (t.options.clickToPlayPause) { 
     2386                  if (t.media.paused) { 
     2387                    t.media.play(); 
     2388                  } else { 
     2389                    t.media.pause(); 
     2390                  } 
    23672391              } 
    23682392            }); 
    2369                                          
     2393 
    23702394                                                // show/hide controls 
    23712395                                                t.container 
    23722396                                                        .bind('mouseenter mouseover', function () { 
    23732397                                                                if (t.controlsEnabled) { 
    2374                                                                         if (!t.options.alwaysShowControls) {                                                             
     2398                                                                        if (!t.options.alwaysShowControls) { 
    23752399                                                                                t.killControlsTimer('enter'); 
    23762400                                                                                t.showControls(); 
    2377                                                                                 t.startControlsTimer(2500);              
     2401                                                                                t.startControlsTimer(2500); 
    23782402                                                                        } 
    23792403                                                                } 
    23802404                                                        }) 
    if (typeof jQuery != 'undefined') { 
    23922416                                                        .bind('mouseleave', function () { 
    23932417                                                                if (t.controlsEnabled) { 
    23942418                                                                        if (!t.media.paused && !t.options.alwaysShowControls) { 
    2395                                                                                 t.startControlsTimer(1000);                                                              
     2419                                                                                t.startControlsTimer(1000); 
    23962420                                                                        } 
    23972421                                                                } 
    23982422                                                        }); 
    23992423                                        } 
    2400                                          
     2424 
     2425                                        if(t.options.hideVideoControlsOnLoad) { 
     2426                                                t.hideControls(false); 
     2427                                        } 
     2428 
    24012429                                        // check for autoplay 
    24022430                                        if (autoplay && !t.options.alwaysShowControls) { 
    24032431                                                t.hideControls(); 
    if (typeof jQuery != 'undefined') { 
    24162444                                                }, false); 
    24172445                                        } 
    24182446                                } 
    2419                                  
     2447 
    24202448                                // EVENTS 
    24212449 
    24222450                                // FOCUS: when a video starts playing, it takes focus from other players (possibily pausing them) 
    24232451                                media.addEventListener('play', function() { 
    2424                                                  
     2452                                                var playerIndex; 
     2453 
    24252454                                                // go through all other players 
    2426                                                 for (var i=0, il=mejs.players.length; i<il; i++) { 
    2427                                                         var p = mejs.players[i]; 
     2455                                                for (playerIndex in mejs.players) { 
     2456                                                        var p = mejs.players[playerIndex]; 
    24282457                                                        if (p.id != t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended) { 
    24292458                                                                p.pause(); 
    24302459                                                        } 
    24312460                                                        p.hasFocus = false; 
    24322461                                                } 
    2433                                                  
     2462 
    24342463                                                t.hasFocus = true; 
    24352464                                },false); 
    2436                                                                  
     2465 
    24372466 
    24382467                                // ended for all 
    24392468                                t.media.addEventListener('ended', function (e) { 
    2440                                         try{ 
    2441                                                 t.media.setCurrentTime(0); 
    2442                                         } catch (exp) { 
    2443                                                  
     2469                                        if(t.options.autoRewind) { 
     2470                                                try{ 
     2471                                                        t.media.setCurrentTime(0); 
     2472                                                } catch (exp) { 
     2473 
     2474                                                } 
    24442475                                        } 
    24452476                                        t.media.pause(); 
    2446                                          
     2477 
    24472478                                        if (t.setProgressRail) 
    24482479                                                t.setProgressRail(); 
    24492480                                        if (t.setCurrentRail) 
    2450                                                 t.setCurrentRail();                                              
     2481                                                t.setCurrentRail(); 
    24512482 
    24522483                                        if (t.options.loop) { 
    24532484                                                t.media.play(); 
    if (typeof jQuery != 'undefined') { 
    24552486                                                t.showControls(); 
    24562487                                        } 
    24572488                                }, false); 
    2458                                  
     2489 
    24592490                                // resize on the first play 
    24602491                                t.media.addEventListener('loadedmetadata', function(e) { 
    24612492                                        if (t.updateDuration) { 
    if (typeof jQuery != 'undefined') { 
    24642495                                        if (t.updateCurrent) { 
    24652496                                                t.updateCurrent(); 
    24662497                                        } 
    2467                                          
     2498 
    24682499                                        if (!t.isFullScreen) { 
    24692500                                                t.setPlayerSize(t.width, t.height); 
    24702501                                                t.setControlsSize(); 
    if (typeof jQuery != 'undefined') { 
    24772508                                        t.setPlayerSize(t.width, t.height); 
    24782509                                        t.setControlsSize(); 
    24792510                                }, 50); 
    2480                                  
     2511 
    24812512                                // adjust controls whenever window sizes (used to be in fullscreen only) 
    2482                                 $(window).resize(function() { 
    2483                                          
    2484                                         // don't resize for fullscreen mode                              
     2513                                t.globalBind('resize', function() { 
     2514 
     2515                                        // don't resize for fullscreen mode 
    24852516                                        if ( !(t.isFullScreen || (mejs.MediaFeatures.hasTrueNativeFullScreen && document.webkitIsFullScreen)) ) { 
    24862517                                                t.setPlayerSize(t.width, t.height); 
    24872518                                        } 
    2488                                          
     2519 
    24892520                                        // always adjust controls 
    24902521                                        t.setControlsSize(); 
    2491                                 });                              
     2522                                }); 
    24922523 
    24932524                                // TEMP: needs to be moved somewhere else 
    24942525                                if (t.media.pluginType == 'youtube') { 
    2495                                         t.container.find('.mejs-overlay-play').hide();   
     2526                                        t.container.find('.mejs-overlay-play').hide(); 
    24962527                                } 
    24972528                        } 
    2498                          
     2529 
    24992530                        // force autoplay for HTML5 
    25002531                        if (autoplay && media.pluginType == 'native') { 
    25012532                                media.load(); 
    if (typeof jQuery != 'undefined') { 
    25042535 
    25052536 
    25062537                        if (t.options.success) { 
    2507                                  
     2538 
    25082539                                if (typeof t.options.success == 'string') { 
    25092540                                                window[t.options.success](t.media, t.domNode, t); 
    25102541                                } else { 
    if (typeof jQuery != 'undefined') { 
    25152546 
    25162547                handleError: function(e) { 
    25172548                        var t = this; 
    2518                          
     2549 
    25192550                        t.controls.hide(); 
    2520                  
     2551 
    25212552                        // Tell user that the file cannot be played 
    25222553                        if (t.options.error) { 
    25232554                                t.options.error(e); 
    if (typeof jQuery != 'undefined') { 
    25292560 
    25302561                        if (typeof width != 'undefined') 
    25312562                                t.width = width; 
    2532                                  
     2563 
    25332564                        if (typeof height != 'undefined') 
    25342565                                t.height = height; 
    25352566 
    25362567      // detect 100% mode - use currentStyle for IE since css() doesn't return percentages 
    25372568      if (t.height.toString().indexOf('%') > 0 || t.$node.css('max-width') === '100%' || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%')) { 
    2538                          
     2569 
    25392570                                // do we have the native dimensions yet? 
    2540                                 var  
     2571                                var 
    25412572                                        nativeWidth = t.isVideo ? ((t.media.videoWidth && t.media.videoWidth > 0) ? t.media.videoWidth : t.options.defaultVideoWidth) : t.options.defaultAudioWidth, 
    25422573                                        nativeHeight = t.isVideo ? ((t.media.videoHeight && t.media.videoHeight > 0) ? t.media.videoHeight : t.options.defaultVideoHeight) : t.options.defaultAudioHeight, 
    25432574                                        parentWidth = t.container.parent().closest(':visible').width(), 
    2544                                         newHeight = parseInt(parentWidth * nativeHeight/nativeWidth, 10); 
    2545                                          
     2575                                        newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight; 
     2576 
    25462577                                if (t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) { 
    25472578                                        parentWidth = $(window).width(); 
    25482579                                        newHeight = $(window).height(); 
    25492580                                } 
    2550                                  
    2551                                 if ( newHeight != 0 ) { 
     2581 
     2582                                if ( newHeight != 0 && parentWidth != 0 ) { 
    25522583                                        // set outer container size 
    25532584                                        t.container 
    25542585                                                .width(parentWidth) 
    25552586                                                .height(newHeight); 
    2556                                                  
    2557                                         // set native <video> or <audio> 
    2558                                         t.$media 
    2559                                                 .width('100%') 
    2560                                                 .height('100%'); 
    2561                                                  
    2562                                         // set shims 
    2563                                         t.container.find('object, embed, iframe') 
     2587 
     2588                                        // set native <video> or <audio> and shims 
     2589                                        t.$media.add(t.container.find('.mejs-shim')) 
    25642590                                                .width('100%') 
    25652591                                                .height('100%'); 
    2566                                                  
    2567                                         // if shim is ready, send the size to the embeded plugin         
     2592 
     2593                                        // if shim is ready, send the size to the embeded plugin 
    25682594                                        if (t.isVideo) { 
    25692595                                                if (t.media.setVideoSize) { 
    25702596                                                        t.media.setVideoSize(parentWidth, newHeight); 
    25712597                                                } 
    25722598                                        } 
    2573                                          
     2599 
    25742600                                        // set the layers 
    25752601                                        t.layers.children('.mejs-layer') 
    25762602                                                .width('100%') 
    25772603                                                .height('100%'); 
    25782604                                } 
    2579                          
    2580                          
     2605 
     2606 
    25812607                        } else { 
    25822608 
    25832609                                t.container 
    25842610                                        .width(t.width) 
    25852611                                        .height(t.height); 
    2586          
     2612 
    25872613                                t.layers.children('.mejs-layer') 
    25882614                                        .width(t.width) 
    25892615                                        .height(t.height); 
    2590                                          
     2616 
    25912617                        } 
    25922618                }, 
    25932619 
    if (typeof jQuery != 'undefined') { 
    26002626                                current = t.controls.find('.mejs-time-current'), 
    26012627                                loaded = t.controls.find('.mejs-time-loaded'), 
    26022628                                others = rail.siblings(); 
    2603                          
     2629 
    26042630 
    26052631                        // allow the size to come from custom CSS 
    26062632                        if (t.options && !t.options.autosizeProgress) { 
    2607                                 // Also, frontends devs can be more flexible  
     2633                                // Also, frontends devs can be more flexible 
    26082634                                // due the opportunity of absolute positioning. 
    26092635                                railWidth = parseInt(rail.css('width')); 
    26102636                        } 
    2611                          
     2637 
    26122638                        // attempt to autosize 
    26132639                        if (railWidth === 0 || !railWidth) { 
    2614                                  
     2640 
    26152641                                // find the size of all the other controls besides the rail 
    26162642                                others.each(function() { 
    2617                                         if ($(this).css('position') != 'absolute') { 
     2643                                        var $this = $(this); 
     2644                                        if ($this.css('position') != 'absolute' && $this.is(':visible')) { 
    26182645                                                usedWidth += $(this).outerWidth(true); 
    26192646                                        } 
    26202647                                }); 
    2621                                  
     2648 
    26222649                                // fit the rail into the remaining space 
    26232650                                railWidth = t.controls.width() - usedWidth - (rail.outerWidth(true) - rail.width()); 
    26242651                        } 
    if (typeof jQuery != 'undefined') { 
    26272654                        rail.width(railWidth); 
    26282655                        // dark space 
    26292656                        total.width(railWidth - (total.outerWidth(true) - total.width())); 
    2630                          
     2657 
    26312658                        if (t.setProgressRail) 
    26322659                                t.setProgressRail(); 
    26332660                        if (t.setCurrentRail) 
    2634                                 t.setCurrentRail();                              
     2661                                t.setCurrentRail(); 
    26352662                }, 
    26362663 
    26372664 
    26382665                buildposter: function(player, controls, layers, media) { 
    26392666                        var t = this, 
    2640                                 poster =  
     2667                                poster = 
    26412668                                $('<div class="mejs-poster mejs-layer">' + 
    26422669                                '</div>') 
    26432670                                        .appendTo(layers), 
    if (typeof jQuery != 'undefined') { 
    26462673                        // prioriy goes to option (this is useful if you need to support iOS 3.x (iOS completely fails with poster) 
    26472674                        if (player.options.poster !== '') { 
    26482675                                posterUrl = player.options.poster; 
    2649                         }        
    2650                                  
     2676                        } 
     2677 
    26512678                        // second, try the real poster 
    26522679                        if (posterUrl !== '' && posterUrl != null) { 
    26532680                                t.setPoster(posterUrl); 
    if (typeof jQuery != 'undefined') { 
    26592686                                poster.hide(); 
    26602687                        }, false); 
    26612688                }, 
    2662                  
     2689 
    26632690                setPoster: function(url) { 
    26642691                        var t = this, 
    26652692                                posterDiv = t.container.find('.mejs-poster'), 
    26662693                                posterImg = posterDiv.find('img'); 
    2667                                  
     2694 
    26682695                        if (posterImg.length == 0) { 
    26692696                                posterImg = $('<img width="100%" height="100%" />').appendTo(posterDiv); 
    2670                         }        
    2671                          
     2697                        } 
     2698 
    26722699                        posterImg.attr('src', url); 
    26732700                }, 
    26742701 
    26752702                buildoverlays: function(player, controls, layers, media) { 
     2703            var t = this; 
    26762704                        if (!player.isVideo) 
    26772705                                return; 
    26782706 
    2679                         var  
    2680                         loading =  
     2707                        var 
     2708                        loading = 
    26812709                                $('<div class="mejs-overlay mejs-layer">'+ 
    26822710                                        '<div class="mejs-overlay-loading"><span></span></div>'+ 
    26832711                                '</div>') 
    26842712                                .hide() // start out hidden 
    26852713                                .appendTo(layers), 
    2686                         error =  
     2714                        error = 
    26872715                                $('<div class="mejs-overlay mejs-layer">'+ 
    26882716                                        '<div class="mejs-overlay-error"></div>'+ 
    26892717                                '</div>') 
    26902718                                .hide() // start out hidden 
    26912719                                .appendTo(layers), 
    26922720                        // this needs to come last so it's on top 
    2693                         bigPlay =  
     2721                        bigPlay = 
    26942722                                $('<div class="mejs-overlay mejs-layer mejs-overlay-play">'+ 
    26952723                                        '<div class="mejs-overlay-button"></div>'+ 
    26962724                                '</div>') 
    26972725                                .appendTo(layers) 
    26982726                                .click(function() { 
    2699                                         if (media.paused) { 
    2700                                                 media.play(); 
    2701                                         } else { 
    2702                                                 media.pause(); 
    2703                                         } 
     2727                    if (t.options.clickToPlayPause) { 
     2728                        if (media.paused) { 
     2729                            media.play(); 
     2730                        } else { 
     2731                            media.pause(); 
     2732                        } 
     2733                    } 
    27042734                                }); 
    2705                          
     2735 
    27062736                        /* 
    27072737                        if (mejs.MediaFeatures.isiOS || mejs.MediaFeatures.isAndroid) { 
    27082738                                bigPlay.remove(); 
    27092739                                loading.remove(); 
    27102740                        } 
    27112741                        */ 
    2712          
     2742 
    27132743 
    27142744                        // show/hide big play button 
    27152745                        media.addEventListener('play',function() { 
    if (typeof jQuery != 'undefined') { 
    27172747                                loading.hide(); 
    27182748                                controls.find('.mejs-time-buffering').hide(); 
    27192749                                error.hide(); 
    2720                         }, false);       
    2721                          
     2750                        }, false); 
     2751 
    27222752                        media.addEventListener('playing', function() { 
    27232753                                bigPlay.hide(); 
    27242754                                loading.hide(); 
    27252755                                controls.find('.mejs-time-buffering').hide(); 
    2726                                 error.hide();                    
     2756                                error.hide(); 
    27272757                        }, false); 
    27282758 
    27292759                        media.addEventListener('seeking', function() { 
    if (typeof jQuery != 'undefined') { 
    27352765                                loading.hide(); 
    27362766                                controls.find('.mejs-time-buffering').hide(); 
    27372767                        }, false); 
    2738          
     2768 
    27392769                        media.addEventListener('pause',function() { 
    27402770                                if (!mejs.MediaFeatures.isiPhone) { 
    27412771                                        bigPlay.show(); 
    27422772                                } 
    27432773                        }, false); 
    2744                          
     2774 
    27452775                        media.addEventListener('waiting', function() { 
    2746                                 loading.show();  
     2776                                loading.show(); 
    27472777                                controls.find('.mejs-time-buffering').show(); 
    2748                         }, false);                       
    2749                          
    2750                          
    2751                         // show/hide loading                     
     2778                        }, false); 
     2779 
     2780 
     2781                        // show/hide loading 
    27522782                        media.addEventListener('loadeddata',function() { 
    27532783                                // for some reason Chrome is firing this event 
    27542784                                //if (mejs.MediaFeatures.isChrome && media.getAttribute && media.getAttribute('preload') === 'none') 
    27552785                                //      return; 
    2756                                          
     2786 
    27572787                                loading.show(); 
    27582788                                controls.find('.mejs-time-buffering').show(); 
    2759                         }, false);       
     2789                        }, false); 
    27602790                        media.addEventListener('canplay',function() { 
    27612791                                loading.hide(); 
    27622792                                controls.find('.mejs-time-buffering').hide(); 
    2763                         }, false);       
     2793                        }, false); 
    27642794 
    27652795                        // error handling 
    27662796                        media.addEventListener('error',function() { 
    if (typeof jQuery != 'undefined') { 
    27682798                                controls.find('.mejs-time-buffering').hide(); 
    27692799                                error.show(); 
    27702800                                error.find('mejs-overlay-error').html("Error loading this resource"); 
    2771                         }, false);                               
     2801                        }, false); 
    27722802                }, 
    2773                  
     2803 
    27742804                buildkeyboard: function(player, controls, layers, media) { 
    27752805 
    27762806                                var t = this; 
    2777                                  
     2807 
    27782808                                // listen for key presses 
    2779                                 $(document).keydown(function(e) { 
    2780                                                  
     2809                                t.globalBind('keydown', function(e) { 
     2810 
    27812811                                                if (player.hasFocus && player.options.enableKeyboard) { 
    2782                                                                                  
     2812 
    27832813                                                                // find a matching key 
    27842814                                                                for (var i=0, il=player.options.keyActions.length; i<il; i++) { 
    27852815                                                                                var keyAction = player.options.keyActions[i]; 
    2786                                                                                  
     2816 
    27872817                                                                                for (var j=0, jl=keyAction.keys.length; j<jl; j++) { 
    27882818                                                                                                if (e.keyCode == keyAction.keys[j]) { 
    27892819                                                                                                                e.preventDefault(); 
    27902820                                                                                                                keyAction.action(player, media, e.keyCode); 
    27912821                                                                                                                return false; 
    2792                                                                                                 }                                                                                                
     2822                                                                                                } 
    27932823                                                                                } 
    27942824                                                                } 
    27952825                                                } 
    2796                                                  
     2826 
    27972827                                                return true; 
    27982828                                }); 
    2799                                  
     2829 
    28002830                                // check if someone clicked outside a player region, then kill its focus 
    2801                                 $(document).click(function(event) { 
     2831                                t.globalBind('click', function(event) { 
    28022832                                                if ($(event.target).closest('.mejs-container').length == 0) { 
    28032833                                                                player.hasFocus = false; 
    28042834                                                } 
    28052835                                }); 
    2806                          
     2836 
    28072837                }, 
    28082838 
    28092839                findTracks: function() { 
    if (typeof jQuery != 'undefined') { 
    28132843                        // store for use by plugins 
    28142844                        t.tracks = []; 
    28152845                        tracktags.each(function(index, track) { 
    2816                                  
     2846 
    28172847                                track = $(track); 
    2818                                  
     2848 
    28192849                                t.tracks.push({ 
    2820                                         srclang: track.attr('srclang').toLowerCase(), 
     2850                                        srclang: (track.attr('srclang')) ? track.attr('srclang').toLowerCase() : '', 
    28212851                                        src: track.attr('src'), 
    28222852                                        kind: track.attr('kind'), 
    28232853                                        label: track.attr('label') || '', 
    if (typeof jQuery != 'undefined') { 
    28592889                        this.media.setSrc(src); 
    28602890                }, 
    28612891                remove: function() { 
    2862                         var t = this; 
    2863                          
    2864                         if (t.media.pluginType === 'flash') { 
    2865                                 t.media.remove(); 
    2866                         } else if (t.media.pluginType === 'native') { 
     2892                        var t = this, featureIndex, feature; 
     2893 
     2894                        // invoke features cleanup 
     2895                        for (featureIndex in t.options.features) { 
     2896                                feature = t.options.features[featureIndex]; 
     2897                                if (t['clean' + feature]) { 
     2898                                        try { 
     2899                                                t['clean' + feature](t); 
     2900                                        } catch (e) { 
     2901                                                // TODO: report control error 
     2902                                                //throw e; 
     2903                                                //console.log('error building ' + feature); 
     2904                                                //console.log(e); 
     2905                                        } 
     2906                                } 
     2907                        } 
     2908 
     2909                        if (t.media.pluginType === 'native') { 
    28672910                                t.$media.prop('controls', true); 
     2911                        } else { 
     2912                                t.media.remove(); 
    28682913                        } 
    2869                          
     2914 
    28702915                        // grab video and put it back in place 
    28712916                        if (!t.isDynamic) { 
    2872                                 t.$node.insertBefore(t.container) 
     2917                                if (t.media.pluginType === 'native') { 
     2918                                        // detach events from the video 
     2919                                        // TODO: detach event listeners better than this; 
     2920                                        //       also detach ONLY the events attached by this plugin! 
     2921                                        //t.$node.clone().insertBefore(t.container); 
     2922                                        //t.$node.remove(); 
     2923                                } 
     2924                                /*else*/ t.$node.insertBefore(t.container) 
    28732925                        } 
    2874                          
     2926 
     2927                        // Remove the player from the mejs.players array so that pauseOtherPlayers doesn't blow up when trying to pause a non existance flash api. 
     2928                        mejs.players.splice( $.inArray( t, mejs.players ), 1); 
     2929 
    28752930                        t.container.remove(); 
     2931                        t.globalUnbind(); 
     2932                        delete t.node.player; 
     2933                        delete mejs.players[t.id]; 
    28762934                } 
    28772935        }; 
    28782936 
     2937        (function(){ 
     2938                var rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/; 
     2939 
     2940                function splitEvents(events, id) { 
     2941                        // add player ID as an event namespace so it's easier to unbind them all later 
     2942                        var ret = {d: [], w: []}; 
     2943                        $.each((events || '').split(' '), function(k, v){ 
     2944                                ret[rwindow.test(v) ? 'w' : 'd'].push(v + '.' + id); 
     2945                        }); 
     2946                        ret.d = ret.d.join(' '); 
     2947                        ret.w = ret.w.join(' '); 
     2948                        return ret; 
     2949                } 
     2950 
     2951                mejs.MediaElementPlayer.prototype.globalBind = function(events, data, callback) { 
     2952                        var t = this; 
     2953                        events = splitEvents(events, t.id); 
     2954                        if (events.d) $(document).bind(events.d, data, callback); 
     2955                        if (events.w) $(window).bind(events.w, data, callback); 
     2956                }; 
     2957 
     2958                mejs.MediaElementPlayer.prototype.globalUnbind = function(events, callback) { 
     2959                        var t = this; 
     2960                        events = splitEvents(events, t.id); 
     2961                        if (events.d) $(document).unbind(events.d, callback); 
     2962                        if (events.w) $(window).unbind(events.w, callback); 
     2963                }; 
     2964        })(); 
     2965 
    28792966        // turn into jQuery plugin 
    28802967        if (typeof jQuery != 'undefined') { 
    28812968                jQuery.fn.mediaelementplayer = function (options) { 
    2882                         return this.each(function () { 
    2883                                 new mejs.MediaElementPlayer(this, options); 
    2884                         }); 
     2969                        if (options === false) { 
     2970                                this.each(function () { 
     2971                                        var player = jQuery(this).data('mediaelementplayer'); 
     2972                                        if (player) { 
     2973                                                player.remove(); 
     2974                                        } 
     2975                                        jQuery(this).removeData('mediaelementplayer'); 
     2976                                }); 
     2977                        } 
     2978                        else { 
     2979                                this.each(function () { 
     2980                                        jQuery(this).data('mediaelementplayer', new mejs.MediaElementPlayer(this, options)); 
     2981                                }); 
     2982                        } 
     2983                        return this; 
    28852984                }; 
    28862985        } 
    2887          
     2986 
    28882987        $(document).ready(function() { 
    28892988                // auto enable using JSON attribute 
    28902989                $('.mejs-player').mediaelementplayer(); 
    28912990        }); 
    2892          
     2991 
    28932992        // push out to window 
    28942993        window.MediaElementPlayer = mejs.MediaElementPlayer; 
    28952994 
    if (typeof jQuery != 'undefined') { 
    29043003        // PLAY/pause BUTTON 
    29053004        $.extend(MediaElementPlayer.prototype, { 
    29063005                buildplaypause: function(player, controls, layers, media) { 
    2907                         var  
     3006                        var 
    29083007                                t = this, 
    2909                                 play =  
     3008                                play = 
    29103009                                $('<div class="mejs-button mejs-playpause-button mejs-play" >' + 
    29113010                                        '<button type="button" aria-controls="' + t.id + '" title="' + t.options.playpauseText + '"></button>' + 
    29123011                                '</div>') 
    29133012                                .appendTo(controls) 
    29143013                                .click(function(e) { 
    29153014                                        e.preventDefault(); 
    2916                                  
     3015 
    29173016                                        if (media.paused) { 
    29183017                                                media.play(); 
    29193018                                        } else { 
    29203019                                                media.pause(); 
    29213020                                        } 
    2922                                          
     3021 
    29233022                                        return false; 
    29243023                                }); 
    29253024 
    if (typeof jQuery != 'undefined') { 
    29393038                        }, false); 
    29403039                } 
    29413040        }); 
    2942          
     3041 
    29433042})(mejs.$); 
    29443043(function($) { 
    29453044 
    if (typeof jQuery != 'undefined') { 
    29513050        $.extend(MediaElementPlayer.prototype, { 
    29523051                buildstop: function(player, controls, layers, media) { 
    29533052                        var t = this, 
    2954                                 stop =  
     3053                                stop = 
    29553054                                $('<div class="mejs-button mejs-stop-button mejs-stop">' + 
    29563055                                        '<button type="button" aria-controls="' + t.id + '" title="' + t.options.stopText + '"></button>' + 
    29573056                                '</div>') 
    if (typeof jQuery != 'undefined') { 
    29663065                                                controls.find('.mejs-time-current').width('0px'); 
    29673066                                                controls.find('.mejs-time-handle').css('left', '0px'); 
    29683067                                                controls.find('.mejs-time-float-current').html( mejs.Utility.secondsToTimeCode(0) ); 
    2969                                                 controls.find('.mejs-currenttime').html( mejs.Utility.secondsToTimeCode(0) );                                    
     3068                                                controls.find('.mejs-currenttime').html( mejs.Utility.secondsToTimeCode(0) ); 
    29703069                                                layers.find('.mejs-poster').show(); 
    29713070                                        } 
    29723071                                }); 
    29733072                } 
    29743073        }); 
    2975          
     3074 
    29763075})(mejs.$); 
    29773076(function($) { 
    29783077        // progress/loaded bar 
    if (typeof jQuery != 'undefined') { 
    29853084                                        '<span class="mejs-time-loaded"></span>'+ 
    29863085                                        '<span class="mejs-time-current"></span>'+ 
    29873086                                        '<span class="mejs-time-handle"></span>'+ 
    2988                                         '<span class="mejs-time-float">' +  
    2989                                                 '<span class="mejs-time-float-current">00:00</span>' +  
    2990                                                 '<span class="mejs-time-float-corner"></span>' +  
     3087                                        '<span class="mejs-time-float">' + 
     3088                                                '<span class="mejs-time-float-current">00:00</span>' + 
     3089                                                '<span class="mejs-time-float-corner"></span>' + 
    29913090                                        '</span>'+ 
    29923091                                '</span>'+ 
    29933092                        '</div>') 
    29943093                                .appendTo(controls); 
    29953094                                controls.find('.mejs-time-buffering').hide(); 
    29963095 
    2997                         var  
     3096                        var 
    29983097                                t = this, 
    29993098                                total = controls.find('.mejs-time-total'), 
    30003099                                loaded  = controls.find('.mejs-time-loaded'), 
    if (typeof jQuery != 'undefined') { 
    30093108                                                width = total.outerWidth(true), 
    30103109                                                percentage = 0, 
    30113110                                                newTime = 0, 
    3012                                                 pos = x - offset.left; 
     3111                                                pos = 0; 
    30133112 
    30143113 
    3015                                         if (x > offset.left && x <= width + offset.left && media.duration) { 
    3016                                                 percentage = ((x - offset.left) / width); 
     3114                                        if (media.duration) { 
     3115                                                if (x < offset.left) { 
     3116                                                        x = offset.left; 
     3117                                                } else if (x > width + offset.left) { 
     3118                                                        x = width + offset.left; 
     3119                                                } 
     3120 
     3121                                                pos = x - offset.left; 
     3122                                                percentage = (pos / width); 
    30173123                                                newTime = (percentage <= 0.02) ? 0 : percentage * media.duration; 
    30183124 
    30193125                                                // seek to where the mouse is 
    3020                                                 if (mouseIsDown) { 
     3126                                                if (mouseIsDown && newTime !== media.currentTime) { 
    30213127                                                        media.setCurrentTime(newTime); 
    30223128                                                } 
    30233129 
    if (typeof jQuery != 'undefined') { 
    30403146                                        if (e.which === 1) { 
    30413147                                                mouseIsDown = true; 
    30423148                                                handleMouseMove(e); 
    3043                                                 $(document) 
    3044                                                         .bind('mousemove.dur', function(e) { 
    3045                                                                 handleMouseMove(e); 
    3046                                                         }) 
    3047                                                         .bind('mouseup.dur', function (e) { 
    3048                                                                 mouseIsDown = false; 
    3049                                                                 timefloat.hide(); 
    3050                                                                 $(document).unbind('.dur'); 
    3051                                                         }); 
     3149                                                t.globalBind('mousemove.dur', function(e) { 
     3150                                                        handleMouseMove(e); 
     3151                                                }); 
     3152                                                t.globalBind('mouseup.dur', function (e) { 
     3153                                                        mouseIsDown = false; 
     3154                                                        timefloat.hide(); 
     3155                                                        t.globalUnbind('.dur'); 
     3156                                                }); 
    30523157                                                return false; 
    30533158                                        } 
    30543159                                }) 
    30553160                                .bind('mouseenter', function(e) { 
    30563161                                        mouseIsOver = true; 
    3057                                         $(document).bind('mousemove.dur', function(e) { 
     3162                                        t.globalBind('mousemove.dur', function(e) { 
    30583163                                                handleMouseMove(e); 
    30593164                                        }); 
    30603165                                        if (!mejs.MediaFeatures.hasTouch) { 
    if (typeof jQuery != 'undefined') { 
    30643169                                .bind('mouseleave',function(e) { 
    30653170                                        mouseIsOver = false; 
    30663171                                        if (!mouseIsDown) { 
    3067                                                 $(document).unbind('.dur'); 
     3172                                                t.globalUnbind('.dur'); 
    30683173                                                timefloat.hide(); 
    30693174                                        } 
    30703175                                }); 
    if (typeof jQuery != 'undefined') { 
    30803185                                player.setProgressRail(e); 
    30813186                                player.setCurrentRail(e); 
    30823187                        }, false); 
    3083                          
    3084                          
     3188 
     3189 
    30853190                        // store for later use 
    30863191                        t.loaded = loaded; 
    30873192                        t.total = total; 
    if (typeof jQuery != 'undefined') { 
    30933198                        var 
    30943199                                t = this, 
    30953200                                target = (e != undefined) ? e.target : t.media, 
    3096                                 percent = null;                  
     3201                                percent = null; 
    30973202 
    30983203                        // newest HTML5 spec has buffered array (FF4, Webkit) 
    30993204                        if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && target.duration) { 
    3100                                 // TODO: account for a real array with multiple values (only Firefox 4 has this so far)  
     3205                                // TODO: account for a real array with multiple values (only Firefox 4 has this so far) 
    31013206                                percent = target.buffered.end(0) / target.duration; 
    3102                         }  
     3207                        } 
    31033208                        // Some browsers (e.g., FF3.6 and Safari 5) cannot calculate target.bufferered.end() 
    31043209                        // to be anything other than 0. If the byte count is available we use this instead. 
    31053210                        // Browsers that support the else if do not seem to have the bufferedBytes value and 
    if (typeof jQuery != 'undefined') { 
    31243229                setCurrentRail: function() { 
    31253230 
    31263231                        var t = this; 
    3127                  
     3232 
    31283233                        if (t.media.currentTime != undefined && t.media.duration) { 
    31293234 
    31303235                                // update bar and handle 
    31313236                                if (t.total && t.handle) { 
    3132                                         var  
    3133                                                 newWidth = t.total.width() * t.media.currentTime / t.media.duration, 
    3134                                                 handlePos = newWidth - (t.handle.outerWidth(true) / 2); 
     3237                                        var 
     3238                                                newWidth = Math.round(t.total.width() * t.media.currentTime / t.media.duration), 
     3239                                                handlePos = newWidth - Math.round(t.handle.outerWidth(true) / 2); 
    31353240 
    31363241                                        t.current.width(newWidth); 
    31373242                                        t.handle.css('left', handlePos); 
    31383243                                } 
    31393244                        } 
    31403245 
    3141                 }        
     3246                } 
    31423247        }); 
    31433248})(mejs.$); 
     3249 
    31443250(function($) { 
    3145          
     3251 
    31463252        // options 
    31473253        $.extend(mejs.MepDefaults, { 
    31483254                duration: -1, 
    if (typeof jQuery != 'undefined') { 
    31543260        $.extend(MediaElementPlayer.prototype, { 
    31553261                buildcurrent: function(player, controls, layers, media) { 
    31563262                        var t = this; 
    3157                          
     3263 
    31583264                        $('<div class="mejs-time">'+ 
    31593265                                        '<span class="mejs-currenttime">' + (player.options.alwaysShowHours ? '00:' : '') 
    31603266                                        + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')+ '</span>'+ 
    31613267                                        '</div>') 
    31623268                                        .appendTo(controls); 
    3163                          
     3269 
    31643270                        t.currenttime = t.controls.find('.mejs-currenttime'); 
    31653271 
    31663272                        media.addEventListener('timeupdate',function() { 
    if (typeof jQuery != 'undefined') { 
    31713277 
    31723278                buildduration: function(player, controls, layers, media) { 
    31733279                        var t = this; 
    3174                          
     3280 
    31753281                        if (controls.children().last().find('.mejs-currenttime').length > 0) { 
    31763282                                $(t.options.timeAndDurationSeparator + 
    3177                                         '<span class="mejs-duration">' +  
    3178                                                 (t.options.duration > 0 ?  
     3283                                        '<span class="mejs-duration">' + 
     3284                                                (t.options.duration > 0 ? 
    31793285                                                        mejs.Utility.secondsToTimeCode(t.options.duration, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount,  t.options.framesPerSecond || 25) : 
    3180                                                         ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00'))  
    3181                                                 ) +  
     3286                                                        ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')) 
     3287                                                ) + 
    31823288                                        '</span>') 
    31833289                                        .appendTo(controls.find('.mejs-time')); 
    31843290                        } else { 
    31853291 
    31863292                                // add class to current time 
    31873293                                controls.find('.mejs-currenttime').parent().addClass('mejs-currenttime-container'); 
    3188                                  
     3294 
    31893295                                $('<div class="mejs-time mejs-duration-container">'+ 
    3190                                         '<span class="mejs-duration">' +  
    3191                                                 (t.options.duration > 0 ?  
     3296                                        '<span class="mejs-duration">' + 
     3297                                                (t.options.duration > 0 ? 
    31923298                                                        mejs.Utility.secondsToTimeCode(t.options.duration, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount,  t.options.framesPerSecond || 25) : 
    3193                                                         ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00'))  
    3194                                                 ) +  
     3299                                                        ((player.options.alwaysShowHours ? '00:' : '') + (player.options.showTimecodeFrameCount? '00:00:00':'00:00')) 
     3300                                                ) + 
    31953301                                        '</span>' + 
    31963302                                '</div>') 
    31973303                                .appendTo(controls); 
    31983304                        } 
    3199                          
     3305 
    32003306                        t.durationD = t.controls.find('.mejs-duration'); 
    32013307 
    32023308                        media.addEventListener('timeupdate',function() { 
    32033309                                player.updateDuration(); 
    32043310                        }, false); 
    32053311                }, 
    3206                  
     3312 
    32073313                updateCurrent:  function() { 
    32083314                        var t = this; 
    32093315 
    if (typeof jQuery != 'undefined') { 
    32113317                                t.currenttime.html(mejs.Utility.secondsToTimeCode(t.media.currentTime, t.options.alwaysShowHours || t.media.duration > 3600, t.options.showTimecodeFrameCount,  t.options.framesPerSecond || 25)); 
    32123318                        } 
    32133319                }, 
    3214                  
    3215                 updateDuration: function() {     
     3320 
     3321                updateDuration: function() { 
    32163322                        var t = this; 
    3217                          
    3218                         if (t.media.duration && t.durationD) { 
    3219                                 t.durationD.html(mejs.Utility.secondsToTimeCode(t.media.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25)); 
    3220                         }                
     3323 
     3324                        //Toggle the long video class if the video is longer than an hour. 
     3325                        t.container.toggleClass("mejs-long-video", t.media.duration > 3600); 
     3326 
     3327                        if (t.durationD && (t.options.duration > 0 || t.media.duration)) { 
     3328                                t.durationD.html(mejs.Utility.secondsToTimeCode(t.options.duration > 0 ? t.options.duration : t.media.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond || 25)); 
     3329                        } 
    32213330                } 
    32223331        }); 
    32233332 
    if (typeof jQuery != 'undefined') { 
    32273336        $.extend(mejs.MepDefaults, { 
    32283337                muteText: 'Mute Toggle', 
    32293338                hideVolumeOnTouchDevices: true, 
    3230                  
     3339 
    32313340                audioVolume: 'horizontal', 
    32323341                videoVolume: 'vertical' 
    32333342        }); 
    32343343 
    32353344        $.extend(MediaElementPlayer.prototype, { 
    32363345                buildvolume: function(player, controls, layers, media) { 
    3237                                  
     3346 
    32383347                        // Android and iOS don't support volume controls 
    32393348                        if (mejs.MediaFeatures.hasTouch && this.options.hideVolumeOnTouchDevices) 
    32403349                                return; 
    3241                          
     3350 
    32423351                        var t = this, 
    32433352                                mode = (t.isVideo) ? t.options.videoVolume : t.options.audioVolume, 
    32443353                                mute = (mode == 'horizontal') ? 
    3245                                  
     3354 
    32463355                                // horizontal version 
    32473356                                $('<div class="mejs-button mejs-volume-button mejs-mute">'+ 
    32483357                                        '<button type="button" aria-controls="' + t.id + '" title="' + t.options.muteText + '"></button>'+ 
    if (typeof jQuery != 'undefined') { 
    32543363                                '</div>' 
    32553364                                ) 
    32563365                                        .appendTo(controls) : 
    3257                                  
     3366 
    32583367                                // vertical version 
    32593368                                $('<div class="mejs-button mejs-volume-button mejs-mute">'+ 
    32603369                                        '<button type="button" aria-controls="' + t.id + '" title="' + t.options.muteText + '"></button>'+ 
    if (typeof jQuery != 'undefined') { 
    32783387                                        volumeSlider.hide() 
    32793388                                        return; 
    32803389                                } 
    3281                          
     3390 
    32823391                                // correct to 0-1 
    32833392                                volume = Math.max(0,volume); 
    3284                                 volume = Math.min(volume,1);                                     
    3285                                  
     3393                                volume = Math.min(volume,1); 
     3394 
    32863395                                // ajust mute button style 
    32873396                                if (volume == 0) { 
    32883397                                        mute.removeClass('mejs-mute').addClass('mejs-unmute'); 
    32893398                                } else { 
    32903399                                        mute.removeClass('mejs-unmute').addClass('mejs-mute'); 
    3291                                 }                                
     3400                                } 
    32923401 
    3293                                 // position slider  
     3402                                // position slider 
    32943403                                if (mode == 'vertical') { 
    3295                                         var  
    3296                                          
     3404                                        var 
     3405 
    32973406                                                // height of the full size volume slider background 
    32983407                                                totalHeight = volumeTotal.height(), 
    3299                                                  
     3408 
    33003409                                                // top/left of full size volume slider background 
    33013410                                                totalPosition = volumeTotal.position(), 
    3302                                                  
     3411 
    33033412                                                // the new top position based on the current volume 
    33043413                                                // 70% volume on 100px height == top:30px 
    33053414                                                newTop = totalHeight - (totalHeight * volume); 
    3306          
     3415 
    33073416                                        // handle 
    33083417                                        volumeHandle.css('top', Math.round(totalPosition.top + newTop - (volumeHandle.height() / 2))); 
    3309          
     3418 
    33103419                                        // show the current visibility 
    33113420                                        volumeCurrent.height(totalHeight - newTop ); 
    33123421                                        volumeCurrent.css('top', totalPosition.top + newTop); 
    33133422                                } else { 
    3314                                         var  
    3315                                          
     3423                                        var 
     3424 
    33163425                                                // height of the full size volume slider background 
    33173426                                                totalWidth = volumeTotal.width(), 
    3318                                                  
     3427 
    33193428                                                // top/left of full size volume slider background 
    33203429                                                totalPosition = volumeTotal.position(), 
    3321                                                  
     3430 
    33223431                                                // the new left position based on the current volume 
    33233432                                                newLeft = totalWidth * volume; 
    3324          
     3433 
    33253434                                        // handle 
    33263435                                        volumeHandle.css('left', Math.round(totalPosition.left + newLeft - (volumeHandle.width() / 2))); 
    3327          
     3436 
    33283437                                        // rezize the current part of the volume bar 
    33293438                                        volumeCurrent.width( Math.round(newLeft) ); 
    33303439                                } 
    33313440                        }, 
    33323441                        handleVolumeMove = function(e) { 
    3333                                  
     3442 
    33343443                                var volume = null, 
    33353444                                        totalOffset = volumeTotal.offset(); 
    3336                                  
     3445 
    33373446                                // calculate the new volume based on the moust position 
    33383447                                if (mode == 'vertical') { 
    3339                                  
     3448 
    33403449                                        var 
    33413450                                                railHeight = volumeTotal.height(), 
    33423451                                                totalTop = parseInt(volumeTotal.css('top').replace(/px/,''),10), 
    33433452                                                newY = e.pageY - totalOffset.top; 
    3344                                                  
     3453 
    33453454                                        volume = (railHeight - newY) / railHeight; 
    3346                                                  
     3455 
    33473456                                        // the controls just hide themselves (usually when mouse moves too far up) 
    33483457                                        if (totalOffset.top == 0 || totalOffset.left == 0) 
    33493458                                                return; 
    3350                                          
     3459 
    33513460                                } else { 
    33523461                                        var 
    33533462                                                railWidth = volumeTotal.width(), 
    33543463                                                newX = e.pageX - totalOffset.left; 
    3355                                                  
     3464 
    33563465                                        volume = newX / railWidth; 
    33573466                                } 
    3358                                  
     3467 
    33593468                                // ensure the volume isn't outside 0-1 
    33603469                                volume = Math.max(0,volume); 
    33613470                                volume = Math.min(volume,1); 
    3362                                  
    3363                                 // position the slider and handle                        
     3471 
     3472                                // position the slider and handle 
    33643473                                positionVolumeHandle(volume); 
    3365                                  
     3474 
    33663475                                // set the media object (this will trigger the volumechanged event) 
    33673476                                if (volume == 0) { 
    33683477                                        media.setMuted(true); 
    33693478                                } else { 
    33703479                                        media.setMuted(false); 
    33713480                                } 
    3372                                 media.setVolume(volume);                         
     3481                                media.setVolume(volume); 
    33733482                        }, 
    33743483                        mouseIsDown = false, 
    33753484                        mouseIsOver = false; 
    33763485 
    33773486                        // SLIDER 
    3378                          
     3487 
    33793488                        mute 
    33803489                                .hover(function() { 
    33813490                                        volumeSlider.show(); 
    33823491                                        mouseIsOver = true; 
    33833492                                }, function() { 
    3384                                         mouseIsOver = false;     
    3385                                                  
     3493                                        mouseIsOver = false; 
     3494 
    33863495                                        if (!mouseIsDown && mode == 'vertical') { 
    33873496                                                volumeSlider.hide(); 
    33883497                                        } 
    33893498                                }); 
    3390                          
     3499 
    33913500                        volumeSlider 
    33923501                                .bind('mouseover', function() { 
    3393                                         mouseIsOver = true;      
     3502                                        mouseIsOver = true; 
    33943503                                }) 
    33953504                                .bind('mousedown', function (e) { 
    33963505                                        handleVolumeMove(e); 
    3397                                         $(document) 
    3398                                                 .bind('mousemove.vol', function(e) { 
    3399                                                         handleVolumeMove(e); 
    3400                                                 }) 
    3401                                                 .bind('mouseup.vol', function () { 
    3402                                                         mouseIsDown = false; 
    3403                                                         $(document).unbind('.vol'); 
     3506                                        t.globalBind('mousemove.vol', function(e) { 
     3507                                                handleVolumeMove(e); 
     3508                                        }); 
     3509                                        t.globalBind('mouseup.vol', function () { 
     3510                                                mouseIsDown = false; 
     3511                                                t.globalUnbind('.vol'); 
    34043512 
    3405                                                         if (!mouseIsOver && mode == 'vertical') { 
    3406                                                                 volumeSlider.hide(); 
    3407                                                         } 
    3408                                                 }); 
     3513                                                if (!mouseIsOver && mode == 'vertical') { 
     3514                                                        volumeSlider.hide(); 
     3515                                                } 
     3516                                        }); 
    34093517                                        mouseIsDown = true; 
    3410                                                  
     3518 
    34113519                                        return false; 
    34123520                                }); 
    34133521 
    if (typeof jQuery != 'undefined') { 
    34333541                        if (t.container.is(':visible')) { 
    34343542                                // set initial volume 
    34353543                                positionVolumeHandle(player.options.startVolume); 
    3436                                  
     3544 
     3545                                // mutes the media and sets the volume icon muted if the initial volume is set to 0 
     3546        if (player.options.startVolume === 0) { 
     3547          media.setMuted(true); 
     3548        } 
     3549 
    34373550                                // shim gets the startvolume as a parameter, but we have to set it on the native <video> and <audio> elements 
    34383551                                if (media.pluginType === 'native') { 
    34393552                                        media.setVolume(player.options.startVolume); 
    if (typeof jQuery != 'undefined') { 
    34413554                        } 
    34423555                } 
    34433556        }); 
    3444          
     3557 
    34453558})(mejs.$); 
    34463559 
    34473560(function($) { 
    if (typeof jQuery != 'undefined') { 
    34733586                        if (mejs.MediaFeatures.hasTrueNativeFullScreen) { 
    34743587 
    34753588                                // chrome doesn't alays fire this in an iframe 
    3476                                 var target = null; 
    3477  
    3478                                 if (mejs.MediaFeatures.hasMozNativeFullScreen) { 
    3479                                         target = $(document); 
    3480                                 } else { 
    3481                                         target = player.container; 
    3482                                 } 
    3483  
    3484                                 target.bind(mejs.MediaFeatures.fullScreenEventName, function(e) { 
     3589                                var func = function(e) { 
    34853590 
    34863591                                        if (mejs.MediaFeatures.isFullScreen()) { 
    34873592                                                player.isNativeFullScreen = true; 
    if (typeof jQuery != 'undefined') { 
    34933598                                                // make sure to put the player back into place 
    34943599                                                player.exitFullScreen(); 
    34953600                                        } 
    3496                                 }); 
     3601                                }; 
     3602 
     3603                                if (mejs.MediaFeatures.hasMozNativeFullScreen) { 
     3604                                        player.globalBind(mejs.MediaFeatures.fullScreenEventName, func); 
     3605                                } else { 
     3606                                        player.container.bind(mejs.MediaFeatures.fullScreenEventName, func); 
     3607                                } 
    34973608                        } 
    34983609 
    34993610                        var t = this, 
    if (typeof jQuery != 'undefined') { 
    35993710                                                                                 left: fullScreenBtnOffset + fullScreenBtnWidth}); 
    36003711                                                        }; 
    36013712 
    3602                                                 $(document).resize(function() { 
     3713                                                t.globalBind('resize', function() { 
    36033714                                                        positionHoverDivs(); 
    36043715                                                }); 
    36053716 
    if (typeof jQuery != 'undefined') { 
    36393750                                                // the mouseout event doesn't work on the fullscren button, because we already killed the pointer-events 
    36403751                                                // so we use the document.mousemove event to restore controls when the mouse moves outside the fullscreen button 
    36413752                                                /* 
    3642                                                 $(document).mousemove(function(e) { 
     3753                                                t.globalBind('mousemove', function(e) { 
    36433754 
    36443755                                                        // if the mouse is anywhere but the fullsceen button, then restore it all 
    36453756                                                        if (fullscreenIsDisabled) { 
    if (typeof jQuery != 'undefined') { 
    36973808 
    36983809                        player.fullscreenBtn = fullscreenBtn; 
    36993810 
    3700                         $(document).bind('keydown',function (e) { 
     3811                        t.globalBind('keydown',function (e) { 
    37013812                                if (((mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || t.isFullScreen) && e.keyCode == 27) { 
    37023813                                        player.exitFullScreen(); 
    37033814                                } 
    37043815                        }); 
    37053816 
    37063817                }, 
     3818 
     3819                cleanfullscreen: function(player) { 
     3820                        player.exitFullScreen(); 
     3821                }, 
     3822 
    37073823                enterFullScreen: function() { 
    37083824 
    37093825                        var t = this; 
    if (typeof jQuery != 'undefined') { 
    38073923                                        .width('100%') 
    38083924                                        .height('100%'); 
    38093925                        } else { 
    3810                                 t.container.find('object, embed, iframe') 
     3926                                t.container.find('.mejs-shim') 
    38113927                                        .width('100%') 
    38123928                                        .height('100%'); 
    38133929 
    if (typeof jQuery != 'undefined') { 
    38844000 
    38854001(function($) { 
    38864002 
    3887         // add extra default options  
     4003        // add extra default options 
    38884004        $.extend(mejs.MepDefaults, { 
    38894005                // this will automatically turn on a <track> 
    38904006                startLanguage: '', 
    3891                  
    3892                 tracksText: 'Captions/Subtitles' 
     4007 
     4008                tracksText: 'Captions/Subtitles', 
     4009 
     4010                // option to remove the [cc] button when no <track kind="subtitles"> are present 
     4011                hideCaptionsButtonWhenEmpty: true, 
     4012 
     4013                // If true and we only have one track, change captions to popup 
     4014                toggleCaptionsButtonWhenOnlyOne: false, 
     4015 
     4016                // #id or .class 
     4017                slidesSelector: '' 
    38934018        }); 
    38944019 
    38954020        $.extend(MediaElementPlayer.prototype, { 
    3896          
     4021 
    38974022                hasChapters: false, 
    38984023 
    38994024                buildtracks: function(player, controls, layers, media) { 
    if (typeof jQuery != 'undefined') { 
    39034028                        if (player.tracks.length == 0) 
    39044029                                return; 
    39054030 
    3906                         var t= this, i, options = ''; 
     4031                        var t = this, 
     4032                                i, 
     4033                                options = ''; 
    39074034 
    3908                         player.chapters =  
     4035                        player.chapters = 
    39094036                                        $('<div class="mejs-chapters mejs-layer"></div>') 
    39104037                                                .prependTo(layers).hide(); 
    3911                         player.captions =  
    3912                                         $('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position"><span class="mejs-captions-text"></span></div></div>') 
     4038                        player.captions = 
     4039                                        $('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position mejs-captions-position-hover"><span class="mejs-captions-text"></span></div></div>') 
    39134040                                                .prependTo(layers).hide(); 
    39144041                        player.captionsText = player.captions.find('.mejs-captions-text'); 
    3915                         player.captionsButton =  
     4042                        player.captionsButton = 
    39164043                                        $('<div class="mejs-button mejs-captions-button">'+ 
    39174044                                                '<button type="button" aria-controls="' + t.id + '" title="' + t.options.tracksText + '"></button>'+ 
    39184045                                                '<div class="mejs-captions-selector">'+ 
    if (typeof jQuery != 'undefined') { 
    39244051                                                        '</ul>'+ 
    39254052                                                '</div>'+ 
    39264053                                        '</div>') 
    3927                                                 .appendTo(controls) 
    3928                                                  
    3929                                                 // hover 
    3930                                                 .hover(function() { 
    3931                                                         $(this).find('.mejs-captions-selector').css('visibility','visible'); 
    3932                                                 }, function() { 
    3933                                                         $(this).find('.mejs-captions-selector').css('visibility','hidden'); 
    3934                                                 })                                       
    3935                                                  
    3936                                                 // handle clicks to the language radio buttons 
    3937                                                 .delegate('input[type=radio]','click',function() { 
    3938                                                         lang = this.value; 
    3939  
    3940                                                         if (lang == 'none') { 
    3941                                                                 player.selectedTrack = null; 
    3942                                                         } else { 
    3943                                                                 for (i=0; i<player.tracks.length; i++) { 
    3944                                                                         if (player.tracks[i].srclang == lang) { 
    3945                                                                                 player.selectedTrack = player.tracks[i]; 
    3946                                                                                 player.captions.attr('lang', player.selectedTrack.srclang); 
    3947                                                                                 player.displayCaptions(); 
    3948                                                                                 break; 
    3949                                                                         } 
    3950                                                                 } 
    3951                                                         } 
    3952                                                 }); 
    3953                                                 //.bind('mouseenter', function() { 
    3954                                                 //      player.captionsButton.find('.mejs-captions-selector').css('visibility','visible') 
    3955                                                 //}); 
     4054                                                .appendTo(controls); 
     4055 
     4056 
     4057                        var subtitleCount = 0; 
     4058                        for (i=0; i<player.tracks.length; i++) { 
     4059                                if (player.tracks[i].kind == 'subtitles') { 
     4060                                        subtitleCount++; 
     4061                                } 
     4062                        } 
     4063 
     4064                        // if only one language then just make the button a toggle 
     4065                        if (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount == 1){ 
     4066                                // click 
     4067                                player.captionsButton.on('click',function() { 
     4068                                        if (player.selectedTrack == null) { 
     4069                                                var lang = player.tracks[0].srclang; 
     4070                                        } else { 
     4071                                                var lang = 'none'; 
     4072                                        } 
     4073                                        player.setTrack(lang); 
     4074                                }); 
     4075                        } else { 
     4076                                // hover 
     4077                                player.captionsButton.hover(function() { 
     4078                                        $(this).find('.mejs-captions-selector').css('visibility','visible'); 
     4079                                }, function() { 
     4080                                        $(this).find('.mejs-captions-selector').css('visibility','hidden'); 
     4081                                }) 
     4082 
     4083                                // handle clicks to the language radio buttons 
     4084                                .on('click','input[type=radio]',function() { 
     4085                                        lang = this.value; 
     4086                                        player.setTrack(lang); 
     4087                                }); 
     4088 
     4089                        } 
    39564090 
    39574091                        if (!player.options.alwaysShowControls) { 
    39584092                                // move with controls 
    39594093                                player.container 
    3960                                         .bind('mouseenter', function () { 
     4094                                        .bind('controlsshown', function () { 
    39614095                                                // push captions above controls 
    39624096                                                player.container.find('.mejs-captions-position').addClass('mejs-captions-position-hover'); 
    39634097 
    39644098                                        }) 
    3965                                         .bind('mouseleave', function () { 
     4099                                        .bind('controlshidden', function () { 
    39664100                                                if (!media.paused) { 
    39674101                                                        // move back to normal place 
    39684102                                                        player.container.find('.mejs-captions-position').removeClass('mejs-captions-position-hover'); 
    if (typeof jQuery != 'undefined') { 
    39764110                        player.selectedTrack = null; 
    39774111                        player.isLoadingTrack = false; 
    39784112 
    3979                          
     4113 
    39804114 
    39814115                        // add to list 
    39824116                        for (i=0; i<player.tracks.length; i++) { 
    if (typeof jQuery != 'undefined') { 
    39854119                                } 
    39864120                        } 
    39874121 
     4122                        // start loading tracks 
    39884123                        player.loadNextTrack(); 
    39894124 
    39904125 
    if (typeof jQuery != 'undefined') { 
    39924127                                player.displayCaptions(); 
    39934128                        }, false); 
    39944129 
     4130                        if (player.options.slidesSelector != '') { 
     4131                                player.slidesContainer = $(player.options.slidesSelector); 
     4132 
     4133                                media.addEventListener('timeupdate',function(e) { 
     4134                                        player.displaySlides(); 
     4135                                }, false); 
     4136 
     4137                        } 
     4138 
    39954139                        media.addEventListener('loadedmetadata', function(e) { 
    39964140                                player.displayChapters(); 
    39974141                        }, false); 
    if (typeof jQuery != 'undefined') { 
    40124156                                                }); 
    40134157                                        } 
    40144158                                }); 
    4015                                  
     4159 
    40164160                        // check for autoplay 
    40174161                        if (player.node.getAttribute('autoplay') !== null) { 
    40184162                                player.chapters.css('visibility','hidden'); 
    40194163                        } 
    40204164                }, 
    40214165 
     4166                setTrack: function(lang){ 
     4167 
     4168                        var t = this, 
     4169                                i; 
     4170 
     4171                        if (lang == 'none') { 
     4172                                t.selectedTrack = null; 
     4173                                t.captionsButton.removeClass('mejs-captions-enabled'); 
     4174                        } else { 
     4175                                for (i=0; i<t.tracks.length; i++) { 
     4176                                        if (t.tracks[i].srclang == lang) { 
     4177                                                if (t.selectedTrack == null) 
     4178                                                    t.captionsButton.addClass('mejs-captions-enabled'); 
     4179                                                t.selectedTrack = t.tracks[i]; 
     4180                                                t.captions.attr('lang', t.selectedTrack.srclang); 
     4181                                                t.displayCaptions(); 
     4182                                                break; 
     4183                                        } 
     4184                                } 
     4185                        } 
     4186                }, 
     4187 
    40224188                loadNextTrack: function() { 
    40234189                        var t = this; 
    40244190 
    if (typeof jQuery != 'undefined') { 
    40294195                        } else { 
    40304196                                // add done? 
    40314197                                t.isLoadingTrack = false; 
     4198 
     4199                                t.checkForTracks(); 
    40324200                        } 
    40334201                }, 
    40344202 
    if (typeof jQuery != 'undefined') { 
    40564224 
    40574225                                        // parse the loaded file 
    40584226                                        if (typeof d == "string" && (/<tt\s+xml/ig).exec(d)) { 
    4059                                                 track.entries = mejs.TrackFormatParser.dfxp.parse(d);                                    
    4060                                         } else {         
     4227                                                track.entries = mejs.TrackFormatParser.dfxp.parse(d); 
     4228                                        } else { 
    40614229                                                track.entries = mejs.TrackFormatParser.webvvt.parse(d); 
    40624230                                        } 
    4063                                          
     4231 
    40644232                                        after(); 
    40654233 
    40664234                                        if (track.kind == 'chapters') { 
    if (typeof jQuery != 'undefined') { 
    40704238                                                        } 
    40714239                                                }, false); 
    40724240                                        } 
     4241 
     4242                                        if (track.kind == 'slides') { 
     4243                                                t.setupSlides(track); 
     4244                                        } 
    40734245                                }, 
    40744246                                error: function() { 
    40754247                                        t.loadNextTrack(); 
    if (typeof jQuery != 'undefined') { 
    40794251 
    40804252                enableTrackButton: function(lang, label) { 
    40814253                        var t = this; 
    4082                          
     4254 
    40834255                        if (label === '') { 
    40844256                                label = mejs.language.codes[lang] || lang; 
    4085                         }                        
     4257                        } 
    40864258 
    40874259                        t.captionsButton 
    40884260                                .find('input[value=' + lang + ']') 
    if (typeof jQuery != 'undefined') { 
    41264298                        ); 
    41274299                }, 
    41284300 
     4301                checkForTracks: function() { 
     4302                        var 
     4303                                t = this, 
     4304                                hasSubtitles = false; 
     4305 
     4306                        // check if any subtitles 
     4307                        if (t.options.hideCaptionsButtonWhenEmpty) { 
     4308                                for (i=0; i<t.tracks.length; i++) { 
     4309                                        if (t.tracks[i].kind == 'subtitles') { 
     4310                                                hasSubtitles = true; 
     4311                                                break; 
     4312                                        } 
     4313                                } 
     4314 
     4315                                if (!hasSubtitles) { 
     4316                                        t.captionsButton.hide(); 
     4317                                        t.setControlsSize(); 
     4318                                } 
     4319                        } 
     4320                }, 
     4321 
    41294322                displayCaptions: function() { 
    41304323 
    41314324                        if (typeof this.tracks == 'undefined') 
    if (typeof jQuery != 'undefined') { 
    41504343                        } 
    41514344                }, 
    41524345 
     4346                setupSlides: function(track) { 
     4347                        var t = this; 
     4348 
     4349                        t.slides = track; 
     4350                        t.slides.entries.imgs = [t.slides.entries.text.length]; 
     4351                        t.showSlide(0); 
     4352 
     4353                }, 
     4354 
     4355                showSlide: function(index) { 
     4356                        if (typeof this.tracks == 'undefined' || typeof this.slidesContainer == 'undefined') { 
     4357                                return; 
     4358                        } 
     4359 
     4360                        var t = this, 
     4361                                url = t.slides.entries.text[index], 
     4362                                img = t.slides.entries.imgs[index]; 
     4363 
     4364                        if (typeof img == 'undefined' || typeof img.fadeIn == 'undefined') { 
     4365 
     4366                                t.slides.entries.imgs[index] = img = $('<img src="' + url + '">') 
     4367                                                .on('load', function() { 
     4368                                                        img.appendTo(t.slidesContainer) 
     4369                                                                .hide() 
     4370                                                                .fadeIn() 
     4371                                                                .siblings(':visible') 
     4372                                                                        .fadeOut(); 
     4373 
     4374                                                }); 
     4375 
     4376                        } else { 
     4377 
     4378                                if (!img.is(':visible') && !img.is(':animated')) { 
     4379 
     4380                                        console.log('showing existing slide'); 
     4381 
     4382                                        img.fadeIn() 
     4383                                                .siblings(':visible') 
     4384                                                        .fadeOut(); 
     4385                                } 
     4386                        } 
     4387 
     4388                }, 
     4389 
     4390                displaySlides: function() { 
     4391 
     4392                        if (typeof this.slides == 'undefined') 
     4393                                return; 
     4394 
     4395                        var 
     4396                                t = this, 
     4397                                slides = t.slides, 
     4398                                i; 
     4399 
     4400                        for (i=0; i<slides.entries.times.length; i++) { 
     4401                                if (t.media.currentTime >= slides.entries.times[i].start && t.media.currentTime <= slides.entries.times[i].stop){ 
     4402 
     4403                                        t.showSlide(i); 
     4404 
     4405                                        return; // exit out if one is visible; 
     4406                                } 
     4407                        } 
     4408                }, 
     4409 
    41534410                displayChapters: function() { 
    4154                         var  
     4411                        var 
    41554412                                t = this, 
    41564413                                i; 
    41574414 
    if (typeof jQuery != 'undefined') { 
    41654422                }, 
    41664423 
    41674424                drawChapters: function(chapters) { 
    4168                         var  
     4425                        var 
    41694426                                t = this, 
    41704427                                i, 
    41714428                                dur, 
    if (typeof jQuery != 'undefined') { 
    41914448                                //} 
    41924449 
    41934450                                t.chapters.append( $( 
    4194                                         '<div class="mejs-chapter" rel="' + chapters.entries.times[i].start + '" style="left: ' + usedPercent.toString() + '%;width: ' + percent.toString() + '%;">' +  
    4195                                                 '<div class="mejs-chapter-block' + ((i==chapters.entries.times.length-1) ? ' mejs-chapter-block-last' : '') + '">' +  
    4196                                                         '<span class="ch-title">' + chapters.entries.text[i] + '</span>' +  
    4197                                                         '<span class="ch-time">' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].start) + '&ndash;' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].stop) + '</span>' +  
     4451                                        '<div class="mejs-chapter" rel="' + chapters.entries.times[i].start + '" style="left: ' + usedPercent.toString() + '%;width: ' + percent.toString() + '%;">' + 
     4452                                                '<div class="mejs-chapter-block' + ((i==chapters.entries.times.length-1) ? ' mejs-chapter-block-last' : '') + '">' + 
     4453                                                        '<span class="ch-title">' + chapters.entries.text[i] + '</span>' + 
     4454                                                        '<span class="ch-time">' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].start) + '&ndash;' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].stop) + '</span>' + 
    41984455                                                '</div>' + 
    41994456                                        '</div>')); 
    42004457                                usedPercent += percent; 
    if (typeof jQuery != 'undefined') { 
    42034460                        t.chapters.find('div.mejs-chapter').click(function() { 
    42044461                                t.media.setCurrentTime( parseFloat( $(this).attr('rel') ) ); 
    42054462                                if (t.media.paused) { 
    4206                                         t.media.play();  
     4463                                        t.media.play(); 
    42074464                                } 
    42084465                        }); 
    42094466 
    if (typeof jQuery != 'undefined') { 
    42784535        Parses WebVVT format which should be formatted as 
    42794536        ================================ 
    42804537        WEBVTT 
    4281          
     4538 
    42824539        1 
    42834540        00:00:01,1 --> 00:00:05,000 
    42844541        A line of text 
    if (typeof jQuery != 'undefined') { 
    42864543        2 
    42874544        00:01:15,1 --> 00:02:05,000 
    42884545        A second line of text 
    4289          
     4546 
    42904547        =============================== 
    42914548 
    42924549        Adapted from: http://www.delphiki.com/html5/playr 
    if (typeof jQuery != 'undefined') { 
    42984555                        pattern_timecode: /^([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/, 
    42994556 
    43004557                        parse: function(trackText) { 
    4301                                 var  
     4558                                var 
    43024559                                        i = 0, 
    43034560                                        lines = mejs.TrackFormatParser.split2(trackText, /\r?\n/), 
    43044561                                        entries = {text:[], times:[]}, 
    if (typeof jQuery != 'undefined') { 
    43094566                                        if (this.pattern_identifier.exec(lines[i])){ 
    43104567                                                // skip to the next line where the start --> end time code should be 
    43114568                                                i++; 
    4312                                                 timecode = this.pattern_timecode.exec(lines[i]);                                 
     4569                                                timecode = this.pattern_timecode.exec(lines[i]); 
    43134570 
    43144571                                                if (timecode && i<lines.length){ 
    43154572                                                        i++; 
    if (typeof jQuery != 'undefined') { 
    43394596                dfxp: { 
    43404597                        parse: function(trackText) { 
    43414598                                trackText = $(trackText).filter("tt"); 
    4342                                 var  
     4599                                var 
    43434600                                        i = 0, 
    43444601                                        container = trackText.children("div").eq(0), 
    43454602                                        lines = container.find("p"), 
    if (typeof jQuery != 'undefined') { 
    43754632                                        if (styles) { 
    43764633                                                style = ""; 
    43774634                                                for (var _style in styles) { 
    4378                                                         style += _style + ":" + styles[_style] + ";";                                    
     4635                                                        style += _style + ":" + styles[_style] + ";"; 
    43794636                                                } 
    43804637                                        } 
    43814638                                        if (style) _temp_times.style = style; 
    if (typeof jQuery != 'undefined') { 
    43944651                        return text.split(regex); 
    43954652                } 
    43964653        }; 
    4397          
     4654 
    43984655        // test for browsers with bad String.split method. 
    43994656        if ('x\n\ny'.split(/\n/gi).length != 3) { 
    44004657                // add super slow IE8 and below version 
    44014658                mejs.TrackFormatParser.split2 = function(text, regex) { 
    4402                         var  
    4403                                 parts = [],  
     4659                        var 
     4660                                parts = [], 
    44044661                                chunk = '', 
    44054662                                i; 
    44064663 
    if (typeof jQuery != 'undefined') { 
    44144671                        parts.push(chunk); 
    44154672                        return parts; 
    44164673                } 
    4417         }        
     4674        } 
    44184675 
    44194676})(mejs.$); 
    44204677 
    44214678/* 
    44224679* ContextMenu Plugin 
    4423 *  
     4680* 
    44244681* 
    44254682*/ 
    44264683 
    if (typeof jQuery != 'undefined') { 
    44294686$.extend(mejs.MepDefaults, 
    44304687        { 'contextMenuItems': [ 
    44314688                // demo of a fullscreen option 
    4432                 {  
     4689                { 
    44334690                        render: function(player) { 
    4434                                  
     4691 
    44354692                                // check for fullscreen plugin 
    44364693                                if (typeof player.enterFullScreen == 'undefined') 
    44374694                                        return null; 
    4438                          
     4695 
    44394696                                if (player.isFullScreen) { 
    44404697                                        return "Turn off Fullscreen"; 
    44414698                                } else { 
    $.extend(mejs.MepDefaults, 
    44524709                } 
    44534710                , 
    44544711                // demo of a mute/unmute button 
    4455                 {  
     4712                { 
    44564713                        render: function(player) { 
    44574714                                if (player.media.muted) { 
    44584715                                        return "Unmute"; 
    $.extend(mejs.MepDefaults, 
    44744731                } 
    44754732                , 
    44764733                // demo of simple download video 
    4477                 {  
     4734                { 
    44784735                        render: function(player) { 
    44794736                                return "Download Video"; 
    44804737                        }, 
    44814738                        click: function(player) { 
    44824739                                window.location.href = player.media.currentSrc; 
    44834740                        } 
    4484                 }        
     4741                } 
    44854742        ]} 
    44864743); 
    44874744 
    44884745 
    44894746        $.extend(MediaElementPlayer.prototype, { 
    44904747                buildcontextmenu: function(player, controls, layers, media) { 
    4491                          
     4748 
    44924749                        // create context menu 
    44934750                        player.contextMenu = $('<div class="mejs-contextmenu"></div>') 
    44944751                                                                .appendTo($('body')) 
    44954752                                                                .hide(); 
    4496                          
     4753 
    44974754                        // create events for showing context menu 
    44984755                        player.container.bind('contextmenu', function(e) { 
    44994756                                if (player.isContextMenuEnabled) { 
    $.extend(mejs.MepDefaults, 
    45044761                        }); 
    45054762                        player.container.bind('click', function() { 
    45064763                                player.contextMenu.hide(); 
    4507                         });      
     4764                        }); 
    45084765                        player.contextMenu.bind('mouseleave', function() { 
    45094766 
    45104767                                //console.log('context hover out'); 
    45114768                                player.startContextMenuTimer(); 
    4512                                  
    4513                         });              
     4769 
     4770                        }); 
    45144771                }, 
    4515                  
     4772 
     4773                cleancontextmenu: function(player) { 
     4774                        player.contextMenu.remove(); 
     4775                }, 
     4776 
    45164777                isContextMenuEnabled: true, 
    45174778                enableContextMenu: function() { 
    45184779                        this.isContextMenuEnabled = true; 
    $.extend(mejs.MepDefaults, 
    45204781                disableContextMenu: function() { 
    45214782                        this.isContextMenuEnabled = false; 
    45224783                }, 
    4523                  
     4784 
    45244785                contextMenuTimeout: null, 
    45254786                startContextMenuTimer: function() { 
    45264787                        //console.log('startContextMenuTimer'); 
    4527                          
     4788 
    45284789                        var t = this; 
    4529                          
     4790 
    45304791                        t.killContextMenuTimer(); 
    4531                          
     4792 
    45324793                        t.contextMenuTimer = setTimeout(function() { 
    45334794                                t.hideContextMenu(); 
    45344795                                t.killContextMenuTimer(); 
    $.extend(mejs.MepDefaults, 
    45364797                }, 
    45374798                killContextMenuTimer: function() { 
    45384799                        var timer = this.contextMenuTimer; 
    4539                          
     4800 
    45404801                        //console.log('killContextMenuTimer', timer); 
    4541                          
    4542                         if (timer != null) {                             
     4802 
     4803                        if (timer != null) { 
    45434804                                clearTimeout(timer); 
    45444805                                delete timer; 
    45454806                                timer = null; 
    45464807                        } 
    4547                 },               
    4548                  
     4808                }, 
     4809 
    45494810                hideContextMenu: function() { 
    45504811                        this.contextMenu.hide(); 
    45514812                }, 
    4552                  
     4813 
    45534814                renderContextMenu: function(x,y) { 
    4554                          
     4815 
    45554816                        // alway re-render the items so that things like "turn fullscreen on" and "turn fullscreen off" are always written correctly 
    45564817                        var t = this, 
    45574818                                html = '', 
    45584819                                items = t.options.contextMenuItems; 
    4559                          
     4820 
    45604821                        for (var i=0, il=items.length; i<il; i++) { 
    4561                                  
     4822 
    45624823                                if (items[i].isSeparator) { 
    45634824                                        html += '<div class="mejs-contextmenu-separator"></div>'; 
    45644825                                } else { 
    4565                                  
     4826 
    45664827                                        var rendered = items[i].render(t); 
    4567                                  
     4828 
    45684829                                        // render can return null if the item doesn't need to be used at the moment 
    45694830                                        if (rendered != null) { 
    45704831                                                html += '<div class="mejs-contextmenu-item" data-itemindex="' + i + '" id="element-' + (Math.random()*1000000) + '">' + rendered + '</div>'; 
    45714832                                        } 
    45724833                                } 
    45734834                        } 
    4574                          
     4835 
    45754836                        // position and show the context menu 
    45764837                        t.contextMenu 
    45774838                                .empty() 
    45784839                                .append($(html)) 
    45794840                                .css({top:y, left:x}) 
    45804841                                .show(); 
    4581                                  
     4842 
    45824843                        // bind events 
    45834844                        t.contextMenu.find('.mejs-contextmenu-item').each(function() { 
    4584                                                          
     4845 
    45854846                                // which one is this? 
    45864847                                var $dom = $(this), 
    45874848                                        itemIndex = parseInt( $dom.data('itemindex'), 10 ), 
    45884849                                        item = t.options.contextMenuItems[itemIndex]; 
    4589                                  
     4850 
    45904851                                // bind extra functionality? 
    45914852                                if (typeof item.show != 'undefined') 
    45924853                                        item.show( $dom , t); 
    4593                                  
     4854 
    45944855                                // bind click action 
    4595                                 $dom.click(function() {                  
     4856                                $dom.click(function() { 
    45964857                                        // perform click action 
    45974858                                        if (typeof item.click != 'undefined') 
    45984859                                                item.click(t); 
    4599                                          
     4860 
    46004861                                        // close 
    4601                                         t.contextMenu.hide();                            
    4602                                 });                              
    4603                         });      
    4604                          
     4862                                        t.contextMenu.hide(); 
     4863                                }); 
     4864                        }); 
     4865 
    46054866                        // stop the controls from hiding 
    46064867                        setTimeout(function() { 
    4607                                 t.killControlsTimer('rev3');     
     4868                                t.killControlsTimer('rev3'); 
    46084869                        }, 100); 
    4609                                                  
     4870 
    46104871                } 
    46114872        }); 
    4612          
     4873 
    46134874})(mejs.$); 
    46144875/** 
    46154876 * Postroll plugin 
  • wp-includes/js/mediaelement/mediaelement-and-player.min.js

    diff --git wp-includes/js/mediaelement/mediaelement-and-player.min.js wp-includes/js/mediaelement/mediaelement-and-player.min.js
    index dfd11c7..6f38e1b 100644
     
    88* Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3 
    99* 
    1010* Copyright 2010-2012, John Dyer (http://j.hn) 
    11 * Dual licensed under the MIT or GPL Version 2 licenses. 
     11* License: MIT 
    1212* 
    13 */ 
    14 var mejs=mejs||{};mejs.version="2.10.1";mejs.meIndex=0;mejs.plugins={silverlight:[{version:[3,0],types:["video/mp4","video/m4v","video/mov","video/wmv","audio/wma","audio/m4a","audio/mp3","audio/wav","audio/mpeg"]}],flash:[{version:[9,0,124],types:["video/mp4","video/m4v","video/mov","video/flv","video/rtmp","video/x-flv","audio/flv","audio/x-flv","audio/mp3","audio/m4a","audio/mpeg","video/youtube","video/x-youtube"]}],youtube:[{version:null,types:["video/youtube","video/x-youtube"]}],vimeo:[{version:null,types:["video/vimeo","video/x-vimeo"]}]};mejs.Utility={encodeUrl:function(a){return encodeURIComponent(a)},escapeHTML:function(a){return a.toString().split("&").join("&amp;").split("<").join("&lt;").split('"').join("&quot;")},absolutizeUrl:function(a){var b=document.createElement("div");b.innerHTML='<a href="'+this.escapeHTML(a)+'">x</a>';return b.firstChild.href},getScriptPath:function(h){var e=0,c,k="",a="",f,b=document.getElementsByTagName("script"),g=b.length,d=h.length;for(;e<g;e++){f=b[e].src;for(c=0;c<d;c++){a=h[c];if(f.indexOf(a)>-1){k=f.substring(0,f.indexOf(a));break}}if(k!==""){break}}return k},secondsToTimeCode:function(c,g,a,b){if(typeof a=="undefined"){a=false}else{if(typeof b=="undefined"){b=25}}var f=Math.floor(c/3600)%24,d=Math.floor(c/60)%60,h=Math.floor(c%60),e=Math.floor(((c%1)*b).toFixed(3)),j=((g||f>0)?(f<10?"0"+f:f)+":":"")+(d<10?"0"+d:d)+":"+(h<10?"0"+h:h)+((a)?":"+(e<10?"0"+e:e):"");return j},timeCodeToSeconds:function(c,k,d,e){if(typeof d=="undefined"){d=false}else{if(typeof e=="undefined"){e=25}}var f=c.split(":"),a=parseInt(f[0],10),b=parseInt(f[1],10),h=parseInt(f[2],10),j=0,g=0;if(d){j=parseInt(f[3])/e}g=(a*3600)+(b*60)+h+j;return g},convertSMPTEtoSeconds:function(a){if(typeof a!="string"){return false}a=a.replace(",",".");var d=0,b=(a.indexOf(".")!=-1)?a.split(".")[1].length:0,e=1;a=a.split(":").reverse();for(var c=0;c<a.length;c++){e=1;if(c>0){e=Math.pow(60,c)}d+=Number(a[c])*e}return Number(d.toFixed(b))},removeSwf:function(b){var a=document.getElementById(b);if(a&&a.nodeName=="OBJECT"){if(mejs.MediaFeatures.isIE){a.style.display="none";(function(){if(a.readyState==4){mejs.Utility.removeObjectInIE(b)}else{setTimeout(arguments.callee,10)}})()}else{a.parentNode.removeChild(a)}}},removeObjectInIE:function(c){var b=document.getElementById(c);if(b){for(var a in b){if(typeof b[a]=="function"){b[a]=null}}b.parentNode.removeChild(b)}}};mejs.PluginDetector={hasPluginVersion:function(c,a){var b=this.plugins[c];a[1]=a[1]||0;a[2]=a[2]||0;return(b[0]>a[0]||(b[0]==a[0]&&b[1]>a[1])||(b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]))?true:false},nav:window.navigator,ua:window.navigator.userAgent.toLowerCase(),plugins:[],addPlugin:function(d,c,e,a,b){this.plugins[d]=this.detectPlugin(c,e,a,b)},detectPlugin:function(g,b,c,k){var h=[0,0,0],j,d,a;if(typeof(this.nav.plugins)!="undefined"&&typeof this.nav.plugins[g]=="object"){j=this.nav.plugins[g].description;if(j&&!(typeof this.nav.mimeTypes!="undefined"&&this.nav.mimeTypes[b]&&!this.nav.mimeTypes[b].enabledPlugin)){h=j.replace(g,"").replace(/^\s+/,"").replace(/\sr/gi,".").split(".");for(d=0;d<h.length;d++){h[d]=parseInt(h[d].match(/\d+/),10)}}}else{if(typeof(window.ActiveXObject)!="undefined"){try{a=new ActiveXObject(c);if(a){h=k(a)}}catch(f){}}}return h}};mejs.PluginDetector.addPlugin("flash","Shockwave Flash","application/x-shockwave-flash","ShockwaveFlash.ShockwaveFlash",function(b){var a=[],c=b.GetVariable("$version");if(c){c=c.split(" ")[1].split(",");a=[parseInt(c[0],10),parseInt(c[1],10),parseInt(c[2],10)]}return a});mejs.PluginDetector.addPlugin("silverlight","Silverlight Plug-In","application/x-silverlight-2","AgControl.AgControl",function(b){var a=[0,0,0,0],c=function(f,d,e,g){while(f.isVersionSupported(d[0]+"."+d[1]+"."+d[2]+"."+d[3])){d[e]+=g}d[e]-=g};c(b,a,0,1);c(b,a,1,1);c(b,a,2,10000);c(b,a,2,1000);c(b,a,2,100);c(b,a,2,10);c(b,a,2,1);c(b,a,3,1);return a});mejs.MediaFeatures={init:function(){var e=this,h=document,g=mejs.PluginDetector.nav,c=mejs.PluginDetector.ua.toLowerCase(),b,a,f=["source","track","audio","video"];e.isiPad=(c.match(/ipad/i)!==null);e.isiPhone=(c.match(/iphone/i)!==null);e.isiOS=e.isiPhone||e.isiPad;e.isAndroid=(c.match(/android/i)!==null);e.isBustedAndroid=(c.match(/android 2\.[12]/)!==null);e.isIE=(g.appName.toLowerCase().indexOf("microsoft")!=-1);e.isChrome=(c.match(/chrome/gi)!==null);e.isFirefox=(c.match(/firefox/gi)!==null);e.isWebkit=(c.match(/webkit/gi)!==null);e.isGecko=(c.match(/gecko/gi)!==null)&&!e.isWebkit;e.isOpera=(c.match(/opera/gi)!==null);e.hasTouch=("ontouchstart" in window);e.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect;for(b=0;b<f.length;b++){a=document.createElement(f[b])}e.supportsMediaTag=(typeof a.canPlayType!=="undefined"||e.isBustedAndroid);e.hasSemiNativeFullScreen=(typeof a.webkitEnterFullscreen!=="undefined");e.hasWebkitNativeFullScreen=(typeof a.webkitRequestFullScreen!=="undefined");e.hasMozNativeFullScreen=(typeof a.mozRequestFullScreen!=="undefined");e.hasTrueNativeFullScreen=(e.hasWebkitNativeFullScreen||e.hasMozNativeFullScreen);e.nativeFullScreenEnabled=e.hasTrueNativeFullScreen;if(e.hasMozNativeFullScreen){e.nativeFullScreenEnabled=a.mozFullScreenEnabled}if(this.isChrome){e.hasSemiNativeFullScreen=false}if(e.hasTrueNativeFullScreen){e.fullScreenEventName=(e.hasWebkitNativeFullScreen)?"webkitfullscreenchange":"mozfullscreenchange";e.isFullScreen=function(){if(a.mozRequestFullScreen){return h.mozFullScreen}else{if(a.webkitRequestFullScreen){return h.webkitIsFullScreen}}};e.requestFullScreen=function(d){if(e.hasWebkitNativeFullScreen){d.webkitRequestFullScreen()}else{if(e.hasMozNativeFullScreen){d.mozRequestFullScreen()}}};e.cancelFullScreen=function(){if(e.hasWebkitNativeFullScreen){document.webkitCancelFullScreen()}else{if(e.hasMozNativeFullScreen){document.mozCancelFullScreen()}}}}if(e.hasSemiNativeFullScreen&&c.match(/mac os x 10_5/i)){e.hasNativeFullScreen=false;e.hasSemiNativeFullScreen=false}}};mejs.MediaFeatures.init();mejs.HtmlMediaElement={pluginType:"native",isFullScreen:false,setCurrentTime:function(a){this.currentTime=a},setMuted:function(a){this.muted=a},setVolume:function(a){this.volume=a},stop:function(){this.pause()},setSrc:function(a){var c=this.getElementsByTagName("source");while(c.length>0){this.removeChild(c[0])}if(typeof a=="string"){this.src=a}else{var b,d;for(b=0;b<a.length;b++){d=a[b];if(this.canPlayType(d.type)){this.src=d.src;break}}}},setVideoSize:function(b,a){this.width=b;this.height=a}};mejs.PluginMediaElement=function(b,c,a){this.id=b;this.pluginType=c;this.src=a;this.events={}};mejs.PluginMediaElement.prototype={pluginElement:null,pluginType:"",isFullScreen:false,playbackRate:-1,defaultPlaybackRate:-1,seekable:[],played:[],paused:true,ended:false,seeking:false,duration:0,error:null,tagName:"",muted:false,volume:1,currentTime:0,play:function(){if(this.pluginApi!=null){if(this.pluginType=="youtube"){this.pluginApi.playVideo()}else{this.pluginApi.playMedia()}this.paused=false}},load:function(){if(this.pluginApi!=null){if(this.pluginType=="youtube"){}else{this.pluginApi.loadMedia()}this.paused=false}},pause:function(){if(this.pluginApi!=null){if(this.pluginType=="youtube"){this.pluginApi.pauseVideo()}else{this.pluginApi.pauseMedia()}this.paused=true}},stop:function(){if(this.pluginApi!=null){if(this.pluginType=="youtube"){this.pluginApi.stopVideo()}else{this.pluginApi.stopMedia()}this.paused=true}},canPlayType:function(e){var d,c,a,b=mejs.plugins[this.pluginType];for(d=0;d<b.length;d++){a=b[d];if(mejs.PluginDetector.hasPluginVersion(this.pluginType,a.version)){for(c=0;c<a.types.length;c++){if(e==a.types[c]){return true}}}}return false},positionFullscreenButton:function(a,c,b){if(this.pluginApi!=null&&this.pluginApi.positionFullscreenButton){this.pluginApi.positionFullscreenButton(a,c,b)}},hideFullscreenButton:function(){if(this.pluginApi!=null&&this.pluginApi.hideFullscreenButton){this.pluginApi.hideFullscreenButton()}},setSrc:function(a){if(typeof a=="string"){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(a));this.src=mejs.Utility.absolutizeUrl(a)}else{var b,c;for(b=0;b<a.length;b++){c=a[b];if(this.canPlayType(c.type)){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(c.src));this.src=mejs.Utility.absolutizeUrl(a);break}}}},setCurrentTime:function(a){if(this.pluginApi!=null){if(this.pluginType=="youtube"){this.pluginApi.seekTo(a)}else{this.pluginApi.setCurrentTime(a)}this.currentTime=a}},setVolume:function(a){if(this.pluginApi!=null){if(this.pluginType=="youtube"){this.pluginApi.setVolume(a*100)}else{this.pluginApi.setVolume(a)}this.volume=a}},setMuted:function(a){if(this.pluginApi!=null){if(this.pluginType=="youtube"){if(a){this.pluginApi.mute()}else{this.pluginApi.unMute()}this.muted=a;this.dispatchEvent("volumechange")}else{this.pluginApi.setMuted(a)}this.muted=a}},setVideoSize:function(b,a){if(this.pluginElement.style){this.pluginElement.style.width=b+"px";this.pluginElement.style.height=a+"px"}if(this.pluginApi!=null&&this.pluginApi.setVideoSize){this.pluginApi.setVideoSize(b,a)}},setFullscreen:function(a){if(this.pluginApi!=null&&this.pluginApi.setFullscreen){this.pluginApi.setFullscreen(a)}},enterFullScreen:function(){if(this.pluginApi!=null&&this.pluginApi.setFullscreen){this.setFullscreen(true)}},exitFullScreen:function(){if(this.pluginApi!=null&&this.pluginApi.setFullscreen){this.setFullscreen(false)}},addEventListener:function(b,c,a){this.events[b]=this.events[b]||[];this.events[b].push(c)},removeEventListener:function(a,c){if(!a){this.events={};return true}var b=this.events[a];if(!b){return true}if(!c){this.events[a]=[];return true}for(i=0;i<b.length;i++){if(b[i]===c){this.events[a].splice(i,1);return true}}return false},dispatchEvent:function(a){var c,b,d=this.events[a];if(d){b=Array.prototype.slice.call(arguments,1);for(c=0;c<d.length;c++){d[c].apply(null,b)}}},attributes:{},hasAttribute:function(a){return(a in this.attributes)},removeAttribute:function(a){delete this.attributes[a]},getAttribute:function(a){if(this.hasAttribute(a)){return this.attributes[a]}return""},setAttribute:function(a,b){this.attributes[a]=b},remove:function(){mejs.Utility.removeSwf(this.pluginElement.id)}};mejs.MediaPluginBridge={pluginMediaElements:{},htmlMediaElements:{},registerPluginElement:function(c,a,b){this.pluginMediaElements[c]=a;this.htmlMediaElements[c]=b},initPlugin:function(c){var a=this.pluginMediaElements[c],b=this.htmlMediaElements[c];if(a){switch(a.pluginType){case"flash":a.pluginElement=a.pluginApi=document.getElementById(c);break;case"silverlight":a.pluginElement=document.getElementById(a.id);a.pluginApi=a.pluginElement.Content.MediaElementJS;break}if(a.pluginApi!=null&&a.success){a.success(a,b)}}},fireEvent:function(h,c,b){var g,f,a,d=this.pluginMediaElements[h];g={type:c,target:d};for(f in b){d[f]=b[f];g[f]=b[f]}a=b.bufferedTime||0;g.target.buffered=g.buffered={start:function(e){return 0},end:function(e){return a},length:1};d.dispatchEvent(g.type,g)}};mejs.MediaElementDefaults={mode:"auto",plugins:["flash","silverlight","youtube","vimeo"],enablePluginDebug:false,type:"",pluginPath:mejs.Utility.getScriptPath(["mediaelement.js","mediaelement.min.js","mediaelement-and-player.js","mediaelement-and-player.min.js"]),flashName:"flashmediaelement.swf",flashStreamer:"",enablePluginSmoothing:false,silverlightName:"silverlightmediaelement.xap",defaultVideoWidth:480,defaultVideoHeight:270,pluginWidth:-1,pluginHeight:-1,pluginVars:[],timerRate:250,startVolume:0.8,success:function(){},error:function(){}};mejs.MediaElement=function(a,b){return mejs.HtmlMediaElementShim.create(a,b)};mejs.HtmlMediaElementShim={create:function(e,d){var n=mejs.MediaElementDefaults,k=(typeof(e)=="string")?document.getElementById(e):e,h=k.tagName.toLowerCase(),g=(h==="audio"||h==="video"),b=(g)?k.getAttribute("src"):k.getAttribute("href"),l=k.getAttribute("poster"),f=k.getAttribute("autoplay"),j=k.getAttribute("preload"),m=k.getAttribute("controls"),a,c;for(c in d){n[c]=d[c]}b=(typeof b=="undefined"||b===null||b=="")?null:b;l=(typeof l=="undefined"||l===null)?"":l;j=(typeof j=="undefined"||j===null||j==="false")?"none":j;f=!(typeof f=="undefined"||f===null||f==="false");m=!(typeof m=="undefined"||m===null||m==="false");a=this.determinePlayback(k,n,mejs.MediaFeatures.supportsMediaTag,g,b);a.url=(a.url!==null)?mejs.Utility.absolutizeUrl(a.url):"";if(a.method=="native"){if(mejs.MediaFeatures.isBustedAndroid){k.src=a.url;k.addEventListener("click",function(){k.play()},false)}return this.updateNative(a,n,f,j)}else{if(a.method!==""){return this.createPlugin(a,n,l,f,j,m)}else{this.createErrorMessage(a,n,l);return this}}},determinePlayback:function(t,c,h,v,f){var o=[],s,r,q,p,m,d,g={method:"",url:"",htmlMediaElement:t,isVideo:(t.tagName.toLowerCase()!="audio")},a,b,u,w,e;if(typeof c.type!="undefined"&&c.type!==""){if(typeof c.type=="string"){o.push({type:c.type,url:f})}else{for(s=0;s<c.type.length;s++){o.push({type:c.type[s],url:f})}}}else{if(f!==null){d=this.formatType(f,t.getAttribute("type"));o.push({type:d,url:f})}else{for(s=0;s<t.childNodes.length;s++){m=t.childNodes[s];if(m.nodeType==1&&m.tagName.toLowerCase()=="source"){f=m.getAttribute("src");d=this.formatType(f,m.getAttribute("type"));e=m.getAttribute("media");if(!e||!window.matchMedia||(window.matchMedia&&window.matchMedia(e).matches)){o.push({type:d,url:f})}}}}}if(!v&&o.length>0&&o[0].url!==null&&this.getTypeFromFile(o[0].url).indexOf("audio")>-1){g.isVideo=false}if(mejs.MediaFeatures.isBustedAndroid){t.canPlayType=function(j){return(j.match(/video\/(mp4|m4v)/gi)!==null)?"maybe":""}}if(h&&(c.mode==="auto"||c.mode==="auto_plugin"||c.mode==="native")){if(!v){w=document.createElement(g.isVideo?"video":"audio");t.parentNode.insertBefore(w,t);t.style.display="none";g.htmlMediaElement=t=w}for(s=0;s<o.length;s++){if(t.canPlayType(o[s].type).replace(/no/,"")!==""||t.canPlayType(o[s].type.replace(/mp3/,"mpeg")).replace(/no/,"")!==""){g.method="native";g.url=o[s].url;break}}if(g.method==="native"){if(g.url!==null){t.src=g.url}if(c.mode!=="auto_plugin"){return g}}}if(c.mode==="auto"||c.mode==="auto_plugin"||c.mode==="shim"){for(s=0;s<o.length;s++){d=o[s].type;for(r=0;r<c.plugins.length;r++){a=c.plugins[r];b=mejs.plugins[a];for(q=0;q<b.length;q++){u=b[q];if(u.version==null||mejs.PluginDetector.hasPluginVersion(a,u.version)){for(p=0;p<u.types.length;p++){if(d==u.types[p]){g.method=a;g.url=o[s].url;return g}}}}}}}if(c.mode==="auto_plugin"&&g.method==="native"){return g}if(g.method===""&&o.length>0){g.url=o[0].url}return g},formatType:function(a,c){var b;if(a&&!c){return this.getTypeFromFile(a)}else{if(c&&~c.indexOf(";")){return c.substr(0,c.indexOf(";"))}else{return c}}},getTypeFromFile:function(a){a=a.split("?")[0];var b=a.substring(a.lastIndexOf(".")+1);return(/(mp4|m4v|ogg|ogv|webm|webmv|flv|wmv|mpeg|mov)/gi.test(b)?"video":"audio")+"/"+this.getTypeFromExtension(b)},getTypeFromExtension:function(a){switch(a){case"mp4":case"m4v":return"mp4";case"webm":case"webma":case"webmv":return"webm";case"ogg":case"oga":case"ogv":return"ogg";default:return a}},createErrorMessage:function(c,b,g){var d=c.htmlMediaElement,a=document.createElement("div");a.className="me-cannotplay";try{a.style.width=d.width+"px";a.style.height=d.height+"px"}catch(f){}a.innerHTML=(g!=="")?'<a href="'+c.url+'"><img src="'+g+'" width="100%" height="100%" /></a>':'<a href="'+c.url+'"><span>'+mejs.i18n.t("Download File")+"</span></a>";d.parentNode.insertBefore(a,d);d.style.display="none";b.error(d)},createPlugin:function(n,a,c,e,d,h){var r=n.htmlMediaElement,m=1,l=1,s="me_"+n.method+"_"+(mejs.meIndex++),o=new mejs.PluginMediaElement(s,n.method,n.url),g=document.createElement("div"),b,p,j;o.tagName=r.tagName;for(var q=0;q<r.attributes.length;q++){var f=r.attributes[q];if(f.specified==true){o.setAttribute(f.name,f.value)}}p=r.parentNode;while(p!==null&&p.tagName.toLowerCase()!="body"){if(p.parentNode.tagName.toLowerCase()=="p"){p.parentNode.parentNode.insertBefore(p,p.parentNode);break}p=p.parentNode}if(n.isVideo){m=(a.videoWidth>0)?a.videoWidth:(r.getAttribute("width")!==null)?r.getAttribute("width"):a.defaultVideoWidth;l=(a.videoHeight>0)?a.videoHeight:(r.getAttribute("height")!==null)?r.getAttribute("height"):a.defaultVideoHeight;m=mejs.Utility.encodeUrl(m);l=mejs.Utility.encodeUrl(l)}else{if(a.enablePluginDebug){m=320;l=240}}o.success=a.success;mejs.MediaPluginBridge.registerPluginElement(s,o,r);g.className="me-plugin";g.id=s+"_container";if(n.isVideo){r.parentNode.insertBefore(g,r)}else{document.body.insertBefore(g,document.body.childNodes[0])}j=["id="+s,"isvideo="+((n.isVideo)?"true":"false"),"autoplay="+((e)?"true":"false"),"preload="+d,"width="+m,"startvolume="+a.startVolume,"timerrate="+a.timerRate,"flashstreamer="+a.flashStreamer,"height="+l];if(n.url!==null){if(n.method=="flash"){j.push("file="+mejs.Utility.encodeUrl(n.url))}else{j.push("file="+n.url)}}if(a.enablePluginDebug){j.push("debug=true")}if(a.enablePluginSmoothing){j.push("smoothing=true")}if(h){j.push("controls=true")}if(a.pluginVars){j=j.concat(a.pluginVars)}switch(n.method){case"silverlight":g.innerHTML='<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="'+s+'" name="'+s+'" width="'+m+'" height="'+l+'"><param name="initParams" value="'+j.join(",")+'" /><param name="windowless" value="true" /><param name="background" value="black" /><param name="minRuntimeVersion" value="3.0.0.0" /><param name="autoUpgrade" value="true" /><param name="source" value="'+a.pluginPath+a.silverlightName+'" /></object>';break;case"flash":if(mejs.MediaFeatures.isIE){b=document.createElement("div");g.appendChild(b);b.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+s+'" width="'+m+'" height="'+l+'"><param name="movie" value="'+a.pluginPath+a.flashName+"?x="+(new Date())+'" /><param name="flashvars" value="'+j.join("&amp;")+'" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /></object>'}else{g.innerHTML='<embed id="'+s+'" name="'+s+'" play="true" loop="false" quality="high" bgcolor="#000000" wmode="transparent" allowScriptAccess="always" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" src="'+a.pluginPath+a.flashName+'" flashvars="'+j.join("&")+'" width="'+m+'" height="'+l+'"></embed>'}break;case"youtube":var k=n.url.substr(n.url.lastIndexOf("=")+1);youtubeSettings={container:g,containerId:g.id,pluginMediaElement:o,pluginId:s,videoId:k,height:l,width:m};if(mejs.PluginDetector.hasPluginVersion("flash",[10,0,0])){mejs.YouTubeApi.createFlash(youtubeSettings)}else{mejs.YouTubeApi.enqueueIframe(youtubeSettings)}break;case"vimeo":o.vimeoid=n.url.substr(n.url.lastIndexOf("/")+1);g.innerHTML='<iframe src="http://player.vimeo.com/video/'+o.vimeoid+'?portrait=0&byline=0&title=0" width="'+m+'" height="'+l+'" frameborder="0"></iframe>';break}r.style.display="none";return o},updateNative:function(d,c,f,b){var e=d.htmlMediaElement,a;for(a in mejs.HtmlMediaElement){e[a]=mejs.HtmlMediaElement[a]}c.success(e,e);return e}};mejs.YouTubeApi={isIframeStarted:false,isIframeLoaded:false,loadIframeApi:function(){if(!this.isIframeStarted){var a=document.createElement("script");a.src="http://www.youtube.com/player_api";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);this.isIframeStarted=true}},iframeQueue:[],enqueueIframe:function(a){if(this.isLoaded){this.createIframe(a)}else{this.loadIframeApi();this.iframeQueue.push(a)}},createIframe:function(c){var b=c.pluginMediaElement,a=new YT.Player(c.containerId,{height:c.height,width:c.width,videoId:c.videoId,playerVars:{controls:0},events:{onReady:function(){c.pluginMediaElement.pluginApi=a;mejs.MediaPluginBridge.initPlugin(c.pluginId);setInterval(function(){mejs.YouTubeApi.createEvent(a,b,"timeupdate")},250)},onStateChange:function(d){mejs.YouTubeApi.handleStateChange(d.data,a,b)}}})},createEvent:function(d,c,b){var e={type:b,target:c};if(d&&d.getDuration){c.currentTime=e.currentTime=d.getCurrentTime();c.duration=e.duration=d.getDuration();e.paused=c.paused;e.ended=c.ended;e.muted=d.isMuted();e.volume=d.getVolume()/100;e.bytesTotal=d.getVideoBytesTotal();e.bufferedBytes=d.getVideoBytesLoaded();var a=e.bufferedBytes/e.bytesTotal*e.duration;e.target.buffered=e.buffered={start:function(f){return 0},end:function(f){return a},length:1}}c.dispatchEvent(e.type,e)},iFrameReady:function(){this.isLoaded=true;this.isIframeLoaded=true;while(this.iframeQueue.length>0){var a=this.iframeQueue.pop();this.createIframe(a)}},flashPlayers:{},createFlash:function(c){this.flashPlayers[c.pluginId]=c;var b,a="http://www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid="+c.pluginId+"&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0";if(mejs.MediaFeatures.isIE){b=document.createElement("div");c.container.appendChild(b);b.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+c.pluginId+'" width="'+c.width+'" height="'+c.height+'"><param name="movie" value="'+a+'" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /></object>'}else{c.container.innerHTML='<object type="application/x-shockwave-flash" id="'+c.pluginId+'" data="'+a+'" width="'+c.width+'" height="'+c.height+'" style="visibility: visible; "><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>'}},flashReady:function(e){var c=this.flashPlayers[e],b=document.getElementById(e),a=c.pluginMediaElement;a.pluginApi=a.pluginElement=b;mejs.MediaPluginBridge.initPlugin(e);b.cueVideoById(c.videoId);var d=c.containerId+"_callback";window[d]=function(f){mejs.YouTubeApi.handleStateChange(f,b,a)};b.addEventListener("onStateChange",d);setInterval(function(){mejs.YouTubeApi.createEvent(b,a,"timeupdate")},250)},handleStateChange:function(c,b,a){switch(c){case -1:a.paused=true;a.ended=true;mejs.YouTubeApi.createEvent(b,a,"loadedmetadata");break;case 0:a.paused=false;a.ended=true;mejs.YouTubeApi.createEvent(b,a,"ended");break;case 1:a.paused=false;a.ended=false;mejs.YouTubeApi.createEvent(b,a,"play");mejs.YouTubeApi.createEvent(b,a,"playing");break;case 2:a.paused=true;a.ended=false;mejs.YouTubeApi.createEvent(b,a,"pause");break;case 3:mejs.YouTubeApi.createEvent(b,a,"progress");break;case 5:break}}};function onYouTubePlayerAPIReady(){mejs.YouTubeApi.iFrameReady()}function onYouTubePlayerReady(a){mejs.YouTubeApi.flashReady(a)}window.mejs=mejs;window.MediaElement=mejs.MediaElement; 
    15 /*! 
    16  * Adds Internationalization and localization to objects. 
    17  * 
    18  * What is the concept beyond i18n? 
    19  *   http://en.wikipedia.org/wiki/Internationalization_and_localization 
    20  * 
    21  * 
    22  * This file both i18n methods and locale which is used to translate 
    23  * strings into other languages. 
    24  * 
    25  * Default translations are not available, you have to add them 
    26  * through locale objects which are named exactly as the langcode 
    27  * they stand for. The default language is always english (en). 
    28  * 
    29  * 
    30  * Wrapper built to be able to attach the i18n object to 
    31  * other objects without changing more than one line. 
    32  * 
    33  * 
    34  * LICENSE: 
    35  * 
    36  *   The i18n file uses methods from the Drupal project (drupal.js): 
    37  *     - i18n.methods.t() (modified) 
    38  *     - i18n.methods.checkPlain() (full copy) 
    39  *     - i18n.methods.formatString() (full copy) 
    40  * 
    41  *   The Drupal project is (like mediaelementjs) licensed under GPLv2. 
    42  *    - http://drupal.org/licensing/faq/#q1 
    43  *    - https://github.com/johndyer/mediaelement 
    44  *    - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 
    45  * 
    46  * 
    47  * @author 
    48  *   Tim Latz (latz.tim@gmail.com) 
    49  * 
    50  * @see 
    51  *   me-i18n-locale.js 
    52  * 
    53  * @params 
    54  *  - $       - zepto || jQuery  .. 
    55  *  - context - document, iframe .. 
    56  *  - exports - CommonJS, window .. 
    57  * 
    58  */ 
    59 (function(d,b,a,e){var c={locale:{strings:{}},methods:{}};c.locale.getLanguage=function(){return{language:navigator.language}};c.locale.INIT_LANGUAGE=c.locale.getLanguage();c.methods.checkPlain=function(j){var h,g,f={"&":"&amp;",'"':"&quot;","<":"&lt;",">":"&gt;"};j=String(j);for(h in f){if(f.hasOwnProperty(h)){g=new RegExp(h,"g");j=j.replace(g,f[h])}}return j};c.methods.formatString=function(h,f){for(var g in f){switch(g.charAt(0)){case"@":f[g]=c.methods.checkPlain(f[g]);break;case"!":break;case"%":default:f[g]='<em class="placeholder">'+c.methods.checkPlain(f[g])+"</em>";break}h=h.replace(g,f[g])}return h};c.methods.t=function(h,g,f){if(c.locale.strings&&c.locale.strings[f.context]&&c.locale.strings[f.context][h]){h=c.locale.strings[f.context][h]}if(g){h=c.methods.formatString(h,g)}return h};c.t=function(j,g,f){if(typeof j==="string"&&j.length>0){var h=c.locale.getLanguage();f=f||{context:h.language};return c.methods.t(j,g,f)}else{throw {name:"InvalidArgumentException",message:"First argument is either not a string or empty."}}};a.i18n=c}(jQuery,document,mejs)); 
    60 /*! 
    61  * This is a i18n.locale language object. 
    62  * 
    63  *<de> German translation by Tim Latz, latz.tim@gmail.com 
    64  * 
    65  * @author 
    66  *   Tim Latz (latz.tim@gmail.com) 
    67  * 
    68  * @see 
    69  *   me-i18n.js 
    70  * 
    71  * @params 
    72  *  - exports - CommonJS, window .. 
    73  */ 
    74 (function(a,b){a.de={Fullscreen:"Vollbild","Go Fullscreen":"Vollbild an","Turn off Fullscreen":"Vollbild aus",Close:"Schließen"}}(mejs.i18n.locale.strings)); 
     13*/var mejs=mejs||{};mejs.version="2.11.0";mejs.meIndex=0; 
     14mejs.plugins={silverlight:[{version:[3,0],types:["video/mp4","video/m4v","video/mov","video/wmv","audio/wma","audio/m4a","audio/mp3","audio/wav","audio/mpeg"]}],flash:[{version:[9,0,124],types:["video/mp4","video/m4v","video/mov","video/flv","video/rtmp","video/x-flv","audio/flv","audio/x-flv","audio/mp3","audio/m4a","audio/mpeg","video/youtube","video/x-youtube"]}],youtube:[{version:null,types:["video/youtube","video/x-youtube","audio/youtube","audio/x-youtube"]}],vimeo:[{version:null,types:["video/vimeo", 
     15"video/x-vimeo"]}]}; 
     16mejs.Utility={encodeUrl:function(a){return encodeURIComponent(a)},escapeHTML:function(a){return a.toString().split("&").join("&amp;").split("<").join("&lt;").split('"').join("&quot;")},absolutizeUrl:function(a){var b=document.createElement("div");b.innerHTML='<a href="'+this.escapeHTML(a)+'">x</a>';return b.firstChild.href},getScriptPath:function(a){for(var b=0,c,d="",e="",g,f=document.getElementsByTagName("script"),h=f.length,l=a.length;b<h;b++){g=f[b].src;for(c=0;c<l;c++){e=a[c];if(g.indexOf(e)> 
     17-1){d=g.substring(0,g.indexOf(e));break}}if(d!=="")break}return d},secondsToTimeCode:function(a,b,c,d){if(typeof c=="undefined")c=false;else if(typeof d=="undefined")d=25;var e=Math.floor(a/3600)%24,g=Math.floor(a/60)%60,f=Math.floor(a%60);a=Math.floor((a%1*d).toFixed(3));return(b||e>0?(e<10?"0"+e:e)+":":"")+(g<10?"0"+g:g)+":"+(f<10?"0"+f:f)+(c?":"+(a<10?"0"+a:a):"")},timeCodeToSeconds:function(a,b,c,d){if(typeof c=="undefined")c=false;else if(typeof d=="undefined")d=25;a=a.split(":");b=parseInt(a[0], 
     1810);var e=parseInt(a[1],10),g=parseInt(a[2],10),f=0,h=0;if(c)f=parseInt(a[3])/d;return h=b*3600+e*60+g+f},convertSMPTEtoSeconds:function(a){if(typeof a!="string")return false;a=a.replace(",",".");var b=0,c=a.indexOf(".")!=-1?a.split(".")[1].length:0,d=1;a=a.split(":").reverse();for(var e=0;e<a.length;e++){d=1;if(e>0)d=Math.pow(60,e);b+=Number(a[e])*d}return Number(b.toFixed(c))},removeSwf:function(a){var b=document.getElementById(a);if(b&&/object|embed/i.test(b.nodeName))if(mejs.MediaFeatures.isIE){b.style.display= 
     19"none";(function(){b.readyState==4?mejs.Utility.removeObjectInIE(a):setTimeout(arguments.callee,10)})()}else b.parentNode.removeChild(b)},removeObjectInIE:function(a){if(a=document.getElementById(a)){for(var b in a)if(typeof a[b]=="function")a[b]=null;a.parentNode.removeChild(a)}}}; 
     20mejs.PluginDetector={hasPluginVersion:function(a,b){var c=this.plugins[a];b[1]=b[1]||0;b[2]=b[2]||0;return c[0]>b[0]||c[0]==b[0]&&c[1]>b[1]||c[0]==b[0]&&c[1]==b[1]&&c[2]>=b[2]?true:false},nav:window.navigator,ua:window.navigator.userAgent.toLowerCase(),plugins:[],addPlugin:function(a,b,c,d,e){this.plugins[a]=this.detectPlugin(b,c,d,e)},detectPlugin:function(a,b,c,d){var e=[0,0,0],g;if(typeof this.nav.plugins!="undefined"&&typeof this.nav.plugins[a]=="object"){if((c=this.nav.plugins[a].description)&& 
     21!(typeof this.nav.mimeTypes!="undefined"&&this.nav.mimeTypes[b]&&!this.nav.mimeTypes[b].enabledPlugin)){e=c.replace(a,"").replace(/^\s+/,"").replace(/\sr/gi,".").split(".");for(a=0;a<e.length;a++)e[a]=parseInt(e[a].match(/\d+/),10)}}else if(typeof window.ActiveXObject!="undefined")try{if(g=new ActiveXObject(c))e=d(g)}catch(f){}return e}}; 
     22mejs.PluginDetector.addPlugin("flash","Shockwave Flash","application/x-shockwave-flash","ShockwaveFlash.ShockwaveFlash",function(a){var b=[];if(a=a.GetVariable("$version")){a=a.split(" ")[1].split(",");b=[parseInt(a[0],10),parseInt(a[1],10),parseInt(a[2],10)]}return b}); 
     23mejs.PluginDetector.addPlugin("silverlight","Silverlight Plug-In","application/x-silverlight-2","AgControl.AgControl",function(a){var b=[0,0,0,0],c=function(d,e,g,f){for(;d.isVersionSupported(e[0]+"."+e[1]+"."+e[2]+"."+e[3]);)e[g]+=f;e[g]-=f};c(a,b,0,1);c(a,b,1,1);c(a,b,2,1E4);c(a,b,2,1E3);c(a,b,2,100);c(a,b,2,10);c(a,b,2,1);c(a,b,3,1);return b}); 
     24mejs.MediaFeatures={init:function(){var a=this,b=document,c=mejs.PluginDetector.nav,d=mejs.PluginDetector.ua.toLowerCase(),e,g=["source","track","audio","video"];a.isiPad=d.match(/ipad/i)!==null;a.isiPhone=d.match(/iphone/i)!==null;a.isiOS=a.isiPhone||a.isiPad;a.isAndroid=d.match(/android/i)!==null;a.isBustedAndroid=d.match(/android 2\.[12]/)!==null;a.isIE=c.appName.toLowerCase().indexOf("microsoft")!=-1;a.isChrome=d.match(/chrome/gi)!==null;a.isFirefox=d.match(/firefox/gi)!==null;a.isWebkit=d.match(/webkit/gi)!== 
     25null;a.isGecko=d.match(/gecko/gi)!==null&&!a.isWebkit;a.isOpera=d.match(/opera/gi)!==null;a.hasTouch="ontouchstart"in window;a.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect;for(c=0;c<g.length;c++)e=document.createElement(g[c]);a.supportsMediaTag=typeof e.canPlayType!=="undefined"||a.isBustedAndroid;a.hasSemiNativeFullScreen=typeof e.webkitEnterFullscreen!=="undefined";a.hasWebkitNativeFullScreen=typeof e.webkitRequestFullScreen!=="undefined"; 
     26a.hasMozNativeFullScreen=typeof e.mozRequestFullScreen!=="undefined";a.hasTrueNativeFullScreen=a.hasWebkitNativeFullScreen||a.hasMozNativeFullScreen;a.nativeFullScreenEnabled=a.hasTrueNativeFullScreen;if(a.hasMozNativeFullScreen)a.nativeFullScreenEnabled=e.mozFullScreenEnabled;if(this.isChrome)a.hasSemiNativeFullScreen=false;if(a.hasTrueNativeFullScreen){a.fullScreenEventName=a.hasWebkitNativeFullScreen?"webkitfullscreenchange":"mozfullscreenchange";a.isFullScreen=function(){if(e.mozRequestFullScreen)return b.mozFullScreen; 
     27else if(e.webkitRequestFullScreen)return b.webkitIsFullScreen};a.requestFullScreen=function(f){if(a.hasWebkitNativeFullScreen)f.webkitRequestFullScreen();else a.hasMozNativeFullScreen&&f.mozRequestFullScreen()};a.cancelFullScreen=function(){if(a.hasWebkitNativeFullScreen)document.webkitCancelFullScreen();else a.hasMozNativeFullScreen&&document.mozCancelFullScreen()}}if(a.hasSemiNativeFullScreen&&d.match(/mac os x 10_5/i)){a.hasNativeFullScreen=false;a.hasSemiNativeFullScreen=false}}};mejs.MediaFeatures.init(); 
     28mejs.HtmlMediaElement={pluginType:"native",isFullScreen:false,setCurrentTime:function(a){this.currentTime=a},setMuted:function(a){this.muted=a},setVolume:function(a){this.volume=a},stop:function(){this.pause()},setSrc:function(a){for(var b=this.getElementsByTagName("source");b.length>0;)this.removeChild(b[0]);if(typeof a=="string")this.src=a;else{var c;for(b=0;b<a.length;b++){c=a[b];if(this.canPlayType(c.type)){this.src=c.src;break}}}},setVideoSize:function(a,b){this.width=a;this.height=b}}; 
     29mejs.PluginMediaElement=function(a,b,c){this.id=a;this.pluginType=b;this.src=c;this.events={};this.attributes={}}; 
     30mejs.PluginMediaElement.prototype={pluginElement:null,pluginType:"",isFullScreen:false,playbackRate:-1,defaultPlaybackRate:-1,seekable:[],played:[],paused:true,ended:false,seeking:false,duration:0,error:null,tagName:"",muted:false,volume:1,currentTime:0,play:function(){if(this.pluginApi!=null){this.pluginType=="youtube"?this.pluginApi.playVideo():this.pluginApi.playMedia();this.paused=false}},load:function(){if(this.pluginApi!=null){this.pluginType!="youtube"&&this.pluginApi.loadMedia();this.paused= 
     31false}},pause:function(){if(this.pluginApi!=null){this.pluginType=="youtube"?this.pluginApi.pauseVideo():this.pluginApi.pauseMedia();this.paused=true}},stop:function(){if(this.pluginApi!=null){this.pluginType=="youtube"?this.pluginApi.stopVideo():this.pluginApi.stopMedia();this.paused=true}},canPlayType:function(a){var b,c,d,e=mejs.plugins[this.pluginType];for(b=0;b<e.length;b++){d=e[b];if(mejs.PluginDetector.hasPluginVersion(this.pluginType,d.version))for(c=0;c<d.types.length;c++)if(a==d.types[c])return"probably"}return""}, 
     32positionFullscreenButton:function(a,b,c){this.pluginApi!=null&&this.pluginApi.positionFullscreenButton&&this.pluginApi.positionFullscreenButton(a,b,c)},hideFullscreenButton:function(){this.pluginApi!=null&&this.pluginApi.hideFullscreenButton&&this.pluginApi.hideFullscreenButton()},setSrc:function(a){if(typeof a=="string"){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(a));this.src=mejs.Utility.absolutizeUrl(a)}else{var b,c;for(b=0;b<a.length;b++){c=a[b];if(this.canPlayType(c.type)){this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(c.src)); 
     33this.src=mejs.Utility.absolutizeUrl(a);break}}}},setCurrentTime:function(a){if(this.pluginApi!=null){this.pluginType=="youtube"?this.pluginApi.seekTo(a):this.pluginApi.setCurrentTime(a);this.currentTime=a}},setVolume:function(a){if(this.pluginApi!=null){this.pluginType=="youtube"?this.pluginApi.setVolume(a*100):this.pluginApi.setVolume(a);this.volume=a}},setMuted:function(a){if(this.pluginApi!=null){if(this.pluginType=="youtube"){a?this.pluginApi.mute():this.pluginApi.unMute();this.muted=a;this.dispatchEvent("volumechange")}else this.pluginApi.setMuted(a); 
     34this.muted=a}},setVideoSize:function(a,b){if(this.pluginElement.style){this.pluginElement.style.width=a+"px";this.pluginElement.style.height=b+"px"}this.pluginApi!=null&&this.pluginApi.setVideoSize&&this.pluginApi.setVideoSize(a,b)},setFullscreen:function(a){this.pluginApi!=null&&this.pluginApi.setFullscreen&&this.pluginApi.setFullscreen(a)},enterFullScreen:function(){this.pluginApi!=null&&this.pluginApi.setFullscreen&&this.setFullscreen(true)},exitFullScreen:function(){this.pluginApi!=null&&this.pluginApi.setFullscreen&& 
     35this.setFullscreen(false)},addEventListener:function(a,b){this.events[a]=this.events[a]||[];this.events[a].push(b)},removeEventListener:function(a,b){if(!a){this.events={};return true}var c=this.events[a];if(!c)return true;if(!b){this.events[a]=[];return true}for(i=0;i<c.length;i++)if(c[i]===b){this.events[a].splice(i,1);return true}return false},dispatchEvent:function(a){var b,c,d=this.events[a];if(d){c=Array.prototype.slice.call(arguments,1);for(b=0;b<d.length;b++)d[b].apply(null,c)}},hasAttribute:function(a){return a in 
     36this.attributes},removeAttribute:function(a){delete this.attributes[a]},getAttribute:function(a){if(this.hasAttribute(a))return this.attributes[a];return""},setAttribute:function(a,b){this.attributes[a]=b},remove:function(){mejs.Utility.removeSwf(this.pluginElement.id);mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id)}}; 
     37mejs.MediaPluginBridge={pluginMediaElements:{},htmlMediaElements:{},registerPluginElement:function(a,b,c){this.pluginMediaElements[a]=b;this.htmlMediaElements[a]=c},unregisterPluginElement:function(a){delete this.pluginMediaElements[a];delete this.htmlMediaElements[a]},initPlugin:function(a){var b=this.pluginMediaElements[a],c=this.htmlMediaElements[a];if(b){switch(b.pluginType){case "flash":b.pluginElement=b.pluginApi=document.getElementById(a);break;case "silverlight":b.pluginElement=document.getElementById(b.id); 
     38b.pluginApi=b.pluginElement.Content.MediaElementJS}b.pluginApi!=null&&b.success&&b.success(b,c)}},fireEvent:function(a,b,c){var d,e;a=this.pluginMediaElements[a];b={type:b,target:a};for(d in c){a[d]=c[d];b[d]=c[d]}e=c.bufferedTime||0;b.target.buffered=b.buffered={start:function(){return 0},end:function(){return e},length:1};a.dispatchEvent(b.type,b)}}; 
     39mejs.MediaElementDefaults={mode:"auto",plugins:["flash","silverlight","youtube","vimeo"],enablePluginDebug:false,type:"",pluginPath:mejs.Utility.getScriptPath(["mediaelement.js","mediaelement.min.js","mediaelement-and-player.js","mediaelement-and-player.min.js"]),flashName:"flashmediaelement.swf",flashStreamer:"",enablePluginSmoothing:false,silverlightName:"silverlightmediaelement.xap",defaultVideoWidth:480,defaultVideoHeight:270,pluginWidth:-1,pluginHeight:-1,pluginVars:[],timerRate:250,startVolume:0.8, 
     40success:function(){},error:function(){}};mejs.MediaElement=function(a,b){return mejs.HtmlMediaElementShim.create(a,b)}; 
     41mejs.HtmlMediaElementShim={create:function(a,b){var c=mejs.MediaElementDefaults,d=typeof a=="string"?document.getElementById(a):a,e=d.tagName.toLowerCase(),g=e==="audio"||e==="video",f=g?d.getAttribute("src"):d.getAttribute("href");e=d.getAttribute("poster");var h=d.getAttribute("autoplay"),l=d.getAttribute("preload"),j=d.getAttribute("controls"),k;for(k in b)c[k]=b[k];f=typeof f=="undefined"||f===null||f==""?null:f;e=typeof e=="undefined"||e===null?"":e;l=typeof l=="undefined"||l===null||l==="false"? 
     42"none":l;h=!(typeof h=="undefined"||h===null||h==="false");j=!(typeof j=="undefined"||j===null||j==="false");k=this.determinePlayback(d,c,mejs.MediaFeatures.supportsMediaTag,g,f);k.url=k.url!==null?mejs.Utility.absolutizeUrl(k.url):"";if(k.method=="native"){if(mejs.MediaFeatures.isBustedAndroid){d.src=k.url;d.addEventListener("click",function(){d.play()},false)}return this.updateNative(k,c,h,l)}else if(k.method!=="")return this.createPlugin(k,c,e,h,l,j);else{this.createErrorMessage(k,c,e);return this}}, 
     43determinePlayback:function(a,b,c,d,e){var g=[],f,h,l,j={method:"",url:"",htmlMediaElement:a,isVideo:a.tagName.toLowerCase()!="audio"},k;if(typeof b.type!="undefined"&&b.type!=="")if(typeof b.type=="string")g.push({type:b.type,url:e});else for(f=0;f<b.type.length;f++)g.push({type:b.type[f],url:e});else if(e!==null){l=this.formatType(e,a.getAttribute("type"));g.push({type:l,url:e})}else for(f=0;f<a.childNodes.length;f++){h=a.childNodes[f];if(h.nodeType==1&&h.tagName.toLowerCase()=="source"){e=h.getAttribute("src"); 
     44l=this.formatType(e,h.getAttribute("type"));h=h.getAttribute("media");if(!h||!window.matchMedia||window.matchMedia&&window.matchMedia(h).matches)g.push({type:l,url:e})}}if(!d&&g.length>0&&g[0].url!==null&&this.getTypeFromFile(g[0].url).indexOf("audio")>-1)j.isVideo=false;if(mejs.MediaFeatures.isBustedAndroid)a.canPlayType=function(m){return m.match(/video\/(mp4|m4v)/gi)!==null?"maybe":""};if(c&&(b.mode==="auto"||b.mode==="auto_plugin"||b.mode==="native")){if(!d){f=document.createElement(j.isVideo? 
     45"video":"audio");a.parentNode.insertBefore(f,a);a.style.display="none";j.htmlMediaElement=a=f}for(f=0;f<g.length;f++)if(a.canPlayType(g[f].type).replace(/no/,"")!==""||a.canPlayType(g[f].type.replace(/mp3/,"mpeg")).replace(/no/,"")!==""){j.method="native";j.url=g[f].url;break}if(j.method==="native"){if(j.url!==null)a.src=j.url;if(b.mode!=="auto_plugin")return j}}if(b.mode==="auto"||b.mode==="auto_plugin"||b.mode==="shim")for(f=0;f<g.length;f++){l=g[f].type;for(a=0;a<b.plugins.length;a++){e=b.plugins[a]; 
     46h=mejs.plugins[e];for(c=0;c<h.length;c++){k=h[c];if(k.version==null||mejs.PluginDetector.hasPluginVersion(e,k.version))for(d=0;d<k.types.length;d++)if(l==k.types[d]){j.method=e;j.url=g[f].url;return j}}}}if(b.mode==="auto_plugin"&&j.method==="native")return j;if(j.method===""&&g.length>0)j.url=g[0].url;return j},formatType:function(a,b){return a&&!b?this.getTypeFromFile(a):b&&~b.indexOf(";")?b.substr(0,b.indexOf(";")):b},getTypeFromFile:function(a){a=a.split("?")[0];a=a.substring(a.lastIndexOf(".")+ 
     471);return(/(mp4|m4v|ogg|ogv|webm|webmv|flv|wmv|mpeg|mov)/gi.test(a)?"video":"audio")+"/"+this.getTypeFromExtension(a)},getTypeFromExtension:function(a){switch(a){case "mp4":case "m4v":return"mp4";case "webm":case "webma":case "webmv":return"webm";case "ogg":case "oga":case "ogv":return"ogg";default:return a}},createErrorMessage:function(a,b,c){var d=a.htmlMediaElement,e=document.createElement("div");e.className="me-cannotplay";try{e.style.width=d.width+"px";e.style.height=d.height+"px"}catch(g){}e.innerHTML= 
     48c!==""?'<a href="'+a.url+'"><img src="'+c+'" width="100%" height="100%" /></a>':'<a href="'+a.url+'"><span>'+mejs.i18n.t("Download File")+"</span></a>";d.parentNode.insertBefore(e,d);d.style.display="none";b.error(d)},createPlugin:function(a,b,c,d,e,g){c=a.htmlMediaElement;var f=1,h=1,l="me_"+a.method+"_"+mejs.meIndex++,j=new mejs.PluginMediaElement(l,a.method,a.url),k=document.createElement("div"),m;j.tagName=c.tagName;for(m=0;m<c.attributes.length;m++){var n=c.attributes[m];n.specified==true&&j.setAttribute(n.name, 
     49n.value)}for(m=c.parentNode;m!==null&&m.tagName.toLowerCase()!="body";){if(m.parentNode.tagName.toLowerCase()=="p"){m.parentNode.parentNode.insertBefore(m,m.parentNode);break}m=m.parentNode}if(a.isVideo){f=b.videoWidth>0?b.videoWidth:c.getAttribute("width")!==null?c.getAttribute("width"):b.defaultVideoWidth;h=b.videoHeight>0?b.videoHeight:c.getAttribute("height")!==null?c.getAttribute("height"):b.defaultVideoHeight;f=mejs.Utility.encodeUrl(f);h=mejs.Utility.encodeUrl(h)}else if(b.enablePluginDebug){f= 
     50320;h=240}j.success=b.success;mejs.MediaPluginBridge.registerPluginElement(l,j,c);k.className="me-plugin";k.id=l+"_container";a.isVideo?c.parentNode.insertBefore(k,c):document.body.insertBefore(k,document.body.childNodes[0]);d=["id="+l,"isvideo="+(a.isVideo?"true":"false"),"autoplay="+(d?"true":"false"),"preload="+e,"width="+f,"startvolume="+b.startVolume,"timerrate="+b.timerRate,"flashstreamer="+b.flashStreamer,"height="+h];if(a.url!==null)a.method=="flash"?d.push("file="+mejs.Utility.encodeUrl(a.url)): 
     51d.push("file="+a.url);b.enablePluginDebug&&d.push("debug=true");b.enablePluginSmoothing&&d.push("smoothing=true");g&&d.push("controls=true");if(b.pluginVars)d=d.concat(b.pluginVars);switch(a.method){case "silverlight":k.innerHTML='<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="'+l+'" name="'+l+'" width="'+f+'" height="'+h+'" class="mejs-shim"><param name="initParams" value="'+d.join(",")+'" /><param name="windowless" value="true" /><param name="background" value="black" /><param name="minRuntimeVersion" value="3.0.0.0" /><param name="autoUpgrade" value="true" /><param name="source" value="'+ 
     52b.pluginPath+b.silverlightName+'" /></object>';break;case "flash":if(mejs.MediaFeatures.isIE){a=document.createElement("div");k.appendChild(a);a.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+l+'" width="'+f+'" height="'+h+'" class="mejs-shim"><param name="movie" value="'+b.pluginPath+b.flashName+"?x="+new Date+'" /><param name="flashvars" value="'+d.join("&amp;")+'" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /></object>'}else k.innerHTML= 
     53'<embed id="'+l+'" name="'+l+'" play="true" loop="false" quality="high" bgcolor="#000000" wmode="transparent" allowScriptAccess="always" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" src="'+b.pluginPath+b.flashName+'" flashvars="'+d.join("&")+'" width="'+f+'" height="'+h+'" class="mejs-shim"></embed>';break;case "youtube":b=a.url.substr(a.url.lastIndexOf("=")+1);youtubeSettings={container:k,containerId:k.id,pluginMediaElement:j,pluginId:l, 
     54videoId:b,height:h,width:f};mejs.PluginDetector.hasPluginVersion("flash",[10,0,0])?mejs.YouTubeApi.createFlash(youtubeSettings):mejs.YouTubeApi.enqueueIframe(youtubeSettings);break;case "vimeo":j.vimeoid=a.url.substr(a.url.lastIndexOf("/")+1);k.innerHTML='<iframe src="http://player.vimeo.com/video/'+j.vimeoid+'?portrait=0&byline=0&title=0" width="'+f+'" height="'+h+'" frameborder="0" class="mejs-shim"></iframe>'}c.style.display="none";return j},updateNative:function(a,b){var c=a.htmlMediaElement, 
     55d;for(d in mejs.HtmlMediaElement)c[d]=mejs.HtmlMediaElement[d];b.success(c,c);return c}}; 
     56mejs.YouTubeApi={isIframeStarted:false,isIframeLoaded:false,loadIframeApi:function(){if(!this.isIframeStarted){var a=document.createElement("script");a.src="http://www.youtube.com/player_api";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);this.isIframeStarted=true}},iframeQueue:[],enqueueIframe:function(a){if(this.isLoaded)this.createIframe(a);else{this.loadIframeApi();this.iframeQueue.push(a)}},createIframe:function(a){var b=a.pluginMediaElement,c=new YT.Player(a.containerId, 
     57{height:a.height,width:a.width,videoId:a.videoId,playerVars:{controls:0},events:{onReady:function(){a.pluginMediaElement.pluginApi=c;mejs.MediaPluginBridge.initPlugin(a.pluginId);setInterval(function(){mejs.YouTubeApi.createEvent(c,b,"timeupdate")},250)},onStateChange:function(d){mejs.YouTubeApi.handleStateChange(d.data,c,b)}}})},createEvent:function(a,b,c){c={type:c,target:b};if(a&&a.getDuration){b.currentTime=c.currentTime=a.getCurrentTime();b.duration=c.duration=a.getDuration();c.paused=b.paused; 
     58c.ended=b.ended;c.muted=a.isMuted();c.volume=a.getVolume()/100;c.bytesTotal=a.getVideoBytesTotal();c.bufferedBytes=a.getVideoBytesLoaded();var d=c.bufferedBytes/c.bytesTotal*c.duration;c.target.buffered=c.buffered={start:function(){return 0},end:function(){return d},length:1}}b.dispatchEvent(c.type,c)},iFrameReady:function(){for(this.isIframeLoaded=this.isLoaded=true;this.iframeQueue.length>0;)this.createIframe(this.iframeQueue.pop())},flashPlayers:{},createFlash:function(a){this.flashPlayers[a.pluginId]= 
     59a;var b,c="http://www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid="+a.pluginId+"&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0";if(mejs.MediaFeatures.isIE){b=document.createElement("div");a.container.appendChild(b);b.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" id="'+a.pluginId+'" width="'+a.width+'" height="'+a.height+'" class="mejs-shim"><param name="movie" value="'+ 
     60c+'" /><param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /></object>'}else a.container.innerHTML='<object type="application/x-shockwave-flash" id="'+a.pluginId+'" data="'+c+'" width="'+a.width+'" height="'+a.height+'" style="visibility: visible; " class="mejs-shim"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>'},flashReady:function(a){var b=this.flashPlayers[a],c= 
     61document.getElementById(a),d=b.pluginMediaElement;d.pluginApi=d.pluginElement=c;mejs.MediaPluginBridge.initPlugin(a);c.cueVideoById(b.videoId);a=b.containerId+"_callback";window[a]=function(e){mejs.YouTubeApi.handleStateChange(e,c,d)};c.addEventListener("onStateChange",a);setInterval(function(){mejs.YouTubeApi.createEvent(c,d,"timeupdate")},250)},handleStateChange:function(a,b,c){switch(a){case -1:c.paused=true;c.ended=true;mejs.YouTubeApi.createEvent(b,c,"loadedmetadata");break;case 0:c.paused=false; 
     62c.ended=true;mejs.YouTubeApi.createEvent(b,c,"ended");break;case 1:c.paused=false;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"play");mejs.YouTubeApi.createEvent(b,c,"playing");break;case 2:c.paused=true;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"pause");break;case 3:mejs.YouTubeApi.createEvent(b,c,"progress")}}};function onYouTubePlayerAPIReady(){mejs.YouTubeApi.iFrameReady()}function onYouTubePlayerReady(a){mejs.YouTubeApi.flashReady(a)}window.mejs=mejs;window.MediaElement=mejs.MediaElement; 
     63(function(a,b,c){var d={locale:{strings:{}},methods:{}};d.locale.getLanguage=function(){return{language:navigator.language}};d.locale.INIT_LANGUAGE=d.locale.getLanguage();d.methods.checkPlain=function(e){var g,f,h={"&":"&amp;",'"':"&quot;","<":"&lt;",">":"&gt;"};e=String(e);for(g in h)if(h.hasOwnProperty(g)){f=RegExp(g,"g");e=e.replace(f,h[g])}return e};d.methods.formatString=function(e,g){for(var f in g){switch(f.charAt(0)){case "@":g[f]=d.methods.checkPlain(g[f]);break;case "!":break;default:g[f]= 
     64'<em class="placeholder">'+d.methods.checkPlain(g[f])+"</em>"}e=e.replace(f,g[f])}return e};d.methods.t=function(e,g,f){if(d.locale.strings&&d.locale.strings[f.context]&&d.locale.strings[f.context][e])e=d.locale.strings[f.context][e];if(g)e=d.methods.formatString(e,g);return e};d.t=function(e,g,f){if(typeof e==="string"&&e.length>0){var h=d.locale.getLanguage();f=f||{context:h.language};return d.methods.t(e,g,f)}else throw{name:"InvalidArgumentException",message:"First argument is either not a string or empty."}; 
     65};c.i18n=d})(jQuery,document,mejs);(function(a){a.de={Fullscreen:"Vollbild","Go Fullscreen":"Vollbild an","Turn off Fullscreen":"Vollbild aus",Close:"Schlie\u00dfen"}})(mejs.i18n.locale.strings); 
     66 
    7567/*! 
    7668 * MediaElementPlayer 
    7769 * http://mediaelementjs.com/ 
    var mejs=mejs||{};mejs.version="2.10.1";mejs.meIndex=0;mejs.plugins={silverlight 
    8072 * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper) 
    8173 * 
    8274 * Copyright 2010-2012, John Dyer (http://j.hn/) 
    83  * Dual licensed under the MIT or GPL Version 2 licenses. 
    84  * 
    85  */ 
    86 if(typeof jQuery!="undefined"){mejs.$=jQuery}else{if(typeof ender!="undefined"){mejs.$=ender}}(function(a){mejs.MepDefaults={poster:"",defaultVideoWidth:480,defaultVideoHeight:270,videoWidth:-1,videoHeight:-1,defaultAudioWidth:400,defaultAudioHeight:30,defaultSeekBackwardInterval:function(b){return(b.duration*0.05)},defaultSeekForwardInterval:function(b){return(b.duration*0.05)},audioWidth:-1,audioHeight:-1,startVolume:0.8,loop:false,enableAutosize:true,alwaysShowHours:false,showTimecodeFrameCount:false,framesPerSecond:25,autosizeProgress:true,alwaysShowControls:false,iPadUseNativeControls:false,iPhoneUseNativeControls:false,AndroidUseNativeControls:false,features:["playpause","current","progress","duration","tracks","volume","fullscreen"],isVideo:true,enableKeyboard:true,pauseOtherPlayers:true,keyActions:[{keys:[32,179],action:function(b,c){if(c.paused||c.ended){c.play()}else{c.pause()}}},{keys:[38],action:function(b,d){var c=Math.min(d.volume+0.1,1);d.setVolume(c)}},{keys:[40],action:function(b,d){var c=Math.max(d.volume-0.1,0);d.setVolume(c)}},{keys:[37,227],action:function(b,d){if(!isNaN(d.duration)&&d.duration>0){if(b.isVideo){b.showControls();b.startControlsTimer()}var c=Math.max(d.currentTime-b.options.defaultSeekBackwardInterval(d),0);d.setCurrentTime(c)}}},{keys:[39,228],action:function(b,d){if(!isNaN(d.duration)&&d.duration>0){if(b.isVideo){b.showControls();b.startControlsTimer()}var c=Math.min(d.currentTime+b.options.defaultSeekForwardInterval(d),d.duration);d.setCurrentTime(c)}}},{keys:[70],action:function(b,c){if(typeof b.enterFullScreen!="undefined"){if(b.isFullScreen){b.exitFullScreen()}else{b.enterFullScreen()}}}}]};mejs.mepIndex=0;mejs.players=[];mejs.MediaElementPlayer=function(c,d){if(!(this instanceof mejs.MediaElementPlayer)){return new mejs.MediaElementPlayer(c,d)}var b=this;b.$media=b.$node=a(c);b.node=b.media=b.$media[0];if(typeof b.node.player!="undefined"){return b.node.player}else{b.node.player=b}if(typeof d=="undefined"){d=b.$node.data("mejsoptions")}b.options=a.extend({},mejs.MepDefaults,d);mejs.players.push(b);b.init();return b};mejs.MediaElementPlayer.prototype={hasFocus:false,controlsAreVisible:true,init:function(){var d=this,e=mejs.MediaFeatures,h=a.extend(true,{},d.options,{success:function(k,j){d.meReady(k,j)},error:function(j){d.handleError(j)}}),c=d.media.tagName.toLowerCase();d.isDynamic=(c!=="audio"&&c!=="video");if(d.isDynamic){d.isVideo=d.options.isVideo}else{d.isVideo=(c!=="audio"&&d.options.isVideo)}if((e.isiPad&&d.options.iPadUseNativeControls)||(e.isiPhone&&d.options.iPhoneUseNativeControls)){d.$media.attr("controls","controls");if(e.isiPad&&d.media.getAttribute("autoplay")!==null){d.media.load();d.media.play()}}else{if(e.isAndroid&&d.AndroidUseNativeControls){}else{d.$media.removeAttr("controls");d.id="mep_"+mejs.mepIndex++;d.container=a('<div id="'+d.id+'" class="mejs-container '+(mejs.MediaFeatures.svg?"svg":"no-svg")+'"><div class="mejs-inner"><div class="mejs-mediaelement"></div><div class="mejs-layers"></div><div class="mejs-controls"></div><div class="mejs-clear"></div></div></div>').addClass(d.$media[0].className).insertBefore(d.$media);d.container.addClass((e.isAndroid?"mejs-android ":"")+(e.isiOS?"mejs-ios ":"")+(e.isiPad?"mejs-ipad ":"")+(e.isiPhone?"mejs-iphone ":"")+(d.isVideo?"mejs-video ":"mejs-audio "));if(e.isiOS){var g=d.$media.clone();d.container.find(".mejs-mediaelement").append(g);d.$media.remove();d.$node=d.$media=g;d.node=d.media=g[0]}else{d.container.find(".mejs-mediaelement").append(d.$media)}d.controls=d.container.find(".mejs-controls");d.layers=d.container.find(".mejs-layers");var f=(d.isVideo?"video":"audio"),b=f.substring(0,1).toUpperCase()+f.substring(1);if(d.options[f+"Width"]>0||d.options[f+"Width"].toString().indexOf("%")>-1){d.width=d.options[f+"Width"]}else{if(d.media.style.width!==""&&d.media.style.width!==null){d.width=d.media.style.width}else{if(d.media.getAttribute("width")!==null){d.width=d.$media.attr("width")}else{d.width=d.options["default"+b+"Width"]}}}if(d.options[f+"Height"]>0||d.options[f+"Height"].toString().indexOf("%")>-1){d.height=d.options[f+"Height"]}else{if(d.media.style.height!==""&&d.media.style.height!==null){d.height=d.media.style.height}else{if(d.$media[0].getAttribute("height")!==null){d.height=d.$media.attr("height")}else{d.height=d.options["default"+b+"Height"]}}}d.setPlayerSize(d.width,d.height);h.pluginWidth=d.height;h.pluginHeight=d.width}}mejs.MediaElement(d.$media[0],h)},showControls:function(b){var c=this;b=typeof b=="undefined"||b;if(c.controlsAreVisible){return}if(b){c.controls.css("visibility","visible").stop(true,true).fadeIn(200,function(){c.controlsAreVisible=true});c.container.find(".mejs-control").css("visibility","visible").stop(true,true).fadeIn(200,function(){c.controlsAreVisible=true})}else{c.controls.css("visibility","visible").css("display","block");c.container.find(".mejs-control").css("visibility","visible").css("display","block");c.controlsAreVisible=true}c.setControlsSize()},hideControls:function(b){var c=this;b=typeof b=="undefined"||b;if(!c.controlsAreVisible){return}if(b){c.controls.stop(true,true).fadeOut(200,function(){a(this).css("visibility","hidden").css("display","block");c.controlsAreVisible=false});c.container.find(".mejs-control").stop(true,true).fadeOut(200,function(){a(this).css("visibility","hidden").css("display","block")})}else{c.controls.css("visibility","hidden").css("display","block");c.container.find(".mejs-control").css("visibility","hidden").css("display","block");c.controlsAreVisible=false}},controlsTimer:null,startControlsTimer:function(c){var b=this;c=typeof c!="undefined"?c:1500;b.killControlsTimer("start");b.controlsTimer=setTimeout(function(){b.hideControls();b.killControlsTimer("hide")},c)},killControlsTimer:function(c){var b=this;if(b.controlsTimer!==null){clearTimeout(b.controlsTimer);delete b.controlsTimer;b.controlsTimer=null}},controlsEnabled:true,disableControls:function(){var b=this;b.killControlsTimer();b.hideControls(false);this.controlsEnabled=false},enableControls:function(){var b=this;b.showControls(false);b.controlsEnabled=true},meReady:function(c,f){var k=this,j=mejs.MediaFeatures,g=f.getAttribute("autoplay"),d=!(typeof g=="undefined"||g===null||g==="false"),b,l;if(k.created){return}else{k.created=true}k.media=c;k.domNode=f;if(!(j.isAndroid&&k.options.AndroidUseNativeControls)&&!(j.isiPad&&k.options.iPadUseNativeControls)&&!(j.isiPhone&&k.options.iPhoneUseNativeControls)){k.buildposter(k,k.controls,k.layers,k.media);k.buildkeyboard(k,k.controls,k.layers,k.media);k.buildoverlays(k,k.controls,k.layers,k.media);k.findTracks();for(b in k.options.features){l=k.options.features[b];if(k["build"+l]){try{k["build"+l](k,k.controls,k.layers,k.media)}catch(h){}}}k.container.trigger("controlsready");k.setPlayerSize(k.width,k.height);k.setControlsSize();if(k.isVideo){if(mejs.MediaFeatures.hasTouch){k.$media.bind("touchstart",function(){if(k.controlsAreVisible){k.hideControls(false)}else{if(k.controlsEnabled){k.showControls(false)}}})}else{k.media.addEventListener("click",function(){if(k.media.paused){k.media.play()}else{k.media.pause()}});k.container.bind("mouseenter mouseover",function(){if(k.controlsEnabled){if(!k.options.alwaysShowControls){k.killControlsTimer("enter");k.showControls();k.startControlsTimer(2500)}}}).bind("mousemove",function(){if(k.controlsEnabled){if(!k.controlsAreVisible){k.showControls()}if(!k.options.alwaysShowControls){k.startControlsTimer(2500)}}}).bind("mouseleave",function(){if(k.controlsEnabled){if(!k.media.paused&&!k.options.alwaysShowControls){k.startControlsTimer(1000)}}})}if(d&&!k.options.alwaysShowControls){k.hideControls()}if(k.options.enableAutosize){k.media.addEventListener("loadedmetadata",function(m){if(k.options.videoHeight<=0&&k.domNode.getAttribute("height")===null&&!isNaN(m.target.videoHeight)){k.setPlayerSize(m.target.videoWidth,m.target.videoHeight);k.setControlsSize();k.media.setVideoSize(m.target.videoWidth,m.target.videoHeight)}},false)}}c.addEventListener("play",function(){for(var m=0,e=mejs.players.length;m<e;m++){var n=mejs.players[m];if(n.id!=k.id&&k.options.pauseOtherPlayers&&!n.paused&&!n.ended){n.pause()}n.hasFocus=false}k.hasFocus=true},false);k.media.addEventListener("ended",function(m){try{k.media.setCurrentTime(0)}catch(n){}k.media.pause();if(k.setProgressRail){k.setProgressRail()}if(k.setCurrentRail){k.setCurrentRail()}if(k.options.loop){k.media.play()}else{if(!k.options.alwaysShowControls&&k.controlsEnabled){k.showControls()}}},false);k.media.addEventListener("loadedmetadata",function(m){if(k.updateDuration){k.updateDuration()}if(k.updateCurrent){k.updateCurrent()}if(!k.isFullScreen){k.setPlayerSize(k.width,k.height);k.setControlsSize()}},false);setTimeout(function(){k.setPlayerSize(k.width,k.height);k.setControlsSize()},50);a(window).resize(function(){if(!(k.isFullScreen||(mejs.MediaFeatures.hasTrueNativeFullScreen&&document.webkitIsFullScreen))){k.setPlayerSize(k.width,k.height)}k.setControlsSize()});if(k.media.pluginType=="youtube"){k.container.find(".mejs-overlay-play").hide()}}if(d&&c.pluginType=="native"){c.load();c.play()}if(k.options.success){if(typeof k.options.success=="string"){window[k.options.success](k.media,k.domNode,k)}else{k.options.success(k.media,k.domNode,k)}}},handleError:function(c){var b=this;b.controls.hide();if(b.options.error){b.options.error(c)}},setPlayerSize:function(g,b){var e=this;if(typeof g!="undefined"){e.width=g}if(typeof b!="undefined"){e.height=b}if(e.height.toString().indexOf("%")>0||e.$node.css("max-width")==="100%"||(e.$node[0].currentStyle&&e.$node[0].currentStyle.maxWidth==="100%")){var h=e.isVideo?((e.media.videoWidth&&e.media.videoWidth>0)?e.media.videoWidth:e.options.defaultVideoWidth):e.options.defaultAudioWidth,d=e.isVideo?((e.media.videoHeight&&e.media.videoHeight>0)?e.media.videoHeight:e.options.defaultVideoHeight):e.options.defaultAudioHeight,f=e.container.parent().closest(":visible").width(),c=parseInt(f*d/h,10);if(e.container.parent()[0].tagName.toLowerCase()==="body"){f=a(window).width();c=a(window).height()}if(c!=0){e.container.width(f).height(c);e.$media.width("100%").height("100%");e.container.find("object, embed, iframe").width("100%").height("100%");if(e.isVideo){if(e.media.setVideoSize){e.media.setVideoSize(f,c)}}e.layers.children(".mejs-layer").width("100%").height("100%")}}else{e.container.width(e.width).height(e.height);e.layers.children(".mejs-layer").width(e.width).height(e.height)}},setControlsSize:function(){var c=this,g=0,j=0,h=c.controls.find(".mejs-time-rail"),e=c.controls.find(".mejs-time-total"),f=c.controls.find(".mejs-time-current"),b=c.controls.find(".mejs-time-loaded"),d=h.siblings();if(c.options&&!c.options.autosizeProgress){j=parseInt(h.css("width"))}if(j===0||!j){d.each(function(){if(a(this).css("position")!="absolute"){g+=a(this).outerWidth(true)}});j=c.controls.width()-g-(h.outerWidth(true)-h.width())}h.width(j);e.width(j-(e.outerWidth(true)-e.width()));if(c.setProgressRail){c.setProgressRail()}if(c.setCurrentRail){c.setCurrentRail()}},buildposter:function(e,b,g,f){var d=this,h=a('<div class="mejs-poster mejs-layer"></div>').appendTo(g),c=e.$media.attr("poster");if(e.options.poster!==""){c=e.options.poster}if(c!==""&&c!=null){d.setPoster(c)}else{h.hide()}f.addEventListener("play",function(){h.hide()},false)},setPoster:function(c){var d=this,e=d.container.find(".mejs-poster"),b=e.find("img");if(b.length==0){b=a('<img width="100%" height="100%" />').appendTo(e)}b.attr("src",c)},buildoverlays:function(e,b,g,f){if(!e.isVideo){return}var h=a('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-loading"><span></span></div></div>').hide().appendTo(g),c=a('<div class="mejs-overlay mejs-layer"><div class="mejs-overlay-error"></div></div>').hide().appendTo(g),d=a('<div class="mejs-overlay mejs-layer mejs-overlay-play"><div class="mejs-overlay-button"></div></div>').appendTo(g).click(function(){if(f.paused){f.play()}else{f.pause()}});f.addEventListener("play",function(){d.hide();h.hide();b.find(".mejs-time-buffering").hide();c.hide()},false);f.addEventListener("playing",function(){d.hide();h.hide();b.find(".mejs-time-buffering").hide();c.hide()},false);f.addEventListener("seeking",function(){h.show();b.find(".mejs-time-buffering").show()},false);f.addEventListener("seeked",function(){h.hide();b.find(".mejs-time-buffering").hide()},false);f.addEventListener("pause",function(){if(!mejs.MediaFeatures.isiPhone){d.show()}},false);f.addEventListener("waiting",function(){h.show();b.find(".mejs-time-buffering").show()},false);f.addEventListener("loadeddata",function(){h.show();b.find(".mejs-time-buffering").show()},false);f.addEventListener("canplay",function(){h.hide();b.find(".mejs-time-buffering").hide()},false);f.addEventListener("error",function(){h.hide();b.find(".mejs-time-buffering").hide();c.show();c.find("mejs-overlay-error").html("Error loading this resource")},false)},buildkeyboard:function(d,b,f,e){var c=this;a(document).keydown(function(n){if(d.hasFocus&&d.options.enableKeyboard){for(var m=0,g=d.options.keyActions.length;m<g;m++){var l=d.options.keyActions[m];for(var h=0,k=l.keys.length;h<k;h++){if(n.keyCode==l.keys[h]){n.preventDefault();l.action(d,e,n.keyCode);return false}}}}return true});a(document).click(function(g){if(a(g.target).closest(".mejs-container").length==0){d.hasFocus=false}})},findTracks:function(){var b=this,c=b.$media.find("track");b.tracks=[];c.each(function(e,d){d=a(d);b.tracks.push({srclang:d.attr("srclang").toLowerCase(),src:d.attr("src"),kind:d.attr("kind"),label:d.attr("label")||"",entries:[],isLoaded:false})})},changeSkin:function(b){this.container[0].className="mejs-container "+b;this.setPlayerSize(this.width,this.height);this.setControlsSize()},play:function(){this.media.play()},pause:function(){this.media.pause()},load:function(){this.media.load()},setMuted:function(b){this.media.setMuted(b)},setCurrentTime:function(b){this.media.setCurrentTime(b)},getCurrentTime:function(){return this.media.currentTime},setVolume:function(b){this.media.setVolume(b)},getVolume:function(){return this.media.volume},setSrc:function(b){this.media.setSrc(b)},remove:function(){var b=this;if(b.media.pluginType==="flash"){b.media.remove()}else{if(b.media.pluginType==="native"){b.$media.prop("controls",true)}}if(!b.isDynamic){b.$node.insertBefore(b.container)}b.container.remove()}};if(typeof jQuery!="undefined"){jQuery.fn.mediaelementplayer=function(b){return this.each(function(){new mejs.MediaElementPlayer(this,b)})}}a(document).ready(function(){a(".mejs-player").mediaelementplayer()});window.MediaElementPlayer=mejs.MediaElementPlayer})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{playpauseText:"Play/Pause"});a.extend(MediaElementPlayer.prototype,{buildplaypause:function(d,b,g,f){var c=this,e=a('<div class="mejs-button mejs-playpause-button mejs-play" ><button type="button" aria-controls="'+c.id+'" title="'+c.options.playpauseText+'"></button></div>').appendTo(b).click(function(h){h.preventDefault();if(f.paused){f.play()}else{f.pause()}return false});f.addEventListener("play",function(){e.removeClass("mejs-play").addClass("mejs-pause")},false);f.addEventListener("playing",function(){e.removeClass("mejs-play").addClass("mejs-pause")},false);f.addEventListener("pause",function(){e.removeClass("mejs-pause").addClass("mejs-play")},false);f.addEventListener("paused",function(){e.removeClass("mejs-pause").addClass("mejs-play")},false)}})})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{stopText:"Stop"});a.extend(MediaElementPlayer.prototype,{buildstop:function(e,b,g,f){var d=this,c=a('<div class="mejs-button mejs-stop-button mejs-stop"><button type="button" aria-controls="'+d.id+'" title="'+d.options.stopText+'"></button></div>').appendTo(b).click(function(){if(!f.paused){f.pause()}if(f.currentTime>0){f.setCurrentTime(0);f.pause();b.find(".mejs-time-current").width("0px");b.find(".mejs-time-handle").css("left","0px");b.find(".mejs-time-float-current").html(mejs.Utility.secondsToTimeCode(0));b.find(".mejs-currenttime").html(mejs.Utility.secondsToTimeCode(0));g.find(".mejs-poster").show()}})}})})(mejs.$);(function(a){a.extend(MediaElementPlayer.prototype,{buildprogress:function(n,o,f,c){a('<div class="mejs-time-rail"><span class="mejs-time-total"><span class="mejs-time-buffering"></span><span class="mejs-time-loaded"></span><span class="mejs-time-current"></span><span class="mejs-time-handle"></span><span class="mejs-time-float"><span class="mejs-time-float-current">00:00</span><span class="mejs-time-float-corner"></span></span></span></div>').appendTo(o);o.find(".mejs-time-buffering").hide();var p=this,l=o.find(".mejs-time-total"),g=o.find(".mejs-time-loaded"),k=o.find(".mejs-time-current"),j=o.find(".mejs-time-handle"),m=o.find(".mejs-time-float"),b=o.find(".mejs-time-float-current"),e=function(u){var q=u.pageX,v=l.offset(),s=l.outerWidth(true),r=0,t=0,w=q-v.left;if(q>v.left&&q<=s+v.left&&c.duration){r=((q-v.left)/s);t=(r<=0.02)?0:r*c.duration;if(h){c.setCurrentTime(t)}if(!mejs.MediaFeatures.hasTouch){m.css("left",w);b.html(mejs.Utility.secondsToTimeCode(t));m.show()}}},h=false,d=false;l.bind("mousedown",function(q){if(q.which===1){h=true;e(q);a(document).bind("mousemove.dur",function(r){e(r)}).bind("mouseup.dur",function(r){h=false;m.hide();a(document).unbind(".dur")});return false}}).bind("mouseenter",function(q){d=true;a(document).bind("mousemove.dur",function(r){e(r)});if(!mejs.MediaFeatures.hasTouch){m.show()}}).bind("mouseleave",function(q){d=false;if(!h){a(document).unbind(".dur");m.hide()}});c.addEventListener("progress",function(q){n.setProgressRail(q);n.setCurrentRail(q)},false);c.addEventListener("timeupdate",function(q){n.setProgressRail(q);n.setCurrentRail(q)},false);p.loaded=g;p.total=l;p.current=k;p.handle=j},setProgressRail:function(f){var b=this,d=(f!=undefined)?f.target:b.media,c=null;if(d&&d.buffered&&d.buffered.length>0&&d.buffered.end&&d.duration){c=d.buffered.end(0)/d.duration}else{if(d&&d.bytesTotal!=undefined&&d.bytesTotal>0&&d.bufferedBytes!=undefined){c=d.bufferedBytes/d.bytesTotal}else{if(f&&f.lengthComputable&&f.total!=0){c=f.loaded/f.total}}}if(c!==null){c=Math.min(1,Math.max(0,c));if(b.loaded&&b.total){b.loaded.width(b.total.width()*c)}}},setCurrentRail:function(){var b=this;if(b.media.currentTime!=undefined&&b.media.duration){if(b.total&&b.handle){var d=b.total.width()*b.media.currentTime/b.media.duration,c=d-(b.handle.outerWidth(true)/2);b.current.width(d);b.handle.css("left",c)}}}})})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{duration:-1,timeAndDurationSeparator:" <span> | </span> "});a.extend(MediaElementPlayer.prototype,{buildcurrent:function(d,b,f,e){var c=this;a('<div class="mejs-time"><span class="mejs-currenttime">'+(d.options.alwaysShowHours?"00:":"")+(d.options.showTimecodeFrameCount?"00:00:00":"00:00")+"</span></div>").appendTo(b);c.currenttime=c.controls.find(".mejs-currenttime");e.addEventListener("timeupdate",function(){d.updateCurrent()},false)},buildduration:function(d,b,f,e){var c=this;if(b.children().last().find(".mejs-currenttime").length>0){a(c.options.timeAndDurationSeparator+'<span class="mejs-duration">'+(c.options.duration>0?mejs.Utility.secondsToTimeCode(c.options.duration,c.options.alwaysShowHours||c.media.duration>3600,c.options.showTimecodeFrameCount,c.options.framesPerSecond||25):((d.options.alwaysShowHours?"00:":"")+(d.options.showTimecodeFrameCount?"00:00:00":"00:00")))+"</span>").appendTo(b.find(".mejs-time"))}else{b.find(".mejs-currenttime").parent().addClass("mejs-currenttime-container");a('<div class="mejs-time mejs-duration-container"><span class="mejs-duration">'+(c.options.duration>0?mejs.Utility.secondsToTimeCode(c.options.duration,c.options.alwaysShowHours||c.media.duration>3600,c.options.showTimecodeFrameCount,c.options.framesPerSecond||25):((d.options.alwaysShowHours?"00:":"")+(d.options.showTimecodeFrameCount?"00:00:00":"00:00")))+"</span></div>").appendTo(b)}c.durationD=c.controls.find(".mejs-duration");e.addEventListener("timeupdate",function(){d.updateDuration()},false)},updateCurrent:function(){var b=this;if(b.currenttime){b.currenttime.html(mejs.Utility.secondsToTimeCode(b.media.currentTime,b.options.alwaysShowHours||b.media.duration>3600,b.options.showTimecodeFrameCount,b.options.framesPerSecond||25))}},updateDuration:function(){var b=this;if(b.media.duration&&b.durationD){b.durationD.html(mejs.Utility.secondsToTimeCode(b.media.duration,b.options.alwaysShowHours,b.options.showTimecodeFrameCount,b.options.framesPerSecond||25))}}})})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{muteText:"Mute Toggle",hideVolumeOnTouchDevices:true,audioVolume:"horizontal",videoVolume:"vertical"});a.extend(MediaElementPlayer.prototype,{buildvolume:function(n,o,j,d){if(mejs.MediaFeatures.hasTouch&&this.options.hideVolumeOnTouchDevices){return}var p=this,l=(p.isVideo)?p.options.videoVolume:p.options.audioVolume,f=(l=="horizontal")?a('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="'+p.id+'" title="'+p.options.muteText+'"></button></div><div class="mejs-horizontal-volume-slider"><div class="mejs-horizontal-volume-total"></div><div class="mejs-horizontal-volume-current"></div><div class="mejs-horizontal-volume-handle"></div></div>').appendTo(o):a('<div class="mejs-button mejs-volume-button mejs-mute"><button type="button" aria-controls="'+p.id+'" title="'+p.options.muteText+'"></button><div class="mejs-volume-slider"><div class="mejs-volume-total"></div><div class="mejs-volume-current"></div><div class="mejs-volume-handle"></div></div></div>').appendTo(o),q=p.container.find(".mejs-volume-slider, .mejs-horizontal-volume-slider"),b=p.container.find(".mejs-volume-total, .mejs-horizontal-volume-total"),h=p.container.find(".mejs-volume-current, .mejs-horizontal-volume-current"),g=p.container.find(".mejs-volume-handle, .mejs-horizontal-volume-handle"),m=function(w,x){if(!q.is(":visible")&&typeof x=="undefined"){q.show();m(w,true);q.hide();return}w=Math.max(0,w);w=Math.min(w,1);if(w==0){f.removeClass("mejs-mute").addClass("mejs-unmute")}else{f.removeClass("mejs-unmute").addClass("mejs-mute")}if(l=="vertical"){var u=b.height(),t=b.position(),s=u-(u*w);g.css("top",Math.round(t.top+s-(g.height()/2)));h.height(u-s);h.css("top",t.top+s)}else{var r=b.width(),t=b.position(),v=r*w;g.css("left",Math.round(t.left+v-(g.width()/2)));h.width(Math.round(v))}},c=function(w){var u=null,s=b.offset();if(l=="vertical"){var t=b.height(),r=parseInt(b.css("top").replace(/px/,""),10),v=w.pageY-s.top;u=(t-v)/t;if(s.top==0||s.left==0){return}}else{var y=b.width(),x=w.pageX-s.left;u=x/y}u=Math.max(0,u);u=Math.min(u,1);m(u);if(u==0){d.setMuted(true)}else{d.setMuted(false)}d.setVolume(u)},k=false,e=false;f.hover(function(){q.show();e=true},function(){e=false;if(!k&&l=="vertical"){q.hide()}});q.bind("mouseover",function(){e=true}).bind("mousedown",function(r){c(r);a(document).bind("mousemove.vol",function(s){c(s)}).bind("mouseup.vol",function(){k=false;a(document).unbind(".vol");if(!e&&l=="vertical"){q.hide()}});k=true;return false});f.find("button").click(function(){d.setMuted(!d.muted)});d.addEventListener("volumechange",function(r){if(!k){if(d.muted){m(0);f.removeClass("mejs-mute").addClass("mejs-unmute")}else{m(d.volume);f.removeClass("mejs-unmute").addClass("mejs-mute")}}},false);if(p.container.is(":visible")){m(n.options.startVolume);if(d.pluginType==="native"){d.setVolume(n.options.startVolume)}}}})})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{usePluginFullScreen:true,newWindowCallback:function(){return""},fullscreenText:mejs.i18n.t("Fullscreen")});a.extend(MediaElementPlayer.prototype,{isFullScreen:false,isNativeFullScreen:false,docStyleOverflow:null,isInIframe:false,buildfullscreen:function(q,p,g,f){if(!q.isVideo){return}q.isInIframe=(window.location!=window.parent.location);if(mejs.MediaFeatures.hasTrueNativeFullScreen){var u=null;if(mejs.MediaFeatures.hasMozNativeFullScreen){u=a(document)}else{u=q.container}u.bind(mejs.MediaFeatures.fullScreenEventName,function(t){if(mejs.MediaFeatures.isFullScreen()){q.isNativeFullScreen=true;q.setControlsSize()}else{q.isNativeFullScreen=false;q.exitFullScreen()}})}var o=this,e=0,c=0,n=q.container,b=a('<div class="mejs-button mejs-fullscreen-button"><button type="button" aria-controls="'+o.id+'" title="'+o.options.fullscreenText+'"></button></div>').appendTo(p);if(o.media.pluginType==="native"||(!o.options.usePluginFullScreen&&!mejs.MediaFeatures.isFirefox)){b.click(function(){var t=(mejs.MediaFeatures.hasTrueNativeFullScreen&&mejs.MediaFeatures.isFullScreen())||q.isFullScreen;if(t){q.exitFullScreen()}else{q.enterFullScreen()}})}else{var m=null,h=(function(){var v=document.createElement("x"),w=document.documentElement,x=window.getComputedStyle,t;if(!("pointerEvents" in v.style)){return false}v.style.pointerEvents="auto";v.style.pointerEvents="x";w.appendChild(v);t=x&&x(v,"").pointerEvents==="auto";w.removeChild(v);return !!t})();if(h&&!mejs.MediaFeatures.isOpera){var l=false,r=function(){if(l){j.hide();d.hide();k.hide();b.css("pointer-events","");o.controls.css("pointer-events","");l=false}},j=a('<div class="mejs-fullscreen-hover" />').appendTo(o.container).mouseover(r),d=a('<div class="mejs-fullscreen-hover"  />').appendTo(o.container).mouseover(r),k=a('<div class="mejs-fullscreen-hover"  />').appendTo(o.container).mouseover(r),s=function(){var v={position:"absolute",top:0,left:0};j.css(v);d.css(v);k.css(v);j.width(o.container.width()).height(o.container.height()-o.controls.height());var t=b.offset().left-o.container.offset().left;fullScreenBtnWidth=b.outerWidth(true);d.width(t).height(o.controls.height()).css({top:o.container.height()-o.controls.height()});k.width(o.container.width()-t-fullScreenBtnWidth).height(o.controls.height()).css({top:o.container.height()-o.controls.height(),left:t+fullScreenBtnWidth})};a(document).resize(function(){s()});b.mouseover(function(){if(!o.isFullScreen){var t=b.offset(),v=q.container.offset();f.positionFullscreenButton(t.left-v.left,t.top-v.top,false);b.css("pointer-events","none");o.controls.css("pointer-events","none");j.show();k.show();d.show();s();l=true}});f.addEventListener("fullscreenchange",function(t){r()})}else{b.mouseover(function(){if(m!==null){clearTimeout(m);delete m}var t=b.offset(),v=q.container.offset();f.positionFullscreenButton(t.left-v.left,t.top-v.top,true)}).mouseout(function(){if(m!==null){clearTimeout(m);delete m}m=setTimeout(function(){f.hideFullscreenButton()},1500)})}}q.fullscreenBtn=b;a(document).bind("keydown",function(t){if(((mejs.MediaFeatures.hasTrueNativeFullScreen&&mejs.MediaFeatures.isFullScreen())||o.isFullScreen)&&t.keyCode==27){q.exitFullScreen()}})},enterFullScreen:function(){var c=this;if(c.media.pluginType!=="native"&&(mejs.MediaFeatures.isFirefox||c.options.usePluginFullScreen)){return}docStyleOverflow=document.documentElement.style.overflow;document.documentElement.style.overflow="hidden";normalHeight=c.container.height();normalWidth=c.container.width();if(c.media.pluginType==="native"){if(mejs.MediaFeatures.hasTrueNativeFullScreen){mejs.MediaFeatures.requestFullScreen(c.container[0]);if(c.isInIframe){setTimeout(function d(){if(c.isNativeFullScreen){if(a(window).width()!==screen.width){c.exitFullScreen()}else{setTimeout(d,500)}}},500)}}else{if(mejs.MediaFeatures.hasSemiNativeFullScreen){c.media.webkitEnterFullscreen();return}}}if(c.isInIframe){var b=c.options.newWindowCallback(this);if(b!==""){if(!mejs.MediaFeatures.hasTrueNativeFullScreen){c.pause();window.open(b,c.id,"top=0,left=0,width="+screen.availWidth+",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no");return}else{setTimeout(function(){if(!c.isNativeFullScreen){c.pause();window.open(b,c.id,"top=0,left=0,width="+screen.availWidth+",height="+screen.availHeight+",resizable=yes,scrollbars=no,status=no,toolbar=no")}},250)}}}c.container.addClass("mejs-container-fullscreen").width("100%").height("100%");setTimeout(function(){c.container.css({width:"100%",height:"100%"});c.setControlsSize()},500);if(c.pluginType==="native"){c.$media.width("100%").height("100%")}else{c.container.find("object, embed, iframe").width("100%").height("100%");c.media.setVideoSize(a(window).width(),a(window).height())}c.layers.children("div").width("100%").height("100%");if(c.fullscreenBtn){c.fullscreenBtn.removeClass("mejs-fullscreen").addClass("mejs-unfullscreen")}c.setControlsSize();c.isFullScreen=true},exitFullScreen:function(){var b=this;if(b.media.pluginType!=="native"&&mejs.MediaFeatures.isFirefox){b.media.setFullscreen(false);return}if(mejs.MediaFeatures.hasTrueNativeFullScreen&&(mejs.MediaFeatures.isFullScreen()||b.isFullScreen)){mejs.MediaFeatures.cancelFullScreen()}document.documentElement.style.overflow=docStyleOverflow;b.container.removeClass("mejs-container-fullscreen").width(normalWidth).height(normalHeight);if(b.pluginType==="native"){b.$media.width(normalWidth).height(normalHeight)}else{b.container.find("object embed").width(normalWidth).height(normalHeight);b.media.setVideoSize(normalWidth,normalHeight)}b.layers.children("div").width(normalWidth).height(normalHeight);b.fullscreenBtn.removeClass("mejs-unfullscreen").addClass("mejs-fullscreen");b.setControlsSize();b.isFullScreen=false}})})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{startLanguage:"",tracksText:"Captions/Subtitles"});a.extend(MediaElementPlayer.prototype,{hasChapters:false,buildtracks:function(f,b,h,g){if(!f.isVideo){return}if(f.tracks.length==0){return}var e=this,d,c="";f.chapters=a('<div class="mejs-chapters mejs-layer"></div>').prependTo(h).hide();f.captions=a('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position"><span class="mejs-captions-text"></span></div></div>').prependTo(h).hide();f.captionsText=f.captions.find(".mejs-captions-text");f.captionsButton=a('<div class="mejs-button mejs-captions-button"><button type="button" aria-controls="'+e.id+'" title="'+e.options.tracksText+'"></button><div class="mejs-captions-selector"><ul><li><input type="radio" name="'+f.id+'_captions" id="'+f.id+'_captions_none" value="none" checked="checked" /><label for="'+f.id+'_captions_none">None</label></li></ul></div></div>').appendTo(b).hover(function(){a(this).find(".mejs-captions-selector").css("visibility","visible")},function(){a(this).find(".mejs-captions-selector").css("visibility","hidden")}).delegate("input[type=radio]","click",function(){lang=this.value;if(lang=="none"){f.selectedTrack=null}else{for(d=0;d<f.tracks.length;d++){if(f.tracks[d].srclang==lang){f.selectedTrack=f.tracks[d];f.captions.attr("lang",f.selectedTrack.srclang);f.displayCaptions();break}}}});if(!f.options.alwaysShowControls){f.container.bind("mouseenter",function(){f.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover")}).bind("mouseleave",function(){if(!g.paused){f.container.find(".mejs-captions-position").removeClass("mejs-captions-position-hover")}})}else{f.container.find(".mejs-captions-position").addClass("mejs-captions-position-hover")}f.trackToLoad=-1;f.selectedTrack=null;f.isLoadingTrack=false;for(d=0;d<f.tracks.length;d++){if(f.tracks[d].kind=="subtitles"){f.addTrackButton(f.tracks[d].srclang,f.tracks[d].label)}}f.loadNextTrack();g.addEventListener("timeupdate",function(j){f.displayCaptions()},false);g.addEventListener("loadedmetadata",function(j){f.displayChapters()},false);f.container.hover(function(){if(f.hasChapters){f.chapters.css("visibility","visible");f.chapters.fadeIn(200).height(f.chapters.find(".mejs-chapter").outerHeight())}},function(){if(f.hasChapters&&!g.paused){f.chapters.fadeOut(200,function(){a(this).css("visibility","hidden");a(this).css("display","block")})}});if(f.node.getAttribute("autoplay")!==null){f.chapters.css("visibility","hidden")}},loadNextTrack:function(){var b=this;b.trackToLoad++;if(b.trackToLoad<b.tracks.length){b.isLoadingTrack=true;b.loadTrack(b.trackToLoad)}else{b.isLoadingTrack=false}},loadTrack:function(c){var d=this,b=d.tracks[c],e=function(){b.isLoaded=true;d.enableTrackButton(b.srclang,b.label);d.loadNextTrack()};a.ajax({url:b.src,dataType:"text",success:function(f){if(typeof f=="string"&&(/<tt\s+xml/ig).exec(f)){b.entries=mejs.TrackFormatParser.dfxp.parse(f)}else{b.entries=mejs.TrackFormatParser.webvvt.parse(f)}e();if(b.kind=="chapters"){d.media.addEventListener("play",function(g){if(d.media.duration>0){d.displayChapters(b)}},false)}},error:function(){d.loadNextTrack()}})},enableTrackButton:function(d,b){var c=this;if(b===""){b=mejs.language.codes[d]||d}c.captionsButton.find("input[value="+d+"]").prop("disabled",false).siblings("label").html(b);if(c.options.startLanguage==d){a("#"+c.id+"_captions_"+d).click()}c.adjustLanguageBox()},addTrackButton:function(d,b){var c=this;if(b===""){b=mejs.language.codes[d]||d}c.captionsButton.find("ul").append(a('<li><input type="radio" name="'+c.id+'_captions" id="'+c.id+"_captions_"+d+'" value="'+d+'" disabled="disabled" /><label for="'+c.id+"_captions_"+d+'">'+b+" (loading)</label></li>"));c.adjustLanguageBox();c.container.find(".mejs-captions-translations option[value="+d+"]").remove()},adjustLanguageBox:function(){var b=this;b.captionsButton.find(".mejs-captions-selector").height(b.captionsButton.find(".mejs-captions-selector ul").outerHeight(true)+b.captionsButton.find(".mejs-captions-translations").outerHeight(true))},displayCaptions:function(){if(typeof this.tracks=="undefined"){return}var d=this,c,b=d.selectedTrack;if(b!=null&&b.isLoaded){for(c=0;c<b.entries.times.length;c++){if(d.media.currentTime>=b.entries.times[c].start&&d.media.currentTime<=b.entries.times[c].stop){d.captionsText.html(b.entries.text[c]);d.captions.show().height(0);return}}d.captions.hide()}else{d.captions.hide()}},displayChapters:function(){var c=this,b;for(b=0;b<c.tracks.length;b++){if(c.tracks[b].kind=="chapters"&&c.tracks[b].isLoaded){c.drawChapters(c.tracks[b]);c.hasChapters=true;break}}},drawChapters:function(f){var c=this,b,d,e=0,g=0;c.chapters.empty();for(b=0;b<f.entries.times.length;b++){d=f.entries.times[b].stop-f.entries.times[b].start;e=Math.floor(d/c.media.duration*100);if(e+g>100||b==f.entries.times.length-1&&e+g<100){e=100-g}c.chapters.append(a('<div class="mejs-chapter" rel="'+f.entries.times[b].start+'" style="left: '+g.toString()+"%;width: "+e.toString()+'%;"><div class="mejs-chapter-block'+((b==f.entries.times.length-1)?" mejs-chapter-block-last":"")+'"><span class="ch-title">'+f.entries.text[b]+'</span><span class="ch-time">'+mejs.Utility.secondsToTimeCode(f.entries.times[b].start)+"&ndash;"+mejs.Utility.secondsToTimeCode(f.entries.times[b].stop)+"</span></div></div>"));g+=e}c.chapters.find("div.mejs-chapter").click(function(){c.media.setCurrentTime(parseFloat(a(this).attr("rel")));if(c.media.paused){c.media.play()}});c.chapters.show()}});mejs.language={codes:{af:"Afrikaans",sq:"Albanian",ar:"Arabic",be:"Belarusian",bg:"Bulgarian",ca:"Catalan",zh:"Chinese","zh-cn":"Chinese Simplified","zh-tw":"Chinese Traditional",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch",en:"English",et:"Estonian",tl:"Filipino",fi:"Finnish",fr:"French",gl:"Galician",de:"German",el:"Greek",ht:"Haitian Creole",iw:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",ga:"Irish",it:"Italian",ja:"Japanese",ko:"Korean",lv:"Latvian",lt:"Lithuanian",mk:"Macedonian",ms:"Malay",mt:"Maltese",no:"Norwegian",fa:"Persian",pl:"Polish",pt:"Portuguese",ro:"Romanian",ru:"Russian",sr:"Serbian",sk:"Slovak",sl:"Slovenian",es:"Spanish",sw:"Swahili",sv:"Swedish",tl:"Tagalog",th:"Thai",tr:"Turkish",uk:"Ukrainian",vi:"Vietnamese",cy:"Welsh",yi:"Yiddish"}};mejs.TrackFormatParser={webvvt:{pattern_identifier:/^([a-zA-z]+-)?[0-9]+$/,pattern_timecode:/^([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ([0-9]{2}:[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,parse:function(g){var e=0,d=mejs.TrackFormatParser.split2(g,/\r?\n/),c={text:[],times:[]},b,f;for(;e<d.length;e++){if(this.pattern_identifier.exec(d[e])){e++;b=this.pattern_timecode.exec(d[e]);if(b&&e<d.length){e++;f=d[e];e++;while(d[e]!==""&&e<d.length){f=f+"\n"+d[e];e++}f=a.trim(f).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"<a href='$1' target='_blank'>$1</a>");c.text.push(f);c.times.push({start:(mejs.Utility.convertSMPTEtoSeconds(b[1])==0)?0.2:mejs.Utility.convertSMPTEtoSeconds(b[1]),stop:mejs.Utility.convertSMPTEtoSeconds(b[3]),settings:b[5]})}}}return c}},dfxp:{parse:function(l){l=a(l).filter("tt");var j=0,c=l.children("div").eq(0),p=c.find("p"),h=l.find("#"+c.attr("style")),o,d,f,n,k={text:[],times:[]};if(h.length){var g=h.removeAttr("id").get(0).attributes;if(g.length){o={};for(j=0;j<g.length;j++){o[g[j].name.split(":")[1]]=g[j].value}}}for(j=0;j<p.length;j++){var b;var m={start:null,stop:null,style:null};if(p.eq(j).attr("begin")){m.start=mejs.Utility.convertSMPTEtoSeconds(p.eq(j).attr("begin"))}if(!m.start&&p.eq(j-1).attr("end")){m.start=mejs.Utility.convertSMPTEtoSeconds(p.eq(j-1).attr("end"))}if(p.eq(j).attr("end")){m.stop=mejs.Utility.convertSMPTEtoSeconds(p.eq(j).attr("end"))}if(!m.stop&&p.eq(j+1).attr("begin")){m.stop=mejs.Utility.convertSMPTEtoSeconds(p.eq(j+1).attr("begin"))}if(o){b="";for(var e in o){b+=e+":"+o[e]+";"}}if(b){m.style=b}if(m.start==0){m.start=0.2}k.times.push(m);n=a.trim(p.eq(j).html()).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"<a href='$1' target='_blank'>$1</a>");k.text.push(n);if(k.times.start==0){k.times.start=2}}return k}},split2:function(c,b){return c.split(b)}};if("x\n\ny".split(/\n/gi).length!=3){mejs.TrackFormatParser.split2=function(f,d){var e=[],b="",c;for(c=0;c<f.length;c++){b+=f.substring(c,c+1);if(d.test(b)){e.push(b.replace(d,""));b=""}}e.push(b);return e}}})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{contextMenuItems:[{render:function(b){if(typeof b.enterFullScreen=="undefined"){return null}if(b.isFullScreen){return"Turn off Fullscreen"}else{return"Go Fullscreen"}},click:function(b){if(b.isFullScreen){b.exitFullScreen()}else{b.enterFullScreen()}}},{render:function(b){if(b.media.muted){return"Unmute"}else{return"Mute"}},click:function(b){if(b.media.muted){b.setMuted(false)}else{b.setMuted(true)}}},{isSeparator:true},{render:function(b){return"Download Video"},click:function(b){window.location.href=b.media.currentSrc}}]});a.extend(MediaElementPlayer.prototype,{buildcontextmenu:function(c,b,e,d){c.contextMenu=a('<div class="mejs-contextmenu"></div>').appendTo(a("body")).hide();c.container.bind("contextmenu",function(f){if(c.isContextMenuEnabled){f.preventDefault();c.renderContextMenu(f.clientX-1,f.clientY-1);return false}});c.container.bind("click",function(){c.contextMenu.hide()});c.contextMenu.bind("mouseleave",function(){c.startContextMenuTimer()})},isContextMenuEnabled:true,enableContextMenu:function(){this.isContextMenuEnabled=true},disableContextMenu:function(){this.isContextMenuEnabled=false},contextMenuTimeout:null,startContextMenuTimer:function(){var b=this;b.killContextMenuTimer();b.contextMenuTimer=setTimeout(function(){b.hideContextMenu();b.killContextMenuTimer()},750)},killContextMenuTimer:function(){var b=this.contextMenuTimer;if(b!=null){clearTimeout(b);delete b;b=null}},hideContextMenu:function(){this.contextMenu.hide()},renderContextMenu:function(b,j){var g=this,f="",d=g.options.contextMenuItems;for(var e=0,c=d.length;e<c;e++){if(d[e].isSeparator){f+='<div class="mejs-contextmenu-separator"></div>'}else{var h=d[e].render(g);if(h!=null){f+='<div class="mejs-contextmenu-item" data-itemindex="'+e+'" id="element-'+(Math.random()*1000000)+'">'+h+"</div>"}}}g.contextMenu.empty().append(a(f)).css({top:j,left:b}).show();g.contextMenu.find(".mejs-contextmenu-item").each(function(){var k=a(this),l=parseInt(k.data("itemindex"),10),m=g.options.contextMenuItems[l];if(typeof m.show!="undefined"){m.show(k,g)}k.click(function(){if(typeof m.click!="undefined"){m.click(g)}g.contextMenu.hide()})});setTimeout(function(){g.killControlsTimer("rev3")},100)}})})(mejs.$);(function(a){a.extend(mejs.MepDefaults,{postrollCloseText:mejs.i18n.t("Close")});a.extend(MediaElementPlayer.prototype,{buildpostroll:function(e,c,g,f){var d=this,b=d.container.find('link[rel="postroll"]').attr("href");if(typeof b!=="undefined"){e.postroll=a('<div class="mejs-postroll-layer mejs-layer"><a class="mejs-postroll-close" onclick="$(this).parent().hide();return false;">'+d.options.postrollCloseText+'</a><div class="mejs-postroll-layer-content"></div></div>').prependTo(g).hide();d.media.addEventListener("ended",function(h){a.ajax({dataType:"html",url:b,success:function(j,k){g.find(".mejs-postroll-layer-content").html(j)}});e.postroll.show()},false)}}})})(mejs.$); 
    87  No newline at end of file 
     75 * License: MIT 
     76 * 
     77 */if(typeof jQuery!="undefined")mejs.$=jQuery;else if(typeof ender!="undefined")mejs.$=ender; 
     78(function(f){mejs.MepDefaults={poster:"",defaultVideoWidth:480,defaultVideoHeight:270,videoWidth:-1,videoHeight:-1,defaultAudioWidth:400,defaultAudioHeight:30,defaultSeekBackwardInterval:function(a){return a.duration*0.05},defaultSeekForwardInterval:function(a){return a.duration*0.05},audioWidth:-1,audioHeight:-1,startVolume:0.8,loop:false,autoRewind:true,enableAutosize:true,alwaysShowHours:false,showTimecodeFrameCount:false,framesPerSecond:25,autosizeProgress:true,alwaysShowControls:false,hideVideoControlsOnLoad:false, 
     79clickToPlayPause:true,iPadUseNativeControls:false,iPhoneUseNativeControls:false,AndroidUseNativeControls:false,features:["playpause","current","progress","duration","tracks","volume","fullscreen"],isVideo:true,enableKeyboard:true,pauseOtherPlayers:true,keyActions:[{keys:[32,179],action:function(a,b){b.paused||b.ended?b.play():b.pause()}},{keys:[38],action:function(a,b){b.setVolume(Math.min(b.volume+0.1,1))}},{keys:[40],action:function(a,b){b.setVolume(Math.max(b.volume-0.1,0))}},{keys:[37,227],action:function(a, 
     80b){if(!isNaN(b.duration)&&b.duration>0){if(a.isVideo){a.showControls();a.startControlsTimer()}var c=Math.max(b.currentTime-a.options.defaultSeekBackwardInterval(b),0);b.setCurrentTime(c)}}},{keys:[39,228],action:function(a,b){if(!isNaN(b.duration)&&b.duration>0){if(a.isVideo){a.showControls();a.startControlsTimer()}var c=Math.min(b.currentTime+a.options.defaultSeekForwardInterval(b),b.duration);b.setCurrentTime(c)}}},{keys:[70],action:function(a){if(typeof a.enterFullScreen!="undefined")a.isFullScreen? 
     81a.exitFullScreen():a.enterFullScreen()}}]};mejs.mepIndex=0;mejs.players={};mejs.MediaElementPlayer=function(a,b){if(!(this instanceof mejs.MediaElementPlayer))return new mejs.MediaElementPlayer(a,b);this.$media=this.$node=f(a);this.node=this.media=this.$media[0];if(typeof this.node.player!="undefined")return this.node.player;else this.node.player=this;if(typeof b=="undefined")b=this.$node.data("mejsoptions");this.options=f.extend({},mejs.MepDefaults,b);this.id="mep_"+mejs.mepIndex++;mejs.players[this.id]= 
     82this;this.init();return this};mejs.MediaElementPlayer.prototype={hasFocus:false,controlsAreVisible:true,init:function(){var a=this,b=mejs.MediaFeatures,c=f.extend(true,{},a.options,{success:function(e,g){a.meReady(e,g)},error:function(e){a.handleError(e)}}),d=a.media.tagName.toLowerCase();a.isDynamic=d!=="audio"&&d!=="video";a.isVideo=a.isDynamic?a.options.isVideo:d!=="audio"&&a.options.isVideo;if(b.isiPad&&a.options.iPadUseNativeControls||b.isiPhone&&a.options.iPhoneUseNativeControls){a.$media.attr("controls", 
     83"controls");if(b.isiPad&&a.media.getAttribute("autoplay")!==null){a.media.load();a.media.play()}}else if(!(b.isAndroid&&a.options.AndroidUseNativeControls)){a.$media.removeAttr("controls");a.container=f('<div id="'+a.id+'" class="mejs-container '+(mejs.MediaFeatures.svg?"svg":"no-svg")+'"><div class="mejs-inner"><div class="mejs-mediaelement"></div><div class="mejs-layers"></div><div class="mejs-controls"></div><div class="mejs-clear"></div></div></div>').addClass(a.$media[0].className).insertBefore(a.$media); 
     84a.container.addClass((b.isAndroid?"mejs-android ":"")+(b.isiOS?"mejs-ios ":"")+(b.isiPad?"mejs-ipad ":"")+(b.isiPhone?"mejs-iphone ":"")+(a.isVideo?"mejs-video ":"mejs-audio "));if(b.isiOS){b=a.$media.clone();a.container.find(".mejs-mediaelement").append(b);a.$media.remove();a.$node=a.$media=b;a.node=a.media=b[0]}else a.container.find(".mejs-mediaelement").append(a.$media);a.controls=a.container.find(".mejs-controls");a.layers=a.container.find(".mejs-layers");b=a.isVideo?"video":"audio";d=b.substring(0, 
     851).toUpperCase()+b.substring(1);a.width=a.options[b+"Width"]>0||a.options[b+"Width"].toString().indexOf("%")>-1?a.options[b+"Width"]:a.media.style.width!==""&&a.media.style.width!==null?a.media.style.width:a.media.getAttribute("width")!==null?a.$media.attr("width"):a.options["default"+d+"Width"];a.height=a.options[b+"Height"]>0||a.options[b+"Height"].toString().indexOf("%")>-1?a.options[b+"Height"]:a.media.style.height!==""&&a.media.style.height!==null?a.media.style.height:a.$media[0].getAttribute("height")!== 
     86null?a.$media.attr("height"):a.options["default"+d+"Height"];a.setPlayerSize(a.width,a.height);c.pluginWidth=a.height;c.pluginHeight=a.width}mejs.MediaElement(a.$media[0],c);a.container.trigger("controlsshown")},showControls:function(a){var b=this;a=typeof a=="undefined"||a;if(!b.controlsAreVisible){if(a){b.controls.css("visibility","visible").stop(true,true).fadeIn(200,function(){b.controlsAreVisible=true;b.container.trigger("controlsshown")});b.container.find(".mejs-control").css("visibility","visible").stop(true, 
     87true).fadeIn(200,function(){b.controlsAreVisible=true})}else{b.controls.css("visibility","visible").css("display","block");b.container.find(".mejs-control").css("visibility","visible").css("display","block");b.controlsAreVisible=true;b.container.trigger("controlsshown")}b.setControlsSize()}},hideControls:function(a){var b=this;a=typeof a=="undefined"||a;if(b.controlsAreVisible)if(a){b.controls.stop(true,true).fadeOut(200,function(){f(this).css("visibility","hidden").css("display","block");b.controlsAreVisible= 
     88false;b.container.trigger("controlshidden")});b.container.find(".mejs-control").stop(true,true).fadeOut(200,function(){f(this).css("visibility","hidden").css("display","block")})}else{b.controls.css("visibility","hidden").css("display","block");b.container.find(".mejs-control").css("visibility","hidden").css("display","block");b.controlsAreVisible=false;b.container.trigger("controlshidden")}},controlsTimer:null,startControlsTimer:function(a){var b=this;a=typeof a!="undefined"?a:1500;b.killControlsTimer("start"); 
     89b.controlsTimer=setTimeout(function(){b.hideControls();b.killControlsTimer("hide")},a)},killControlsTimer:function(){if(this.controlsTimer!==null){clearTimeout(this.controlsTimer);delete this.controlsTimer;this.controlsTimer=null}},controlsEnabled:true,disableControls:function(){this.killControlsTimer();this.hideControls(false);this.controlsEnabled=false},enableControls:function(){this.showControls(false);this.controlsEnabled=true},meReady:function(a,b){var c=this,d=mejs.MediaFeatures,e=b.getAttribute("autoplay"); 
     90e=!(typeof e=="undefined"||e===null||e==="false");var g;if(!c.created){c.created=true;c.media=a;c.domNode=b;if(!(d.isAndroid&&c.options.AndroidUseNativeControls)&&!(d.isiPad&&c.options.iPadUseNativeControls)&&!(d.isiPhone&&c.options.iPhoneUseNativeControls)){c.buildposter(c,c.controls,c.layers,c.media);c.buildkeyboard(c,c.controls,c.layers,c.media);c.buildoverlays(c,c.controls,c.layers,c.media);c.findTracks();for(g in c.options.features){d=c.options.features[g];if(c["build"+d])try{c["build"+d](c, 
     91c.controls,c.layers,c.media)}catch(l){}}c.container.trigger("controlsready");c.setPlayerSize(c.width,c.height);c.setControlsSize();if(c.isVideo){if(mejs.MediaFeatures.hasTouch)c.$media.bind("touchstart",function(){if(c.controlsAreVisible)c.hideControls(false);else c.controlsEnabled&&c.showControls(false)});else{c.media.addEventListener("click",function(){if(c.options.clickToPlayPause)c.media.paused?c.media.play():c.media.pause()});c.container.bind("mouseenter mouseover",function(){if(c.controlsEnabled)if(!c.options.alwaysShowControls){c.killControlsTimer("enter"); 
     92c.showControls();c.startControlsTimer(2500)}}).bind("mousemove",function(){if(c.controlsEnabled){c.controlsAreVisible||c.showControls();c.options.alwaysShowControls||c.startControlsTimer(2500)}}).bind("mouseleave",function(){c.controlsEnabled&&!c.media.paused&&!c.options.alwaysShowControls&&c.startControlsTimer(1E3)})}c.options.hideVideoControlsOnLoad&&c.hideControls(false);e&&!c.options.alwaysShowControls&&c.hideControls();c.options.enableAutosize&&c.media.addEventListener("loadedmetadata",function(j){if(c.options.videoHeight<= 
     930&&c.domNode.getAttribute("height")===null&&!isNaN(j.target.videoHeight)){c.setPlayerSize(j.target.videoWidth,j.target.videoHeight);c.setControlsSize();c.media.setVideoSize(j.target.videoWidth,j.target.videoHeight)}},false)}a.addEventListener("play",function(){for(var j in mejs.players){var k=mejs.players[j];k.id!=c.id&&c.options.pauseOtherPlayers&&!k.paused&&!k.ended&&k.pause();k.hasFocus=false}c.hasFocus=true},false);c.media.addEventListener("ended",function(){if(c.options.autoRewind)try{c.media.setCurrentTime(0)}catch(j){}c.media.pause(); 
     94c.setProgressRail&&c.setProgressRail();c.setCurrentRail&&c.setCurrentRail();if(c.options.loop)c.media.play();else!c.options.alwaysShowControls&&c.controlsEnabled&&c.showControls()},false);c.media.addEventListener("loadedmetadata",function(){c.updateDuration&&c.updateDuration();c.updateCurrent&&c.updateCurrent();if(!c.isFullScreen){c.setPlayerSize(c.width,c.height);c.setControlsSize()}},false);setTimeout(function(){c.setPlayerSize(c.width,c.height);c.setControlsSize()},50);c.globalBind("resize",function(){c.isFullScreen|| 
     95mejs.MediaFeatures.hasTrueNativeFullScreen&&document.webkitIsFullScreen||c.setPlayerSize(c.width,c.height);c.setControlsSize()});c.media.pluginType=="youtube"&&c.container.find(".mejs-overlay-play").hide()}if(e&&a.pluginType=="native"){a.load();a.play()}if(c.options.success)typeof c.options.success=="string"?window[c.options.success](c.media,c.domNode,c):c.options.success(c.media,c.domNode,c)}},handleError:function(a){this.controls.hide();this.options.error&&this.options.error(a)},setPlayerSize:function(a, 
     96b){if(typeof a!