text: (function(define) {
      'use strict';
      define('video/09_bumper.js', [], function() {
      /**
       * VideoBumper module.
       * @exports video/09_bumper.js
       * @constructor
       * @param {Object} player The player factory.
       * @param {Object} state The object containing the state of the video
       * @return {jquery Promise}
       */
          var VideoBumper = function(player, state) {
              if (!(this instanceof VideoBumper)) {
                  return new VideoBumper(player, state);
              }
  
              _.bindAll(
              this, 'showMainVideoHandler', 'destroy', 'skipByDuration', 'destroyAndResolve'
          );
              this.dfd = $.Deferred();
              this.element = state.el;
              this.element.addClass('is-bumper');
              this.player = player;
              this.state = state;
              this.doNotShowAgain = false;
              this.state.videoBumper = this;
              this.bindHandlers();
              this.initialize();
              this.maxBumperDuration = 35; // seconds
          };
  
          VideoBumper.prototype = {
              initialize: function() {
                  this.player();
              },
  
              getPromise: function() {
                  return this.dfd.promise();
              },
  
              showMainVideoHandler: function() {
                  this.state.storage.setItem('isBumperShown', true);
                  setTimeout(function() {
                      this.saveState();
                      this.showMainVideo();
                  }.bind(this), 20);
              },
  
              destroyAndResolve: function() {
                  this.destroy();
                  this.dfd.resolve();
              },
  
              showMainVideo: function() {
                  if (this.state.videoPlayer) {
                      this.destroyAndResolve();
                  } else {
                      this.state.el.on('initialize', this.destroyAndResolve);
                  }
              },
  
              skip: function() {
                  this.element.trigger('skip', [this.doNotShowAgain]);
                  this.showMainVideoHandler();
              },
  
              skipAndDoNotShowAgain: function() {
                  this.doNotShowAgain = true;
                  this.skip();
              },
  
              skipByDuration: function(event, time) {
                  if (time > this.maxBumperDuration) {
                      this.element.trigger('ended');
                  }
              },
  
              bindHandlers: function() {
                  var events = ['ended', 'error'].join(' ');
                  this.element.on(events, this.showMainVideoHandler);
                  this.element.on('timeupdate', this.skipByDuration);
              },
  
              saveState: function() {
                  var info = {bumper_last_view_date: true};
                  if (this.doNotShowAgain) {
                      _.extend(info, {bumper_do_not_show_again: true});
                  }
                  if (this.state.videoSaveStatePlugin) {
                      this.state.videoSaveStatePlugin.saveState(true, info);
                  }
              },
  
              destroy: function() {
                  var events = ['ended', 'error'].join(' ');
                  this.element.off(events, this.showMainVideoHandler);
                  this.element.off({
                      timeupdate: this.skipByDuration,
                      initialize: this.destroyAndResolve
                  });
                  this.element.removeClass('is-bumper');
                  if (_.isFunction(this.state.videoPlayer.destroy)) {
                      this.state.videoPlayer.destroy();
                  }
                  delete this.state.videoBumper;
              }
          };
  
          return VideoBumper;
      });
  }(RequireJS.define));
  