// Get an object by id
///////////////////////////////////////
function MenuScript_FindObject(id, doc)
{
  	var p,i,x; 
   
  	// set document
  	if (!doc) 
  	{
		doc = document; 
  	}
	
	// id has special format: <id>?<frame>
	if ( (p = id.indexOf("?")) > 0 &&
		  parent.frames.length)
	{ 
	    doc = parent.frames[id.substring(p+1)].document; 
		id  = id.substring(0,p);
	}
  
  	// search document
  	if ( !(x = doc[id]) &&
		doc.all)
	{
		x = doc.all[id];
	}
	
	// search forms	
	for (i=0; !x && i<doc.forms.length; i++)
	{
		x = doc.forms[i][id];
	}
	
	// search layers
  	for (i=0; !x && doc.layers && i<doc.layers.length; i++)
	{
		x = MenuScript_FindObject(id, doc.layers[i].document);
	}
  	
	// search document using DOM
	if (!x && doc.getElementById)
	{
		x = doc.getElementById(id);
	}
	
	return x;
}

function MenuScript_Concat(arr1, arr2)
{
	var result = new Array();
	
	for(i=0; i<arr1.length; i++)
	{
		result.push(arr1[i]);	
	}
	
	for(i=0; i<arr2.length; i++)
	{
		result.push(arr2[i]);	
	}
	
	return result;
}

// Get all images in the document
/////////////////////////////////////
function MenuScript_GetAllImages(doc)
{
	var imageList, docImages, layerImages, subLayerImages;
	 
	imageList = new Array();
	  
	// search document
	if (doc.images)
	{  
		imageList = MenuScript_Concat(imageList, doc.images); 
	}
	
	// search layers
	if (doc.layers)
	{
		for(i=0;i<doc.layers.length;i++)
		{
			layerImages=doc.layers[i].document.images;
			
			if(layerImages)
			{
				imageList = MenuScript_Concat(imageList, layerImages);
			}
			
			for(x=0;x<document.layers[i].document.layers.length;x++)
			{
				subLayerImages=document.layers[i].document.layers[x].document.images;
				
				if(subLayerImages)
				{
					imageList = MenuScript_Concat(imageList, subLayerImages);
				}
			}
		}
	}
		
	return imageList; 
}

function InitMenu()
{
	// this method needs to be overriden in the menu module
}

function MenuScript_InitMenu()
{ 
	//set the image over and down name convention
	document.p7TabOver="_over";
	document.p7TabDown="_down";
	
	// check if DOM is available
	var dt = (document.getElementsByTagName) ? true : false;
 	  
	// menu already set?
	if(document.P7TabBar){return;}
	
	var i,k=-1,g,x,gg,tl,ts,ti,tm,tt,tsn,tu,el,args=MenuScript_InitMenu.arguments;
	
	// store properties (passed as arguments)
	P7TabProp=new Array();	
	for(i=0;i<args.length;i++)
	{
		P7TabProp[i]=args[i];
	}
	
	P7TabIM=new Array();	
	P7TabSB=new Array();
	
	// get images
	tm = MenuScript_GetAllImages(document);
		 
	// hide all sub images
	for(i=0;i<tm.length;i++)
	{
		// get image name (e.g. p7TBim40)
		tl = tm[i].name;
		 
		// get image name by id
		if(dt && !tl)
		{
			tl = tm[i].id;
		}
		
		if(tl.indexOf("p7TBim")==0)
		{ 
			// get category number
			ts=tl.replace("p7TBim","");
			
			// get category sub image name
			tsn="p7TBsub"+ts;
			k++;
			
			// add image name to array
			P7TabIM[k]=tl;
			 
			// get sub image object
			if( (g=MenuScript_FindObject(tsn)) != null)
			{
				// add sub image name to array
				P7TabSB[k]=tsn;
				
				// hide sub image???
				gg = (document.layers) ? g : g.style;
				gg.visibility="hidden";
			}
			else
			{
				// image not available
				P7TabSB[k]='N';
			}
		}
	} 
	  
	document.P7_TBswapd=new Array();
	document.P7_TBswapo=new Array();
	
	// create image objects and evaluate param 3
	for(i=0;i<P7TabIM.length;i++)
	{
		g = MenuScript_FindObject(P7TabIM[i]);
		
		// get image source
		gg=g.src;
		
		// store source path in object
		g.p7TBim = g.src;
		
		// store path of over and under images
		tu=gg.lastIndexOf(".");
		g.p7TBimo=gg.substring(0,tu)+document.p7TabOver+gg.substring(tu,gg.length); 
		g.p7TBimd=gg.substring(0,tu)+document.p7TabDown+gg.substring(tu,gg.length);

		
		// create images
		if(P7TabProp[2] > 1)
		{
			document.P7_TBswapo[i] = new Image();
			document.P7_TBswapo[i].src = g.p7TBimo;
		}
		
		if(P7TabProp[2] > 0)
		{
			if(P7TabProp[2]==3) // down == over
			{
				g.p7TBimd=g.p7TBimo;
			}
			
			document.P7_TBswapd[i]=new Image();
		 	document.P7_TBswapd[i].src=g.p7TBimd;
		}
	}
	 
	
	// hide H tabb (???)
	if((g=MenuScript_FindObject('P7TabH'))!=null)
	{
		gg=(document.layers)?g:g.style;
		gg.visibility="hidden";
	}
	
	// unknown functionality (???)
	if(dt&&P7TabProp[3]!='none' && !window.opera)
	{
		g=document.getElementsByTagName("A");
		
		for(i=0;i<g.length;i++)
		{
			if(g[i].hasChildNodes())
			{
				el=g[i].firstChild;
				while (el)
				{
					if(el.nodeType==3)
					{
						gg=el.nodeValue;
						if(P7TabProp[3]==gg.replace("\n",""))
						{
							g[i].className=P7TabProp[4];break;
						}
					}
					
					el=el.firstChild;
				}
			}
		}
	}
	
	// activate tab bar
	document.P7TabBar=true;
}


function MenuScript_TriggerMenu(bu) 
{
	// menu not initialized?
	if(!document.P7TabBar){return;}

	var i,g,d,dB=-1,tF=false,sF=false;
	
	// for each sub bar
	for(i=0;i<P7TabSB.length;i++)
	{
		sF=false;
		
		// check if sub menu exists for this button
		if((g=MenuScript_FindObject(P7TabSB[i]))!=null)
		{
			g=MenuScript_FindObject(P7TabSB[i]);
			gg=(document.layers)?g:g.style;
			sF=true;
		}
		
		d=MenuScript_FindObject(P7TabIM[i]);
		
		// check if this is the category image
		if(P7TabIM[i]==P7TabProp[0])
		{
			dB=i;
		}
		
		// check if this is the MouseOver image
		if(P7TabIM[i]==bu)
		{
			tF=true;
			
			// sub menu available --> then show it
			if(sF)
			{
				gg.visibility="visible";
			}
			
			// not sure what this means (???) 
			if(P7TabProp[2]>0)
			{
				// is category button
				if(i==dB)
				{
					d.src=d.p7TBimd; // show down image
				}
				else if (P7TabProp[2]>1)
				{
					d.src=d.p7TBimo; // show up image
				}
			}
			
			// show H bar
			if((g=MenuScript_FindObject('P7TabH'))!=null)
			{
				gg=(document.layers)?g:g.style;gg.visibility="visible";
			}
		}
		else
		{
			// sub menu available --> then hide it
			if(sF)
			{
				gg.visibility="hidden";
			}
		
			// set menu image back to normal image
			if(P7TabProp[2]>0)
			{
				d.src=d.p7TBim;
			}
		}
	}
	
	// no MouseOver image (other trigger)
	if(!tF)
	{
		// is there a category button
		if(dB>-1)
		{
			// find category button
			d=MenuScript_FindObject(P7TabIM[dB]);
			
			// check if menu needs to stay open all the time (parameter[1] == 0)
			if((g=MenuScript_FindObject(P7TabSB[dB]))!=null&&P7TabProp[1]==0)
			{
				gg=(document.layers)?g:g.style;
				gg.visibility="visible";
			}
					
			// set button to down
			if(P7TabProp[2]>0)
			{
				d.src=d.p7TBimd;
			}
		}
	
		// hide h bar
		if((g=MenuScript_FindObject('P7TabH'))!=null)
		{
			gg=(document.layers)?g:g.style;gg.visibility="hidden";
		}
	}
}