// control vars
var mlDelay = 50; // delay, ms (default = 40)
var mlOnlyOne = true; // only one element can be opened at a time
var debug = false; // debug alerts

// engine variables
var mlOnAir = false;
var jML;
var i;

// clicker function
function mlOpenClose(that)
{
	if (!mlOnAir)
	{
		// prevent double clicking
		mlOnAir = true;
		
		// zero out variables
		mlElements = []; // affected elements collection
		mlActions = []; // actions collection (0=to be closed, 1=to be opened)
		jML = 0;
		
		var divs = document.getElementsByTagName("div");
		if (debug) alert("Clicked menu: id=" + that);
		
		var mlClass = document.getElementById(that).className;
		
		if (mlClass.match("Level-1-1")) // if clicked menu is open
		{
			// close it
			if (debug) alert("Menu is open. Closing it..");
			document.getElementById(that).className = mlClass.substr(0, mlClass.length-1) + 0;
			for (i = divs.length - 1; i >= 0 ; i--)
			{
				if (divs[i].className.match("mlBox "))
				{
					var id = divs[i].id;
					if (mlParents[id] == that)
					{
						if (debug) alert("Closing element: id=" + id);
						mlElements.push(id);
						mlActions.push(0);
					}
				}
			}
		}
		else // if clicked menu is closed
		{
			// step 1: close all (if set so)
			if (mlOnlyOne)
			{
				if (debug) alert("First, closing all menus..");
				for (i = divs.length - 1; i >= 0 ; i--)
				{
					if (divs[i].className.match("mlBox ml-Level-0") && divs[i].style.display != "none") // hide links
					{
						if (debug) alert("Closing element: id=" + divs[i].id);
						mlElements.push(divs[i].id);
						mlActions.push(0);
					}
					else if (divs[i].className.match("Level-1-1")) divs[i].className = divs[i].className.substr(0, divs[i].className.length-1) + 0; // close menus
				}
			}
			
			// step 2: open it
			if (debug) alert("Openning clicked menu..");
			document.getElementById(that).className = mlClass.substr(0, mlClass.length-1) + 1;
			for (i = 0; i < divs.length; i++)
			{
				if (divs[i].className.match("mlBox "))
				{
					var id = divs[i].id;
					if (mlParents[id] == that)
					{
						if (debug) alert("Openning element: id=" + divs[i].id);
						mlElements.push(id);
						mlActions.push(1);
					}
				}
			}
		}
		
		// change elements from the received array	
		mlLength = mlElements.length;
		if (mlLength)
		{
			//if (debug) alert("Engine starts.");
			mlSlowMo = setInterval('mlChange()', mlDelay); // send to changeML()
		}
		else
		{
			if (debug) alert("This menu has no elements.");
			mlOnAir = false;
		}
	}
}

// clicker engine
function mlChange()
{
	if (jML < mlLength)
	{
		if (document.getElementById(mlElements[jML])) document.getElementById(mlElements[jML]).style.display = mlActions[jML] ? "" : "none"; // actions: 1=open, 0=close
		jML++;
	}
	else
	{
		clearInterval(mlSlowMo);
		mlOnAir = false;
	}
}
