// Fly-out Menu beta 2
// created by Mark S. Maglana (mmaglana@hotmail.com)
// last updated August 29, 2001       

// if you like this script, you may use it, 
// but please keep this comment with the 
// script. I need the advertising. I need
// to feed my three kids (2,3, and 4 years old)...just kidding

// function createNavBar([id])
//	the function returns a value representing its unique id so
//	that you can put as many navbars in a page as you want.
// 	use the returned value as a parent id of your main menu items.

// function createMenu(parent id, label, [URL], [icon])
//      the function returns a value representing its unique id in the
//      navbar. you can use the returned value as a parent id


// BUGS IN THIS VERSION
//
// - known to act all wrong when you create a third-level menu. the
//   menu disappears even when you mouseover it.
// - the layout gets screwed if you have a menu item spanning more than
//   one line and has an icon to its left.


//global variables
var id1,id2; 
var menuToHide;

//psuedo-constants
var invalids = /\W/ig;
var disabled = true;

function fmMouseOver(menu){
	changeClassName(menu,"fmMouseOver");
	Show(document.all(menu.handle));
}

function fmMouseOut(menu){
	changeClassName(menu, "fmMouseOut");
	Hide(document.all(menu.handle));
}

function fmMouseDown(menu){
	changeClassName(menu, "fmMouseDown");
}

function fmMouseUp(menu){
	changeClassName(menu, "fmMouseOver");
}

function Show(fmenu){
	if(menuToHide==fmenu.id){
//		document.all("log").innerHTML += ("<br>cancel hiding " + fmenu.id);
		clearTimeout(id1);
		clearTimeout(id2);
		id1 = id2 = "";
		menuToHide="";
	}
	if(fmenu.innerHTML!=""){
		setTimeout("document.all('" + fmenu.id + "shadow').style.visibility=''", 250)
		setTimeout("document.all('" + fmenu.id + "').style.visibility=''", 250);
	}
}

function Hide(fmenu){
//	if(id1==""){
//		document.all("log").innerHTML += ("<br>hiding " + fmenu.id);
		id1 = setTimeout("document.all('" + fmenu.id + "').style.visibility='hidden'", 275);
		id2 = setTimeout("document.all('" + fmenu.id + "shadow').style.visibility='hidden'", 275);
		menuToHide = fmenu.id;
//	}
}

function changeClassName(menu, className){
	if (menu.className!="fmCurrent") menu.className = className;
}

function isCurrent(URLmnu){
	var trailing = /\/$/ig;
	var URLDoc = (window.location.href).replace(trailing, "");
	URLMnu = URLmnu.replace(trailing, "");
	
	var arrDoc = URLDoc.split("/");
	var arrMnu = URLMnu.split("/");
	var current = (arrDoc.length==arrMnu.length)? true : false;
	for(ii=0;ii<arrMnu.length && current==true;ii++){
		if(arrDoc[ii]!=arrMnu[ii]) current=false;
	}
	return current;
}

function createNavBar(){
	var argv = createNavBar.arguments;  
	var argc = createNavBar.arguments.length; 
	var label = (argc>0)? argv[0] : "";
	var id;

	if(label=="") {
		do{
			id = Math.floor(1000000*Math.random()).toString();
		}while(document.all(id)!=null)
	} else {
		id = label.replace(invalids, "");
	}

	document.write("<div id=\"" + id + "\"" + 
				        "count=\"0\"" +
						"rootmenu=\"true\"" +
						"style=\"position:absolute; height:25px; z-index:1; visibility: visible\"" +
						"class=\"fmMenu\"></div>");

	return id;
}

function createMenu(parentID,label){
	var argv = createMenu.arguments;  
	var argc = createMenu.arguments.length; 
	var link = (argc>2)? argv[2] : "#";
	var icon = (argc>3)? argv[3] : null;
	var current = isCurrent(link);
	
	var id;
	var count = document.all(parentID).count;
	var parentMenu = document.all(parentID);
	var parentShadow = document.all(parentID + "shadow");
	var separator = (label=="-")? true : false;

	count++;
	id = parentID + "_" + ((separator)? ("separator"+count) : (label.replace(invalids, "")));

	if(document.all(id)!=null){
		alert("cannot create the menu [" + id + "]. The name is already being used by another menu.");
	} else {
		parentMenu.count = count;		
		parentMenu.innerHTML += "<div handle=\"" + id + "\"" +
								"id=\"" + id + "label\"" +
								"rootmenu=\"false\"" +
								((!current)? ("class=\"fmMouseOut\"") : ("class=\"fmCurrent\"")) +
								((!separator&&!current)? ("onclick=\"window.location.href='" + link + "'\"") : "") +
								((!separator)? ("onmouseover=\"fmMouseOver(this)\" onmouseout=\"fmMouseOut(this)\" onmousedown=\"fmMouseDown(this)\" onmouseup=\"fmMouseUp(this)\"") : "") +
								((icon==null&&!separator)? ("style=\"padding-left:21px;\">") : "") +
								((icon!=null)? ("><img src=\"" + icon + "\" width=\"15\" height=\"15\" hspace=\"2\" align=\"absmiddle\">") : "") + 
								((!separator)? (label) : ("><hr size=\"1\" noshade>")) +
								"</div>" +
								"<div id=\"" + id + "shadow\"" + "class=\"fmShadow\"" +
									 "style=\"position:absolute; z-index:1;" +
									 "left: " + (parentMenu.offsetWidth-5) + "; visibility:hidden;\"></div>" +
								"<div id=\"" + id + "\"" + 
									 "count=\"0\"" +
									 "onmouseover=\"Show(this)\"" +
									 "onmouseout=\"Hide(this)\"" +
									 "class=\"fmMenu\"" +
									 "style=\"position:absolute; z-index:2;" +
									 "left: " + (parentMenu.offsetWidth-5) + ";visibility:hidden;\"></div>"
	}
	if(parentShadow!=null){
		parentShadow.style.width  = parentMenu.offsetWidth;
		parentShadow.style.height = parentMenu.offsetHeight;
		parentMenu.style.top = document.all(parentMenu.id + 'label').offsetTop-2;
		parentShadow.style.top = document.all(parentMenu.id + 'label').offsetTop-2;
	}
	if(parentMenu.rootmenu!='true'&&parentMenu.count==1)
		parentMenu.parentNode.innerHTML += "<div style=\"position:absolute; width:10px; z-index:1;cursor:hand;left:" + (parentMenu.offsetWidth-15) + "; top: " + document.all(parentMenu.id + 'label').offsetTop + "\"><img src=\"flyout_arrow.gif\" vspace=\"7\"></div>";

	return id;
}
