// v1.7.3.7.a
// ***************************************************************************
// GridViewJS.js
// Contains the functions needed to operate the GridView
// ***************************************************************************
var __OldClassArray = new Array();   // Contains the row classes changed
// ***************************************************************************
// FUNCTION: validateNavigation(id)
// DESCRIPTION: Gets all the CheckBoxes in Grid containing 'me'.
// ***************************************************************************
function validateNavigation(navigation)
{
	if (navigation.disabled)
	{
		return false;
	}
	return true;
}

// ***************************************************************************
// FUNCTION: CheckAllClick()
// DESCRIPTION: Checks all the CheckBoxes.
// ***************************************************************************
function CheckAllClick(me) {
	var myIUTag = getMyIU(me);
	var checkBoxesArray = getChildCheckBoxes(getMyFirstSubTag(myIUTag, __divTAG, __PopulationIdPart));
	var checkMultiSelection = GetCheckBox(checkBoxesArray, __MultiSelId);
	var checkAllValue = me.checked;

	for(i=0; i<checkBoxesArray.length; i++)
	{
		if ((checkBoxesArray[i].id != me.id) && (checkBoxesArray[i] != checkMultiSelection))
		{
			if (checkBoxesArray[i].checked != checkAllValue) {
				checkBoxesArray[i].checked = me.checked;
				selectRow(checkBoxesArray[i], checkAllValue);
			}
		}
	}
	me.checked = checkAllValue;
	if(checkMultiSelection != null) {
		checkMultiSelection.checked = true;
	}
	UpdateIUNavigations(myIUTag);
}
// ***************************************************************************

// ***************************************************************************
// FUNCTION: ClearAllExceptMe()
// DESCRIPTION: Clears all the CheckBoxes except 'me'.
// ***************************************************************************
function ClearAllExceptMe(me)
{
	var myIUTag = getMyIU(me);
	var checkBoxesArray = getChildCheckBoxes(getMyFirstSubTag(myIUTag, __divTAG, __PopulationIdPart));

	for(i=0; i<checkBoxesArray.length; i++)
	{
		if (checkBoxesArray[i].id != me.id) {
			if (checkBoxesArray[i].checked) {
				checkBoxesArray[i].checked = false;
				selectRow(checkBoxesArray[i], false);
			}
		}
	}
}
// ***************************************************************************

// ***************************************************************************
// FUNCTION: CheckBoxClick()
// DESCRIPTION: Manages the click event handler.
// ***************************************************************************
function CheckBoxClick(me, multiselectionAllowed) {
	var trElement =  getRow(me);
	if (trElement == null) {
		return;
	}
	var myIUTag = getMyIU(me);
	if ((!me.checked && trElement.className != __CSSRowSelected) ||
		(me.checked && trElement.className == __CSSRowSelected)) {
		me.click();
	}

	if(!multiselectionAllowed) {
		// Multiselection not allowed.
		ClearAllExceptMe(me);
	} else {
		// Multiselection allowed.
		var checkBoxesArray = getChildCheckBoxes(getMyFirstSubTag(myIUTag, __divTAG, __PopulationIdPart));

		if(GetCheckBox(checkBoxesArray, __MultiSelId).checked) {
			var checkAll = GetCheckBox(checkBoxesArray, __CheckAllId);

			if(checkAll.checked) {
				checkAll.checked = false;
			}
		} else {
			ClearAllExceptMe(me);
		}
	}
	UpdateIUNavigations(myIUTag);
	selectRow(me, me.checked);
}
// ***************************************************************************

// ***************************************************************************
// FUNCTION: selectRow(element, selected)
// DESCRIPTION: selects the row containing 'element' according
//              to 'selected'.
// ***************************************************************************
function selectRow(element, selected) {
	var trElement =  getRow(element);
	if (trElement == null) {
		return;
	}
	if ((trElement.className == __CSSRowSelected && selected)||
		(trElement.className != __CSSRowSelected && !selected)) {
		return;
	}
	setSelectClass(trElement, selected);
}
// ***************************************************************************

// ***************************************************************************
// FUNCTION: GetCheckBox(checkBoxArray, checkBoxIdPart)
// DESCRIPTION: Gets the CheckBox control in 'checkBoxArray' which id contains
//              'checkBoxIdPart'.
// ***************************************************************************
function GetCheckBox(checkBoxArray, checkBoxIdPart) {
	for(var i = 0; i < checkBoxArray.length; i++)
	{
		var o = checkBoxArray[i];
		if(o.id.indexOf(checkBoxIdPart) != -1)
		{
			return o;
		}
	}
	return null;
}
// ***************************************************************************

// ***************************************************************************
// FUNCTION: MultiSelectionClick()
// DESCRIPTION: Manages the multiple selection event handler.
// ***************************************************************************
function MultiSelectionClick(me) {
	var myIUTag = getMyIU(me);
	if(!me.checked)
	{
		var checkBoxesArray = getChildCheckBoxes(getMyFirstSubTag(myIUTag, __divTAG, __PopulationIdPart));
		var n = 0;
		for(i=0; i<checkBoxesArray.length; i++)
		{
			if (checkBoxesArray[i].id == me.id)
			{
				continue;
			}

			if(checkBoxesArray[i].checked)
			{
				n++;
			}
			if(n > 1)
			{
				break;
			}
		}

		if(n > 1)
		{
			ClearAllExceptMe(me);
		}
	}
	
	UpdateIUNavigations(myIUTag);
}
// ***************************************************************************


// ***************************************************************************
// FUNCTION: computeNavigationsState(NavigationDivID)
// DESCRIPTION: enables and disables navigations.
// ***************************************************************************
function computeEnabledNavigationState(IUTag) {
	var active = false;
	var checkBoxesArray = getChildCheckBoxes(getMyFirstSubTag(IUTag, __divTAG, __PopulationIdPart));

	for(i=0; i<checkBoxesArray.length; i++) {
		var o = checkBoxesArray[i];
		if (o.type == __checkControl) {
			if (((o.id.lastIndexOf(__MultiSelId) > -1)) || (o.id.lastIndexOf(__CheckAllId) > -1)) {
				continue;
			}

			if(o.checked) {
				active = true;
				break;
			}
		}
	}
	return active;
}

// ***************************************************************************
// FUNCTION: getChildCheckBoxes(StartTag)
// DESCRIPTION: returns all the checkboxes inside the tag 'StartTag'.
// ***************************************************************************
function getChildCheckBoxes(StartTag)
{
    	if (StartTag == null) {
        	return new Array();
    	}

	var tagChildNodes = StartTag.childNodes;
	var checkBoxesArray = new Array();
	var auxArray;

	for (var i = 0; i < tagChildNodes.length; i++) {
		var o = tagChildNodes[i];
		if (o.type != null && o.type == __checkControl && !o.disabled) {
			checkBoxesArray[checkBoxesArray.length] = o;
		} else {
			auxArray = getChildCheckBoxes(o);
			for (var n = 0; n < auxArray.length; n++) {
				checkBoxesArray[checkBoxesArray.length] = auxArray[n];
			}
		}
	}
	return checkBoxesArray;
}
// ***************************************************************************


