/*
	File: menu.js
	Name: Menu JavaScript module.
	Version: 1.0, 12.2001
	Compatibility:
		Internet Explorer 4.0 or higher
		Netscape 4.x
		Netscape 6.x
	Author: Lyudmil Zahariev, MSc.
	e-mail: lzahariev@yahoo.com

	Revisions:
*/

//----------------------------------------
//(+) Browser detection
var exclude = true;
var agt = navigator.userAgent.toLowerCase();
var NS4 = false;
var IE4 = false;
var IE5 = false;
var OP5 = false;
var OP6 = false;

if (document.all && (agt.indexOf('msie') != -1))
{
	IE4=true;
	exclude=false;
	if (agt.indexOf('msie 4')==-1) { IE5=true; IE4=false; }
	if (agt.indexOf('opera')!=-1) { IE4=IE5=false; OP5=true; }
}
var IE = (IE4 || IE5);

var NS6 = false;
var MZ = false;

if (document.getElementById && !IE)
{
	NS6=true;
	exclude=false;
	if (agt.indexOf('netscape6')==-1)
	{
		NS6=false; MZ=true;
	}
	if (agt.indexOf('etscape') != -1 && agt.indexOf('gecko') != -1)
	{
		NS6=true; MZ=false;
	}
	if (window.opera) { MZ=false; OP5=true;}
	else if (agt.indexOf('gecko')==-1) { MZ=false; exclude=true; }
}

if (agt.indexOf('opera 4') != -1) { OP5=false; MZ=false; exclude=true; }

var NS4=false;

if ((agt.indexOf('mozilla') != -1) && (parseInt(navigator.appVersion) >= 4) &&
	!IE && !OP5 && !NS6 && !MZ )
{
	NS4=true; exclude=false;
}

var NS = (NS4 || NS6);

if (agt.indexOf('webtv') != -1) { IE=IE4=false; exclude=true; }

var WIN=true;
var MAC=false;

if (agt.indexOf('mac') != -1) { WIN=false; MAC=true; }

if (OP5)
{
	if ((agt.indexOf("opera 6") != -1) || (agt.indexOf("opera/6") != -1))
	{
		OP6=true;
		OP5=false;
	}
}

var OP = (OP5 || OP6);

//(-) Browser detection

//----------------------------------------
var browserType = '';
if (IE) browserType = 'IE';
if (NS) browserType = 'NS';
if (NS6) browserType = 'NS6';
if (OP5 || OP6) browserType = 'OP';
if (MZ) browserType = 'MZ';

var HIDDEN = (IE)?'hidden':'hide';
var VISIBLE = (IE)?'visible':'show';

//------
var gStr = '';
function dbgln() {}
function dbg() {}

//------
var arMenus = new Array();
var arMenuTrees = new Array();
var menuStyleParams = '';
var mm = 0;
var menuLoaded = false;
var menuOldOnLoad = 0;

//------
function FnDef(f,o)
{
	var s = (o ? 'o.' : '');
	s = s + f + ' = ' + s + f + browserType;
	eval(s);
}

//------
function FindMenu(mid)
{
	for (var i=0; i<arMenus.length; i++)
		if (arMenus[i][0] == mid) return arMenus[i];
	return 0;
}

//------
function MenuManager()
{
	this.name = 'MenuManager';
	this.menuLoc = self;

	this.style = new MenuStyle('&#xFFFB',menuStyleParams);
	this.style.setParams(this.style.getParamString());

	this.menus = new Array();
	this.zIndex = 10000;
	this.dX = 0;
	this.dY = 22;
	this.cm = 0;
	this.hideTimer = 0;
	this.hideTimeout = 600;
	this.keepItemHilite = true;
	this.itemOn = null;
	this.barItemHilite = null;
	this.barTurnOff = true;
	this.idCount = 0;
	this.arStack = new Array();

	this.barType = 'h';	// horizontal
	this.vAlign = 'b';	// bottom
	this.hAlign = 'l';	// left

	//this.debug = NS6 ? true : false;
	this.debug = true;
	//this.debug = false;
	debugEnable = this.debug;

	FnDef('GetMenu',this);
	FnDef('ConstructMenuEl',this);
	FnDef('ConstructItemEl',this);
	FnDef('MakeMenuEl',this);
	FnDef('MakeItemEl',this);
	FnDef('ItemSetup',this);
	FnDef('MenuSetup',this);
}

//------
MenuManager.prototype.GetUniqueId = function(pref,suff)
{
	this.idCount++;
	return (pref?(pref+'_'):'') + 'menuId_' + this.idCount + (suff?('_'+suff):'');
}
//------
MenuManager.prototype.Push = function(o)
{
	this.arStack[this.arStack.length] = o;
}
//------
MenuManager.prototype.Pop = function()
{
	if (!this.arStack.length) return null;
	var o = this.arStack[this.arStack.length-1];
	this.arStack.length--;
	return o;
}
//------
MenuManager.prototype.Setup = function()
{
	for (var i=0; i<arMenuTrees.length; i++)
		this.MakeMenu(FindMenu(arMenuTrees[i]),false);
if (gStr.length && this.debug) alert(gStr);

}

//------
MenuManager.prototype.HideAll = function()
{with(this){
	if (this.hideTimer) { clearTimeout(this.hideTimer); this.hideTimer = 0; }
	for (var i=0; i<menus.length; i++)
	{
		MenuShow(menus[i],0);
	}
	cm = 0;
    var bid = mm.barItemHilite;
    if ( mm.barItemHilite ){
        mm.barItemHilite = null;
        MenuBarPopupItemToggle(bid , "off" );
    }
}}
//------
MenuManager.prototype.SetCurrent = function(m)
{with(this){
	if (this.hideTimer) { clearTimeout(this.hideTimer); this.hideTimer = 0; }
	cm = m;
}}
//------
MenuManager.prototype.RunOut = function()
{with(this){
    mm.keepItemHilite = false;
	hideTimer = setTimeout('mm.HideAll()',hideTimeout);
}}

//------
MenuManager.prototype.SetAlignment = function(_a)
{with(this){
	barType = 'h'; vAlign = 'b'; hAlign = 'l';
	if (is(_a,'string') && _a.length > 0)
	{
		_a = _a.toLowerCase();
		for (var i=0; i<_a.length; i++)
		{
			switch (_a.charAt(i))
			{
				case 'v': barType = 'v'; break;
				case 'h': break;
				case 't': vAlign = 't'; break;
				case 'b': break;
				case 'l': break;
				case 'r': hAlign = 'r'; break;
			}
		}
	}
}}

//------
MenuManager.prototype.GetMenuPos = function(_m, _srcPos)
{with(this){
	var pos = new Pos();
	pos.Set(_srcPos);

	if (barType == 'h')
	{
		if (hAlign == 'r') pos.x = pos.x + pos.w - _m.menuWidth;
		if (vAlign == 'b') pos.y += pos.h;
		else pos.y -= GetPos(_m).h;
	}
	else // 'v'
	{
		if (hAlign == 'r') pos.x += pos.w;
		else pos.x -= _m.menuWidth;
	}
	return pos;
}}

//----------------------------------------
function MenuInit()
{
	if (!mm) mm = new MenuManager();
	mm.menuLoc = self;

	FnDef('MenuImgMoreStr');
	FnDef('MenuItemOver');
	FnDef('MenuItemOut');
	FnDef('MenuItemHilite');
	FnDef('MenuShowEl');
	FnDef('MenuGetSubMenuPos');
	FnDef('MenuCalcPos');
	FnDef('MenuPopUp');
	FnDef('MenuPopDown');
	FnDef('MenuMoveTo');
	FnDef('MenuKeepInside');
  	FnDef('MenuBarItemToggle');
  	FnDef('MenuBarPopupItemToggle');
	FnDef('GetPos');

	FnDef('MenuPostSetup');
}

//------
function MenuStart()
{
	if (IE || NS) return;
	MenuInit();
	mm.Setup();
}
//------
function MenuLoadJS(jsSuff)
{
	document.write(
		'<script language="javascript" src="'+menuJsPath+'menu_' + jsSuff + '.js"><\/script>'
		);
}
//------
function MenuOnLoad()
{
	if (OP)
	{
		MenuPostSetup();
		origWidth = window.innerWidth;
		origHeight = window.innerHeight;
		window.status = '' + origWidth + ', ' + origHeight;
		setTimeout('MenuOnResize()',menuResizeTimeout);
	}
	else
	{
		MenuInit();
		mm.Setup();
	}
	menuLoaded = true;
	if (menuOldOnLoad) menuOldOnLoad();
}

