;(function (define) {
    'use strict';
    define(["jquery", "underscore", "underscore.string", "common/js/components/views/feedback"],
        function($, _, str, SystemFeedbackView) {
            str = str || _.str;
        var Alert = SystemFeedbackView.extend({
            options: $.extend({}, SystemFeedbackView.prototype.options, {
                type: "alert"
            }),
            slide_speed: 900,
            show: function() {
                SystemFeedbackView.prototype.show.apply(this, arguments);
                this.$el.hide();
                this.$el.slideDown(this.slide_speed);
                return this;
            },
            hide: function () {
                this.$el.slideUp({
                    duration: this.slide_speed
                });
                setTimeout(_.bind(SystemFeedbackView.prototype.hide, this, arguments),
                           this.slideSpeed);
            }
        });

        // create Alert.Warning, Alert.Confirmation, etc
        var capitalCamel, intents;
        capitalCamel = _.compose(str.capitalize, str.camelize);
        intents = ["warning", "error", "confirmation", "announcement", "step-required", "help", "mini"];
        _.each(intents, function(intent) {
            var subclass;
            subclass = Alert.extend({
                options: $.extend({}, Alert.prototype.options, {
                    intent: intent
                })
            });
            Alert[capitalCamel(intent)] = subclass;
        });

        return Alert;
    });
}).call(this, define || RequireJS.define);
