function displayScrollableTable(tableName) {
	window.status = "Displaying table...";
	var headerLayer = document.getElementById(tableName + "headerLayer");
	var bodyLayer = document.getElementById(tableName + "bodyLayer");
	var footerLayer = document.getElementById(tableName + "footerLayer");
	
	var tableObject = bodyLayer.getElementsByTagName("table")[0];
	var headRow = tableObject.getElementsByTagName("thead");
	var footRow = tableObject.getElementsByTagName("tfoot");

	var bodyContent = "" + bodyLayer.innerHTML;
	bodyContent = stringReplace(bodyContent, " id=", " renamed_id=");
	bodyContent = stringReplace(bodyContent, " name=", " renamed_name=");
	bodyContent = stringReplace(bodyContent, "<INPUT ", "<input disabled readonly ");
	
	var hasScroll = (headRow.length == 1) && (footRow.length == 1);
	if (hasScroll) {
		footRow = footRow[0];
		var footStart = bodyLayer.clientHeight - (footRow.offsetHeight + 4);
		hasScroll&= (footRow.offsetTop > footStart);
	}
		
	if (hasScroll) {
		headRow = headRow[0];
		headRow.offsetWidth; //accessing property
		headerLayer.innerHTML = bodyContent;
		headerLayer.style.display = "block";
		headerLayer.style.width = headRow.offsetWidth + 2;
		headerLayer.style.height = headRow.offsetHeight + 4;
		headerLayer.scrollTop = 0;
		headerLayer.style.visibility = "visible";

		footRow.offsetWidth; //accessing property
		footerLayer.innerHTML = bodyContent;
		footerLayer.style.display = "block";
		footerLayer.style.width = footRow.offsetWidth + 2;
		footerLayer.style.height = footRow.offsetHeight + 3;
		var bodyPos = getElementPosition(bodyLayer);
		footerLayer.style.top = bodyPos.y + bodyLayer.clientHeight - (footRow.offsetHeight + 2);
		footerLayer.scrollTop = bodyLayer.scrollHeight * 2;
		footerLayer.style.visibility = "visible";
	} else {
		bodyLayer.style.height = tableObject.offsetHeight;
	}
	window.status = "";
}

function getElementPosition(element) { 
	var x=0, y=0; 
	var first = true;
	while (element!==null) { 
		x+= element.offsetLeft;// - element.scrollLeft; 
		y+= element.offsetTop;// - element.scrollTop; 
		element = element.offsetParent; 
		first = false;
	} 
	return {x:x, y:y};
} 

function getScrollTopElement(element) { 
	var scrollElement;
	var scrollTop = 0; 
	var scrollFound = false;
	while (element!==null && !scrollFound) { 
		scrollTop+= element.scrollTop;
		if (scrollTop > 0 || element.style.overflow) {
			scrollElement = element;
			scrollFound = true;
		}
		element = element.offsetParent; 
	}
	if (!scrollElement) {
		scrollElement = document.documentElement;
		scrollTop = scrollElement.scrollTop;
	}
	return {element:scrollElement, scrollTop:scrollTop};
}

var storeScroll = false;
var scrollForm;

function findScrollableForm() {
	for (i = 0; i < document.forms.length; i++) {
		if (document.forms[i].scroll) {
			scrollForm = document.forms[i];
		}
	}
}

function checkStoreScroll() { 
	findScrollableForm();
	if (!storeScroll && scrollForm) {
		scrollForm.scroll.value = 0;
	}
}

function setMove() { 
	findScrollableForm();
	if (scrollForm) {
		storeScroll = true; 
		var scrollTopElement = getScrollTopElement(scrollForm);
		scrollForm.scroll.value = scrollTopElement.scrollTop;
		//alert(scrollForm.onsubmit);
		var agt=navigator.userAgent.toLowerCase();
		if ((scrollForm.onsubmit) && (agt.indexOf("msie") != -1)) {
			//eval(scrollForm.onsubmit + " anonymous()");
		}
		scrollForm.submit();
	}
}

function moveScroll() {
	findScrollableForm();
	if (scrollForm) {
		var scrollAmount = scrollForm.scroll.value;
		var scrollTopElement = getScrollTopElement(scrollForm);
		if (scrollTopElement.element) {
			scrollTopElement.element.scrollTop = scrollAmount;
		}
	}
}
setTimeout("moveScroll()", 100);

function toggleElementDisplay(elementName) {
	var element = document.getElementById(elementName);
	element.style.display = 
		(element.style.display == "block" ? "none" : "block");
}

function toggleUniqueElementDisplay(elementName) {
	var element = document.getElementById(elementName);
	var parentNaming = elementName.substring(0, elementName.lastIndexOf("_") + 1);
	
	var siblings = document.getElementsByTagName(element.tagName);
	for (sibling in siblings) {
		var siblingId = "" + siblings[sibling].id;
		siblingId = siblingId.substring(0, parentNaming.length);
		if (siblingId == parentNaming) {
			siblings[sibling].style.display = 
				(siblings[sibling] == element ? 
					element.style.display : "none");
		}
	}
	element.style.display = "block";
}

function stringReplace(source, find, replaceString) {
	if (replaceString.indexOf(find) != -1)  {
		return source;
	}
	while (source.indexOf(find) != -1) {
		source = source.replace(find, replaceString);
	}
	return source;
}

function increaseTableRow(rowId, tableName, tableColumns) {
	var row = document.getElementById(rowId);
	if (row == null) { addTableRow(tableName, tableColumns) ;}
	else row.value++;
}

function addTableRow(tableName, tableColumns) {
	tableColumns = stringReplace(tableColumns, "%del_button%", 
		document.getElementById("delButtonElement" + tableName).innerHTML);
	
	var cols = tableColumns.split("[]");
	var table = document.getElementById(tableName);
	var tableBody = (table.tBodies.length > 0 ? table.tBodies[table.tBodies.length - 1] : table);
	var tableRow = tableBody.insertRow(tableBody.rows.length);
	for (i in cols) {
		var cell = tableRow.insertCell(i);
		cell.innerHTML = cols[i];
	}
}

function delTableRow(tableName, button) {
	var table = document.getElementById(tableName);
	var rowIndex = button.parentNode/*TD*/.parentNode/*TR*/.rowIndex;
	table.deleteRow(rowIndex);
}

function jumpField(field, max, nextField) {
	var keyChecked = true;
	if (window.event) {
		keyChecked = 
			event.keyCode >= 48 && event.keyCode <= 57 ||
			event.keyCode >= 65 && event.keyCode <= 90 ||
			event.keyCode >= 96 && event.keyCode <= 105;
	}
	if (field.value.length >= max) {
		if (keyChecked) {
			if (nextField != field) {
				nextField.focus();
			} else {
				field.blur();
			}
		}
	}
}

var xmlhttp;
var xmlhttpobj;

function loadXMLDoc(url, obj)
{
	xmlhttpobj = obj
	if (url.indexOf("?") == -1) url+= "?";
	url+= "&rnd=" + Math.random();
	
	// code for Mozilla, etc.
	if (window.XMLHttpRequest)
	  {
	  xmlhttp=new XMLHttpRequest()
	  xmlhttp.onreadystatechange=state_Change
	  xmlhttp.open("GET",url,true)
	  xmlhttp.setRequestHeader("referer", document.location);
	  xmlhttp.send(null)
	  }
	// code for IE
	else if (window.ActiveXObject)
	  {
	  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
	    if (xmlhttp)
	    {
	    xmlhttp.onreadystatechange=state_Change
	    xmlhttp.open("GET",url,true)
	  	xmlhttp.setRequestHeader("referer", document.location);
	    xmlhttp.send()
	    }
	  }
}

function state_Change() 
{
  if (xmlhttp.readyState==4)
  {
	  if (xmlhttp.status==200)
	  {
		xmlhttpobj.innerHTML = xmlhttp.responseText
	  }
  }
}

function openLayer(layerId, url) {
	var vframe = document.getElementById(layerId);
	if (vframe.innerHTML.length < 50) {
		loadXMLDoc(url, vframe);
	}
}

function postForm(url, extraParameters, target) {
	var container = document.createElement('div');
	var form = document.createElement('form');
	var params = extraParameters.split('&');
	
	form.action = url;
	form.method = 'POST';
	form.id = 'REDIRECT'
	if (target != '' && target != document.undef) {
		form.target = target;
	}
	form.style.display = 'none';
	for (i = 0; i < params.length; i++) {
		if (params[i] != '') {
			var index = params[i].indexOf('=');
			var key = params[i].substring(0, index);
			var value = params[i].substring(index+1);
			var input = document.createElement('input');

			input.setAttribute('NAME', key);
			input.setAttribute('TYPE', 'HIDDEN');
			
			/*
			 "Value" attribute requires to be lower case for compatibility with different browsers.
			 
			 (Internet Explorer running in Mac machines, duplicates the attributes when it 
			  doesn't find a lower case 'value' in the list)
			*/
			input.setAttribute('value', value);
			
			form.appendChild(input);
		}
	}
	container.appendChild(form);
	document.write(container.innerHTML);
	document.getElementById('REDIRECT').submit();
}

function otherChoice(combo, inputName) {
	var input = document.getElementById(inputName);
	if (combo.value == 'other') {
		input.style.display = 'block';
	} else {
		input.style.display = 'none';
	}
}

function setTeamSelect( selectObj, value ){

	for ( x = 0; x < selectObj.options.length; x++ ){

		if ( value == selectObj.options[x].value )
			selectObj.options[x].selected = true;
	}

}

function updateScrollPosition(scrollBox, fieldName){
	var objCheck = document.getElementById(fieldName + '_Y');					
	if ( objCheck != null && scrollBox.scrollTop > (scrollBox.scrollHeight * 0.8) || scrollBox.scrollHeight < scrollBox.clientHeight) {
		objCheck.disabled=false;
		document.getElementById(fieldName + '_hidden_div').style.display='';					
		document.getElementById(fieldName + '_hidden_dummy_div').style.display='none';					
	}
}

function readOnly(container) {
	var frm = container.form;
	// alert("form = " + frm);
	for(i=0; i<frm.elements.length; i++)
	{
		if(frm.elements[i].type=="checkbox")
		{
			frm.elements[i].readonly=true;
		}
		else if (frm.elements[i].type=="input")
		{
			frm.elements[i].readonly=true;
		}
		else if (frm.elements[i].type=="select")
		{
			frm.elements[i].enable=false;
		}
	}
}

