
// function to set default state of tools menu to hidden and add onclick event
// listeners to all links in the nav bar to cancel tools menu display
function initPage() {
	if (!document.getElementById || !document.getElementsByTagName) { return; }

	// Hide menus
	if (document.getElementById('grasMenu')) {
		document.getElementById('grasMenu').style.display = 'none';
	}
	if (document.getElementById('albumMenu')) {
		document.getElementById('albumMenu').style.display = 'none';
	}
	if (document.getElementById('infoMenu')) {
		document.getElementById('infoMenu').style.display = 'none';
	}


	// Find all links within the toolbar and add on click events to hide tools menu
	if (document.getElementById('toolbar')) {
		var navLinks = document.getElementById('toolbar').getElementsByTagName('a');
		for (var i = 0; i < navLinks.length; i++) {
			if (navLinks[i].id == 'grasLink') {
				addEvent(navLinks[i], 'click', showHideGras, false);
				// Safari hack - doesn't support preventDefault property of the DOM event
				navLinks[i].onclick = function() { return false; };
			}
			else if (navLinks[i].id == 'albumLink') {
				addEvent(navLinks[i], 'click', showHideAlbum, false);
				// Safari hack - doesn't support preventDefault property of the DOM event
				navLinks[i].onclick = function() { return false; };
			}
			else if (navLinks[i].id == 'infoLink') {
				addEvent(navLinks[i], 'click', showHideInfo, false);
				// Safari hack - doesn't support preventDefault property of the DOM event
				navLinks[i].onclick = function() { return false; };
			}
			else { addEvent(navLinks[i], 'click', hideMenus, false); }
		}
	}
}

// Toggle display of gras menu, hide after 10 seconds
function showHideGras(e) {
	// find the menu we want to work on
	var activemenu = document.getElementById('grasMenu');
	// turn of the menus we dont want to work on
	if (activemenu.id != 'grasMenu') {document.getElementById('grasMenu').style.display = 'none';}
	if (activemenu.id != 'albumMenu') {document.getElementById('albumMenu').style.display = 'none';}
	if (activemenu.id != 'infoMenu') {document.getElementById('infoMenu').style.display = 'none';}

	window.clearTimeout(this.t);
	this.t = window.setTimeout('hideMenus()',8000);
	if (activemenu.style.display == 'none') { activemenu.style.display = 'block'; }
	else { activemenu.style.display = 'none'; }

	// Cancel default return value of the link's href attribute
	if (window.event && window.event.returnValue) {
		window.event.returnValue = false;
	}
	if (e && e.preventDefault) {
		e.preventDefault();
	}
}

// Toggle display of gras menu, hide after 10 seconds
function showHideAlbum(e) {
	// find the menu we want to work on
	var activemenu = document.getElementById('albumMenu');
	// turn of the menus we dont want to work on
	if (activemenu.id != 'grasMenu') {document.getElementById('grasMenu').style.display = 'none';}
	if (activemenu.id != 'infoMenu') {document.getElementById('infoMenu').style.display = 'none';}
	if (activemenu.id != 'albumMenu') {document.getElementById('albumMenu').style.display = 'none';}

	window.clearTimeout(this.t);
	this.t = window.setTimeout('hideMenus()',8000);
	if (activemenu.style.display == 'none') { activemenu.style.display = 'block'; }
	else { activemenu.style.display = 'none'; }

	// Cancel default return value of the link's href attribute
	if (window.event && window.event.returnValue) {
		window.event.returnValue = false;
	}
	if (e && e.preventDefault) {
		e.preventDefault();
	}
}

// Toggle display of gras menu, hide after 10 seconds
function showHideInfo(e) {
	// find the menu we want to work on
	var activemenu = document.getElementById('infoMenu');
	// turn of the menus we dont want to work on
	if (activemenu.id != 'grasMenu') {document.getElementById('grasMenu').style.display = 'none';}
	if (activemenu.id != 'infoMenu') {document.getElementById('infoMenu').style.display = 'none';}
	if (activemenu.id != 'albumMenu') {document.getElementById('albumMenu').style.display = 'none';}

	window.clearTimeout(this.t);
	this.t = window.setTimeout('hideMenus()',8000);
	if (activemenu.style.display == 'none') { activemenu.style.display = 'block'; }
	else { activemenu.style.display = 'none'; }

	// Cancel default return value of the link's href attribute
	if (window.event && window.event.returnValue) {
		window.event.returnValue = false;
	}
	if (e && e.preventDefault) {
		e.preventDefault();
	}
}

// Hide tools after time delay
function hideMenus() {
	document.getElementById('grasMenu').style.display = 'none';
	document.getElementById('albumMenu').style.display = 'none';
	document.getElementById('infoMenu').style.display = 'none';
}

// Cross-browser event handling for IE5+, NS6+ and Mozilla/Gecko
// By Scott Andrew <http://www.scottandrew.com/weblog/articles/cbs-events>
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);  
		return true;  
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		// Register this event with EventCache
		EventCache.add(elm, evType, fn);
		return r;  
	} else { elm['on' + evType] = fn; }
}

/*	EventCache Version 1.0
	Copyright 2005 Mark Wubben

	Provides a way fsor automagically removing events from nodes and thus preventing memory leakage.
	See <http://novemberborn.net/javascript/event-cache> for more information.
	
	This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/

/*	Implement array.push for browsers which don't support it natively. */
if(Array.prototype.push == null){
	Array.prototype.push = function(){
		for(var i = 0; i < arguments.length; i++){
			this[this.length] = arguments[i];
		};
		return this.length;
	};
};

/*	Event Cache uses an anonymous function to create a hidden scope chain.
	This is to prevent scoping issues. */
var EventCache = function() {
	var listEvents = [];
	
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
	
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				
				/* From this point on we need the event names to be prefixed with 'on" */
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				
				item[0][item[1]] = null;
			};
		}
	};
}();

/***************************************
* ADD ALL WINDOW EVENT LISTENERS HERE *
***************************************/

// Add load event listener to set up default page state
addEvent(window, 'load', initPage, false);

// Add unload event to flush events (required to avoid memory leaks in IE)
addEvent(window, 'unload', EventCache.flush, false);