(function(define) {
    'use strict';
    define('video/09_play_placeholder.js', [], function() {
    /**
     * Play placeholder control module.
     * @exports video/09_play_placeholder.js
     * @constructor
     * @param {Object} state The object containing the state of the video
     * @param {Object} i18n The object containing strings with translations.
     * @return {jquery Promise}
     */
        var PlayPlaceholder = function(state, i18n) {
            if (!(this instanceof PlayPlaceholder)) {
                return new PlayPlaceholder(state, i18n);
            }

            _.bindAll(this, 'onClick', 'hide', 'show', 'destroy');
            this.state = state;
            this.state.videoPlayPlaceholder = this;
            this.i18n = i18n;
            this.initialize();

            return $.Deferred().resolve().promise();
        };

        PlayPlaceholder.prototype = {
            destroy: function() {
                this.el.off('click', this.onClick);
                this.state.el.on({
                    destroy: this.destroy,
                    play: this.hide,
                    'ended pause': this.show
                });
                this.hide();
                delete this.state.videoPlayPlaceholder;
            },

        /**
         * Indicates whether the placeholder should be shown. We display it
         * for html5 videos on iPad and Android devices.
         * @return {Boolean}
         */
            shouldBeShown: function() {
                return /iPad|Android/i.test(this.state.isTouch[0]) && !this.state.isYoutubeType();
            },

        /** Initializes the module. */
            initialize: function() {
                if (!this.shouldBeShown()) {
                    return false;
                }

                this.el = this.state.el.find('.btn-play');
                this.bindHandlers();
                this.show();
            },

        /** Bind any necessary function callbacks to DOM events. */
            bindHandlers: function() {
                this.el.on('click', this.onClick);
                this.state.el.on({
                    destroy: this.destroy,
                    play: this.hide,
                    'ended pause': this.show
                });
            },

            onClick: function() {
                this.state.videoCommands.execute('play');
            },

            hide: function() {
                this.el
                .addClass('is-hidden')
                .attr({'aria-hidden': 'true', tabindex: -1});
            },

            show: function() {
                this.el
                .removeClass('is-hidden')
                .attr({'aria-hidden': 'false', tabindex: 0});
            }
        };

        return PlayPlaceholder;
    });
}(RequireJS.define));
