/*

Title: Advance Javascript menu 
Version: 1.0 beta
Author: Jodaryle R. Factor
Date: Oct. 30, 2004
Tel.#: (562) 925-2329
Programmed in language: Javascript
Documentation: none
Copyright (c) 2004
*/


/*
// -------------------------------------------------------------------------
//  Menu page variables
// -------------------------------------------------------------------------
*/

var BOX_IN = 0;
var BOX_OUT = 1;
var CIRCLE_IN = 2;
var CIRCLE_OUT = 3;
var WIPE_UP = 4;
var WIPE_DOWN = 5;
var WIPE_RIGHT = 6;
var WIPE_LEFT = 7;
var VERITCAL_BLINDS = 8;
var HORIZONTAL_BLINDS = 9;
var CHECKERBOARD_ACROSS = 10;
var CHECKERBOARD_DOWN = 11;
var RANDOM_DISSOLVE = 12;
var SPLIT_VERTICAL_IN = 13;
var SPLIT_VERTICAL_OUT = 14;
var SPLIT_HORIZONTAL_IN = 15;
var SPLIT_HORIZONTAL_OUT = 16;
var STRIPS_LEFT_DOWN = 17;
var STRIPS_LEFT_UP = 18;
var STRIPS_RIGHT_DOWN = 19;
var STRIPS_RIGHT_UP = 20;
var RANDOM_BARS_HORZONTAL = 21;
var RANDOM_BARS_VERTICAL = 22;
var RANDOM = 23;

var INPUT_TYPE_CHECKBOX = 0;
var INPUT_TYPE_RADIO = 1;
var INPUT_TYPE_BUTTON = 2;
var INPUT_TYPE_SUBMIT = 3;
var INPUT_TYPE_TEXTBOX = 4;

var FILTER_STOPPED = 0;
var FILTER_APPLIED = 1;
var FILTER_PLAYING =2;

var COMBO_BOX_TYPE = 65535;
var mousIsOverCombo = false;
var removeEffectOnMenus = false;

var _mouseX = 0;
var _mouseY = 0;

var _nav = getNav();

var timeToCheck;
if (_nav=="MS") 
	timeToCheck = 350;
else
	timeToCheck = 500;
	
mouseDetect();

//var defaultHighLight = 0x7f7fff;	// 
var defaultHighLight = "blue";	// 
var defaultForeGround = 0xff0000;

var nMenus = 0;
var arrMenu = new Array();
var arrMenuBody = new Array();
var arrMenuParent = new Array();
var arrIsIn = new Array();
var arrVisibleAlways = new Array();
var arrDisableEffect = new Array();
var arrMenuAtMousePos = new Array();

var arrMenuItemID = new Array();
var arrMenuItemChild = new Array();
var arrMenuItemHighlight = new Array();

var menuPath = "";


// -------------------------------------------------------------------------
//  MISC
// -------------------------------------------------------------------------

function getNav ()
{
	var snav = navigator.appName.toUpperCase();
	
	if (snav.indexOf("MICROSOFT")>-1)
		return "MS";
	else 
		if (snav.indexOf("NETSCAPE")>-1)
			return "NS";
	else
		return "NMS";
}

function NetscapeCall(proc)
{
	var ret = "eval(" + proc + ")";
	return ret;
}

function _fnull() {}


// -------------------------------------------------------------------------
//  Mouse Event handler
// -------------------------------------------------------------------------

function mouseDetect()
{
	// If NS -- that is, !IE -- then set up for mouse capture
	if (_nav!="MS") 
		document.captureEvents(Event.MOUSEMOVE);

	// Set-up to use getMouseXY function onMouseMove
	document.onmousemove = getMousePosition;
}

// Main function to retrieve mouse x-y pos.s

function getMousePosition(e) 
{
	if (_nav=="MS") 
	{ 
		_mouseX = event.clientX + document.body.scrollLeft;
		_mouseY = event.clientY + document.body.scrollTop;
	}
	else 
	{ 
		_mouseX = e.pageX
		_mouseY = e.pageY
	}  
	// catch possible negative values in NS4
	if (_mouseX < 0)
		_mouseX = 0;
	if (_mouseY < 0)
		_mouseY = 0;
	  
	return true;
}


// -------------------------------------------------------------------------
//  Menu creation
// -------------------------------------------------------------------------

function RegisterMenu (isPopup)
{
	var idx = nMenus;
	
	arrMenuParent[idx] = "";
	arrMenuAtMousePos[idx] = -1;
	arrDisableEffect[idx] = false;
	
	arrMenuItemChild[idx] = new Array(); // New array of int for item child menu
	arrMenuItemID[idx] = new Array(); // New array of int for item ids
	arrIsIn[idx] = 0;
	arrVisibleAlways[idx] = !isPopup;	// Popup is not visible always
	
	// Set menu highlight
	arrMenuItemHighlight[idx] = defaultHighLight;
	
	// IFRAME -----------------
	var iframeObj;
	if (_nav=="MS")
	{
		iframeObj = document.createElement("<IFRAME src='' frameborder=0 scrolling='no' class='transparentFrame' style='z-index:99998;top:1;left:1'>");
		iframeObj.id = "_frameMenu" + idx.toString();
		iframeObj.style.position = "ABSOLUTE";
	}
	// -----------------
	
	var tableObj = document.createElement("TABLE");		
	var tableBody = document.createElement("TBODY");
	
	tableObj.id = "_menu" + idx.toString();
	tableObj.style.position = "ABSOLUTE";
	tableObj.style.left = 1;
	tableObj.style.top = 1;
	
	tableObj.border = 0;
	if (_nav=="MS")
		tableObj.className = "menuBorder";
	else
		tableObj.className = "menuBorderNMS";
		
	if (!arrVisibleAlways[idx])
	{
		if (_nav=="MS") // IFRAME -----------------
			iframeObj.style.visibility = "hidden";
			
		tableObj.style.visibility = "hidden";
	}
	else
	{
		if (_nav=="MS") // IFRAME -----------------
			iframeObj.style.visibility = "visible";
			
		tableObj.style.visibility = "visible";
	}
		
	tableObj.setAttribute ("border","2");
	tableObj.cellSpacing = 0;
	tableObj.cellPadding = 4;
	tableObj.style.zIndex = 99999;
	
	tableObj.appendChild(tableBody);
	
	arrMenuBody[idx] = tableBody;
	arrMenu[idx] = tableObj;
	
	document.body.appendChild(tableObj);

	if (_nav=="MS") // IFRAME -----------------
		document.body.appendChild(iframeObj);
		
	// ---------------------------------------------------------
	//	add event on mouseover and out
	// ---------------------------------------------------------
	var objectName = "_menu" + idx.toString();
	AttachMenu (objectName,idx);
	
    nMenus ++;
	
	return idx;
}

// handle: handle of menu return by RegisterMenu()
// <a id="idName" href="href" class="style">displayText</a>
function AddMenuItem (handle,idName,displayText,href,style,willHaveSubMenu)
{
	// Get menu itemchild array
	// add a -1 handle to tail
	// this will be used to display submenu
	var arrItemChild = arrMenuItemChild[handle];
	var itemIdx = arrItemChild.length;
	var arrItemID = arrMenuItemID[handle];
	
	arrItemChild[itemIdx] = -1;
	
	
	// ---------------------------------------------------
	
	var tableBody = arrMenuBody[handle];
	var rowObj = document.createElement('TR');
	
	var colID = idName + "_cell";
	
	// Add the Cell for menu Item Image
	var colObjImg;
	if (_nav=="MS")
	{
		colObjImg = document.createElement('<TD valign="top">');
	}
	else
	{
		colObjImg = document.createElement('TD');
		colObjImg.setAttribute ("align","top");
	}
		
	colObjImg.id = colID + "_img";
	colObjImg.width = 1;
	colObjImg.className = style;
	colObjImg.align = "left";
	
	// Add the Item Menu Text
	var colObj = document.createElement('TD');
	var anchorObj = document.createElement('a');
	var anchorText = document.createTextNode(displayText);

	arrItemID[itemIdx] = idName + ",<ANCHOR>";	// put name to array
	
	anchorObj.id = idName;
	anchorObj.className = style;
	anchorObj.appendChild (anchorText);
	anchorObj.style.cursor = "hand";
	
	colObj.id = colID;
	colObj.className = style;
	// Check if this item will be a Submenu
	if (!willHaveSubMenu)
	{
		if (href=="")
			anchorObj.href = "javascript:_fnull()";
		else
			anchorObj.href = href;
	}
	else
		anchorObj.href = "javascript:_fnull()";
		
	colObj.appendChild(anchorObj);		
	
	// Add the Cell for Submenu arrow image
	// Add the Cell for menu Item Image
	var colObjArrow;
	if (_nav=="MS")
		 colObjArrow = document.createElement('<TD valign="top">');
	else
	{
		colObjArrow = document.createElement('TD');
		colObjArrow.setAttribute("valign","top");
	}
	
	colObjArrow.id = colID + "_arrow";
	colObjArrow.width = 1;
	colObjArrow.className = style;
	colObjArrow.align = "left";
	
	// Add the Item to Collection
	rowObj.id = idName + "_row";
	rowObj.appendChild(colObjImg);
	rowObj.appendChild(colObj);
	rowObj.appendChild(colObjArrow);
	
	tableBody.appendChild(rowObj);
	
	// ----------------------------------------------------------------
	// Add onMouseOver and onMouseOut to item to change the highlight
	// ----------------------------------------------------------------
	var itemObj = document.getElementById(idName);
	var procCall_mv = "ShowCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	var procCall_mo = "HideCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	
	if (_nav=="MS")
	{
		itemObj.setAttribute("onmouseover",new Function(procCall_mv));
		itemObj.setAttribute("onmouseout",new Function(procCall_mo));	
	}
	else
	{
		itemObj.setAttribute("onmouseover",NetscapeCall(procCall_mv));
		itemObj.setAttribute("onmouseout",NetscapeCall(procCall_mo));	
	}
	
	//itemObj.attachEvent("onmouseover",function _mo(){eval(procCall_mv)});
	//itemObj.attachEvent("onmouseout",function _mo(){eval(procCall_mo)});	
}


// handle: handle of menu return by RegisterMenu()
// <a id="idName" href="href" class="style">displayText</a>
function AddMenuItem_HORIZ (handle,idName,displayText,href,style,willHaveSubMenu)
{
	// Get menu itemchild array
	// add a -1 handle to tail
	// this will be used to display submenu
	var arrItemChild = arrMenuItemChild[handle];
	var itemIdx = arrItemChild.length;
	var arrItemID = arrMenuItemID[handle];
	
	arrItemChild[itemIdx] = -1;
	
	// ---------------------------------------------------
	
	var tableBody = arrMenuBody[handle];
	var rowObj;
	var rowFound = true;
	var rowID = "_menu_TR_"+handle.toString();
	
	rowObj = document.getElementById(rowID);
	
	if (rowObj==null)
	{
		if (_nav=="MS")
			rowObj = document.createElement("<TR id='"+rowID+"'>");
		else
		{
			rowObj = document.createElement("TR");
			rowObj.setAttribute ("id",rowID);
		}
		rowFound = false;
	}
	
	var colID = idName + "_cell";
	
	// Add the Cell for menu Item Image
	var colObjImg;
	if (_nav=="MS")
		colObjImg = document.createElement('<TD valign="top">');
	else
	{
		colObjImg = document.createElement('TD');
		colObjImg.setAttribute ("valign","top");
	}
	
	colObjImg.id = colID + "_img";
	colObjImg.width = 1;
	colObjImg.className = style;
	colObjImg.align = "left";
	
	// Add the Item Menu Text
	var colObj = document.createElement('TD');
	var anchorObj = document.createElement('a');
	var anchorText = document.createTextNode(displayText);
	
	arrItemID[itemIdx] = idName + ",<ANCHOR>";	// put name to array
	anchorObj.id = idName;
	anchorObj.className = style;
	anchorObj.appendChild (anchorText);
	anchorObj.style.cursor = "hand";
	
	colObj.id = colID;
	colObj.className = style;
	colObj.align = "center";
	// Check if this item will be a Submenu
	if (!willHaveSubMenu)
	{
		if (href=="")
			anchorObj.href = "javascript:_fnull()";
		else
			anchorObj.href = href;
	}
	else
		anchorObj.href = "javascript:_fnull()";
	colObj.appendChild(anchorObj);		
	
	// Add the Cell for Submenu arrow image
	// Add the Cell for menu Item Image
	var colObjArrow;
	if (_nav=="MS")
		colObjArrow = document.createElement('<TD valign="top">');
	else
	{
		colObjArrow = document.createElement('TD');
		colObjArrow.setAttribute ("valign","top");
	}
	
	colObjArrow.id = colID + "_arrow";
	colObjArrow.width = 1;
	colObjArrow.className = style;
	colObjArrow.align = "left";
	
	// Add the Item to Collection
	rowObj.appendChild(colObjImg);
	rowObj.appendChild(colObj);
	rowObj.appendChild(colObjArrow);
	
	if (!rowFound)
		tableBody.appendChild(rowObj);
	
	// ----------------------------------------------------------------
	// Add onMouseOver and onMouseOut to item to change the highlight
	// ----------------------------------------------------------------
	var itemObj = document.getElementById(idName);
	var procCall_mv = "ShowCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	var procCall_mo = "HideCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	
	if (_nav=="MS")
	{
		itemObj.setAttribute("onmouseover",new Function(procCall_mv));
		itemObj.setAttribute("onmouseout",new Function(procCall_mo));			
		//colObj.setAttribute("onmouseover",new Function(procCall_mv));
		//colObj.setAttribute("onmouseout",new Function(procCall_mo));		
	}
	else
	{
		itemObj.setAttribute("onmouseover",NetscapeCall(procCall_mv));
		itemObj.setAttribute("onmouseout",NetscapeCall(procCall_mo));			
		//colObj.setAttribute("onmouseover",NetscapeCall(procCall_mv));
		//colObj.setAttribute("onmouseout",NetscapeCall(procCall_mo));		
	}
}

function AddMenuItemAsLabel_HORIZ (handle,idName,align,displayText,style)
{
	
	// Get menu itemchild array
	// add a -1 handle to tail
	// this will be used to display submenu
	
	var arrItemChild = arrMenuItemChild[handle];
	var itemIdx = arrItemChild.length;
	var arrItemID = arrMenuItemID[handle];
	
	arrItemChild[itemIdx] = -1;
	
	
	
	// ---------------------------------------------------
	
	var tableBody = arrMenuBody[handle];
	var rowObj;
	var rowFound = true;
	var rowID = "_menu_TR_"+handle.toString();
	
	rowObj = document.getElementById(rowID);
	
	if (rowObj==null)
	{
		if (_nav=="MS")
			rowObj = document.createElement("<TR id='"+rowID+"'>");			
		else
		{
			rowObj = document.createElement("TR");
			rowObj.setAttribute ("id",rowID);
		}
		rowFound = false;
	}
	
	var colID = idName + "_cell";
	
	// Add the Item Menu Text
	var colObj = document.createElement('TD');
	var txtObj = document.createTextNode(displayText);

	arrItemID[itemIdx] = idName + ",<LABEL>";	// put name to array	
	colObj.id = colID;
	colObj.className = style;
	colObj.align = align;
	
	// Add the Item to Collection
	colObj.appendChild(txtObj);
	rowObj.appendChild(colObj);
	
	if (!rowFound)
		tableBody.appendChild(rowObj);	
}

function AddMenuItemAsINPUT (handle,idName,groupName,initialValue,displayText,style,inputType)
{
	// Get menu itemchild array
	// add a -1 handle to tail
	// this will be used to display submenu
	var arrItemChild = arrMenuItemChild[handle];
	var itemIdx = arrItemChild.length;
	var arrItemID = arrMenuItemID[handle];
	
	arrItemChild[itemIdx] = -1;
	
	// ---------------------------------------------------
	
	var tableBody = arrMenuBody[handle];
	var rowObj = document.createElement('TR');
	var colID = idName + "_cell";
	
	// Add the Cell for menu Item Image
	var colObjImg = document.createElement('TD');
	colObjImg.id = colID + "_img";
	colObjImg.width = 1;
	colObjImg.className = style;
	colObjImg.align = "left";
	
	// Add the Item Menu Text
	var colObj = document.createElement('TD');
	var inputObj;
	var labelObj;
	
	if (inputType==INPUT_TYPE_RADIO)
	{
		if (_nav=="MS")
			inputObj = document.createElement("<INPUT name='"+groupName+"'>");
		else
		{
			inputObj = document.createElement("INPUT");
			inputObj.setAttribute ("name",groupName);
		}
	}
	else
		inputObj =document.createElement('INPUT');
	
	inputObj.id = idName;
	inputObj.className = style;
	inputObj.style.cursor = "hand";
	
	colObj.id = colID;
	colObj.className = style;
	colObj.valign = "center";
	
	switch (inputType)
	{
		case INPUT_TYPE_CHECKBOX: 
			inputObj.type = "checkbox";
			inputObj.style.width = 13;			
			arrItemID[itemIdx] = idName + ",<CHECKBOX>";	// put name to array
			
			labelObj = document.createTextNode(displayText);
			colObj.appendChild (inputObj);
			colObj.appendChild(labelObj);				
			break;
			
		case INPUT_TYPE_RADIO: 
			inputObj.type = "radio";
			inputObj.style.width = 13;
			arrItemID[itemIdx] = idName + ",<RADIO>";	// put name to array
			
			labelObj = document.createTextNode(displayText);
			colObj.appendChild (inputObj);
			colObj.appendChild(labelObj);	
			break;
			
		case INPUT_TYPE_TEXTBOX: 
			inputObj.type = "text";
			inputObj.style.width = 150;
			arrItemID[itemIdx] = idName + ",<TEXTBOX>";	// put name to array
			
			labelObj = document.createTextNode(displayText);
			colObj.appendChild (labelObj);			
			colObj.appendChild(inputObj);					
			break;
			
		case INPUT_TYPE_BUTTON: 
			inputObj.type = "button";
			inputObj.style.width = 90;
			inputObj.value = displayText;
			arrItemID[itemIdx] = idName + ",<BUTTON>";	// put name to array
			colObj.appendChild(inputObj);					
			break;
			
			
	}
		
	// Add the Cell for Submenu arrow image
	// Add the Cell for menu Item Image
	var colObjArrow = document.createElement('TD');
	colObjArrow.id = colID + "_arrow";
	colObjArrow.width = 1;
	colObjArrow.className = style;
	colObjArrow.align = "left";
	
	// Add the Item to Collection
	rowObj.appendChild(colObjImg);
	rowObj.appendChild(colObj);
	rowObj.appendChild(colObjArrow);
	
	tableBody.appendChild(rowObj);
	
	// Set the Initial value
	switch (inputType)
	{
		case INPUT_TYPE_CHECKBOX:
		case INPUT_TYPE_RADIO: 
			if (initialValue!="")
				inputObj.setAttribute("checked",true);
			else
				inputObj.setAttribute("checked",false);
			break;
			
		case INPUT_TYPE_TEXTBOX: 
			inputObj.value = initialValue;
			break;			
	}
	
	// ----------------------------------------------------------------
	// Add onMouseOver and onMouseOut to item to change the highlight
	// ----------------------------------------------------------------
	var itemObj = document.getElementById(idName);
	var procCall_mv = "ShowCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	var procCall_mo = "HideCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	
	if (_nav=="MS")
	{
		itemObj.setAttribute("onmouseover",new Function(procCall_mv));
		itemObj.setAttribute("onmouseout",new Function(procCall_mo));		
	}
	else
	{
		itemObj.setAttribute("onmouseover",NetscapeCall(procCall_mv));
		itemObj.setAttribute("onmouseout",NetscapeCall(procCall_mo));		
	}
	
	//itemObj.attachEvent("onmouseover",function _mo(){eval(procCall_mv)});
	//itemObj.attachEvent("onmouseout",function _mo(){eval(procCall_mo)});		
}

function AddMenuItemAsLABEL (handle,idName,align,displayText,style)
{
	var arrItemChild = arrMenuItemChild[handle];
	var itemIdx = arrItemChild.length;
	var arrItemID = arrMenuItemID[handle];
	
	arrItemChild[itemIdx] = -1;

	// ---------------------------------------------------
	
	var tableBody = arrMenuBody[handle];
	var rowObj = document.createElement('TR');
	var colID = idName + "_cell";
		
	// Add the Cell for menu Item Image
	var colObjImg = document.createElement('TD');
	colObjImg.id = colID + "_img";
	colObjImg.width = 1;
	colObjImg.className = style;
	colObjImg.align = "left";
	
	// Add the Item Menu Text
	var colObj = document.createElement('TD');
	var labelObj = document.createTextNode(displayText);
	
	arrItemID[itemIdx] = idName + ",<LABEL>";	// put name to array
	colObj.id = colID;
	colObj.className = style;
	colObj.align = align;
	colObj.appendChild(labelObj);
	if (displayText=="")
		colObj.style.height = 15;
	
	
	// Add the Cell for Submenu arrow image
	// Add the Cell for menu Item Image
	var colObjArrow = document.createElement('TD');
	colObjArrow.id = colID + "_arrow";
	colObjArrow.width = 1;
	colObjArrow.className = style;
	colObjArrow.align = "left";
	
	// Add the Item to Collection
	rowObj.appendChild(colObjImg);
	rowObj.appendChild(colObj);
	rowObj.appendChild(colObjArrow);
	
	tableBody.appendChild(rowObj);	
}

function AddMenuItemAsSEPARATOR (handle,idName,style)
{
	var arrItemChild = arrMenuItemChild[handle];
	var itemIdx = arrItemChild.length;
	var arrItemID = arrMenuItemID[handle];
	
	arrItemChild[itemIdx] = -1;

	// ---------------------------------------------------
	
	var tableBody = arrMenuBody[handle];
	var rowObj = document.createElement('TR');
	var colID = idName + "_cell";
		
	// Add the Item Menu Text
	var colObj;
	var hrObj;
	if (_nav=="MS")
	{
		colObj = document.createElement('<TD colspan=3>');
		hrObj = document.createElement('<HR size=2 width="95%">');
	}
	else
	{
		colObj = document.createElement('TD');
		colObj.setAttribute ("colspan",3);
		hrObj = document.createElement('HR');
		hrObj.setAttribute ("size",3);
		hrObj.setAttribute ("width","95%");
	}

	arrItemID[itemIdx] = idName + ",<SEPARATOR>";	// put name to array
	colObj.id = colID;
	colObj.className = style;
	colObj.width = "100%";
	colObj.appendChild(hrObj);		
	
	// Add the Item to Collection
	rowObj.appendChild(colObj);
	tableBody.appendChild(rowObj);	
	colObj.border = 1;
}

function AddMenuItemAsDROPDOWN (handle,idName,listSize,displayText,style)
{
	// Get menu itemchild array
	// add a -1 handle to tail
	// this will be used to display submenu
	var arrItemChild = arrMenuItemChild[handle];
	var itemIdx = arrItemChild.length;
	var arrItemID = arrMenuItemID[handle];
	
	arrItemChild[itemIdx] = -1;
	// ---------------------------------------------------
	
	var tableBody = arrMenuBody[handle];
	var rowObj = document.createElement('TR');
	var colID = idName + "_cell";
	
	// Add the Cell for menu Item Image
	var colObjImg = document.createElement('TD');
	colObjImg.id = colID + "_img";
	colObjImg.width = 1;
	colObjImg.className = style;
	colObjImg.align = "left";
	
	// Add the Item Menu Text
	var colObj = document.createElement('TD');
	var selectObj;
	
	if (listSize>0)
		selectObj = document.createElement("<SELECT size="+listSize+">");
	else
		selectObj = document.createElement("SELECT");
	
	var labelText = document.createTextNode(displayText);

	arrItemID[itemIdx] = idName + ",<COMBOBOX>";	// put name to array	
	selectObj.id = idName;
	selectObj.className = style;
	selectObj.style.cursor = "hand";
	
	colObj.id = colID;
	colObj.className = style;
	colObj.appendChild(labelText);
	colObj.appendChild(selectObj);
	
	// Add the Cell for Submenu arrow image
	// Add the Cell for menu Item Image
	var colObjArrow = document.createElement('TD');
	colObjArrow.id = colID + "_arrow";
	colObjArrow.width = 1;
	colObjArrow.className = style;
	colObjArrow.align = "left";
	
	// Add the Item to Collection
	rowObj.appendChild(colObjImg);
	rowObj.appendChild(colObj);
	rowObj.appendChild(colObjArrow);
	
	tableBody.appendChild(rowObj);
	
	// ----------------------------------------------------------------
	// Add onMouseOver and onMouseOut to item to change the highlight
	// ----------------------------------------------------------------
	var itemObj = document.getElementById(idName);
	var procCall_mv = "ShowCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	var procCall_mo = "HideCellHightlight (" + handle.toString() + ",'" + colID + "',"+itemIdx+")";
	
	itemObj.setAttribute("onmouseover",new Function(procCall_mv));
	itemObj.setAttribute("onmouseout",new Function(procCall_mo));
	
	//itemObj.attachEvent("onmouseover",function _mo(){eval(procCall_mv)});
	//itemObj.attachEvent("onmouseout",function _mo(){eval(procCall_mo)});
	
	//var comboFocusProc = "mousIsOverCombo=true;";
	//var comboBlurProc = "mousIsOverCombo=false;";
	//itemObj.attachEvent("onfocus",function _mo(){eval(comboFocusProc);});		
	//itemObj.attachEvent("onmouseout",function _mo(){eval(comboBlurProc);});		
}


function AddItemToOption (idName,optionID,optionValue,optionDisplayText)
{
	var selectObj = document.getElementById (idName);
	if (idName!=null)
	{
		var optionObj = document.createElement('OPTION');
		var optionTxtObj = document.createTextNode(optionDisplayText);
		optionObj.id = optionID;
		optionObj.value = optionValue;
		optionObj.appendChild(optionTxtObj);
		selectObj.appendChild(optionObj);
	}
}

// Applies only to default menuItem which has the "HREF"
// default menuItem is <A> anchor
function SetMenuItemHREFHandler (cellID,functionHandler)
{
	var anchorObj = document.getElementById (cellID);
	if (anchorObj!=null)
		anchorObj.href = functionHandler;
}

// Applies to all menuItem
// Set the menuItem object event handler like onclick, onmouseover, onmouseout...
// idName: id of the menuItem
// eventName: onclose, onmouseover...
// eventHandler: function to call or javascript statements to execute
// example : SetMenuItemEvent ("myTextBox","onclick","alert('textbox clicked'));
function SetMenuItemEvent (idName,eventName,eventHandler)
{
	var itemObj = document.getElementById (idName);
	if (itemObj!=null)
	{
		if (_nav=="MS")
		{
			if (eventName.toUpperCase()=="ONCLICK" && itemObj.type=="")
				itemObj.href = "javascript:" + eventHandler;
			else
				itemObj.setAttribute (eventName,new Function(eventHandler));
		}
		else
		{
			if (eventName.toUpperCase()=="ONCLICK" && itemObj.type=="")
				itemObj.setAttribute("href","javascript:" + eventHandler);
			else
				itemObj.setAttribute (eventName,NetscapeCall(eventHandler));
		}
	}
}

function SetMenuItemTootTip (idName,toolTipText)
{
	var itemObj = document.getElementById (idName);
	if (itemObj)
	{
		if (_nav=="MS")
			itemObj.title = toolTipText;
		else
			itemObj.setAttribute ("title",toolTipText);		
	}
}

function SetMenuItemImage (idName,imagePath)
{
	var menuItemImgCell = document.getElementById (idName+"_cell_img");
	if (menuItemImgCell!=null)
	{
		var imgObj = document.createElement ('IMG');
		imgObj.id = idName+"_cell_img_object";
		imgObj.border = 0;
		imgObj.src = imagePath;
		imgObj.style.width = 15;
		imgObj.style.height = 15;
		if (_nav=="MS")
			imgObj.style.filter = "progid:DXImageTransform.Microsoft.Blur(Enabled=0)";
		menuItemImgCell.style.width = 20;
		menuItemImgCell.appendChild(imgObj);		
	}
}

function SetMenuItemImage_dim (idName,imagePath,_width,_height)
{
	var menuItemImgCell = document.getElementById (idName+"_cell_img");
	if (menuItemImgCell!=null)
	{
		var imgObj = document.createElement ('IMG');
		imgObj.id = idName+"_cell_img_object";
		imgObj.border = 0;
		imgObj.src = imagePath;
		imgObj.style.width = _width;
		imgObj.style.height = _height;
		if (_nav=="MS")
			imgObj.style.filter = "progid:DXImageTransform.Microsoft.Blur(Enabled=0)";
		menuItemImgCell.style.width = 20;
		menuItemImgCell.appendChild(imgObj);		
	}
}

function SetMenuBackground (handle,imagePath)
{
	var tableObj = arrMenu[handle];
	if (tableObj!=null)
		tableObj.background = imagePath;
}

function DisableDissolveEffect (handle,disable)
{
	if (handle==-1)
		removeEffectOnMenus = disable;
	else
		arrDisableEffect[handle] = disable;
}

function DisableDropShadowEffect (handle,disable)
{
	if (handle>-1 && _nav=="MS")
	{
		var obj = arrMenu[handle];
		obj.filters.item("DXImageTransform.Microsoft.dropshadow").enabled = !disable;
	}
}

function DisableMenuItem (idName)
{
	var itemObj = document.getElementById (idName);
	if (itemObj!=null)
	{
		itemObj.setAttribute ("href","javascript:_fnull()");
		itemObj.setAttribute ("disabled",true);		
	}
	
	if (_nav=="MS")
	{
		var imgObj = document.getElementById (idName+"_cell_img_object");
		if (imgObj!=null)
		{
			var blurObj = imgObj.filters.item('DXImageTransform.Microsoft.Blur');
			blurObj.Enabled = 1;
		}
			
		var arrowObj = document.getElementById (idName+"_cell_arrow_object");
		if (arrowObj!=null)
			arrowObj.filters.item('DXImageTransform.Microsoft.BasicImage').GrayScale = 1;
	}
}

function EnableMenuItem (idName,href)
{
	var itemObj = document.getElementById (idName);
	if (itemObj!=null)
	{
		itemObj.setAttribute ("href",href);
		itemObj.setAttribute ("disabled",false);		
	}
	if (_nav=="MS")
	{
		var imgObj = document.getElementById (idName+"_cell_img_object");
		if (imgObj!=null)	
			imgObj.filters.item('DXImageTransform.Microsoft.Blur').enabled = false;
		var arrowObj = document.getElementById (idName+"_cell_arrow_object");
		if (arrowObj!=null)
			arrowObj.filters.item('DXImageTransform.Microsoft.BasicImage').GrayScale = 0;
	}
}
// -------------------------------------------------------------------------
//   Item Cell Highlighting routines
// -------------------------------------------------------------------------

function RemoveHightlight (handle, cellID)
{
	var cellObj = document.getElementById(cellID);
	if (cellObj!=null)
	{
		var cellObjImg = document.getElementById(cellID+"_img");
		var cellObjArrow = document.getElementById(cellID+"_arrow");
		
		try
		{
			if (_nav=="MS")
			{
				cellObj.bgColor = cellObj.background;
				cellObjImg.bgColor = cellObj.bgColor;
				cellObjArrow.bgColor = cellObj.bgColor;		
			}
			else
			{
				cellObj.bgColor = arrMenu[handle].bgColor;
				cellObjImg.bgColor = arrMenu[handle].bgColor;
				cellObjArrow.bgColor = arrMenu[handle].bgColor;		
			}
		}
		catch (err)
		{
		}
	}
}

function RemoveSubMenuHighlight(handle,cellID)
{
	var arrItemChild = arrMenuItemChild[handle];
	var arrItemID = arrMenuItemID[handle];
	var i;
	var arr;
	var isSubMenuVisible;
		
	for (i=0;i<arrItemChild.length;i++)
	{
		isSubMenuVisible = IsMenuVisible(arrItemID[i]);
		if (!isSubMenuVisible)
		{
			arr = arrItemID[i].split (",");
			if ((arr[0]+"_cell")!=cellID && arrItemChild[i]>-1)
				RemoveHightlight (handle, arr[0]+"_cell");
		}
 	}	
}

function ShowCellHightlight (handle, cellID, itemHandle)
{
	RemoveSubMenuHighlight(handle,cellID);
	
	var cellObj = document.getElementById(cellID);
	if (cellObj!=null)
	{
		var cellObjImg = document.getElementById(cellID+"_img");
		var cellObjArrow = document.getElementById(cellID+"_arrow");
		
		cellObj.bgColor = arrMenuItemHighlight[handle];
		cellObjImg.bgColor = arrMenuItemHighlight[handle];
		cellObjArrow.bgColor = arrMenuItemHighlight[handle];
	}
}

function HideCellHightlight (handle, cellID, itemHandle)
{
	var arrItemChild = arrMenuItemChild[handle];
	var mVis;
	//alert (arrItemChild[itemHandle]);
	if (arrItemChild[itemHandle]!=-1)
		mVis = IsMenuVisible(arrItemChild[itemHandle]);
	else
		mVis = false;
	
	if (!mVis)
	{
		var cellObj = document.getElementById(cellID);
		if (cellObj!=null)
		{
			var cellObjImg = document.getElementById(cellID+"_img");
			var cellObjArrow = document.getElementById(cellID+"_arrow");
			if (_nav=="MS")
			{
				cellObj.bgColor = cellObj.background;
				cellObjImg.bgColor = cellObj.background;
				cellObjArrow.bgColor = cellObj.background;		
			}
			else
			{
				cellObj.bgColor = arrMenu[handle].bgColor;
				cellObjImg.bgColor = arrMenu[handle].bgColor;
				cellObjArrow.bgColor = arrMenu[handle].bgColor;		
			}
		}
	}
}

// -------------------------------------------------------------------------
//   Menu appearance
// -------------------------------------------------------------------------

function SetMenuHightlight (handle, color)
{
	if (handle>=0 && handle<=arrMenuItemHighlight.length)
		arrMenuItemHighlight[handle] = color;
}

function SetMenuWidth_HORIZ (handle, width)
{
	var tableObj = arrMenu[handle];
	tableObj.width = width;
	
	if (_nav=="MS") // IFRAME
	{
		var iframeobj = document.getElementById("_frameMenu" + handle.toString());
		iframeobj.style.width = width + 2;
	}
}

function SetMenuWidth (handle, width)
{
	var tableObj = arrMenu[handle];
	tableObj.width = width;
	
	if (_nav=="MS") // IFRAME
	{
		var iframeobj = document.getElementById("_frameMenu" + handle.toString());
		iframeobj.style.width = width + 2;
	}
	
	var arrItemID = arrMenuItemID[handle];
	var arrLength = arrItemID.length;
	
	var i;
	var arr;
	var obj;
	for (i=0;i<arrLength;i++)
	{
		arr = arrItemID[i].split(",");
		if (arr[1]=="<ANCHOR>")
		{
			obj = document.getElementById(arr[0]);
			if (obj)
				obj.style.width = width-60;
		}
	}
	
}


function SetMenuBorder (handle, borderWidth)
{
	var tableObj = arrMenu[handle];
	tableObj.border = borderWidth;
}

function SetMenuBG (handle, backGround)
{
	var tableObj = arrMenu[handle];
	tableObj.bgColor = backGround;
}

function SetMenuBorder (handle, borderColor, thickNess, cellBorderOff)
{
	var tableObj = arrMenu[handle];
	
	tableObj.style.borderBottomColor = borderColor;
	tableObj.style.borderBottomWidth = thickNess;
	
	tableObj.style.borderTopColor = borderColor;
	tableObj.style.borderTopWidth  = thickNess;
	
	tableObj.style.borderLeftColor = borderColor;
	tableObj.style.borderLeftWidth  = thickNess;
	
	tableObj.style.borderRightColor = borderColor;
	tableObj.style.borderRightWidth  = thickNess;
	
	if (cellBorderOff)
		tableObj.border = 0;
}

// -------------------------------------------------------------------------
// Menu visibility
// -------------------------------------------------------------------------

function MoveMenu (handle, x, y)
{
	var tableObj = arrMenu[handle];
	tableObj.style.position = "ABSOLUTE";
	tableObj.style.left = x.toString();
	if (_nav=="MS")
		tableObj.style.top = y.toString();
	else
	{
		var yy = y-5;
		if (yy>=0)
			tableObj.style.top = yy;
		else
			tableObj.style.top = 0;
	}
}

function IsMenuVisible (handle)
{
	if (handle>-1)
	{
		var tableObj = arrMenu[handle];
		if (tableObj.style.visibility=="visible")
			return true;
		else
			return false;
	}
	else
		return false;
}

function ShowMenu (handle)
{
	var tableObj = arrMenu[handle];
	if (tableObj!=null)
	{
		RemoveSubMenuHighlight(handle,"");
		
		if (arrMenuAtMousePos[handle]!=-1)
			MoveMenu (handle,_mouseX,_mouseY);
			
		if (_nav=="MS")
		{
			// IFRAME ---------
			var iframeobj = document.getElementById("_frameMenu" + handle.toString());
			iframeobj.style.height = tableObj.offsetHeight;
			iframeobj.style.width = tableObj.offsetWidth;
			iframeobj.style.top= tableObj.style.top;
			iframeobj.style.left= tableObj.style.left;
			iframeobj.style.visibility = "visible";
			
			if (removeEffectOnMenus || arrDisableEffect[handle])
				tableObj.style.visibility = "visible";
			else
			{
				tableObj.filters.revealtrans.apply();
				tableObj.style.visibility = "visible";
				tableObj.filters.revealtrans.play();
			}
			
			// IFRAME
			var iframeobj = document.getElementById("_frameMenu" + handle.toString());
			iframeobj.style.visibility = "visible";
		}
		else
			tableObj.style.visibility = "visible";
	}
}

function GetFilterStatus (obj)
{
	return obj.filters.revealtrans.status;
}

function HideMenu (handle)
{
	var tableObj = arrMenu[handle];
	if (tableObj!=null)
	{
		if (_nav=="MS")
		{
			if (removeEffectOnMenus || arrDisableEffect[handle])
				tableObj.style.visibility = "hidden";
			else
			{
				tableObj.filters.revealtrans.apply();
				tableObj.style.visibility = "hidden";
				tableObj.filters.revealtrans.play();
			}
			
			// IFRAME
			var iframeobj = document.getElementById("_frameMenu" + handle.toString());
			iframeobj.style.visibility = "hidden";
		}
		else
			tableObj.style.visibility = "hidden";
	}
}

function ShowOnMousePosition (handle,show)
{
	arrMenuAtMousePos[handle] = show?1:-1;
}

// -------------------------------------------------------------------------
// Filter Functions
// -------------------------------------------------------------------------

function SetMenuFilterParameter (handle, duration, transition)
{
	var tableObj = arrMenu[handle];
	if (tableObj!=null)
	{
		tableObj.filters.revealtrans.duration = duration;
		tableObj.filters.revealtrans.transition = transition;
	}
}

function SetMenuOpacity (handle,opacityValue)
{
	if (_nav=="MS")
	{
		var tableObj = arrMenu[handle];
		if (tableObj!=null)
			tableObj.filters.alpha.opacity = opacityValue;
	}
}

// -------------------------------------------------------------------------
// Attaching Menu
// -------------------------------------------------------------------------
	
function AttachMenu (objectName, handle)
{
	var procCall_mv = "check_mouseover(" + handle.toString() + ",'"+objectName+"')";
	var procCall_mo = "check_mouseout(" + handle.toString() + ")";

	var obj = document.getElementById(objectName);
	
	if (_nav=="MS")
	{
		obj.attachEvent("onmouseover",new Function(procCall_mv));
		obj.attachEvent("onmouseout",new Function(procCall_mo));
	}
	else
	{
		var sAttrib;
		
		sAttrib = obj.getAttribute("onmouseover");
		sAttrib += ";" + NetscapeCall(procCall_mv);
		obj.setAttribute("onmouseover",sAttrib);
		
		sAttrib = obj.getAttribute("onmouseout");
		sAttrib += ";" + NetscapeCall(procCall_mo);
		obj.setAttribute("onmouseout",sAttrib);
	}
}

function AttachSubMenu (indexOfMenuItem, 
						itemMenuID, 
						handleOfMenuToAttach, 
						handleOfMenuWhereToAttach)
{
	// Make the arrow img object and append to menuItem
	var itemObj = document.getElementById(itemMenuID+"_cell_arrow");
	var imgObj = document.createElement('IMG');

	imgObj.id = itemMenuID+"_cell_arrow_object";
	imgObj.src = menuPath + "Includes/JMenu/SubMenuImg-2.GIF";
	imgObj.border = 0;
	if (_nav=="MS")
		imgObj.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(GrayScale=0)";
	
	itemObj.width = 10;	
	itemObj.appendChild(imgObj);
	
	// Get the anchor objectitem
	var itemObjText = document.getElementById(itemMenuID);
	//itemObjText.href = "none";
	
	
	// Attach the menu
	AttachMenu (itemMenuID,handleOfMenuToAttach);
	
	arrMenuParent[handleOfMenuToAttach] = handleOfMenuWhereToAttach.toString()+
										  ","+
										  indexOfMenuItem.toString()+
										  ","+
										  itemMenuID;
	// Update menuItem information that submenu is present
	// where the handle refers to submenu handle
	var arrItemChild = arrMenuItemChild[handleOfMenuWhereToAttach];
	arrItemChild[indexOfMenuItem] = handleOfMenuToAttach;

	//var procCall_mv = "check_mouseover(" + handleOfMenuToAttach.toString() + ",'"+itemMenuID+"')";
	//var procCall_mo = "check_mouseout(" + handleOfMenuToAttach.toString() + ")";	
	//var obj = document.getElementById(itemMenuID+"_cell");
	
	/*
		var hParent = arrMenuParent[i];
		if (!IsMenuVisible(i) && hParent!=-1)
			RemoveSubMenuHighlight(hParent,"");
	*/
	
	/*
	var obj = arrMenu[handleOfMenuToAttach];
	var func = "ONBLUR ("+handleOfMenuToAttach.toString()+","+handleOfMenuWhereToAttach.toString()+")";
	obj.setAttribute ("onblur",new Function(func));
	*/
}

/*
function ONBLUR(handle,handleOfParent)
{
	alert ("BLUR " + handleOfParent.toString());
}
*/

function GetHTMLObject (idName)
{
	return document.getElementById(idName);
}

function GetNullHREF ()
{
	return document.createElement('a').href;
}

function check_mouseover(handle, objectName)
{
	var obj = document.getElementById (objectName);
	if (obj!=null)
	{
		arrIsIn[handle] = 1;
		if (!IsMenuVisible(handle) && !obj.getAttribute("disabled"))
			ShowMenu(handle);
	}
}

function check_mouseout(handle)
{
	arrIsIn[handle] = 0;
}


function CheckMenu ()
{
	var i;
	var tableObj;
	
	for (i=0;i<arrMenu.length;i++)	//	HideMenu One by One
	//for (i=arrMenu.length-1;i>=0;i--)	//	HideMenu and its parents
	{
		if (!arrVisibleAlways[i])
		{
			
			if (IsMenuVisible(i) && arrIsIn[i]==0)
			{
				var willHide = true;
				var arrItemChild = arrMenuItemChild[i];
				var j;

				for (j=0;j<arrItemChild.length;j++)
				{
					if (arrItemChild[j]!=COMBO_BOX_TYPE)
					{
						if (arrItemChild[j]!=-1 && IsMenuVisible(arrItemChild[j]))
						{
							willHide = false;
							break;
						}
					}
					else
					{
						if (mousIsOverCombo)
							willHide = false;
						else
							willHide = true;
					}
				}
				
				if (willHide)
				{
					HideMenu(i);
					RemoveHighlightOnVisibleMenu (i);
				}
			}
		}
	}
	
	setTimeout ("CheckMenu()",timeToCheck);
}

function RemoveHighlightOnVisibleMenu (handle)
{
	if (arrMenuParent[handle]!="")
	{
		var arr = arrMenuParent[handle].split(",");
		var hParent = parseInt(arr[0]);
		if (arrVisibleAlways[hParent])
		{
			var itemIdx = parseInt(arr[1]);
			var stat;
			if (_nav=="MS")
			{
				var isStopped = (GetFilterStatus (arrMenu[handle])==FILTER_STOPPED);
				
				if (!isStopped)
				{
					setTimeout ("RemoveHighlightOnVisibleMenu ("+handle+")",250);
					return;
				}
				stat = (itemIdx>-1 && !IsMenuVisible(handle) && isStopped);
			}
			else
				stat = (itemIdx>-1 && !IsMenuVisible(handle));
				
			if (stat)
				RemoveHightlight(hParent,arr[2]+"_cell");
		}
	}
}

function StartMenu ()
{
	setTimeout ("CheckMenu()",timeToCheck);
}

