YUI.add('moodle-question-qbankmanager', function (Y, NAME) {

// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/*
 * Question Bank Management.
 *
 * @package    question
 * @copyright  2014 Andrew Nicols
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

/**
 * Questionbank Management.
 *
 * @module moodle-question-qbankmanager
 */

/**
 * Question Bank Management.
 *
 * @class M.question.qbankmanager
 */

var manager = {
    /**
     * A reference to the header checkbox.
     *
     * @property _header
     * @type Node
     * @private
     */
    _header: null,

    /**
     * A reference to the add to quiz button.
     *
     * @property _addbutton
     * @type Node
     * @private
     */
    _addbutton: null,

    /**
     * The ID of the first checkbox on the page.
     *
     * @property _firstCheckbox
     * @type Node
     * @private
     */
    _firstCheckbox: null,

    /**
     * Set up the Question Bank Manager.
     *
     * @method init
     */
    init: function() {
        // Find the header checkbox, and set the initial values.
        this._header = Y.one('#qbheadercheckbox');
        if (!this._header) {
            return;
        }
        this._header.setAttrs({
            disabled: false,
            title: M.util.get_string('selectall', 'moodle')
        });

        this._header.on('click', this._headerClick, this);

        this._addbutton = Y.one('.modulespecificbuttonscontainer input[name="add"]');
        // input[name="add"] is not always available.
        if (this._addbutton) {
            this._addbutton.setAttrs({
                disabled: true
            });

            this._header.on('click', this._questionClick, this);
            Y.one('.categoryquestionscontainer').delegate('change', this._questionClick,
                'td.checkbox input[type="checkbox"]', this);
        }

        // Store the first checkbox details.
        var table = this._header.ancestor('table');
        this._firstCheckbox = table.one('tbody tr td.checkbox input');
    },

    /**
     * Handle toggling of the header checkbox.
     *
     * @method _headerClick
     * @private
     */
    _headerClick: function() {
        // Get the list of questions we affect.
        var categoryQuestions = Y.one('#categoryquestions')
                .all('[type=checkbox],[type=radio]');

        // We base the state of all of the questions on the state of the first.
        if (this._firstCheckbox.get('checked')) {
            categoryQuestions.set('checked', false);
            this._header.setAttribute('title', M.util.get_string('selectall', 'moodle'));
        } else {
            categoryQuestions.set('checked', true);
            this._header.setAttribute('title', M.util.get_string('deselectall', 'moodle'));
        }

        this._header.set('checked', false);
    },

    /**
     * Handle toggling of a question checkbox.
     *
     * @method _questionClick
     * @private
     */
    _questionClick: function() {
        var areChecked = Y.all('td.checkbox input[type="checkbox"]:checked').size();
        this._addbutton.setAttrs({
            disabled: (areChecked === 0)
        });
    }
};

M.question = M.question || {};
M.question.qbankmanager = M.question.qbankmanager || manager;


}, '@VERSION@', {"requires": ["node", "selector-css3"]});
