/////////////////////////////////////////////////////////////////////////////////////////////
//Menu class
/////////////////////////////////////////////////////////////////////////////////////////////
function Menu(id, imgId, visible)		//the Menu class definition/constructor
{
	this.id = id;
	this.imgId = imgId;
	this.visible = visible;
}

//instance methods
Menu.prototype.toggle = function()
{
	this.visible?this.hide():this.show();
}

Menu.prototype.show = function()
{
	if(!this.visible)
	{
		var d = document;
		var m = findElement(this.id);
		if(m)
			m.style.display = 'block';
	
		var i = findElement(this.imgId);
		if(i)
			i.src = '/images/nav_minus.gif';
	
		this.visible = true;

		saveMenuState();
	}
}

Menu.prototype.hide = function()
{
	if(this.visible)
	{
		var d = document;
		var m = findElement(this.id);
		if(m)
			m.style.display = 'none';
	
		var i = findElement(this.imgId);
		if(i)
			i.src = '/images/nav_plus.gif';
			
		this.visible = false;
	
		saveMenuState();	
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////

function initMenus()
{
	if(!restoreMenuState())	//check for cookie first, init if not present
	{
		var d = document;
		var ix = 0, a = initMenus.arguments;
  
		d.menuState = new Array();	//holds a collection of Menu objects
		for(var i = 0; i < a.length; i += 2)
		{
			d.menuState[ix] = new Menu(a[i], a[i + 1], false);
			ix++;
		}
	}
}

function findMenu(id)
{
	var m = document.menuState;
	if(m)
	{
		for(var i = 0; i < m.length; i++)
		{
			if(m[i].id == id)
				return m[i];
		}
	}
	
	return null;
}

function setMenu(ix)
{
	var d = document;
	var m = findElement(d.menuState[ix].id);
	if(m)
		m.style.display = d.menuState[ix].visible?'block':'none';
	
	var i = findElement(d.menuState[ix].imgId);
	if(i)
		i.src = d.menuState[ix].visible?'/images/nav_minus.gif':'/images/nav_plus.gif';
}

function toggleMenu(menu, noCollapse)
{
	if(noCollapse)
		findMenu(menu).show();
	else
		findMenu(menu).toggle();
}

function findElement(id)
{
	if(document.getElementById)						//IE 5,6, NS 6,7
		return document.getElementById(id);
	 
	if (document.all)											//IE 4
		return eval('document.all["' + id + '"]');

	if (document.layers)									//NS 4
		return eval('document.layers["' + id + '"]');
}

function saveMenuState()
{
	var d = document;
	var cookie = 'MenuState=';
	for(var i = 0; i < d.menuState.length; i++)
	{
		cookie += d.menuState[i].id + '=' + d.menuState[i].visible + '=' + d.menuState[i].imgId;
		if(i < d.menuState.length - 1)
			cookie += '&';
	}
	saveCookieData(cookie);
}

function restoreMenuState()
{
	var a = getCookieData();
	if(!a)
		return false;
		
	var d = document;
		
	if(!d.menuState)
		d.menuState = new Array();	//holds a collection of Menu objects
	
	for(var i = 0; i < a.length; i++)
	{
		if(findMenu(a[i][0]))
			findMenu(a[i][0]).visible = a[i][1];
		else
		{
			d.menuState[d.menuState.length] = new Menu(a[i][0], a[i][2], eval(a[i][1]));
			setMenu(d.menuState.length -1);
		}
	}		
	return true;
}

function getCookieData()
{
	var cookie = document.cookie;		//this is ALL the cookies
	if(cookie == '')
		return false;

	//just get our state data cookie
	var start = cookie.indexOf('MenuState=');
	if(start == -1)
		return false;
	
	start += 10;
	var end = cookie.indexOf(';', start);
	if(end == -1)
		end = cookie.length;
			
	var state = cookie.substring(start, end);
	var a = state.split('&');			//split into name/value pairs
		
	for(var i = 0; i < a.length; i++)
		a[i] = a[i].split('=');		//split each pair into name & value; the array is now 2d
		
	return a;
}

function saveCookieData(cookie)
{
	var d = document;
	cookie += '; path=/;';
	d.cookie = cookie;
}

// debug stuff //////////////////////////////////////////////////////////////////////////////////////////////////////
function showCookies()
{
	alert(document.cookie);
}

function showArray()
{
	var d = document;
	var s = new String;
	for(var i = 0; i < d.menuState.length; i++)
		s += d.menuState[i].id + ' visible=' + d.menuState[i].visible + ' imgId=' + d.menuState[i].imgId + '\n';
	
	alert(s);
}
//end debug stuff //////////////////////////////////////////////////////////////////////////////////////////////////////
