// requires browser.js to be loaded

// [TTextMenu Object Prototype] Create new menu object
function TTextMenu()
{
//	Private Properties
	var aMenuItems		= new Array();
	var sActiveMenu		= null;
	var nCount			= 0;
	var sActiveClass	= "clsMenuLinkActive";
	var sDefaultClass	= "clsMenuLink";
	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.addMenuDelimiter	= addMenuDelimiter;
	this.addMenuImage		= addMenuImage;
	this.createMenuItem		= createMenuItem;
	this.writeMenu			= writeMenu;

//	Public Property Method Pointer
	this.setActiveMenu		= setActiveMenu;
	this.setActiveClass		= setActiveClass;
	this.setClass			= setClass;
	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, sOnClick, sOnMouseOver, sOnMouseOut, oLastMenu, bShowActiveLink);
	}

//	Private Property Methods (No public pointers)
	function initNetscape4(menuItems, activeMenu, count, activeClass, defaultClass, onClick, onMouseOver, onMouseOut, lastMenu, showActiveLink)
	{
		aMenuItems		= menuItems;
		sActiveMenu		= activeMenu;
		nCount			= count;
		sActiveClass	= activeClass;
		sDefaultClass	= defaultClass;
		sOnClick		= onClick;
		sOnMouseOver	= onMouseOver;
		sOnMouseOut		= onMouseOut;
		oLastMenu		= lastMenu;
		bShowActiveLink	= showActiveLink;
	}

//	Public Methods (They have public pointers)
	function addMenu(sName, sHref, sTarget, sText, sCssClass, sCssStyle, sStatusMsg)
	{
		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;
			sCssClass	= (sCssClass != null) ? sCssClass+"" : null;
			sCssStyle	= (sCssStyle != null) ? sCssStyle+"" : null;
			sStatusMsg	= (sStatusMsg != null) ? sStatusMsg+"" : null;
		}
		var oMenuItem	= createMenuItem(this, sName, sHref, sTarget, sText, sCssClass, sCssStyle, sStatusMsg);
		if (oMenuItem)
		{
			oLastMenu	= oMenuItem;
			aMenuItems.push(oMenuItem);
		}
	}

	function addMenuBreak()
	{
		var oMenuItem		= new TTextMenuItem(this);
		oMenuItem.id		= "TTextMenuBreak";
		oMenuItem.isBreak	= true;
		aMenuItems.push(oMenuItem);
	}

	function addMenuDelimiter()
	{
		var oMenuItem			= new TTextMenuItem(this);
		oMenuItem.id			= "TTextMenuDelimiter";
		oMenuItem.isDelimiter	= true;
		aMenuItems.push(oMenuItem);
	}

	function addMenuImage(sSrc, sWidth, sHeight, sAlt)
	{
		if (!sSrc || "string" != typeof(sSrc))
			return;
		var oMenuItem		= new TTextMenuItem(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, sCssClass, sCssStyle, sStatusMsg)
	{
		if ("object" != typeof(oParent) || "undefined" == typeof(oParent.addMenu) && "undefined" == typeof(oParent.sClass))
			return null;

		nCount++;
		var oMenuItem	= new TTextMenuItem(oParent);
		oMenuItem.id	= "TTextMenu" + nCount;
		oMenuItem.name	= "TTextMenu" + (sName) ? sName : nCount;
		if (sHref)
		{
			oMenuItem.href		= sHref;
			oMenuItem.target	= sTarget;
			oMenuItem.statusMsg	= sStatusMsg;
		}
		if (sText)
		{
			oMenuItem.sText		= sText;
			oMenuItem.sClass	= sCssClass;
			oMenuItem.sStyle	= sCssStyle;
		}
		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.isDelimiter || 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.isDelimiter || oMenuItem.isImage || oMenuItem.name.toLowerCase().indexOf(sActiveMenu) == -1)
				continue;
			oMenuItem.active	= true;
			if (oMenuItem.parent != this)	// if sub menu
				oParent	= oMenuItem.parent;
		}
	}

	function setActiveClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sActiveClass	= sValue.trim();
	}

	function setClass(sValue)
	{
		if ("string" != typeof(sValue))
			return;
		sDefaultClass	= sValue.trim();
	}

	function getMenuCode()
	{
		var sHTML		= "";
		var sMenuCode	= "";
		var sTemp		= "";
		var isNewLine	= true;
		var oMenuItem;
		for (var idx = 0; idx < aMenuItems.length; idx++)
		{
			oMenuItem	= aMenuItems[idx];
			if (!oMenuItem || !oMenuItem.enabled)
				continue;
			if (oMenuItem.isBreak)
			{
				isNewLine	= true;
				sMenuCode	+= "<br>\n";
				continue;
			}
			if (oMenuItem.isDelimiter)
			{
				sMenuCode	+= " | ";
				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;
			}
			sHTML		= "";
			if (!isNewLine)
				sHTML	+= " | ";
			if (oMenuItem.href && (!oMenuItem.active || bShowActiveLink))
			{
				sTemp	= (oMenuItem.active) ? sActiveClass : sDefaultClass;
				if (oMenuItem.sClass)
					sTemp	+= (sTemp) ? " " + oMenuItem.sClass : oMenuItem.sClass;
				sHTML	+= oMenuItem.sText.toLink(oMenuItem.href, oMenuItem.statusMsg, oMenuItem.target, sTemp, oMenuItem.sStyle, null, sOnClick, sOnMouseOver, sOnMouseOut);
			}
			else
				sHTML	+= oMenuItem.sText;
//			sHTML		+= '\n';
			sMenuCode	+= sHTML;
			isNewLine	= false;
		}
		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;
	}
}

// *************************************************
// [TTextMenuItem Object Prototype] Create new menu item
function TTextMenuItem(oParent)
{
//	objects
	this.parent			= oParent;

//	properties
	this.active			= false;
	this.enabled		= true;
	this.isBreak		= false;
	this.isDelimiter	= false;
	this.isImage		= false;
	this.statusMsg		= "";

//	link properties
	this.href			= null;
	this.target			= null;

//	Text properties
	this.id				= null;
	this.name			= null;
	this.sText			= "Link";
	this.sClass			= null;
	this.sStyle			= null;

//	Image properties
	this.alt		 	= null;
	this.height			= null;
	this.src			= null;
	this.width			= null;
}

// End of file
