// Code by Jesse Hemingway, 1/28/04
// Thanks: to various posts and code snippets to get it working in different browsers!
// ******************************************************************************************

var isMac = navigator.appVersion.indexOf("Mac") != -1;
var gecko = (navigator.appVersion.indexOf("Safari") != -1) || (navigator.appVersion.indexOf("Gecko") != -1);
var ie4 = (document.all) ? true : false;
var ie6 = gecko || (((document.all) && (navigator.appVersion.indexOf("MSIE 6.") != -1))) ? true : false;
var ie55 = ((document.all) && (navigator.appVersion.indexOf("MSIE 5.5") != -1)) ? true : false;
var ie5 = !ie55 && ((document.all) && (navigator.appVersion.indexOf("MSIE 5.") != -1)) ? true : false;
var ns4 = (document.layers) ? true : false;
var ns6 = (document.getElementById && !document.all) ? true : false;

function hideLayer(lay)
{
	if (ie4) { document.all[lay].style.visibility = "hidden"; }
	if (ns4) { document.lays[lay].visibility = "hide"; }
	if (ns6) { document.getElementById(lay).style.visibility = "hidden"; }
}

function showLayer(layerName, iFocus)
{
	var yOffset = 150;
	if (ns4 || ns6) {
		var layerObj = document.getElementById(layerName);
		var orgTop = document.body.scrollTop;
		if (ns4)
			layerObj.top = yOffset + document.body.scrollTop;
		else
			layerObj.style.top = yOffset + document.body.scrollTop;
		document.body.scrollTop = orgTop;
	} else {
		var layerObj = document.getElementById(layerName).style;
		layerObj.pixelTop = yOffset + document.body.scrollTop;
	}

	if (ie4) { document.all[layerName].style.visibility = "visible"; }
	if (ns4) { document.layers[layerName].visibility = "show"; }
	if (ns6) { document.getElementById(layerName).style.visibility = "visible"; }
	var formName = layerName + "Form";
	if (iFocus >= 0) {
		document.forms[formName].elements[iFocus].focus();
		document.forms[formName].elements[iFocus].select();
	}
}

var menuLayer = '';
function toggleMenuLayer(layerMove, layerAnchor, kludgeX, kludgeY)
{
	var state = '';
	if (ns4 || ns6) {
		var layerA = document.getElementById(layerMove);
		var layerB = document.getElementById(layerAnchor);
		if (gecko) {
			layerA.style.top = GetAbsPos(layerB, 'Top') + layerB.offsetHeight;
			layerA.style.left = GetAbsPos(layerB, 'Left');
			var state = document.getElementById(layerMove).style.visibility != "visible" ? "visible" : "hidden";
			document.getElementById(layerMove).style.visibility = state;
		}
		else if (ns4) {
			layerA.top = layerB.bottom;
			layerA.left = layerB.left;
			var state = document.layers[layerMove].visibility != "show" ? "show" : "hide";
			document.layers[layerMove].visibility = state;
		} else {
			layerA.style.top = layerB.style.bottom;
			layerA.style.left = layerB.style.left;
			var state = document.getElementById(layerMove).style.visibility != "visible" ? "visible" : "hidden";
			document.getElementById(layerMove).style.visibility = state;
		}
	} else {
		var layerA = document.getElementById(layerMove).style;
		var layerB = document.getElementById(layerAnchor);
		if (ie6) {
			if (navigator.appVersion.indexOf("Windows 98") != -1) {
				layerA.pixelTop = layerB.offsetTop + layerB.offsetHeight + kludgeY;
				layerA.pixelLeft = layerB.offsetLeft + kludgeX;
			} else {
				layerA.pixelTop = layerB.offsetTop + layerB.offsetHeight;
				layerA.pixelLeft = layerB.offsetLeft + 1 + kludgeX;
			}
		}
		else if (ie55) {
//			var raw1 = GetAbsPos(layerB, 'Top') + layerB.offsetHeight + kludgeY;
//			var raw2 = GetAbsPos(layerB, 'Left') + kludgeX;
// alert("states = " + ie55 + " " + ie5 + " " + raw1 + " " + raw2);
			layerA.pixelTop = GetAbsPos(layerB, 'Top') + layerB.offsetHeight + kludgeY;
			layerA.pixelLeft = GetAbsPos(layerB, 'Left') + kludgeX;
		} else {
			if (isMac) {	// this is the case where IE/mac is just plain broken
				layerA.pixelTop = GetAbsPos(layerB, 'Top') + layerB.offsetHeight;
				layerA.pixelLeft = GetAbsPos(layerB, 'Left') + 1 + kludgeX;
			} else {
				layerA.pixelTop = GetAbsPos(layerB, 'Top') + layerB.offsetHeight;
				layerA.pixelLeft = GetAbsPos(layerB, 'Left') + 1 + kludgeX;
			}
		}
		var state = layerA.visibility != "visible" ? "visible" : "hidden";
		layerA.visibility = state;
	}
	menuLayer = state == "visible" || state == "show" ? layerMove : '';
}

function GetAbsPos(layerObj, which) {	// thanks to www.dagblastit.com/dhtml/ !!
	iPos = 0;
	while (layerObj != null) {
		iPos += layerObj["offset" + which];
		layerObj = layerObj.offsetParent;
	}
	return iPos;
}

function writeLayer(lay,txt)
{
	if (ie4)
		document.all[lay].innerHTML = txt;
	if (ns4) {
		document[lay].document.write(txt);
		document[lay].document.close();
	}
	if (ns6) {
		over = document.getElementById([lay]);
		range = document.createRange();
		range.setStartBefore(over);
		domfrag = range.createContextualFragment(txt);
		while (over.hasChildNodes())
			over.removeChild(over.lastChild);
		over.appendChild(domfrag);
	}
}

// open a new browser window
function newWindow(url, pageName, width, height, scrolling, resizing) {
	var winl = (screen.availWidth - width) / 2;
	var wint = (screen.availHeight - height) / 2;
	var properties = 'height=' + height + ',width=' + width + ',top=' + wint + ',left=' + winl +
		',scrollbars=' + scrolling;
	if (resizing)
		properties += ',resizable';
	var newWin = window.open(url, pageName, properties);
	if (parseInt(navigator.appVersion) >= 4) { newWin.window.focus(); }
	newWin.resizeTo(width, height);		// more consistent results
	newWin.moveTo((screen.availWidth - width) / 2, (screen.availHeight - height) / 2);
}


// **** Event handling

var dragName = '';
var dragLayer;
var xDown, yDown;
function mouseDown(e)
{
	if (menuLayer)
		hideLayer(menuLayer);
	if (dragName) {
		if (ie4) {
			dragLayer = document.getElementById(dragName).style;
			xDown = event.offsetX + 6;
			yDown = event.offsetY + 6;
		} else {
			dragLayer = document.getElementById(dragName);
			xDown = e.layerX;
			yDown = e.layerY;
			return false;
		}
	}
}

function mouseMove(e)
{
	if (dragLayer) {
		if (ie4) {
			dragLayer.pixelLeft = event.clientX - xDown + document.body.scrollLeft;
			dragLayer.pixelTop = event.clientY - yDown + document.body.scrollTop;
			return false;
		}
		else if (ns4) {
		   dragLayer.left = e.pageX - xDown;
		   dragLayer.top = e.pageY - yDown;
		}
		else if (ns6) {
		   dragLayer.style.left = e.pageX - xDown;
		   dragLayer.style.top = e.pageY - yDown;
		}
	}
}

function mouseUp()
{
	dragLayer = null;
}

if (!ie4)
	document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
document.onmousedown = mouseDown;
document.onmousemove = mouseMove;
document.onmouseup = mouseUp;