﻿var radioButtonGrouper = new function() {
    Array.prototype.contains = function(value) {
        for (var i = 0; i < this.length; i++) {
            if (this[i] === value) { return true; }
        }
        return false;
    };
    this.Groups = new Object();
    this.Busy = false;

    $(document).ready(function() {
        var items = $('input:radio'); // Get all radio buttons
        var itemsAdded = new Array();
        for (var i = 0; i < items.length; i++) {
            var groupName = $(items[i]).attr('htmlgroupname');
            if (!groupName) { groupName = items[i].name; }

            if (!itemsAdded.contains(groupName)) {
                itemsAdded.push(groupName);
                radioButtonGrouper.Groups[groupName] = {
                    GroupName: groupName,
                    Items: new Array()
                };
            }
            radioButtonGrouper.Groups[groupName].Items.push(items[i]);
            items[i].groupName = groupName;
        }
        items.click(radioButtonGrouper.RadioChanged);

        // Ensure that all the groups only have one item selected
        radioButtonGrouper.Busy = true;
        for (var i = 0; i < itemsAdded.length; i++) {
            var groupItem = radioButtonGrouper.Groups[itemsAdded[i]];
            var oneIsChecked = false;
            for (var j = 0; j < groupItem.Items.length; j++) {
                if (groupItem.Items[j].checked) {
                    if (oneIsChecked) {
                        groupItem.Items[j].checked = false;
                    } else {
                        oneIsChecked = true;
                    }
                }
            }
        }
        radioButtonGrouper.Busy = false;
    });

    this.RadioChanged = function(eventObject) {
        if (radioButtonGrouper.Busy) { return; }
        var groupItem = radioButtonGrouper.Groups[this.groupName];
        if (!groupItem) { return; }

        for (var i = 0; i < groupItem.Items.length; i++) {
            if (groupItem.Items[i] !== this) {
                groupItem.Items[i].checked = false;
            }
        }
    };
}