// ==================================================
// global vars
// ==================================================

var tidmenu 	= new Array();	// timer id's voor menu's
var wipmenu 	= new Array();	// timer id's voor WIPES menu's
var wipcount	= new Array();	// teller voor WIPES per menu
var opensubs	= new Array();	// hierin wordt opgeslagen welke submenus per menu openstaan (key van array is menu-id, value = submenu-id)

var curvmenu	= -1;			// welk menu is momenteel 'visible'
var curvsubmenu	= -1;			// welk submenu is momenteel 'visible'

// menu wiper (animeert bij menu mouse-over)

var mwip 		= new Array(0.1, 0.4, 0.72, 0.9, 0.95, 0.98, 0.99, 1);

// global vars die gezet worden op diverse plekken

var submx, submenuy;		// wordt ingesteld bij een mouse-over die leidt naar een submenu, zie menus.php => $itemhover
var dontclosemaster = -1;	// bij mouseout submenu wordt deze na settimout gecheckt, indien deze niet -1 is wordt mastermenu gesloten.
var busybuilding = 0;		// indien 1 dan mogen menuitem-hovers niet reageren

// ==================================================
// menu functions
// ==================================================

// ____ na mouseover een time-out starten voor huidige menu ____

function menu_timeout(menuid, submenu) {
	clearTimeout(tidmenu[menuid]);
	closeparent = submenu ? 1 : 0;
	tidmenu[menuid] = setTimeout("menu_close("+menuid+", "+submenu+", "+closeparent+")", outmenu);
	//if (submenu) window.status = "knal ook me vader uit";
}

// ____ open menu fysiek ____

function menu_open(menuid, submenu, mastermenuid, masteritemid) {
	baseid = submenu ? "subitems" : "menuitems";
	//
	// indien submenu open deze dan adh van x en ypos van masteritem;
	// deze x en ypos (submx en submy) worden meegestuurd vanuit mouseover event
	//
	if (submenu) {
		getElement(baseid + menuid).style.pixelLeft = submx;
		getElement(baseid + menuid).style.pixelTop  = submy + adminbarh;
		opensubs[mastermenuid] = menuid;	// deze array houdt bij welke submenu's er openstaan
	}
	//
	// indien wipen toegestaan en te wipen menu is nog niet open, clip dan te tonen menu naar 0
	// UPDATE: Safari kapt met clippen zodra je een 'auto' ertussenzet. dus alles specificeren!
	//
	if (wipemenus && (submenu ? (curvsubmenu!=menuid) : (curvmenu!=menuid)) ) {
		getElement(baseid + menuid).style.clip = "rect(0px 500px 0px 0px)";
		animwipe = 1;
	} else {
		animwipe = 0;
	}
	//
	// zet menu op zichtbaar en houdt bij welk menu momenteel voor je neus staat
	//
	getElement(baseid + menuid).style.visibility = 'visible';
	if (submenu) {
		curvsubmenu=menuid;
	} else {
		curvmenu=menuid;
	}
	//
	// doe een wipe
	//
	if (animwipe) {
		if (!submenu) busybuilding = 1;
		clearInterval(wipmenu[menuid]);	// clear timer voor huidige menu
		wipcount 		= 0;
		mheight			= eval("document.formmenudata.menutoth"+menuid+".value");
		if (mheight) wipmenu[menuid] = setInterval("menu_wipe('"+baseid+"', "+menuid+", mheight)", 40);
	}
}

// ____ sluit een menu fysiek ____

function menu_close(menuid, submenu, closeparent) {
	if (submenu) {
		//
		// zet iig het huidige submenu uit.
		//
		getElement("subitems" + menuid).style.visibility = 'hidden';
		curvsubmenu = -1;
		//
		// loop door array en zet waarde van menu-id op 0 waar waarde van dat menu-id de momentele menu-id is (uhuh)
		// dit is nodig om de mastermenu te laten weten dat het submenu in kwestie nu uitgezet / onzichtbaar is
		//
		for (m = 0; m < opensubs.length; m++) {
			if (opensubs[m] == menuid) {
				opensubs[m] = 0;
				if (closeparent && m != dontclosemaster) {
					//window.status = "gooi ook mijn master dicht";
					getElement("menuitems" + m).style.visibility = 'hidden';
					curvmenu = -1;
				}
				break;
			}
		}
	} else {
		getElement("menuitems" + menuid).style.visibility = 'hidden';
		curvmenu = -1;
		//
		// check of er nog submenu's openstaan die bij dit menu horen
		// zo ja sluit die dan ook!
		//
		if (typeof(opensubs[menuid]) != 'undefined' && opensubs[menuid] != 0) {
			getElement("subitems" + opensubs[menuid]).style.visibility = 'hidden';
			curvsubmenu = -1;
			opensubs[menuid] = 0;
		}
	}
}

// ____ sluit voorlaatste menu behalve wanneer deze gelijk is aan [excludemenu] ____

function menu_vcheck(excludemenu) {
	if (curvmenu != -1 && curvmenu != excludemenu) {
		clearTimeout(tidmenu[curvmenu]);								// opdat betreffende menu niet meer door timeout-functie wordt aangeroepen
		getElement("menuitems" + curvmenu).style.visibility = 'hidden';	// maak menu onzichtbaar;
		//
		// check of aan het voorlaatste menu nog een submenu hing dat ook nog openstond
		// sluit dit dan ook!
		//
		if (typeof(opensubs[curvmenu]) != 'undefined' && opensubs[curvmenu] != 0) {
			getElement("subitems" + opensubs[curvmenu]).style.visibility = 'hidden';
			curvsubmenu = -1;
			opensubs[curvmenu] = 0;
			//window.status = curvmenu;
		}
	}
}

// ____ idem voor submenu ____

function submenu_vcheck(excludemenu, clearvsubmenu) {
	if (busybuilding) {
		setTimeout("submenu_vcheck("+excludemenu+", "+clearvsubmenu+")", 100);
		return false;
	}
	//alert(1);
	if (curvsubmenu != -1 && curvsubmenu != excludemenu) {
		clearTimeout(tidmenu[curvsubmenu]);									// opdat betreffende menu niet meer door timeout-functie wordt aangeroepen
		getElement("subitems" + curvsubmenu).style.visibility = 'hidden';	// maak menu onzichtbaar;
	}
	if (clearvsubmenu) curvsubmenu = -1;
}

// ____ open submenu ____

function submenu_open(menuid, mastermenuid, masteritemid) {
	if (busybuilding) {
		setTimeout("submenu_open("+menuid+", "+mastermenuid+", "+masteritemid+")", 100);
		return false;
	}

	//window.status='hide all submenus except menuid '+menuid;
	submenu_vcheck(menuid, 0);
	menu_open(menuid, 1, mastermenuid, masteritemid);
}

// ____ houdt een mastermenu zichtbaar bij een onmouseover van een subitem ____

function holdmm(submenuid) {
	//
	// loop door alle mastermenu's heen totdat we bijbehorende submenu tegenkomen en clear dan de timeout die mastermenu verbergt,
	// zodat deze lekker blijft staan!
	//
	for (m = 0; m < opensubs.length; m++) {
		if (opensubs[m] == submenuid) {
			clearTimeout(tidmenu[m]);
			break;
		}
	}
}

// ____ animeer wipe menu ____

function menu_wipe(baseid, menuid, mheight) {
	c = Math.round((mwip[wipcount] * mheight));
	getElement(baseid + menuid).style.clip = "rect(0px 500px "+c+"px 0px)";
	wipcount++;
	if (wipcount >= mwip.length) {
		clearInterval(wipmenu[menuid]);
		busybuilding = 0;
		getElement(baseid + menuid).style.clip = "rect(auto auto auto auto)";
	}
	//window.status = c;
}

// >>>>>>>>>>>>> shortcut functions <<<<<<<<<<<<<

var mhovtids = new Array();

function mhov(menuid, menuoutevent, objid, bgcol, phase) {
	// indien phase = 0, roep zichzelf dan aan na 50 ms; dit om te voorkomen dat je bij hele snelle hover ook al een menu krijgt te zien
	if (!phase) {
		//alert(objid);
		mhovtids[menuid] = setTimeout("mhov("+menuid+", '"+menuoutevent+"', '"+objid+"', '"+bgcol+"', 1)", 100);
		return;
	}
	getElement(objid).style.backgroundColor = bgcol;
	eval(menuoutevent + "("+menuid+")");
	clearTimeout(tidmenu[menuid]);
	menu_open(menuid);
	//this.style.backgroundColor='$menu_bghover'; $menuoutevent($menu_id); clearTimeout(tidmenu[$menu_id]); menu_open($menu_id);
}

function mhout(menuid, issubmenu, objid, bgcol) {
	clearTimeout(mhovtids[menuid]);
	getElement(objid).style.backgroundColor = bgcol;
	menu_timeout(menuid, issubmenu);
	// this.style.backgroundColor='$menu_bgnorm'; menu_timeout($menu_id, $is_submenu);
}

function ihov(menuid, obj, bgcol, sbx, sby, holdmastermenu, mastervalue) {
	submx = sbx;
	submy = sby;
	obj.style.backgroundColor = bgcol;
	clearTimeout(tidmenu[menuid]);
	if (holdmastermenu) holdmm(holdmastermenu);
	dontclosemaster = mastervalue;
}

function ihout(menuid, issubmenu, obj, bgcol) {
	obj.style.backgroundColor = bgcol;
	menu_timeout(menuid, issubmenu);
}

