var dotOn=new Image;
var dotOff=new Image;
var dot2Off=new Image;
var dot2On=new Image;
dotOn.src="arrowon.gif";
dotOff.src="arrowoff.gif";
dot2Off.src="arrow2off.gif";
dot2On.src=dotOn.src;

//writes necessary initial CSS in the header of the html file
function writeAllCSS()
{
	document.write("<style>");
	for (css1=0;css1<gemenu.subResources.length;css1++)
	{
		var level1String="menu"+(css1+1);
		if(gemenu.subResources.length!=0) createLayerCSS(level1String);
		for (css2=0;css2<gemenu.subResources[css1].subResources.length;css2++)
		{
			var level2String="ch"+(css1+1)+"a"+(css2+1);
			if(gemenu.subResources[css1].subResources.length != 0) createLayerCSS(level2String);
			for (css3=0;css3<gemenu.subResources[css1].subResources[css2].subResources.length;css3++)
			{
				var level3String=level2String+"b"+(css3+1);
				if(gemenu.subResources[css1].subResources[css2].subResources.length !=0) createLayerCSS(level3String);
			}//end for css3
		}//end for css2
	}//end for css1
	document.write("</style>");
}
writeAllCSS();

//creates the html content for each layer and stores it in a new property called "contentString" inside each menu object
function createContentStrings()
{
	var iconImageString;
	//for middle aligning, netscape doesn't recognize "absmiddle" properly
	var middleAlign=(isNS4)?"top":"absmiddle";
	for (cont1=0;cont1<gemenu.subResources.length;cont1++)
	{
		(gemenu.subResources[cont1].subResources.length == 0)?iconImageString='<img src="pixel.gif" width="18" height="18" align="absmiddle" border="0" name="dot'+(cont1+1)+'">':iconImageString='<img src="arrowoff.gif" width="18" height="18" align="absmiddle" border="0" name="dot'+(cont1+1)+'">';
		gemenu.subResources[cont1].contentString='<table border="0" cellpadding="0" cellspacing="0" width="'+gemenu.subResources[cont1].widthLink+'">'+
		'<tr>'+
		'<td class="links" nowrap><a href="'+gemenu.subResources[cont1].destination+'" onmouseover="handleOver(\''+gemenu.subResources[cont1].resourceName+'\')" onmouseout="handleOut(\''+gemenu.subResources[cont1].resourceName+'\')">'+gemenu.subResources[cont1].altRep+iconImageString+'</a>'+
		'</td>'+
		'</tr>'+
		'</table>';
		for (cont2=0;cont2<gemenu.subResources[cont1].subResources.length;cont2++)
		{
			gemenu.subResources[cont1].subResources[cont2].contentString='<table border="0" cellpadding="0" cellspacing="0" width="'+gemenu.subResources[cont1].subResources[cont2].widthLink+'">'+
			'<tr>'+
			'<td class="links" nowrap><a href="'+gemenu.subResources[cont1].subResources[cont2].destination+'" onmouseover="handleOver(\''+gemenu.subResources[cont1].subResources[cont2].resourceName+'\')" onmouseout="handleOut(\''+gemenu.subResources[cont1].subResources[cont2].resourceName+'\')"><img src="arrow2off.gif" width="18" height="18" align="'+middleAlign+'" border="0" name="dot'+(cont1+1)+'a'+(cont2+1)+'">'+gemenu.subResources[cont1].subResources[cont2].altRep+'<img src="pixel.gif" width="'+gemenu.subResources[cont1].subResources[cont2].widthLink+'" height="'+itemHeight+'" border="0" align="'+middleAlign+'"></a>'+
			'</td>'+
			'</tr>'+
			'</table>';
			for (cont3=0;cont3<gemenu.subResources[cont1].subResources[cont2].subResources.length;cont3++)
			{
				gemenu.subResources[cont1].subResources[cont2].subResources[cont3].contentString='<table border="0" cellpadding="0" cellspacing="0" width="'+gemenu.subResources[cont1].subResources[cont2].subResources[cont3].widthLink+'">'+
				'<tr>'+
				'<td class="links" nowrap><a href="'+gemenu.subResources[cont1].subResources[cont2].subResources[cont3].destination+'" onmouseover="handleOver(\''+gemenu.subResources[cont1].subResources[cont2].subResources[cont3].resourceName+'\')" onmouseout="handleOut(\''+gemenu.subResources[cont1].subResources[cont2].subResources[cont3].resourceName+'\')"><img src="arrow2off.gif" width="18" height="18" align="'+middleAlign+'" border="0" name="dot'+(cont1+1)+'a'+(cont2+1)+'b'+(cont3+1)+'">'+gemenu.subResources[cont1].subResources[cont2].subResources[cont3].altRep+'<img src="pixel.gif" width="'+gemenu.subResources[cont1].subResources[cont2].subResources[cont3].widthLink+'" height="'+itemHeight+'" border="0" align="absmiddle"></a>'+
				'</td>'+
				'</tr>'+
				'</table>';
			}//end for cont3
		}//end for cont2
	}//end for cont1
}
createContentStrings();

//writes actual html for all layers
function createAllLayerHTML()
{
	for (html1=0;html1<gemenu.subResources.length;html1++)
	{
		var level1String="menu"+(html1+1);
		if(gemenu.subResources.length!=0) createLayerHTML(level1String,gemenu.subResources[html1].contentString);
		for (html2=0;html2<gemenu.subResources[html1].subResources.length;html2++)
		{
			var level2String="ch"+(html1+1)+"a"+(html2+1);
			if(gemenu.subResources[html1].subResources.length != 0) createLayerHTML(level2String,gemenu.subResources[html1].subResources[html2].contentString);
			for (html3=0;html3<gemenu.subResources[html1].subResources[html2].subResources.length;html3++)
			{
				var level3String="ch"+(html1+1)+"a"+(html2+1)+"b"+(html3+1);
				if(gemenu.subResources[html1].subResources[html2].subResources.length != 0) createLayerHTML(level3String,gemenu.subResources[html1].subResources[html2].subResources[html3].contentString);
			}//end for html3
		}//end for html2
	}//end for html1
}

//sets the properties for all menu item layers so that they are readable as well as writeable by javascript
function initAllLayers()
{
	var init1LeftAdjust=homeCoordX;
	var init1TopAdjust=homeCoordY;
	var init2LeftAdjust=homeCoordX;
	var init2TopAdjust=homeCoordY;
	var init3LeftAdjust=homeCoordX;
	var init3TopAdjust=homeCoordY;
	for (init1=0;init1<gemenu.subResources.length;init1++)
	{
		init1LeftAdjust=homeCoordX;
		init1TopAdjust=homeCoordY+(init1*itemHeight);
		var init1Width=gemenu.subResources[init1].widthLink;
		var init1Z=1001+init1;
		eval("initLayer('menu"+(init1+1)+"','"+color1+"',"+init1Z+","+init1TopAdjust+","+init1LeftAdjust+","+init1Width+","+itemHeight+",0,"+init1Width+",20,0,'visible');");
		for (init2=0;init2<gemenu.subResources[init1].subResources.length;init2++)
		{
			init2LeftAdjust=init1LeftAdjust+gemenu.subResources[init1].widthLink+levelSeparation;
			init2TopAdjust=init1TopAdjust+(itemHeight*init2);
			var init2Width=gemenu.subResources[init1].subResources[init2].widthLink;
			var init2Z=2001+init2;
			eval("initLayer('ch"+(init1+1)+"a"+(init2+1)+"','"+color1+"',"+init2Z+","+init2TopAdjust+","+init2LeftAdjust+","+init2Width+","+itemHeight+",0,"+init2Width+",20,0,'hidden');");
			for (init3=0;init3<gemenu.subResources[init1].subResources[init2].subResources.length;init3++)
			{
				init3LeftAdjust=init2LeftAdjust+gemenu.subResources[init1].subResources[init2].widthLink+levelSeparation;
				init3TopAdjust=init2TopAdjust+(itemHeight*init3);
				var init3Width=gemenu.subResources[init1].subResources[init2].subResources[init3].widthLink;
				var init3Z=3001+init3;
				eval("initLayer('ch"+(init1+1)+"a"+(init2+1)+"b"+(init3+1)+"','"+color1+"',"+init3Z+","+init3TopAdjust+","+init3LeftAdjust+","+init3Width+","+itemHeight+",0,"+init3Width+",20,0,'hidden');");
			}
		}
	}
}

//mouseOver action for menu item
function handleOver(thisLayerName)
{
	var tempArray=thisLayerName.match(/\d+/g);
	if (tempArray.length==2)
	{
		changeBgColor("menu"+tempArray[0],color2);
	}
	else if (tempArray.length==3)
	{
		changeBgColor("menu"+tempArray[0],color2);
		changeBgColor("ch"+tempArray[0]+"a"+tempArray[1],color2);
	}
	changeBgColor(thisLayerName,color2);
	changeOver(thisLayerName,true);
	if (gemenu.subResources[tempArray[0]-1].subResources.length != 0)
	{
		changeDotImg(thisLayerName);
	}
	checkVis();
}

//mouseOut actions for menu item
function handleOut(thisLayerName)
{
	var tempArray=thisLayerName.match(/\d+/g);
	if (tempArray.length==2)
	{
		changeBgColor("menu"+tempArray[0],color1);
	}
	else if (tempArray.length==3)
	{
		changeBgColor("menu"+tempArray[0],color1);
		changeBgColor("ch"+tempArray[0]+"a"+tempArray[1],color1);
	}
	changeBgColor(thisLayerName,color1);
	changeOver(thisLayerName,false);
	if (gemenu.subResources[tempArray[0]-1].subResources.length != 0)
	{
		changeDotImg(thisLayerName);
	}
	checkVis();
}

function changeDotImg(thisLayerName)
{
	//extract the index numbers from thisLayerName
	var numArray=thisLayerName.match(/\d+/g);
	var onOff=false;
	var hasChildren;
	switch (numArray.length)
	{
		case 0:alert("error in numArray.length");break;
		case 1:onOff=gemenu.subResources[(parseInt(numArray[0])-1)].checkOver;break;
		case 2:onOff=gemenu.subResources[(parseInt(numArray[0])-1)].subResources[(parseInt(numArray[1])-1)].checkOver;break;
		case 3:onOff=gemenu.subResources[(parseInt(numArray[0])-1)].subResources[(parseInt(numArray[1])-1)].subResources[(parseInt(numArray[2])-1)].checkOver;break;
	}//end switch
	(onOff)?onOff="On":onOff="Off";
	var isNetscapeString;
	(isNS4)?isNetscapeString="document."+thisLayerName+".document.images.":isNetscapeString="";
	switch (numArray.length)
	{
		case 0:alert("error in numArray.length");break;
		case 1:eval(isNetscapeString+"dot"+numArray[0]+".src=dot"+onOff+".src");break;
		case 2:eval(isNetscapeString+"dot"+numArray[0]+"a"+numArray[1]+".src=dot2"+onOff+".src");break;
		case 3:eval(isNetscapeString+"dot"+numArray[0]+"a"+numArray[1]+"b"+numArray[2]+".src=dot2"+onOff+".src");break;
	}//end switch
	var mainNetscapeString=(isNS4)?"document.menu"+numArray[0]+".document.images.":"";
	var chNetscapeString=(isNS4)?"document.ch"+numArray[0]+"a"+numArray[1]+".document.images.":"";
	if (numArray.length==2)
	{
		eval(mainNetscapeString+"dot"+numArray[0]+".src=dot"+onOff+".src");
	}//end if numArray.length
	if (numArray.length==3)
	{
		eval(mainNetscapeString+"dot"+numArray[0]+".src=dot"+onOff+".src");
		eval(chNetscapeString+"dot"+numArray[0]+"a"+numArray[1]+".src=dot2"+onOff+".src");
	}//end if numArray.length
}

//changes the .checkOver property of one of the menu objects to the opposite value if the .resourceName property matches the layer2Change parameter
function changeOver(layer2Change)
{
	for (over1=0;over1<gemenu.subResources.length;over1++)
	{
		if (gemenu.subResources[over1].resourceName==layer2Change)
		{
			(gemenu.subResources[over1].checkOver==false)?gemenu.subResources[over1].checkOver=true:gemenu.subResources[over1].checkOver=false;
		}//end if resourceName
		for (over2=0;over2<gemenu.subResources[over1].subResources.length;over2++)
		{
			if (gemenu.subResources[over1].subResources[over2].resourceName==layer2Change)
			{
				(gemenu.subResources[over1].subResources[over2].checkOver==false)?gemenu.subResources[over1].subResources[over2].checkOver=true:gemenu.subResources[over1].subResources[over2].checkOver=false;
			}//end if resourceName 2
			for (over3=0;over3<gemenu.subResources[over1].subResources[over2].subResources.length;over3++)
			{
				if (gemenu.subResources[over1].subResources[over2].subResources[over3].resourceName==layer2Change)
				{
					(gemenu.subResources[over1].subResources[over2].subResources[over3].checkOver==false)?gemenu.subResources[over1].subResources[over2].subResources[over3].checkOver=true:gemenu.subResources[over1].subResources[over2].subResources[over3].checkOver=false;
				}//end if resourceName 3				
			}//end for over3
		}//end for over2
	}//end for over1
}


var timer;
//reads the .checkOver value and shows/hides the appropriate menu(s)
function checkVis()
{
	var isOnMenu="";
	var isOnParent1='';
	var isOnParent2='';
	var isOnChild1='';
	var isOnChild2='';
	var isOnChild3='';
//check all checkOver values for "true", and assign that menu's number to the appropriate variable.
	for (check1=0;check1<gemenu.subResources.length;check1++)
	{
		if (gemenu.subResources[check1].checkOver==true)
		{
			isOnMenu=check1+1;
		}//end if checkOver 1
		for (check2=0;check2<gemenu.subResources[check1].subResources.length;check2++)
		{
			if (gemenu.subResources[check1].subResources[check2].checkOver==true)
			{
				isOnParent1=check1+1;
				isOnParent2=check2+1;
			}//end checkOver 2
			for (check3=0;check3<gemenu.subResources[check1].subResources[check2].subResources.length;check3++)
			{
				if (gemenu.subResources[check1].subResources[check2].subResources[check3].checkOver==true)
				{
					isOnChild1=check1+1;
					isOnChild2=check2+1;
					isOnChild3=check3+1;
				}//end checkOver 3
			}
		}//end for check2
	}//end for check1
//check all 3 variables, and show the proper menus
	if (isOnMenu!="")
	{
		clearTimeout(timer);
		hideAll();
		showParentLevel(isOnMenu);
	}//end if isOnMenu
	else if (isOnParent1!='')
	{
		clearTimeout(timer);
		hideAllChildren();
		showChildLevel(isOnParent1,isOnParent2);
	}//end else isOnParent
	else if (isOnChild1!='')
	{
		clearTimeout(timer);
	}//end else isOnChild
	else
	{
		timer=setTimeout('hideAll()',500);
	}
}//end function checkVis()

function showParentLevel(menuLevel)
{
	for (change1=0;change1<gemenu.subResources[(menuLevel-1)].subResources.length;change1++)
	{
		var changeString='ch'+menuLevel+'a'+(change1+1);
		changeVisible(changeString,true);
	}
}

function showChildLevel(menuLevel,parentLevel)
{
	for (change2=0;change2<gemenu.subResources[(menuLevel-1)].subResources[(parentLevel-1)].subResources.length;change2++)
	{
		var changeString='ch'+menuLevel+'a'+parentLevel+'b'+(change2+1);
		changeVisible(changeString,true);
	}
}

function hideAll()
{
	for (hide1=0;hide1<gemenu.subResources.length;hide1++)
	{
		for (hide2=0;hide2<gemenu.subResources[hide1].subResources.length;hide2++)
		{
			changeVisible('ch'+(hide1+1)+'a'+(hide2+1),false);
			for (hide3=0;hide3<gemenu.subResources[hide1].subResources[hide2].subResources.length;hide3++)
			{
				changeVisible('ch'+(hide1+1)+'a'+(hide2+1)+'b'+(hide3+1),false);
			}//end for hide3
		}//end for hide2
	}//end for hide1
}

function hideAllChildren()
{
	for (hide1=0;hide1<gemenu.subResources.length;hide1++)
	{
		for (hide2=0;hide2<gemenu.subResources[hide1].subResources.length;hide2++)
		{
			for (hide3=0;hide3<gemenu.subResources[hide1].subResources[hide2].subResources.length;hide3++)
			{
				changeVisible('ch'+(hide1+1)+'a'+(hide2+1)+'b'+(hide3+1),false);
			}//end for hide3
		}//end for hide2
	}//end for hide1
}
