define(function () { 'use strict'; var radioButtonsGroup = {}; // ## RadioButtonsGroup // // A group of elements where only one can be active at the same // time. // // When an element is clicked, it becomes the active one. The // active element gains the 'active' CSS class. // // Parameters: // // * **elems** Array of elements of the group. radioButtonsGroup.RadioButtonsGroup = function (elems) { this.elems = elems; var active; for (var i = 0; i < elems.length; i++) { var elem = elems[i]; elem.addEventListener("click", clickHandler); // The first element that has 'active' CSS class is made // the active of the group on startup. if (active === undefined && elem.classList.contains('active')) { active = elem; } } // If no element has 'active' CSS class, the first element of // the array is made the active. if (active === undefined) { active = elems[0]; updateClasses(); } function clickHandler(evt) { active = evt.target; updateClasses(); } function updateClasses() { for (i = 0; i < elems.length; i++) { var elem = elems[i]; elem.classList.remove('active'); } active.classList.add('active'); } // Get the active element. this.getActive = function () { return active; }; }; return radioButtonsGroup; });