var open_close = false // true or false, false = close the previous item_panel first when opening a new one 
var height = 25; // height of the menu headers
var iheight = 17; // height of the menu_items
var bgc = "#E9E8EE" // background color of the item
var tc = "black" // text color of the item
var over_bgc = "silver";
var over_tc = "blue";
var speed = 1; // time between changing heigth of the item_panel
var steps = 10; // changing heigth in steps of
var timerID = "";
var N = (document.all) ? 0 : 1;
var width = 180
var self_menu = new Array();
function write_menu()
{
	smc = 0; // count the position of the self_menu
	document.write("<div style='position:absolute'>");
	mn = 0;
	mni = 5;
	start = -1;
 
	for(i=0;i<Link.length;i++)
	{
		la = Link[i].split("|");
		if (la[0] == "0")
		{
			if(start == 0) 
			{
				document.write("</div>");
				h =  csmc * iheight;
				tmn = mn;
				self_menu[smc] = new Array(tmn,h,0,-2);
				smc++;
				mn--;
			}
			csmc = 0;
			document.write("<div class='menu' style='top:"+mn+";height:"+height+"' id='down"+smc+"' onclick='prepare=("+smc+"),"+mni+"'>&nbsp;"+ la[1] + "</div>");
			self_menu[smc] = new Array(mn,height,0,mni);
			smc++;
			mni++;
			mn+=height;
			start = 1;
		}
		else
		{
			if(start == 1) 
			{
				if(N)mn+=2;
				document.write("<div class='item_panel' id='down"+smc+"' style='top:"+mn+"'>");
				start = 0;
			}
			document.write("<a href='"+la[2]+"'");
			if (la[3] != "") document.write(" target='" + la[3] + "' ");
			document.write("><div class='item' id='d"+i+"' style='height:"+iheight);
			if (N) document.write(";width:150");
			document.write("' onmouseover='color(this.id)' onmouseout='uncolor(this.id)'>&nbsp;&nbsp;"+ la[1] + "</div></a>");
			csmc++;
		}
	}
	if (start == 0) 
	{
		document.write("</div>");
		h =  csmc * iheight;
		tmn = mn + 5; 
		self_menu[smc] = new Array(tmn,h,0,-2);
		name = "down" + (self_menu.length-1);
		obj = document.getElementById(name);
		obj.style.borderBottomColor = "white";
		obj.style.borderBottomWidth = 1;
		obj.style.borderBottomStyle = "solid";
	}
	document.write("</div>");
}

function color(obj)
{
	document.getElementById(obj).style.backgroundColor = over_bgc;
	document.getElementById(obj).style.color = over_tc
}

function uncolor(obj)
{
	document.getElementById(obj).style.backgroundColor = bgc;
	document.getElementById(obj).style.color = tc
}

var prevnr = -1;
var prevc = -1;
var vprepare = "stop";
var step = 0;

function prepare(nr,c)
{
return;
	if (open_close)
	{
		if(prevnr == -1)
		{
			if(self_menu[nr+1][2] == 0)
			{
				prevnr = nr;
				prevc = c;
			}
			else
			{
				prevnr = -1;
				prevc = -1;
			}
			step = 0;
			pull_down(nr,c);
		}
		else
		{
			if((step == 0) && (prevnr != -1))
			{
				if (self_menu[nr+1][2] == 1)
				{
					step = 0;
					prevnr = -1;
					prevc = -1;
					pull_down(nr,c);
				}
				else
				{
					step = 1;
					pull_down(prevnr,prevc);
					prevnr = nr;
					prevc = c;
				}
			}
			else
			{
				step = 0;
				pull_down(prevnr,prevc);
			}
		}
	}
	else 
	{
		pull_down(nr,c);vprepare = "stop"
	}
}

function end_prepare()
{
	if (step == 1) prepare();
	else {if (timerID != "") clearTimeout(timerID);}
}

function pull_down(nr,c)
{
	if (timerID == "")
	{
		to = self_menu[nr+1][1]
		begin = nr + 2;
		if (timerID != "") clearTimeout(timerID);
		if (self_menu[nr+1][2] == 0)
		{
			self_menu[nr+1][2] = 1;
			if(nr == self_menu.length-2) {to++;}
			epull_down(begin,to,0);
		}
		else
		{
			to = 0;
			self_menu[nr+1][2] = 0;
			name = "down"+(nr+2);
			open_item = 0;
			for(i=0;i<nr;i++)
			{
				if(self_menu[i][2] == 1) 
				{
					open_item += self_menu[i][1];
				}
			}
			if (N == false) {open_item-= (c*1)};
			if (nr== self_menu.length-2) {val = self_menu[self_menu.length-1][1];to=-1;}
			else  val = parseInt(document.getElementById(name).style.top) -(open_item)-(c*height);
			epull_up(begin,to,val);
		}
	}
}

function epull_down(nr,to,nowv)
{
	if((nowv + steps) >= to) {vsteps = to - nowv;}
	else {vsteps = steps;}
	name = "down" + (nr-1);
	obj = document.getElementById(name).style.clip = "rect(0,"+width+","+(nowv+vsteps)+",0)";
	for (i=nr;i<self_menu.length;i++)
	{
		name = "down" + i;
		obj = document.getElementById(name);
		obj.style.top = parseInt(obj.style.top)+vsteps;
	}
	nowv+=vsteps;
	if(nowv < to) timerID = setTimeout("epull_down("+nr+","+to+","+nowv+")",speed);
	else {timerID = "";if(startid != "stop") open_all(); else end_prepare()}
}

function epull_up(nr,to,nowv)
{
	if((nowv-steps) <= to) {vsteps = nowv-to;nowv = 0;if(to == -1) vstep = nowv}
	else {vsteps = steps;}
	name = "down" + (nr-1);
	obj = document.getElementById(name).style.clip = "rect(0,"+width+","+nowv+",0)";
	for (i=nr;i<self_menu.length;i++)
	{
		name = "down" + i;
		obj = document.getElementById(name);
		obj.style.top = parseInt(obj.style.top)-vsteps;
	}
	nowv-=vsteps;
	if(nowv > to) timerID = setTimeout("epull_up("+nr+","+to+","+nowv+")",speed);
	else {timerID = ""; end_prepare();}
}

var lb = new Array();

function startup(nr)
{
	write_menu();
	if(nr)
	{
	if(((nr.indexOf("|") != -1) || (nr.indexOf("all") != -1)) && (open_close == true)) alert("Error: the open_close property can only be used with a maximum of 1 default item.");
		if (nr == "all")
		{
			j = 0;
			for(i=0;i<self_menu.length;i++)
			{
				if(self_menu[i][3] != -2) {lb[j] = self_menu[i][3];j++;}
			}
		}
		else
		{
			lb = nr.split("|");
		}
		open_all();
	}
	else startid = "stop";
}

var startid = 0;
var open_part = 0;

function open_all()
{
	startid = lb[open_part];
	for(i=0;i<self_menu.length;i++)
	{
		if(self_menu[i][3] == startid) 
		{
			prevnr = i;
			prevc = startid;
			pull_down(i,startid);
			i==self_menu.length;
			open_part++;
		}
	}
	if(open_part == lb.length) startid = "stop";
}
