//---------------------------------------------------------

var menuBoxes		= new Object();
var menuItems		= new Object();
var curMenuBox		= null;
var curMenuItem		= null;

var mHor			= 0x0001;
var mRightAlign		= 0x0002;


//---------------------------------------------------------

function menuBox(id, itemID, flags) {
	this.id			= id;
	this.p			= itemID ? menuItems[itemID] : null;
	this.items		= new Array();
	if (this.p) {
		this.p.type = 1;
		this.p.act	= this;
	}
	this.f			= flags;
	menuBoxes[id]	= this;
}

function mBox(id, itemID, flags) {
	var l = arguments.length;
	var f = (l>2) ? flags : 0;
	curMenuBox		= new menuBox(id, itemID, f);
}

menuBox.prototype.show = function() {
	if (this.e) this.e.show();
	if (this.p) this.p.setActive();
}

menuBox.prototype.hide = function() {
	if (this.e) this.e.hide();
	if (this.p) this.p.setNormal();
}

//---------------------------------------------------------

function menuItem(id, menuBox, txt, act) {
	this.id			= id;
	this.p			= menuBox;
	this.txt		= '&nbsp;&nbsp;'+txt+'&nbsp;&nbsp;';
	this.type		= 0;
	this.act		= act;
	var i			= this.p.items;
	i[i.length]		= this;
	menuItems[id]	= this;
}

function mItem(id, txt, act) {
	curMenuItem		= new menuItem(id, curMenuBox, txt, act);
}


function setBg(o, col, classN) {

//	if (typeof o.className=='string') {
//		o.className = classN;
//	}
	if (typeof o.style=='object') {
		o.style.backgroundColor = '#'+col;
	}
	else {
		o.bgColor = col;
	}
}

menuItem.prototype.setActive = function() { if (this.e) setBg(this.e.o, itemActiveBgColor) }
menuItem.prototype.setNormal = function() { if (this.e) setBg(this.e.o, itemNormalBgColor) }
menuItem.prototype.setHover  = function() { if (this.e) setBg(this.e.o, itemHoverBgColor)  }


//=========================================================
// write Items
//=========================================================

function menuBoxStr(id) {
	var m = menuBoxes[id], s = '';
	if (m.p) {
		s += '<div id="'+m.id+'Div" class="mDiv"><table id="'+
				m.id+'Tbl" cellPadding="0" cellSpacing="1" border="0">\n';
		if (m.f&mHor) {
			var tr = '', tre = '', tbe = '</tr>'; s += '<tr>';
		}
		else {
			var tr = '<tr>', tre = '</tr>', tbe = '';
		}
		for (var n=0; n<m.items.length; n++) {
			var i = m.items[n];
			s += tr+'<td class="mCell" id="'+i.id+
			'" nowrap><a href="#" class="mLink">'+i.txt+'</a></td>'+tre+'\n';
		}
		s += tbe+'</table></div>\n';
	}
	return s;
}

//=========================================================

var TOut = null;
function killTOut() {
	if (TOut != null) {
		self.clearTimeout(TOut);
		TOut = null;
	}
}

function hideAll() {
	for (var id in menuBoxes) menuBoxes[id].hide();
	TOut = null;
}

function inFamilyLine(theM, lastM) {
	while (lastM) {
		if (theM==lastM) return true;
		lastM = lastM.p ? lastM.p.p : null;
	}
	return false;
}

function hideNonFamily(i) {
	var lastM = (i.type==1) ? i.act : i.p;
	for (var id in menuBoxes) {
		var m = menuBoxes[id];
		if (m.e && !inFamilyLine(m, lastM)) m.hide();
	}
}

var notOver = true;
function itemMsOver(a) {
	notOver = false;
	killTOut();
	var i = a.i;
	hideNonFamily(i);
	if (i.type==1) {
		i.e.o.className = 'mCellOn';
		var m = i.act;		// menubox-Obj
		if (i.p.f&mHor) {
			var x = (m.f&mRightAlign) ? (i.e.getPageX()+i.w-m.w-mBoxShiftX) : (i.e.getPageX()+mBoxShiftX);
			m.e.setPageXY(x, i.e.getPageY()+i.h);
		}
		else {
			var xEnd = pageXOfs()+clWidth();
			var x = i.e.getPageX()+i.w;
			if ((x+m.w) > xEnd) x = Math.max(i.e.getPageX()-m.w, 0);
			m.e.setPageXY(x, i.e.getPageY()+mBoxShiftY);
		}
		m.show();
	}
	if (ns4) i.setHover();
}

function itemMsOut(a) {
	notOver = true;
	var i = a.i;
	if (i.p.e==null) TOut = self.setTimeout('hideAll()', mTimeout);
	if (ns4) {
		if (i.type==1) i.setActive();
		else i.setNormal();
	}
}

function itemAct(a) {
	var i = a.i;
	if (i.type != 1) {
		killTOut();
		hideAll();
		self.location = i.act;
	}
}


function getBox(o) {
	o.w = o.e.getWidth();
	o.h = o.e.getHeight();
	o.x = o.e.getPageX();
	o.y = o.e.getPageY();
}

function getMenuTDs(c) {
	var n = 0, a = new Array();
	for (var i=0; i<c.length; i++)
		if (typeof menuItems[c[i].id]=='object') a[n++] = c[i];
	return a;
}

function linkItem(i,c) {

	i.e = new pObj(c);
	getBox(i);
	i.a =	dmc ? c.getElementsByTagName('a')[0] :
			ie4 ? c.children.tags('a')[0] :
			ns4 ? c.document.links[0] : null;
	i.a.i = i;
	if (ie) i.a.style.width = '100%';
	i.a.onmouseover	= function() { itemMsOver(this); return hideStatus; }
	i.a.onmouseout	= function() { itemMsOut(this); }
	i.a.onclick		= function() { itemAct(this); return false; }
}

function initMenu() {

	for (var id in menuBoxes) {
		var m = menuBoxes[id];

		if (m.p) {
			m.e = new p_Obj(id+'Div');
			m.e.o.onmouseover = function() { killTOut(); }
			m.e.o.onmouseout = function() { if (notOver) TOut = self.setTimeout('hideAll()', mTimeout); }

			if (dmc) {
				var tbl = m.e.o.getElementsByTagName('table')[0];
				var tds = getMenuTDs(tbl.getElementsByTagName('td'));
			}
			else if (ie) {
				var tbl = m.e.o.children.tags('table')[0];
				var tds = getMenuTDs(tbl.cells);
			}
			else if (ns4) {
				var tbl = null;
				var tds = m.e.o.document.layers;
			}

			if (tbl) {
				var t = new pObj(tbl);
				m.e.setWidth(t.getWidth());
			}

			getBox(m);
			var x = 0;
			for (var n=0; n<tds.length; n++) {
				linkItem(m.items[n], tds[n]);
			}

		}
		else {

			m.e = null;

			for (var n=0; n<m.items.length; n++) {
				var i = m.items[n];
				linkItem(i, getEl(i.id));
			}
		}

		if (ns4 && !(m.f&mHor)) {
			var mw = 0;
			for (var n=0; n<m.items.length; n++) mw = Math.max(mw, m.items[n].w);
			for (var n=0; n<m.items.length; n++) {
				m.items[n].e.setWidth(mw);
				m.items[n].w = mw;
			}
		}
	}

}

onLoadHandler(initMenu);

