﻿var GridMenuTimer = 0;

//Method that handles the action executed by clicking the show/hide toggle image/button
function GridExpandCollapse(imgID, obj1ID) {
	var img = document.getElementById(imgID);
	var obj1 = document.getElementById(obj1ID);

	if (obj1.style.display == "none") {
		obj1.style.display = "block";
		img.src = "Resources.aspx?Res=collapse.gif";
	}
	else {
		obj1.style.display = "none";
		img.src = "Resources.aspx?Res=expand.gif";
	}
}

function NoMethod(id) { return true; }

//Method that handles the action executed by clicking on the delete image/button
function DeleteItem(grid, rowID, itemID, message, BeforeDeletefunctionName, AfterDeletefunctionName) {
	var doContinue = true;
	if (BeforeDeletefunctionName)
		doContinue = BeforeDeletefunctionName(itemID, rowID);

	if (doContinue) {
		if (confirm(message)) {
			grid.deleteItem(grid.getItemFromClientId(rowID));
			if (AfterDeletefunctionName)
				AfterDeletefunctionName(itemID);
		}
	}
}

function onCallbackError(excString) {
	alert('An error has occured.');
}

function GridAddID(gridItm, hiddenField) {
	var idd = gridItm.Id + ";";
	//add the id only if it is NOT already added
	if ((hiddenField.value).indexOf(";" + idd) < 0) { hiddenField.value += idd; }
}

function GridRemoveID(gridItm, hiddenField) {
	var idd = gridItm.Id + ";";
	if ((hiddenField.value).indexOf(";" + idd) >= 0) { hiddenField.value = (hiddenField.value).replace(idd, ""); }
}

//Method that handles the action executed by clicking on the 'Select Page' or 'Clear Page' options
//from the drop down menu that appears be clicking on the header of the check box column
function GridCheckPage(grid, IsChecked, columnNumber) {
	var gridItem; var itemIndex = 0; var tr;
	var GridCheckedIds = document.getElementById("GridCheckedIds_" + grid.Id);
	var AllSelected = document.getElementById("AllSelected_" + grid.Id)
	var allItemsSelected = AllSelected.value;
	var chBox;

	//Hide the menu
	document.getElementById("ChkHeaderMenu_" + grid.Id).style.display = "none";

	//Loop through the items in the current page and check or uncheck them all           
	while (gridItem = grid.get_table().getRow(itemIndex)) {
		chBox = document.getElementById("checkbox_" + grid.Id + "__" + gridItem.get_index());
		if (chBox != null && typeof chBox != 'undefined') {
			chBox.checked = IsChecked;
			tr = document.getElementById(grid.Id + "_row_" + gridItem.get_index());
			//tr.className = (IsChecked) ? "CheckedRow" : "Row";
			if (IsChecked) {
				if (tr.className.indexOf('GreenRow') >= 0)
					tr.previousCSSClass = 'GreenRow';
				tr.className = 'CheckedRow';
			}
			else 
				tr.className = (typeof (tr.previousCSSClass) != 'undefined' && tr.previousCSSClass == 'GreenRow') ? 'GreenRow' : 'Row';
			
			
			//if the check all flag is set to false then put the item's id in the hidden field only if the page items are selected           
			if (allItemsSelected == "false") {
				if (IsChecked) { GridAddID(gridItem, GridCheckedIds); }
				else { GridRemoveID(gridItem, GridCheckedIds); }
			}
			//if the check all flag is set to true then put the item's id in the hidden field only if the page items are NOT selected 
			else if (allItemsSelected == "true") {
				if (IsChecked) {
					AllSelected.value = "false";
					GridAddID(gridItem, GridCheckedIds);
				}
				else { GridAddID(gridItem, GridCheckedIds); }
			}
		}
		itemIndex++;
	}

	//Change the column's header image
	document.getElementById("chkHeaderImg_" + grid.Id).src = (itemIndex > 0 && IsChecked) ? "Resources.aspx?Res=Grid.Checked.gif" : "Resources.aspx?Res=Grid.Unchecked.gif";
}

//Method that handles the action executed by clicking on the 'Select All' or 'Clear All' options
//from the drop down menu that appears be clicking on the header of the check box column
function GridCheckAll(grid, IsChecked, columnNumber) {
	var gridItem; var itemIndex = 0; var chkBox; var tr;

	//Hide the menu
	document.getElementById("ChkHeaderMenu_" + grid.Id).style.display = "none";

	//Clear the hidden field that holds the selected Ids.
	document.getElementById("GridCheckedIds_" + grid.Id).value = ";;";

	//Loop through the items in the current page and check them all
	while (gridItem = grid.get_table().getRow(itemIndex)) {
		chkBox = document.getElementById("checkbox_" + grid.Id + "__" + gridItem.get_index());
		if (chkBox != null && typeof chkBox != 'undefined') {
			chkBox.checked = IsChecked;
			tr = document.getElementById(grid.Id + "_row_" + gridItem.get_index());
			//tr.className = (IsChecked) ? "CheckedRow" : "Row";
			if (IsChecked) {
				if (tr.className.indexOf('GreenRow') >= 0)
					tr.previousCSSClass = 'GreenRow';
				tr.className = 'CheckedRow';
			}
			else 
				tr.className = (typeof (tr.previousCSSClass) != 'undefined' && tr.previousCSSClass == 'GreenRow') ? 'GreenRow' : 'Row';
		}
		itemIndex++;
	}

	//Set the value of the hidden field that holds the 'Select All' flag
	document.getElementById("AllSelected_" + grid.Id).value = (IsChecked) ? "true" : "false";

	//Change the column's header image
	document.getElementById("chkHeaderImg_" + grid.Id).src = (itemIndex > 0 && IsChecked) ? "Resources.aspx?Res=Grid.Checked.gif" : "Resources.aspx?Res=Grid.Unchecked.gif";
}

//Method that handles the action executed by clicking on a check box from the check box column
function GridCheckBoxClick(grid, checkbox, itemId, columnNumber, allowMultipleSelections) {
	var itemIndex = 0; var checkedCount = 0; var chBox;
	var row = grid.getItemFromClientId(itemId);
	var GridCheckedIds = document.getElementById("GridCheckedIds_" + grid.Id);
	var tr = document.getElementById(grid.Id + "_row_" + row.get_index());
	var allItemsSelected = document.getElementById("AllSelected_" + grid.Id).value;
	var chkBox; var ltr;

	//tr.className = (checkbox.checked) ? "CheckedRow" : "Row";

	if (checkbox.checked) {
		if (tr.className.indexOf('GreenRow') >= 0)
			tr.previousCSSClass = 'GreenRow';
		tr.className = 'CheckedRow';
	}
	else 
		tr.className = (typeof (tr.previousCSSClass) != 'undefined' && tr.previousCSSClass == 'GreenRow') ? 'GreenRow' : 'Row';

	//if the check all flag is set to false then put the item's id in the hidden field only if the page items are selected           
	if (allItemsSelected == "false") {
		if (checkbox.checked) {
			if (!allowMultipleSelections) {
				//Clear the hidden field that holds the selected Ids.
				document.getElementById("GridCheckedIds_" + grid.Id).value = ";";
				//Loop through the items in the current page and uncheck all but the current one
				while (gridItem = grid.get_table().getRow(itemIndex)) {
					chkBox = document.getElementById("checkbox_" + grid.Id + "__" + gridItem.get_index());
					if (chkBox != null && typeof chkBox != 'undefined') {
						ltr = document.getElementById(grid.Id + "_row_" + gridItem.get_index());
						if (row.Id != gridItem.Id) {
							chkBox.checked = false;
							ltr.className = "Row";
						}
					}
					itemIndex++;
				}
			}
			GridAddID(row, GridCheckedIds);
		}
		else
			GridRemoveID(row, GridCheckedIds);
	}
	//if the check all flag is set to true then put the item's id in the hidden field only if the page items are NOT selected 
	else if (allItemsSelected == "true") {
		if (checkbox.checked)
			GridRemoveID(row, GridCheckedIds);
		else 
			GridAddID(row, GridCheckedIds);
	}

	if (allowMultipleSelections) {
		itemIndex = 0;
		//Loop through the items in the current page and count the checked items     
		while (gridItem = grid.get_table().getRow(itemIndex)) {
			chBox = document.getElementById("checkbox_" + grid.Id + "__" + gridItem.get_index());
			if (chBox != null && typeof chBox != 'undefined' && chBox.checked) { checkedCount++ };
			itemIndex++;
		}

		//Change the column's header image
		document.getElementById("chkHeaderImg_" + grid.Id).src = (itemIndex > 0 && itemIndex == checkedCount) ? "Resources.aspx?Res=Grid.Checked.gif" : "Resources.aspx?Res=Grid.Unchecked.gif";
	}
}

//Clears the default events that the grid has assigned to each row cell
function RemoveTDEvents(tr, sender) {
	var i;
	tds = tr.getElementsByTagName("td");
	for (i = 0; i < tds.length; i++) {
		tds[i].onmouseup = null;
		tds[i].onmousedown = null;
		tds[i].ondblclick = null;
		tds[i].onclick = null;
	}
}

//Method that handles the action executed when the grid completes its call back
function GridCallbackComplete(sender, eventArgs) {
	var ChkImgheader = document.getElementById("chkHeaderImg_" + sender.Id);
	
	//If check box column is present
	if (ChkImgheader != null && typeof (ChkImgheader) != 'undefined') {
		//Groups are expanded when the grid loads a page. That is necessary because of the grid's behaviour to 
		//inject the rows of the group on the first expand action. Therefore having the grid to load with the groups
		//collapsed the rows and therefore the check boxes are not available in the DOM. Because we want the check boxes
		//to work properly but it is preferable for the grid to load the groups as collapsed we load the grid with is
		//groups expanded and then after the call back completes we hide them again.
		var arGroups = sender.get_levels()[0].get_groups();
		if (arGroups != null && typeof (arGroups) != 'undefined' && arGroups.length > 0) {
			var obj;
			var objImage;
			for (var i = 0; i < arGroups.length; i++) {
				obj = document.getElementById(sender.Id + "_group_" + i);
				if (obj)
					obj.style.display = 'none';

				obj = sender.GetGroupFromPath(i + "");
				if (obj) {
					obj.Expanded = false;
					objImage = document.getElementById(sender.Id + "_expcolgrp_" + i + "");
					if (objImage)
						objImage.innerHTML = obj.GetExpandCollapseHtml();
				}
			}
		}
	}

	HandleCheckBoxColumn(sender);
}

function HandleCheckBoxColumn(grid) {
	var GridCheckedIds = document.getElementById("GridCheckedIds_" + grid.Id);
	var allItemsSelected = document.getElementById("AllSelected_" + grid.Id);
	var ChkImgheader = document.getElementById("chkHeaderImg_" + grid.Id);
	var itemIndex = 0; var tr; var tds; var i; var checkedCount = 0;

	var tbl = grid.get_table();
	while (gridItem = tbl.getRow(itemIndex)) {
		tr = document.getElementById(grid.Id + "_row_" + gridItem.get_index());
		if (tr != null && typeof (tr) != 'undefined') {
			chkBox = document.getElementById("checkbox_" + grid.Id + "__" + gridItem.get_index());

			if (chkBox != null && typeof (chkBox) != 'undefined') {
				//if the check all flag is set to false then in order to check the check box see if its id is in the hidden field.
				if (allItemsSelected.value == "false") {
					chkBox.checked = ((GridCheckedIds.value).indexOf(";" + gridItem.Id + ";") >= 0);
					if (chkBox.checked) {
						tr.className = "CheckedRow";
						checkedCount++;
					}
				}
				//if the check all flag is set to true then in order to check the check box see if its id is NOT in the hidden field.
				if (allItemsSelected.value == "true") {
					chkBox.checked = ((GridCheckedIds.value).indexOf(";" + gridItem.Id + ";") < 0);
					if (chkBox.checked) {
						tr.className = "CheckedRow";
						checkedCount++;
					}
				}
			}
		}

		itemIndex++;
	}

	//Change the column's header image
	if (ChkImgheader != null && typeof (ChkImgheader) != 'undefined')
		ChkImgheader.src = (itemIndex > 0 && itemIndex == checkedCount) ? "Resources.aspx?Res=Grid.Checked.gif" : "Resources.aspx?Res=Grid.Unchecked.gif";
}

//Method that handles the action executed when the grid if first loaded
function GridLoad(sender, eventArgs) {
	GridCallbackComplete(sender, eventArgs);
}

//Method that handles the action executed by clicking on the header of the check box column
function ShowHideChkHeaderMenu(id) {
	var menu = document.getElementById(id);
	if (menu.style.display == "block")
		menu.style.display = "none";
	else
		menu.style.display = "block";
}

function ShowChkHeaderMenu(id) {
	var menu = document.getElementById(id);
	menu.style.display = "block";
}

function HideChkHeaderMenu(id) {
	var menu = document.getElementById(id);
	menu.style.display = "none";
}

function GridSelectRow(sender, itemID, rowID, functionName) {
	functionName(itemID, rowID);
	var itemIndex = 0;

	while (gridItem = sender.get_table().getRow(itemIndex)) {
		tr = document.getElementById(sender.Id + "_row_" + gridItem.get_index());
		if (tr != null && typeof tr != 'undefined') {
			if (gridItem.get_clientId() == rowID)
				tr.className = "CheckedRow";
			else
				tr.className = "Row";
		}
		itemIndex++;
	}	
}

function GridCustomEdit(itemID, rowID, functionName) {
	functionName(itemID, rowID);
}

function GridHideCommandsMenu(menuId) {
	GridMenuTimer = setTimeout("HideGridsMenu('" + menuId + "')", 1200);	
}

function HideGridsMenu(menuId) {
	var menu = document.getElementById(menuId);
	if (typeof(menu) != 'undefined' && menu != null)
		menu.style.display = "none";
}

function GridShowCommandsMenu(menuId, menuImageId) {
	HideAllGridMenus(menuId);
	clearTimeout(GridMenuTimer);
	
	var menu = document.getElementById(menuId);
	if (menu.style.display == "none") {
		var menuImage = document.getElementById(menuImageId);

		menu.style.display = "block";

		var IEv = (navigator.appName == 'Microsoft Internet Explorer') ?
                            parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]) : -1;

		if (IEv == 7 || IEv == 6) //IE7
		{
			menu.style.left = ((menuImage.offsetLeft - menu.offsetWidth) + 15) + "px";
			menu.style.top = (menuImage.offsetTop + 15) + "px";
		}
		else //mozilla, safari, opera etc
		{
			menu.style.left = ((menuImage.offsetLeft - menu.offsetWidth) + 15) + "px";
			menu.style.top = (menuImage.offsetTop + 15) + "px";
		}
	}
}

function HideAllGridMenus(exceptionMenuId) {
	var divs = document.getElementsByTagName("div");
	var div;
	var menuId = '';

	if (typeof (exceptionMenuId) != 'undefined' && exceptionMenuId != null)
		menuId = exceptionMenuId;
	
	for (i = 0; i < divs.length; i++) {
		div = divs[i];
		if (div.className == "GridsCommandsMenu" && div.id != menuId) {
			div.style.display = "none";
		}
	}
}

function RegisterCSSFileOnAsyncPostBack(href) {
	var head = document.getElementsByTagName('head')[0];
	var existingOne = document.getElementById('RegisterCSSFile')
	if (existingOne)
		head.removeChild(existingOne);

	var link = document.createElement('link');
	link.id = "RegisterCSSFile";
	link.href = href;
	link.rel = 'stylesheet';
	link.type = 'text/css';
	head.appendChild(link);
}

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();