
function getFormId(e) {
	var evnt = e;
	if (!evnt){
		evnt = window.event;
	}
	var node;
	if (evnt.target) {
		node = evnt.target;
	}
	else if (evnt.srcElement) {
		node = evnt.srcElement;
	}
	if (node.nodeType == 3) // defeat Safari bug
		node = node.parentNode;
	if (node.elements)		// node is a form tag
		return node.id;
				
	var parent = null;						
	while (parent=node.parentNode) {
		if(!parent) {
			return;
		}
		if (parent.elements) {		// parent is a form tag
			return parent.id;
		}
		node = parent;		
	}
	
	return null;			
}
	
function getViewId(e) {
	var formId = getFormId(e);
	if (formId == null)
		return '';
	var i = formId.indexOf(':');
	if (i == -1) 
		return '';
	return formId.substr(0, i);
}
	
function pageNumSubmition(e) {
	var viewId = getViewId(e);
	getById(viewId+':browseTableForm:gotoPage').onclick();
	return false;
}	

function clickPerPage(e) {
	var viewId = getViewId(e);
	getById(viewId+':browseTableForm:perPage').onclick();
	return false;
}

//***************************************************************************************************************
//* select/deselect all

function selAll(e) {
	var formId = getFormId(e);
	var form = getById(formId);
	for (var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].type=='checkbox' && form.elements[i].name.indexOf('genericTable')>-1){
			form.elements[i].checked =true;
		}
	}
}
		
function deSelAll(e) {
	var formId = getFormId(e);
	var form = getById(formId);
	for (var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].type=='checkbox' && form.elements[i].name.indexOf('genericTable')>-1){
			form.elements[i].checked =false;
		}
	}
}

function saveSelections(e) {
	var formId = getFormId(e);
	var selections = getSelections(e, 'genericTable');
	getById(formId+':selections').value = selections;
	if((selections.indexOf('1')>=0) == false) {
		alert("Please make a selection from the list of entries");
	}
	return selections.indexOf('1')>=0;
}	

function getSelections(e, id) {
	var formId = getFormId(e);
	var form = getById(formId);
	var selections = "";
	for (var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].type=='checkbox' && form.elements[i].name.indexOf(id)>-1){
			if(form.elements[i].checked) {
				selections += '1';
			} else {		
				selections += '0';
			}		
		}
	}
	return selections;
}

//***************************************************************************************************************
//* Columns Selection

function columnSelection(e, selectItem) {
	var viewId = getViewId(e);
	var minColNum = parseInt(getById(viewId+':browseTableForm:minColNum').value);
	var maxColNum = parseInt(getById(viewId+':browseTableForm:maxColNum').value);
	var visibleColNumItem = getById(viewId+':browseTableForm:visibleColNum');
	var message = ' ';
	if (!selectItem.checked) {  //When this function is called the check box value is changed because it was clicked
		if (visibleColNumItem.value > minColNum) {
			visibleColNumItem.value--;
		}
		else {
			selectItem.checked = true;
			message = 'no more column can be removed';
		}			
	}
	else { 
		if (visibleColNumItem.value < maxColNum) {
			visibleColNumItem.value++;
		}
		else {
			selectItem.checked = false;
			message = 'no more column can be added';
		}
	}
	
	setColumnMessage(viewId, message)
}

function columnSelectionClicked(e) {
	var viewId = getViewId(e);
//	var columnSelectionPanel = getById(viewId+':browseTableForm:columnSelectionPanel');
	var tableViewName = getById(viewId+':browseTableForm:tableViewName').value;
	var columnSelectionPanel = getById(tableViewName+':columnSelectionPanel');
	
	var windowSize = getWindowDimensioins();
	columnSelectionPanel.style.maxHeight = windowSize.height - 40;

	if (columnSelectionPanel.style.visibility == 'hidden') {  // ShowColumnSelectionPanel
		columnSelectionPanel.style.overflow = 'auto';
		columnSelectionPanel.style.visibility = 'visible'; 

		// This is to position the panel under the ImageSelection button (it is really a fix for IE since it already ok in mozilla)
		var columnSelectionsImage = getById(viewId+':browseTableForm:columnSelectionsImage');
		var pos = findPos(columnSelectionsImage);
		columnSelectionPanel.style.left = pos[0];  //align left
//		columnSelectionPanel.style.left = Math.round(pos[0] + (columnSelectionsImage.offsetWidth - columnSelectionPanel.offsetWidth)/2); //align centre
		columnSelectionPanel.style.top = pos[1] + columnSelectionsImage.offsetHeight - 6;

		var columnSelections = getById(viewId+':browseTableForm:columnSelections');
		columnSelections.value = getSelections(e, 'columnSelectionColumnsList');
	}
	else {
		hideColumnSelectionPanel(e);
	}
}

function columnSelectionPanelMouseOut(e) {
	if (!e) { 
		e = window.event;
	}
	var from = e.target || e.srcElement;		
	var target = e.relatedTarget || e.toElement;		
	
	var node=target;
	while (node != null){
		if (node.tagName == 'DIV' || node.tagName == 'TABLE') {
			if (node.id.indexOf('columnSelection') < 0) {
				break;
			}				
			else
				return;
		}
		if (node.tagName == 'FORM' || node.parentNode == null) 
			break;
			
		node=node.parentNode;
	}
	
	if (!node)  // This is a fix for mozilla only to fix onmouseout problem when using flexible scroll
		return;
		
	hideColumnSelectionPanel(e);
}

var viewIdParam;		// Used to pass parameter to the method called in the setTimeouts in the following function
function hideColumnSelectionPanel(e) {
	var viewId = getViewId(e);
//	columnSelectionPanel = getById(viewId+':browseTableForm:columnSelectionPanel');
	var tableViewName = getById(viewId+':browseTableForm:tableViewName').value;
	columnSelectionPanel = getById(tableViewName+':columnSelectionPanel');
	
	// *** apply selections
	var columnSelections = getById(viewId+':browseTableForm:columnSelections');
	selections = getSelections(e, 'columnSelectionColumnsList');
	viewIdParam = viewId;
	if (columnSelections.value != selections ) {
		columnSelections.value = selections;
		actionLink = getById(viewId+':browseTableForm:columnSelectionActionLink');
		setTimeout("columnSelectionPanel.style.visibility = 'hidden'; columnSelectionPanel.style.overflow = 'hidden'; setColumnMessage(viewIdParam, ' '); actionLink.onclick();", 100);
	}
	else {			
		setTimeout("columnSelectionPanel.style.visibility = 'hidden'; columnSelectionPanel.style.overflow = 'hidden'; setColumnMessage(viewIdParam, ' '); ", 100);
	}
}

function selectDefaultColumns(e) {
	var viewId = getViewId(e);
	var defaultCols = getById(viewId+':browseTableForm:defaultColumns').value;
	var formId = getFormId(e);
	var form = getById(formId);
	var k;
	var item;
	for (var i=0; i<form.elements.length; i++) {
		var item = form.elements[i];
		if (item.type=='checkbox' && item.name.indexOf('columnSelectionColumnsList')>-1) {
			var matches = item.name.match(/:columnSelectionColumnsList:(\d+)/);
			if (matches && defaultCols.charAt(matches[1])=='1')
				item.checked = true;
			else
				item.checked = false;
		}
	}
	setColumnMessage(viewId, ' ');
}

function selectAllColumns(e) {
	var formId = getFormId(e);
	var form = getById(formId);
	for (var i=0; i<form.elements.length; i++) {
		var item = form.elements[i];
		if(item.type=='checkbox' && item.name.indexOf('columnSelectionColumnsList')>-1)
			item.checked = true;
	}
}

function setColumnMessage(viewId, message) {
	if (isIE) {
		getById(viewId+':browseTableForm:columnMessage').innerText = message;
	} else {	
		getById(viewId+':browseTableForm:columnMessage').firstChild.nodeValue = message;
	}
}

//***************************************************************************************************************
//* Expand/shrink table body

var isMouseKeyDown = false;
var tableViewName;
var changeSize = 40;   // The amount in pixels each click of mouse will shrink/expand Table body panel
var continuousChangeSize = 20; // The steps in pixels when holding mouse key down will shrink/expand Table body panel 
var viewId;
var minHeight;
var maxHeight;

function initHeightVars(e) {
	viewId = getViewId(e);
	tableViewName = getById(viewId+':browseTableForm:tableViewName').value;
	minHeight = getById(viewId+':browseTableForm:minHeight').value;
	maxHeight = getById(viewId+':browseTableForm:maxHeight').value;
}

function shrinkTableBodyPanel(e) {
	initHeightVars(e);
	changeTableBodyPanelHeight(-changeSize);
}
	
function expandTableBodyPanel(e) {
	initHeightVars(e);
	changeTableBodyPanelHeight(changeSize);
}
	
function continuousExpandTableBodyPanel(e) {
	initHeightVars(e);
	isMouseKeyDown = true;
	setTimeout('continuousIncreaseTableBodyPanelHeight()', 300);
}

function continuousShrinkTableBodyPanel(e) {
	initHeightVars(e);
	isMouseKeyDown = true;
	setTimeout('continuousDecreaseTableBodyPanelHeight()', 300);
}

function continuousIncreaseTableBodyPanelHeight() {
	if (isMouseKeyDown == false)
		return;
	if (changeTableBodyPanelHeight(continuousChangeSize))
		setTimeout('continuousIncreaseTableBodyPanelHeight(continuousChangeSize)', 50);
}
		
function continuousDecreaseTableBodyPanelHeight() {
	if (isMouseKeyDown == false)
		return;
	if (changeTableBodyPanelHeight(-continuousChangeSize))
		setTimeout('continuousDecreaseTableBodyPanelHeight()', 50);
}
		
function changeTableBodyPanelHeight(value) {
	var tableBodyPanel = getById(tableViewName+'_TableBodyPanel');
	var height = parseInt(tableBodyPanel.style.height);
	var newHeight = height + value;
	if (newHeight > minHeight && newHeight < maxHeight) {
		tableBodyPanel.style.height =  newHeight + 'px';
		getById(viewId+':browseTableForm:tableBodyHeight').value = newHeight;
		return true;
	}
	return false;
}

//************************************************************************
function reload(e) {
	var viewId = getViewId(e);
	getById(viewId+':browseTableForm:reloadActionLink').onclick();
	return false;
}

function getWindowDimensioins () {
	var frameWidth = 0;
	var frameHeight = 0;
	if (self.innerWidth) {
		frameWidth = self.innerWidth;
		frameHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientWidth) {
		frameWidth = document.documentElement.clientWidth;
		frameHeight = document.documentElement.clientHeight;
	} 
	else if (document.body) {
		frameWidth = document.body.clientWidth;
		frameHeight = document.body.clientHeight;
	}

	return {width:frameWidth, height:frameHeight};
}

//************************************************************************
function clickExternalCommandLink(formId, linkId, params) {
	if(params!=null && params!="") {
		appendHiddenInput(document.forms[formId], 'clickedLinkParams', params);
	}
	getById(formId + ':' + linkId).onclick();
}

//************************************************************************
document.onmouseup = function() { isMouseKeyDown = false; };


