var btn_group_events = {}; var btn_group_events_objects = {}; function IsButtonGroup(btn_group) { if (btn_group) return $(btn_group).hasClass("btn-group"); return false; } function IsButtonGroupMember(element) { if (element) return $(element).hasClass("btn-group-member"); return false; } function IsButtonGroupCheckBox(btn_group) { if (btn_group) { var result = $(btn_group).hasClass("btn-group"); result &= $(btn_group).hasClass("btn-group-check-box"); return result; } return false; } function GetButtonGroupActiveButton(btn_group) { var result = null; if (IsButtonGroup(btn_group)) { $(btn_group).children(".btn-group-active").each(function (btn_index, btn_child) { result = btn_child; return; }); } return result; } function GetButtonGroupButtonByValue(btn_group, value) { var result = null; if (IsButtonGroup(btn_group)) { $(btn_group).children(".btn-group-member").each(function (btn_index, btn_child) { if (btn_child.value == value) { result = btn_child; return; } }); } return result; } function GetButtonGroupValue(btn_group) { if (IsButtonGroup(btn_group)) { var active_button = GetButtonGroupActiveButton(btn_group); if (active_button) return active_button.value; } return ""; } function DoChangeButtonGroupActiveButton(btn_group, active_button, trigger_event) { if (trigger_event === undefined) trigger_event = true; $(active_button).addClass("btn-group-active"); UpdateButtonGroupHiddenInputValue(btn_group, active_button); $(btn_group).children(".btn-group-member").each(function (btn_index, btn_child) { if (btn_child != $(active_button)[0]) $(btn_child).removeClass("btn-group-active"); }); // trigger event if (trigger_event) { var event_handler = GetUniqueElementID(btn_group); if (btn_group_events[event_handler]) btn_group_events[event_handler](btn_group, $(active_button).val(), btn_group_events_objects[event_handler]); } } function SetButtonGroupValue(btn_group, value) { if (IsButtonGroup(btn_group)) { var active_button = GetButtonGroupButtonByValue(btn_group, value); if (active_button) DoChangeButtonGroupActiveButton(btn_group, active_button); } } function SetButtonGroupCheckBoxValue(btn_group, value, trigger_event) { if (IsButtonGroupCheckBox(btn_group)) { var active_button = null; if ((value === true) || (value == "true")) active_button = GetButtonGroupButtonByValue(btn_group, "true"); else if ((value === false) || (value == "false")) active_button = GetButtonGroupButtonByValue(btn_group, "false"); if (active_button) DoChangeButtonGroupActiveButton(btn_group, active_button, trigger_event); } } function ClearButtonGroupCheckBoxValue(btn_group) { var active_button = GetButtonGroupActiveButton(btn_group); if (active_button) $(active_button).removeClass("btn-group-active"); } function IsButtonGroupCheckBoxOn(btn_group) { if (IsButtonGroupCheckBox(btn_group)) { return (GetButtonGroupValue(btn_group) == "true"); } return false; } function IsButtonGroupCheckBoxOff(btn_group) { return (!IsButtonGroupCheckBoxOn(btn_group)); } function IsButtonGroupSelected(btn_group) { return (GetButtonGroupValue(btn_group) != ""); } function UpdateButtonGroupHiddenInputValue(btn_group, active_btn_group_member) { if ((btn_group) && (active_btn_group_member) && (IsButtonGroup(btn_group))) { $(btn_group).children("input").each(function (index, child) { child.value = active_btn_group_member.value; return; }); } } function FillButtonGroupMemberHandlers() { $(".btn-group-member").each(function() { var object = this; $(this).on("click", function() { DoChangeButtonGroupActiveButton($(object).parent(), object); }); }); } function AddButtonGroupEventListener(btn_group, on_change, data_object) { if (IsButtonGroup(btn_group)) { var element_id = GetUniqueElementID(btn_group); btn_group_events[element_id] = on_change; data_object = (data_object == undefined) ? null : data_object; btn_group_events_objects[element_id] = data_object; } } function AddButtonGroupEventListenerForAll(on_change, data_object) { $(".btn-group").each(function() { var element_id = GetUniqueElementID($(this)[0]); // add event listener only if it is empty if (!btn_group_events[element_id]) AddButtonGroupEventListener($(this)[0], on_change, data_object); }); } $(document).ready(function() { FillButtonGroupMemberHandlers(); });