angelovcom.net

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

mediaelement-and-player.js (265275B)


      1 /*!
      2  * MediaElement.js
      3  * http://www.mediaelementjs.com/
      4  *
      5  * Wrapper that mimics native HTML5 MediaElement (audio and video)
      6  * using a variety of technologies (pure JavaScript, Flash, iframe)
      7  *
      8  * Copyright 2010-2017, John Dyer (http://j.hn/)
      9  * License: MIT
     10  *
     11  */(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(_dereq_,module,exports){
     12 
     13 },{}],2:[function(_dereq_,module,exports){
     14 (function (global){
     15 var topLevel = typeof global !== 'undefined' ? global :
     16     typeof window !== 'undefined' ? window : {}
     17 var minDoc = _dereq_(1);
     18 
     19 var doccy;
     20 
     21 if (typeof document !== 'undefined') {
     22     doccy = document;
     23 } else {
     24     doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
     25 
     26     if (!doccy) {
     27         doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
     28     }
     29 }
     30 
     31 module.exports = doccy;
     32 
     33 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
     34 },{"1":1}],3:[function(_dereq_,module,exports){
     35 (function (global){
     36 var win;
     37 
     38 if (typeof window !== "undefined") {
     39     win = window;
     40 } else if (typeof global !== "undefined") {
     41     win = global;
     42 } else if (typeof self !== "undefined"){
     43     win = self;
     44 } else {
     45     win = {};
     46 }
     47 
     48 module.exports = win;
     49 
     50 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
     51 },{}],4:[function(_dereq_,module,exports){
     52 (function (root) {
     53 
     54   // Store setTimeout reference so promise-polyfill will be unaffected by
     55   // other code modifying setTimeout (like sinon.useFakeTimers())
     56   var setTimeoutFunc = setTimeout;
     57 
     58   function noop() {}
     59   
     60   // Polyfill for Function.prototype.bind
     61   function bind(fn, thisArg) {
     62     return function () {
     63       fn.apply(thisArg, arguments);
     64     };
     65   }
     66 
     67   function Promise(fn) {
     68     if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');
     69     if (typeof fn !== 'function') throw new TypeError('not a function');
     70     this._state = 0;
     71     this._handled = false;
     72     this._value = undefined;
     73     this._deferreds = [];
     74 
     75     doResolve(fn, this);
     76   }
     77 
     78   function handle(self, deferred) {
     79     while (self._state === 3) {
     80       self = self._value;
     81     }
     82     if (self._state === 0) {
     83       self._deferreds.push(deferred);
     84       return;
     85     }
     86     self._handled = true;
     87     Promise._immediateFn(function () {
     88       var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
     89       if (cb === null) {
     90         (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
     91         return;
     92       }
     93       var ret;
     94       try {
     95         ret = cb(self._value);
     96       } catch (e) {
     97         reject(deferred.promise, e);
     98         return;
     99       }
    100       resolve(deferred.promise, ret);
    101     });
    102   }
    103 
    104   function resolve(self, newValue) {
    105     try {
    106       // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
    107       if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');
    108       if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
    109         var then = newValue.then;
    110         if (newValue instanceof Promise) {
    111           self._state = 3;
    112           self._value = newValue;
    113           finale(self);
    114           return;
    115         } else if (typeof then === 'function') {
    116           doResolve(bind(then, newValue), self);
    117           return;
    118         }
    119       }
    120       self._state = 1;
    121       self._value = newValue;
    122       finale(self);
    123     } catch (e) {
    124       reject(self, e);
    125     }
    126   }
    127 
    128   function reject(self, newValue) {
    129     self._state = 2;
    130     self._value = newValue;
    131     finale(self);
    132   }
    133 
    134   function finale(self) {
    135     if (self._state === 2 && self._deferreds.length === 0) {
    136       Promise._immediateFn(function() {
    137         if (!self._handled) {
    138           Promise._unhandledRejectionFn(self._value);
    139         }
    140       });
    141     }
    142 
    143     for (var i = 0, len = self._deferreds.length; i < len; i++) {
    144       handle(self, self._deferreds[i]);
    145     }
    146     self._deferreds = null;
    147   }
    148 
    149   function Handler(onFulfilled, onRejected, promise) {
    150     this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
    151     this.onRejected = typeof onRejected === 'function' ? onRejected : null;
    152     this.promise = promise;
    153   }
    154 
    155   /**
    156    * Take a potentially misbehaving resolver function and make sure
    157    * onFulfilled and onRejected are only called once.
    158    *
    159    * Makes no guarantees about asynchrony.
    160    */
    161   function doResolve(fn, self) {
    162     var done = false;
    163     try {
    164       fn(function (value) {
    165         if (done) return;
    166         done = true;
    167         resolve(self, value);
    168       }, function (reason) {
    169         if (done) return;
    170         done = true;
    171         reject(self, reason);
    172       });
    173     } catch (ex) {
    174       if (done) return;
    175       done = true;
    176       reject(self, ex);
    177     }
    178   }
    179 
    180   Promise.prototype['catch'] = function (onRejected) {
    181     return this.then(null, onRejected);
    182   };
    183 
    184   Promise.prototype.then = function (onFulfilled, onRejected) {
    185     var prom = new (this.constructor)(noop);
    186 
    187     handle(this, new Handler(onFulfilled, onRejected, prom));
    188     return prom;
    189   };
    190 
    191   Promise.all = function (arr) {
    192     var args = Array.prototype.slice.call(arr);
    193 
    194     return new Promise(function (resolve, reject) {
    195       if (args.length === 0) return resolve([]);
    196       var remaining = args.length;
    197 
    198       function res(i, val) {
    199         try {
    200           if (val && (typeof val === 'object' || typeof val === 'function')) {
    201             var then = val.then;
    202             if (typeof then === 'function') {
    203               then.call(val, function (val) {
    204                 res(i, val);
    205               }, reject);
    206               return;
    207             }
    208           }
    209           args[i] = val;
    210           if (--remaining === 0) {
    211             resolve(args);
    212           }
    213         } catch (ex) {
    214           reject(ex);
    215         }
    216       }
    217 
    218       for (var i = 0; i < args.length; i++) {
    219         res(i, args[i]);
    220       }
    221     });
    222   };
    223 
    224   Promise.resolve = function (value) {
    225     if (value && typeof value === 'object' && value.constructor === Promise) {
    226       return value;
    227     }
    228 
    229     return new Promise(function (resolve) {
    230       resolve(value);
    231     });
    232   };
    233 
    234   Promise.reject = function (value) {
    235     return new Promise(function (resolve, reject) {
    236       reject(value);
    237     });
    238   };
    239 
    240   Promise.race = function (values) {
    241     return new Promise(function (resolve, reject) {
    242       for (var i = 0, len = values.length; i < len; i++) {
    243         values[i].then(resolve, reject);
    244       }
    245     });
    246   };
    247 
    248   // Use polyfill for setImmediate for performance gains
    249   Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||
    250     function (fn) {
    251       setTimeoutFunc(fn, 0);
    252     };
    253 
    254   Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
    255     if (typeof console !== 'undefined' && console) {
    256       console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
    257     }
    258   };
    259 
    260   /**
    261    * Set the immediate function to execute callbacks
    262    * @param fn {function} Function to execute
    263    * @deprecated
    264    */
    265   Promise._setImmediateFn = function _setImmediateFn(fn) {
    266     Promise._immediateFn = fn;
    267   };
    268 
    269   /**
    270    * Change the function to execute on unhandled rejection
    271    * @param {function} fn Function to execute on unhandled rejection
    272    * @deprecated
    273    */
    274   Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {
    275     Promise._unhandledRejectionFn = fn;
    276   };
    277   
    278   if (typeof module !== 'undefined' && module.exports) {
    279     module.exports = Promise;
    280   } else if (!root.Promise) {
    281     root.Promise = Promise;
    282   }
    283 
    284 })(this);
    285 
    286 },{}],5:[function(_dereq_,module,exports){
    287 'use strict';
    288 
    289 Object.defineProperty(exports, "__esModule", {
    290 	value: true
    291 });
    292 
    293 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
    294 
    295 var _mejs = _dereq_(7);
    296 
    297 var _mejs2 = _interopRequireDefault(_mejs);
    298 
    299 var _en = _dereq_(15);
    300 
    301 var _general = _dereq_(27);
    302 
    303 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    304 
    305 var i18n = { lang: 'en', en: _en.EN };
    306 
    307 i18n.language = function () {
    308 	for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
    309 		args[_key] = arguments[_key];
    310 	}
    311 
    312 	if (args !== null && args !== undefined && args.length) {
    313 
    314 		if (typeof args[0] !== 'string') {
    315 			throw new TypeError('Language code must be a string value');
    316 		}
    317 
    318 		if (!/^[a-z]{2,3}((\-|_)[a-z]{2})?$/i.test(args[0])) {
    319 			throw new TypeError('Language code must have format 2-3 letters and. optionally, hyphen, underscore followed by 2 more letters');
    320 		}
    321 
    322 		i18n.lang = args[0];
    323 
    324 		if (i18n[args[0]] === undefined) {
    325 			args[1] = args[1] !== null && args[1] !== undefined && _typeof(args[1]) === 'object' ? args[1] : {};
    326 			i18n[args[0]] = !(0, _general.isObjectEmpty)(args[1]) ? args[1] : _en.EN;
    327 		} else if (args[1] !== null && args[1] !== undefined && _typeof(args[1]) === 'object') {
    328 			i18n[args[0]] = args[1];
    329 		}
    330 	}
    331 
    332 	return i18n.lang;
    333 };
    334 
    335 i18n.t = function (message) {
    336 	var pluralParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
    337 
    338 
    339 	if (typeof message === 'string' && message.length) {
    340 
    341 		var str = void 0,
    342 		    pluralForm = void 0;
    343 
    344 		var language = i18n.language();
    345 
    346 		var _plural = function _plural(input, number, form) {
    347 
    348 			if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) !== 'object' || typeof number !== 'number' || typeof form !== 'number') {
    349 				return input;
    350 			}
    351 
    352 			var _pluralForms = function () {
    353 				return [function () {
    354 					return arguments.length <= 1 ? undefined : arguments[1];
    355 				}, function () {
    356 					return (arguments.length <= 0 ? undefined : arguments[0]) === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];
    357 				}, function () {
    358 					return (arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];
    359 				}, function () {
    360 					if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) {
    361 						return arguments.length <= 1 ? undefined : arguments[1];
    362 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) !== 0) {
    363 						return arguments.length <= 2 ? undefined : arguments[2];
    364 					} else {
    365 						return arguments.length <= 3 ? undefined : arguments[3];
    366 					}
    367 				}, function () {
    368 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1 || (arguments.length <= 0 ? undefined : arguments[0]) === 11) {
    369 						return arguments.length <= 1 ? undefined : arguments[1];
    370 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2 || (arguments.length <= 0 ? undefined : arguments[0]) === 12) {
    371 						return arguments.length <= 2 ? undefined : arguments[2];
    372 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) > 2 && (arguments.length <= 0 ? undefined : arguments[0]) < 20) {
    373 						return arguments.length <= 3 ? undefined : arguments[3];
    374 					} else {
    375 						return arguments.length <= 4 ? undefined : arguments[4];
    376 					}
    377 				}, function () {
    378 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    379 						return arguments.length <= 1 ? undefined : arguments[1];
    380 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 > 0 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 20) {
    381 						return arguments.length <= 2 ? undefined : arguments[2];
    382 					} else {
    383 						return arguments.length <= 3 ? undefined : arguments[3];
    384 					}
    385 				}, function () {
    386 					if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) {
    387 						return arguments.length <= 1 ? undefined : arguments[1];
    388 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {
    389 						return arguments.length <= 2 ? undefined : arguments[2];
    390 					} else {
    391 						return [3];
    392 					}
    393 				}, function () {
    394 					if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) {
    395 						return arguments.length <= 1 ? undefined : arguments[1];
    396 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {
    397 						return arguments.length <= 2 ? undefined : arguments[2];
    398 					} else {
    399 						return arguments.length <= 3 ? undefined : arguments[3];
    400 					}
    401 				}, function () {
    402 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    403 						return arguments.length <= 1 ? undefined : arguments[1];
    404 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) <= 4) {
    405 						return arguments.length <= 2 ? undefined : arguments[2];
    406 					} else {
    407 						return arguments.length <= 3 ? undefined : arguments[3];
    408 					}
    409 				}, function () {
    410 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    411 						return arguments.length <= 1 ? undefined : arguments[1];
    412 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {
    413 						return arguments.length <= 2 ? undefined : arguments[2];
    414 					} else {
    415 						return arguments.length <= 3 ? undefined : arguments[3];
    416 					}
    417 				}, function () {
    418 					if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 1) {
    419 						return arguments.length <= 2 ? undefined : arguments[2];
    420 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 2) {
    421 						return arguments.length <= 3 ? undefined : arguments[3];
    422 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 3 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 === 4) {
    423 						return arguments.length <= 4 ? undefined : arguments[4];
    424 					} else {
    425 						return arguments.length <= 1 ? undefined : arguments[1];
    426 					}
    427 				}, function () {
    428 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    429 						return arguments.length <= 1 ? undefined : arguments[1];
    430 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {
    431 						return arguments.length <= 2 ? undefined : arguments[2];
    432 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) > 2 && (arguments.length <= 0 ? undefined : arguments[0]) < 7) {
    433 						return arguments.length <= 3 ? undefined : arguments[3];
    434 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) > 6 && (arguments.length <= 0 ? undefined : arguments[0]) < 11) {
    435 						return arguments.length <= 4 ? undefined : arguments[4];
    436 					} else {
    437 						return arguments.length <= 5 ? undefined : arguments[5];
    438 					}
    439 				}, function () {
    440 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 0) {
    441 						return arguments.length <= 1 ? undefined : arguments[1];
    442 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    443 						return arguments.length <= 2 ? undefined : arguments[2];
    444 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {
    445 						return arguments.length <= 3 ? undefined : arguments[3];
    446 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 3 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 <= 10) {
    447 						return arguments.length <= 4 ? undefined : arguments[4];
    448 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 11) {
    449 						return arguments.length <= 5 ? undefined : arguments[5];
    450 					} else {
    451 						return arguments.length <= 6 ? undefined : arguments[6];
    452 					}
    453 				}, function () {
    454 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    455 						return arguments.length <= 1 ? undefined : arguments[1];
    456 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 > 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 11) {
    457 						return arguments.length <= 2 ? undefined : arguments[2];
    458 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 > 10 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 20) {
    459 						return arguments.length <= 3 ? undefined : arguments[3];
    460 					} else {
    461 						return arguments.length <= 4 ? undefined : arguments[4];
    462 					}
    463 				}, function () {
    464 					if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1) {
    465 						return arguments.length <= 1 ? undefined : arguments[1];
    466 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 2) {
    467 						return arguments.length <= 2 ? undefined : arguments[2];
    468 					} else {
    469 						return arguments.length <= 3 ? undefined : arguments[3];
    470 					}
    471 				}, function () {
    472 					return (arguments.length <= 0 ? undefined : arguments[0]) !== 11 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];
    473 				}, function () {
    474 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    475 						return arguments.length <= 1 ? undefined : arguments[1];
    476 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) {
    477 						return arguments.length <= 2 ? undefined : arguments[2];
    478 					} else {
    479 						return arguments.length <= 3 ? undefined : arguments[3];
    480 					}
    481 				}, function () {
    482 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    483 						return arguments.length <= 1 ? undefined : arguments[1];
    484 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {
    485 						return arguments.length <= 2 ? undefined : arguments[2];
    486 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) !== 8 && (arguments.length <= 0 ? undefined : arguments[0]) !== 11) {
    487 						return arguments.length <= 3 ? undefined : arguments[3];
    488 					} else {
    489 						return arguments.length <= 4 ? undefined : arguments[4];
    490 					}
    491 				}, function () {
    492 					return (arguments.length <= 0 ? undefined : arguments[0]) === 0 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2];
    493 				}, function () {
    494 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    495 						return arguments.length <= 1 ? undefined : arguments[1];
    496 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) {
    497 						return arguments.length <= 2 ? undefined : arguments[2];
    498 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 3) {
    499 						return arguments.length <= 3 ? undefined : arguments[3];
    500 					} else {
    501 						return arguments.length <= 4 ? undefined : arguments[4];
    502 					}
    503 				}, function () {
    504 					if ((arguments.length <= 0 ? undefined : arguments[0]) === 0) {
    505 						return arguments.length <= 1 ? undefined : arguments[1];
    506 					} else if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) {
    507 						return arguments.length <= 2 ? undefined : arguments[2];
    508 					} else {
    509 						return arguments.length <= 3 ? undefined : arguments[3];
    510 					}
    511 				}];
    512 			}();
    513 
    514 			return _pluralForms[form].apply(null, [number].concat(input));
    515 		};
    516 
    517 		if (i18n[language] !== undefined) {
    518 			str = i18n[language][message];
    519 			if (pluralParam !== null && typeof pluralParam === 'number') {
    520 				pluralForm = i18n[language]['mejs.plural-form'];
    521 				str = _plural.apply(null, [str, pluralParam, pluralForm]);
    522 			}
    523 		}
    524 
    525 		if (!str && i18n.en) {
    526 			str = i18n.en[message];
    527 			if (pluralParam !== null && typeof pluralParam === 'number') {
    528 				pluralForm = i18n.en['mejs.plural-form'];
    529 				str = _plural.apply(null, [str, pluralParam, pluralForm]);
    530 			}
    531 		}
    532 
    533 		str = str || message;
    534 
    535 		if (pluralParam !== null && typeof pluralParam === 'number') {
    536 			str = str.replace('%1', pluralParam);
    537 		}
    538 
    539 		return (0, _general.escapeHTML)(str);
    540 	}
    541 
    542 	return message;
    543 };
    544 
    545 _mejs2.default.i18n = i18n;
    546 
    547 if (typeof mejsL10n !== 'undefined') {
    548 	_mejs2.default.i18n.language(mejsL10n.language, mejsL10n.strings);
    549 }
    550 
    551 exports.default = i18n;
    552 
    553 },{"15":15,"27":27,"7":7}],6:[function(_dereq_,module,exports){
    554 'use strict';
    555 
    556 Object.defineProperty(exports, "__esModule", {
    557 	value: true
    558 });
    559 
    560 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
    561 
    562 var _window = _dereq_(3);
    563 
    564 var _window2 = _interopRequireDefault(_window);
    565 
    566 var _document = _dereq_(2);
    567 
    568 var _document2 = _interopRequireDefault(_document);
    569 
    570 var _mejs = _dereq_(7);
    571 
    572 var _mejs2 = _interopRequireDefault(_mejs);
    573 
    574 var _general = _dereq_(27);
    575 
    576 var _media2 = _dereq_(28);
    577 
    578 var _renderer = _dereq_(8);
    579 
    580 var _constants = _dereq_(25);
    581 
    582 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
    583 
    584 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
    585 
    586 var MediaElement = function MediaElement(idOrNode, options, sources) {
    587 	var _this = this;
    588 
    589 	_classCallCheck(this, MediaElement);
    590 
    591 	var t = this;
    592 
    593 	sources = Array.isArray(sources) ? sources : null;
    594 
    595 	t.defaults = {
    596 		renderers: [],
    597 
    598 		fakeNodeName: 'mediaelementwrapper',
    599 
    600 		pluginPath: 'build/',
    601 
    602 		shimScriptAccess: 'sameDomain'
    603 	};
    604 
    605 	options = Object.assign(t.defaults, options);
    606 
    607 	t.mediaElement = _document2.default.createElement(options.fakeNodeName);
    608 
    609 	var id = idOrNode,
    610 	    error = false;
    611 
    612 	if (typeof idOrNode === 'string') {
    613 		t.mediaElement.originalNode = _document2.default.getElementById(idOrNode);
    614 	} else {
    615 		t.mediaElement.originalNode = idOrNode;
    616 		id = idOrNode.id;
    617 	}
    618 
    619 	if (t.mediaElement.originalNode === undefined || t.mediaElement.originalNode === null) {
    620 		return null;
    621 	}
    622 
    623 	t.mediaElement.options = options;
    624 	id = id || 'mejs_' + Math.random().toString().slice(2);
    625 
    626 	t.mediaElement.originalNode.setAttribute('id', id + '_from_mejs');
    627 
    628 	var tagName = t.mediaElement.originalNode.tagName.toLowerCase();
    629 	if (['video', 'audio'].indexOf(tagName) > -1 && !t.mediaElement.originalNode.getAttribute('preload')) {
    630 		t.mediaElement.originalNode.setAttribute('preload', 'none');
    631 	}
    632 
    633 	t.mediaElement.originalNode.parentNode.insertBefore(t.mediaElement, t.mediaElement.originalNode);
    634 
    635 	t.mediaElement.appendChild(t.mediaElement.originalNode);
    636 
    637 	var processURL = function processURL(url, type) {
    638 		if (_window2.default.location.protocol === 'https:' && url.indexOf('http:') === 0 && _constants.IS_IOS && _mejs2.default.html5media.mediaTypes.indexOf(type) > -1) {
    639 			var xhr = new XMLHttpRequest();
    640 			xhr.onreadystatechange = function () {
    641 				if (this.readyState === 4 && this.status === 200) {
    642 					var _url = _window2.default.URL || _window2.default.webkitURL,
    643 					    blobUrl = _url.createObjectURL(this.response);
    644 					t.mediaElement.originalNode.setAttribute('src', blobUrl);
    645 					return blobUrl;
    646 				}
    647 				return url;
    648 			};
    649 			xhr.open('GET', url);
    650 			xhr.responseType = 'blob';
    651 			xhr.send();
    652 		}
    653 
    654 		return url;
    655 	};
    656 
    657 	var mediaFiles = void 0;
    658 
    659 	if (sources !== null) {
    660 		mediaFiles = sources;
    661 	} else if (t.mediaElement.originalNode !== null) {
    662 
    663 		mediaFiles = [];
    664 
    665 		switch (t.mediaElement.originalNode.nodeName.toLowerCase()) {
    666 			case 'iframe':
    667 				mediaFiles.push({
    668 					type: '',
    669 					src: t.mediaElement.originalNode.getAttribute('src')
    670 				});
    671 				break;
    672 			case 'audio':
    673 			case 'video':
    674 				var _sources = t.mediaElement.originalNode.children.length,
    675 				    nodeSource = t.mediaElement.originalNode.getAttribute('src');
    676 
    677 				if (nodeSource) {
    678 					var node = t.mediaElement.originalNode,
    679 					    type = (0, _media2.formatType)(nodeSource, node.getAttribute('type'));
    680 					mediaFiles.push({
    681 						type: type,
    682 						src: processURL(nodeSource, type)
    683 					});
    684 				}
    685 
    686 				for (var i = 0; i < _sources; i++) {
    687 					var n = t.mediaElement.originalNode.children[i];
    688 					if (n.tagName.toLowerCase() === 'source') {
    689 						var src = n.getAttribute('src'),
    690 						    _type = (0, _media2.formatType)(src, n.getAttribute('type'));
    691 						mediaFiles.push({ type: _type, src: processURL(src, _type) });
    692 					}
    693 				}
    694 				break;
    695 		}
    696 	}
    697 
    698 	t.mediaElement.id = id;
    699 	t.mediaElement.renderers = {};
    700 	t.mediaElement.events = {};
    701 	t.mediaElement.promises = [];
    702 	t.mediaElement.renderer = null;
    703 	t.mediaElement.rendererName = null;
    704 
    705 	t.mediaElement.changeRenderer = function (rendererName, mediaFiles) {
    706 
    707 		var t = _this,
    708 		    media = Object.keys(mediaFiles[0]).length > 2 ? mediaFiles[0] : mediaFiles[0].src;
    709 
    710 		if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && t.mediaElement.renderer.name === rendererName) {
    711 			t.mediaElement.renderer.pause();
    712 			if (t.mediaElement.renderer.stop) {
    713 				t.mediaElement.renderer.stop();
    714 			}
    715 			t.mediaElement.renderer.show();
    716 			t.mediaElement.renderer.setSrc(media);
    717 			return true;
    718 		}
    719 
    720 		if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null) {
    721 			t.mediaElement.renderer.pause();
    722 			if (t.mediaElement.renderer.stop) {
    723 				t.mediaElement.renderer.stop();
    724 			}
    725 			t.mediaElement.renderer.hide();
    726 		}
    727 
    728 		var newRenderer = t.mediaElement.renderers[rendererName],
    729 		    newRendererType = null;
    730 
    731 		if (newRenderer !== undefined && newRenderer !== null) {
    732 			newRenderer.show();
    733 			newRenderer.setSrc(media);
    734 			t.mediaElement.renderer = newRenderer;
    735 			t.mediaElement.rendererName = rendererName;
    736 			return true;
    737 		}
    738 
    739 		var rendererArray = t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : _renderer.renderer.order;
    740 
    741 		for (var _i = 0, total = rendererArray.length; _i < total; _i++) {
    742 			var index = rendererArray[_i];
    743 
    744 			if (index === rendererName) {
    745 				var rendererList = _renderer.renderer.renderers;
    746 				newRendererType = rendererList[index];
    747 
    748 				var renderOptions = Object.assign(newRendererType.options, t.mediaElement.options);
    749 				newRenderer = newRendererType.create(t.mediaElement, renderOptions, mediaFiles);
    750 				newRenderer.name = rendererName;
    751 
    752 				t.mediaElement.renderers[newRendererType.name] = newRenderer;
    753 				t.mediaElement.renderer = newRenderer;
    754 				t.mediaElement.rendererName = rendererName;
    755 				newRenderer.show();
    756 				return true;
    757 			}
    758 		}
    759 
    760 		return false;
    761 	};
    762 
    763 	t.mediaElement.setSize = function (width, height) {
    764 		if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null) {
    765 			t.mediaElement.renderer.setSize(width, height);
    766 		}
    767 	};
    768 
    769 	t.mediaElement.generateError = function (message, urlList) {
    770 		message = message || '';
    771 		urlList = Array.isArray(urlList) ? urlList : [];
    772 		var event = (0, _general.createEvent)('error', t.mediaElement);
    773 		event.message = message;
    774 		event.urls = urlList;
    775 		t.mediaElement.dispatchEvent(event);
    776 		error = true;
    777 	};
    778 
    779 	var props = _mejs2.default.html5media.properties,
    780 	    methods = _mejs2.default.html5media.methods,
    781 	    addProperty = function addProperty(obj, name, onGet, onSet) {
    782 		var oldValue = obj[name];
    783 		var getFn = function getFn() {
    784 			return onGet.apply(obj, [oldValue]);
    785 		},
    786 		    setFn = function setFn(newValue) {
    787 			oldValue = onSet.apply(obj, [newValue]);
    788 			return oldValue;
    789 		};
    790 
    791 		Object.defineProperty(obj, name, {
    792 			get: getFn,
    793 			set: setFn
    794 		});
    795 	},
    796 	    assignGettersSetters = function assignGettersSetters(propName) {
    797 		if (propName !== 'src') {
    798 
    799 			var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1),
    800 			    getFn = function getFn() {
    801 				return t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer['get' + capName] === 'function' ? t.mediaElement.renderer['get' + capName]() : null;
    802 			},
    803 			    setFn = function setFn(value) {
    804 				if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer['set' + capName] === 'function') {
    805 					t.mediaElement.renderer['set' + capName](value);
    806 				}
    807 			};
    808 
    809 			addProperty(t.mediaElement, propName, getFn, setFn);
    810 			t.mediaElement['get' + capName] = getFn;
    811 			t.mediaElement['set' + capName] = setFn;
    812 		}
    813 	},
    814 	    getSrc = function getSrc() {
    815 		return t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null ? t.mediaElement.renderer.getSrc() : null;
    816 	},
    817 	    setSrc = function setSrc(value) {
    818 		var mediaFiles = [];
    819 
    820 		if (typeof value === 'string') {
    821 			mediaFiles.push({
    822 				src: value,
    823 				type: value ? (0, _media2.getTypeFromFile)(value) : ''
    824 			});
    825 		} else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src !== undefined) {
    826 			var _src = (0, _media2.absolutizeUrl)(value.src),
    827 			    _type2 = value.type,
    828 			    media = Object.assign(value, {
    829 				src: _src,
    830 				type: (_type2 === '' || _type2 === null || _type2 === undefined) && _src ? (0, _media2.getTypeFromFile)(_src) : _type2
    831 			});
    832 			mediaFiles.push(media);
    833 		} else if (Array.isArray(value)) {
    834 			for (var _i2 = 0, total = value.length; _i2 < total; _i2++) {
    835 
    836 				var _src2 = (0, _media2.absolutizeUrl)(value[_i2].src),
    837 				    _type3 = value[_i2].type,
    838 				    _media = Object.assign(value[_i2], {
    839 					src: _src2,
    840 					type: (_type3 === '' || _type3 === null || _type3 === undefined) && _src2 ? (0, _media2.getTypeFromFile)(_src2) : _type3
    841 				});
    842 
    843 				mediaFiles.push(_media);
    844 			}
    845 		}
    846 
    847 		var renderInfo = _renderer.renderer.select(mediaFiles, t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : []),
    848 		    event = void 0;
    849 
    850 		if (!t.mediaElement.paused && !(t.mediaElement.src == null || t.mediaElement.src === '')) {
    851 			t.mediaElement.pause();
    852 			event = (0, _general.createEvent)('pause', t.mediaElement);
    853 			t.mediaElement.dispatchEvent(event);
    854 		}
    855 		t.mediaElement.originalNode.src = mediaFiles[0].src || '';
    856 
    857 		if (renderInfo === null && mediaFiles[0].src) {
    858 			t.mediaElement.generateError('No renderer found', mediaFiles);
    859 			return;
    860 		}
    861 
    862 		var shouldChangeRenderer = !(mediaFiles[0].src == null || mediaFiles[0].src === '');
    863 		return shouldChangeRenderer ? t.mediaElement.changeRenderer(renderInfo.rendererName, mediaFiles) : null;
    864 	},
    865 	    triggerAction = function triggerAction(methodName, args) {
    866 		try {
    867 			if (methodName === 'play' && (t.mediaElement.rendererName === 'native_dash' || t.mediaElement.rendererName === 'native_hls' || t.mediaElement.rendererName === 'vimeo_iframe')) {
    868 				var response = t.mediaElement.renderer[methodName](args);
    869 				if (response && typeof response.then === 'function') {
    870 					response.catch(function () {
    871 						if (t.mediaElement.paused) {
    872 							setTimeout(function () {
    873 								var tmpResponse = t.mediaElement.renderer.play();
    874 								if (tmpResponse !== undefined) {
    875 									tmpResponse.catch(function () {
    876 										if (!t.mediaElement.renderer.paused) {
    877 											t.mediaElement.renderer.pause();
    878 										}
    879 									});
    880 								}
    881 							}, 150);
    882 						}
    883 					});
    884 				}
    885 			} else {
    886 				t.mediaElement.renderer[methodName](args);
    887 			}
    888 		} catch (e) {
    889 			t.mediaElement.generateError(e, mediaFiles);
    890 		}
    891 	},
    892 	    assignMethods = function assignMethods(methodName) {
    893 		t.mediaElement[methodName] = function () {
    894 			for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
    895 				args[_key] = arguments[_key];
    896 			}
    897 
    898 			if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer[methodName] === 'function') {
    899 				if (t.mediaElement.promises.length) {
    900 					Promise.all(t.mediaElement.promises).then(function () {
    901 						triggerAction(methodName, args);
    902 					}).catch(function (e) {
    903 						t.mediaElement.generateError(e, mediaFiles);
    904 					});
    905 				} else {
    906 					triggerAction(methodName, args);
    907 				}
    908 			}
    909 			return null;
    910 		};
    911 	};
    912 
    913 	addProperty(t.mediaElement, 'src', getSrc, setSrc);
    914 	t.mediaElement.getSrc = getSrc;
    915 	t.mediaElement.setSrc = setSrc;
    916 
    917 	for (var _i3 = 0, total = props.length; _i3 < total; _i3++) {
    918 		assignGettersSetters(props[_i3]);
    919 	}
    920 
    921 	for (var _i4 = 0, _total = methods.length; _i4 < _total; _i4++) {
    922 		assignMethods(methods[_i4]);
    923 	}
    924 
    925 	t.mediaElement.addEventListener = function (eventName, callback) {
    926 		t.mediaElement.events[eventName] = t.mediaElement.events[eventName] || [];
    927 
    928 		t.mediaElement.events[eventName].push(callback);
    929 	};
    930 	t.mediaElement.removeEventListener = function (eventName, callback) {
    931 		if (!eventName) {
    932 			t.mediaElement.events = {};
    933 			return true;
    934 		}
    935 
    936 		var callbacks = t.mediaElement.events[eventName];
    937 
    938 		if (!callbacks) {
    939 			return true;
    940 		}
    941 
    942 		if (!callback) {
    943 			t.mediaElement.events[eventName] = [];
    944 			return true;
    945 		}
    946 
    947 		for (var _i5 = 0; _i5 < callbacks.length; _i5++) {
    948 			if (callbacks[_i5] === callback) {
    949 				t.mediaElement.events[eventName].splice(_i5, 1);
    950 				return true;
    951 			}
    952 		}
    953 		return false;
    954 	};
    955 
    956 	t.mediaElement.dispatchEvent = function (event) {
    957 		var callbacks = t.mediaElement.events[event.type];
    958 		if (callbacks) {
    959 			for (var _i6 = 0; _i6 < callbacks.length; _i6++) {
    960 				callbacks[_i6].apply(null, [event]);
    961 			}
    962 		}
    963 	};
    964 
    965 	t.mediaElement.destroy = function () {
    966 		var mediaElement = t.mediaElement.originalNode.cloneNode(true);
    967 		var wrapper = t.mediaElement.parentElement;
    968 		mediaElement.removeAttribute('id');
    969 		mediaElement.remove();
    970 		t.mediaElement.remove();
    971 		wrapper.appendChild(mediaElement);
    972 	};
    973 
    974 	if (mediaFiles.length) {
    975 		t.mediaElement.src = mediaFiles;
    976 	}
    977 
    978 	if (t.mediaElement.promises.length) {
    979 		Promise.all(t.mediaElement.promises).then(function () {
    980 			if (t.mediaElement.options.success) {
    981 				t.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode);
    982 			}
    983 		}).catch(function () {
    984 			if (error && t.mediaElement.options.error) {
    985 				t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);
    986 			}
    987 		});
    988 	} else {
    989 		if (t.mediaElement.options.success) {
    990 			t.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode);
    991 		}
    992 
    993 		if (error && t.mediaElement.options.error) {
    994 			t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode);
    995 		}
    996 	}
    997 
    998 	return t.mediaElement;
    999 };
   1000 
   1001 _window2.default.MediaElement = MediaElement;
   1002 _mejs2.default.MediaElement = MediaElement;
   1003 
   1004 exports.default = MediaElement;
   1005 
   1006 },{"2":2,"25":25,"27":27,"28":28,"3":3,"7":7,"8":8}],7:[function(_dereq_,module,exports){
   1007 'use strict';
   1008 
   1009 Object.defineProperty(exports, "__esModule", {
   1010 	value: true
   1011 });
   1012 
   1013 var _window = _dereq_(3);
   1014 
   1015 var _window2 = _interopRequireDefault(_window);
   1016 
   1017 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   1018 
   1019 var mejs = {};
   1020 
   1021 mejs.version = '4.2.16';
   1022 
   1023 mejs.html5media = {
   1024 	properties: ['volume', 'src', 'currentTime', 'muted', 'duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable', 'currentSrc', 'preload', 'bufferedBytes', 'bufferedTime', 'initialTime', 'startOffsetTime', 'defaultPlaybackRate', 'playbackRate', 'played', 'autoplay', 'loop', 'controls'],
   1025 	readOnlyProperties: ['duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable'],
   1026 
   1027 	methods: ['load', 'play', 'pause', 'canPlayType'],
   1028 
   1029 	events: ['loadstart', 'durationchange', 'loadedmetadata', 'loadeddata', 'progress', 'canplay', 'canplaythrough', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'playing', 'pause', 'waiting', 'seeking', 'seeked', 'timeupdate', 'ended', 'ratechange', 'volumechange'],
   1030 
   1031 	mediaTypes: ['audio/mp3', 'audio/ogg', 'audio/oga', 'audio/wav', 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav', 'audio/mpeg', 'audio/mp4', 'video/mp4', 'video/webm', 'video/ogg', 'video/ogv']
   1032 };
   1033 
   1034 _window2.default.mejs = mejs;
   1035 
   1036 exports.default = mejs;
   1037 
   1038 },{"3":3}],8:[function(_dereq_,module,exports){
   1039 'use strict';
   1040 
   1041 Object.defineProperty(exports, "__esModule", {
   1042 	value: true
   1043 });
   1044 exports.renderer = undefined;
   1045 
   1046 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
   1047 
   1048 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
   1049 
   1050 var _mejs = _dereq_(7);
   1051 
   1052 var _mejs2 = _interopRequireDefault(_mejs);
   1053 
   1054 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   1055 
   1056 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
   1057 
   1058 var Renderer = function () {
   1059 	function Renderer() {
   1060 		_classCallCheck(this, Renderer);
   1061 
   1062 		this.renderers = {};
   1063 		this.order = [];
   1064 	}
   1065 
   1066 	_createClass(Renderer, [{
   1067 		key: 'add',
   1068 		value: function add(renderer) {
   1069 			if (renderer.name === undefined) {
   1070 				throw new TypeError('renderer must contain at least `name` property');
   1071 			}
   1072 
   1073 			this.renderers[renderer.name] = renderer;
   1074 			this.order.push(renderer.name);
   1075 		}
   1076 	}, {
   1077 		key: 'select',
   1078 		value: function select(mediaFiles) {
   1079 			var renderers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
   1080 
   1081 			var renderersLength = renderers.length;
   1082 
   1083 			renderers = renderers.length ? renderers : this.order;
   1084 
   1085 			if (!renderersLength) {
   1086 				var rendererIndicator = [/^(html5|native)/i, /^flash/i, /iframe$/i],
   1087 				    rendererRanking = function rendererRanking(renderer) {
   1088 					for (var i = 0, total = rendererIndicator.length; i < total; i++) {
   1089 						if (rendererIndicator[i].test(renderer)) {
   1090 							return i;
   1091 						}
   1092 					}
   1093 					return rendererIndicator.length;
   1094 				};
   1095 
   1096 				renderers.sort(function (a, b) {
   1097 					return rendererRanking(a) - rendererRanking(b);
   1098 				});
   1099 			}
   1100 
   1101 			for (var i = 0, total = renderers.length; i < total; i++) {
   1102 				var key = renderers[i],
   1103 				    _renderer = this.renderers[key];
   1104 
   1105 				if (_renderer !== null && _renderer !== undefined) {
   1106 					for (var j = 0, jl = mediaFiles.length; j < jl; j++) {
   1107 						if (typeof _renderer.canPlayType === 'function' && typeof mediaFiles[j].type === 'string' && _renderer.canPlayType(mediaFiles[j].type)) {
   1108 							return {
   1109 								rendererName: _renderer.name,
   1110 								src: mediaFiles[j].src
   1111 							};
   1112 						}
   1113 					}
   1114 				}
   1115 			}
   1116 
   1117 			return null;
   1118 		}
   1119 	}, {
   1120 		key: 'order',
   1121 		set: function set(order) {
   1122 			if (!Array.isArray(order)) {
   1123 				throw new TypeError('order must be an array of strings.');
   1124 			}
   1125 
   1126 			this._order = order;
   1127 		},
   1128 		get: function get() {
   1129 			return this._order;
   1130 		}
   1131 	}, {
   1132 		key: 'renderers',
   1133 		set: function set(renderers) {
   1134 			if (renderers !== null && (typeof renderers === 'undefined' ? 'undefined' : _typeof(renderers)) !== 'object') {
   1135 				throw new TypeError('renderers must be an array of objects.');
   1136 			}
   1137 
   1138 			this._renderers = renderers;
   1139 		},
   1140 		get: function get() {
   1141 			return this._renderers;
   1142 		}
   1143 	}]);
   1144 
   1145 	return Renderer;
   1146 }();
   1147 
   1148 var renderer = exports.renderer = new Renderer();
   1149 
   1150 _mejs2.default.Renderers = renderer;
   1151 
   1152 },{"7":7}],9:[function(_dereq_,module,exports){
   1153 'use strict';
   1154 
   1155 var _window = _dereq_(3);
   1156 
   1157 var _window2 = _interopRequireDefault(_window);
   1158 
   1159 var _document = _dereq_(2);
   1160 
   1161 var _document2 = _interopRequireDefault(_document);
   1162 
   1163 var _i18n = _dereq_(5);
   1164 
   1165 var _i18n2 = _interopRequireDefault(_i18n);
   1166 
   1167 var _player = _dereq_(16);
   1168 
   1169 var _player2 = _interopRequireDefault(_player);
   1170 
   1171 var _constants = _dereq_(25);
   1172 
   1173 var Features = _interopRequireWildcard(_constants);
   1174 
   1175 var _general = _dereq_(27);
   1176 
   1177 var _dom = _dereq_(26);
   1178 
   1179 var _media = _dereq_(28);
   1180 
   1181 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
   1182 
   1183 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   1184 
   1185 Object.assign(_player.config, {
   1186 	usePluginFullScreen: true,
   1187 
   1188 	fullscreenText: null,
   1189 
   1190 	useFakeFullscreen: false
   1191 });
   1192 
   1193 Object.assign(_player2.default.prototype, {
   1194 	isFullScreen: false,
   1195 
   1196 	isNativeFullScreen: false,
   1197 
   1198 	isInIframe: false,
   1199 
   1200 	isPluginClickThroughCreated: false,
   1201 
   1202 	fullscreenMode: '',
   1203 
   1204 	containerSizeTimeout: null,
   1205 
   1206 	buildfullscreen: function buildfullscreen(player) {
   1207 		if (!player.isVideo) {
   1208 			return;
   1209 		}
   1210 
   1211 		player.isInIframe = _window2.default.location !== _window2.default.parent.location;
   1212 
   1213 		player.detectFullscreenMode();
   1214 
   1215 		var t = this,
   1216 		    fullscreenTitle = (0, _general.isString)(t.options.fullscreenText) ? t.options.fullscreenText : _i18n2.default.t('mejs.fullscreen'),
   1217 		    fullscreenBtn = _document2.default.createElement('div');
   1218 
   1219 		fullscreenBtn.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'fullscreen-button';
   1220 		fullscreenBtn.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + fullscreenTitle + '" aria-label="' + fullscreenTitle + '" tabindex="0"></button>';
   1221 		t.addControlElement(fullscreenBtn, 'fullscreen');
   1222 
   1223 		fullscreenBtn.addEventListener('click', function () {
   1224 			var isFullScreen = Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || player.isFullScreen;
   1225 
   1226 			if (isFullScreen) {
   1227 				player.exitFullScreen();
   1228 			} else {
   1229 				player.enterFullScreen();
   1230 			}
   1231 		});
   1232 
   1233 		player.fullscreenBtn = fullscreenBtn;
   1234 
   1235 		t.options.keyActions.push({
   1236 			keys: [70],
   1237 			action: function action(player, media, key, event) {
   1238 				if (!event.ctrlKey) {
   1239 					if (typeof player.enterFullScreen !== 'undefined') {
   1240 						if (player.isFullScreen) {
   1241 							player.exitFullScreen();
   1242 						} else {
   1243 							player.enterFullScreen();
   1244 						}
   1245 					}
   1246 				}
   1247 			}
   1248 		});
   1249 
   1250 		t.exitFullscreenCallback = function (e) {
   1251 			var key = e.which || e.keyCode || 0;
   1252 			if (t.options.enableKeyboard && key === 27 && (Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || t.isFullScreen)) {
   1253 				player.exitFullScreen();
   1254 			}
   1255 		};
   1256 
   1257 		t.globalBind('keydown', t.exitFullscreenCallback);
   1258 
   1259 		t.normalHeight = 0;
   1260 		t.normalWidth = 0;
   1261 
   1262 		if (Features.HAS_TRUE_NATIVE_FULLSCREEN) {
   1263 			var fullscreenChanged = function fullscreenChanged() {
   1264 				if (player.isFullScreen) {
   1265 					if (Features.isFullScreen()) {
   1266 						player.isNativeFullScreen = true;
   1267 
   1268 						player.setControlsSize();
   1269 					} else {
   1270 						player.isNativeFullScreen = false;
   1271 
   1272 						player.exitFullScreen();
   1273 					}
   1274 				}
   1275 			};
   1276 
   1277 			player.globalBind(Features.FULLSCREEN_EVENT_NAME, fullscreenChanged);
   1278 		}
   1279 	},
   1280 	cleanfullscreen: function cleanfullscreen(player) {
   1281 		player.exitFullScreen();
   1282 		player.globalUnbind('keydown', player.exitFullscreenCallback);
   1283 	},
   1284 	detectFullscreenMode: function detectFullscreenMode() {
   1285 		var t = this,
   1286 		    isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
   1287 
   1288 		var mode = '';
   1289 
   1290 		if (Features.HAS_TRUE_NATIVE_FULLSCREEN && isNative) {
   1291 			mode = 'native-native';
   1292 		} else if (Features.HAS_TRUE_NATIVE_FULLSCREEN && !isNative) {
   1293 			mode = 'plugin-native';
   1294 		} else if (t.usePluginFullScreen && Features.SUPPORT_POINTER_EVENTS) {
   1295 			mode = 'plugin-click';
   1296 		}
   1297 
   1298 		t.fullscreenMode = mode;
   1299 		return mode;
   1300 	},
   1301 	enterFullScreen: function enterFullScreen() {
   1302 		var t = this,
   1303 		    isNative = t.media.rendererName !== null && /(html5|native)/i.test(t.media.rendererName),
   1304 		    containerStyles = getComputedStyle(t.getElement(t.container));
   1305 
   1306 		if (!t.isVideo) {
   1307 			return;
   1308 		}
   1309 
   1310 		if (t.options.useFakeFullscreen === false && Features.IS_IOS && Features.HAS_IOS_FULLSCREEN && typeof t.media.originalNode.webkitEnterFullscreen === 'function' && t.media.originalNode.canPlayType((0, _media.getTypeFromFile)(t.media.getSrc()))) {
   1311 			t.media.originalNode.webkitEnterFullscreen();
   1312 			return;
   1313 		}
   1314 
   1315 		(0, _dom.addClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');
   1316 		(0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen');
   1317 
   1318 		t.normalHeight = parseFloat(containerStyles.height);
   1319 		t.normalWidth = parseFloat(containerStyles.width);
   1320 
   1321 		if (t.fullscreenMode === 'native-native' || t.fullscreenMode === 'plugin-native') {
   1322 			Features.requestFullScreen(t.getElement(t.container));
   1323 
   1324 			if (t.isInIframe) {
   1325 				setTimeout(function checkFullscreen() {
   1326 
   1327 					if (t.isNativeFullScreen) {
   1328 						var percentErrorMargin = 0.002,
   1329 						    windowWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth,
   1330 						    screenWidth = screen.width,
   1331 						    absDiff = Math.abs(screenWidth - windowWidth),
   1332 						    marginError = screenWidth * percentErrorMargin;
   1333 
   1334 						if (absDiff > marginError) {
   1335 							t.exitFullScreen();
   1336 						} else {
   1337 							setTimeout(checkFullscreen, 500);
   1338 						}
   1339 					}
   1340 				}, 1000);
   1341 			}
   1342 		}
   1343 
   1344 		t.getElement(t.container).style.width = '100%';
   1345 		t.getElement(t.container).style.height = '100%';
   1346 
   1347 		t.containerSizeTimeout = setTimeout(function () {
   1348 			t.getElement(t.container).style.width = '100%';
   1349 			t.getElement(t.container).style.height = '100%';
   1350 			t.setControlsSize();
   1351 		}, 500);
   1352 
   1353 		if (isNative) {
   1354 			t.node.style.width = '100%';
   1355 			t.node.style.height = '100%';
   1356 		} else {
   1357 			var elements = t.getElement(t.container).querySelectorAll('embed, object, video'),
   1358 			    _total = elements.length;
   1359 			for (var i = 0; i < _total; i++) {
   1360 				elements[i].style.width = '100%';
   1361 				elements[i].style.height = '100%';
   1362 			}
   1363 		}
   1364 
   1365 		if (t.options.setDimensions && typeof t.media.setSize === 'function') {
   1366 			t.media.setSize(screen.width, screen.height);
   1367 		}
   1368 
   1369 		var layers = t.getElement(t.layers).children,
   1370 		    total = layers.length;
   1371 		for (var _i = 0; _i < total; _i++) {
   1372 			layers[_i].style.width = '100%';
   1373 			layers[_i].style.height = '100%';
   1374 		}
   1375 
   1376 		if (t.fullscreenBtn) {
   1377 			(0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');
   1378 			(0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');
   1379 		}
   1380 
   1381 		t.setControlsSize();
   1382 		t.isFullScreen = true;
   1383 
   1384 		var zoomFactor = Math.min(screen.width / t.width, screen.height / t.height),
   1385 		    captionText = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-text');
   1386 		if (captionText) {
   1387 			captionText.style.fontSize = zoomFactor * 100 + '%';
   1388 			captionText.style.lineHeight = 'normal';
   1389 			t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = (screen.height - t.normalHeight) / 2 - t.getElement(t.controls).offsetHeight / 2 + zoomFactor + 15 + 'px';
   1390 		}
   1391 		var event = (0, _general.createEvent)('enteredfullscreen', t.getElement(t.container));
   1392 		t.getElement(t.container).dispatchEvent(event);
   1393 	},
   1394 	exitFullScreen: function exitFullScreen() {
   1395 		var t = this,
   1396 		    isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
   1397 
   1398 		if (!t.isVideo) {
   1399 			return;
   1400 		}
   1401 
   1402 		clearTimeout(t.containerSizeTimeout);
   1403 
   1404 		if (Features.HAS_TRUE_NATIVE_FULLSCREEN && (Features.IS_FULLSCREEN || t.isFullScreen)) {
   1405 			Features.cancelFullScreen();
   1406 		}
   1407 
   1408 		(0, _dom.removeClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen');
   1409 		(0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen');
   1410 
   1411 		if (t.options.setDimensions) {
   1412 			t.getElement(t.container).style.width = t.normalWidth + 'px';
   1413 			t.getElement(t.container).style.height = t.normalHeight + 'px';
   1414 
   1415 			if (isNative) {
   1416 				t.node.style.width = t.normalWidth + 'px';
   1417 				t.node.style.height = t.normalHeight + 'px';
   1418 			} else {
   1419 				var elements = t.getElement(t.container).querySelectorAll('embed, object, video'),
   1420 				    _total2 = elements.length;
   1421 				for (var i = 0; i < _total2; i++) {
   1422 					elements[i].style.width = t.normalWidth + 'px';
   1423 					elements[i].style.height = t.normalHeight + 'px';
   1424 				}
   1425 			}
   1426 
   1427 			if (typeof t.media.setSize === 'function') {
   1428 				t.media.setSize(t.normalWidth, t.normalHeight);
   1429 			}
   1430 
   1431 			var layers = t.getElement(t.layers).children,
   1432 			    total = layers.length;
   1433 			for (var _i2 = 0; _i2 < total; _i2++) {
   1434 				layers[_i2].style.width = t.normalWidth + 'px';
   1435 				layers[_i2].style.height = t.normalHeight + 'px';
   1436 			}
   1437 		}
   1438 
   1439 		if (t.fullscreenBtn) {
   1440 			(0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen');
   1441 			(0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen');
   1442 		}
   1443 
   1444 		t.setControlsSize();
   1445 		t.isFullScreen = false;
   1446 
   1447 		var captionText = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-text');
   1448 		if (captionText) {
   1449 			captionText.style.fontSize = '';
   1450 			captionText.style.lineHeight = '';
   1451 			t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = '';
   1452 		}
   1453 		var event = (0, _general.createEvent)('exitedfullscreen', t.getElement(t.container));
   1454 		t.getElement(t.container).dispatchEvent(event);
   1455 	}
   1456 });
   1457 
   1458 },{"16":16,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"5":5}],10:[function(_dereq_,module,exports){
   1459 'use strict';
   1460 
   1461 var _document = _dereq_(2);
   1462 
   1463 var _document2 = _interopRequireDefault(_document);
   1464 
   1465 var _player = _dereq_(16);
   1466 
   1467 var _player2 = _interopRequireDefault(_player);
   1468 
   1469 var _i18n = _dereq_(5);
   1470 
   1471 var _i18n2 = _interopRequireDefault(_i18n);
   1472 
   1473 var _general = _dereq_(27);
   1474 
   1475 var _dom = _dereq_(26);
   1476 
   1477 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   1478 
   1479 Object.assign(_player.config, {
   1480 	playText: null,
   1481 
   1482 	pauseText: null
   1483 });
   1484 
   1485 Object.assign(_player2.default.prototype, {
   1486 	buildplaypause: function buildplaypause(player, controls, layers, media) {
   1487 		var t = this,
   1488 		    op = t.options,
   1489 		    playTitle = (0, _general.isString)(op.playText) ? op.playText : _i18n2.default.t('mejs.play'),
   1490 		    pauseTitle = (0, _general.isString)(op.pauseText) ? op.pauseText : _i18n2.default.t('mejs.pause'),
   1491 		    play = _document2.default.createElement('div');
   1492 
   1493 		play.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'playpause-button ' + t.options.classPrefix + 'play';
   1494 		play.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + playTitle + '" aria-label="' + pauseTitle + '" tabindex="0"></button>';
   1495 		play.addEventListener('click', function () {
   1496 			if (t.paused) {
   1497 				t.play();
   1498 			} else {
   1499 				t.pause();
   1500 			}
   1501 		});
   1502 
   1503 		var playBtn = play.querySelector('button');
   1504 		t.addControlElement(play, 'playpause');
   1505 
   1506 		function togglePlayPause(which) {
   1507 			if ('play' === which) {
   1508 				(0, _dom.removeClass)(play, t.options.classPrefix + 'play');
   1509 				(0, _dom.removeClass)(play, t.options.classPrefix + 'replay');
   1510 				(0, _dom.addClass)(play, t.options.classPrefix + 'pause');
   1511 				playBtn.setAttribute('title', pauseTitle);
   1512 				playBtn.setAttribute('aria-label', pauseTitle);
   1513 			} else {
   1514 
   1515 				(0, _dom.removeClass)(play, t.options.classPrefix + 'pause');
   1516 				(0, _dom.removeClass)(play, t.options.classPrefix + 'replay');
   1517 				(0, _dom.addClass)(play, t.options.classPrefix + 'play');
   1518 				playBtn.setAttribute('title', playTitle);
   1519 				playBtn.setAttribute('aria-label', playTitle);
   1520 			}
   1521 		}
   1522 
   1523 		togglePlayPause('pse');
   1524 
   1525 		media.addEventListener('loadedmetadata', function () {
   1526 			if (media.rendererName.indexOf('flash') === -1) {
   1527 				togglePlayPause('pse');
   1528 			}
   1529 		});
   1530 		media.addEventListener('play', function () {
   1531 			togglePlayPause('play');
   1532 		});
   1533 		media.addEventListener('playing', function () {
   1534 			togglePlayPause('play');
   1535 		});
   1536 		media.addEventListener('pause', function () {
   1537 			togglePlayPause('pse');
   1538 		});
   1539 		media.addEventListener('ended', function () {
   1540 			if (!player.options.loop) {
   1541 				(0, _dom.removeClass)(play, t.options.classPrefix + 'pause');
   1542 				(0, _dom.removeClass)(play, t.options.classPrefix + 'play');
   1543 				(0, _dom.addClass)(play, t.options.classPrefix + 'replay');
   1544 				playBtn.setAttribute('title', playTitle);
   1545 				playBtn.setAttribute('aria-label', playTitle);
   1546 			}
   1547 		});
   1548 	}
   1549 });
   1550 
   1551 },{"16":16,"2":2,"26":26,"27":27,"5":5}],11:[function(_dereq_,module,exports){
   1552 'use strict';
   1553 
   1554 var _document = _dereq_(2);
   1555 
   1556 var _document2 = _interopRequireDefault(_document);
   1557 
   1558 var _player = _dereq_(16);
   1559 
   1560 var _player2 = _interopRequireDefault(_player);
   1561 
   1562 var _i18n = _dereq_(5);
   1563 
   1564 var _i18n2 = _interopRequireDefault(_i18n);
   1565 
   1566 var _constants = _dereq_(25);
   1567 
   1568 var _time = _dereq_(30);
   1569 
   1570 var _dom = _dereq_(26);
   1571 
   1572 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   1573 
   1574 Object.assign(_player.config, {
   1575 	enableProgressTooltip: true,
   1576 
   1577 	useSmoothHover: true,
   1578 
   1579 	forceLive: false
   1580 });
   1581 
   1582 Object.assign(_player2.default.prototype, {
   1583 	buildprogress: function buildprogress(player, controls, layers, media) {
   1584 
   1585 		var lastKeyPressTime = 0,
   1586 		    mouseIsDown = false,
   1587 		    startedPaused = false;
   1588 
   1589 		var t = this,
   1590 		    autoRewindInitial = player.options.autoRewind,
   1591 		    tooltip = player.options.enableProgressTooltip ? '<span class="' + t.options.classPrefix + 'time-float">' + ('<span class="' + t.options.classPrefix + 'time-float-current">00:00</span>') + ('<span class="' + t.options.classPrefix + 'time-float-corner"></span>') + '</span>' : '',
   1592 		    rail = _document2.default.createElement('div');
   1593 
   1594 		rail.className = t.options.classPrefix + 'time-rail';
   1595 		rail.innerHTML = '<span class="' + t.options.classPrefix + 'time-total ' + t.options.classPrefix + 'time-slider">' + ('<span class="' + t.options.classPrefix + 'time-buffering"></span>') + ('<span class="' + t.options.classPrefix + 'time-loaded"></span>') + ('<span class="' + t.options.classPrefix + 'time-current"></span>') + ('<span class="' + t.options.classPrefix + 'time-hovered no-hover"></span>') + ('<span class="' + t.options.classPrefix + 'time-handle"><span class="' + t.options.classPrefix + 'time-handle-content"></span></span>') + ('' + tooltip) + '</span>';
   1596 
   1597 		t.addControlElement(rail, 'progress');
   1598 
   1599 		t.options.keyActions.push({
   1600 			keys: [37, 227],
   1601 			action: function action(player) {
   1602 				if (!isNaN(player.duration) && player.duration > 0) {
   1603 					if (player.isVideo) {
   1604 						player.showControls();
   1605 						player.startControlsTimer();
   1606 					}
   1607 
   1608 					var timeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'time-total');
   1609 					if (timeSlider) {
   1610 						timeSlider.focus();
   1611 					}
   1612 
   1613 					var newTime = Math.max(player.currentTime - player.options.defaultSeekBackwardInterval(player), 0);
   1614 
   1615 					if (!player.paused) {
   1616 						player.pause();
   1617 					}
   1618 
   1619 					setTimeout(function () {
   1620 						player.setCurrentTime(newTime);
   1621 					}, 0);
   1622 
   1623 					setTimeout(function () {
   1624 						player.play();
   1625 					}, 0);
   1626 				}
   1627 			}
   1628 		}, {
   1629 			keys: [39, 228],
   1630 			action: function action(player) {
   1631 
   1632 				if (!isNaN(player.duration) && player.duration > 0) {
   1633 					if (player.isVideo) {
   1634 						player.showControls();
   1635 						player.startControlsTimer();
   1636 					}
   1637 
   1638 					var timeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'time-total');
   1639 					if (timeSlider) {
   1640 						timeSlider.focus();
   1641 					}
   1642 
   1643 					var newTime = Math.min(player.currentTime + player.options.defaultSeekForwardInterval(player), player.duration);
   1644 
   1645 					if (!player.paused) {
   1646 						player.pause();
   1647 					}
   1648 
   1649 					setTimeout(function () {
   1650 						player.setCurrentTime(newTime);
   1651 					}, 0);
   1652 
   1653 					setTimeout(function () {
   1654 						player.play();
   1655 					}, 0);
   1656 				}
   1657 			}
   1658 		});
   1659 
   1660 		t.rail = controls.querySelector('.' + t.options.classPrefix + 'time-rail');
   1661 		t.total = controls.querySelector('.' + t.options.classPrefix + 'time-total');
   1662 		t.loaded = controls.querySelector('.' + t.options.classPrefix + 'time-loaded');
   1663 		t.current = controls.querySelector('.' + t.options.classPrefix + 'time-current');
   1664 		t.handle = controls.querySelector('.' + t.options.classPrefix + 'time-handle');
   1665 		t.timefloat = controls.querySelector('.' + t.options.classPrefix + 'time-float');
   1666 		t.timefloatcurrent = controls.querySelector('.' + t.options.classPrefix + 'time-float-current');
   1667 		t.slider = controls.querySelector('.' + t.options.classPrefix + 'time-slider');
   1668 		t.hovered = controls.querySelector('.' + t.options.classPrefix + 'time-hovered');
   1669 		t.buffer = controls.querySelector('.' + t.options.classPrefix + 'time-buffering');
   1670 		t.newTime = 0;
   1671 		t.forcedHandlePause = false;
   1672 		t.setTransformStyle = function (element, value) {
   1673 			element.style.transform = value;
   1674 			element.style.webkitTransform = value;
   1675 			element.style.MozTransform = value;
   1676 			element.style.msTransform = value;
   1677 			element.style.OTransform = value;
   1678 		};
   1679 
   1680 		t.buffer.style.display = 'none';
   1681 
   1682 		var handleMouseMove = function handleMouseMove(e) {
   1683 			var totalStyles = getComputedStyle(t.total),
   1684 			    offsetStyles = (0, _dom.offset)(t.total),
   1685 			    width = t.total.offsetWidth,
   1686 			    transform = function () {
   1687 				if (totalStyles.webkitTransform !== undefined) {
   1688 					return 'webkitTransform';
   1689 				} else if (totalStyles.mozTransform !== undefined) {
   1690 					return 'mozTransform ';
   1691 				} else if (totalStyles.oTransform !== undefined) {
   1692 					return 'oTransform';
   1693 				} else if (totalStyles.msTransform !== undefined) {
   1694 					return 'msTransform';
   1695 				} else {
   1696 					return 'transform';
   1697 				}
   1698 			}(),
   1699 			    cssMatrix = function () {
   1700 				if ('WebKitCSSMatrix' in window) {
   1701 					return 'WebKitCSSMatrix';
   1702 				} else if ('MSCSSMatrix' in window) {
   1703 					return 'MSCSSMatrix';
   1704 				} else if ('CSSMatrix' in window) {
   1705 					return 'CSSMatrix';
   1706 				}
   1707 			}();
   1708 
   1709 			var percentage = 0,
   1710 			    leftPos = 0,
   1711 			    pos = 0,
   1712 			    x = void 0;
   1713 
   1714 			if (e.originalEvent && e.originalEvent.changedTouches) {
   1715 				x = e.originalEvent.changedTouches[0].pageX;
   1716 			} else if (e.changedTouches) {
   1717 				x = e.changedTouches[0].pageX;
   1718 			} else {
   1719 				x = e.pageX;
   1720 			}
   1721 
   1722 			if (t.getDuration()) {
   1723 				if (x < offsetStyles.left) {
   1724 					x = offsetStyles.left;
   1725 				} else if (x > width + offsetStyles.left) {
   1726 					x = width + offsetStyles.left;
   1727 				}
   1728 
   1729 				pos = x - offsetStyles.left;
   1730 				percentage = pos / width;
   1731 				t.newTime = percentage * t.getDuration();
   1732 
   1733 				if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {
   1734 					t.setCurrentRailHandle(t.newTime);
   1735 					t.updateCurrent(t.newTime);
   1736 				}
   1737 
   1738 				if (!_constants.IS_IOS && !_constants.IS_ANDROID) {
   1739 					if (pos < 0) {
   1740 						pos = 0;
   1741 					}
   1742 					if (t.options.useSmoothHover && cssMatrix !== null && typeof window[cssMatrix] !== 'undefined') {
   1743 						var matrix = new window[cssMatrix](getComputedStyle(t.handle)[transform]),
   1744 						    handleLocation = matrix.m41,
   1745 						    hoverScaleX = pos / parseFloat(getComputedStyle(t.total).width) - handleLocation / parseFloat(getComputedStyle(t.total).width);
   1746 
   1747 						t.hovered.style.left = handleLocation + 'px';
   1748 						t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');
   1749 						t.hovered.setAttribute('pos', pos);
   1750 
   1751 						if (hoverScaleX >= 0) {
   1752 							(0, _dom.removeClass)(t.hovered, 'negative');
   1753 						} else {
   1754 							(0, _dom.addClass)(t.hovered, 'negative');
   1755 						}
   1756 					}
   1757 
   1758 					if (t.timefloat) {
   1759 						var half = t.timefloat.offsetWidth / 2,
   1760 						    offsetContainer = mejs.Utils.offset(t.getElement(t.container)),
   1761 						    tooltipStyles = getComputedStyle(t.timefloat);
   1762 
   1763 						if (x - offsetContainer.left < t.timefloat.offsetWidth) {
   1764 							leftPos = half;
   1765 						} else if (x - offsetContainer.left >= t.getElement(t.container).offsetWidth - half) {
   1766 							leftPos = t.total.offsetWidth - half;
   1767 						} else {
   1768 							leftPos = pos;
   1769 						}
   1770 
   1771 						if ((0, _dom.hasClass)(t.getElement(t.container), t.options.classPrefix + 'long-video')) {
   1772 							leftPos += parseFloat(tooltipStyles.marginLeft) / 2 + t.timefloat.offsetWidth / 2;
   1773 						}
   1774 
   1775 						t.timefloat.style.left = leftPos + 'px';
   1776 						t.timefloatcurrent.innerHTML = (0, _time.secondsToTimeCode)(t.newTime, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat);
   1777 						t.timefloat.style.display = 'block';
   1778 					}
   1779 				}
   1780 			} else if (!_constants.IS_IOS && !_constants.IS_ANDROID && t.timefloat) {
   1781 				leftPos = t.timefloat.offsetWidth + width >= t.getElement(t.container).offsetWidth ? t.timefloat.offsetWidth / 2 : 0;
   1782 				t.timefloat.style.left = leftPos + 'px';
   1783 				t.timefloat.style.left = leftPos + 'px';
   1784 				t.timefloat.style.display = 'block';
   1785 			}
   1786 		},
   1787 		    updateSlider = function updateSlider() {
   1788 			var seconds = t.getCurrentTime(),
   1789 			    timeSliderText = _i18n2.default.t('mejs.time-slider'),
   1790 			    time = (0, _time.secondsToTimeCode)(seconds, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat),
   1791 			    duration = t.getDuration();
   1792 
   1793 			t.slider.setAttribute('role', 'slider');
   1794 			t.slider.tabIndex = 0;
   1795 
   1796 			if (media.paused) {
   1797 				t.slider.setAttribute('aria-label', timeSliderText);
   1798 				t.slider.setAttribute('aria-valuemin', 0);
   1799 				t.slider.setAttribute('aria-valuemax', isNaN(duration) ? 0 : duration);
   1800 				t.slider.setAttribute('aria-valuenow', seconds);
   1801 				t.slider.setAttribute('aria-valuetext', time);
   1802 			} else {
   1803 				t.slider.removeAttribute('aria-label');
   1804 				t.slider.removeAttribute('aria-valuemin');
   1805 				t.slider.removeAttribute('aria-valuemax');
   1806 				t.slider.removeAttribute('aria-valuenow');
   1807 				t.slider.removeAttribute('aria-valuetext');
   1808 			}
   1809 		},
   1810 		    restartPlayer = function restartPlayer() {
   1811 			if (new Date() - lastKeyPressTime >= 1000) {
   1812 				t.play();
   1813 			}
   1814 		},
   1815 		    handleMouseup = function handleMouseup() {
   1816 			if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) {
   1817 				t.setCurrentTime(t.newTime);
   1818 				t.setCurrentRailHandle(t.newTime);
   1819 				t.updateCurrent(t.newTime);
   1820 			}
   1821 			if (t.forcedHandlePause) {
   1822 				t.slider.focus();
   1823 				t.play();
   1824 			}
   1825 			t.forcedHandlePause = false;
   1826 		};
   1827 
   1828 		t.slider.addEventListener('focus', function () {
   1829 			player.options.autoRewind = false;
   1830 		});
   1831 		t.slider.addEventListener('blur', function () {
   1832 			player.options.autoRewind = autoRewindInitial;
   1833 		});
   1834 		t.slider.addEventListener('keydown', function (e) {
   1835 			if (new Date() - lastKeyPressTime >= 1000) {
   1836 				startedPaused = t.paused;
   1837 			}
   1838 
   1839 			if (t.options.enableKeyboard && t.options.keyActions.length) {
   1840 
   1841 				var keyCode = e.which || e.keyCode || 0,
   1842 				    duration = t.getDuration(),
   1843 				    seekForward = player.options.defaultSeekForwardInterval(media),
   1844 				    seekBackward = player.options.defaultSeekBackwardInterval(media);
   1845 
   1846 				var seekTime = t.getCurrentTime();
   1847 				var volume = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-slider');
   1848 
   1849 				if (keyCode === 38 || keyCode === 40) {
   1850 					if (volume) {
   1851 						volume.style.display = 'block';
   1852 					}
   1853 					if (t.isVideo) {
   1854 						t.showControls();
   1855 						t.startControlsTimer();
   1856 					}
   1857 
   1858 					var newVolume = keyCode === 38 ? Math.min(t.volume + 0.1, 1) : Math.max(t.volume - 0.1, 0),
   1859 					    mutePlayer = newVolume <= 0;
   1860 					t.setVolume(newVolume);
   1861 					t.setMuted(mutePlayer);
   1862 					return;
   1863 				} else {
   1864 					if (volume) {
   1865 						volume.style.display = 'none';
   1866 					}
   1867 				}
   1868 
   1869 				switch (keyCode) {
   1870 					case 37:
   1871 						if (t.getDuration() !== Infinity) {
   1872 							seekTime -= seekBackward;
   1873 						}
   1874 						break;
   1875 					case 39:
   1876 						if (t.getDuration() !== Infinity) {
   1877 							seekTime += seekForward;
   1878 						}
   1879 						break;
   1880 					case 36:
   1881 						seekTime = 0;
   1882 						break;
   1883 					case 35:
   1884 						seekTime = duration;
   1885 						break;
   1886 					case 13:
   1887 					case 32:
   1888 						if (_constants.IS_FIREFOX) {
   1889 							if (t.paused) {
   1890 								t.play();
   1891 							} else {
   1892 								t.pause();
   1893 							}
   1894 						}
   1895 						return;
   1896 					default:
   1897 						return;
   1898 				}
   1899 
   1900 				seekTime = seekTime < 0 || isNaN(seekTime) ? 0 : seekTime >= duration ? duration : Math.floor(seekTime);
   1901 				lastKeyPressTime = new Date();
   1902 				if (!startedPaused) {
   1903 					player.pause();
   1904 				}
   1905 
   1906 				setTimeout(function () {
   1907 					t.setCurrentTime(seekTime);
   1908 				}, 0);
   1909 
   1910 				if (seekTime < t.getDuration() && !startedPaused) {
   1911 					setTimeout(restartPlayer, 1100);
   1912 				}
   1913 
   1914 				player.showControls();
   1915 
   1916 				e.preventDefault();
   1917 				e.stopPropagation();
   1918 			}
   1919 		});
   1920 
   1921 		var events = ['mousedown', 'touchstart'];
   1922 
   1923 		t.slider.addEventListener('dragstart', function () {
   1924 			return false;
   1925 		});
   1926 
   1927 		for (var i = 0, total = events.length; i < total; i++) {
   1928 			t.slider.addEventListener(events[i], function (e) {
   1929 				t.forcedHandlePause = false;
   1930 				if (t.getDuration() !== Infinity) {
   1931 					if (e.which === 1 || e.which === 0) {
   1932 						if (!t.paused) {
   1933 							t.pause();
   1934 							t.forcedHandlePause = true;
   1935 						}
   1936 
   1937 						mouseIsDown = true;
   1938 						handleMouseMove(e);
   1939 						var endEvents = ['mouseup', 'touchend'];
   1940 
   1941 						for (var j = 0, totalEvents = endEvents.length; j < totalEvents; j++) {
   1942 							t.getElement(t.container).addEventListener(endEvents[j], function (event) {
   1943 								var target = event.target;
   1944 								if (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) {
   1945 									handleMouseMove(event);
   1946 								}
   1947 							});
   1948 						}
   1949 						t.globalBind('mouseup.dur touchend.dur', function () {
   1950 							handleMouseup();
   1951 							mouseIsDown = false;
   1952 							if (t.timefloat) {
   1953 								t.timefloat.style.display = 'none';
   1954 							}
   1955 						});
   1956 					}
   1957 				}
   1958 			}, _constants.SUPPORT_PASSIVE_EVENT && events[i] === 'touchstart' ? { passive: true } : false);
   1959 		}
   1960 		t.slider.addEventListener('mouseenter', function (e) {
   1961 			if (e.target === t.slider && t.getDuration() !== Infinity) {
   1962 				t.getElement(t.container).addEventListener('mousemove', function (event) {
   1963 					var target = event.target;
   1964 					if (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) {
   1965 						handleMouseMove(event);
   1966 					}
   1967 				});
   1968 				if (t.timefloat && !_constants.IS_IOS && !_constants.IS_ANDROID) {
   1969 					t.timefloat.style.display = 'block';
   1970 				}
   1971 				if (t.hovered && !_constants.IS_IOS && !_constants.IS_ANDROID && t.options.useSmoothHover) {
   1972 					(0, _dom.removeClass)(t.hovered, 'no-hover');
   1973 				}
   1974 			}
   1975 		});
   1976 		t.slider.addEventListener('mouseleave', function () {
   1977 			if (t.getDuration() !== Infinity) {
   1978 				if (!mouseIsDown) {
   1979 					if (t.timefloat) {
   1980 						t.timefloat.style.display = 'none';
   1981 					}
   1982 					if (t.hovered && t.options.useSmoothHover) {
   1983 						(0, _dom.addClass)(t.hovered, 'no-hover');
   1984 					}
   1985 				}
   1986 			}
   1987 		});
   1988 
   1989 		t.broadcastCallback = function (e) {
   1990 			var broadcast = controls.querySelector('.' + t.options.classPrefix + 'broadcast');
   1991 			if (!t.options.forceLive && t.getDuration() !== Infinity) {
   1992 				if (broadcast) {
   1993 					t.slider.style.display = '';
   1994 					broadcast.remove();
   1995 				}
   1996 
   1997 				player.setProgressRail(e);
   1998 				if (!t.forcedHandlePause) {
   1999 					player.setCurrentRail(e);
   2000 				}
   2001 				updateSlider();
   2002 			} else if (!broadcast && t.options.forceLive) {
   2003 				var label = _document2.default.createElement('span');
   2004 				label.className = t.options.classPrefix + 'broadcast';
   2005 				label.innerText = _i18n2.default.t('mejs.live-broadcast');
   2006 				t.slider.style.display = 'none';
   2007 				t.rail.appendChild(label);
   2008 			}
   2009 		};
   2010 
   2011 		media.addEventListener('progress', t.broadcastCallback);
   2012 		media.addEventListener('timeupdate', t.broadcastCallback);
   2013 		media.addEventListener('play', function () {
   2014 			t.buffer.style.display = 'none';
   2015 		});
   2016 		media.addEventListener('playing', function () {
   2017 			t.buffer.style.display = 'none';
   2018 		});
   2019 		media.addEventListener('seeking', function () {
   2020 			t.buffer.style.display = '';
   2021 		});
   2022 		media.addEventListener('seeked', function () {
   2023 			t.buffer.style.display = 'none';
   2024 		});
   2025 		media.addEventListener('pause', function () {
   2026 			t.buffer.style.display = 'none';
   2027 		});
   2028 		media.addEventListener('waiting', function () {
   2029 			t.buffer.style.display = '';
   2030 		});
   2031 		media.addEventListener('loadeddata', function () {
   2032 			t.buffer.style.display = '';
   2033 		});
   2034 		media.addEventListener('canplay', function () {
   2035 			t.buffer.style.display = 'none';
   2036 		});
   2037 		media.addEventListener('error', function () {
   2038 			t.buffer.style.display = 'none';
   2039 		});
   2040 
   2041 		t.getElement(t.container).addEventListener('controlsresize', function (e) {
   2042 			if (t.getDuration() !== Infinity) {
   2043 				player.setProgressRail(e);
   2044 				if (!t.forcedHandlePause) {
   2045 					player.setCurrentRail(e);
   2046 				}
   2047 			}
   2048 		});
   2049 	},
   2050 	cleanprogress: function cleanprogress(player, controls, layers, media) {
   2051 		media.removeEventListener('progress', player.broadcastCallback);
   2052 		media.removeEventListener('timeupdate', player.broadcastCallback);
   2053 		if (player.rail) {
   2054 			player.rail.remove();
   2055 		}
   2056 	},
   2057 	setProgressRail: function setProgressRail(e) {
   2058 		var t = this,
   2059 		    target = e !== undefined ? e.detail.target || e.target : t.media;
   2060 
   2061 		var percent = null;
   2062 
   2063 		if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && t.getDuration()) {
   2064 			percent = target.buffered.end(target.buffered.length - 1) / t.getDuration();
   2065 		} else if (target && target.bytesTotal !== undefined && target.bytesTotal > 0 && target.bufferedBytes !== undefined) {
   2066 				percent = target.bufferedBytes / target.bytesTotal;
   2067 			} else if (e && e.lengthComputable && e.total !== 0) {
   2068 					percent = e.loaded / e.total;
   2069 				}
   2070 
   2071 		if (percent !== null) {
   2072 			percent = Math.min(1, Math.max(0, percent));
   2073 
   2074 			if (t.loaded) {
   2075 				t.setTransformStyle(t.loaded, 'scaleX(' + percent + ')');
   2076 			}
   2077 		}
   2078 	},
   2079 	setCurrentRailHandle: function setCurrentRailHandle(fakeTime) {
   2080 		var t = this;
   2081 		t.setCurrentRailMain(t, fakeTime);
   2082 	},
   2083 	setCurrentRail: function setCurrentRail() {
   2084 		var t = this;
   2085 		t.setCurrentRailMain(t);
   2086 	},
   2087 	setCurrentRailMain: function setCurrentRailMain(t, fakeTime) {
   2088 		if (t.getCurrentTime() !== undefined && t.getDuration()) {
   2089 			var nTime = typeof fakeTime === 'undefined' ? t.getCurrentTime() : fakeTime;
   2090 
   2091 			if (t.total && t.handle) {
   2092 				var tW = parseFloat(getComputedStyle(t.total).width);
   2093 
   2094 				var newWidth = Math.round(tW * nTime / t.getDuration()),
   2095 				    handlePos = newWidth - Math.round(t.handle.offsetWidth / 2);
   2096 
   2097 				handlePos = handlePos < 0 ? 0 : handlePos;
   2098 				t.setTransformStyle(t.current, 'scaleX(' + newWidth / tW + ')');
   2099 				t.setTransformStyle(t.handle, 'translateX(' + handlePos + 'px)');
   2100 
   2101 				if (t.options.useSmoothHover && !(0, _dom.hasClass)(t.hovered, 'no-hover')) {
   2102 					var pos = parseInt(t.hovered.getAttribute('pos'), 10);
   2103 					pos = isNaN(pos) ? 0 : pos;
   2104 
   2105 					var hoverScaleX = pos / tW - handlePos / tW;
   2106 
   2107 					t.hovered.style.left = handlePos + 'px';
   2108 					t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')');
   2109 
   2110 					if (hoverScaleX >= 0) {
   2111 						(0, _dom.removeClass)(t.hovered, 'negative');
   2112 					} else {
   2113 						(0, _dom.addClass)(t.hovered, 'negative');
   2114 					}
   2115 				}
   2116 			}
   2117 		}
   2118 	}
   2119 });
   2120 
   2121 },{"16":16,"2":2,"25":25,"26":26,"30":30,"5":5}],12:[function(_dereq_,module,exports){
   2122 'use strict';
   2123 
   2124 var _document = _dereq_(2);
   2125 
   2126 var _document2 = _interopRequireDefault(_document);
   2127 
   2128 var _player = _dereq_(16);
   2129 
   2130 var _player2 = _interopRequireDefault(_player);
   2131 
   2132 var _time = _dereq_(30);
   2133 
   2134 var _dom = _dereq_(26);
   2135 
   2136 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   2137 
   2138 Object.assign(_player.config, {
   2139 	duration: 0,
   2140 
   2141 	timeAndDurationSeparator: '<span> | </span>'
   2142 });
   2143 
   2144 Object.assign(_player2.default.prototype, {
   2145 	buildcurrent: function buildcurrent(player, controls, layers, media) {
   2146 		var t = this,
   2147 		    time = _document2.default.createElement('div');
   2148 
   2149 		time.className = t.options.classPrefix + 'time';
   2150 		time.setAttribute('role', 'timer');
   2151 		time.setAttribute('aria-live', 'off');
   2152 		time.innerHTML = '<span class="' + t.options.classPrefix + 'currenttime">' + (0, _time.secondsToTimeCode)(0, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat) + '</span>';
   2153 
   2154 		t.addControlElement(time, 'current');
   2155 		player.updateCurrent();
   2156 		t.updateTimeCallback = function () {
   2157 			if (t.controlsAreVisible) {
   2158 				player.updateCurrent();
   2159 			}
   2160 		};
   2161 		media.addEventListener('timeupdate', t.updateTimeCallback);
   2162 	},
   2163 	cleancurrent: function cleancurrent(player, controls, layers, media) {
   2164 		media.removeEventListener('timeupdate', player.updateTimeCallback);
   2165 	},
   2166 	buildduration: function buildduration(player, controls, layers, media) {
   2167 		var t = this,
   2168 		    currTime = controls.lastChild.querySelector('.' + t.options.classPrefix + 'currenttime');
   2169 
   2170 		if (currTime) {
   2171 			controls.querySelector('.' + t.options.classPrefix + 'time').innerHTML += t.options.timeAndDurationSeparator + '<span class="' + t.options.classPrefix + 'duration">' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat) + '</span>');
   2172 		} else {
   2173 			if (controls.querySelector('.' + t.options.classPrefix + 'currenttime')) {
   2174 				(0, _dom.addClass)(controls.querySelector('.' + t.options.classPrefix + 'currenttime').parentNode, t.options.classPrefix + 'currenttime-container');
   2175 			}
   2176 
   2177 			var duration = _document2.default.createElement('div');
   2178 			duration.className = t.options.classPrefix + 'time ' + t.options.classPrefix + 'duration-container';
   2179 			duration.innerHTML = '<span class="' + t.options.classPrefix + 'duration">' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat) + '</span>');
   2180 
   2181 			t.addControlElement(duration, 'duration');
   2182 		}
   2183 
   2184 		t.updateDurationCallback = function () {
   2185 			if (t.controlsAreVisible) {
   2186 				player.updateDuration();
   2187 			}
   2188 		};
   2189 
   2190 		media.addEventListener('timeupdate', t.updateDurationCallback);
   2191 	},
   2192 	cleanduration: function cleanduration(player, controls, layers, media) {
   2193 		media.removeEventListener('timeupdate', player.updateDurationCallback);
   2194 	},
   2195 	updateCurrent: function updateCurrent() {
   2196 		var t = this;
   2197 
   2198 		var currentTime = t.getCurrentTime();
   2199 
   2200 		if (isNaN(currentTime)) {
   2201 			currentTime = 0;
   2202 		}
   2203 
   2204 		var timecode = (0, _time.secondsToTimeCode)(currentTime, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat);
   2205 
   2206 		if (timecode.length > 5) {
   2207 			(0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
   2208 		} else {
   2209 			(0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
   2210 		}
   2211 
   2212 		if (t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime')) {
   2213 			t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime').innerText = timecode;
   2214 		}
   2215 	},
   2216 	updateDuration: function updateDuration() {
   2217 		var t = this;
   2218 
   2219 		var duration = t.getDuration();
   2220 
   2221 		if (t.media !== undefined && (isNaN(duration) || duration === Infinity || duration < 0)) {
   2222 			t.media.duration = t.options.duration = duration = 0;
   2223 		}
   2224 
   2225 		if (t.options.duration > 0) {
   2226 			duration = t.options.duration;
   2227 		}
   2228 
   2229 		var timecode = (0, _time.secondsToTimeCode)(duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat);
   2230 
   2231 		if (timecode.length > 5) {
   2232 			(0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
   2233 		} else {
   2234 			(0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video');
   2235 		}
   2236 
   2237 		if (t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'duration') && duration > 0) {
   2238 			t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'duration').innerHTML = timecode;
   2239 		}
   2240 	}
   2241 });
   2242 
   2243 },{"16":16,"2":2,"26":26,"30":30}],13:[function(_dereq_,module,exports){
   2244 'use strict';
   2245 
   2246 var _document = _dereq_(2);
   2247 
   2248 var _document2 = _interopRequireDefault(_document);
   2249 
   2250 var _mejs = _dereq_(7);
   2251 
   2252 var _mejs2 = _interopRequireDefault(_mejs);
   2253 
   2254 var _i18n = _dereq_(5);
   2255 
   2256 var _i18n2 = _interopRequireDefault(_i18n);
   2257 
   2258 var _player = _dereq_(16);
   2259 
   2260 var _player2 = _interopRequireDefault(_player);
   2261 
   2262 var _time = _dereq_(30);
   2263 
   2264 var _general = _dereq_(27);
   2265 
   2266 var _dom = _dereq_(26);
   2267 
   2268 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   2269 
   2270 Object.assign(_player.config, {
   2271 	startLanguage: '',
   2272 
   2273 	tracksText: null,
   2274 
   2275 	chaptersText: null,
   2276 
   2277 	tracksAriaLive: false,
   2278 
   2279 	hideCaptionsButtonWhenEmpty: true,
   2280 
   2281 	toggleCaptionsButtonWhenOnlyOne: false,
   2282 
   2283 	slidesSelector: ''
   2284 });
   2285 
   2286 Object.assign(_player2.default.prototype, {
   2287 	hasChapters: false,
   2288 
   2289 	buildtracks: function buildtracks(player, controls, layers, media) {
   2290 
   2291 		this.findTracks();
   2292 
   2293 		if (!player.tracks.length && (!player.trackFiles || !player.trackFiles.length === 0)) {
   2294 			return;
   2295 		}
   2296 
   2297 		var t = this,
   2298 		    attr = t.options.tracksAriaLive ? ' role="log" aria-live="assertive" aria-atomic="false"' : '',
   2299 		    tracksTitle = (0, _general.isString)(t.options.tracksText) ? t.options.tracksText : _i18n2.default.t('mejs.captions-subtitles'),
   2300 		    chaptersTitle = (0, _general.isString)(t.options.chaptersText) ? t.options.chaptersText : _i18n2.default.t('mejs.captions-chapters'),
   2301 		    total = player.trackFiles === null ? player.tracks.length : player.trackFiles.length;
   2302 
   2303 		if (t.domNode.textTracks) {
   2304 			for (var i = t.domNode.textTracks.length - 1; i >= 0; i--) {
   2305 				t.domNode.textTracks[i].mode = 'hidden';
   2306 			}
   2307 		}
   2308 
   2309 		t.cleartracks(player);
   2310 
   2311 		player.captions = _document2.default.createElement('div');
   2312 		player.captions.className = t.options.classPrefix + 'captions-layer ' + t.options.classPrefix + 'layer';
   2313 		player.captions.innerHTML = '<div class="' + t.options.classPrefix + 'captions-position ' + t.options.classPrefix + 'captions-position-hover"' + attr + '>' + ('<span class="' + t.options.classPrefix + 'captions-text"></span>') + '</div>';
   2314 		player.captions.style.display = 'none';
   2315 		layers.insertBefore(player.captions, layers.firstChild);
   2316 
   2317 		player.captionsText = player.captions.querySelector('.' + t.options.classPrefix + 'captions-text');
   2318 
   2319 		player.captionsButton = _document2.default.createElement('div');
   2320 		player.captionsButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'captions-button';
   2321 		player.captionsButton.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + tracksTitle + '" aria-label="' + tracksTitle + '" tabindex="0"></button>' + ('<div class="' + t.options.classPrefix + 'captions-selector ' + t.options.classPrefix + 'offscreen">') + ('<ul class="' + t.options.classPrefix + 'captions-selector-list">') + ('<li class="' + t.options.classPrefix + 'captions-selector-list-item">') + ('<input type="radio" class="' + t.options.classPrefix + 'captions-selector-input" ') + ('name="' + player.id + '_captions" id="' + player.id + '_captions_none" ') + 'value="none" checked disabled>' + ('<label class="' + t.options.classPrefix + 'captions-selector-label ') + (t.options.classPrefix + 'captions-selected" ') + ('for="' + player.id + '_captions_none">' + _i18n2.default.t('mejs.none') + '</label>') + '</li>' + '</ul>' + '</div>';
   2322 
   2323 		t.addControlElement(player.captionsButton, 'tracks');
   2324 
   2325 		player.captionsButton.querySelector('.' + t.options.classPrefix + 'captions-selector-input').disabled = false;
   2326 
   2327 		player.chaptersButton = _document2.default.createElement('div');
   2328 		player.chaptersButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'chapters-button';
   2329 		player.chaptersButton.innerHTML = '<button type="button" aria-controls="' + t.id + '" title="' + chaptersTitle + '" aria-label="' + chaptersTitle + '" tabindex="0"></button>' + ('<div class="' + t.options.classPrefix + 'chapters-selector ' + t.options.classPrefix + 'offscreen">') + ('<ul class="' + t.options.classPrefix + 'chapters-selector-list"></ul>') + '</div>';
   2330 
   2331 		var subtitleCount = 0;
   2332 
   2333 		for (var _i = 0; _i < total; _i++) {
   2334 			var kind = player.tracks[_i].kind,
   2335 			    src = player.tracks[_i].src;
   2336 			if (src.trim()) {
   2337 				if (kind === 'subtitles' || kind === 'captions') {
   2338 					subtitleCount++;
   2339 				} else if (kind === 'chapters' && !controls.querySelector('.' + t.options.classPrefix + 'chapter-selector')) {
   2340 					player.captionsButton.parentNode.insertBefore(player.chaptersButton, player.captionsButton);
   2341 				}
   2342 			}
   2343 		}
   2344 
   2345 		player.trackToLoad = -1;
   2346 		player.selectedTrack = null;
   2347 		player.isLoadingTrack = false;
   2348 
   2349 		for (var _i2 = 0; _i2 < total; _i2++) {
   2350 			var _kind = player.tracks[_i2].kind;
   2351 			if (player.tracks[_i2].src.trim() && (_kind === 'subtitles' || _kind === 'captions')) {
   2352 				player.addTrackButton(player.tracks[_i2].trackId, player.tracks[_i2].srclang, player.tracks[_i2].label);
   2353 			}
   2354 		}
   2355 
   2356 		player.loadNextTrack();
   2357 
   2358 		var inEvents = ['mouseenter', 'focusin'],
   2359 		    outEvents = ['mouseleave', 'focusout'];
   2360 
   2361 		if (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount === 1) {
   2362 			player.captionsButton.addEventListener('click', function (e) {
   2363 				var trackId = 'none';
   2364 				if (player.selectedTrack === null) {
   2365 					trackId = player.tracks[0].trackId;
   2366 				}
   2367 				var keyboard = e.keyCode || e.which;
   2368 				player.setTrack(trackId, typeof keyboard !== 'undefined');
   2369 			});
   2370 		} else {
   2371 			var labels = player.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selector-label'),
   2372 			    captions = player.captionsButton.querySelectorAll('input[type=radio]');
   2373 
   2374 			for (var _i3 = 0, _total = inEvents.length; _i3 < _total; _i3++) {
   2375 				player.captionsButton.addEventListener(inEvents[_i3], function () {
   2376 					(0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen');
   2377 				});
   2378 			}
   2379 
   2380 			for (var _i4 = 0, _total2 = outEvents.length; _i4 < _total2; _i4++) {
   2381 				player.captionsButton.addEventListener(outEvents[_i4], function () {
   2382 					(0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen');
   2383 				});
   2384 			}
   2385 
   2386 			for (var _i5 = 0, _total3 = captions.length; _i5 < _total3; _i5++) {
   2387 				captions[_i5].addEventListener('click', function (e) {
   2388 					var keyboard = e.keyCode || e.which;
   2389 					player.setTrack(this.value, typeof keyboard !== 'undefined');
   2390 				});
   2391 			}
   2392 
   2393 			for (var _i6 = 0, _total4 = labels.length; _i6 < _total4; _i6++) {
   2394 				labels[_i6].addEventListener('click', function (e) {
   2395 					var radio = (0, _dom.siblings)(this, function (el) {
   2396 						return el.tagName === 'INPUT';
   2397 					})[0],
   2398 					    event = (0, _general.createEvent)('click', radio);
   2399 					radio.dispatchEvent(event);
   2400 					e.preventDefault();
   2401 				});
   2402 			}
   2403 
   2404 			player.captionsButton.addEventListener('keydown', function (e) {
   2405 				e.stopPropagation();
   2406 			});
   2407 		}
   2408 
   2409 		for (var _i7 = 0, _total5 = inEvents.length; _i7 < _total5; _i7++) {
   2410 			player.chaptersButton.addEventListener(inEvents[_i7], function () {
   2411 				if (this.querySelector('.' + t.options.classPrefix + 'chapters-selector-list').children.length) {
   2412 					(0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen');
   2413 				}
   2414 			});
   2415 		}
   2416 
   2417 		for (var _i8 = 0, _total6 = outEvents.length; _i8 < _total6; _i8++) {
   2418 			player.chaptersButton.addEventListener(outEvents[_i8], function () {
   2419 				(0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen');
   2420 			});
   2421 		}
   2422 
   2423 		player.chaptersButton.addEventListener('keydown', function (e) {
   2424 			e.stopPropagation();
   2425 		});
   2426 
   2427 		if (!player.options.alwaysShowControls) {
   2428 			player.getElement(player.container).addEventListener('controlsshown', function () {
   2429 				(0, _dom.addClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');
   2430 			});
   2431 
   2432 			player.getElement(player.container).addEventListener('controlshidden', function () {
   2433 				if (!media.paused) {
   2434 					(0, _dom.removeClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');
   2435 				}
   2436 			});
   2437 		} else {
   2438 			(0, _dom.addClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover');
   2439 		}
   2440 
   2441 		media.addEventListener('timeupdate', function () {
   2442 			player.displayCaptions();
   2443 		});
   2444 
   2445 		if (player.options.slidesSelector !== '') {
   2446 			player.slidesContainer = _document2.default.querySelectorAll(player.options.slidesSelector);
   2447 
   2448 			media.addEventListener('timeupdate', function () {
   2449 				player.displaySlides();
   2450 			});
   2451 		}
   2452 	},
   2453 	cleartracks: function cleartracks(player) {
   2454 		if (player) {
   2455 			if (player.captions) {
   2456 				player.captions.remove();
   2457 			}
   2458 			if (player.chapters) {
   2459 				player.chapters.remove();
   2460 			}
   2461 			if (player.captionsText) {
   2462 				player.captionsText.remove();
   2463 			}
   2464 			if (player.captionsButton) {
   2465 				player.captionsButton.remove();
   2466 			}
   2467 			if (player.chaptersButton) {
   2468 				player.chaptersButton.remove();
   2469 			}
   2470 		}
   2471 	},
   2472 	rebuildtracks: function rebuildtracks() {
   2473 		var t = this;
   2474 		t.findTracks();
   2475 		t.buildtracks(t, t.getElement(t.controls), t.getElement(t.layers), t.media);
   2476 	},
   2477 	findTracks: function findTracks() {
   2478 		var t = this,
   2479 		    tracktags = t.trackFiles === null ? t.node.querySelectorAll('track') : t.trackFiles,
   2480 		    total = tracktags.length;
   2481 
   2482 		t.tracks = [];
   2483 		for (var i = 0; i < total; i++) {
   2484 			var track = tracktags[i],
   2485 			    srclang = track.getAttribute('srclang').toLowerCase() || '',
   2486 			    trackId = t.id + '_track_' + i + '_' + track.getAttribute('kind') + '_' + srclang;
   2487 			t.tracks.push({
   2488 				trackId: trackId,
   2489 				srclang: srclang,
   2490 				src: track.getAttribute('src'),
   2491 				kind: track.getAttribute('kind'),
   2492 				label: track.getAttribute('label') || '',
   2493 				entries: [],
   2494 				isLoaded: false
   2495 			});
   2496 		}
   2497 	},
   2498 	setTrack: function setTrack(trackId, setByKeyboard) {
   2499 
   2500 		var t = this,
   2501 		    radios = t.captionsButton.querySelectorAll('input[type="radio"]'),
   2502 		    captions = t.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selected'),
   2503 		    track = t.captionsButton.querySelector('input[value="' + trackId + '"]');
   2504 
   2505 		for (var i = 0, total = radios.length; i < total; i++) {
   2506 			radios[i].checked = false;
   2507 		}
   2508 
   2509 		for (var _i9 = 0, _total7 = captions.length; _i9 < _total7; _i9++) {
   2510 			(0, _dom.removeClass)(captions[_i9], t.options.classPrefix + 'captions-selected');
   2511 		}
   2512 
   2513 		track.checked = true;
   2514 		var labels = (0, _dom.siblings)(track, function (el) {
   2515 			return (0, _dom.hasClass)(el, t.options.classPrefix + 'captions-selector-label');
   2516 		});
   2517 		for (var _i10 = 0, _total8 = labels.length; _i10 < _total8; _i10++) {
   2518 			(0, _dom.addClass)(labels[_i10], t.options.classPrefix + 'captions-selected');
   2519 		}
   2520 
   2521 		if (trackId === 'none') {
   2522 			t.selectedTrack = null;
   2523 			(0, _dom.removeClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled');
   2524 		} else {
   2525 			for (var _i11 = 0, _total9 = t.tracks.length; _i11 < _total9; _i11++) {
   2526 				var _track = t.tracks[_i11];
   2527 				if (_track.trackId === trackId) {
   2528 					if (t.selectedTrack === null) {
   2529 						(0, _dom.addClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled');
   2530 					}
   2531 					t.selectedTrack = _track;
   2532 					t.captions.setAttribute('lang', t.selectedTrack.srclang);
   2533 					t.displayCaptions();
   2534 					break;
   2535 				}
   2536 			}
   2537 		}
   2538 
   2539 		var event = (0, _general.createEvent)('captionschange', t.media);
   2540 		event.detail.caption = t.selectedTrack;
   2541 		t.media.dispatchEvent(event);
   2542 
   2543 		if (!setByKeyboard) {
   2544 			setTimeout(function () {
   2545 				t.getElement(t.container).focus();
   2546 			}, 500);
   2547 		}
   2548 	},
   2549 	loadNextTrack: function loadNextTrack() {
   2550 		var t = this;
   2551 
   2552 		t.trackToLoad++;
   2553 		if (t.trackToLoad < t.tracks.length) {
   2554 			t.isLoadingTrack = true;
   2555 			t.loadTrack(t.trackToLoad);
   2556 		} else {
   2557 			t.isLoadingTrack = false;
   2558 			t.checkForTracks();
   2559 		}
   2560 	},
   2561 	loadTrack: function loadTrack(index) {
   2562 		var t = this,
   2563 		    track = t.tracks[index];
   2564 
   2565 		if (track !== undefined && (track.src !== undefined || track.src !== "")) {
   2566 			(0, _dom.ajax)(track.src, 'text', function (d) {
   2567 				track.entries = typeof d === 'string' && /<tt\s+xml/ig.exec(d) ? _mejs2.default.TrackFormatParser.dfxp.parse(d) : _mejs2.default.TrackFormatParser.webvtt.parse(d);
   2568 
   2569 				track.isLoaded = true;
   2570 				t.enableTrackButton(track);
   2571 				t.loadNextTrack();
   2572 
   2573 				if (track.kind === 'slides') {
   2574 					t.setupSlides(track);
   2575 				} else if (track.kind === 'chapters' && !t.hasChapters) {
   2576 						t.drawChapters(track);
   2577 						t.hasChapters = true;
   2578 					}
   2579 			}, function () {
   2580 				t.removeTrackButton(track.trackId);
   2581 				t.loadNextTrack();
   2582 			});
   2583 		}
   2584 	},
   2585 	enableTrackButton: function enableTrackButton(track) {
   2586 		var t = this,
   2587 		    lang = track.srclang,
   2588 		    target = _document2.default.getElementById('' + track.trackId);
   2589 
   2590 		if (!target) {
   2591 			return;
   2592 		}
   2593 
   2594 		var label = track.label;
   2595 
   2596 		if (label === '') {
   2597 			label = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;
   2598 		}
   2599 		target.disabled = false;
   2600 		var targetSiblings = (0, _dom.siblings)(target, function (el) {
   2601 			return (0, _dom.hasClass)(el, t.options.classPrefix + 'captions-selector-label');
   2602 		});
   2603 		for (var i = 0, total = targetSiblings.length; i < total; i++) {
   2604 			targetSiblings[i].innerHTML = label;
   2605 		}
   2606 
   2607 		if (t.options.startLanguage === lang) {
   2608 			target.checked = true;
   2609 			var event = (0, _general.createEvent)('click', target);
   2610 			target.dispatchEvent(event);
   2611 		}
   2612 	},
   2613 	removeTrackButton: function removeTrackButton(trackId) {
   2614 		var element = _document2.default.getElementById('' + trackId);
   2615 		if (element) {
   2616 			var button = element.closest('li');
   2617 			if (button) {
   2618 				button.remove();
   2619 			}
   2620 		}
   2621 	},
   2622 	addTrackButton: function addTrackButton(trackId, lang, label) {
   2623 		var t = this;
   2624 		if (label === '') {
   2625 			label = _i18n2.default.t(_mejs2.default.language.codes[lang]) || lang;
   2626 		}
   2627 
   2628 		t.captionsButton.querySelector('ul').innerHTML += '<li class="' + t.options.classPrefix + 'captions-selector-list-item">' + ('<input type="radio" class="' + t.options.classPrefix + 'captions-selector-input" ') + ('name="' + t.id + '_captions" id="' + trackId + '" value="' + trackId + '" disabled>') + ('<label class="' + t.options.classPrefix + 'captions-selector-label"') + ('for="' + trackId + '">' + label + ' (loading)</label>') + '</li>';
   2629 	},
   2630 	checkForTracks: function checkForTracks() {
   2631 		var t = this;
   2632 
   2633 		var hasSubtitles = false;
   2634 
   2635 		if (t.options.hideCaptionsButtonWhenEmpty) {
   2636 			for (var i = 0, total = t.tracks.length; i < total; i++) {
   2637 				var kind = t.tracks[i].kind;
   2638 				if ((kind === 'subtitles' || kind === 'captions') && t.tracks[i].isLoaded) {
   2639 					hasSubtitles = true;
   2640 					break;
   2641 				}
   2642 			}
   2643 
   2644 			t.captionsButton.style.display = hasSubtitles ? '' : 'none';
   2645 			t.setControlsSize();
   2646 		}
   2647 	},
   2648 	displayCaptions: function displayCaptions() {
   2649 		if (this.tracks === undefined) {
   2650 			return;
   2651 		}
   2652 
   2653 		var t = this,
   2654 		    track = t.selectedTrack,
   2655 		    sanitize = function sanitize(html) {
   2656 			var div = _document2.default.createElement('div');
   2657 			div.innerHTML = html;
   2658 
   2659 			var scripts = div.getElementsByTagName('script');
   2660 			var i = scripts.length;
   2661 			while (i--) {
   2662 				scripts[i].remove();
   2663 			}
   2664 
   2665 			var allElements = div.getElementsByTagName('*');
   2666 			for (var _i12 = 0, n = allElements.length; _i12 < n; _i12++) {
   2667 				var attributesObj = allElements[_i12].attributes,
   2668 				    attributes = Array.prototype.slice.call(attributesObj);
   2669 
   2670 				for (var j = 0, total = attributes.length; j < total; j++) {
   2671 					if (attributes[j].name.startsWith('on') || attributes[j].value.startsWith('javascript')) {
   2672 						allElements[_i12].remove();
   2673 					} else if (attributes[j].name === 'style') {
   2674 						allElements[_i12].removeAttribute(attributes[j].name);
   2675 					}
   2676 				}
   2677 			}
   2678 			return div.innerHTML;
   2679 		};
   2680 
   2681 		if (track !== null && track.isLoaded) {
   2682 			var i = t.searchTrackPosition(track.entries, t.media.currentTime);
   2683 			if (i > -1) {
   2684 				var text = track.entries[i].text;
   2685 				if (typeof t.options.captionTextPreprocessor === 'function') text = t.options.captionTextPreprocessor(text);
   2686 				t.captionsText.innerHTML = sanitize(text);
   2687 				t.captionsText.className = t.options.classPrefix + 'captions-text ' + (track.entries[i].identifier || '');
   2688 				t.captions.style.display = '';
   2689 				t.captions.style.height = '0px';
   2690 				return;
   2691 			}
   2692 			t.captions.style.display = 'none';
   2693 		} else {
   2694 			t.captions.style.display = 'none';
   2695 		}
   2696 	},
   2697 	setupSlides: function setupSlides(track) {
   2698 		var t = this;
   2699 		t.slides = track;
   2700 		t.slides.entries.imgs = [t.slides.entries.length];
   2701 		t.showSlide(0);
   2702 	},
   2703 	showSlide: function showSlide(index) {
   2704 		var _this = this;
   2705 
   2706 		var t = this;
   2707 
   2708 		if (t.tracks === undefined || t.slidesContainer === undefined) {
   2709 			return;
   2710 		}
   2711 
   2712 		var url = t.slides.entries[index].text;
   2713 
   2714 		var img = t.slides.entries[index].imgs;
   2715 
   2716 		if (img === undefined || img.fadeIn === undefined) {
   2717 			var image = _document2.default.createElement('img');
   2718 			image.src = url;
   2719 			image.addEventListener('load', function () {
   2720 				var self = _this,
   2721 				    visible = (0, _dom.siblings)(self, function (el) {
   2722 					return visible(el);
   2723 				});
   2724 				self.style.display = 'none';
   2725 				t.slidesContainer.innerHTML += self.innerHTML;
   2726 				(0, _dom.fadeIn)(t.slidesContainer.querySelector(image));
   2727 				for (var i = 0, total = visible.length; i < total; i++) {
   2728 					(0, _dom.fadeOut)(visible[i], 400);
   2729 				}
   2730 			});
   2731 			t.slides.entries[index].imgs = img = image;
   2732 		} else if (!(0, _dom.visible)(img)) {
   2733 			var _visible = (0, _dom.siblings)(self, function (el) {
   2734 				return _visible(el);
   2735 			});
   2736 			(0, _dom.fadeIn)(t.slidesContainer.querySelector(img));
   2737 			for (var i = 0, total = _visible.length; i < total; i++) {
   2738 				(0, _dom.fadeOut)(_visible[i]);
   2739 			}
   2740 		}
   2741 	},
   2742 	displaySlides: function displaySlides() {
   2743 		var t = this;
   2744 
   2745 		if (this.slides === undefined) {
   2746 			return;
   2747 		}
   2748 
   2749 		var slides = t.slides,
   2750 		    i = t.searchTrackPosition(slides.entries, t.media.currentTime);
   2751 
   2752 		if (i > -1) {
   2753 			t.showSlide(i);
   2754 		}
   2755 	},
   2756 	drawChapters: function drawChapters(chapters) {
   2757 		var t = this,
   2758 		    total = chapters.entries.length;
   2759 
   2760 		if (!total) {
   2761 			return;
   2762 		}
   2763 
   2764 		t.chaptersButton.querySelector('ul').innerHTML = '';
   2765 
   2766 		for (var i = 0; i < total; i++) {
   2767 			t.chaptersButton.querySelector('ul').innerHTML += '<li class="' + t.options.classPrefix + 'chapters-selector-list-item" ' + 'role="menuitemcheckbox" aria-live="polite" aria-disabled="false" aria-checked="false">' + ('<input type="radio" class="' + t.options.classPrefix + 'captions-selector-input" ') + ('name="' + t.id + '_chapters" id="' + t.id + '_chapters_' + i + '" value="' + chapters.entries[i].start + '" disabled>') + ('<label class="' + t.options.classPrefix + 'chapters-selector-label"') + ('for="' + t.id + '_chapters_' + i + '">' + chapters.entries[i].text + '</label>') + '</li>';
   2768 		}
   2769 
   2770 		var radios = t.chaptersButton.querySelectorAll('input[type="radio"]'),
   2771 		    labels = t.chaptersButton.querySelectorAll('.' + t.options.classPrefix + 'chapters-selector-label');
   2772 
   2773 		for (var _i13 = 0, _total10 = radios.length; _i13 < _total10; _i13++) {
   2774 			radios[_i13].disabled = false;
   2775 			radios[_i13].checked = false;
   2776 			radios[_i13].addEventListener('click', function (e) {
   2777 				var self = this,
   2778 				    listItems = t.chaptersButton.querySelectorAll('li'),
   2779 				    label = (0, _dom.siblings)(self, function (el) {
   2780 					return (0, _dom.hasClass)(el, t.options.classPrefix + 'chapters-selector-label');
   2781 				})[0];
   2782 
   2783 				self.checked = true;
   2784 				self.parentNode.setAttribute('aria-checked', true);
   2785 				(0, _dom.addClass)(label, t.options.classPrefix + 'chapters-selected');
   2786 				(0, _dom.removeClass)(t.chaptersButton.querySelector('.' + t.options.classPrefix + 'chapters-selected'), t.options.classPrefix + 'chapters-selected');
   2787 
   2788 				for (var _i14 = 0, _total11 = listItems.length; _i14 < _total11; _i14++) {
   2789 					listItems[_i14].setAttribute('aria-checked', false);
   2790 				}
   2791 
   2792 				var keyboard = e.keyCode || e.which;
   2793 				if (typeof keyboard === 'undefined') {
   2794 					setTimeout(function () {
   2795 						t.getElement(t.container).focus();
   2796 					}, 500);
   2797 				}
   2798 
   2799 				t.media.setCurrentTime(parseFloat(self.value));
   2800 				if (t.media.paused) {
   2801 					t.media.play();
   2802 				}
   2803 			});
   2804 		}
   2805 
   2806 		for (var _i15 = 0, _total12 = labels.length; _i15 < _total12; _i15++) {
   2807 			labels[_i15].addEventListener('click', function (e) {
   2808 				var radio = (0, _dom.siblings)(this, function (el) {
   2809 					return el.tagName === 'INPUT';
   2810 				})[0],
   2811 				    event = (0, _general.createEvent)('click', radio);
   2812 				radio.dispatchEvent(event);
   2813 				e.preventDefault();
   2814 			});
   2815 		}
   2816 	},
   2817 	searchTrackPosition: function searchTrackPosition(tracks, currentTime) {
   2818 		var lo = 0,
   2819 		    hi = tracks.length - 1,
   2820 		    mid = void 0,
   2821 		    start = void 0,
   2822 		    stop = void 0;
   2823 
   2824 		while (lo <= hi) {
   2825 			mid = lo + hi >> 1;
   2826 			start = tracks[mid].start;
   2827 			stop = tracks[mid].stop;
   2828 
   2829 			if (currentTime >= start && currentTime < stop) {
   2830 				return mid;
   2831 			} else if (start < currentTime) {
   2832 				lo = mid + 1;
   2833 			} else if (start > currentTime) {
   2834 				hi = mid - 1;
   2835 			}
   2836 		}
   2837 
   2838 		return -1;
   2839 	}
   2840 });
   2841 
   2842 _mejs2.default.language = {
   2843 	codes: {
   2844 		af: 'mejs.afrikaans',
   2845 		sq: 'mejs.albanian',
   2846 		ar: 'mejs.arabic',
   2847 		be: 'mejs.belarusian',
   2848 		bg: 'mejs.bulgarian',
   2849 		ca: 'mejs.catalan',
   2850 		zh: 'mejs.chinese',
   2851 		'zh-cn': 'mejs.chinese-simplified',
   2852 		'zh-tw': 'mejs.chines-traditional',
   2853 		hr: 'mejs.croatian',
   2854 		cs: 'mejs.czech',
   2855 		da: 'mejs.danish',
   2856 		nl: 'mejs.dutch',
   2857 		en: 'mejs.english',
   2858 		et: 'mejs.estonian',
   2859 		fl: 'mejs.filipino',
   2860 		fi: 'mejs.finnish',
   2861 		fr: 'mejs.french',
   2862 		gl: 'mejs.galician',
   2863 		de: 'mejs.german',
   2864 		el: 'mejs.greek',
   2865 		ht: 'mejs.haitian-creole',
   2866 		iw: 'mejs.hebrew',
   2867 		hi: 'mejs.hindi',
   2868 		hu: 'mejs.hungarian',
   2869 		is: 'mejs.icelandic',
   2870 		id: 'mejs.indonesian',
   2871 		ga: 'mejs.irish',
   2872 		it: 'mejs.italian',
   2873 		ja: 'mejs.japanese',
   2874 		ko: 'mejs.korean',
   2875 		lv: 'mejs.latvian',
   2876 		lt: 'mejs.lithuanian',
   2877 		mk: 'mejs.macedonian',
   2878 		ms: 'mejs.malay',
   2879 		mt: 'mejs.maltese',
   2880 		no: 'mejs.norwegian',
   2881 		fa: 'mejs.persian',
   2882 		pl: 'mejs.polish',
   2883 		pt: 'mejs.portuguese',
   2884 		ro: 'mejs.romanian',
   2885 		ru: 'mejs.russian',
   2886 		sr: 'mejs.serbian',
   2887 		sk: 'mejs.slovak',
   2888 		sl: 'mejs.slovenian',
   2889 		es: 'mejs.spanish',
   2890 		sw: 'mejs.swahili',
   2891 		sv: 'mejs.swedish',
   2892 		tl: 'mejs.tagalog',
   2893 		th: 'mejs.thai',
   2894 		tr: 'mejs.turkish',
   2895 		uk: 'mejs.ukrainian',
   2896 		vi: 'mejs.vietnamese',
   2897 		cy: 'mejs.welsh',
   2898 		yi: 'mejs.yiddish'
   2899 	}
   2900 };
   2901 
   2902 _mejs2.default.TrackFormatParser = {
   2903 	webvtt: {
   2904 		pattern: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,
   2905 
   2906 		parse: function parse(trackText) {
   2907 			var lines = trackText.split(/\r?\n/),
   2908 			    entries = [];
   2909 
   2910 			var timecode = void 0,
   2911 			    text = void 0,
   2912 			    identifier = void 0;
   2913 
   2914 			for (var i = 0, total = lines.length; i < total; i++) {
   2915 				timecode = this.pattern.exec(lines[i]);
   2916 
   2917 				if (timecode && i < lines.length) {
   2918 					if (i - 1 >= 0 && lines[i - 1] !== '') {
   2919 						identifier = lines[i - 1];
   2920 					}
   2921 					i++;
   2922 
   2923 					text = lines[i];
   2924 					i++;
   2925 					while (lines[i] !== '' && i < lines.length) {
   2926 						text = text + '\n' + lines[i];
   2927 						i++;
   2928 					}
   2929 					text = text === null ? '' : text.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
   2930 					entries.push({
   2931 						identifier: identifier,
   2932 						start: (0, _time.convertSMPTEtoSeconds)(timecode[1]) === 0 ? 0.200 : (0, _time.convertSMPTEtoSeconds)(timecode[1]),
   2933 						stop: (0, _time.convertSMPTEtoSeconds)(timecode[3]),
   2934 						text: text,
   2935 						settings: timecode[5]
   2936 					});
   2937 				}
   2938 				identifier = '';
   2939 			}
   2940 			return entries;
   2941 		}
   2942 	},
   2943 
   2944 	dfxp: {
   2945 		parse: function parse(trackText) {
   2946 			trackText = $(trackText).filter('tt');
   2947 			var container = trackText.firstChild,
   2948 			    lines = container.querySelectorAll('p'),
   2949 			    styleNode = trackText.getElementById('' + container.attr('style')),
   2950 			    entries = [];
   2951 
   2952 			var styles = void 0;
   2953 
   2954 			if (styleNode.length) {
   2955 				styleNode.removeAttribute('id');
   2956 				var attributes = styleNode.attributes;
   2957 				if (attributes.length) {
   2958 					styles = {};
   2959 					for (var i = 0, total = attributes.length; i < total; i++) {
   2960 						styles[attributes[i].name.split(":")[1]] = attributes[i].value;
   2961 					}
   2962 				}
   2963 			}
   2964 
   2965 			for (var _i16 = 0, _total13 = lines.length; _i16 < _total13; _i16++) {
   2966 				var style = void 0,
   2967 				    _temp = {
   2968 					start: null,
   2969 					stop: null,
   2970 					style: null,
   2971 					text: null
   2972 				};
   2973 
   2974 				if (lines.eq(_i16).attr('begin')) {
   2975 					_temp.start = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16).attr('begin'));
   2976 				}
   2977 				if (!_temp.start && lines.eq(_i16 - 1).attr('end')) {
   2978 					_temp.start = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16 - 1).attr('end'));
   2979 				}
   2980 				if (lines.eq(_i16).attr('end')) {
   2981 					_temp.stop = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16).attr('end'));
   2982 				}
   2983 				if (!_temp.stop && lines.eq(_i16 + 1).attr('begin')) {
   2984 					_temp.stop = (0, _time.convertSMPTEtoSeconds)(lines.eq(_i16 + 1).attr('begin'));
   2985 				}
   2986 
   2987 				if (styles) {
   2988 					style = '';
   2989 					for (var _style in styles) {
   2990 						style += _style + ':' + styles[_style] + ';';
   2991 					}
   2992 				}
   2993 				if (style) {
   2994 					_temp.style = style;
   2995 				}
   2996 				if (_temp.start === 0) {
   2997 					_temp.start = 0.200;
   2998 				}
   2999 				_temp.text = lines.eq(_i16).innerHTML.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
   3000 				entries.push(_temp);
   3001 			}
   3002 			return entries;
   3003 		}
   3004 	}
   3005 };
   3006 
   3007 },{"16":16,"2":2,"26":26,"27":27,"30":30,"5":5,"7":7}],14:[function(_dereq_,module,exports){
   3008 'use strict';
   3009 
   3010 var _document = _dereq_(2);
   3011 
   3012 var _document2 = _interopRequireDefault(_document);
   3013 
   3014 var _player = _dereq_(16);
   3015 
   3016 var _player2 = _interopRequireDefault(_player);
   3017 
   3018 var _i18n = _dereq_(5);
   3019 
   3020 var _i18n2 = _interopRequireDefault(_i18n);
   3021 
   3022 var _constants = _dereq_(25);
   3023 
   3024 var _general = _dereq_(27);
   3025 
   3026 var _dom = _dereq_(26);
   3027 
   3028 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   3029 
   3030 Object.assign(_player.config, {
   3031 	muteText: null,
   3032 
   3033 	unmuteText: null,
   3034 
   3035 	allyVolumeControlText: null,
   3036 
   3037 	hideVolumeOnTouchDevices: true,
   3038 
   3039 	audioVolume: 'horizontal',
   3040 
   3041 	videoVolume: 'vertical',
   3042 
   3043 	startVolume: 0.8
   3044 });
   3045 
   3046 Object.assign(_player2.default.prototype, {
   3047 	buildvolume: function buildvolume(player, controls, layers, media) {
   3048 		if ((_constants.IS_ANDROID || _constants.IS_IOS) && this.options.hideVolumeOnTouchDevices) {
   3049 			return;
   3050 		}
   3051 
   3052 		var t = this,
   3053 		    mode = t.isVideo ? t.options.videoVolume : t.options.audioVolume,
   3054 		    muteText = (0, _general.isString)(t.options.muteText) ? t.options.muteText : _i18n2.default.t('mejs.mute'),
   3055 		    unmuteText = (0, _general.isString)(t.options.unmuteText) ? t.options.unmuteText : _i18n2.default.t('mejs.unmute'),
   3056 		    volumeControlText = (0, _general.isString)(t.options.allyVolumeControlText) ? t.options.allyVolumeControlText : _i18n2.default.t('mejs.volume-help-text'),
   3057 		    mute = _document2.default.createElement('div');
   3058 
   3059 		mute.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'volume-button ' + t.options.classPrefix + 'mute';
   3060 		mute.innerHTML = mode === 'horizontal' ? '<button type="button" aria-controls="' + t.id + '" title="' + muteText + '" aria-label="' + muteText + '" tabindex="0"></button>' : '<button type="button" aria-controls="' + t.id + '" title="' + muteText + '" aria-label="' + muteText + '" tabindex="0"></button>' + ('<a href="javascript:void(0);" class="' + t.options.classPrefix + 'volume-slider" ') + ('aria-label="' + _i18n2.default.t('mejs.volume-slider') + '" aria-valuemin="0" aria-valuemax="100" role="slider" ') + 'aria-orientation="vertical">' + ('<span class="' + t.options.classPrefix + 'offscreen">' + volumeControlText + '</span>') + ('<div class="' + t.options.classPrefix + 'volume-total">') + ('<div class="' + t.options.classPrefix + 'volume-current"></div>') + ('<div class="' + t.options.classPrefix + 'volume-handle"></div>') + '</div>' + '</a>';
   3061 
   3062 		t.addControlElement(mute, 'volume');
   3063 
   3064 		t.options.keyActions.push({
   3065 			keys: [38],
   3066 			action: function action(player) {
   3067 				var volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider');
   3068 				if (volumeSlider && volumeSlider.matches(':focus')) {
   3069 					volumeSlider.style.display = 'block';
   3070 				}
   3071 				if (player.isVideo) {
   3072 					player.showControls();
   3073 					player.startControlsTimer();
   3074 				}
   3075 
   3076 				var newVolume = Math.min(player.volume + 0.1, 1);
   3077 				player.setVolume(newVolume);
   3078 				if (newVolume > 0) {
   3079 					player.setMuted(false);
   3080 				}
   3081 			}
   3082 		}, {
   3083 			keys: [40],
   3084 			action: function action(player) {
   3085 				var volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider');
   3086 				if (volumeSlider) {
   3087 					volumeSlider.style.display = 'block';
   3088 				}
   3089 
   3090 				if (player.isVideo) {
   3091 					player.showControls();
   3092 					player.startControlsTimer();
   3093 				}
   3094 
   3095 				var newVolume = Math.max(player.volume - 0.1, 0);
   3096 				player.setVolume(newVolume);
   3097 
   3098 				if (newVolume <= 0.1) {
   3099 					player.setMuted(true);
   3100 				}
   3101 			}
   3102 		}, {
   3103 			keys: [77],
   3104 			action: function action(player) {
   3105 				var volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider');
   3106 				if (volumeSlider) {
   3107 					volumeSlider.style.display = 'block';
   3108 				}
   3109 
   3110 				if (player.isVideo) {
   3111 					player.showControls();
   3112 					player.startControlsTimer();
   3113 				}
   3114 				if (player.media.muted) {
   3115 					player.setMuted(false);
   3116 				} else {
   3117 					player.setMuted(true);
   3118 				}
   3119 			}
   3120 		});
   3121 
   3122 		if (mode === 'horizontal') {
   3123 			var anchor = _document2.default.createElement('a');
   3124 			anchor.className = t.options.classPrefix + 'horizontal-volume-slider';
   3125 			anchor.href = 'javascript:void(0);';
   3126 			anchor.setAttribute('aria-label', _i18n2.default.t('mejs.volume-slider'));
   3127 			anchor.setAttribute('aria-valuemin', 0);
   3128 			anchor.setAttribute('aria-valuemax', 100);
   3129 			anchor.setAttribute('aria-valuenow', 100);
   3130 			anchor.setAttribute('role', 'slider');
   3131 			anchor.innerHTML += '<span class="' + t.options.classPrefix + 'offscreen">' + volumeControlText + '</span>' + ('<div class="' + t.options.classPrefix + 'horizontal-volume-total">') + ('<div class="' + t.options.classPrefix + 'horizontal-volume-current"></div>') + ('<div class="' + t.options.classPrefix + 'horizontal-volume-handle"></div>') + '</div>';
   3132 			mute.parentNode.insertBefore(anchor, mute.nextSibling);
   3133 		}
   3134 
   3135 		var mouseIsDown = false,
   3136 		    mouseIsOver = false,
   3137 		    modified = false,
   3138 		    updateVolumeSlider = function updateVolumeSlider() {
   3139 			var volume = Math.floor(media.volume * 100);
   3140 			volumeSlider.setAttribute('aria-valuenow', volume);
   3141 			volumeSlider.setAttribute('aria-valuetext', volume + '%');
   3142 		};
   3143 
   3144 		var volumeSlider = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-slider') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-slider'),
   3145 		    volumeTotal = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-total') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-total'),
   3146 		    volumeCurrent = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-current') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-current'),
   3147 		    volumeHandle = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-handle') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-handle'),
   3148 		    positionVolumeHandle = function positionVolumeHandle(volume) {
   3149 
   3150 			if (volume === null || isNaN(volume) || volume === undefined) {
   3151 				return;
   3152 			}
   3153 
   3154 			volume = Math.max(0, volume);
   3155 			volume = Math.min(volume, 1);
   3156 
   3157 			if (volume === 0) {
   3158 				(0, _dom.removeClass)(mute, t.options.classPrefix + 'mute');
   3159 				(0, _dom.addClass)(mute, t.options.classPrefix + 'unmute');
   3160 				var button = mute.firstElementChild;
   3161 				button.setAttribute('title', unmuteText);
   3162 				button.setAttribute('aria-label', unmuteText);
   3163 			} else {
   3164 				(0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute');
   3165 				(0, _dom.addClass)(mute, t.options.classPrefix + 'mute');
   3166 				var _button = mute.firstElementChild;
   3167 				_button.setAttribute('title', muteText);
   3168 				_button.setAttribute('aria-label', muteText);
   3169 			}
   3170 
   3171 			var volumePercentage = volume * 100 + '%',
   3172 			    volumeStyles = getComputedStyle(volumeHandle);
   3173 
   3174 			if (mode === 'vertical') {
   3175 				volumeCurrent.style.bottom = 0;
   3176 				volumeCurrent.style.height = volumePercentage;
   3177 				volumeHandle.style.bottom = volumePercentage;
   3178 				volumeHandle.style.marginBottom = -parseFloat(volumeStyles.height) / 2 + 'px';
   3179 			} else {
   3180 				volumeCurrent.style.left = 0;
   3181 				volumeCurrent.style.width = volumePercentage;
   3182 				volumeHandle.style.left = volumePercentage;
   3183 				volumeHandle.style.marginLeft = -parseFloat(volumeStyles.width) / 2 + 'px';
   3184 			}
   3185 		},
   3186 		    handleVolumeMove = function handleVolumeMove(e) {
   3187 			var totalOffset = (0, _dom.offset)(volumeTotal),
   3188 			    volumeStyles = getComputedStyle(volumeTotal);
   3189 
   3190 			modified = true;
   3191 
   3192 			var volume = null;
   3193 
   3194 			if (mode === 'vertical') {
   3195 				var railHeight = parseFloat(volumeStyles.height),
   3196 				    newY = e.pageY - totalOffset.top;
   3197 
   3198 				volume = (railHeight - newY) / railHeight;
   3199 
   3200 				if (totalOffset.top === 0 || totalOffset.left === 0) {
   3201 					return;
   3202 				}
   3203 			} else {
   3204 				var railWidth = parseFloat(volumeStyles.width),
   3205 				    newX = e.pageX - totalOffset.left;
   3206 
   3207 				volume = newX / railWidth;
   3208 			}
   3209 
   3210 			volume = Math.max(0, volume);
   3211 			volume = Math.min(volume, 1);
   3212 
   3213 			positionVolumeHandle(volume);
   3214 
   3215 			t.setMuted(volume === 0);
   3216 			t.setVolume(volume);
   3217 
   3218 			e.preventDefault();
   3219 			e.stopPropagation();
   3220 		},
   3221 		    toggleMute = function toggleMute() {
   3222 			if (t.muted) {
   3223 				positionVolumeHandle(0);
   3224 				(0, _dom.removeClass)(mute, t.options.classPrefix + 'mute');
   3225 				(0, _dom.addClass)(mute, t.options.classPrefix + 'unmute');
   3226 			} else {
   3227 				positionVolumeHandle(media.volume);
   3228 				(0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute');
   3229 				(0, _dom.addClass)(mute, t.options.classPrefix + 'mute');
   3230 			}
   3231 		};
   3232 
   3233 		player.getElement(player.container).addEventListener('keydown', function (e) {
   3234 			var hasFocus = !!e.target.closest('.' + t.options.classPrefix + 'container');
   3235 			if (!hasFocus && mode === 'vertical') {
   3236 				volumeSlider.style.display = 'none';
   3237 			}
   3238 		});
   3239 
   3240 		mute.addEventListener('mouseenter', function (e) {
   3241 			if (e.target === mute) {
   3242 				volumeSlider.style.display = 'block';
   3243 				mouseIsOver = true;
   3244 				e.preventDefault();
   3245 				e.stopPropagation();
   3246 			}
   3247 		});
   3248 		mute.addEventListener('focusin', function () {
   3249 			volumeSlider.style.display = 'block';
   3250 			mouseIsOver = true;
   3251 		});
   3252 
   3253 		mute.addEventListener('focusout', function (e) {
   3254 			if ((!e.relatedTarget || e.relatedTarget && !e.relatedTarget.matches('.' + t.options.classPrefix + 'volume-slider')) && mode === 'vertical') {
   3255 				volumeSlider.style.display = 'none';
   3256 			}
   3257 		});
   3258 		mute.addEventListener('mouseleave', function () {
   3259 			mouseIsOver = false;
   3260 			if (!mouseIsDown && mode === 'vertical') {
   3261 				volumeSlider.style.display = 'none';
   3262 			}
   3263 		});
   3264 		mute.addEventListener('focusout', function () {
   3265 			mouseIsOver = false;
   3266 		});
   3267 		mute.addEventListener('keydown', function (e) {
   3268 			if (t.options.enableKeyboard && t.options.keyActions.length) {
   3269 				var keyCode = e.which || e.keyCode || 0,
   3270 				    volume = media.volume;
   3271 
   3272 				switch (keyCode) {
   3273 					case 38:
   3274 						volume = Math.min(volume + 0.1, 1);
   3275 						break;
   3276 					case 40:
   3277 						volume = Math.max(0, volume - 0.1);
   3278 						break;
   3279 					default:
   3280 						return true;
   3281 				}
   3282 
   3283 				mouseIsDown = false;
   3284 				positionVolumeHandle(volume);
   3285 				media.setVolume(volume);
   3286 
   3287 				e.preventDefault();
   3288 				e.stopPropagation();
   3289 			}
   3290 		});
   3291 		mute.querySelector('button').addEventListener('click', function () {
   3292 			media.setMuted(!media.muted);
   3293 			var event = (0, _general.createEvent)('volumechange', media);
   3294 			media.dispatchEvent(event);
   3295 		});
   3296 
   3297 		volumeSlider.addEventListener('dragstart', function () {
   3298 			return false;
   3299 		});
   3300 
   3301 		volumeSlider.addEventListener('mouseover', function () {
   3302 			mouseIsOver = true;
   3303 		});
   3304 		volumeSlider.addEventListener('focusin', function () {
   3305 			volumeSlider.style.display = 'block';
   3306 			mouseIsOver = true;
   3307 		});
   3308 		volumeSlider.addEventListener('focusout', function () {
   3309 			mouseIsOver = false;
   3310 			if (!mouseIsDown && mode === 'vertical') {
   3311 				volumeSlider.style.display = 'none';
   3312 			}
   3313 		});
   3314 		volumeSlider.addEventListener('mousedown', function (e) {
   3315 			handleVolumeMove(e);
   3316 			t.globalBind('mousemove.vol', function (event) {
   3317 				var target = event.target;
   3318 				if (mouseIsDown && (target === volumeSlider || target.closest(mode === 'vertical' ? '.' + t.options.classPrefix + 'volume-slider' : '.' + t.options.classPrefix + 'horizontal-volume-slider'))) {
   3319 					handleVolumeMove(event);
   3320 				}
   3321 			});
   3322 			t.globalBind('mouseup.vol', function () {
   3323 				mouseIsDown = false;
   3324 				if (!mouseIsOver && mode === 'vertical') {
   3325 					volumeSlider.style.display = 'none';
   3326 				}
   3327 			});
   3328 			mouseIsDown = true;
   3329 			e.preventDefault();
   3330 			e.stopPropagation();
   3331 		});
   3332 
   3333 		media.addEventListener('volumechange', function (e) {
   3334 			if (!mouseIsDown) {
   3335 				toggleMute();
   3336 			}
   3337 			updateVolumeSlider(e);
   3338 		});
   3339 
   3340 		var rendered = false;
   3341 		media.addEventListener('rendererready', function () {
   3342 			if (!modified) {
   3343 				setTimeout(function () {
   3344 					rendered = true;
   3345 					if (player.options.startVolume === 0 || media.originalNode.muted) {
   3346 						media.setMuted(true);
   3347 						player.options.startVolume = 0;
   3348 					}
   3349 					media.setVolume(player.options.startVolume);
   3350 					t.setControlsSize();
   3351 				}, 250);
   3352 			}
   3353 		});
   3354 
   3355 		media.addEventListener('loadedmetadata', function () {
   3356 			setTimeout(function () {
   3357 				if (!modified && !rendered) {
   3358 					if (player.options.startVolume === 0 || media.originalNode.muted) {
   3359 						media.setMuted(true);
   3360 					}
   3361 					media.setVolume(player.options.startVolume);
   3362 					t.setControlsSize();
   3363 				}
   3364 				rendered = false;
   3365 			}, 250);
   3366 		});
   3367 
   3368 		if (player.options.startVolume === 0 || media.originalNode.muted) {
   3369 			media.setMuted(true);
   3370 			player.options.startVolume = 0;
   3371 			toggleMute();
   3372 		}
   3373 
   3374 		t.getElement(t.container).addEventListener('controlsresize', function () {
   3375 			toggleMute();
   3376 		});
   3377 	}
   3378 });
   3379 
   3380 },{"16":16,"2":2,"25":25,"26":26,"27":27,"5":5}],15:[function(_dereq_,module,exports){
   3381 'use strict';
   3382 
   3383 Object.defineProperty(exports, "__esModule", {
   3384 	value: true
   3385 });
   3386 var EN = exports.EN = {
   3387 	'mejs.plural-form': 1,
   3388 
   3389 	'mejs.download-file': 'Download File',
   3390 
   3391 	'mejs.install-flash': 'You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/',
   3392 
   3393 	'mejs.fullscreen': 'Fullscreen',
   3394 
   3395 	'mejs.play': 'Play',
   3396 	'mejs.pause': 'Pause',
   3397 
   3398 	'mejs.time-slider': 'Time Slider',
   3399 	'mejs.time-help-text': 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.',
   3400 	'mejs.live-broadcast': 'Live Broadcast',
   3401 
   3402 	'mejs.volume-help-text': 'Use Up/Down Arrow keys to increase or decrease volume.',
   3403 	'mejs.unmute': 'Unmute',
   3404 	'mejs.mute': 'Mute',
   3405 	'mejs.volume-slider': 'Volume Slider',
   3406 
   3407 	'mejs.video-player': 'Video Player',
   3408 	'mejs.audio-player': 'Audio Player',
   3409 
   3410 	'mejs.captions-subtitles': 'Captions/Subtitles',
   3411 	'mejs.captions-chapters': 'Chapters',
   3412 	'mejs.none': 'None',
   3413 	'mejs.afrikaans': 'Afrikaans',
   3414 	'mejs.albanian': 'Albanian',
   3415 	'mejs.arabic': 'Arabic',
   3416 	'mejs.belarusian': 'Belarusian',
   3417 	'mejs.bulgarian': 'Bulgarian',
   3418 	'mejs.catalan': 'Catalan',
   3419 	'mejs.chinese': 'Chinese',
   3420 	'mejs.chinese-simplified': 'Chinese (Simplified)',
   3421 	'mejs.chinese-traditional': 'Chinese (Traditional)',
   3422 	'mejs.croatian': 'Croatian',
   3423 	'mejs.czech': 'Czech',
   3424 	'mejs.danish': 'Danish',
   3425 	'mejs.dutch': 'Dutch',
   3426 	'mejs.english': 'English',
   3427 	'mejs.estonian': 'Estonian',
   3428 	'mejs.filipino': 'Filipino',
   3429 	'mejs.finnish': 'Finnish',
   3430 	'mejs.french': 'French',
   3431 	'mejs.galician': 'Galician',
   3432 	'mejs.german': 'German',
   3433 	'mejs.greek': 'Greek',
   3434 	'mejs.haitian-creole': 'Haitian Creole',
   3435 	'mejs.hebrew': 'Hebrew',
   3436 	'mejs.hindi': 'Hindi',
   3437 	'mejs.hungarian': 'Hungarian',
   3438 	'mejs.icelandic': 'Icelandic',
   3439 	'mejs.indonesian': 'Indonesian',
   3440 	'mejs.irish': 'Irish',
   3441 	'mejs.italian': 'Italian',
   3442 	'mejs.japanese': 'Japanese',
   3443 	'mejs.korean': 'Korean',
   3444 	'mejs.latvian': 'Latvian',
   3445 	'mejs.lithuanian': 'Lithuanian',
   3446 	'mejs.macedonian': 'Macedonian',
   3447 	'mejs.malay': 'Malay',
   3448 	'mejs.maltese': 'Maltese',
   3449 	'mejs.norwegian': 'Norwegian',
   3450 	'mejs.persian': 'Persian',
   3451 	'mejs.polish': 'Polish',
   3452 	'mejs.portuguese': 'Portuguese',
   3453 	'mejs.romanian': 'Romanian',
   3454 	'mejs.russian': 'Russian',
   3455 	'mejs.serbian': 'Serbian',
   3456 	'mejs.slovak': 'Slovak',
   3457 	'mejs.slovenian': 'Slovenian',
   3458 	'mejs.spanish': 'Spanish',
   3459 	'mejs.swahili': 'Swahili',
   3460 	'mejs.swedish': 'Swedish',
   3461 	'mejs.tagalog': 'Tagalog',
   3462 	'mejs.thai': 'Thai',
   3463 	'mejs.turkish': 'Turkish',
   3464 	'mejs.ukrainian': 'Ukrainian',
   3465 	'mejs.vietnamese': 'Vietnamese',
   3466 	'mejs.welsh': 'Welsh',
   3467 	'mejs.yiddish': 'Yiddish'
   3468 };
   3469 
   3470 },{}],16:[function(_dereq_,module,exports){
   3471 'use strict';
   3472 
   3473 Object.defineProperty(exports, "__esModule", {
   3474 	value: true
   3475 });
   3476 exports.config = undefined;
   3477 
   3478 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
   3479 
   3480 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
   3481 
   3482 var _window = _dereq_(3);
   3483 
   3484 var _window2 = _interopRequireDefault(_window);
   3485 
   3486 var _document = _dereq_(2);
   3487 
   3488 var _document2 = _interopRequireDefault(_document);
   3489 
   3490 var _mejs = _dereq_(7);
   3491 
   3492 var _mejs2 = _interopRequireDefault(_mejs);
   3493 
   3494 var _mediaelement = _dereq_(6);
   3495 
   3496 var _mediaelement2 = _interopRequireDefault(_mediaelement);
   3497 
   3498 var _default = _dereq_(17);
   3499 
   3500 var _default2 = _interopRequireDefault(_default);
   3501 
   3502 var _i18n = _dereq_(5);
   3503 
   3504 var _i18n2 = _interopRequireDefault(_i18n);
   3505 
   3506 var _constants = _dereq_(25);
   3507 
   3508 var _general = _dereq_(27);
   3509 
   3510 var _time = _dereq_(30);
   3511 
   3512 var _media = _dereq_(28);
   3513 
   3514 var _dom = _dereq_(26);
   3515 
   3516 var dom = _interopRequireWildcard(_dom);
   3517 
   3518 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
   3519 
   3520 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   3521 
   3522 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
   3523 
   3524 _mejs2.default.mepIndex = 0;
   3525 
   3526 _mejs2.default.players = {};
   3527 
   3528 var config = exports.config = {
   3529 	poster: '',
   3530 
   3531 	showPosterWhenEnded: false,
   3532 
   3533 	showPosterWhenPaused: false,
   3534 
   3535 	defaultVideoWidth: 480,
   3536 
   3537 	defaultVideoHeight: 270,
   3538 
   3539 	videoWidth: -1,
   3540 
   3541 	videoHeight: -1,
   3542 
   3543 	defaultAudioWidth: 400,
   3544 
   3545 	defaultAudioHeight: 40,
   3546 
   3547 	defaultSeekBackwardInterval: function defaultSeekBackwardInterval(media) {
   3548 		return media.getDuration() * 0.05;
   3549 	},
   3550 
   3551 	defaultSeekForwardInterval: function defaultSeekForwardInterval(media) {
   3552 		return media.getDuration() * 0.05;
   3553 	},
   3554 
   3555 	setDimensions: true,
   3556 
   3557 	audioWidth: -1,
   3558 
   3559 	audioHeight: -1,
   3560 
   3561 	loop: false,
   3562 
   3563 	autoRewind: true,
   3564 
   3565 	enableAutosize: true,
   3566 
   3567 	timeFormat: '',
   3568 
   3569 	alwaysShowHours: false,
   3570 
   3571 	showTimecodeFrameCount: false,
   3572 
   3573 	framesPerSecond: 25,
   3574 
   3575 	alwaysShowControls: false,
   3576 
   3577 	hideVideoControlsOnLoad: false,
   3578 
   3579 	hideVideoControlsOnPause: false,
   3580 
   3581 	clickToPlayPause: true,
   3582 
   3583 	controlsTimeoutDefault: 1500,
   3584 
   3585 	controlsTimeoutMouseEnter: 2500,
   3586 
   3587 	controlsTimeoutMouseLeave: 1000,
   3588 
   3589 	iPadUseNativeControls: false,
   3590 
   3591 	iPhoneUseNativeControls: false,
   3592 
   3593 	AndroidUseNativeControls: false,
   3594 
   3595 	features: ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'],
   3596 
   3597 	useDefaultControls: false,
   3598 
   3599 	isVideo: true,
   3600 
   3601 	stretching: 'auto',
   3602 
   3603 	classPrefix: 'mejs__',
   3604 
   3605 	enableKeyboard: true,
   3606 
   3607 	pauseOtherPlayers: true,
   3608 
   3609 	secondsDecimalLength: 0,
   3610 
   3611 	customError: null,
   3612 
   3613 	keyActions: [{
   3614 		keys: [32, 179],
   3615 		action: function action(player) {
   3616 
   3617 			if (!_constants.IS_FIREFOX) {
   3618 				if (player.paused || player.ended) {
   3619 					player.play();
   3620 				} else {
   3621 					player.pause();
   3622 				}
   3623 			}
   3624 		}
   3625 	}]
   3626 };
   3627 
   3628 _mejs2.default.MepDefaults = config;
   3629 
   3630 var MediaElementPlayer = function () {
   3631 	function MediaElementPlayer(node, o) {
   3632 		_classCallCheck(this, MediaElementPlayer);
   3633 
   3634 		var t = this,
   3635 		    element = typeof node === 'string' ? _document2.default.getElementById(node) : node;
   3636 
   3637 		if (!(t instanceof MediaElementPlayer)) {
   3638 			return new MediaElementPlayer(element, o);
   3639 		}
   3640 
   3641 		t.node = t.media = element;
   3642 
   3643 		if (!t.node) {
   3644 			return;
   3645 		}
   3646 
   3647 		if (t.media.player) {
   3648 			return t.media.player;
   3649 		}
   3650 
   3651 		t.hasFocus = false;
   3652 
   3653 		t.controlsAreVisible = true;
   3654 
   3655 		t.controlsEnabled = true;
   3656 
   3657 		t.controlsTimer = null;
   3658 
   3659 		t.currentMediaTime = 0;
   3660 
   3661 		t.proxy = null;
   3662 
   3663 		if (o === undefined) {
   3664 			var options = t.node.getAttribute('data-mejsoptions');
   3665 			o = options ? JSON.parse(options) : {};
   3666 		}
   3667 
   3668 		t.options = Object.assign({}, config, o);
   3669 
   3670 		if (t.options.loop && !t.media.getAttribute('loop')) {
   3671 			t.media.loop = true;
   3672 			t.node.loop = true;
   3673 		} else if (t.media.loop) {
   3674 			t.options.loop = true;
   3675 		}
   3676 
   3677 		if (!t.options.timeFormat) {
   3678 			t.options.timeFormat = 'mm:ss';
   3679 			if (t.options.alwaysShowHours) {
   3680 				t.options.timeFormat = 'hh:mm:ss';
   3681 			}
   3682 			if (t.options.showTimecodeFrameCount) {
   3683 				t.options.timeFormat += ':ff';
   3684 			}
   3685 		}
   3686 
   3687 		(0, _time.calculateTimeFormat)(0, t.options, t.options.framesPerSecond || 25);
   3688 
   3689 		t.id = 'mep_' + _mejs2.default.mepIndex++;
   3690 
   3691 		_mejs2.default.players[t.id] = t;
   3692 
   3693 		t.init();
   3694 
   3695 		return t;
   3696 	}
   3697 
   3698 	_createClass(MediaElementPlayer, [{
   3699 		key: 'getElement',
   3700 		value: function getElement(element) {
   3701 			return element;
   3702 		}
   3703 	}, {
   3704 		key: 'init',
   3705 		value: function init() {
   3706 			var t = this,
   3707 			    playerOptions = Object.assign({}, t.options, {
   3708 				success: function success(media, domNode) {
   3709 					t._meReady(media, domNode);
   3710 				},
   3711 				error: function error(e) {
   3712 					t._handleError(e);
   3713 				}
   3714 			}),
   3715 			    tagName = t.node.tagName.toLowerCase();
   3716 
   3717 			t.isDynamic = tagName !== 'audio' && tagName !== 'video' && tagName !== 'iframe';
   3718 			t.isVideo = t.isDynamic ? t.options.isVideo : tagName !== 'audio' && t.options.isVideo;
   3719 			t.mediaFiles = null;
   3720 			t.trackFiles = null;
   3721 
   3722 			if (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls) {
   3723 				t.node.setAttribute('controls', true);
   3724 
   3725 				if (_constants.IS_IPAD && t.node.getAttribute('autoplay')) {
   3726 					t.play();
   3727 				}
   3728 			} else if ((t.isVideo || !t.isVideo && (t.options.features.length || t.options.useDefaultControls)) && !(_constants.IS_ANDROID && t.options.AndroidUseNativeControls)) {
   3729 				t.node.removeAttribute('controls');
   3730 				var videoPlayerTitle = t.isVideo ? _i18n2.default.t('mejs.video-player') : _i18n2.default.t('mejs.audio-player');
   3731 
   3732 				var offscreen = _document2.default.createElement('span');
   3733 				offscreen.className = t.options.classPrefix + 'offscreen';
   3734 				offscreen.innerText = videoPlayerTitle;
   3735 				t.media.parentNode.insertBefore(offscreen, t.media);
   3736 
   3737 				t.container = _document2.default.createElement('div');
   3738 				t.getElement(t.container).id = t.id;
   3739 				t.getElement(t.container).className = t.options.classPrefix + 'container ' + t.options.classPrefix + 'container-keyboard-inactive ' + t.media.className;
   3740 				t.getElement(t.container).tabIndex = 0;
   3741 				t.getElement(t.container).setAttribute('role', 'application');
   3742 				t.getElement(t.container).setAttribute('aria-label', videoPlayerTitle);
   3743 				t.getElement(t.container).innerHTML = '<div class="' + t.options.classPrefix + 'inner">' + ('<div class="' + t.options.classPrefix + 'mediaelement"></div>') + ('<div class="' + t.options.classPrefix + 'layers"></div>') + ('<div class="' + t.options.classPrefix + 'controls"></div>') + '</div>';
   3744 				t.getElement(t.container).addEventListener('focus', function (e) {
   3745 					if (!t.controlsAreVisible && !t.hasFocus && t.controlsEnabled) {
   3746 						t.showControls(true);
   3747 
   3748 						var btnSelector = (0, _general.isNodeAfter)(e.relatedTarget, t.getElement(t.container)) ? '.' + t.options.classPrefix + 'controls .' + t.options.classPrefix + 'button:last-child > button' : '.' + t.options.classPrefix + 'playpause-button > button',
   3749 						    button = t.getElement(t.container).querySelector(btnSelector);
   3750 
   3751 						button.focus();
   3752 					}
   3753 				});
   3754 				t.node.parentNode.insertBefore(t.getElement(t.container), t.node);
   3755 
   3756 				if (!t.options.features.length && !t.options.useDefaultControls) {
   3757 					t.getElement(t.container).style.background = 'transparent';
   3758 					t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'controls').style.display = 'none';
   3759 				}
   3760 
   3761 				if (t.isVideo && t.options.stretching === 'fill' && !dom.hasClass(t.getElement(t.container).parentNode, t.options.classPrefix + 'fill-container')) {
   3762 					t.outerContainer = t.media.parentNode;
   3763 
   3764 					var wrapper = _document2.default.createElement('div');
   3765 					wrapper.className = t.options.classPrefix + 'fill-container';
   3766 					t.getElement(t.container).parentNode.insertBefore(wrapper, t.getElement(t.container));
   3767 					wrapper.appendChild(t.getElement(t.container));
   3768 				}
   3769 
   3770 				if (_constants.IS_ANDROID) {
   3771 					dom.addClass(t.getElement(t.container), t.options.classPrefix + 'android');
   3772 				}
   3773 				if (_constants.IS_IOS) {
   3774 					dom.addClass(t.getElement(t.container), t.options.classPrefix + 'ios');
   3775 				}
   3776 				if (_constants.IS_IPAD) {
   3777 					dom.addClass(t.getElement(t.container), t.options.classPrefix + 'ipad');
   3778 				}
   3779 				if (_constants.IS_IPHONE) {
   3780 					dom.addClass(t.getElement(t.container), t.options.classPrefix + 'iphone');
   3781 				}
   3782 				dom.addClass(t.getElement(t.container), t.isVideo ? t.options.classPrefix + 'video' : t.options.classPrefix + 'audio');
   3783 
   3784 				t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'mediaelement').appendChild(t.node);
   3785 
   3786 				t.media.player = t;
   3787 
   3788 				t.controls = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'controls');
   3789 				t.layers = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'layers');
   3790 
   3791 				var tagType = t.isVideo ? 'video' : 'audio',
   3792 				    capsTagName = tagType.substring(0, 1).toUpperCase() + tagType.substring(1);
   3793 
   3794 				if (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) {
   3795 					t.width = t.options[tagType + 'Width'];
   3796 				} else if (t.node.style.width !== '' && t.node.style.width !== null) {
   3797 					t.width = t.node.style.width;
   3798 				} else if (t.node.getAttribute('width')) {
   3799 					t.width = t.node.getAttribute('width');
   3800 				} else {
   3801 					t.width = t.options['default' + capsTagName + 'Width'];
   3802 				}
   3803 
   3804 				if (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) {
   3805 					t.height = t.options[tagType + 'Height'];
   3806 				} else if (t.node.style.height !== '' && t.node.style.height !== null) {
   3807 					t.height = t.node.style.height;
   3808 				} else if (t.node.getAttribute('height')) {
   3809 					t.height = t.node.getAttribute('height');
   3810 				} else {
   3811 					t.height = t.options['default' + capsTagName + 'Height'];
   3812 				}
   3813 
   3814 				t.initialAspectRatio = t.height >= t.width ? t.width / t.height : t.height / t.width;
   3815 
   3816 				t.setPlayerSize(t.width, t.height);
   3817 
   3818 				playerOptions.pluginWidth = t.width;
   3819 				playerOptions.pluginHeight = t.height;
   3820 			} else if (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) {
   3821 					t.node.style.display = 'none';
   3822 				}
   3823 
   3824 			_mejs2.default.MepDefaults = playerOptions;
   3825 
   3826 			new _mediaelement2.default(t.media, playerOptions, t.mediaFiles);
   3827 
   3828 			if (t.getElement(t.container) !== undefined && t.options.features.length && t.controlsAreVisible && !t.options.hideVideoControlsOnLoad) {
   3829 				var event = (0, _general.createEvent)('controlsshown', t.getElement(t.container));
   3830 				t.getElement(t.container).dispatchEvent(event);
   3831 			}
   3832 		}
   3833 	}, {
   3834 		key: 'showControls',
   3835 		value: function showControls(doAnimation) {
   3836 			var t = this;
   3837 
   3838 			doAnimation = doAnimation === undefined || doAnimation;
   3839 
   3840 			if (t.controlsAreVisible || !t.isVideo) {
   3841 				return;
   3842 			}
   3843 
   3844 			if (doAnimation) {
   3845 				(function () {
   3846 					dom.fadeIn(t.getElement(t.controls), 200, function () {
   3847 						dom.removeClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');
   3848 						var event = (0, _general.createEvent)('controlsshown', t.getElement(t.container));
   3849 						t.getElement(t.container).dispatchEvent(event);
   3850 					});
   3851 
   3852 					var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');
   3853 
   3854 					var _loop = function _loop(i, total) {
   3855 						dom.fadeIn(controls[i], 200, function () {
   3856 							dom.removeClass(controls[i], t.options.classPrefix + 'offscreen');
   3857 						});
   3858 					};
   3859 
   3860 					for (var i = 0, total = controls.length; i < total; i++) {
   3861 						_loop(i, total);
   3862 					}
   3863 				})();
   3864 			} else {
   3865 				dom.removeClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');
   3866 				t.getElement(t.controls).style.display = '';
   3867 				t.getElement(t.controls).style.opacity = 1;
   3868 
   3869 				var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');
   3870 				for (var i = 0, total = controls.length; i < total; i++) {
   3871 					dom.removeClass(controls[i], t.options.classPrefix + 'offscreen');
   3872 					controls[i].style.display = '';
   3873 				}
   3874 
   3875 				var event = (0, _general.createEvent)('controlsshown', t.getElement(t.container));
   3876 				t.getElement(t.container).dispatchEvent(event);
   3877 			}
   3878 
   3879 			t.controlsAreVisible = true;
   3880 			t.setControlsSize();
   3881 		}
   3882 	}, {
   3883 		key: 'hideControls',
   3884 		value: function hideControls(doAnimation, forceHide) {
   3885 			var t = this;
   3886 
   3887 			doAnimation = doAnimation === undefined || doAnimation;
   3888 
   3889 			if (forceHide !== true && (!t.controlsAreVisible || t.options.alwaysShowControls || t.paused && t.readyState === 4 && (!t.options.hideVideoControlsOnLoad && t.currentTime <= 0 || !t.options.hideVideoControlsOnPause && t.currentTime > 0) || t.isVideo && !t.options.hideVideoControlsOnLoad && !t.readyState || t.ended)) {
   3890 				return;
   3891 			}
   3892 
   3893 			if (doAnimation) {
   3894 				(function () {
   3895 					dom.fadeOut(t.getElement(t.controls), 200, function () {
   3896 						dom.addClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');
   3897 						t.getElement(t.controls).style.display = '';
   3898 						var event = (0, _general.createEvent)('controlshidden', t.getElement(t.container));
   3899 						t.getElement(t.container).dispatchEvent(event);
   3900 					});
   3901 
   3902 					var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');
   3903 
   3904 					var _loop2 = function _loop2(i, total) {
   3905 						dom.fadeOut(controls[i], 200, function () {
   3906 							dom.addClass(controls[i], t.options.classPrefix + 'offscreen');
   3907 							controls[i].style.display = '';
   3908 						});
   3909 					};
   3910 
   3911 					for (var i = 0, total = controls.length; i < total; i++) {
   3912 						_loop2(i, total);
   3913 					}
   3914 				})();
   3915 			} else {
   3916 				dom.addClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen');
   3917 				t.getElement(t.controls).style.display = '';
   3918 				t.getElement(t.controls).style.opacity = 0;
   3919 
   3920 				var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control');
   3921 				for (var i = 0, total = controls.length; i < total; i++) {
   3922 					dom.addClass(controls[i], t.options.classPrefix + 'offscreen');
   3923 					controls[i].style.display = '';
   3924 				}
   3925 
   3926 				var event = (0, _general.createEvent)('controlshidden', t.getElement(t.container));
   3927 				t.getElement(t.container).dispatchEvent(event);
   3928 			}
   3929 
   3930 			t.controlsAreVisible = false;
   3931 		}
   3932 	}, {
   3933 		key: 'startControlsTimer',
   3934 		value: function startControlsTimer(timeout) {
   3935 			var t = this;
   3936 
   3937 			timeout = typeof timeout !== 'undefined' ? timeout : t.options.controlsTimeoutDefault;
   3938 
   3939 			t.killControlsTimer('start');
   3940 
   3941 			t.controlsTimer = setTimeout(function () {
   3942 				t.hideControls();
   3943 				t.killControlsTimer('hide');
   3944 			}, timeout);
   3945 		}
   3946 	}, {
   3947 		key: 'killControlsTimer',
   3948 		value: function killControlsTimer() {
   3949 			var t = this;
   3950 
   3951 			if (t.controlsTimer !== null) {
   3952 				clearTimeout(t.controlsTimer);
   3953 				delete t.controlsTimer;
   3954 				t.controlsTimer = null;
   3955 			}
   3956 		}
   3957 	}, {
   3958 		key: 'disableControls',
   3959 		value: function disableControls() {
   3960 			var t = this;
   3961 
   3962 			t.killControlsTimer();
   3963 			t.controlsEnabled = false;
   3964 			t.hideControls(false, true);
   3965 		}
   3966 	}, {
   3967 		key: 'enableControls',
   3968 		value: function enableControls() {
   3969 			var t = this;
   3970 
   3971 			t.controlsEnabled = true;
   3972 			t.showControls(false);
   3973 		}
   3974 	}, {
   3975 		key: '_setDefaultPlayer',
   3976 		value: function _setDefaultPlayer() {
   3977 			var t = this;
   3978 			if (t.proxy) {
   3979 				t.proxy.pause();
   3980 			}
   3981 			t.proxy = new _default2.default(t);
   3982 			t.media.addEventListener('loadedmetadata', function () {
   3983 				if (t.getCurrentTime() > 0 && t.currentMediaTime > 0) {
   3984 					t.setCurrentTime(t.currentMediaTime);
   3985 					if (!_constants.IS_IOS && !_constants.IS_ANDROID) {
   3986 						t.play();
   3987 					}
   3988 				}
   3989 			});
   3990 		}
   3991 	}, {
   3992 		key: '_meReady',
   3993 		value: function _meReady(media, domNode) {
   3994 			var t = this,
   3995 			    autoplayAttr = domNode.getAttribute('autoplay'),
   3996 			    autoplay = !(autoplayAttr === undefined || autoplayAttr === null || autoplayAttr === 'false'),
   3997 			    isNative = media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName);
   3998 
   3999 			if (t.getElement(t.controls)) {
   4000 				t.enableControls();
   4001 			}
   4002 
   4003 			if (t.getElement(t.container) && t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-play')) {
   4004 				t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-play').style.display = '';
   4005 			}
   4006 
   4007 			if (t.created) {
   4008 				return;
   4009 			}
   4010 
   4011 			t.created = true;
   4012 			t.media = media;
   4013 			t.domNode = domNode;
   4014 
   4015 			if (!(_constants.IS_ANDROID && t.options.AndroidUseNativeControls) && !(_constants.IS_IPAD && t.options.iPadUseNativeControls) && !(_constants.IS_IPHONE && t.options.iPhoneUseNativeControls)) {
   4016 				if (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) {
   4017 					if (autoplay && isNative) {
   4018 						t.play();
   4019 					}
   4020 
   4021 					if (t.options.success) {
   4022 
   4023 						if (typeof t.options.success === 'string') {
   4024 							_window2.default[t.options.success](t.media, t.domNode, t);
   4025 						} else {
   4026 							t.options.success(t.media, t.domNode, t);
   4027 						}
   4028 					}
   4029 
   4030 					return;
   4031 				}
   4032 
   4033 				t.featurePosition = {};
   4034 
   4035 				t._setDefaultPlayer();
   4036 
   4037 				t.buildposter(t, t.getElement(t.controls), t.getElement(t.layers), t.media);
   4038 				t.buildkeyboard(t, t.getElement(t.controls), t.getElement(t.layers), t.media);
   4039 				t.buildoverlays(t, t.getElement(t.controls), t.getElement(t.layers), t.media);
   4040 
   4041 				if (t.options.useDefaultControls) {
   4042 					var defaultControls = ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'];
   4043 					t.options.features = defaultControls.concat(t.options.features.filter(function (item) {
   4044 						return defaultControls.indexOf(item) === -1;
   4045 					}));
   4046 				}
   4047 
   4048 				t.buildfeatures(t, t.getElement(t.controls), t.getElement(t.layers), t.media);
   4049 
   4050 				var event = (0, _general.createEvent)('controlsready', t.getElement(t.container));
   4051 				t.getElement(t.container).dispatchEvent(event);
   4052 
   4053 				t.setPlayerSize(t.width, t.height);
   4054 				t.setControlsSize();
   4055 
   4056 				if (t.isVideo) {
   4057 					t.clickToPlayPauseCallback = function () {
   4058 
   4059 						if (t.options.clickToPlayPause) {
   4060 							var button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'),
   4061 							    pressed = button.getAttribute('aria-pressed');
   4062 
   4063 							if (t.paused && pressed) {
   4064 								t.pause();
   4065 							} else if (t.paused) {
   4066 								t.play();
   4067 							} else {
   4068 								t.pause();
   4069 							}
   4070 
   4071 							button.setAttribute('aria-pressed', !pressed);
   4072 							t.getElement(t.container).focus();
   4073 						}
   4074 					};
   4075 
   4076 					t.createIframeLayer();
   4077 
   4078 					t.media.addEventListener('click', t.clickToPlayPauseCallback);
   4079 
   4080 					if ((_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls) {
   4081 						t.node.addEventListener('touchstart', function () {
   4082 							if (t.controlsAreVisible) {
   4083 								t.hideControls(false);
   4084 							} else {
   4085 								if (t.controlsEnabled) {
   4086 									t.showControls(false);
   4087 								}
   4088 							}
   4089 						}, _constants.SUPPORT_PASSIVE_EVENT ? { passive: true } : false);
   4090 					} else {
   4091 						t.getElement(t.container).addEventListener('mouseenter', function () {
   4092 							if (t.controlsEnabled) {
   4093 								if (!t.options.alwaysShowControls) {
   4094 									t.killControlsTimer('enter');
   4095 									t.showControls();
   4096 									t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
   4097 								}
   4098 							}
   4099 						});
   4100 						t.getElement(t.container).addEventListener('mousemove', function () {
   4101 							if (t.controlsEnabled) {
   4102 								if (!t.controlsAreVisible) {
   4103 									t.showControls();
   4104 								}
   4105 								if (!t.options.alwaysShowControls) {
   4106 									t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
   4107 								}
   4108 							}
   4109 						});
   4110 						t.getElement(t.container).addEventListener('mouseleave', function () {
   4111 							if (t.controlsEnabled) {
   4112 								if (!t.paused && !t.options.alwaysShowControls) {
   4113 									t.startControlsTimer(t.options.controlsTimeoutMouseLeave);
   4114 								}
   4115 							}
   4116 						});
   4117 					}
   4118 
   4119 					if (t.options.hideVideoControlsOnLoad) {
   4120 						t.hideControls(false);
   4121 					}
   4122 
   4123 					if (t.options.enableAutosize) {
   4124 						t.media.addEventListener('loadedmetadata', function (e) {
   4125 							var target = e !== undefined ? e.detail.target || e.target : t.media;
   4126 							if (t.options.videoHeight <= 0 && !t.domNode.getAttribute('height') && !t.domNode.style.height && target !== null && !isNaN(target.videoHeight)) {
   4127 								t.setPlayerSize(target.videoWidth, target.videoHeight);
   4128 								t.setControlsSize();
   4129 								t.media.setSize(target.videoWidth, target.videoHeight);
   4130 							}
   4131 						});
   4132 					}
   4133 				}
   4134 
   4135 				t.media.addEventListener('play', function () {
   4136 					t.hasFocus = true;
   4137 
   4138 					for (var playerIndex in _mejs2.default.players) {
   4139 						if (_mejs2.default.players.hasOwnProperty(playerIndex)) {
   4140 							var p = _mejs2.default.players[playerIndex];
   4141 
   4142 							if (p.id !== t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended && p.options.ignorePauseOtherPlayersOption !== true) {
   4143 								p.pause();
   4144 								p.hasFocus = false;
   4145 							}
   4146 						}
   4147 					}
   4148 
   4149 					if (!(_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls && t.isVideo) {
   4150 						t.hideControls();
   4151 					}
   4152 				});
   4153 
   4154 				t.media.addEventListener('ended', function () {
   4155 					if (t.options.autoRewind) {
   4156 						try {
   4157 							t.setCurrentTime(0);
   4158 
   4159 							setTimeout(function () {
   4160 								var loadingElement = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-loading');
   4161 								if (loadingElement && loadingElement.parentNode) {
   4162 									loadingElement.parentNode.style.display = 'none';
   4163 								}
   4164 							}, 20);
   4165 						} catch (exp) {
   4166 							
   4167 						}
   4168 					}
   4169 
   4170 					if (typeof t.media.renderer.stop === 'function') {
   4171 						t.media.renderer.stop();
   4172 					} else {
   4173 						t.pause();
   4174 					}
   4175 
   4176 					if (t.setProgressRail) {
   4177 						t.setProgressRail();
   4178 					}
   4179 					if (t.setCurrentRail) {
   4180 						t.setCurrentRail();
   4181 					}
   4182 
   4183 					if (t.options.loop) {
   4184 						t.play();
   4185 					} else if (!t.options.alwaysShowControls && t.controlsEnabled) {
   4186 						t.showControls();
   4187 					}
   4188 				});
   4189 
   4190 				t.media.addEventListener('loadedmetadata', function () {
   4191 
   4192 					(0, _time.calculateTimeFormat)(t.getDuration(), t.options, t.options.framesPerSecond || 25);
   4193 
   4194 					if (t.updateDuration) {
   4195 						t.updateDuration();
   4196 					}
   4197 					if (t.updateCurrent) {
   4198 						t.updateCurrent();
   4199 					}
   4200 
   4201 					if (!t.isFullScreen) {
   4202 						t.setPlayerSize(t.width, t.height);
   4203 						t.setControlsSize();
   4204 					}
   4205 				});
   4206 
   4207 				var duration = null;
   4208 				t.media.addEventListener('timeupdate', function () {
   4209 					if (!isNaN(t.getDuration()) && duration !== t.getDuration()) {
   4210 						duration = t.getDuration();
   4211 						(0, _time.calculateTimeFormat)(duration, t.options, t.options.framesPerSecond || 25);
   4212 
   4213 						if (t.updateDuration) {
   4214 							t.updateDuration();
   4215 						}
   4216 						if (t.updateCurrent) {
   4217 							t.updateCurrent();
   4218 						}
   4219 
   4220 						t.setControlsSize();
   4221 					}
   4222 				});
   4223 
   4224 				t.getElement(t.container).addEventListener('click', function (e) {
   4225 					dom.addClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive');
   4226 				});
   4227 
   4228 				t.getElement(t.container).addEventListener('focusin', function (e) {
   4229 					dom.removeClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive');
   4230 					if (t.isVideo && !_constants.IS_ANDROID && !_constants.IS_IOS && t.controlsEnabled && !t.options.alwaysShowControls) {
   4231 						t.killControlsTimer('enter');
   4232 						t.showControls();
   4233 						t.startControlsTimer(t.options.controlsTimeoutMouseEnter);
   4234 					}
   4235 				});
   4236 
   4237 				t.getElement(t.container).addEventListener('focusout', function (e) {
   4238 					setTimeout(function () {
   4239 						if (e.relatedTarget) {
   4240 							if (t.keyboardAction && !e.relatedTarget.closest('.' + t.options.classPrefix + 'container')) {
   4241 								t.keyboardAction = false;
   4242 								if (t.isVideo && !t.options.alwaysShowControls && !t.paused) {
   4243 									t.startControlsTimer(t.options.controlsTimeoutMouseLeave);
   4244 								}
   4245 							}
   4246 						}
   4247 					}, 0);
   4248 				});
   4249 
   4250 				setTimeout(function () {
   4251 					t.setPlayerSize(t.width, t.height);
   4252 					t.setControlsSize();
   4253 				}, 0);
   4254 
   4255 				t.globalResizeCallback = function () {
   4256 					if (!(t.isFullScreen || _constants.HAS_TRUE_NATIVE_FULLSCREEN && _document2.default.webkitIsFullScreen)) {
   4257 						t.setPlayerSize(t.width, t.height);
   4258 					}
   4259 
   4260 					t.setControlsSize();
   4261 				};
   4262 
   4263 				t.globalBind('resize', t.globalResizeCallback);
   4264 			}
   4265 
   4266 			if (autoplay && isNative) {
   4267 				t.play();
   4268 			}
   4269 
   4270 			if (t.options.success) {
   4271 				if (typeof t.options.success === 'string') {
   4272 					_window2.default[t.options.success](t.media, t.domNode, t);
   4273 				} else {
   4274 					t.options.success(t.media, t.domNode, t);
   4275 				}
   4276 			}
   4277 		}
   4278 	}, {
   4279 		key: '_handleError',
   4280 		value: function _handleError(e, media, node) {
   4281 			var t = this,
   4282 			    play = t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-play');
   4283 
   4284 			if (play) {
   4285 				play.style.display = 'none';
   4286 			}
   4287 
   4288 			if (t.options.error) {
   4289 				t.options.error(e, media, node);
   4290 			}
   4291 
   4292 			if (t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay')) {
   4293 				t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay').remove();
   4294 			}
   4295 
   4296 			var errorContainer = _document2.default.createElement('div');
   4297 			errorContainer.className = t.options.classPrefix + 'cannotplay';
   4298 			errorContainer.style.width = '100%';
   4299 			errorContainer.style.height = '100%';
   4300 
   4301 			var errorContent = typeof t.options.customError === 'function' ? t.options.customError(t.media, t.media.originalNode) : t.options.customError,
   4302 			    imgError = '';
   4303 
   4304 			if (!errorContent) {
   4305 				var poster = t.media.originalNode.getAttribute('poster');
   4306 				if (poster) {
   4307 					imgError = '<img src="' + poster + '" alt="' + _mejs2.default.i18n.t('mejs.download-file') + '">';
   4308 				}
   4309 
   4310 				if (e.message) {
   4311 					errorContent = '<p>' + e.message + '</p>';
   4312 				}
   4313 
   4314 				if (e.urls) {
   4315 					for (var i = 0, total = e.urls.length; i < total; i++) {
   4316 						var url = e.urls[i];
   4317 						errorContent += '<a href="' + url.src + '" data-type="' + url.type + '"><span>' + _mejs2.default.i18n.t('mejs.download-file') + ': ' + url.src + '</span></a>';
   4318 					}
   4319 				}
   4320 			}
   4321 
   4322 			if (errorContent && t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error')) {
   4323 				errorContainer.innerHTML = errorContent;
   4324 				t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error').innerHTML = '' + imgError + errorContainer.outerHTML;
   4325 				t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error').parentNode.style.display = 'block';
   4326 			}
   4327 
   4328 			if (t.controlsEnabled) {
   4329 				t.disableControls();
   4330 			}
   4331 		}
   4332 	}, {
   4333 		key: 'setPlayerSize',
   4334 		value: function setPlayerSize(width, height) {
   4335 			var t = this;
   4336 
   4337 			if (!t.options.setDimensions) {
   4338 				return false;
   4339 			}
   4340 
   4341 			if (typeof width !== 'undefined') {
   4342 				t.width = width;
   4343 			}
   4344 
   4345 			if (typeof height !== 'undefined') {
   4346 				t.height = height;
   4347 			}
   4348 
   4349 			switch (t.options.stretching) {
   4350 				case 'fill':
   4351 					if (t.isVideo) {
   4352 						t.setFillMode();
   4353 					} else {
   4354 						t.setDimensions(t.width, t.height);
   4355 					}
   4356 					break;
   4357 				case 'responsive':
   4358 					t.setResponsiveMode();
   4359 					break;
   4360 				case 'none':
   4361 					t.setDimensions(t.width, t.height);
   4362 					break;
   4363 
   4364 				default:
   4365 					if (t.hasFluidMode() === true) {
   4366 						t.setResponsiveMode();
   4367 					} else {
   4368 						t.setDimensions(t.width, t.height);
   4369 					}
   4370 					break;
   4371 			}
   4372 		}
   4373 	}, {
   4374 		key: 'hasFluidMode',
   4375 		value: function hasFluidMode() {
   4376 			var t = this;
   4377 
   4378 			return t.height.toString().indexOf('%') !== -1 || t.node && t.node.style.maxWidth && t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width || t.node && t.node.currentStyle && t.node.currentStyle.maxWidth === '100%';
   4379 		}
   4380 	}, {
   4381 		key: 'setResponsiveMode',
   4382 		value: function setResponsiveMode() {
   4383 			var t = this,
   4384 			    parent = function () {
   4385 
   4386 				var parentEl = void 0,
   4387 				    el = t.getElement(t.container);
   4388 
   4389 				while (el) {
   4390 					try {
   4391 						if (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) {
   4392 							return _window2.default.frameElement;
   4393 						} else {
   4394 							parentEl = el.parentElement;
   4395 						}
   4396 					} catch (e) {
   4397 						parentEl = el.parentElement;
   4398 					}
   4399 
   4400 					if (parentEl && dom.visible(parentEl)) {
   4401 						return parentEl;
   4402 					}
   4403 					el = parentEl;
   4404 				}
   4405 
   4406 				return null;
   4407 			}(),
   4408 			    parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null),
   4409 			    nativeWidth = function () {
   4410 				if (t.isVideo) {
   4411 					if (t.node.videoWidth && t.node.videoWidth > 0) {
   4412 						return t.node.videoWidth;
   4413 					} else if (t.node.getAttribute('width')) {
   4414 						return t.node.getAttribute('width');
   4415 					} else {
   4416 						return t.options.defaultVideoWidth;
   4417 					}
   4418 				} else {
   4419 					return t.options.defaultAudioWidth;
   4420 				}
   4421 			}(),
   4422 			    nativeHeight = function () {
   4423 				if (t.isVideo) {
   4424 					if (t.node.videoHeight && t.node.videoHeight > 0) {
   4425 						return t.node.videoHeight;
   4426 					} else if (t.node.getAttribute('height')) {
   4427 						return t.node.getAttribute('height');
   4428 					} else {
   4429 						return t.options.defaultVideoHeight;
   4430 					}
   4431 				} else {
   4432 					return t.options.defaultAudioHeight;
   4433 				}
   4434 			}(),
   4435 			    aspectRatio = function () {
   4436 				var ratio = 1;
   4437 				if (!t.isVideo) {
   4438 					return ratio;
   4439 				}
   4440 
   4441 				if (t.node.videoWidth && t.node.videoWidth > 0 && t.node.videoHeight && t.node.videoHeight > 0) {
   4442 					ratio = t.height >= t.width ? t.node.videoWidth / t.node.videoHeight : t.node.videoHeight / t.node.videoWidth;
   4443 				} else {
   4444 					ratio = t.initialAspectRatio;
   4445 				}
   4446 
   4447 				if (isNaN(ratio) || ratio < 0.01 || ratio > 100) {
   4448 					ratio = 1;
   4449 				}
   4450 
   4451 				return ratio;
   4452 			}(),
   4453 			    parentHeight = parseFloat(parentStyles.height);
   4454 
   4455 			var newHeight = void 0,
   4456 			    parentWidth = parseFloat(parentStyles.width);
   4457 
   4458 			if (t.isVideo) {
   4459 				if (t.height === '100%') {
   4460 					newHeight = parseFloat(parentWidth * nativeHeight / nativeWidth, 10);
   4461 				} else {
   4462 					newHeight = t.height >= t.width ? parseFloat(parentWidth / aspectRatio, 10) : parseFloat(parentWidth * aspectRatio, 10);
   4463 				}
   4464 			} else {
   4465 				newHeight = nativeHeight;
   4466 			}
   4467 
   4468 			if (isNaN(newHeight)) {
   4469 				newHeight = parentHeight;
   4470 			}
   4471 
   4472 			if (t.getElement(t.container).parentNode.length > 0 && t.getElement(t.container).parentNode.tagName.toLowerCase() === 'body') {
   4473 				parentWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth;
   4474 				newHeight = _window2.default.innerHeight || _document2.default.documentElement.clientHeight || _document2.default.body.clientHeight;
   4475 			}
   4476 
   4477 			if (newHeight && parentWidth) {
   4478 				t.getElement(t.container).style.width = parentWidth + 'px';
   4479 				t.getElement(t.container).style.height = newHeight + 'px';
   4480 
   4481 				t.node.style.width = '100%';
   4482 				t.node.style.height = '100%';
   4483 
   4484 				if (t.isVideo && t.media.setSize) {
   4485 					t.media.setSize(parentWidth, newHeight);
   4486 				}
   4487 
   4488 				var layerChildren = t.getElement(t.layers).children;
   4489 				for (var i = 0, total = layerChildren.length; i < total; i++) {
   4490 					layerChildren[i].style.width = '100%';
   4491 					layerChildren[i].style.height = '100%';
   4492 				}
   4493 			}
   4494 		}
   4495 	}, {
   4496 		key: 'setFillMode',
   4497 		value: function setFillMode() {
   4498 			var t = this;
   4499 			var isIframe = _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null;
   4500 			var parent = function () {
   4501 				var parentEl = void 0,
   4502 				    el = t.getElement(t.container);
   4503 
   4504 				while (el) {
   4505 					try {
   4506 						if (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) {
   4507 							return _window2.default.frameElement;
   4508 						} else {
   4509 							parentEl = el.parentElement;
   4510 						}
   4511 					} catch (e) {
   4512 						parentEl = el.parentElement;
   4513 					}
   4514 
   4515 					if (parentEl && dom.visible(parentEl)) {
   4516 						return parentEl;
   4517 					}
   4518 					el = parentEl;
   4519 				}
   4520 
   4521 				return null;
   4522 			}();
   4523 			var parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null);
   4524 
   4525 			if (t.node.style.height !== 'none' && t.node.style.height !== t.height) {
   4526 				t.node.style.height = 'auto';
   4527 			}
   4528 			if (t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width) {
   4529 				t.node.style.maxWidth = 'none';
   4530 			}
   4531 
   4532 			if (t.node.style.maxHeight !== 'none' && t.node.style.maxHeight !== t.height) {
   4533 				t.node.style.maxHeight = 'none';
   4534 			}
   4535 
   4536 			if (t.node.currentStyle) {
   4537 				if (t.node.currentStyle.height === '100%') {
   4538 					t.node.currentStyle.height = 'auto';
   4539 				}
   4540 				if (t.node.currentStyle.maxWidth === '100%') {
   4541 					t.node.currentStyle.maxWidth = 'none';
   4542 				}
   4543 				if (t.node.currentStyle.maxHeight === '100%') {
   4544 					t.node.currentStyle.maxHeight = 'none';
   4545 				}
   4546 			}
   4547 
   4548 			if (!isIframe && !parseFloat(parentStyles.width)) {
   4549 				parent.style.width = t.media.offsetWidth + 'px';
   4550 			}
   4551 
   4552 			if (!isIframe && !parseFloat(parentStyles.height)) {
   4553 				parent.style.height = t.media.offsetHeight + 'px';
   4554 			}
   4555 
   4556 			parentStyles = getComputedStyle(parent);
   4557 
   4558 			var parentWidth = parseFloat(parentStyles.width),
   4559 			    parentHeight = parseFloat(parentStyles.height);
   4560 
   4561 			t.setDimensions('100%', '100%');
   4562 
   4563 			var poster = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster>img');
   4564 			if (poster) {
   4565 				poster.style.display = '';
   4566 			}
   4567 
   4568 			var targetElement = t.getElement(t.container).querySelectorAll('object, embed, iframe, video'),
   4569 			    initHeight = t.height,
   4570 			    initWidth = t.width,
   4571 			    scaleX1 = parentWidth,
   4572 			    scaleY1 = initHeight * parentWidth / initWidth,
   4573 			    scaleX2 = initWidth * parentHeight / initHeight,
   4574 			    scaleY2 = parentHeight,
   4575 			    bScaleOnWidth = scaleX2 > parentWidth === false,
   4576 			    finalWidth = bScaleOnWidth ? Math.floor(scaleX1) : Math.floor(scaleX2),
   4577 			    finalHeight = bScaleOnWidth ? Math.floor(scaleY1) : Math.floor(scaleY2),
   4578 			    width = bScaleOnWidth ? parentWidth + 'px' : finalWidth + 'px',
   4579 			    height = bScaleOnWidth ? finalHeight + 'px' : parentHeight + 'px';
   4580 
   4581 			for (var i = 0, total = targetElement.length; i < total; i++) {
   4582 				targetElement[i].style.height = height;
   4583 				targetElement[i].style.width = width;
   4584 				if (t.media.setSize) {
   4585 					t.media.setSize(width, height);
   4586 				}
   4587 
   4588 				targetElement[i].style.marginLeft = Math.floor((parentWidth - finalWidth) / 2) + 'px';
   4589 				targetElement[i].style.marginTop = 0;
   4590 			}
   4591 		}
   4592 	}, {
   4593 		key: 'setDimensions',
   4594 		value: function setDimensions(width, height) {
   4595 			var t = this;
   4596 
   4597 			width = (0, _general.isString)(width) && width.indexOf('%') > -1 ? width : parseFloat(width) + 'px';
   4598 			height = (0, _general.isString)(height) && height.indexOf('%') > -1 ? height : parseFloat(height) + 'px';
   4599 
   4600 			t.getElement(t.container).style.width = width;
   4601 			t.getElement(t.container).style.height = height;
   4602 
   4603 			var layers = t.getElement(t.layers).children;
   4604 			for (var i = 0, total = layers.length; i < total; i++) {
   4605 				layers[i].style.width = width;
   4606 				layers[i].style.height = height;
   4607 			}
   4608 		}
   4609 	}, {
   4610 		key: 'setControlsSize',
   4611 		value: function setControlsSize() {
   4612 			var t = this;
   4613 
   4614 			if (!dom.visible(t.getElement(t.container))) {
   4615 				return;
   4616 			}
   4617 
   4618 			if (t.rail && dom.visible(t.rail)) {
   4619 				var totalStyles = t.total ? getComputedStyle(t.total, null) : null,
   4620 				    totalMargin = totalStyles ? parseFloat(totalStyles.marginLeft) + parseFloat(totalStyles.marginRight) : 0,
   4621 				    railStyles = getComputedStyle(t.rail),
   4622 				    railMargin = parseFloat(railStyles.marginLeft) + parseFloat(railStyles.marginRight);
   4623 
   4624 				var siblingsWidth = 0;
   4625 
   4626 				var siblings = dom.siblings(t.rail, function (el) {
   4627 					return el !== t.rail;
   4628 				}),
   4629 				    total = siblings.length;
   4630 				for (var i = 0; i < total; i++) {
   4631 					siblingsWidth += siblings[i].offsetWidth;
   4632 				}
   4633 
   4634 				siblingsWidth += totalMargin + (totalMargin === 0 ? railMargin * 2 : railMargin) + 1;
   4635 
   4636 				t.getElement(t.container).style.minWidth = siblingsWidth + 'px';
   4637 
   4638 				var event = (0, _general.createEvent)('controlsresize', t.getElement(t.container));
   4639 				t.getElement(t.container).dispatchEvent(event);
   4640 			} else {
   4641 				var children = t.getElement(t.controls).children;
   4642 				var minWidth = 0;
   4643 
   4644 				for (var _i = 0, _total = children.length; _i < _total; _i++) {
   4645 					minWidth += children[_i].offsetWidth;
   4646 				}
   4647 
   4648 				t.getElement(t.container).style.minWidth = minWidth + 'px';
   4649 			}
   4650 		}
   4651 	}, {
   4652 		key: 'addControlElement',
   4653 		value: function addControlElement(element, key) {
   4654 
   4655 			var t = this;
   4656 
   4657 			if (t.featurePosition[key] !== undefined) {
   4658 				var child = t.getElement(t.controls).children[t.featurePosition[key] - 1];
   4659 				child.parentNode.insertBefore(element, child.nextSibling);
   4660 			} else {
   4661 				t.getElement(t.controls).appendChild(element);
   4662 				var children = t.getElement(t.controls).children;
   4663 				for (var i = 0, total = children.length; i < total; i++) {
   4664 					if (element === children[i]) {
   4665 						t.featurePosition[key] = i;
   4666 						break;
   4667 					}
   4668 				}
   4669 			}
   4670 		}
   4671 	}, {
   4672 		key: 'createIframeLayer',
   4673 		value: function createIframeLayer() {
   4674 			var t = this;
   4675 
   4676 			if (t.isVideo && t.media.rendererName !== null && t.media.rendererName.indexOf('iframe') > -1 && !_document2.default.getElementById(t.media.id + '-iframe-overlay')) {
   4677 
   4678 				var layer = _document2.default.createElement('div'),
   4679 				    target = _document2.default.getElementById(t.media.id + '_' + t.media.rendererName);
   4680 
   4681 				layer.id = t.media.id + '-iframe-overlay';
   4682 				layer.className = t.options.classPrefix + 'iframe-overlay';
   4683 				layer.addEventListener('click', function (e) {
   4684 					if (t.options.clickToPlayPause) {
   4685 						if (t.paused) {
   4686 							t.play();
   4687 						} else {
   4688 							t.pause();
   4689 						}
   4690 
   4691 						e.preventDefault();
   4692 						e.stopPropagation();
   4693 					}
   4694 				});
   4695 
   4696 				target.parentNode.insertBefore(layer, target);
   4697 			}
   4698 		}
   4699 	}, {
   4700 		key: 'resetSize',
   4701 		value: function resetSize() {
   4702 			var t = this;
   4703 
   4704 			setTimeout(function () {
   4705 				t.setPlayerSize(t.width, t.height);
   4706 				t.setControlsSize();
   4707 			}, 50);
   4708 		}
   4709 	}, {
   4710 		key: 'setPoster',
   4711 		value: function setPoster(url) {
   4712 			var t = this;
   4713 
   4714 			if (t.getElement(t.container)) {
   4715 				var posterDiv = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster');
   4716 
   4717 				if (!posterDiv) {
   4718 					posterDiv = _document2.default.createElement('div');
   4719 					posterDiv.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';
   4720 					t.getElement(t.layers).appendChild(posterDiv);
   4721 				}
   4722 
   4723 				var posterImg = posterDiv.querySelector('img');
   4724 
   4725 				if (!posterImg && url) {
   4726 					posterImg = _document2.default.createElement('img');
   4727 					posterImg.className = t.options.classPrefix + 'poster-img';
   4728 					posterImg.width = '100%';
   4729 					posterImg.height = '100%';
   4730 					posterDiv.style.display = '';
   4731 					posterDiv.appendChild(posterImg);
   4732 				}
   4733 
   4734 				if (url) {
   4735 					posterImg.setAttribute('src', url);
   4736 					posterDiv.style.backgroundImage = 'url("' + url + '")';
   4737 					posterDiv.style.display = '';
   4738 				} else if (posterImg) {
   4739 					posterDiv.style.backgroundImage = 'none';
   4740 					posterDiv.style.display = 'none';
   4741 					posterImg.remove();
   4742 				} else {
   4743 					posterDiv.style.display = 'none';
   4744 				}
   4745 			} else if (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls || _constants.IS_ANDROID && t.options.AndroidUseNativeControls) {
   4746 				t.media.originalNode.poster = url;
   4747 			}
   4748 		}
   4749 	}, {
   4750 		key: 'changeSkin',
   4751 		value: function changeSkin(className) {
   4752 			var t = this;
   4753 
   4754 			t.getElement(t.container).className = t.options.classPrefix + 'container ' + className;
   4755 			t.setPlayerSize(t.width, t.height);
   4756 			t.setControlsSize();
   4757 		}
   4758 	}, {
   4759 		key: 'globalBind',
   4760 		value: function globalBind(events, callback) {
   4761 			var t = this,
   4762 			    doc = t.node ? t.node.ownerDocument : _document2.default;
   4763 
   4764 			events = (0, _general.splitEvents)(events, t.id);
   4765 			if (events.d) {
   4766 				var eventList = events.d.split(' ');
   4767 				for (var i = 0, total = eventList.length; i < total; i++) {
   4768 					eventList[i].split('.').reduce(function (part, e) {
   4769 						doc.addEventListener(e, callback, false);
   4770 						return e;
   4771 					}, '');
   4772 				}
   4773 			}
   4774 			if (events.w) {
   4775 				var _eventList = events.w.split(' ');
   4776 				for (var _i2 = 0, _total2 = _eventList.length; _i2 < _total2; _i2++) {
   4777 					_eventList[_i2].split('.').reduce(function (part, e) {
   4778 						_window2.default.addEventListener(e, callback, false);
   4779 						return e;
   4780 					}, '');
   4781 				}
   4782 			}
   4783 		}
   4784 	}, {
   4785 		key: 'globalUnbind',
   4786 		value: function globalUnbind(events, callback) {
   4787 			var t = this,
   4788 			    doc = t.node ? t.node.ownerDocument : _document2.default;
   4789 
   4790 			events = (0, _general.splitEvents)(events, t.id);
   4791 			if (events.d) {
   4792 				var eventList = events.d.split(' ');
   4793 				for (var i = 0, total = eventList.length; i < total; i++) {
   4794 					eventList[i].split('.').reduce(function (part, e) {
   4795 						doc.removeEventListener(e, callback, false);
   4796 						return e;
   4797 					}, '');
   4798 				}
   4799 			}
   4800 			if (events.w) {
   4801 				var _eventList2 = events.w.split(' ');
   4802 				for (var _i3 = 0, _total3 = _eventList2.length; _i3 < _total3; _i3++) {
   4803 					_eventList2[_i3].split('.').reduce(function (part, e) {
   4804 						_window2.default.removeEventListener(e, callback, false);
   4805 						return e;
   4806 					}, '');
   4807 				}
   4808 			}
   4809 		}
   4810 	}, {
   4811 		key: 'buildfeatures',
   4812 		value: function buildfeatures(player, controls, layers, media) {
   4813 			var t = this;
   4814 
   4815 			for (var i = 0, total = t.options.features.length; i < total; i++) {
   4816 				var feature = t.options.features[i];
   4817 				if (t['build' + feature]) {
   4818 					try {
   4819 						t['build' + feature](player, controls, layers, media);
   4820 					} catch (e) {
   4821 						console.error('error building ' + feature, e);
   4822 					}
   4823 				}
   4824 			}
   4825 		}
   4826 	}, {
   4827 		key: 'buildposter',
   4828 		value: function buildposter(player, controls, layers, media) {
   4829 			var t = this,
   4830 			    poster = _document2.default.createElement('div');
   4831 
   4832 			poster.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer';
   4833 			layers.appendChild(poster);
   4834 
   4835 			var posterUrl = media.originalNode.getAttribute('poster');
   4836 
   4837 			if (player.options.poster !== '') {
   4838 				if (posterUrl && _constants.IS_IOS) {
   4839 					media.originalNode.removeAttribute('poster');
   4840 				}
   4841 				posterUrl = player.options.poster;
   4842 			}
   4843 
   4844 			if (posterUrl) {
   4845 				t.setPoster(posterUrl);
   4846 			} else if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') {
   4847 				t.setPoster(t.media.renderer.getPosterUrl());
   4848 			} else {
   4849 				poster.style.display = 'none';
   4850 			}
   4851 
   4852 			media.addEventListener('play', function () {
   4853 				poster.style.display = 'none';
   4854 			});
   4855 
   4856 			media.addEventListener('playing', function () {
   4857 				poster.style.display = 'none';
   4858 			});
   4859 
   4860 			if (player.options.showPosterWhenEnded && player.options.autoRewind) {
   4861 				media.addEventListener('ended', function () {
   4862 					poster.style.display = '';
   4863 				});
   4864 			}
   4865 
   4866 			media.addEventListener('error', function () {
   4867 				poster.style.display = 'none';
   4868 			});
   4869 
   4870 			if (player.options.showPosterWhenPaused) {
   4871 				media.addEventListener('pause', function () {
   4872 					if (!player.ended) {
   4873 						poster.style.display = '';
   4874 					}
   4875 				});
   4876 			}
   4877 		}
   4878 	}, {
   4879 		key: 'buildoverlays',
   4880 		value: function buildoverlays(player, controls, layers, media) {
   4881 
   4882 			if (!player.isVideo) {
   4883 				return;
   4884 			}
   4885 
   4886 			var t = this,
   4887 			    loading = _document2.default.createElement('div'),
   4888 			    error = _document2.default.createElement('div'),
   4889 			    bigPlay = _document2.default.createElement('div');
   4890 
   4891 			loading.style.display = 'none';
   4892 			loading.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer';
   4893 			loading.innerHTML = '<div class="' + t.options.classPrefix + 'overlay-loading">' + ('<span class="' + t.options.classPrefix + 'overlay-loading-bg-img"></span>') + '</div>';
   4894 			layers.appendChild(loading);
   4895 
   4896 			error.style.display = 'none';
   4897 			error.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer';
   4898 			error.innerHTML = '<div class="' + t.options.classPrefix + 'overlay-error"></div>';
   4899 			layers.appendChild(error);
   4900 
   4901 			bigPlay.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer ' + t.options.classPrefix + 'overlay-play';
   4902 			bigPlay.innerHTML = '<div class="' + t.options.classPrefix + 'overlay-button" role="button" tabindex="0" ' + ('aria-label="' + _i18n2.default.t('mejs.play') + '" aria-pressed="false"></div>');
   4903 			bigPlay.addEventListener('click', function () {
   4904 				if (t.options.clickToPlayPause) {
   4905 
   4906 					var button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'),
   4907 					    pressed = button.getAttribute('aria-pressed');
   4908 
   4909 					if (t.paused) {
   4910 						t.play();
   4911 					} else {
   4912 						t.pause();
   4913 					}
   4914 
   4915 					button.setAttribute('aria-pressed', !!pressed);
   4916 					t.getElement(t.container).focus();
   4917 				}
   4918 			});
   4919 
   4920 			bigPlay.addEventListener('keydown', function (e) {
   4921 				var keyPressed = e.keyCode || e.which || 0;
   4922 
   4923 				if (keyPressed === 13 || _constants.IS_FIREFOX && keyPressed === 32) {
   4924 					var event = (0, _general.createEvent)('click', bigPlay);
   4925 					bigPlay.dispatchEvent(event);
   4926 					return false;
   4927 				}
   4928 			});
   4929 
   4930 			layers.appendChild(bigPlay);
   4931 
   4932 			if (t.media.rendererName !== null && (/(youtube|facebook)/i.test(t.media.rendererName) && !(t.media.originalNode.getAttribute('poster') || player.options.poster || typeof t.media.renderer.getPosterUrl === 'function' && t.media.renderer.getPosterUrl()) || _constants.IS_STOCK_ANDROID || t.media.originalNode.getAttribute('autoplay'))) {
   4933 				bigPlay.style.display = 'none';
   4934 			}
   4935 
   4936 			var hasError = false;
   4937 
   4938 			media.addEventListener('play', function () {
   4939 				bigPlay.style.display = 'none';
   4940 				loading.style.display = 'none';
   4941 				error.style.display = 'none';
   4942 				hasError = false;
   4943 			});
   4944 			media.addEventListener('playing', function () {
   4945 				bigPlay.style.display = 'none';
   4946 				loading.style.display = 'none';
   4947 				error.style.display = 'none';
   4948 				hasError = false;
   4949 			});
   4950 			media.addEventListener('seeking', function () {
   4951 				bigPlay.style.display = 'none';
   4952 				loading.style.display = '';
   4953 				hasError = false;
   4954 			});
   4955 			media.addEventListener('seeked', function () {
   4956 				bigPlay.style.display = t.paused && !_constants.IS_STOCK_ANDROID ? '' : 'none';
   4957 				loading.style.display = 'none';
   4958 				hasError = false;
   4959 			});
   4960 			media.addEventListener('pause', function () {
   4961 				loading.style.display = 'none';
   4962 				if (!_constants.IS_STOCK_ANDROID && !hasError) {
   4963 					bigPlay.style.display = '';
   4964 				}
   4965 				hasError = false;
   4966 			});
   4967 			media.addEventListener('waiting', function () {
   4968 				loading.style.display = '';
   4969 				hasError = false;
   4970 			});
   4971 
   4972 			media.addEventListener('loadeddata', function () {
   4973 				loading.style.display = '';
   4974 
   4975 				if (_constants.IS_ANDROID) {
   4976 					media.canplayTimeout = setTimeout(function () {
   4977 						if (_document2.default.createEvent) {
   4978 							var evt = _document2.default.createEvent('HTMLEvents');
   4979 							evt.initEvent('canplay', true, true);
   4980 							return media.dispatchEvent(evt);
   4981 						}
   4982 					}, 300);
   4983 				}
   4984 				hasError = false;
   4985 			});
   4986 			media.addEventListener('canplay', function () {
   4987 				loading.style.display = 'none';
   4988 
   4989 				clearTimeout(media.canplayTimeout);
   4990 				hasError = false;
   4991 			});
   4992 
   4993 			media.addEventListener('error', function (e) {
   4994 				t._handleError(e, t.media, t.node);
   4995 				loading.style.display = 'none';
   4996 				bigPlay.style.display = 'none';
   4997 				hasError = true;
   4998 			});
   4999 
   5000 			media.addEventListener('loadedmetadata', function () {
   5001 				if (!t.controlsEnabled) {
   5002 					t.enableControls();
   5003 				}
   5004 			});
   5005 
   5006 			media.addEventListener('keydown', function (e) {
   5007 				t.onkeydown(player, media, e);
   5008 				hasError = false;
   5009 			});
   5010 		}
   5011 	}, {
   5012 		key: 'buildkeyboard',
   5013 		value: function buildkeyboard(player, controls, layers, media) {
   5014 
   5015 			var t = this;
   5016 
   5017 			t.getElement(t.container).addEventListener('keydown', function () {
   5018 				t.keyboardAction = true;
   5019 			});
   5020 
   5021 			t.globalKeydownCallback = function (event) {
   5022 				var container = _document2.default.activeElement.closest('.' + t.options.classPrefix + 'container'),
   5023 				    target = t.media.closest('.' + t.options.classPrefix + 'container');
   5024 				t.hasFocus = !!(container && target && container.id === target.id);
   5025 				return t.onkeydown(player, media, event);
   5026 			};
   5027 
   5028 			t.globalClickCallback = function (event) {
   5029 				t.hasFocus = !!event.target.closest('.' + t.options.classPrefix + 'container');
   5030 			};
   5031 
   5032 			t.globalBind('keydown', t.globalKeydownCallback);
   5033 
   5034 			t.globalBind('click', t.globalClickCallback);
   5035 		}
   5036 	}, {
   5037 		key: 'onkeydown',
   5038 		value: function onkeydown(player, media, e) {
   5039 
   5040 			if (player.hasFocus && player.options.enableKeyboard) {
   5041 				for (var i = 0, total = player.options.keyActions.length; i < total; i++) {
   5042 					var keyAction = player.options.keyActions[i];
   5043 
   5044 					for (var j = 0, jl = keyAction.keys.length; j < jl; j++) {
   5045 						if (e.keyCode === keyAction.keys[j]) {
   5046 							keyAction.action(player, media, e.keyCode, e);
   5047 							e.preventDefault();
   5048 							e.stopPropagation();
   5049 							return;
   5050 						}
   5051 					}
   5052 				}
   5053 			}
   5054 
   5055 			return true;
   5056 		}
   5057 	}, {
   5058 		key: 'play',
   5059 		value: function play() {
   5060 			this.proxy.play();
   5061 		}
   5062 	}, {
   5063 		key: 'pause',
   5064 		value: function pause() {
   5065 			this.proxy.pause();
   5066 		}
   5067 	}, {
   5068 		key: 'load',
   5069 		value: function load() {
   5070 			this.proxy.load();
   5071 		}
   5072 	}, {
   5073 		key: 'setCurrentTime',
   5074 		value: function setCurrentTime(time) {
   5075 			this.proxy.setCurrentTime(time);
   5076 		}
   5077 	}, {
   5078 		key: 'getCurrentTime',
   5079 		value: function getCurrentTime() {
   5080 			return this.proxy.currentTime;
   5081 		}
   5082 	}, {
   5083 		key: 'getDuration',
   5084 		value: function getDuration() {
   5085 			return this.proxy.duration;
   5086 		}
   5087 	}, {
   5088 		key: 'setVolume',
   5089 		value: function setVolume(volume) {
   5090 			this.proxy.volume = volume;
   5091 		}
   5092 	}, {
   5093 		key: 'getVolume',
   5094 		value: function getVolume() {
   5095 			return this.proxy.getVolume();
   5096 		}
   5097 	}, {
   5098 		key: 'setMuted',
   5099 		value: function setMuted(value) {
   5100 			this.proxy.setMuted(value);
   5101 		}
   5102 	}, {
   5103 		key: 'setSrc',
   5104 		value: function setSrc(src) {
   5105 			if (!this.controlsEnabled) {
   5106 				this.enableControls();
   5107 			}
   5108 			this.proxy.setSrc(src);
   5109 		}
   5110 	}, {
   5111 		key: 'getSrc',
   5112 		value: function getSrc() {
   5113 			return this.proxy.getSrc();
   5114 		}
   5115 	}, {
   5116 		key: 'canPlayType',
   5117 		value: function canPlayType(type) {
   5118 			return this.proxy.canPlayType(type);
   5119 		}
   5120 	}, {
   5121 		key: 'remove',
   5122 		value: function remove() {
   5123 			var t = this,
   5124 			    rendererName = t.media.rendererName,
   5125 			    src = t.media.originalNode.src;
   5126 
   5127 			for (var featureIndex in t.options.features) {
   5128 				var feature = t.options.features[featureIndex];
   5129 				if (t['clean' + feature]) {
   5130 					try {
   5131 						t['clean' + feature](t, t.getElement(t.layers), t.getElement(t.controls), t.media);
   5132 					} catch (e) {
   5133 						console.error('error cleaning ' + feature, e);
   5134 					}
   5135 				}
   5136 			}
   5137 
   5138 			var nativeWidth = t.node.getAttribute('width'),
   5139 			    nativeHeight = t.node.getAttribute('height');
   5140 
   5141 			if (nativeWidth) {
   5142 				if (nativeWidth.indexOf('%') === -1) {
   5143 					nativeWidth = nativeWidth + 'px';
   5144 				}
   5145 			} else {
   5146 				nativeWidth = 'auto';
   5147 			}
   5148 
   5149 			if (nativeHeight) {
   5150 				if (nativeHeight.indexOf('%') === -1) {
   5151 					nativeHeight = nativeHeight + 'px';
   5152 				}
   5153 			} else {
   5154 				nativeHeight = 'auto';
   5155 			}
   5156 
   5157 			t.node.style.width = nativeWidth;
   5158 			t.node.style.height = nativeHeight;
   5159 
   5160 			t.setPlayerSize(0, 0);
   5161 
   5162 			if (!t.isDynamic) {
   5163 				(function () {
   5164 					t.node.setAttribute('controls', true);
   5165 					t.node.setAttribute('id', t.node.getAttribute('id').replace('_' + rendererName, '').replace('_from_mejs', ''));
   5166 					var poster = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster>img');
   5167 					if (poster) {
   5168 						t.node.setAttribute('poster', poster.src);
   5169 					}
   5170 
   5171 					delete t.node.autoplay;
   5172 
   5173 					t.node.setAttribute('src', '');
   5174 					if (t.media.canPlayType((0, _media.getTypeFromFile)(src)) !== '') {
   5175 						t.node.setAttribute('src', src);
   5176 					}
   5177 
   5178 					if (rendererName && rendererName.indexOf('iframe') > -1) {
   5179 						var layer = _document2.default.getElementById(t.media.id + '-iframe-overlay');
   5180 						layer.remove();
   5181 					}
   5182 
   5183 					var node = t.node.cloneNode();
   5184 					node.style.display = '';
   5185 					t.getElement(t.container).parentNode.insertBefore(node, t.getElement(t.container));
   5186 					t.node.remove();
   5187 
   5188 					if (t.mediaFiles) {
   5189 						for (var i = 0, total = t.mediaFiles.length; i < total; i++) {
   5190 							var source = _document2.default.createElement('source');
   5191 							source.setAttribute('src', t.mediaFiles[i].src);
   5192 							source.setAttribute('type', t.mediaFiles[i].type);
   5193 							node.appendChild(source);
   5194 						}
   5195 					}
   5196 					if (t.trackFiles) {
   5197 						var _loop3 = function _loop3(_i4, _total4) {
   5198 							var track = t.trackFiles[_i4];
   5199 							var newTrack = _document2.default.createElement('track');
   5200 							newTrack.kind = track.kind;
   5201 							newTrack.label = track.label;
   5202 							newTrack.srclang = track.srclang;
   5203 							newTrack.src = track.src;
   5204 
   5205 							node.appendChild(newTrack);
   5206 							newTrack.addEventListener('load', function () {
   5207 								this.mode = 'showing';
   5208 								node.textTracks[_i4].mode = 'showing';
   5209 							});
   5210 						};
   5211 
   5212 						for (var _i4 = 0, _total4 = t.trackFiles.length; _i4 < _total4; _i4++) {
   5213 							_loop3(_i4, _total4);
   5214 						}
   5215 					}
   5216 
   5217 					delete t.node;
   5218 					delete t.mediaFiles;
   5219 					delete t.trackFiles;
   5220 				})();
   5221 			} else {
   5222 				t.getElement(t.container).parentNode.insertBefore(t.node, t.getElement(t.container));
   5223 			}
   5224 
   5225 			if (t.media.renderer && typeof t.media.renderer.destroy === 'function') {
   5226 				t.media.renderer.destroy();
   5227 			}
   5228 
   5229 			delete _mejs2.default.players[t.id];
   5230 
   5231 			if (_typeof(t.getElement(t.container)) === 'object') {
   5232 				var offscreen = t.getElement(t.container).parentNode.querySelector('.' + t.options.classPrefix + 'offscreen');
   5233 				offscreen.remove();
   5234 				t.getElement(t.container).remove();
   5235 			}
   5236 			t.globalUnbind('resize', t.globalResizeCallback);
   5237 			t.globalUnbind('keydown', t.globalKeydownCallback);
   5238 			t.globalUnbind('click', t.globalClickCallback);
   5239 
   5240 			delete t.media.player;
   5241 		}
   5242 	}, {
   5243 		key: 'paused',
   5244 		get: function get() {
   5245 			return this.proxy.paused;
   5246 		}
   5247 	}, {
   5248 		key: 'muted',
   5249 		get: function get() {
   5250 			return this.proxy.muted;
   5251 		},
   5252 		set: function set(muted) {
   5253 			this.setMuted(muted);
   5254 		}
   5255 	}, {
   5256 		key: 'ended',
   5257 		get: function get() {
   5258 			return this.proxy.ended;
   5259 		}
   5260 	}, {
   5261 		key: 'readyState',
   5262 		get: function get() {
   5263 			return this.proxy.readyState;
   5264 		}
   5265 	}, {
   5266 		key: 'currentTime',
   5267 		set: function set(time) {
   5268 			this.setCurrentTime(time);
   5269 		},
   5270 		get: function get() {
   5271 			return this.getCurrentTime();
   5272 		}
   5273 	}, {
   5274 		key: 'duration',
   5275 		get: function get() {
   5276 			return this.getDuration();
   5277 		}
   5278 	}, {
   5279 		key: 'volume',
   5280 		set: function set(volume) {
   5281 			this.setVolume(volume);
   5282 		},
   5283 		get: function get() {
   5284 			return this.getVolume();
   5285 		}
   5286 	}, {
   5287 		key: 'src',
   5288 		set: function set(src) {
   5289 			this.setSrc(src);
   5290 		},
   5291 		get: function get() {
   5292 			return this.getSrc();
   5293 		}
   5294 	}]);
   5295 
   5296 	return MediaElementPlayer;
   5297 }();
   5298 
   5299 _window2.default.MediaElementPlayer = MediaElementPlayer;
   5300 _mejs2.default.MediaElementPlayer = MediaElementPlayer;
   5301 
   5302 exports.default = MediaElementPlayer;
   5303 
   5304 },{"17":17,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"30":30,"5":5,"6":6,"7":7}],17:[function(_dereq_,module,exports){
   5305 'use strict';
   5306 
   5307 Object.defineProperty(exports, "__esModule", {
   5308 	value: true
   5309 });
   5310 
   5311 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
   5312 
   5313 var _window = _dereq_(3);
   5314 
   5315 var _window2 = _interopRequireDefault(_window);
   5316 
   5317 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   5318 
   5319 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
   5320 
   5321 var DefaultPlayer = function () {
   5322 	function DefaultPlayer(player) {
   5323 		_classCallCheck(this, DefaultPlayer);
   5324 
   5325 		this.media = player.media;
   5326 		this.isVideo = player.isVideo;
   5327 		this.classPrefix = player.options.classPrefix;
   5328 		this.createIframeLayer = function () {
   5329 			return player.createIframeLayer();
   5330 		};
   5331 		this.setPoster = function (url) {
   5332 			return player.setPoster(url);
   5333 		};
   5334 		return this;
   5335 	}
   5336 
   5337 	_createClass(DefaultPlayer, [{
   5338 		key: 'play',
   5339 		value: function play() {
   5340 			this.media.play();
   5341 		}
   5342 	}, {
   5343 		key: 'pause',
   5344 		value: function pause() {
   5345 			this.media.pause();
   5346 		}
   5347 	}, {
   5348 		key: 'load',
   5349 		value: function load() {
   5350 			var t = this;
   5351 
   5352 			if (!t.isLoaded) {
   5353 				t.media.load();
   5354 			}
   5355 
   5356 			t.isLoaded = true;
   5357 		}
   5358 	}, {
   5359 		key: 'setCurrentTime',
   5360 		value: function setCurrentTime(time) {
   5361 			this.media.setCurrentTime(time);
   5362 		}
   5363 	}, {
   5364 		key: 'getCurrentTime',
   5365 		value: function getCurrentTime() {
   5366 			return this.media.currentTime;
   5367 		}
   5368 	}, {
   5369 		key: 'getDuration',
   5370 		value: function getDuration() {
   5371 			var duration = this.media.getDuration();
   5372 			if (duration === Infinity && this.media.seekable && this.media.seekable.length) {
   5373 				duration = this.media.seekable.end(0);
   5374 			}
   5375 			return duration;
   5376 		}
   5377 	}, {
   5378 		key: 'setVolume',
   5379 		value: function setVolume(volume) {
   5380 			this.media.setVolume(volume);
   5381 		}
   5382 	}, {
   5383 		key: 'getVolume',
   5384 		value: function getVolume() {
   5385 			return this.media.getVolume();
   5386 		}
   5387 	}, {
   5388 		key: 'setMuted',
   5389 		value: function setMuted(value) {
   5390 			this.media.setMuted(value);
   5391 		}
   5392 	}, {
   5393 		key: 'setSrc',
   5394 		value: function setSrc(src) {
   5395 			var t = this,
   5396 			    layer = document.getElementById(t.media.id + '-iframe-overlay');
   5397 
   5398 			if (layer) {
   5399 				layer.remove();
   5400 			}
   5401 
   5402 			t.media.setSrc(src);
   5403 			t.createIframeLayer();
   5404 			if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') {
   5405 				t.setPoster(t.media.renderer.getPosterUrl());
   5406 			}
   5407 		}
   5408 	}, {
   5409 		key: 'getSrc',
   5410 		value: function getSrc() {
   5411 			return this.media.getSrc();
   5412 		}
   5413 	}, {
   5414 		key: 'canPlayType',
   5415 		value: function canPlayType(type) {
   5416 			return this.media.canPlayType(type);
   5417 		}
   5418 	}, {
   5419 		key: 'paused',
   5420 		get: function get() {
   5421 			return this.media.paused;
   5422 		}
   5423 	}, {
   5424 		key: 'muted',
   5425 		set: function set(muted) {
   5426 			this.setMuted(muted);
   5427 		},
   5428 		get: function get() {
   5429 			return this.media.muted;
   5430 		}
   5431 	}, {
   5432 		key: 'ended',
   5433 		get: function get() {
   5434 			return this.media.ended;
   5435 		}
   5436 	}, {
   5437 		key: 'readyState',
   5438 		get: function get() {
   5439 			return this.media.readyState;
   5440 		}
   5441 	}, {
   5442 		key: 'currentTime',
   5443 		set: function set(time) {
   5444 			this.setCurrentTime(time);
   5445 		},
   5446 		get: function get() {
   5447 			return this.getCurrentTime();
   5448 		}
   5449 	}, {
   5450 		key: 'duration',
   5451 		get: function get() {
   5452 			return this.getDuration();
   5453 		}
   5454 	}, {
   5455 		key: 'remainingTime',
   5456 		get: function get() {
   5457 			return this.getDuration() - this.currentTime();
   5458 		}
   5459 	}, {
   5460 		key: 'volume',
   5461 		set: function set(volume) {
   5462 			this.setVolume(volume);
   5463 		},
   5464 		get: function get() {
   5465 			return this.getVolume();
   5466 		}
   5467 	}, {
   5468 		key: 'src',
   5469 		set: function set(src) {
   5470 			this.setSrc(src);
   5471 		},
   5472 		get: function get() {
   5473 			return this.getSrc();
   5474 		}
   5475 	}]);
   5476 
   5477 	return DefaultPlayer;
   5478 }();
   5479 
   5480 exports.default = DefaultPlayer;
   5481 
   5482 
   5483 _window2.default.DefaultPlayer = DefaultPlayer;
   5484 
   5485 },{"3":3}],18:[function(_dereq_,module,exports){
   5486 'use strict';
   5487 
   5488 var _window = _dereq_(3);
   5489 
   5490 var _window2 = _interopRequireDefault(_window);
   5491 
   5492 var _mejs = _dereq_(7);
   5493 
   5494 var _mejs2 = _interopRequireDefault(_mejs);
   5495 
   5496 var _player = _dereq_(16);
   5497 
   5498 var _player2 = _interopRequireDefault(_player);
   5499 
   5500 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   5501 
   5502 if (typeof jQuery !== 'undefined') {
   5503 	_mejs2.default.$ = jQuery;
   5504 } else if (typeof Zepto !== 'undefined') {
   5505 	_mejs2.default.$ = Zepto;
   5506 } else if (typeof ender !== 'undefined') {
   5507 	_mejs2.default.$ = ender;
   5508 }
   5509 
   5510 (function ($) {
   5511 	if (typeof $ !== 'undefined') {
   5512 		$.fn.mediaelementplayer = function (options) {
   5513 			if (options === false) {
   5514 				this.each(function () {
   5515 					var player = $(this).data('mediaelementplayer');
   5516 					if (player) {
   5517 						player.remove();
   5518 					}
   5519 					$(this).removeData('mediaelementplayer');
   5520 				});
   5521 			} else {
   5522 				this.each(function () {
   5523 					$(this).data('mediaelementplayer', new _player2.default(this, options));
   5524 				});
   5525 			}
   5526 			return this;
   5527 		};
   5528 
   5529 		$(document).ready(function () {
   5530 			$('.' + _mejs2.default.MepDefaults.classPrefix + 'player').mediaelementplayer();
   5531 		});
   5532 	}
   5533 })(_mejs2.default.$);
   5534 
   5535 },{"16":16,"3":3,"7":7}],19:[function(_dereq_,module,exports){
   5536 'use strict';
   5537 
   5538 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
   5539 
   5540 var _window = _dereq_(3);
   5541 
   5542 var _window2 = _interopRequireDefault(_window);
   5543 
   5544 var _mejs = _dereq_(7);
   5545 
   5546 var _mejs2 = _interopRequireDefault(_mejs);
   5547 
   5548 var _renderer = _dereq_(8);
   5549 
   5550 var _general = _dereq_(27);
   5551 
   5552 var _media = _dereq_(28);
   5553 
   5554 var _constants = _dereq_(25);
   5555 
   5556 var _dom = _dereq_(26);
   5557 
   5558 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   5559 
   5560 var NativeDash = {
   5561 
   5562 	promise: null,
   5563 
   5564 	load: function load(settings) {
   5565 		if (typeof dashjs !== 'undefined') {
   5566 			NativeDash.promise = new Promise(function (resolve) {
   5567 				resolve();
   5568 			}).then(function () {
   5569 				NativeDash._createPlayer(settings);
   5570 			});
   5571 		} else {
   5572 			settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.dashjs.org/latest/dash.all.min.js';
   5573 
   5574 			NativeDash.promise = NativeDash.promise || (0, _dom.loadScript)(settings.options.path);
   5575 			NativeDash.promise.then(function () {
   5576 				NativeDash._createPlayer(settings);
   5577 			});
   5578 		}
   5579 
   5580 		return NativeDash.promise;
   5581 	},
   5582 
   5583 	_createPlayer: function _createPlayer(settings) {
   5584 		var player = dashjs.MediaPlayer().create();
   5585 		_window2.default['__ready__' + settings.id](player);
   5586 		return player;
   5587 	}
   5588 };
   5589 
   5590 var DashNativeRenderer = {
   5591 	name: 'native_dash',
   5592 	options: {
   5593 		prefix: 'native_dash',
   5594 		dash: {
   5595 			path: 'https://cdn.dashjs.org/latest/dash.all.min.js',
   5596 			debug: false,
   5597 			drm: {},
   5598 
   5599 			robustnessLevel: ''
   5600 		}
   5601 	},
   5602 
   5603 	canPlayType: function canPlayType(type) {
   5604 		return _constants.HAS_MSE && ['application/dash+xml'].indexOf(type.toLowerCase()) > -1;
   5605 	},
   5606 
   5607 	create: function create(mediaElement, options, mediaFiles) {
   5608 
   5609 		var originalNode = mediaElement.originalNode,
   5610 		    id = mediaElement.id + '_' + options.prefix,
   5611 		    autoplay = originalNode.autoplay,
   5612 		    children = originalNode.children;
   5613 
   5614 		var node = null,
   5615 		    dashPlayer = null;
   5616 
   5617 		originalNode.removeAttribute('type');
   5618 		for (var i = 0, total = children.length; i < total; i++) {
   5619 			children[i].removeAttribute('type');
   5620 		}
   5621 
   5622 		node = originalNode.cloneNode(true);
   5623 		options = Object.assign(options, mediaElement.options);
   5624 
   5625 		var props = _mejs2.default.html5media.properties,
   5626 		    events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
   5627 			return e !== 'error';
   5628 		}),
   5629 		    attachNativeEvents = function attachNativeEvents(e) {
   5630 			var event = (0, _general.createEvent)(e.type, mediaElement);
   5631 			mediaElement.dispatchEvent(event);
   5632 		},
   5633 		    assignGettersSetters = function assignGettersSetters(propName) {
   5634 			var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   5635 
   5636 			node['get' + capName] = function () {
   5637 				return dashPlayer !== null ? node[propName] : null;
   5638 			};
   5639 
   5640 			node['set' + capName] = function (value) {
   5641 				if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
   5642 					if (propName === 'src') {
   5643 						var source = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;
   5644 						node[propName] = source;
   5645 						if (dashPlayer !== null) {
   5646 							dashPlayer.reset();
   5647 							for (var _i = 0, _total = events.length; _i < _total; _i++) {
   5648 								node.removeEventListener(events[_i], attachNativeEvents);
   5649 							}
   5650 							dashPlayer = NativeDash._createPlayer({
   5651 								options: options.dash,
   5652 								id: id
   5653 							});
   5654 
   5655 							if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && _typeof(value.drm) === 'object') {
   5656 								dashPlayer.setProtectionData(value.drm);
   5657 								if ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) {
   5658 									dashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel);
   5659 								}
   5660 							}
   5661 							dashPlayer.attachSource(source);
   5662 							if (autoplay) {
   5663 								dashPlayer.play();
   5664 							}
   5665 						}
   5666 					} else {
   5667 						node[propName] = value;
   5668 					}
   5669 				}
   5670 			};
   5671 		};
   5672 
   5673 		for (var _i2 = 0, _total2 = props.length; _i2 < _total2; _i2++) {
   5674 			assignGettersSetters(props[_i2]);
   5675 		}
   5676 
   5677 		_window2.default['__ready__' + id] = function (_dashPlayer) {
   5678 			mediaElement.dashPlayer = dashPlayer = _dashPlayer;
   5679 
   5680 			var dashEvents = dashjs.MediaPlayer.events,
   5681 			    assignEvents = function assignEvents(eventName) {
   5682 				if (eventName === 'loadedmetadata') {
   5683 					dashPlayer.initialize();
   5684 					dashPlayer.attachView(node);
   5685 					dashPlayer.setAutoPlay(false);
   5686 
   5687 					if (_typeof(options.dash.drm) === 'object' && !_mejs2.default.Utils.isObjectEmpty(options.dash.drm)) {
   5688 						dashPlayer.setProtectionData(options.dash.drm);
   5689 						if ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) {
   5690 							dashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel);
   5691 						}
   5692 					}
   5693 					dashPlayer.attachSource(node.getSrc());
   5694 				}
   5695 
   5696 				node.addEventListener(eventName, attachNativeEvents);
   5697 			};
   5698 
   5699 			for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {
   5700 				assignEvents(events[_i3]);
   5701 			}
   5702 
   5703 			var assignMdashEvents = function assignMdashEvents(e) {
   5704 				if (e.type.toLowerCase() === 'error') {
   5705 					mediaElement.generateError(e.message, node.src);
   5706 					console.error(e);
   5707 				} else {
   5708 					var _event = (0, _general.createEvent)(e.type, mediaElement);
   5709 					_event.data = e;
   5710 					mediaElement.dispatchEvent(_event);
   5711 				}
   5712 			};
   5713 
   5714 			for (var eventType in dashEvents) {
   5715 				if (dashEvents.hasOwnProperty(eventType)) {
   5716 					dashPlayer.on(dashEvents[eventType], function (e) {
   5717 						return assignMdashEvents(e);
   5718 					});
   5719 				}
   5720 			}
   5721 		};
   5722 
   5723 		if (mediaFiles && mediaFiles.length > 0) {
   5724 			for (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) {
   5725 				if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) {
   5726 					node.setAttribute('src', mediaFiles[_i4].src);
   5727 					if (typeof mediaFiles[_i4].drm !== 'undefined') {
   5728 						options.dash.drm = mediaFiles[_i4].drm;
   5729 					}
   5730 					break;
   5731 				}
   5732 			}
   5733 		}
   5734 
   5735 		node.setAttribute('id', id);
   5736 
   5737 		originalNode.parentNode.insertBefore(node, originalNode);
   5738 		originalNode.autoplay = false;
   5739 		originalNode.style.display = 'none';
   5740 
   5741 		node.setSize = function (width, height) {
   5742 			node.style.width = width + 'px';
   5743 			node.style.height = height + 'px';
   5744 			return node;
   5745 		};
   5746 
   5747 		node.hide = function () {
   5748 			node.pause();
   5749 			node.style.display = 'none';
   5750 			return node;
   5751 		};
   5752 
   5753 		node.show = function () {
   5754 			node.style.display = '';
   5755 			return node;
   5756 		};
   5757 
   5758 		node.destroy = function () {
   5759 			if (dashPlayer !== null) {
   5760 				dashPlayer.reset();
   5761 			}
   5762 		};
   5763 
   5764 		var event = (0, _general.createEvent)('rendererready', node);
   5765 		mediaElement.dispatchEvent(event);
   5766 
   5767 		mediaElement.promises.push(NativeDash.load({
   5768 			options: options.dash,
   5769 			id: id
   5770 		}));
   5771 
   5772 		return node;
   5773 	}
   5774 };
   5775 
   5776 _media.typeChecks.push(function (url) {
   5777 	return ~url.toLowerCase().indexOf('.mpd') ? 'application/dash+xml' : null;
   5778 });
   5779 
   5780 _renderer.renderer.add(DashNativeRenderer);
   5781 
   5782 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],20:[function(_dereq_,module,exports){
   5783 'use strict';
   5784 
   5785 Object.defineProperty(exports, "__esModule", {
   5786 	value: true
   5787 });
   5788 exports.PluginDetector = undefined;
   5789 
   5790 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
   5791 
   5792 var _window = _dereq_(3);
   5793 
   5794 var _window2 = _interopRequireDefault(_window);
   5795 
   5796 var _document = _dereq_(2);
   5797 
   5798 var _document2 = _interopRequireDefault(_document);
   5799 
   5800 var _mejs = _dereq_(7);
   5801 
   5802 var _mejs2 = _interopRequireDefault(_mejs);
   5803 
   5804 var _i18n = _dereq_(5);
   5805 
   5806 var _i18n2 = _interopRequireDefault(_i18n);
   5807 
   5808 var _renderer = _dereq_(8);
   5809 
   5810 var _general = _dereq_(27);
   5811 
   5812 var _constants = _dereq_(25);
   5813 
   5814 var _media = _dereq_(28);
   5815 
   5816 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   5817 
   5818 var PluginDetector = exports.PluginDetector = {
   5819 	plugins: [],
   5820 
   5821 	hasPluginVersion: function hasPluginVersion(plugin, v) {
   5822 		var pv = PluginDetector.plugins[plugin];
   5823 		v[1] = v[1] || 0;
   5824 		v[2] = v[2] || 0;
   5825 		return pv[0] > v[0] || pv[0] === v[0] && pv[1] > v[1] || pv[0] === v[0] && pv[1] === v[1] && pv[2] >= v[2];
   5826 	},
   5827 
   5828 	addPlugin: function addPlugin(p, pluginName, mimeType, activeX, axDetect) {
   5829 		PluginDetector.plugins[p] = PluginDetector.detectPlugin(pluginName, mimeType, activeX, axDetect);
   5830 	},
   5831 
   5832 	detectPlugin: function detectPlugin(pluginName, mimeType, activeX, axDetect) {
   5833 
   5834 		var version = [0, 0, 0],
   5835 		    description = void 0,
   5836 		    ax = void 0;
   5837 
   5838 		if (_constants.NAV.plugins !== null && _constants.NAV.plugins !== undefined && _typeof(_constants.NAV.plugins[pluginName]) === 'object') {
   5839 			description = _constants.NAV.plugins[pluginName].description;
   5840 			if (description && !(typeof _constants.NAV.mimeTypes !== 'undefined' && _constants.NAV.mimeTypes[mimeType] && !_constants.NAV.mimeTypes[mimeType].enabledPlugin)) {
   5841 				version = description.replace(pluginName, '').replace(/^\s+/, '').replace(/\sr/gi, '.').split('.');
   5842 				for (var i = 0, total = version.length; i < total; i++) {
   5843 					version[i] = parseInt(version[i].match(/\d+/), 10);
   5844 				}
   5845 			}
   5846 		} else if (_window2.default.ActiveXObject !== undefined) {
   5847 			try {
   5848 				ax = new ActiveXObject(activeX);
   5849 				if (ax) {
   5850 					version = axDetect(ax);
   5851 				}
   5852 			} catch (e) {
   5853 				
   5854 			}
   5855 		}
   5856 		return version;
   5857 	}
   5858 };
   5859 
   5860 PluginDetector.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', function (ax) {
   5861 	var version = [],
   5862 	    d = ax.GetVariable("$version");
   5863 
   5864 	if (d) {
   5865 		d = d.split(" ")[1].split(",");
   5866 		version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
   5867 	}
   5868 	return version;
   5869 });
   5870 
   5871 var FlashMediaElementRenderer = {
   5872 	create: function create(mediaElement, options, mediaFiles) {
   5873 
   5874 		var flash = {};
   5875 		var isActive = false;
   5876 
   5877 		flash.options = options;
   5878 		flash.id = mediaElement.id + '_' + flash.options.prefix;
   5879 		flash.mediaElement = mediaElement;
   5880 		flash.flashState = {};
   5881 		flash.flashApi = null;
   5882 		flash.flashApiStack = [];
   5883 
   5884 		var props = _mejs2.default.html5media.properties,
   5885 		    assignGettersSetters = function assignGettersSetters(propName) {
   5886 			flash.flashState[propName] = null;
   5887 
   5888 			var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   5889 
   5890 			flash['get' + capName] = function () {
   5891 				if (flash.flashApi !== null) {
   5892 					if (typeof flash.flashApi['get_' + propName] === 'function') {
   5893 						var value = flash.flashApi['get_' + propName]();
   5894 
   5895 						if (propName === 'buffered') {
   5896 							return {
   5897 								start: function start() {
   5898 									return 0;
   5899 								},
   5900 								end: function end() {
   5901 									return value;
   5902 								},
   5903 								length: 1
   5904 							};
   5905 						}
   5906 						return value;
   5907 					} else {
   5908 						return null;
   5909 					}
   5910 				} else {
   5911 					return null;
   5912 				}
   5913 			};
   5914 
   5915 			flash['set' + capName] = function (value) {
   5916 				if (propName === 'src') {
   5917 					value = (0, _media.absolutizeUrl)(value);
   5918 				}
   5919 
   5920 				if (flash.flashApi !== null && flash.flashApi['set_' + propName] !== undefined) {
   5921 					try {
   5922 						flash.flashApi['set_' + propName](value);
   5923 					} catch (e) {
   5924 						
   5925 					}
   5926 				} else {
   5927 					flash.flashApiStack.push({
   5928 						type: 'set',
   5929 						propName: propName,
   5930 						value: value
   5931 					});
   5932 				}
   5933 			};
   5934 		};
   5935 
   5936 		for (var i = 0, total = props.length; i < total; i++) {
   5937 			assignGettersSetters(props[i]);
   5938 		}
   5939 
   5940 		var methods = _mejs2.default.html5media.methods,
   5941 		    assignMethods = function assignMethods(methodName) {
   5942 			flash[methodName] = function () {
   5943 				if (isActive) {
   5944 					if (flash.flashApi !== null) {
   5945 						if (flash.flashApi['fire_' + methodName]) {
   5946 							try {
   5947 								flash.flashApi['fire_' + methodName]();
   5948 							} catch (e) {
   5949 								
   5950 							}
   5951 						} else {
   5952 							
   5953 						}
   5954 					} else {
   5955 						flash.flashApiStack.push({
   5956 							type: 'call',
   5957 							methodName: methodName
   5958 						});
   5959 					}
   5960 				}
   5961 			};
   5962 		};
   5963 		methods.push('stop');
   5964 		for (var _i = 0, _total = methods.length; _i < _total; _i++) {
   5965 			assignMethods(methods[_i]);
   5966 		}
   5967 
   5968 		var initEvents = ['rendererready'];
   5969 
   5970 		for (var _i2 = 0, _total2 = initEvents.length; _i2 < _total2; _i2++) {
   5971 			var event = (0, _general.createEvent)(initEvents[_i2], flash);
   5972 			mediaElement.dispatchEvent(event);
   5973 		}
   5974 
   5975 		_window2.default['__ready__' + flash.id] = function () {
   5976 
   5977 			flash.flashReady = true;
   5978 			flash.flashApi = _document2.default.getElementById('__' + flash.id);
   5979 
   5980 			if (flash.flashApiStack.length) {
   5981 				for (var _i3 = 0, _total3 = flash.flashApiStack.length; _i3 < _total3; _i3++) {
   5982 					var stackItem = flash.flashApiStack[_i3];
   5983 
   5984 					if (stackItem.type === 'set') {
   5985 						var propName = stackItem.propName,
   5986 						    capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   5987 
   5988 						flash['set' + capName](stackItem.value);
   5989 					} else if (stackItem.type === 'call') {
   5990 						flash[stackItem.methodName]();
   5991 					}
   5992 				}
   5993 			}
   5994 		};
   5995 
   5996 		_window2.default['__event__' + flash.id] = function (eventName, message) {
   5997 			var event = (0, _general.createEvent)(eventName, flash);
   5998 			if (message) {
   5999 				try {
   6000 					event.data = JSON.parse(message);
   6001 					event.details.data = JSON.parse(message);
   6002 				} catch (e) {
   6003 					event.message = message;
   6004 				}
   6005 			}
   6006 
   6007 			flash.mediaElement.dispatchEvent(event);
   6008 		};
   6009 
   6010 		flash.flashWrapper = _document2.default.createElement('div');
   6011 
   6012 		if (['always', 'sameDomain'].indexOf(flash.options.shimScriptAccess) === -1) {
   6013 			flash.options.shimScriptAccess = 'sameDomain';
   6014 		}
   6015 
   6016 		var autoplay = mediaElement.originalNode.autoplay,
   6017 		    flashVars = ['uid=' + flash.id, 'autoplay=' + autoplay, 'allowScriptAccess=' + flash.options.shimScriptAccess, 'preload=' + (mediaElement.originalNode.getAttribute('preload') || '')],
   6018 		    isVideo = mediaElement.originalNode !== null && mediaElement.originalNode.tagName.toLowerCase() === 'video',
   6019 		    flashHeight = isVideo ? mediaElement.originalNode.height : 1,
   6020 		    flashWidth = isVideo ? mediaElement.originalNode.width : 1;
   6021 
   6022 		if (mediaElement.originalNode.getAttribute('src')) {
   6023 			flashVars.push('src=' + mediaElement.originalNode.getAttribute('src'));
   6024 		}
   6025 
   6026 		if (flash.options.enablePseudoStreaming === true) {
   6027 			flashVars.push('pseudostreamstart=' + flash.options.pseudoStreamingStartQueryParam);
   6028 			flashVars.push('pseudostreamtype=' + flash.options.pseudoStreamingType);
   6029 		}
   6030 
   6031 		if (flash.options.streamDelimiter) {
   6032 			flashVars.push('streamdelimiter=' + encodeURIComponent(flash.options.streamDelimiter));
   6033 		}
   6034 
   6035 		if (flash.options.proxyType) {
   6036 			flashVars.push('proxytype=' + flash.options.proxyType);
   6037 		}
   6038 
   6039 		mediaElement.appendChild(flash.flashWrapper);
   6040 		mediaElement.originalNode.style.display = 'none';
   6041 
   6042 		var settings = [];
   6043 
   6044 		if (_constants.IS_IE || _constants.IS_EDGE) {
   6045 			var specialIEContainer = _document2.default.createElement('div');
   6046 			flash.flashWrapper.appendChild(specialIEContainer);
   6047 
   6048 			if (_constants.IS_EDGE) {
   6049 				settings = ['type="application/x-shockwave-flash"', 'data="' + flash.options.pluginPath + flash.options.filename + '"', 'id="__' + flash.id + '"', 'width="' + flashWidth + '"', 'height="' + flashHeight + '\'"'];
   6050 			} else {
   6051 				settings = ['classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"', 'codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"', 'id="__' + flash.id + '"', 'width="' + flashWidth + '"', 'height="' + flashHeight + '"'];
   6052 			}
   6053 
   6054 			if (!isVideo) {
   6055 				settings.push('style="clip: rect(0 0 0 0); position: absolute;"');
   6056 			}
   6057 
   6058 			specialIEContainer.outerHTML = '<object ' + settings.join(' ') + '>' + ('<param name="movie" value="' + flash.options.pluginPath + flash.options.filename + '?x=' + new Date() + '" />') + ('<param name="flashvars" value="' + flashVars.join('&amp;') + '" />') + '<param name="quality" value="high" />' + '<param name="bgcolor" value="#000000" />' + '<param name="wmode" value="transparent" />' + ('<param name="allowScriptAccess" value="' + flash.options.shimScriptAccess + '" />') + '<param name="allowFullScreen" value="true" />' + ('<div>' + _i18n2.default.t('mejs.install-flash') + '</div>') + '</object>';
   6059 		} else {
   6060 
   6061 			settings = ['id="__' + flash.id + '"', 'name="__' + flash.id + '"', 'play="true"', 'loop="false"', 'quality="high"', 'bgcolor="#000000"', 'wmode="transparent"', 'allowScriptAccess="' + flash.options.shimScriptAccess + '"', 'allowFullScreen="true"', 'type="application/x-shockwave-flash"', 'pluginspage="//www.macromedia.com/go/getflashplayer"', 'src="' + flash.options.pluginPath + flash.options.filename + '"', 'flashvars="' + flashVars.join('&') + '"'];
   6062 
   6063 			if (isVideo) {
   6064 				settings.push('width="' + flashWidth + '"');
   6065 				settings.push('height="' + flashHeight + '"');
   6066 			} else {
   6067 				settings.push('style="position: fixed; left: -9999em; top: -9999em;"');
   6068 			}
   6069 
   6070 			flash.flashWrapper.innerHTML = '<embed ' + settings.join(' ') + '>';
   6071 		}
   6072 
   6073 		flash.flashNode = flash.flashWrapper.lastChild;
   6074 
   6075 		flash.hide = function () {
   6076 			isActive = false;
   6077 			if (isVideo) {
   6078 				flash.flashNode.style.display = 'none';
   6079 			}
   6080 		};
   6081 		flash.show = function () {
   6082 			isActive = true;
   6083 			if (isVideo) {
   6084 				flash.flashNode.style.display = '';
   6085 			}
   6086 		};
   6087 		flash.setSize = function (width, height) {
   6088 			flash.flashNode.style.width = width + 'px';
   6089 			flash.flashNode.style.height = height + 'px';
   6090 
   6091 			if (flash.flashApi !== null && typeof flash.flashApi.fire_setSize === 'function') {
   6092 				flash.flashApi.fire_setSize(width, height);
   6093 			}
   6094 		};
   6095 
   6096 		flash.destroy = function () {
   6097 			flash.flashNode.remove();
   6098 		};
   6099 
   6100 		if (mediaFiles && mediaFiles.length > 0) {
   6101 			for (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) {
   6102 				if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) {
   6103 					flash.setSrc(mediaFiles[_i4].src);
   6104 					break;
   6105 				}
   6106 			}
   6107 		}
   6108 
   6109 		return flash;
   6110 	}
   6111 };
   6112 
   6113 var hasFlash = PluginDetector.hasPluginVersion('flash', [10, 0, 0]);
   6114 
   6115 if (hasFlash) {
   6116 	_media.typeChecks.push(function (url) {
   6117 		url = url.toLowerCase();
   6118 
   6119 		if (url.startsWith('rtmp')) {
   6120 			if (~url.indexOf('.mp3')) {
   6121 				return 'audio/rtmp';
   6122 			} else {
   6123 				return 'video/rtmp';
   6124 			}
   6125 		} else if (/\.og(a|g)/i.test(url)) {
   6126 			return 'audio/ogg';
   6127 		} else if (~url.indexOf('.m3u8')) {
   6128 			return 'application/x-mpegURL';
   6129 		} else if (~url.indexOf('.mpd')) {
   6130 			return 'application/dash+xml';
   6131 		} else if (~url.indexOf('.flv')) {
   6132 			return 'video/flv';
   6133 		} else {
   6134 			return null;
   6135 		}
   6136 	});
   6137 
   6138 	var FlashMediaElementVideoRenderer = {
   6139 		name: 'flash_video',
   6140 		options: {
   6141 			prefix: 'flash_video',
   6142 			filename: 'mediaelement-flash-video.swf',
   6143 			enablePseudoStreaming: false,
   6144 
   6145 			pseudoStreamingStartQueryParam: 'start',
   6146 
   6147 			pseudoStreamingType: 'byte',
   6148 
   6149 			proxyType: '',
   6150 
   6151 			streamDelimiter: ''
   6152 		},
   6153 
   6154 		canPlayType: function canPlayType(type) {
   6155 			return ~['video/mp4', 'video/rtmp', 'audio/rtmp', 'rtmp/mp4', 'audio/mp4', 'video/flv', 'video/x-flv'].indexOf(type.toLowerCase());
   6156 		},
   6157 
   6158 		create: FlashMediaElementRenderer.create
   6159 
   6160 	};
   6161 	_renderer.renderer.add(FlashMediaElementVideoRenderer);
   6162 
   6163 	var FlashMediaElementHlsVideoRenderer = {
   6164 		name: 'flash_hls',
   6165 		options: {
   6166 			prefix: 'flash_hls',
   6167 			filename: 'mediaelement-flash-video-hls.swf'
   6168 		},
   6169 
   6170 		canPlayType: function canPlayType(type) {
   6171 			return ~['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase());
   6172 		},
   6173 
   6174 		create: FlashMediaElementRenderer.create
   6175 	};
   6176 	_renderer.renderer.add(FlashMediaElementHlsVideoRenderer);
   6177 
   6178 	var FlashMediaElementMdashVideoRenderer = {
   6179 		name: 'flash_dash',
   6180 		options: {
   6181 			prefix: 'flash_dash',
   6182 			filename: 'mediaelement-flash-video-mdash.swf'
   6183 		},
   6184 
   6185 		canPlayType: function canPlayType(type) {
   6186 			return ~['application/dash+xml'].indexOf(type.toLowerCase());
   6187 		},
   6188 
   6189 		create: FlashMediaElementRenderer.create
   6190 	};
   6191 	_renderer.renderer.add(FlashMediaElementMdashVideoRenderer);
   6192 
   6193 	var FlashMediaElementAudioRenderer = {
   6194 		name: 'flash_audio',
   6195 		options: {
   6196 			prefix: 'flash_audio',
   6197 			filename: 'mediaelement-flash-audio.swf'
   6198 		},
   6199 
   6200 		canPlayType: function canPlayType(type) {
   6201 			return ~['audio/mp3'].indexOf(type.toLowerCase());
   6202 		},
   6203 
   6204 		create: FlashMediaElementRenderer.create
   6205 	};
   6206 	_renderer.renderer.add(FlashMediaElementAudioRenderer);
   6207 
   6208 	var FlashMediaElementAudioOggRenderer = {
   6209 		name: 'flash_audio_ogg',
   6210 		options: {
   6211 			prefix: 'flash_audio_ogg',
   6212 			filename: 'mediaelement-flash-audio-ogg.swf'
   6213 		},
   6214 
   6215 		canPlayType: function canPlayType(type) {
   6216 			return ~['audio/ogg', 'audio/oga', 'audio/ogv'].indexOf(type.toLowerCase());
   6217 		},
   6218 
   6219 		create: FlashMediaElementRenderer.create
   6220 	};
   6221 	_renderer.renderer.add(FlashMediaElementAudioOggRenderer);
   6222 }
   6223 
   6224 },{"2":2,"25":25,"27":27,"28":28,"3":3,"5":5,"7":7,"8":8}],21:[function(_dereq_,module,exports){
   6225 'use strict';
   6226 
   6227 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
   6228 
   6229 var _window = _dereq_(3);
   6230 
   6231 var _window2 = _interopRequireDefault(_window);
   6232 
   6233 var _mejs = _dereq_(7);
   6234 
   6235 var _mejs2 = _interopRequireDefault(_mejs);
   6236 
   6237 var _renderer = _dereq_(8);
   6238 
   6239 var _general = _dereq_(27);
   6240 
   6241 var _constants = _dereq_(25);
   6242 
   6243 var _media = _dereq_(28);
   6244 
   6245 var _dom = _dereq_(26);
   6246 
   6247 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   6248 
   6249 var NativeFlv = {
   6250 
   6251 	promise: null,
   6252 
   6253 	load: function load(settings) {
   6254 		if (typeof flvjs !== 'undefined') {
   6255 			NativeFlv.promise = new Promise(function (resolve) {
   6256 				resolve();
   6257 			}).then(function () {
   6258 				NativeFlv._createPlayer(settings);
   6259 			});
   6260 		} else {
   6261 			settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/flv.js@latest';
   6262 
   6263 			NativeFlv.promise = NativeFlv.promise || (0, _dom.loadScript)(settings.options.path);
   6264 			NativeFlv.promise.then(function () {
   6265 				NativeFlv._createPlayer(settings);
   6266 			});
   6267 		}
   6268 
   6269 		return NativeFlv.promise;
   6270 	},
   6271 
   6272 	_createPlayer: function _createPlayer(settings) {
   6273 		flvjs.LoggingControl.enableDebug = settings.options.debug;
   6274 		flvjs.LoggingControl.enableVerbose = settings.options.debug;
   6275 		var player = flvjs.createPlayer(settings.options, settings.configs);
   6276 		_window2.default['__ready__' + settings.id](player);
   6277 		return player;
   6278 	}
   6279 };
   6280 
   6281 var FlvNativeRenderer = {
   6282 	name: 'native_flv',
   6283 	options: {
   6284 		prefix: 'native_flv',
   6285 		flv: {
   6286 			path: 'https://cdn.jsdelivr.net/npm/flv.js@latest',
   6287 
   6288 			cors: true,
   6289 			debug: false
   6290 		}
   6291 	},
   6292 
   6293 	canPlayType: function canPlayType(type) {
   6294 		return _constants.HAS_MSE && ['video/x-flv', 'video/flv'].indexOf(type.toLowerCase()) > -1;
   6295 	},
   6296 
   6297 	create: function create(mediaElement, options, mediaFiles) {
   6298 
   6299 		var originalNode = mediaElement.originalNode,
   6300 		    id = mediaElement.id + '_' + options.prefix;
   6301 
   6302 		var node = null,
   6303 		    flvPlayer = null;
   6304 
   6305 		node = originalNode.cloneNode(true);
   6306 		options = Object.assign(options, mediaElement.options);
   6307 
   6308 		var props = _mejs2.default.html5media.properties,
   6309 		    events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
   6310 			return e !== 'error';
   6311 		}),
   6312 		    attachNativeEvents = function attachNativeEvents(e) {
   6313 			var event = (0, _general.createEvent)(e.type, mediaElement);
   6314 			mediaElement.dispatchEvent(event);
   6315 		},
   6316 		    assignGettersSetters = function assignGettersSetters(propName) {
   6317 			var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   6318 
   6319 			node['get' + capName] = function () {
   6320 				return flvPlayer !== null ? node[propName] : null;
   6321 			};
   6322 
   6323 			node['set' + capName] = function (value) {
   6324 				if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
   6325 					if (propName === 'src') {
   6326 						node[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;
   6327 						if (flvPlayer !== null) {
   6328 							var _flvOptions = {};
   6329 							_flvOptions.type = 'flv';
   6330 							_flvOptions.url = value;
   6331 							_flvOptions.cors = options.flv.cors;
   6332 							_flvOptions.debug = options.flv.debug;
   6333 							_flvOptions.path = options.flv.path;
   6334 							var _flvConfigs = options.flv.configs;
   6335 
   6336 							flvPlayer.destroy();
   6337 							for (var i = 0, total = events.length; i < total; i++) {
   6338 								node.removeEventListener(events[i], attachNativeEvents);
   6339 							}
   6340 							flvPlayer = NativeFlv._createPlayer({
   6341 								options: _flvOptions,
   6342 								configs: _flvConfigs,
   6343 								id: id
   6344 							});
   6345 							flvPlayer.attachMediaElement(node);
   6346 							flvPlayer.load();
   6347 						}
   6348 					} else {
   6349 						node[propName] = value;
   6350 					}
   6351 				}
   6352 			};
   6353 		};
   6354 
   6355 		for (var i = 0, total = props.length; i < total; i++) {
   6356 			assignGettersSetters(props[i]);
   6357 		}
   6358 
   6359 		_window2.default['__ready__' + id] = function (_flvPlayer) {
   6360 			mediaElement.flvPlayer = flvPlayer = _flvPlayer;
   6361 
   6362 			var flvEvents = flvjs.Events,
   6363 			    assignEvents = function assignEvents(eventName) {
   6364 				if (eventName === 'loadedmetadata') {
   6365 					flvPlayer.unload();
   6366 					flvPlayer.detachMediaElement();
   6367 					flvPlayer.attachMediaElement(node);
   6368 					flvPlayer.load();
   6369 				}
   6370 
   6371 				node.addEventListener(eventName, attachNativeEvents);
   6372 			};
   6373 
   6374 			for (var _i = 0, _total = events.length; _i < _total; _i++) {
   6375 				assignEvents(events[_i]);
   6376 			}
   6377 
   6378 			var assignFlvEvents = function assignFlvEvents(name, data) {
   6379 				if (name === 'error') {
   6380 					var message = data[0] + ': ' + data[1] + ' ' + data[2].msg;
   6381 					mediaElement.generateError(message, node.src);
   6382 				} else {
   6383 					var _event = (0, _general.createEvent)(name, mediaElement);
   6384 					_event.data = data;
   6385 					mediaElement.dispatchEvent(_event);
   6386 				}
   6387 			};
   6388 
   6389 			var _loop = function _loop(eventType) {
   6390 				if (flvEvents.hasOwnProperty(eventType)) {
   6391 					flvPlayer.on(flvEvents[eventType], function () {
   6392 						for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
   6393 							args[_key] = arguments[_key];
   6394 						}
   6395 
   6396 						return assignFlvEvents(flvEvents[eventType], args);
   6397 					});
   6398 				}
   6399 			};
   6400 
   6401 			for (var eventType in flvEvents) {
   6402 				_loop(eventType);
   6403 			}
   6404 		};
   6405 
   6406 		if (mediaFiles && mediaFiles.length > 0) {
   6407 			for (var _i2 = 0, _total2 = mediaFiles.length; _i2 < _total2; _i2++) {
   6408 				if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i2].type)) {
   6409 					node.setAttribute('src', mediaFiles[_i2].src);
   6410 					break;
   6411 				}
   6412 			}
   6413 		}
   6414 
   6415 		node.setAttribute('id', id);
   6416 
   6417 		originalNode.parentNode.insertBefore(node, originalNode);
   6418 		originalNode.autoplay = false;
   6419 		originalNode.style.display = 'none';
   6420 
   6421 		var flvOptions = {};
   6422 		flvOptions.type = 'flv';
   6423 		flvOptions.url = node.src;
   6424 		flvOptions.cors = options.flv.cors;
   6425 		flvOptions.debug = options.flv.debug;
   6426 		flvOptions.path = options.flv.path;
   6427 		var flvConfigs = options.flv.configs;
   6428 
   6429 		node.setSize = function (width, height) {
   6430 			node.style.width = width + 'px';
   6431 			node.style.height = height + 'px';
   6432 			return node;
   6433 		};
   6434 
   6435 		node.hide = function () {
   6436 			if (flvPlayer !== null) {
   6437 				flvPlayer.pause();
   6438 			}
   6439 			node.style.display = 'none';
   6440 			return node;
   6441 		};
   6442 
   6443 		node.show = function () {
   6444 			node.style.display = '';
   6445 			return node;
   6446 		};
   6447 
   6448 		node.destroy = function () {
   6449 			if (flvPlayer !== null) {
   6450 				flvPlayer.destroy();
   6451 			}
   6452 		};
   6453 
   6454 		var event = (0, _general.createEvent)('rendererready', node);
   6455 		mediaElement.dispatchEvent(event);
   6456 
   6457 		mediaElement.promises.push(NativeFlv.load({
   6458 			options: flvOptions,
   6459 			configs: flvConfigs,
   6460 			id: id
   6461 		}));
   6462 
   6463 		return node;
   6464 	}
   6465 };
   6466 
   6467 _media.typeChecks.push(function (url) {
   6468 	return ~url.toLowerCase().indexOf('.flv') ? 'video/flv' : null;
   6469 });
   6470 
   6471 _renderer.renderer.add(FlvNativeRenderer);
   6472 
   6473 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],22:[function(_dereq_,module,exports){
   6474 'use strict';
   6475 
   6476 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
   6477 
   6478 var _window = _dereq_(3);
   6479 
   6480 var _window2 = _interopRequireDefault(_window);
   6481 
   6482 var _mejs = _dereq_(7);
   6483 
   6484 var _mejs2 = _interopRequireDefault(_mejs);
   6485 
   6486 var _renderer = _dereq_(8);
   6487 
   6488 var _general = _dereq_(27);
   6489 
   6490 var _constants = _dereq_(25);
   6491 
   6492 var _media = _dereq_(28);
   6493 
   6494 var _dom = _dereq_(26);
   6495 
   6496 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   6497 
   6498 var NativeHls = {
   6499 
   6500 	promise: null,
   6501 
   6502 	load: function load(settings) {
   6503 		if (typeof Hls !== 'undefined') {
   6504 			NativeHls.promise = new Promise(function (resolve) {
   6505 				resolve();
   6506 			}).then(function () {
   6507 				NativeHls._createPlayer(settings);
   6508 			});
   6509 		} else {
   6510 			settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/hls.js@latest';
   6511 
   6512 			NativeHls.promise = NativeHls.promise || (0, _dom.loadScript)(settings.options.path);
   6513 			NativeHls.promise.then(function () {
   6514 				NativeHls._createPlayer(settings);
   6515 			});
   6516 		}
   6517 
   6518 		return NativeHls.promise;
   6519 	},
   6520 
   6521 	_createPlayer: function _createPlayer(settings) {
   6522 		var player = new Hls(settings.options);
   6523 		_window2.default['__ready__' + settings.id](player);
   6524 		return player;
   6525 	}
   6526 };
   6527 
   6528 var HlsNativeRenderer = {
   6529 	name: 'native_hls',
   6530 	options: {
   6531 		prefix: 'native_hls',
   6532 		hls: {
   6533 			path: 'https://cdn.jsdelivr.net/npm/hls.js@latest',
   6534 
   6535 			autoStartLoad: false,
   6536 			debug: false
   6537 		}
   6538 	},
   6539 
   6540 	canPlayType: function canPlayType(type) {
   6541 		return _constants.HAS_MSE && ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) > -1;
   6542 	},
   6543 
   6544 	create: function create(mediaElement, options, mediaFiles) {
   6545 
   6546 		var originalNode = mediaElement.originalNode,
   6547 		    id = mediaElement.id + '_' + options.prefix,
   6548 		    preload = originalNode.getAttribute('preload'),
   6549 		    autoplay = originalNode.autoplay;
   6550 
   6551 		var hlsPlayer = null,
   6552 		    node = null,
   6553 		    index = 0,
   6554 		    total = mediaFiles.length;
   6555 
   6556 		node = originalNode.cloneNode(true);
   6557 		options = Object.assign(options, mediaElement.options);
   6558 		options.hls.autoStartLoad = preload && preload !== 'none' || autoplay;
   6559 
   6560 		var props = _mejs2.default.html5media.properties,
   6561 		    events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
   6562 			return e !== 'error';
   6563 		}),
   6564 		    attachNativeEvents = function attachNativeEvents(e) {
   6565 			var event = (0, _general.createEvent)(e.type, mediaElement);
   6566 			mediaElement.dispatchEvent(event);
   6567 		},
   6568 		    assignGettersSetters = function assignGettersSetters(propName) {
   6569 			var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   6570 
   6571 			node['get' + capName] = function () {
   6572 				return hlsPlayer !== null ? node[propName] : null;
   6573 			};
   6574 
   6575 			node['set' + capName] = function (value) {
   6576 				if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
   6577 					if (propName === 'src') {
   6578 						node[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value;
   6579 						if (hlsPlayer !== null) {
   6580 							hlsPlayer.destroy();
   6581 							for (var i = 0, _total = events.length; i < _total; i++) {
   6582 								node.removeEventListener(events[i], attachNativeEvents);
   6583 							}
   6584 							hlsPlayer = NativeHls._createPlayer({
   6585 								options: options.hls,
   6586 								id: id
   6587 							});
   6588 							hlsPlayer.loadSource(value);
   6589 							hlsPlayer.attachMedia(node);
   6590 						}
   6591 					} else {
   6592 						node[propName] = value;
   6593 					}
   6594 				}
   6595 			};
   6596 		};
   6597 
   6598 		for (var i = 0, _total2 = props.length; i < _total2; i++) {
   6599 			assignGettersSetters(props[i]);
   6600 		}
   6601 
   6602 		_window2.default['__ready__' + id] = function (_hlsPlayer) {
   6603 			mediaElement.hlsPlayer = hlsPlayer = _hlsPlayer;
   6604 			var hlsEvents = Hls.Events,
   6605 			    assignEvents = function assignEvents(eventName) {
   6606 				if (eventName === 'loadedmetadata') {
   6607 					var url = mediaElement.originalNode.src;
   6608 					hlsPlayer.detachMedia();
   6609 					hlsPlayer.loadSource(url);
   6610 					hlsPlayer.attachMedia(node);
   6611 				}
   6612 
   6613 				node.addEventListener(eventName, attachNativeEvents);
   6614 			};
   6615 
   6616 			for (var _i = 0, _total3 = events.length; _i < _total3; _i++) {
   6617 				assignEvents(events[_i]);
   6618 			}
   6619 
   6620 			var recoverDecodingErrorDate = void 0,
   6621 			    recoverSwapAudioCodecDate = void 0;
   6622 			var assignHlsEvents = function assignHlsEvents(name, data) {
   6623 				if (name === 'hlsError') {
   6624 					console.warn(data);
   6625 					data = data[1];
   6626 
   6627 					if (data.fatal) {
   6628 						switch (data.type) {
   6629 							case 'mediaError':
   6630 								var now = new Date().getTime();
   6631 								if (!recoverDecodingErrorDate || now - recoverDecodingErrorDate > 3000) {
   6632 									recoverDecodingErrorDate = new Date().getTime();
   6633 									hlsPlayer.recoverMediaError();
   6634 								} else if (!recoverSwapAudioCodecDate || now - recoverSwapAudioCodecDate > 3000) {
   6635 									recoverSwapAudioCodecDate = new Date().getTime();
   6636 									console.warn('Attempting to swap Audio Codec and recover from media error');
   6637 									hlsPlayer.swapAudioCodec();
   6638 									hlsPlayer.recoverMediaError();
   6639 								} else {
   6640 									var message = 'Cannot recover, last media error recovery failed';
   6641 									mediaElement.generateError(message, node.src);
   6642 									console.error(message);
   6643 								}
   6644 								break;
   6645 							case 'networkError':
   6646 								if (data.details === 'manifestLoadError') {
   6647 									if (index < total && mediaFiles[index + 1] !== undefined) {
   6648 										node.setSrc(mediaFiles[index++].src);
   6649 										node.load();
   6650 										node.play();
   6651 									} else {
   6652 										var _message = 'Network error';
   6653 										mediaElement.generateError(_message, mediaFiles);
   6654 										console.error(_message);
   6655 									}
   6656 								} else {
   6657 									var _message2 = 'Network error';
   6658 									mediaElement.generateError(_message2, mediaFiles);
   6659 									console.error(_message2);
   6660 								}
   6661 								break;
   6662 							default:
   6663 								hlsPlayer.destroy();
   6664 								break;
   6665 						}
   6666 						return;
   6667 					}
   6668 				}
   6669 				var event = (0, _general.createEvent)(name, mediaElement);
   6670 				event.data = data;
   6671 				mediaElement.dispatchEvent(event);
   6672 			};
   6673 
   6674 			var _loop = function _loop(eventType) {
   6675 				if (hlsEvents.hasOwnProperty(eventType)) {
   6676 					hlsPlayer.on(hlsEvents[eventType], function () {
   6677 						for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
   6678 							args[_key] = arguments[_key];
   6679 						}
   6680 
   6681 						return assignHlsEvents(hlsEvents[eventType], args);
   6682 					});
   6683 				}
   6684 			};
   6685 
   6686 			for (var eventType in hlsEvents) {
   6687 				_loop(eventType);
   6688 			}
   6689 		};
   6690 
   6691 		if (total > 0) {
   6692 			for (; index < total; index++) {
   6693 				if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) {
   6694 					node.setAttribute('src', mediaFiles[index].src);
   6695 					break;
   6696 				}
   6697 			}
   6698 		}
   6699 
   6700 		if (preload !== 'auto' && !autoplay) {
   6701 			node.addEventListener('play', function () {
   6702 				if (hlsPlayer !== null) {
   6703 					hlsPlayer.startLoad();
   6704 				}
   6705 			});
   6706 
   6707 			node.addEventListener('pause', function () {
   6708 				if (hlsPlayer !== null) {
   6709 					hlsPlayer.stopLoad();
   6710 				}
   6711 			});
   6712 		}
   6713 
   6714 		node.setAttribute('id', id);
   6715 
   6716 		originalNode.parentNode.insertBefore(node, originalNode);
   6717 		originalNode.autoplay = false;
   6718 		originalNode.style.display = 'none';
   6719 
   6720 		node.setSize = function (width, height) {
   6721 			node.style.width = width + 'px';
   6722 			node.style.height = height + 'px';
   6723 			return node;
   6724 		};
   6725 
   6726 		node.hide = function () {
   6727 			node.pause();
   6728 			node.style.display = 'none';
   6729 			return node;
   6730 		};
   6731 
   6732 		node.show = function () {
   6733 			node.style.display = '';
   6734 			return node;
   6735 		};
   6736 
   6737 		node.destroy = function () {
   6738 			if (hlsPlayer !== null) {
   6739 				hlsPlayer.stopLoad();
   6740 				hlsPlayer.destroy();
   6741 			}
   6742 		};
   6743 
   6744 		var event = (0, _general.createEvent)('rendererready', node);
   6745 		mediaElement.dispatchEvent(event);
   6746 
   6747 		mediaElement.promises.push(NativeHls.load({
   6748 			options: options.hls,
   6749 			id: id
   6750 		}));
   6751 
   6752 		return node;
   6753 	}
   6754 };
   6755 
   6756 _media.typeChecks.push(function (url) {
   6757 	return ~url.toLowerCase().indexOf('.m3u8') ? 'application/x-mpegURL' : null;
   6758 });
   6759 
   6760 _renderer.renderer.add(HlsNativeRenderer);
   6761 
   6762 },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],23:[function(_dereq_,module,exports){
   6763 'use strict';
   6764 
   6765 var _window = _dereq_(3);
   6766 
   6767 var _window2 = _interopRequireDefault(_window);
   6768 
   6769 var _document = _dereq_(2);
   6770 
   6771 var _document2 = _interopRequireDefault(_document);
   6772 
   6773 var _mejs = _dereq_(7);
   6774 
   6775 var _mejs2 = _interopRequireDefault(_mejs);
   6776 
   6777 var _renderer = _dereq_(8);
   6778 
   6779 var _general = _dereq_(27);
   6780 
   6781 var _constants = _dereq_(25);
   6782 
   6783 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   6784 
   6785 var HtmlMediaElement = {
   6786 	name: 'html5',
   6787 	options: {
   6788 		prefix: 'html5'
   6789 	},
   6790 
   6791 	canPlayType: function canPlayType(type) {
   6792 
   6793 		var mediaElement = _document2.default.createElement('video');
   6794 
   6795 		if (_constants.IS_ANDROID && /\/mp(3|4)$/i.test(type) || ~['application/x-mpegurl', 'vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) && _constants.SUPPORTS_NATIVE_HLS) {
   6796 			return 'yes';
   6797 		} else if (mediaElement.canPlayType) {
   6798 			return mediaElement.canPlayType(type.toLowerCase()).replace(/no/, '');
   6799 		} else {
   6800 			return '';
   6801 		}
   6802 	},
   6803 
   6804 	create: function create(mediaElement, options, mediaFiles) {
   6805 
   6806 		var id = mediaElement.id + '_' + options.prefix;
   6807 		var isActive = false;
   6808 
   6809 		var node = null;
   6810 
   6811 		if (mediaElement.originalNode === undefined || mediaElement.originalNode === null) {
   6812 			node = _document2.default.createElement('audio');
   6813 			mediaElement.appendChild(node);
   6814 		} else {
   6815 			node = mediaElement.originalNode;
   6816 		}
   6817 
   6818 		node.setAttribute('id', id);
   6819 
   6820 		var props = _mejs2.default.html5media.properties,
   6821 		    assignGettersSetters = function assignGettersSetters(propName) {
   6822 			var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   6823 
   6824 			node['get' + capName] = function () {
   6825 				return node[propName];
   6826 			};
   6827 
   6828 			node['set' + capName] = function (value) {
   6829 				if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) {
   6830 					node[propName] = value;
   6831 				}
   6832 			};
   6833 		};
   6834 
   6835 		for (var i = 0, _total = props.length; i < _total; i++) {
   6836 			assignGettersSetters(props[i]);
   6837 		}
   6838 
   6839 		var events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) {
   6840 			return e !== 'error';
   6841 		}),
   6842 		    assignEvents = function assignEvents(eventName) {
   6843 			node.addEventListener(eventName, function (e) {
   6844 				if (isActive) {
   6845 					var _event = (0, _general.createEvent)(e.type, e.target);
   6846 					mediaElement.dispatchEvent(_event);
   6847 				}
   6848 			});
   6849 		};
   6850 
   6851 		for (var _i = 0, _total2 = events.length; _i < _total2; _i++) {
   6852 			assignEvents(events[_i]);
   6853 		}
   6854 
   6855 		node.setSize = function (width, height) {
   6856 			node.style.width = width + 'px';
   6857 			node.style.height = height + 'px';
   6858 			return node;
   6859 		};
   6860 
   6861 		node.hide = function () {
   6862 			isActive = false;
   6863 			node.style.display = 'none';
   6864 
   6865 			return node;
   6866 		};
   6867 
   6868 		node.show = function () {
   6869 			isActive = true;
   6870 			node.style.display = '';
   6871 
   6872 			return node;
   6873 		};
   6874 
   6875 		var index = 0,
   6876 		    total = mediaFiles.length;
   6877 		if (total > 0) {
   6878 			for (; index < total; index++) {
   6879 				if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) {
   6880 					node.setAttribute('src', mediaFiles[index].src);
   6881 					break;
   6882 				}
   6883 			}
   6884 		}
   6885 
   6886 		node.addEventListener('error', function (e) {
   6887 			if (e && e.target && e.target.error && e.target.error.code === 4 && isActive) {
   6888 				if (index < total && mediaFiles[index + 1] !== undefined) {
   6889 					node.src = mediaFiles[index++].src;
   6890 					node.load();
   6891 					node.play();
   6892 				} else {
   6893 					mediaElement.generateError('Media error: Format(s) not supported or source(s) not found', mediaFiles);
   6894 				}
   6895 			}
   6896 		});
   6897 
   6898 		var event = (0, _general.createEvent)('rendererready', node);
   6899 		mediaElement.dispatchEvent(event);
   6900 
   6901 		return node;
   6902 	}
   6903 };
   6904 
   6905 _window2.default.HtmlMediaElement = _mejs2.default.HtmlMediaElement = HtmlMediaElement;
   6906 
   6907 _renderer.renderer.add(HtmlMediaElement);
   6908 
   6909 },{"2":2,"25":25,"27":27,"3":3,"7":7,"8":8}],24:[function(_dereq_,module,exports){
   6910 'use strict';
   6911 
   6912 var _window = _dereq_(3);
   6913 
   6914 var _window2 = _interopRequireDefault(_window);
   6915 
   6916 var _document = _dereq_(2);
   6917 
   6918 var _document2 = _interopRequireDefault(_document);
   6919 
   6920 var _mejs = _dereq_(7);
   6921 
   6922 var _mejs2 = _interopRequireDefault(_mejs);
   6923 
   6924 var _renderer = _dereq_(8);
   6925 
   6926 var _general = _dereq_(27);
   6927 
   6928 var _media = _dereq_(28);
   6929 
   6930 var _dom = _dereq_(26);
   6931 
   6932 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   6933 
   6934 var YouTubeApi = {
   6935 	isIframeStarted: false,
   6936 
   6937 	isIframeLoaded: false,
   6938 
   6939 	iframeQueue: [],
   6940 
   6941 	enqueueIframe: function enqueueIframe(settings) {
   6942 		YouTubeApi.isLoaded = typeof YT !== 'undefined' && YT.loaded;
   6943 
   6944 		if (YouTubeApi.isLoaded) {
   6945 			YouTubeApi.createIframe(settings);
   6946 		} else {
   6947 			YouTubeApi.loadIframeApi();
   6948 			YouTubeApi.iframeQueue.push(settings);
   6949 		}
   6950 	},
   6951 
   6952 	loadIframeApi: function loadIframeApi() {
   6953 		if (!YouTubeApi.isIframeStarted) {
   6954 			(0, _dom.loadScript)('https://www.youtube.com/player_api');
   6955 			YouTubeApi.isIframeStarted = true;
   6956 		}
   6957 	},
   6958 
   6959 	iFrameReady: function iFrameReady() {
   6960 
   6961 		YouTubeApi.isLoaded = true;
   6962 		YouTubeApi.isIframeLoaded = true;
   6963 
   6964 		while (YouTubeApi.iframeQueue.length > 0) {
   6965 			var settings = YouTubeApi.iframeQueue.pop();
   6966 			YouTubeApi.createIframe(settings);
   6967 		}
   6968 	},
   6969 
   6970 	createIframe: function createIframe(settings) {
   6971 		return new YT.Player(settings.containerId, settings);
   6972 	},
   6973 
   6974 	getYouTubeId: function getYouTubeId(url) {
   6975 
   6976 		var youTubeId = '';
   6977 
   6978 		if (url.indexOf('?') > 0) {
   6979 			youTubeId = YouTubeApi.getYouTubeIdFromParam(url);
   6980 
   6981 			if (youTubeId === '') {
   6982 				youTubeId = YouTubeApi.getYouTubeIdFromUrl(url);
   6983 			}
   6984 		} else {
   6985 			youTubeId = YouTubeApi.getYouTubeIdFromUrl(url);
   6986 		}
   6987 
   6988 		var id = youTubeId.substring(youTubeId.lastIndexOf('/') + 1);
   6989 		youTubeId = id.split('?');
   6990 		return youTubeId[0];
   6991 	},
   6992 
   6993 	getYouTubeIdFromParam: function getYouTubeIdFromParam(url) {
   6994 
   6995 		if (url === undefined || url === null || !url.trim().length) {
   6996 			return null;
   6997 		}
   6998 
   6999 		var parts = url.split('?'),
   7000 		    parameters = parts[1].split('&');
   7001 
   7002 		var youTubeId = '';
   7003 
   7004 		for (var i = 0, total = parameters.length; i < total; i++) {
   7005 			var paramParts = parameters[i].split('=');
   7006 			if (paramParts[0] === 'v') {
   7007 				youTubeId = paramParts[1];
   7008 				break;
   7009 			}
   7010 		}
   7011 
   7012 		return youTubeId;
   7013 	},
   7014 
   7015 	getYouTubeIdFromUrl: function getYouTubeIdFromUrl(url) {
   7016 
   7017 		if (url === undefined || url === null || !url.trim().length) {
   7018 			return null;
   7019 		}
   7020 
   7021 		var parts = url.split('?');
   7022 		url = parts[0];
   7023 		return url.substring(url.lastIndexOf('/') + 1);
   7024 	},
   7025 
   7026 	getYouTubeNoCookieUrl: function getYouTubeNoCookieUrl(url) {
   7027 		if (url === undefined || url === null || !url.trim().length || url.indexOf('//www.youtube') === -1) {
   7028 			return url;
   7029 		}
   7030 
   7031 		var parts = url.split('/');
   7032 		parts[2] = parts[2].replace('.com', '-nocookie.com');
   7033 		return parts.join('/');
   7034 	}
   7035 };
   7036 
   7037 var YouTubeIframeRenderer = {
   7038 	name: 'youtube_iframe',
   7039 
   7040 	options: {
   7041 		prefix: 'youtube_iframe',
   7042 
   7043 		youtube: {
   7044 			autoplay: 0,
   7045 			controls: 0,
   7046 			disablekb: 1,
   7047 			end: 0,
   7048 			loop: 0,
   7049 			modestbranding: 0,
   7050 			playsinline: 0,
   7051 			rel: 0,
   7052 			showinfo: 0,
   7053 			start: 0,
   7054 			iv_load_policy: 3,
   7055 
   7056 			nocookie: false,
   7057 
   7058 			imageQuality: null
   7059 		}
   7060 	},
   7061 
   7062 	canPlayType: function canPlayType(type) {
   7063 		return ~['video/youtube', 'video/x-youtube'].indexOf(type.toLowerCase());
   7064 	},
   7065 
   7066 	create: function create(mediaElement, options, mediaFiles) {
   7067 
   7068 		var youtube = {},
   7069 		    apiStack = [],
   7070 		    readyState = 4;
   7071 
   7072 		var youTubeApi = null,
   7073 		    paused = true,
   7074 		    ended = false,
   7075 		    youTubeIframe = null,
   7076 		    volume = 1;
   7077 
   7078 		youtube.options = options;
   7079 		youtube.id = mediaElement.id + '_' + options.prefix;
   7080 		youtube.mediaElement = mediaElement;
   7081 
   7082 		var props = _mejs2.default.html5media.properties,
   7083 		    assignGettersSetters = function assignGettersSetters(propName) {
   7084 
   7085 			var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   7086 
   7087 			youtube['get' + capName] = function () {
   7088 				if (youTubeApi !== null) {
   7089 					var value = null;
   7090 
   7091 					switch (propName) {
   7092 						case 'currentTime':
   7093 							return youTubeApi.getCurrentTime();
   7094 						case 'duration':
   7095 							return youTubeApi.getDuration();
   7096 						case 'volume':
   7097 							volume = youTubeApi.getVolume() / 100;
   7098 							return volume;
   7099 						case 'playbackRate':
   7100 							return youTubeApi.getPlaybackRate();
   7101 						case 'paused':
   7102 							return paused;
   7103 						case 'ended':
   7104 							return ended;
   7105 						case 'muted':
   7106 							return youTubeApi.isMuted();
   7107 						case 'buffered':
   7108 							var percentLoaded = youTubeApi.getVideoLoadedFraction(),
   7109 							    duration = youTubeApi.getDuration();
   7110 							return {
   7111 								start: function start() {
   7112 									return 0;
   7113 								},
   7114 								end: function end() {
   7115 									return percentLoaded * duration;
   7116 								},
   7117 								length: 1
   7118 							};
   7119 						case 'src':
   7120 							return youTubeApi.getVideoUrl();
   7121 						case 'readyState':
   7122 							return readyState;
   7123 					}
   7124 
   7125 					return value;
   7126 				} else {
   7127 					return null;
   7128 				}
   7129 			};
   7130 
   7131 			youtube['set' + capName] = function (value) {
   7132 				if (youTubeApi !== null) {
   7133 					switch (propName) {
   7134 						case 'src':
   7135 							var url = typeof value === 'string' ? value : value[0].src,
   7136 							    _videoId = YouTubeApi.getYouTubeId(url);
   7137 
   7138 							if (mediaElement.originalNode.autoplay) {
   7139 								youTubeApi.loadVideoById(_videoId);
   7140 							} else {
   7141 								youTubeApi.cueVideoById(_videoId);
   7142 							}
   7143 							break;
   7144 						case 'currentTime':
   7145 							youTubeApi.seekTo(value);
   7146 							break;
   7147 						case 'muted':
   7148 							if (value) {
   7149 								youTubeApi.mute();
   7150 							} else {
   7151 								youTubeApi.unMute();
   7152 							}
   7153 							setTimeout(function () {
   7154 								var event = (0, _general.createEvent)('volumechange', youtube);
   7155 								mediaElement.dispatchEvent(event);
   7156 							}, 50);
   7157 							break;
   7158 						case 'volume':
   7159 							volume = value;
   7160 							youTubeApi.setVolume(value * 100);
   7161 							setTimeout(function () {
   7162 								var event = (0, _general.createEvent)('volumechange', youtube);
   7163 								mediaElement.dispatchEvent(event);
   7164 							}, 50);
   7165 							break;
   7166 						case 'playbackRate':
   7167 							youTubeApi.setPlaybackRate(value);
   7168 							setTimeout(function () {
   7169 								var event = (0, _general.createEvent)('ratechange', youtube);
   7170 								mediaElement.dispatchEvent(event);
   7171 							}, 50);
   7172 							break;
   7173 						case 'readyState':
   7174 							var event = (0, _general.createEvent)('canplay', youtube);
   7175 							mediaElement.dispatchEvent(event);
   7176 							break;
   7177 						default:
   7178 							
   7179 							break;
   7180 					}
   7181 				} else {
   7182 					apiStack.push({ type: 'set', propName: propName, value: value });
   7183 				}
   7184 			};
   7185 		};
   7186 
   7187 		for (var i = 0, total = props.length; i < total; i++) {
   7188 			assignGettersSetters(props[i]);
   7189 		}
   7190 
   7191 		var methods = _mejs2.default.html5media.methods,
   7192 		    assignMethods = function assignMethods(methodName) {
   7193 			youtube[methodName] = function () {
   7194 				if (youTubeApi !== null) {
   7195 					switch (methodName) {
   7196 						case 'play':
   7197 							paused = false;
   7198 							return youTubeApi.playVideo();
   7199 						case 'pause':
   7200 							paused = true;
   7201 							return youTubeApi.pauseVideo();
   7202 						case 'load':
   7203 							return null;
   7204 					}
   7205 				} else {
   7206 					apiStack.push({ type: 'call', methodName: methodName });
   7207 				}
   7208 			};
   7209 		};
   7210 
   7211 		for (var _i = 0, _total = methods.length; _i < _total; _i++) {
   7212 			assignMethods(methods[_i]);
   7213 		}
   7214 
   7215 		var errorHandler = function errorHandler(error) {
   7216 			var message = '';
   7217 			switch (error.data) {
   7218 				case 2:
   7219 					message = 'The request contains an invalid parameter value. Verify that video ID has 11 characters and that contains no invalid characters, such as exclamation points or asterisks.';
   7220 					break;
   7221 				case 5:
   7222 					message = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';
   7223 					break;
   7224 				case 100:
   7225 					message = 'The video requested was not found. Either video has been removed or has been marked as private.';
   7226 					break;
   7227 				case 101:
   7228 				case 105:
   7229 					message = 'The owner of the requested video does not allow it to be played in embedded players.';
   7230 					break;
   7231 				default:
   7232 					message = 'Unknown error.';
   7233 					break;
   7234 			}
   7235 			mediaElement.generateError('Code ' + error.data + ': ' + message, mediaFiles);
   7236 		};
   7237 
   7238 		var youtubeContainer = _document2.default.createElement('div');
   7239 		youtubeContainer.id = youtube.id;
   7240 
   7241 		if (youtube.options.youtube.nocookie) {
   7242 			mediaElement.originalNode.src = YouTubeApi.getYouTubeNoCookieUrl(mediaFiles[0].src);
   7243 		}
   7244 
   7245 		mediaElement.originalNode.parentNode.insertBefore(youtubeContainer, mediaElement.originalNode);
   7246 		mediaElement.originalNode.style.display = 'none';
   7247 
   7248 		var isAudio = mediaElement.originalNode.tagName.toLowerCase() === 'audio',
   7249 		    height = isAudio ? '1' : mediaElement.originalNode.height,
   7250 		    width = isAudio ? '1' : mediaElement.originalNode.width,
   7251 		    videoId = YouTubeApi.getYouTubeId(mediaFiles[0].src),
   7252 		    youtubeSettings = {
   7253 			id: youtube.id,
   7254 			containerId: youtubeContainer.id,
   7255 			videoId: videoId,
   7256 			height: height,
   7257 			width: width,
   7258 			playerVars: Object.assign({
   7259 				controls: 0,
   7260 				rel: 0,
   7261 				disablekb: 1,
   7262 				showinfo: 0,
   7263 				modestbranding: 0,
   7264 				html5: 1,
   7265 				iv_load_policy: 3
   7266 			}, youtube.options.youtube),
   7267 			origin: _window2.default.location.host,
   7268 			events: {
   7269 				onReady: function onReady(e) {
   7270 					mediaElement.youTubeApi = youTubeApi = e.target;
   7271 					mediaElement.youTubeState = {
   7272 						paused: true,
   7273 						ended: false
   7274 					};
   7275 
   7276 					if (apiStack.length) {
   7277 						for (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) {
   7278 
   7279 							var stackItem = apiStack[_i2];
   7280 
   7281 							if (stackItem.type === 'set') {
   7282 								var propName = stackItem.propName,
   7283 								    capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
   7284 
   7285 								youtube['set' + capName](stackItem.value);
   7286 							} else if (stackItem.type === 'call') {
   7287 								youtube[stackItem.methodName]();
   7288 							}
   7289 						}
   7290 					}
   7291 
   7292 					youTubeIframe = youTubeApi.getIframe();
   7293 
   7294 					if (mediaElement.originalNode.muted) {
   7295 						youTubeApi.mute();
   7296 					}
   7297 
   7298 					var events = ['mouseover', 'mouseout'],
   7299 					    assignEvents = function assignEvents(e) {
   7300 						var newEvent = (0, _general.createEvent)(e.type, youtube);
   7301 						mediaElement.dispatchEvent(newEvent);
   7302 					};
   7303 
   7304 					for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {
   7305 						youTubeIframe.addEventListener(events[_i3], assignEvents, false);
   7306 					}
   7307 
   7308 					var initEvents = ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
   7309 
   7310 					for (var _i4 = 0, _total4 = initEvents.length; _i4 < _total4; _i4++) {
   7311 						var event = (0, _general.createEvent)(initEvents[_i4], youtube);
   7312 						mediaElement.dispatchEvent(event);
   7313 					}
   7314 				},
   7315 				onStateChange: function onStateChange(e) {
   7316 					var events = [];
   7317 
   7318 					switch (e.data) {
   7319 						case -1:
   7320 							events = ['loadedmetadata'];
   7321 							paused = true;
   7322 							ended = false;
   7323 							break;
   7324 						case 0:
   7325 							events = ['ended'];
   7326 							paused = false;
   7327 							ended = !youtube.options.youtube.loop;
   7328 							if (!youtube.options.youtube.loop) {
   7329 								youtube.stopInterval();
   7330 							}
   7331 							break;
   7332 						case 1:
   7333 							events = ['play', 'playing'];
   7334 							paused = false;
   7335 							ended = false;
   7336 							youtube.startInterval();
   7337 							break;
   7338 						case 2:
   7339 							events = ['pause'];
   7340 							paused = true;
   7341 							ended = false;
   7342 							youtube.stopInterval();
   7343 							break;
   7344 						case 3:
   7345 							events = ['progress'];
   7346 							ended = false;
   7347 							break;
   7348 						case 5:
   7349 							events = ['loadeddata', 'loadedmetadata', 'canplay'];
   7350 							paused = true;
   7351 							ended = false;
   7352 							break;
   7353 					}
   7354 
   7355 					for (var _i5 = 0, _total5 = events.length; _i5 < _total5; _i5++) {
   7356 						var event = (0, _general.createEvent)(events[_i5], youtube);
   7357 						mediaElement.dispatchEvent(event);
   7358 					}
   7359 				},
   7360 				onError: function onError(e) {
   7361 					return errorHandler(e);
   7362 				}
   7363 			}
   7364 		};
   7365 
   7366 		if (isAudio || mediaElement.originalNode.hasAttribute('playsinline')) {
   7367 			youtubeSettings.playerVars.playsinline = 1;
   7368 		}
   7369 
   7370 		if (mediaElement.originalNode.controls) {
   7371 			youtubeSettings.playerVars.controls = 1;
   7372 		}
   7373 		if (mediaElement.originalNode.autoplay) {
   7374 			youtubeSettings.playerVars.autoplay = 1;
   7375 		}
   7376 		if (mediaElement.originalNode.loop) {
   7377 			youtubeSettings.playerVars.loop = 1;
   7378 		}
   7379 
   7380 		if ((youtubeSettings.playerVars.loop && parseInt(youtubeSettings.playerVars.loop, 10) === 1 || mediaElement.originalNode.src.indexOf('loop=') > -1) && !youtubeSettings.playerVars.playlist && mediaElement.originalNode.src.indexOf('playlist=') === -1) {
   7381 			youtubeSettings.playerVars.playlist = YouTubeApi.getYouTubeId(mediaElement.originalNode.src);
   7382 		}
   7383 
   7384 		YouTubeApi.enqueueIframe(youtubeSettings);
   7385 
   7386 		youtube.onEvent = function (eventName, player, _youTubeState) {
   7387 			if (_youTubeState !== null && _youTubeState !== undefined) {
   7388 				mediaElement.youTubeState = _youTubeState;
   7389 			}
   7390 		};
   7391 
   7392 		youtube.setSize = function (width, height) {
   7393 			if (youTubeApi !== null) {
   7394 				youTubeApi.setSize(width, height);
   7395 			}
   7396 		};
   7397 		youtube.hide = function () {
   7398 			youtube.stopInterval();
   7399 			youtube.pause();
   7400 			if (youTubeIframe) {
   7401 				youTubeIframe.style.display = 'none';
   7402 			}
   7403 		};
   7404 		youtube.show = function () {
   7405 			if (youTubeIframe) {
   7406 				youTubeIframe.style.display = '';
   7407 			}
   7408 		};
   7409 		youtube.destroy = function () {
   7410 			youTubeApi.destroy();
   7411 		};
   7412 		youtube.interval = null;
   7413 
   7414 		youtube.startInterval = function () {
   7415 			youtube.interval = setInterval(function () {
   7416 				var event = (0, _general.createEvent)('timeupdate', youtube);
   7417 				mediaElement.dispatchEvent(event);
   7418 			}, 250);
   7419 		};
   7420 		youtube.stopInterval = function () {
   7421 			if (youtube.interval) {
   7422 				clearInterval(youtube.interval);
   7423 			}
   7424 		};
   7425 		youtube.getPosterUrl = function () {
   7426 			var quality = options.youtube.imageQuality,
   7427 			    resolutions = ['default', 'hqdefault', 'mqdefault', 'sddefault', 'maxresdefault'],
   7428 			    id = YouTubeApi.getYouTubeId(mediaElement.originalNode.src);
   7429 			return quality && resolutions.indexOf(quality) > -1 && id ? 'https://img.youtube.com/vi/' + id + '/' + quality + '.jpg' : '';
   7430 		};
   7431 
   7432 		return youtube;
   7433 	}
   7434 };
   7435 
   7436 _window2.default.onYouTubePlayerAPIReady = function () {
   7437 	YouTubeApi.iFrameReady();
   7438 };
   7439 
   7440 _media.typeChecks.push(function (url) {
   7441 	return (/\/\/(www\.youtube|youtu\.?be)/i.test(url) ? 'video/x-youtube' : null
   7442 	);
   7443 });
   7444 
   7445 _renderer.renderer.add(YouTubeIframeRenderer);
   7446 
   7447 },{"2":2,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],25:[function(_dereq_,module,exports){
   7448 'use strict';
   7449 
   7450 Object.defineProperty(exports, "__esModule", {
   7451 	value: true
   7452 });
   7453 exports.cancelFullScreen = exports.requestFullScreen = exports.isFullScreen = exports.FULLSCREEN_EVENT_NAME = exports.HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = exports.SUPPORTS_NATIVE_HLS = exports.SUPPORT_PASSIVE_EVENT = exports.SUPPORT_POINTER_EVENTS = exports.HAS_MSE = exports.IS_STOCK_ANDROID = exports.IS_SAFARI = exports.IS_FIREFOX = exports.IS_CHROME = exports.IS_EDGE = exports.IS_IE = exports.IS_ANDROID = exports.IS_IOS = exports.IS_IPOD = exports.IS_IPHONE = exports.IS_IPAD = exports.UA = exports.NAV = undefined;
   7454 
   7455 var _window = _dereq_(3);
   7456 
   7457 var _window2 = _interopRequireDefault(_window);
   7458 
   7459 var _document = _dereq_(2);
   7460 
   7461 var _document2 = _interopRequireDefault(_document);
   7462 
   7463 var _mejs = _dereq_(7);
   7464 
   7465 var _mejs2 = _interopRequireDefault(_mejs);
   7466 
   7467 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   7468 
   7469 var NAV = exports.NAV = _window2.default.navigator;
   7470 var UA = exports.UA = NAV.userAgent.toLowerCase();
   7471 var IS_IPAD = exports.IS_IPAD = /ipad/i.test(UA) && !_window2.default.MSStream;
   7472 var IS_IPHONE = exports.IS_IPHONE = /iphone/i.test(UA) && !_window2.default.MSStream;
   7473 var IS_IPOD = exports.IS_IPOD = /ipod/i.test(UA) && !_window2.default.MSStream;
   7474 var IS_IOS = exports.IS_IOS = /ipad|iphone|ipod/i.test(UA) && !_window2.default.MSStream;
   7475 var IS_ANDROID = exports.IS_ANDROID = /android/i.test(UA);
   7476 var IS_IE = exports.IS_IE = /(trident|microsoft)/i.test(NAV.appName);
   7477 var IS_EDGE = exports.IS_EDGE = 'msLaunchUri' in NAV && !('documentMode' in _document2.default);
   7478 var IS_CHROME = exports.IS_CHROME = /chrome/i.test(UA);
   7479 var IS_FIREFOX = exports.IS_FIREFOX = /firefox/i.test(UA);
   7480 var IS_SAFARI = exports.IS_SAFARI = /safari/i.test(UA) && !IS_CHROME;
   7481 var IS_STOCK_ANDROID = exports.IS_STOCK_ANDROID = /^mozilla\/\d+\.\d+\s\(linux;\su;/i.test(UA);
   7482 var HAS_MSE = exports.HAS_MSE = 'MediaSource' in _window2.default;
   7483 var SUPPORT_POINTER_EVENTS = exports.SUPPORT_POINTER_EVENTS = function () {
   7484 	var element = _document2.default.createElement('x'),
   7485 	    documentElement = _document2.default.documentElement,
   7486 	    getComputedStyle = _window2.default.getComputedStyle;
   7487 
   7488 	if (!('pointerEvents' in element.style)) {
   7489 		return false;
   7490 	}
   7491 
   7492 	element.style.pointerEvents = 'auto';
   7493 	element.style.pointerEvents = 'x';
   7494 	documentElement.appendChild(element);
   7495 	var supports = getComputedStyle && (getComputedStyle(element, '') || {}).pointerEvents === 'auto';
   7496 	element.remove();
   7497 	return !!supports;
   7498 }();
   7499 
   7500 var SUPPORT_PASSIVE_EVENT = exports.SUPPORT_PASSIVE_EVENT = function () {
   7501 	var supportsPassive = false;
   7502 	try {
   7503 		var opts = Object.defineProperty({}, 'passive', {
   7504 			get: function get() {
   7505 				supportsPassive = true;
   7506 			}
   7507 		});
   7508 		_window2.default.addEventListener('test', null, opts);
   7509 	} catch (e) {}
   7510 
   7511 	return supportsPassive;
   7512 }();
   7513 
   7514 var html5Elements = ['source', 'track', 'audio', 'video'];
   7515 var video = void 0;
   7516 
   7517 for (var i = 0, total = html5Elements.length; i < total; i++) {
   7518 	video = _document2.default.createElement(html5Elements[i]);
   7519 }
   7520 
   7521 var SUPPORTS_NATIVE_HLS = exports.SUPPORTS_NATIVE_HLS = IS_SAFARI || IS_IE && /edge/i.test(UA);
   7522 
   7523 var hasiOSFullScreen = video.webkitEnterFullscreen !== undefined;
   7524 
   7525 var hasNativeFullscreen = video.requestFullscreen !== undefined;
   7526 
   7527 if (hasiOSFullScreen && /mac os x 10_5/i.test(UA)) {
   7528 	hasNativeFullscreen = false;
   7529 	hasiOSFullScreen = false;
   7530 }
   7531 
   7532 var hasWebkitNativeFullScreen = video.webkitRequestFullScreen !== undefined;
   7533 var hasMozNativeFullScreen = video.mozRequestFullScreen !== undefined;
   7534 var hasMsNativeFullScreen = video.msRequestFullscreen !== undefined;
   7535 var hasTrueNativeFullScreen = hasWebkitNativeFullScreen || hasMozNativeFullScreen || hasMsNativeFullScreen;
   7536 var nativeFullScreenEnabled = hasTrueNativeFullScreen;
   7537 var fullScreenEventName = '';
   7538 var isFullScreen = void 0,
   7539     requestFullScreen = void 0,
   7540     cancelFullScreen = void 0;
   7541 
   7542 if (hasMozNativeFullScreen) {
   7543 	nativeFullScreenEnabled = _document2.default.mozFullScreenEnabled;
   7544 } else if (hasMsNativeFullScreen) {
   7545 	nativeFullScreenEnabled = _document2.default.msFullscreenEnabled;
   7546 }
   7547 
   7548 if (IS_CHROME) {
   7549 	hasiOSFullScreen = false;
   7550 }
   7551 
   7552 if (hasTrueNativeFullScreen) {
   7553 	if (hasWebkitNativeFullScreen) {
   7554 		fullScreenEventName = 'webkitfullscreenchange';
   7555 	} else if (hasMozNativeFullScreen) {
   7556 		fullScreenEventName = 'fullscreenchange';
   7557 	} else if (hasMsNativeFullScreen) {
   7558 		fullScreenEventName = 'MSFullscreenChange';
   7559 	}
   7560 
   7561 	exports.isFullScreen = isFullScreen = function isFullScreen() {
   7562 		if (hasMozNativeFullScreen) {
   7563 			return _document2.default.mozFullScreen;
   7564 		} else if (hasWebkitNativeFullScreen) {
   7565 			return _document2.default.webkitIsFullScreen;
   7566 		} else if (hasMsNativeFullScreen) {
   7567 			return _document2.default.msFullscreenElement !== null;
   7568 		}
   7569 	};
   7570 
   7571 	exports.requestFullScreen = requestFullScreen = function requestFullScreen(el) {
   7572 		if (hasWebkitNativeFullScreen) {
   7573 			el.webkitRequestFullScreen();
   7574 		} else if (hasMozNativeFullScreen) {
   7575 			el.mozRequestFullScreen();
   7576 		} else if (hasMsNativeFullScreen) {
   7577 			el.msRequestFullscreen();
   7578 		}
   7579 	};
   7580 
   7581 	exports.cancelFullScreen = cancelFullScreen = function cancelFullScreen() {
   7582 		if (hasWebkitNativeFullScreen) {
   7583 			_document2.default.webkitCancelFullScreen();
   7584 		} else if (hasMozNativeFullScreen) {
   7585 			_document2.default.mozCancelFullScreen();
   7586 		} else if (hasMsNativeFullScreen) {
   7587 			_document2.default.msExitFullscreen();
   7588 		}
   7589 	};
   7590 }
   7591 
   7592 var HAS_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = hasNativeFullscreen;
   7593 var HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = hasWebkitNativeFullScreen;
   7594 var HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = hasMozNativeFullScreen;
   7595 var HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = hasMsNativeFullScreen;
   7596 var HAS_IOS_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = hasiOSFullScreen;
   7597 var HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_TRUE_NATIVE_FULLSCREEN = hasTrueNativeFullScreen;
   7598 var HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_NATIVE_FULLSCREEN_ENABLED = nativeFullScreenEnabled;
   7599 var FULLSCREEN_EVENT_NAME = exports.FULLSCREEN_EVENT_NAME = fullScreenEventName;
   7600 exports.isFullScreen = isFullScreen;
   7601 exports.requestFullScreen = requestFullScreen;
   7602 exports.cancelFullScreen = cancelFullScreen;
   7603 
   7604 
   7605 _mejs2.default.Features = _mejs2.default.Features || {};
   7606 _mejs2.default.Features.isiPad = IS_IPAD;
   7607 _mejs2.default.Features.isiPod = IS_IPOD;
   7608 _mejs2.default.Features.isiPhone = IS_IPHONE;
   7609 _mejs2.default.Features.isiOS = _mejs2.default.Features.isiPhone || _mejs2.default.Features.isiPad;
   7610 _mejs2.default.Features.isAndroid = IS_ANDROID;
   7611 _mejs2.default.Features.isIE = IS_IE;
   7612 _mejs2.default.Features.isEdge = IS_EDGE;
   7613 _mejs2.default.Features.isChrome = IS_CHROME;
   7614 _mejs2.default.Features.isFirefox = IS_FIREFOX;
   7615 _mejs2.default.Features.isSafari = IS_SAFARI;
   7616 _mejs2.default.Features.isStockAndroid = IS_STOCK_ANDROID;
   7617 _mejs2.default.Features.hasMSE = HAS_MSE;
   7618 _mejs2.default.Features.supportsNativeHLS = SUPPORTS_NATIVE_HLS;
   7619 _mejs2.default.Features.supportsPointerEvents = SUPPORT_POINTER_EVENTS;
   7620 _mejs2.default.Features.supportsPassiveEvent = SUPPORT_PASSIVE_EVENT;
   7621 _mejs2.default.Features.hasiOSFullScreen = HAS_IOS_FULLSCREEN;
   7622 _mejs2.default.Features.hasNativeFullscreen = HAS_NATIVE_FULLSCREEN;
   7623 _mejs2.default.Features.hasWebkitNativeFullScreen = HAS_WEBKIT_NATIVE_FULLSCREEN;
   7624 _mejs2.default.Features.hasMozNativeFullScreen = HAS_MOZ_NATIVE_FULLSCREEN;
   7625 _mejs2.default.Features.hasMsNativeFullScreen = HAS_MS_NATIVE_FULLSCREEN;
   7626 _mejs2.default.Features.hasTrueNativeFullScreen = HAS_TRUE_NATIVE_FULLSCREEN;
   7627 _mejs2.default.Features.nativeFullScreenEnabled = HAS_NATIVE_FULLSCREEN_ENABLED;
   7628 _mejs2.default.Features.fullScreenEventName = FULLSCREEN_EVENT_NAME;
   7629 _mejs2.default.Features.isFullScreen = isFullScreen;
   7630 _mejs2.default.Features.requestFullScreen = requestFullScreen;
   7631 _mejs2.default.Features.cancelFullScreen = cancelFullScreen;
   7632 
   7633 },{"2":2,"3":3,"7":7}],26:[function(_dereq_,module,exports){
   7634 'use strict';
   7635 
   7636 Object.defineProperty(exports, "__esModule", {
   7637 	value: true
   7638 });
   7639 exports.removeClass = exports.addClass = exports.hasClass = undefined;
   7640 exports.loadScript = loadScript;
   7641 exports.offset = offset;
   7642 exports.toggleClass = toggleClass;
   7643 exports.fadeOut = fadeOut;
   7644 exports.fadeIn = fadeIn;
   7645 exports.siblings = siblings;
   7646 exports.visible = visible;
   7647 exports.ajax = ajax;
   7648 
   7649 var _window = _dereq_(3);
   7650 
   7651 var _window2 = _interopRequireDefault(_window);
   7652 
   7653 var _document = _dereq_(2);
   7654 
   7655 var _document2 = _interopRequireDefault(_document);
   7656 
   7657 var _mejs = _dereq_(7);
   7658 
   7659 var _mejs2 = _interopRequireDefault(_mejs);
   7660 
   7661 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   7662 
   7663 function loadScript(url) {
   7664 	return new Promise(function (resolve, reject) {
   7665 		var script = _document2.default.createElement('script');
   7666 		script.src = url;
   7667 		script.async = true;
   7668 		script.onload = function () {
   7669 			script.remove();
   7670 			resolve();
   7671 		};
   7672 		script.onerror = function () {
   7673 			script.remove();
   7674 			reject();
   7675 		};
   7676 		_document2.default.head.appendChild(script);
   7677 	});
   7678 }
   7679 
   7680 function offset(el) {
   7681 	var rect = el.getBoundingClientRect(),
   7682 	    scrollLeft = _window2.default.pageXOffset || _document2.default.documentElement.scrollLeft,
   7683 	    scrollTop = _window2.default.pageYOffset || _document2.default.documentElement.scrollTop;
   7684 	return { top: rect.top + scrollTop, left: rect.left + scrollLeft };
   7685 }
   7686 
   7687 var hasClassMethod = void 0,
   7688     addClassMethod = void 0,
   7689     removeClassMethod = void 0;
   7690 
   7691 if ('classList' in _document2.default.documentElement) {
   7692 	hasClassMethod = function hasClassMethod(el, className) {
   7693 		return el.classList !== undefined && el.classList.contains(className);
   7694 	};
   7695 	addClassMethod = function addClassMethod(el, className) {
   7696 		return el.classList.add(className);
   7697 	};
   7698 	removeClassMethod = function removeClassMethod(el, className) {
   7699 		return el.classList.remove(className);
   7700 	};
   7701 } else {
   7702 	hasClassMethod = function hasClassMethod(el, className) {
   7703 		return new RegExp('\\b' + className + '\\b').test(el.className);
   7704 	};
   7705 	addClassMethod = function addClassMethod(el, className) {
   7706 		if (!hasClass(el, className)) {
   7707 			el.className += ' ' + className;
   7708 		}
   7709 	};
   7710 	removeClassMethod = function removeClassMethod(el, className) {
   7711 		el.className = el.className.replace(new RegExp('\\b' + className + '\\b', 'g'), '');
   7712 	};
   7713 }
   7714 
   7715 var hasClass = exports.hasClass = hasClassMethod;
   7716 var addClass = exports.addClass = addClassMethod;
   7717 var removeClass = exports.removeClass = removeClassMethod;
   7718 
   7719 function toggleClass(el, className) {
   7720 	hasClass(el, className) ? removeClass(el, className) : addClass(el, className);
   7721 }
   7722 
   7723 function fadeOut(el) {
   7724 	var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;
   7725 	var callback = arguments[2];
   7726 
   7727 	if (!el.style.opacity) {
   7728 		el.style.opacity = 1;
   7729 	}
   7730 
   7731 	var start = null;
   7732 	_window2.default.requestAnimationFrame(function animate(timestamp) {
   7733 		start = start || timestamp;
   7734 		var progress = timestamp - start;
   7735 		var opacity = parseFloat(1 - progress / duration, 2);
   7736 		el.style.opacity = opacity < 0 ? 0 : opacity;
   7737 		if (progress > duration) {
   7738 			if (callback && typeof callback === 'function') {
   7739 				callback();
   7740 			}
   7741 		} else {
   7742 			_window2.default.requestAnimationFrame(animate);
   7743 		}
   7744 	});
   7745 }
   7746 
   7747 function fadeIn(el) {
   7748 	var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400;
   7749 	var callback = arguments[2];
   7750 
   7751 	if (!el.style.opacity) {
   7752 		el.style.opacity = 0;
   7753 	}
   7754 
   7755 	var start = null;
   7756 	_window2.default.requestAnimationFrame(function animate(timestamp) {
   7757 		start = start || timestamp;
   7758 		var progress = timestamp - start;
   7759 		var opacity = parseFloat(progress / duration, 2);
   7760 		el.style.opacity = opacity > 1 ? 1 : opacity;
   7761 		if (progress > duration) {
   7762 			if (callback && typeof callback === 'function') {
   7763 				callback();
   7764 			}
   7765 		} else {
   7766 			_window2.default.requestAnimationFrame(animate);
   7767 		}
   7768 	});
   7769 }
   7770 
   7771 function siblings(el, filter) {
   7772 	var siblings = [];
   7773 	el = el.parentNode.firstChild;
   7774 	do {
   7775 		if (!filter || filter(el)) {
   7776 			siblings.push(el);
   7777 		}
   7778 	} while (el = el.nextSibling);
   7779 	return siblings;
   7780 }
   7781 
   7782 function visible(elem) {
   7783 	if (elem.getClientRects !== undefined && elem.getClientRects === 'function') {
   7784 		return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
   7785 	}
   7786 	return !!(elem.offsetWidth || elem.offsetHeight);
   7787 }
   7788 
   7789 function ajax(url, dataType, success, error) {
   7790 	var xhr = _window2.default.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
   7791 
   7792 	var type = 'application/x-www-form-urlencoded; charset=UTF-8',
   7793 	    completed = false,
   7794 	    accept = '*/'.concat('*');
   7795 
   7796 	switch (dataType) {
   7797 		case 'text':
   7798 			type = 'text/plain';
   7799 			break;
   7800 		case 'json':
   7801 			type = 'application/json, text/javascript';
   7802 			break;
   7803 		case 'html':
   7804 			type = 'text/html';
   7805 			break;
   7806 		case 'xml':
   7807 			type = 'application/xml, text/xml';
   7808 			break;
   7809 	}
   7810 
   7811 	if (type !== 'application/x-www-form-urlencoded') {
   7812 		accept = type + ', */*; q=0.01';
   7813 	}
   7814 
   7815 	if (xhr) {
   7816 		xhr.open('GET', url, true);
   7817 		xhr.setRequestHeader('Accept', accept);
   7818 		xhr.onreadystatechange = function () {
   7819 			if (completed) {
   7820 				return;
   7821 			}
   7822 
   7823 			if (xhr.readyState === 4) {
   7824 				if (xhr.status === 200) {
   7825 					completed = true;
   7826 					var data = void 0;
   7827 					switch (dataType) {
   7828 						case 'json':
   7829 							data = JSON.parse(xhr.responseText);
   7830 							break;
   7831 						case 'xml':
   7832 							data = xhr.responseXML;
   7833 							break;
   7834 						default:
   7835 							data = xhr.responseText;
   7836 							break;
   7837 					}
   7838 					success(data);
   7839 				} else if (typeof error === 'function') {
   7840 					error(xhr.status);
   7841 				}
   7842 			}
   7843 		};
   7844 
   7845 		xhr.send();
   7846 	}
   7847 }
   7848 
   7849 _mejs2.default.Utils = _mejs2.default.Utils || {};
   7850 _mejs2.default.Utils.offset = offset;
   7851 _mejs2.default.Utils.hasClass = hasClass;
   7852 _mejs2.default.Utils.addClass = addClass;
   7853 _mejs2.default.Utils.removeClass = removeClass;
   7854 _mejs2.default.Utils.toggleClass = toggleClass;
   7855 _mejs2.default.Utils.fadeIn = fadeIn;
   7856 _mejs2.default.Utils.fadeOut = fadeOut;
   7857 _mejs2.default.Utils.siblings = siblings;
   7858 _mejs2.default.Utils.visible = visible;
   7859 _mejs2.default.Utils.ajax = ajax;
   7860 _mejs2.default.Utils.loadScript = loadScript;
   7861 
   7862 },{"2":2,"3":3,"7":7}],27:[function(_dereq_,module,exports){
   7863 'use strict';
   7864 
   7865 Object.defineProperty(exports, "__esModule", {
   7866 	value: true
   7867 });
   7868 exports.escapeHTML = escapeHTML;
   7869 exports.debounce = debounce;
   7870 exports.isObjectEmpty = isObjectEmpty;
   7871 exports.splitEvents = splitEvents;
   7872 exports.createEvent = createEvent;
   7873 exports.isNodeAfter = isNodeAfter;
   7874 exports.isString = isString;
   7875 
   7876 var _mejs = _dereq_(7);
   7877 
   7878 var _mejs2 = _interopRequireDefault(_mejs);
   7879 
   7880 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   7881 
   7882 function escapeHTML(input) {
   7883 
   7884 	if (typeof input !== 'string') {
   7885 		throw new Error('Argument passed must be a string');
   7886 	}
   7887 
   7888 	var map = {
   7889 		'&': '&amp;',
   7890 		'<': '&lt;',
   7891 		'>': '&gt;',
   7892 		'"': '&quot;'
   7893 	};
   7894 
   7895 	return input.replace(/[&<>"]/g, function (c) {
   7896 		return map[c];
   7897 	});
   7898 }
   7899 
   7900 function debounce(func, wait) {
   7901 	var _this = this,
   7902 	    _arguments = arguments;
   7903 
   7904 	var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
   7905 
   7906 
   7907 	if (typeof func !== 'function') {
   7908 		throw new Error('First argument must be a function');
   7909 	}
   7910 
   7911 	if (typeof wait !== 'number') {
   7912 		throw new Error('Second argument must be a numeric value');
   7913 	}
   7914 
   7915 	var timeout = void 0;
   7916 	return function () {
   7917 		var context = _this,
   7918 		    args = _arguments;
   7919 		var later = function later() {
   7920 			timeout = null;
   7921 			if (!immediate) {
   7922 				func.apply(context, args);
   7923 			}
   7924 		};
   7925 		var callNow = immediate && !timeout;
   7926 		clearTimeout(timeout);
   7927 		timeout = setTimeout(later, wait);
   7928 
   7929 		if (callNow) {
   7930 			func.apply(context, args);
   7931 		}
   7932 	};
   7933 }
   7934 
   7935 function isObjectEmpty(instance) {
   7936 	return Object.getOwnPropertyNames(instance).length <= 0;
   7937 }
   7938 
   7939 function splitEvents(events, id) {
   7940 	var rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/;
   7941 
   7942 	var ret = { d: [], w: [] };
   7943 	(events || '').split(' ').forEach(function (v) {
   7944 		var eventName = '' + v + (id ? '.' + id : '');
   7945 
   7946 		if (eventName.startsWith('.')) {
   7947 			ret.d.push(eventName);
   7948 			ret.w.push(eventName);
   7949 		} else {
   7950 			ret[rwindow.test(v) ? 'w' : 'd'].push(eventName);
   7951 		}
   7952 	});
   7953 
   7954 	ret.d = ret.d.join(' ');
   7955 	ret.w = ret.w.join(' ');
   7956 	return ret;
   7957 }
   7958 
   7959 function createEvent(eventName, target) {
   7960 
   7961 	if (typeof eventName !== 'string') {
   7962 		throw new Error('Event name must be a string');
   7963 	}
   7964 
   7965 	var eventFrags = eventName.match(/([a-z]+\.([a-z]+))/i),
   7966 	    detail = {
   7967 		target: target
   7968 	};
   7969 
   7970 	if (eventFrags !== null) {
   7971 		eventName = eventFrags[1];
   7972 		detail.namespace = eventFrags[2];
   7973 	}
   7974 
   7975 	return new window.CustomEvent(eventName, {
   7976 		detail: detail
   7977 	});
   7978 }
   7979 
   7980 function isNodeAfter(sourceNode, targetNode) {
   7981 
   7982 	return !!(sourceNode && targetNode && sourceNode.compareDocumentPosition(targetNode) & 2);
   7983 }
   7984 
   7985 function isString(value) {
   7986 	return typeof value === 'string';
   7987 }
   7988 
   7989 _mejs2.default.Utils = _mejs2.default.Utils || {};
   7990 _mejs2.default.Utils.escapeHTML = escapeHTML;
   7991 _mejs2.default.Utils.debounce = debounce;
   7992 _mejs2.default.Utils.isObjectEmpty = isObjectEmpty;
   7993 _mejs2.default.Utils.splitEvents = splitEvents;
   7994 _mejs2.default.Utils.createEvent = createEvent;
   7995 _mejs2.default.Utils.isNodeAfter = isNodeAfter;
   7996 _mejs2.default.Utils.isString = isString;
   7997 
   7998 },{"7":7}],28:[function(_dereq_,module,exports){
   7999 'use strict';
   8000 
   8001 Object.defineProperty(exports, "__esModule", {
   8002 	value: true
   8003 });
   8004 exports.typeChecks = undefined;
   8005 exports.absolutizeUrl = absolutizeUrl;
   8006 exports.formatType = formatType;
   8007 exports.getMimeFromType = getMimeFromType;
   8008 exports.getTypeFromFile = getTypeFromFile;
   8009 exports.getExtension = getExtension;
   8010 exports.normalizeExtension = normalizeExtension;
   8011 
   8012 var _mejs = _dereq_(7);
   8013 
   8014 var _mejs2 = _interopRequireDefault(_mejs);
   8015 
   8016 var _general = _dereq_(27);
   8017 
   8018 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   8019 
   8020 var typeChecks = exports.typeChecks = [];
   8021 
   8022 function absolutizeUrl(url) {
   8023 
   8024 	if (typeof url !== 'string') {
   8025 		throw new Error('`url` argument must be a string');
   8026 	}
   8027 
   8028 	var el = document.createElement('div');
   8029 	el.innerHTML = '<a href="' + (0, _general.escapeHTML)(url) + '">x</a>';
   8030 	return el.firstChild.href;
   8031 }
   8032 
   8033 function formatType(url) {
   8034 	var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
   8035 
   8036 	return url && !type ? getTypeFromFile(url) : type;
   8037 }
   8038 
   8039 function getMimeFromType(type) {
   8040 
   8041 	if (typeof type !== 'string') {
   8042 		throw new Error('`type` argument must be a string');
   8043 	}
   8044 
   8045 	return type && type.indexOf(';') > -1 ? type.substr(0, type.indexOf(';')) : type;
   8046 }
   8047 
   8048 function getTypeFromFile(url) {
   8049 
   8050 	if (typeof url !== 'string') {
   8051 		throw new Error('`url` argument must be a string');
   8052 	}
   8053 
   8054 	for (var i = 0, total = typeChecks.length; i < total; i++) {
   8055 		var type = typeChecks[i](url);
   8056 
   8057 		if (type) {
   8058 			return type;
   8059 		}
   8060 	}
   8061 
   8062 	var ext = getExtension(url),
   8063 	    normalizedExt = normalizeExtension(ext);
   8064 
   8065 	var mime = 'video/mp4';
   8066 
   8067 	if (normalizedExt) {
   8068 		if (~['mp4', 'm4v', 'ogg', 'ogv', 'webm', 'flv', 'mpeg', 'mov'].indexOf(normalizedExt)) {
   8069 			mime = 'video/' + normalizedExt;
   8070 		} else if (~['mp3', 'oga', 'wav', 'mid', 'midi'].indexOf(normalizedExt)) {
   8071 			mime = 'audio/' + normalizedExt;
   8072 		}
   8073 	}
   8074 
   8075 	return mime;
   8076 }
   8077 
   8078 function getExtension(url) {
   8079 
   8080 	if (typeof url !== 'string') {
   8081 		throw new Error('`url` argument must be a string');
   8082 	}
   8083 
   8084 	var baseUrl = url.split('?')[0],
   8085 	    baseName = baseUrl.split('\\').pop().split('/').pop();
   8086 	return ~baseName.indexOf('.') ? baseName.substring(baseName.lastIndexOf('.') + 1) : '';
   8087 }
   8088 
   8089 function normalizeExtension(extension) {
   8090 
   8091 	if (typeof extension !== 'string') {
   8092 		throw new Error('`extension` argument must be a string');
   8093 	}
   8094 
   8095 	switch (extension) {
   8096 		case 'mp4':
   8097 		case 'm4v':
   8098 			return 'mp4';
   8099 		case 'webm':
   8100 		case 'webma':
   8101 		case 'webmv':
   8102 			return 'webm';
   8103 		case 'ogg':
   8104 		case 'oga':
   8105 		case 'ogv':
   8106 			return 'ogg';
   8107 		default:
   8108 			return extension;
   8109 	}
   8110 }
   8111 
   8112 _mejs2.default.Utils = _mejs2.default.Utils || {};
   8113 _mejs2.default.Utils.typeChecks = typeChecks;
   8114 _mejs2.default.Utils.absolutizeUrl = absolutizeUrl;
   8115 _mejs2.default.Utils.formatType = formatType;
   8116 _mejs2.default.Utils.getMimeFromType = getMimeFromType;
   8117 _mejs2.default.Utils.getTypeFromFile = getTypeFromFile;
   8118 _mejs2.default.Utils.getExtension = getExtension;
   8119 _mejs2.default.Utils.normalizeExtension = normalizeExtension;
   8120 
   8121 },{"27":27,"7":7}],29:[function(_dereq_,module,exports){
   8122 'use strict';
   8123 
   8124 var _document = _dereq_(2);
   8125 
   8126 var _document2 = _interopRequireDefault(_document);
   8127 
   8128 var _promisePolyfill = _dereq_(4);
   8129 
   8130 var _promisePolyfill2 = _interopRequireDefault(_promisePolyfill);
   8131 
   8132 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   8133 
   8134 (function (arr) {
   8135 	arr.forEach(function (item) {
   8136 		if (item.hasOwnProperty('remove')) {
   8137 			return;
   8138 		}
   8139 		Object.defineProperty(item, 'remove', {
   8140 			configurable: true,
   8141 			enumerable: true,
   8142 			writable: true,
   8143 			value: function remove() {
   8144 				this.parentNode.removeChild(this);
   8145 			}
   8146 		});
   8147 	});
   8148 })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
   8149 
   8150 (function () {
   8151 
   8152 	if (typeof window.CustomEvent === 'function') {
   8153 		return false;
   8154 	}
   8155 
   8156 	function CustomEvent(event, params) {
   8157 		params = params || { bubbles: false, cancelable: false, detail: undefined };
   8158 		var evt = _document2.default.createEvent('CustomEvent');
   8159 		evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
   8160 		return evt;
   8161 	}
   8162 
   8163 	CustomEvent.prototype = window.Event.prototype;
   8164 	window.CustomEvent = CustomEvent;
   8165 })();
   8166 
   8167 if (typeof Object.assign !== 'function') {
   8168 	Object.assign = function (target) {
   8169 
   8170 		if (target === null || target === undefined) {
   8171 			throw new TypeError('Cannot convert undefined or null to object');
   8172 		}
   8173 
   8174 		var to = Object(target);
   8175 
   8176 		for (var index = 1, total = arguments.length; index < total; index++) {
   8177 			var nextSource = arguments[index];
   8178 
   8179 			if (nextSource !== null) {
   8180 				for (var nextKey in nextSource) {
   8181 					if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
   8182 						to[nextKey] = nextSource[nextKey];
   8183 					}
   8184 				}
   8185 			}
   8186 		}
   8187 		return to;
   8188 	};
   8189 }
   8190 
   8191 if (!String.prototype.startsWith) {
   8192 	String.prototype.startsWith = function (searchString, position) {
   8193 		position = position || 0;
   8194 		return this.substr(position, searchString.length) === searchString;
   8195 	};
   8196 }
   8197 
   8198 if (!Element.prototype.matches) {
   8199 	Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {
   8200 		var matches = (this.document || this.ownerDocument).querySelectorAll(s),
   8201 		    i = matches.length - 1;
   8202 		while (--i >= 0 && matches.item(i) !== this) {}
   8203 		return i > -1;
   8204 	};
   8205 }
   8206 
   8207 if (window.Element && !Element.prototype.closest) {
   8208 	Element.prototype.closest = function (s) {
   8209 		var matches = (this.document || this.ownerDocument).querySelectorAll(s),
   8210 		    i = void 0,
   8211 		    el = this;
   8212 		do {
   8213 			i = matches.length;
   8214 			while (--i >= 0 && matches.item(i) !== el) {}
   8215 		} while (i < 0 && (el = el.parentElement));
   8216 		return el;
   8217 	};
   8218 }
   8219 
   8220 (function () {
   8221 	var lastTime = 0;
   8222 	var vendors = ['ms', 'moz', 'webkit', 'o'];
   8223 	for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
   8224 		window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
   8225 		window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
   8226 	}
   8227 
   8228 	if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback) {
   8229 		var currTime = new Date().getTime();
   8230 		var timeToCall = Math.max(0, 16 - (currTime - lastTime));
   8231 		var id = window.setTimeout(function () {
   8232 			callback(currTime + timeToCall);
   8233 		}, timeToCall);
   8234 		lastTime = currTime + timeToCall;
   8235 		return id;
   8236 	};
   8237 
   8238 	if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {
   8239 		clearTimeout(id);
   8240 	};
   8241 })();
   8242 
   8243 if (/firefox/i.test(navigator.userAgent)) {
   8244 	var getComputedStyle = window.getComputedStyle;
   8245 	window.getComputedStyle = function (el, pseudoEl) {
   8246 		var t = getComputedStyle(el, pseudoEl);
   8247 		return t === null ? { getPropertyValue: function getPropertyValue() {} } : t;
   8248 	};
   8249 }
   8250 
   8251 if (!window.Promise) {
   8252 	window.Promise = _promisePolyfill2.default;
   8253 }
   8254 
   8255 (function (constructor) {
   8256 	if (constructor && constructor.prototype && constructor.prototype.children === null) {
   8257 		Object.defineProperty(constructor.prototype, 'children', {
   8258 			get: function get() {
   8259 				var i = 0,
   8260 				    node = void 0,
   8261 				    nodes = this.childNodes,
   8262 				    children = [];
   8263 				while (node = nodes[i++]) {
   8264 					if (node.nodeType === 1) {
   8265 						children.push(node);
   8266 					}
   8267 				}
   8268 				return children;
   8269 			}
   8270 		});
   8271 	}
   8272 })(window.Node || window.Element);
   8273 
   8274 },{"2":2,"4":4}],30:[function(_dereq_,module,exports){
   8275 'use strict';
   8276 
   8277 Object.defineProperty(exports, "__esModule", {
   8278 	value: true
   8279 });
   8280 exports.isDropFrame = isDropFrame;
   8281 exports.secondsToTimeCode = secondsToTimeCode;
   8282 exports.timeCodeToSeconds = timeCodeToSeconds;
   8283 exports.calculateTimeFormat = calculateTimeFormat;
   8284 exports.convertSMPTEtoSeconds = convertSMPTEtoSeconds;
   8285 
   8286 var _mejs = _dereq_(7);
   8287 
   8288 var _mejs2 = _interopRequireDefault(_mejs);
   8289 
   8290 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   8291 
   8292 function isDropFrame() {
   8293 	var fps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25;
   8294 
   8295 	return !(fps % 1 === 0);
   8296 }
   8297 function secondsToTimeCode(time) {
   8298 	var forceHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
   8299 	var showFrameCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
   8300 	var fps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;
   8301 	var secondsDecimalLength = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
   8302 	var timeFormat = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'hh:mm:ss';
   8303 
   8304 
   8305 	time = !time || typeof time !== 'number' || time < 0 ? 0 : time;
   8306 
   8307 	var dropFrames = Math.round(fps * 0.066666),
   8308 	    timeBase = Math.round(fps),
   8309 	    framesPer24Hours = Math.round(fps * 3600) * 24,
   8310 	    framesPer10Minutes = Math.round(fps * 600),
   8311 	    frameSep = isDropFrame(fps) ? ';' : ':',
   8312 	    hours = void 0,
   8313 	    minutes = void 0,
   8314 	    seconds = void 0,
   8315 	    frames = void 0,
   8316 	    f = Math.round(time * fps);
   8317 
   8318 	if (isDropFrame(fps)) {
   8319 
   8320 		if (f < 0) {
   8321 			f = framesPer24Hours + f;
   8322 		}
   8323 
   8324 		f = f % framesPer24Hours;
   8325 
   8326 		var d = Math.floor(f / framesPer10Minutes);
   8327 		var m = f % framesPer10Minutes;
   8328 		f = f + dropFrames * 9 * d;
   8329 		if (m > dropFrames) {
   8330 			f = f + dropFrames * Math.floor((m - dropFrames) / Math.round(timeBase * 60 - dropFrames));
   8331 		}
   8332 
   8333 		var timeBaseDivision = Math.floor(f / timeBase);
   8334 
   8335 		hours = Math.floor(Math.floor(timeBaseDivision / 60) / 60);
   8336 		minutes = Math.floor(timeBaseDivision / 60) % 60;
   8337 
   8338 		if (showFrameCount) {
   8339 			seconds = timeBaseDivision % 60;
   8340 		} else {
   8341 			seconds = Math.floor(f / timeBase % 60).toFixed(secondsDecimalLength);
   8342 		}
   8343 	} else {
   8344 		hours = Math.floor(time / 3600) % 24;
   8345 		minutes = Math.floor(time / 60) % 60;
   8346 		if (showFrameCount) {
   8347 			seconds = Math.floor(time % 60);
   8348 		} else {
   8349 			seconds = Math.floor(time % 60).toFixed(secondsDecimalLength);
   8350 		}
   8351 	}
   8352 	hours = hours <= 0 ? 0 : hours;
   8353 	minutes = minutes <= 0 ? 0 : minutes;
   8354 	seconds = seconds <= 0 ? 0 : seconds;
   8355 
   8356 	seconds = seconds === 60 ? 0 : seconds;
   8357 	minutes = minutes === 60 ? 0 : minutes;
   8358 
   8359 	var timeFormatFrags = timeFormat.split(':');
   8360 	var timeFormatSettings = {};
   8361 	for (var i = 0, total = timeFormatFrags.length; i < total; ++i) {
   8362 		var unique = '';
   8363 		for (var j = 0, t = timeFormatFrags[i].length; j < t; j++) {
   8364 			if (unique.indexOf(timeFormatFrags[i][j]) < 0) {
   8365 				unique += timeFormatFrags[i][j];
   8366 			}
   8367 		}
   8368 		if (~['f', 's', 'm', 'h'].indexOf(unique)) {
   8369 			timeFormatSettings[unique] = timeFormatFrags[i].length;
   8370 		}
   8371 	}
   8372 
   8373 	var result = forceHours || hours > 0 ? (hours < 10 && timeFormatSettings.h > 1 ? '0' + hours : hours) + ':' : '';
   8374 	result += (minutes < 10 && timeFormatSettings.m > 1 ? '0' + minutes : minutes) + ':';
   8375 	result += '' + (seconds < 10 && timeFormatSettings.s > 1 ? '0' + seconds : seconds);
   8376 
   8377 	if (showFrameCount) {
   8378 		frames = (f % timeBase).toFixed(0);
   8379 		frames = frames <= 0 ? 0 : frames;
   8380 		result += frames < 10 && timeFormatSettings.f ? frameSep + '0' + frames : '' + frameSep + frames;
   8381 	}
   8382 
   8383 	return result;
   8384 }
   8385 
   8386 function timeCodeToSeconds(time) {
   8387 	var fps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 25;
   8388 
   8389 
   8390 	if (typeof time !== 'string') {
   8391 		throw new TypeError('Time must be a string');
   8392 	}
   8393 
   8394 	if (time.indexOf(';') > 0) {
   8395 		time = time.replace(';', ':');
   8396 	}
   8397 
   8398 	if (!/\d{2}(\:\d{2}){0,3}/i.test(time)) {
   8399 		throw new TypeError('Time code must have the format `00:00:00`');
   8400 	}
   8401 
   8402 	var parts = time.split(':');
   8403 
   8404 	var output = void 0,
   8405 	    hours = 0,
   8406 	    minutes = 0,
   8407 	    seconds = 0,
   8408 	    frames = 0,
   8409 	    totalMinutes = 0,
   8410 	    dropFrames = Math.round(fps * 0.066666),
   8411 	    timeBase = Math.round(fps),
   8412 	    hFrames = timeBase * 3600,
   8413 	    mFrames = timeBase * 60;
   8414 
   8415 	switch (parts.length) {
   8416 		default:
   8417 		case 1:
   8418 			seconds = parseInt(parts[0], 10);
   8419 			break;
   8420 		case 2:
   8421 			minutes = parseInt(parts[0], 10);
   8422 			seconds = parseInt(parts[1], 10);
   8423 			break;
   8424 		case 3:
   8425 			hours = parseInt(parts[0], 10);
   8426 			minutes = parseInt(parts[1], 10);
   8427 			seconds = parseInt(parts[2], 10);
   8428 			break;
   8429 		case 4:
   8430 			hours = parseInt(parts[0], 10);
   8431 			minutes = parseInt(parts[1], 10);
   8432 			seconds = parseInt(parts[2], 10);
   8433 			frames = parseInt(parts[3], 10);
   8434 			break;
   8435 	}
   8436 
   8437 	if (isDropFrame(fps)) {
   8438 		totalMinutes = 60 * hours + minutes;
   8439 		output = hFrames * hours + mFrames * minutes + timeBase * seconds + frames - dropFrames * (totalMinutes - Math.floor(totalMinutes / 10));
   8440 	} else {
   8441 		output = (hFrames * hours + mFrames * minutes + fps * seconds + frames) / fps;
   8442 	}
   8443 
   8444 	return parseFloat(output.toFixed(3));
   8445 }
   8446 
   8447 function calculateTimeFormat(time, options) {
   8448 	var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 25;
   8449 
   8450 
   8451 	time = !time || typeof time !== 'number' || time < 0 ? 0 : time;
   8452 
   8453 	var hours = Math.floor(time / 3600) % 24,
   8454 	    minutes = Math.floor(time / 60) % 60,
   8455 	    seconds = Math.floor(time % 60),
   8456 	    frames = Math.floor((time % 1 * fps).toFixed(3)),
   8457 	    lis = [[frames, 'f'], [seconds, 's'], [minutes, 'm'], [hours, 'h']];
   8458 
   8459 	var format = options.timeFormat,
   8460 	    firstTwoPlaces = format[1] === format[0],
   8461 	    separatorIndex = firstTwoPlaces ? 2 : 1,
   8462 	    separator = format.length < separatorIndex ? format[separatorIndex] : ':',
   8463 	    firstChar = format[0],
   8464 	    required = false;
   8465 
   8466 	for (var i = 0, len = lis.length; i < len; i++) {
   8467 		if (~format.indexOf(lis[i][1])) {
   8468 			required = true;
   8469 		} else if (required) {
   8470 			var hasNextValue = false;
   8471 			for (var j = i; j < len; j++) {
   8472 				if (lis[j][0] > 0) {
   8473 					hasNextValue = true;
   8474 					break;
   8475 				}
   8476 			}
   8477 
   8478 			if (!hasNextValue) {
   8479 				break;
   8480 			}
   8481 
   8482 			if (!firstTwoPlaces) {
   8483 				format = firstChar + format;
   8484 			}
   8485 			format = lis[i][1] + separator + format;
   8486 			if (firstTwoPlaces) {
   8487 				format = lis[i][1] + format;
   8488 			}
   8489 			firstChar = lis[i][1];
   8490 		}
   8491 	}
   8492 
   8493 	options.timeFormat = format;
   8494 }
   8495 
   8496 function convertSMPTEtoSeconds(SMPTE) {
   8497 
   8498 	if (typeof SMPTE !== 'string') {
   8499 		throw new TypeError('Argument must be a string value');
   8500 	}
   8501 
   8502 	SMPTE = SMPTE.replace(',', '.');
   8503 
   8504 	var decimalLen = ~SMPTE.indexOf('.') ? SMPTE.split('.')[1].length : 0;
   8505 
   8506 	var secs = 0,
   8507 	    multiplier = 1;
   8508 
   8509 	SMPTE = SMPTE.split(':').reverse();
   8510 
   8511 	for (var i = 0, total = SMPTE.length; i < total; i++) {
   8512 		multiplier = 1;
   8513 		if (i > 0) {
   8514 			multiplier = Math.pow(60, i);
   8515 		}
   8516 		secs += Number(SMPTE[i]) * multiplier;
   8517 	}
   8518 	return Number(secs.toFixed(decimalLen));
   8519 }
   8520 
   8521 _mejs2.default.Utils = _mejs2.default.Utils || {};
   8522 _mejs2.default.Utils.secondsToTimeCode = secondsToTimeCode;
   8523 _mejs2.default.Utils.timeCodeToSeconds = timeCodeToSeconds;
   8524 _mejs2.default.Utils.calculateTimeFormat = calculateTimeFormat;
   8525 _mejs2.default.Utils.convertSMPTEtoSeconds = convertSMPTEtoSeconds;
   8526 
   8527 },{"7":7}]},{},[29,6,5,15,23,20,19,21,22,24,16,18,17,9,10,11,12,13,14]);