// Set dropdown menus to inactive - onload makes them active
var menuSystemActive = false;

// Set the window name

window.name = "main";

// onload triggers

function homepageTrigger() {
	menuSystemActive = true;
	setupScroller();
	startSpider(); // Halloween stuff
}

function subpageTrigger() {
	menuSystemActive = true;
	startSpider(); // Halloween stuff
}


// Function to make DIV area act as its child A tag
function doDivLink(getDiv) {
	if(document.getElementsByTagName) {
		newLocation = getDiv.getElementsByTagName('A').item(0).href;
		newTarget = getDiv.getElementsByTagName('A').item(0).target;
		if(newTarget == "_blank") {
			window.open(newLocation);
		} else window.location = newLocation;
	}
}
function clearDivLink() {
	if(document.getElementsByTagName) return false;
}

// Menu Stuff

if(navigator.userAgent.indexOf("Opera")!=-1) GetBrowserType = "opera"
else if(navigator.appName == "Microsoft Internet Explorer") GetBrowserType = "ie"
else if(navigator.appName == "Netscape") GetBrowserType = "ns";

safariMode = false;
if(navigator.userAgent.indexOf("AppleWebKit")!=-1) safariMode = true;

GetBrowserPlatform = "";
if(navigator.userAgent.indexOf("Mac_PowerPC")!=-1 || navigator.userAgent.indexOf("Macintosh")!=-1) GetBrowserPlatform = "mac";

storeMenuIndex = null;
storeButtonState = null;
storeThisElement = null;
menuActive = false;
menuTimeout = null;

function getMenuClass(src,hoverState) {
	if(src.className.indexOf("first") > -1) {
		if(hoverState) return "firstMenuOver"
		else {
			if(storeButtonState) return "firstMenuOn"
			else return "firstMenuOff";
		}
	} else if(src.className.indexOf("last") > -1) {
		if(hoverState) return "lastMenuOver"
		else {
			if(storeButtonState) return "lastMenuOn"
			else return "lastMenuOff";
		}
	} else {
		if(hoverState) return "MenuOver"
		else {
			if(storeButtonState) return "MenuOn"
			else return "MenuOff";
		}
	}
}

function showMenu(menuIndex,buttonState,thisElement) {
	if(menuSystemActive) {
		cancelHideMenu();
		if(menuActive && menuIndex!= storeMenuIndex) doHideMenu();
		if(!menuActive) {
			storeMenuIndex = menuIndex;
			storeButtonState = buttonState;
			storeThisElement = thisElement;
			thisElement.className = getMenuClass(thisElement,true);
			
			if(SubMenuStrings[menuIndex]) {
				
				// Work out menu position
				SubMenuWidth = document.getElementById('dropDownMenu').offsetWidth;
				MenuOffset = document.getElementById('headerArea').offsetLeft + document.getElementById('menuArea').offsetLeft;
				MenuAreaWidth = document.getElementById('menuArea').offsetWidth;
				ButtonOffset = thisElement.offsetLeft;
				xPos = ButtonOffset + MenuOffset - 8;
				MenuAlign = "alignLeft";
				if((ButtonOffset + SubMenuWidth) > MenuAreaWidth) {
					// Work menu position aligned right to next spacer div
					ButtonOffset = thisElement.offsetLeft + thisElement.offsetWidth;
					xPos = (ButtonOffset + MenuOffset) - (SubMenuWidth - 8);
					MenuAlign = "alignRight";
				}
			
				// Write menu links
				buildMenu = "<DIV class='" + MenuAlign + "'><dl>" + SubMenuStrings[menuIndex] + "</dl></DIV>";
				document.getElementById('dropDownMenu').innerHTML = buildMenu;
				
				// Set position of menu + make visible
				if(GetBrowserType == "ns" || GetBrowserType == "opera") {
					document.getElementById('dropDownMenu').style.left = xPos + "px";
				} else {
					document.getElementById('dropDownMenu').style.posLeft = xPos;
				}
				document.getElementById('dropDownMenu').style.zIndex = 100;
				document.getElementById('dropDownMenu').style.visibility = "visible";
			
			}
			menuActive = true;
		}
	}
}

function hideMenu() {
	if(menuSystemActive) {
		refreshMenu();
		menuTimeout = setTimeout("doHideMenu();",200);
	}
}

function doHideMenu() {
	if(menuSystemActive && storeThisElement != null) {
		storeThisElement.className = getMenuClass(storeThisElement,false);
		document.getElementById('dropDownMenu').style.visibility = "hidden";
		storeMenuIndex = null;
		storeButtonState = null;
		storeThisElement = null;
		menuActive = false;
	}
}

function cancelHideMenu() {
	if(menuSystemActive) {
		clearTimeout(menuTimeout);
		menuTimeout = null;
	}
}

function menuAreaClick(menuIndex,buttonState,thisElement) { 
	if(menuSystemActive) { 
		if(menuActive && storeThisElement == menuIndex) { 
			doHideMenu();
		} else if(!menuActive) { 
			showMenu(menuIndex,buttonState,thisElement); 
		}
	}
}

function refreshMenu() {
	if(menuSystemActive && safariMode) document.getElementById('dropDownMenu').style.zIndex += 1;
}

// Halloween spider stuff

var spiderTimerLen = 5;
var spiderAniLen = 1500;
var spiderTimerID;
var spiderStartTime;
var spiderObj;
var spiderEndY = 71;

function startSpider() {
	var getSpider = document.getElementById("headerSpider");
	if (getSpider) {
		spiderObj = getSpider;
		spiderStartTime = (new Date()).getTime();
		spiderTimerID = setInterval("moveSpider();", spiderTimerLen);
	}
}

function moveSpider() {
	var elapsed = (new Date()).getTime() - spiderStartTime;
	if (elapsed > spiderAniLen) {
		endSpider();
	} else {
		var timeratio = (elapsed / spiderAniLen);
		timeratio = Math.pow(timeratio, 0.4);
		var d = Math.round(timeratio * spiderEndY);				
		spiderObj.style.top = (d-spiderEndY) + "px";
	}
	return;
}

function endSpider() {
	clearInterval(spiderTimerID);
	spiderObj.style.top = "0px";
	return;
}

// Animated form area stuff

var timerlen = 5;
var slideAniLen = 350;
var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();

function showHideFormElement(checkBox, divID, overrideValue) {
	if (graphicVersion) {
		if ((checkBox.checked || overrideValue == 1) && document.getElementById(divID).style.display != "block") {
			if (!moving[divID]) slidedown(divID);
			else checkBox.checked = !checkBox.checked;
		} else if ((!checkBox.checked || overrideValue == 0) && document.getElementById(divID).style.display == "block") {
			if (!moving[divID]) slideup(divID);
			else checkBox.checked = !checkBox.checked;
		}
	}
}

function slidedown(objname) {
	if(moving[objname]) return; // cannot slide down something that is still animating
	
	// Start slide
	document.getElementById(objname).getElementsByTagName("DIV")[0].style.backgroundColor = "#ffe290";
	moving[objname] = true;
	dir[objname] = "down";
	startslide(objname);
}
 
function slideup(objname) {
	if(moving[objname]) return; // cannot slide down something that is still animating
	
	// Start slide
	moving[objname] = true;
	dir[objname] = "up";
	startslide(objname);
}

function startslide(objname) {
	clearInterval(document.getElementById(objname).getElementsByTagName("DIV")[0].timer); // Kill any colour fading
	obj[objname] = document.getElementById(objname);
	
	endHeight[objname] = parseInt(obj[objname].style.height);
	startTime[objname] = (new Date()).getTime();
	
	if(dir[objname] == "down") obj[objname].style.height = "1px";
	
	obj[objname].style.display = "block";
	
	timerID[objname] = setInterval("slidetick('" + objname + "');", timerlen);
}

function slidetick(objname) {
	var elapsed = (new Date()).getTime() - startTime[objname];
	
	if (elapsed > slideAniLen) {
		endSlide(objname);
	} else {
		var timeratio = (elapsed / slideAniLen);
		timeratio = Math.pow(timeratio, 0.4);
		var d = Math.round(timeratio * endHeight[objname]);
		if(dir[objname] == "up") d = endHeight[objname] - d;				
		obj[objname].style.height = d + "px";
	}
	return;
}

function endSlide(objname) {
	clearInterval(timerID[objname]);
	
	if(dir[objname] == "up") obj[objname].style.display = "none";
	
	obj[objname].style.height = endHeight[objname] + "px";
	
	delete(moving[objname]);
	delete(timerID[objname]);
	delete(startTime[objname]);
	delete(endHeight[objname]);
	delete(obj[objname]);
	
	if(dir[objname] == "down") colorFade(objname,'ffe290','f3f7e2',25,30);
	delete(dir[objname]);
	
	return;
}

function colorFade(id,start,end,steps,speed) {
	var startrgb,endrgb,er,eg,eb,step,rint,gint,bint,step;
	var target = document.getElementById(id).getElementsByTagName("DIV")[0];
	clearInterval(target.timer);
	endrgb = colorConv(end);
	er = endrgb[0];
	eg = endrgb[1];
	eb = endrgb[2];
	startrgb = colorConv(start);
	r = startrgb[0];
	g = startrgb[1];
	b = startrgb[2];
	target.r = r;
	target.g = g;
	target.b = b;
	rint = Math.round(Math.abs(target.r-er)/steps);
	gint = Math.round(Math.abs(target.g-eg)/steps);
	bint = Math.round(Math.abs(target.b-eb)/steps);
	if(rint == 0) rint = 1;
	if(gint == 0) gint = 1;
	if(bint == 0) bint = 1;
	target.step = 1;
	target.timer = setInterval( function() { animateColor(id,steps,er,eg,eb,rint,gint,bint) }, speed);
}

function animateColor(id,steps,er,eg,eb,rint,gint,bint) {
	var target = document.getElementById(id).getElementsByTagName("DIV")[0];
	var color;
	if(target.step <= steps) {
		var r = target.r;
		var g = target.g;
		var b = target.b;
		if(r >= er) r -= rint; else r += rint;
		if(g >= eg) r -= gint; else g += gint;
		if(b >= eb) b -= bint; else b += bint;
		color = 'rgb(' + r + ',' + g + ',' + b + ')';
		target.style.backgroundColor = color;
		target.r = r;
		target.g = g;
		target.b = b;
		target.step += 1;
	} else {
		clearInterval(target.timer);
		color = 'rgb(' + er + ',' + eg + ',' + eb + ')';
		target.style.backgroundColor = color;
	}
}

function colorConv(color) {
	var rgb = [parseInt(color.substring(0,2),16), parseInt(color.substring(2,4),16), parseInt(color.substring(4,6),16)];
	return rgb;
}
