var isie = (document.all) ? true : false;

function MenuItem (id, name)
{
	/// default properties of a menuitemobject
	this.id           = id;
	this.name         = name;
	this.children     = new Array();
	
	/// each menuitemobject gets its own timer to avoid problems with multithreading
	this.timer        = null;			
	
	/// if the method setopacityvalues is triggerd then useopacity will be set to true
	this.useopacityfade	  = false;

		this.opacity      = null;
		this.opacitystart = null;
		this.opacityend   = null;
		this.opacitystep  = null;
		this.opacityspeed = null;

	/// if the method setslidemenuvalues is triggerd then useslidemenu will be set to true
	this.useslidemenu	  = false;
		
		this.height		  = null;

	/// if the method setswapmenuvalues is triggerd then useswapmenu will be set to true
	this.useswapmenu	  = false;
}

	MenuItem.prototype.SetOpacityValues = function (opacitystart, opacityend, opacitystep, opacityspeed)
	{
		this.opacity      = opacitystart;
		
		this.opacitystart = opacitystart;
		this.opacityend   = opacityend;
		this.opacitystep  = opacitystep;
		this.opacityspeed = opacityspeed;
		
		this.useopacityfade = true
	}

	MenuItem.prototype.SetSlideMenuValues = function ()
	{
		this.useslidemenu = true;
	}

	MenuItem.prototype.SetSwapMenuValues = function ()
	{
		this.useswapmenu = true;
	}
	
	MenuItem.prototype.AddChild = function (menuitem)
	{
		this.children[this.children.length] = menuitem;
	}
	
	MenuItem.prototype.Fader = function (state)
	{
		var element = document.getElementById(this.id);
		var self	= this;
		
		clearTimeout (this.timer);
		
		switch (state)
		{
			// fade in
			case true:
				
				this.opacity = this.opacity + this.opacitystep
				
				if (isie)
				{
					element.filters.alpha.opacity = this.opacity;
				}
				else
				{
					element.style.MozOpacity = this.opacity/100;
					element.style.KhtmlOpacity = this.opacity/100;
				}
				
				if (this.opacity < this.opacitystart)
				{
					this.timer = setTimeout(function(){self.Fader(state)}, this.opacityspeed);
				}
				
				break;
			
			// fade out
			case false:
				
				this.opacity = this.opacity - this.opacitystep
				
				if (isie)
				{
					element.filters.alpha.opacity = this.opacity;
				}
				else
				{
					element.style.MozOpacity = this.opacity/100;
					element.style.KhtmlOpacity = this.opacity/100;
				}
				
				if (this.opacity > this.opacityend)
				{
					this.timer = setTimeout(function(){self.Fader(state)}, this.opacityspeed);
				}
				
				break;
		}
    }
	
	MenuItem.prototype.SlideMenu = function (state)
	{
		var subelement = document.getElementById('sub' + this.id);
		
		if (state)
		{
			subelement.style.display = 'block';
		}
		else
		{
			subelement.style.display = 'none';
		}
	}
	
	MenuItem.prototype.SwapMenu = function ()
	{
		var subelement = document.getElementById('sub' + this.id);
		
		if (subelement.style.display == 'none')
		{
			subelement.style.display = 'block';
		}
		else
		{
			subelement.style.display = 'none';
		}
	}

function Initialize (menuobject, activeitem)
{
	/// contains a pointer to the object itself
	var self = menuobject;
	
	/// contains a pointer to the htmlobject
	var element;
	
	element = (document.getElementById(menuobject.id)) ? document.getElementById(menuobject.id) : false;
		
	if (element)
	{
		element.onmouseover = function ()
		{
			if (menuobject.useopacityfade) { self.Fader(false); }
			if (menuobject.useslidemenu) { self.SlideMenu(true); }
		}
		
		element.onmouseout = function ()
		{
			if (menuobject.useopacityfade) { self.Fader(true); }
			if (menuobject.useslidemenu) { self.SlideMenu(false); }
		}
		element.onclick = function ()
		{			
			if (menuobject.useswapmenu) { self.SwapMenu(); }			
		}
		
		if (menuobject.useswapmenu)
		{
			for (var i = 0; i < menuobject.children.length; i++)
			{
				if (menuobject.children[i].id == activeitem)
				{
					menuobject.SwapMenu();
					element.className = 'active';
				}
			}
		}
		
		if (element.id == activeitem)
		{
			element.className = 'active';
		}
	}
	
	for (var i = 0; i < menuobject.children.length; i++)
	{
		Initialize (menuobject.children[i], activeitem);
	}
}

var navigatorloaded = true;