window.cmu = window.cmu || {};

(function (ns) {

    ns.taggingGame = function (spec, my) {
        var that;

        spec = spec || {};

        // ------------------------------------------------------------------
        // Shared properties
        // ------------------------------------------------------------------

        my = my || {};
        my.logger = gj.logging.getLogger('cmu.taggingGame');

        my.$viewNode = $(spec.viewNode);
        my.drawer = spec.drawer;

        that = {};

        that.requestedSelectedTab = null;

        // ------------------------------------------------------------------
        // Private methods
        // ------------------------------------------------------------------

        var init = function () {
            my.logger.debug('init()');

            my.$viewNode.find('a.startGame').click(function (e) {
                start();
                return false;
            });
        };

        var start = function () {
            my.logger.debug('start()');
            my.drawer.login(function () {
                my.$viewNode.find('form').submit();
            });
        };

        var stop = function () {
            my.logger.debug('stop()');
            my.$viewNode.addClass('ended');
        };

        var startOver = function () {
            my.logger.debug('startOver()');
            my.$viewNode.removeClass('ended');
            my.$viewNode.find('form.nextObject').submit();
        };

        var submit = function (form) {
            my.logger.debug('submit()');
            my.$viewNode.addClass('loading');
            gj.ajaxForm(form, null, null, function (data) {
                var $data = $(data);
                my.$viewNode.replaceWith($data);
                my.$viewNode = $data;
                my.$viewNode.find('form.addTag input.text').focus();
                $('html, body').animate({scrollTop: 0});

                my.$viewNode.find('a.submitForm').click(function () {
                    var $form = $(this).closest('form');
                    $form.submit();
                });
            });
        };

        // ------------------------------------------------------------------
        // Public methods
        // ------------------------------------------------------------------

        that.submit = submit;
        that.stop = stop;
        that.startOver = startOver;

        // ------------------------------------------------------------------
        // Constructor
        // ------------------------------------------------------------------

        init();
        return that;
    };

})(window.cmu);

