function CheckboxList_ChangeCheckBoxState(id, checkState)
{
	var cb = document.getElementById(id);
	if(cb != null && cb.type == 'checkbox')
	{
		cb.checked = checkState;
	}
}

function CheckboxList_IsMatch(biggerId, smallerId)
{
	if(smallerId == null || smallerId == '')
	{
		return true;
	}
	return biggerId.match(new RegExp(smallerId));
}

function CheckboxList_ChangeAllCheckboxStates(parent, smallId, checkState)
{
	var elements = document.getElementsByTagName("INPUT"); // CheckBoxes are converted to INPUTs
	// Iterates through all of the relevant checkboxes and updates their value to the checkState input parameter
	for(i = 0; i < elements.length; i++)
	{
		if(elements[i].type == 'checkbox')
		{
			if(CheckboxList_IsMatch(elements[i].id, parent) && CheckboxList_IsMatch(elements[i].id, smallId))
			{
				CheckboxList_ChangeCheckBoxState(elements[i].id, checkState);
			}
		}
	}
}

function CheckboxList_GetNumberOfSelectedBoxes(parent, smallId)
{
	var selectedElementsCount = 0;
	var elements = document.getElementsByTagName("INPUT"); // CheckBoxes are converted to INPUTs
	// Iterates through all of the relevant checkboxes and updates their value to the checkState input parameter
	for(i = 0; i < elements.length; i++)
	{
		if(elements[i].type == 'checkbox')
		{
			if(CheckboxList_IsMatch(elements[i].id, parent) && CheckboxList_IsMatch(elements[i].id, smallId) && elements[i].checked)
			{
				selectedElementsCount++;
			}
		}
	}
	return selectedElementsCount;
}

function CheckboxList_OnlyOneCanBeSelected(parent, smallId, messageOnlyOneCanBeSelected)
{
	var selectedElementsCount = CheckboxList_GetNumberOfSelectedBoxes(parent, smallId);
	if(selectedElementsCount != 1)
	{
		alert(messageOnlyOneCanBeSelected);
		return false;
	}
	return true;
}

function CheckboxList_AtLeastOneMustBeSelected(parent, smallId, messageAtLeastOneMustBeSelected)
{
	var selectedElementsCount = CheckboxList_GetNumberOfSelectedBoxes(parent, smallId);
	if(selectedElementsCount < 1)
	{
		alert(messageAtLeastOneMustBeSelected);
		return false;
	}
	return true;	
}

function CheckboxList_ChangeHeaderAsNeeded(parent, smallRowLevelId, smallHeaderLevelId)
{
	var elements = document.getElementsByTagName("INPUT"); // CheckBoxes are converted to INPUTs
	// Whenever a checkbox is toggled, we need to check the Header checkbox if ALL of the GridView checkboxes are checked, and uncheck it otherwise
	var headerChecked = true;
	var headerId = null;
	for(i = 0; i < elements.length; i++)
	{
		if(elements[i].type == 'checkbox')
		{		
			if(CheckboxList_IsMatch(elements[i].id, parent) && CheckboxList_IsMatch(elements[i].id, smallHeaderLevelId))
			{
				headerId = elements[i].id;
			}
			if(CheckboxList_IsMatch(elements[i].id, parent) && CheckboxList_IsMatch(elements[i].id, smallRowLevelId) && !elements[i].checked)
			{
				headerChecked = false;
			}
		}
	}
	if(headerId != null)
	{
		CheckboxList_ChangeCheckBoxState(headerId, headerChecked);
	}
}
