/*
 * NOTE: the /mod/chat/gui_header_js/ is not a real plugin,
 * ideally this code should be in /mod/chat/module.js
 */

/**
 * @namespace M.mod_chat_header
 */
M.mod_chat_header = M.mod_chat_ajax || {};

/**
 * Init header based Chat UI - frame input
 *
 * @namespace M.mod_chat_header
 * @function
 * @param {YUI} Y
 * @param {Boolean} forcerefreshasap refresh users frame asap
 */
M.mod_chat_header.init_insert = function(Y, forcerefreshasap) {
    if (forcerefreshasap) {
        parent.jsupdate.location.href = parent.jsupdate.document.anchors[0].href;
    }
    parent.input.enableForm();
};

/**
 * Init header based Chat UI - frame input
 *
 * @namespace M.mod_chat_header
 * @function
 * @param {YUI} Y
 */
M.mod_chat_header.init_input = function(Y) {

    var inputframe = {

        waitflag : false,       // True when a submission is in progress

        /**
         * Initialises the input frame
         *
         * @function
         */
        init : function() {
            Y.one('#inputForm').on('submit', this.submit, this);
        },
        /**
         * Enables the input form
         * @this {M.mod_chat.js}
         */
        enable_form : function() {
            var el = Y.one('#input_chat_message');
            this.waitflag = false;
            el.set('className', '');
            el.focus();
        },
        /**
         * Submits the entered message
         * @param {Event} e
         */
        submit : function(e) {
            e.halt();
            if (this.waitflag) {
                return false;
            }
            this.waitflag = true;
            var inputchatmessage = Y.one('#input_chat_message');
            Y.one('#insert_chat_message').set('value', inputchatmessage.get('value'));
            inputchatmessage.set('value', '');
            inputchatmessage.addClass('wait');
            Y.one('#sendForm').submit();
            this.enable_form();
            return false;
        }

    };

    inputframe.init();
};

/**
 * Init header based Chat UI - frame users
 *
 * @namespace M.mod_chat_header
 * @function
 * @param {YUI} Y
 * @param {Array} users
 */
M.mod_chat_header.init_users = function(Y, users) {

    var usersframe = {

        timer : null,           // Stores the timer object
        timeout : 1,            // The seconds between updates
        users : [],             // An array of users

        /**
         * Initialises the frame with list of users
         *
         * @function
         * @this
         * @param {Array|null} users
         */
        init : function(users) {
            this.users = users;
            this.start();
            Y.one(document.body).on('unload', this.stop, this);
        },
        /**
         * Starts the update timeout
         *
         * @function
         * @this
         */
        start : function() {
            this.timer = setTimeout(function(self) {
                self.update();
            }, this.timeout * 1000, this);
        },
        /**
         * Stops the update timeout
         * @function
         * @this
         */
        stop : function() {
            clearTimeout(this.timer);
        },
        /**
         * Updates the user information
         *
         * @function
         * @this
         */
        update : function() {
            for (var i in this.users) {
                var el  = Y.one('#uidle' + this.users[i]);
                if (el) {
                    var parts = el.get('innerHTML').split(':');
                    var time = this.timeout + (parseInt(parts[0], 10) * 60) + parseInt(parts[1], 10);
                    var min = Math.floor(time / 60);
                    var sec = time % 60;
                    el.set('innerHTML', ((min < 10) ? "0" : "") + min + ":" + ((sec < 10) ? "0" : "") + sec);
                }
            }
            this.start();
        }
    };

    usersframe.init(users);
};
