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();
});