// requires browser.js to be loaded

// [TTextMenu3D Object Prototype] Create new menu object
function TTextMenu3D(sObjectName)
{
//	Private Properties
	var aMenuItems		= new Array();
	var sActiveMenu		= null;
	var nCount			= 0;
	var sActiveClass	= "clsTextMenu3dDown";
	var sDefaultClass	= "clsTextMenu3d";
	var sMouseDownClass	= "clsTextMenu3dDown";
	var sMouseOverClass	= "clsTextMenu3dOver";
	var sTextClass		= "clsTextMenu3dText";
	var sTextDownClass	= "clsTextMenu3dTextDown";
	var sName			= null;
	var sOnClick		= "";
	var sOnMouseOver	= "return ('function'==typeof(doStatus)) ? doStatus('<#SWAPMSG#>') : true;";
	var sOnMouseOut		= "return ('function'==typeof(doStatus)) ? doStatus('') : true;";
	var oLastMenu		= null;
	var bShowActiveLink	= true;

//	Public Method Pointers
	this.addMenu			= addMenu;
	this.addMenuBreak		= addMenuBreak;
	this.addMenuImage		= addMenuImage;
	this.createMenuItem		= createMenuItem;
	this.writeMenu			= writeMenu;

//	Public Property Method Pointer
	this.setActiveMenu		= setActiveMenu;
	this.getActiveClass		= getActiveClass;
	this.setActiveClass		= setActiveClass;
	this.getClass			= getClass;
	this.setClass			= setClass;
	this.getMouseDownClass	= getMouseDownClass;
	this.setMouseDownClass	= setMouseDownClass;
	this.getMouseOverClass	= getMouseOverClass;
	this.setMouseOverClass	= setMouseOverClass;
	this.getTextClass		= getTextClass;
	this.setTextClass		= setTextClass;
	this.getTextDownClass	= getTextDownClass;
	this.setTextDownClass	= setTextDownClass;
	this.getMenuCode		= getMenuCode;
	this.setOnClick			= setOnClick;
	this.setOnMouseOver		= setOnMouseOver;
	this.setOnMouseOut		= setOnMouseOut;
	this.setShowActiveLink	= setShowActiveLink;

//	Initialization
	if (is.ns4)
	{
		initNetscape4(aMenuItems, sActiveMenu, nCount, sActiveClass, sDefaultClass, sMouseDownClass, sMouseOverClass, sTextClass, sTextDownClass, sOnClick, sOnMouseOver, sOnMouseOut, oLastMenu, bShowActiveLink);
	}
	setObjectName(sObjectName);

//	Private Property Methods (No public pointers)
	function initNetscape4(menuItems, activeMenu, count, activeClass, defaultClass, mouseDownClass, mouseOverClass, textClass, textDownClass, onClick, onMouseOver, onMouseOut, lastMenu, showActiveLink)
	{
		aMenuItems		= menuItems;
		sActiveMenu		= activeMenu;
		nCount			= count;
		sActiveClass	= activeClass;
		sDefaultClass	= defaultClass;
		sMouseDownClass	= mouseDownClass;
		sMouseOverClass	= mouseOverClass;
		sTextClass		= textClass;
		sTextDownClass	= textDownClass;
		sOnClick		= onClick;
		sOnMouseOver	= onMouseOver;
		sOnMouseOut		= onMouseOut;
		oLastMenu		= lastMenu;
		bShowActiveLink	= showActiveLink;
	}

	function setObjectName(sValue)
	{
		if ("string" != typeof(sValue) || sValue.trim() == "")
		{
			alert("TTextMenu3D Error: Create Object :: Missing or invalid sValue argument.");
			return;
		}
		sName	= sValue;
		setTimeout("TTextMenu3D_checkObjectName('" + sName + "')", 10);
	}

//	Public Methods (They have public pointers)
	function addMenu(sName, sHref, sTarget, sText, sStatusMsg, sType)
	{
		for (var idx = 0; idx < arguments.length; idx++)
			arguments[idx]	= ("string" == typeof(arguments[idx]) && arguments[idx].trim() != "") ? arguments[idx].trim() : null;
		if (!sHref && !sText)
			return;
		if (is.ns4)
		{
			sName		= (sName != null) ? sName+"" : null;
			sHref		= (sHref != null) ? sHref+"" : null;
			sTarget		= (sTarget != null) ? sTarget+"" : null;
			sText		= (sText != null) ? sText+"" : null;
			sStatusMsg	= (sStatusMsg != null) ? sStatusMsg+"" : null;
			sType		= (sType != null) ? sType+"" : null;
		}
		var oMenuItem	= createMenuItem(this, sName, sHref, sTarget, sText, sStatusMsg, sType);
		if (oMenuItem)
		{
			oLastMenu	= oMenuItem;
			aMenuItems.push(oMenuItem);
		}
	}

	function addMenuBreak()
	{
		var oMenuItem		= new TTextMenu3DItem(this);
		oMenuItem.id		= "TTextMenuBreak";
		oMenuItem.isBreak	= true;
		aMenuItems.push(oMenuItem);
	}

	function addMenuImage(sSrc, sWidth, sHeight, sAlt)
	{
		if (!sSrc || "string" != typeof(sSrc))
			return;
		var oMenuItem		= new TTextMenu3DItem(this);
		oMenuItem.id		= "TTextMenuImage";
		oMenuItem.src		= sSrc;
		oMenuItem.width		= ("string" == typeof(sWidth) && sWidth.isInteger()) ? sWidth : null;
		oMenuItem.height	= ("string" == typeof(sHeight) && sHeight.isInteger()) ? sHeight : null;
		oMenuItem.alt		= ("string" == typeof(sAlt)) ? sAlt : null;
		oMenuItem.isImage	= true;
		aMenuItems.push(oMenuItem);
	}

	function createMenuItem(oParent, sName, sHref, sTarget, sText, sStatusMsg, sType)
	{
		if ("object" != typeof(oParent) || "undefined" == typeof(oParent.addMenu) && "undefined" == typeof(oParent.sClass))
			return null;

		nCount++;
		var oMenuItem	= new TTextMenu3DItem(oParent);
		oMenuItem.id	= "TTextMenu" + nCount;
		oMenuItem.name	= "TTextMenu" + (sName) ? sName : nCount;
		if (sHref)
		{
			oMenuItem.href		= sHref;
			oMenuItem.target	= sTarget;
			oMenuItem.statusMsg	= sStatusMsg;
			oMenuItem.isPDF		= (sType && sType.toUpperCase() == "PDF");
		}
		if (sText)
			oMenuItem.sText	= sText;
		return oMenuItem;
	}

	function writeMenu()
	{
		var sHTML	= getMenuCode();
		if (sHTML != "")
			sHTML.writeln();
	}

//	Public Property Methods (They have public pointers)
	function setActiveMenu(sValue)
	{
		var idx, oMenuItem;
		for (idx = 0; idx < aMenuItems.length; idx++)
		{
			// reintialize all menus
			oMenuItem	= aMenuItems[idx];
			if (oMenuItem.isBreak || oMenuItem.isImage)
				continue;
			oMenuItem.active	= false;
		}
		sActiveMenu	= ("string" == typeof(sValue) && sValue.trim() != "") ? sValue.trim().toLowerCase() : null;
		if (!sActiveMenu)
			return;

		var oParent	= null;
		for (idx = 0; idx < aMenuItems.length; idx++)
		{
			oMenuItem	= aMenuItems[idx];
			if (oMenuItem.isBreak || oMenuItem.isImage || oMenuItem.name.toLowerCase().indexOf(sActiveMenu) == -1)
				continue;
			oMenuItem.active	= true;
			if (oMenuItem.parent != this)	// if sub menu
				oParent	= oMenuItem.parent;
		}
	}

	function getActiveClass()
	{
		return sActiveClass;
	}
	function setActiveClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sActiveClass	= sValue.trim();
	}

	function getClass()
	{
		return sDefaultClass;
	}
	function setClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sDefaultClass	= sValue.trim();
	}

	function getMouseDownClass()
	{
		return sMouseDownClass;
	}
	function setMouseDownClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sMouseDownClass	= sValue.trim();
	}

	function getMouseOverClass()
	{
		return sMouseOverClass;
	}
	function setMouseOverClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sMouseOverClass	= sValue.trim();
	}

	function getTextClass()
	{
		return sTextClass;
	}
	function setTextClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sTextClass	= sValue.trim();
	}

	function getTextDownClass()
	{
		return sTextDownClass;
	}
	function setTextDownClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sTextDownClass	= sValue.trim();
	}

	function getMenuCode()
	{
		var sHTML		= "";
		var sMenuCode	= "";
		var sTemp		= "";
		var oMenuItem;
		for (var idx = 0; idx < aMenuItems.length; idx++)
		{
			oMenuItem	= aMenuItems[idx];
			if (!oMenuItem || !oMenuItem.enabled)
				continue;
			if (oMenuItem.isBreak)
			{
				sMenuCode	+= "<br>\n";
				continue;
			}
			if (oMenuItem.isImage)
			{
//				sHTML	 = '<img id="' + oMenuItem.id + '"';
//				sHTML	+= ' name="' + oMenuItem.id + '"';
//				sHTML	+= ' border="0"';
				sHTML	 = '<img border="0"';
				sHTML	+= ' src="' + oMenuItem.src + '"';
				if (oMenuItem.width)
					sHTML	+= ' width="' + oMenuItem.width + '"';
				if (oMenuItem.height)
					sHTML	+= ' height="' + oMenuItem.height + '"';
				if (oMenuItem.alt)
					sHTML	+= ' alt="' + oMenuItem.alt + '"';
				sHTML		+= '>';
				sMenuCode	+= sHTML;
				continue;
			}
			if (oMenuItem.href && (!oMenuItem.active || bShowActiveLink))
			{
				sHTML	= '<div class="' + ((oMenuItem.active) ? sActiveClass : sDefaultClass) + '" ';
				sTemp	= (oMenuItem.active) ? "On" : "";
				sHTML	+= 'id="divMenu' + idx + sTemp + '" ';
				sHTML	+= 'onmousedown="TTextMenu3D_mouseDown(this, \'' + sName + '\')" onmouseup="TTextMenu3D_mouseUp(this, \'' + sName + '\')" onmouseover="TTextMenu3D_mouseOver(this, \'' + sName + '\')" onmouseout="TTextMenu3D_mouseOut(this, \'' + sName + '\')">';
				sHTML	+= '<span class="' + ((oMenuItem.active) ? sTextDownClass : sTextClass) + '" id="spnMenu' + idx + sTemp + '">' + oMenuItem.sText + '</span>';
				sHTML	+= "</div>";
				if (oMenuItem.isPDF)
					sHTML	= sHTML.toPDFLink(oMenuItem.href, oMenuItem.statusMsg, oMenuItem.target, null, "text-decoration:none");
				else
					sHTML	= sHTML.toLink(oMenuItem.href, oMenuItem.statusMsg, oMenuItem.target, null, "text-decoration:none");
			}
			else
				sHTML	= '<span class="' + sTextClass + '">' + oMenuItem.sText + '</span>';
			sHTML		+= '\n';
			sMenuCode	+= sHTML;
		}
		return sMenuCode;
	}

	function setOnClick(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sOnClick	= sValue.trim();
	}

	function setOnMouseOver(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sOnMouseOver	= sValue.trim();
	}

	function setOnMouseOut(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sOnMouseOut	= sValue.trim();
	}

	function setShowActiveLink(bValue)
	{
		if ("boolean" != typeof(bValue))
			return;
		bShowActiveLink	= bValue;
	}
}

// Support functions - not a member of the TTextMenu3D object.
function TTextMenu3D_mouseDown(oElement, sObjectName)
{
	eval("var oMenu = " + sObjectName + ";");
	oElement2	= document.all("spn" + oElement.id.substr(3));
	oElement.className	= oMenu.getMouseDownClass();
	if (oElement2)
		oElement2.className	= oMenu.getTextDownClass();
}
function TTextMenu3D_mouseOut(oElement, sObjectName)
{
	eval("var oMenu = " + sObjectName + ";");
	oElement2	= document.all("spn" + oElement.id.substr(3));
	if (oElement.id.indexOf("On") != -1)
	{
		oElement.className	= oMenu.getMouseDownClass();
		if (oElement2)
			oElement2.className	= oMenu.getTextDownClass();
	}
	else
	{
		oElement.className	= oMenu.getClass();
		if (oElement2)
			oElement2.className	= oMenu.getTextClass();
	}
}
function TTextMenu3D_mouseOver(oElement, sObjectName)
{
	eval("var oMenu = " + sObjectName + ";");
	oElement2	= document.all("spn" + oElement.id.substr(3));
	oElement.className	= oMenu.getMouseOverClass();
	if (oElement2)
		oElement2.className	= oMenu.getTextClass();
}
function TTextMenu3D_mouseUp(oElement, sObjectName)
{
	eval("var oMenu = " + sObjectName + ";");
	oElement2	= document.all("spn" + oElement.id.substr(3));
	oElement.className	= oMenu.getMouseOverClass();
	if (oElement2)
		oElement2.className	= oMenu.getTextClass();
}
function TTextMenu3D_checkObjectName(sObjectName)
{
	eval("var sObjectNameType = typeof(" + sObjectName + ");");
	if (sObjectNameType != "object")
		alert("TTextMenu3D Error: Create Object :: The object '" + sObjectName + "' specified in sObjectName was not found.\n\nPlease set sObjectName to the name of the new TTextMenu3D object you are creating.");
	else
	{
		eval("var oObject = " + sObjectName + ";");
		if ("function" != typeof(oObject.setMouseDownClass))
			alert("TTextMenu3D Error: Create Object :: The object '" + sObjectName + "' specified in sObjectName is not a TTextMenu3D object.\n\nPlease set sObjectName to the name of the new TTextMenu3D object you are creating.");
	}
}

// *************************************************
// [TTextMenu3DItem Object Prototype] Create new menu item
function TTextMenu3DItem(oParent)
{
//	objects
	this.parent			= oParent;

//	properties
	this.active			= false;
	this.enabled		= true;
	this.isBreak		= false;
	this.isImage		= false;
	this.isPDF			= false;
	this.statusMsg		= "";

//	link properties
	this.href			= null;
	this.target			= null;

//	Text properties
	this.id				= null;
	this.name			= null;
	this.sText			= "Link";

//	Image properties
	this.alt		 	= null;
	this.height			= null;
	this.src			= null;
	this.width			= null;
}

// End of file
