
//public HspMenu()
function HspMenu (wdw, doc, menuId, isSubMenu) {
	if ( menuId == null )
		return;

	if ( !HspMenu.prototype.className ) {
		HspMenu.prototype.className = 'HspMenuObject';
		HspMenu.prototype.LoLite = hspLoLite;
		HspMenu.prototype.HiLite = hspHiLite;
		HspMenu.prototype.FixupHandlers = hspFixupHandlers;
		HspMenu.prototype.toSource = hspToSource;
		HspMenu.prototype.offsetLeft = hspOffsetLeft;
		HspMenu.prototype.offsetTop = hspOffsetTop;
		HspMenu.prototype.toInteger = hspToInteger;
		HspMenu.prototype.SetTimeout = hspSetTimeout;
		HspMenu.prototype.TimeoutIdx = 0;
		HspMenu.prototype.Timeouts = new Array();
		HspMenu.prototype.TimeoutDivs = new Array();
		HspMenu.prototype.ObjectMapIdx = 0;
		HspMenu.prototype.ObjectMap = new Array();
		HspMenu.prototype.NewObjectMap = hspNewObjectMap;
	}

	if ( isSubMenu )
		this.div = menuId;
	else
		this.div = hspGetElementById(doc,menuId);
	var menuDiv = this.div;
	if ( menuDiv == null ) {
		window.status = "HspMenu can't find menu '"+menuId+"'";
		return;
	}
	this.ID = menuDiv.id;

	this.wdw = wdw;
	this.targetFrame = doc;
	this.parent = null;
    this.opener = null;

	if ( menuDiv.getElementsByTagName ) {
		this.origPosition = menuDiv.style.position;
		this.origStyle = menuDiv.style;
		this.origVisibility = menuDiv.style.visibility;
		this.origDisplay = menuDiv.style.display;
		this.origLeft = this.toInteger(menuDiv.style.left);
		this.origTop  = this.toInteger(menuDiv.style.top);
	} else {
		this.origPosition = 'absolute';
		this.origStyle = null;
		this.origVisibility = 'show';
		this.origDisplay = 'none';
		this.origLeft = 0;
		this.origTop  = 0;
	}
	this.origClassName = menuDiv.className;
	this.timeoutId = '';

	this.FixupHandlers(wdw,doc,menuDiv);
	
function hspNewObjectMap (div) {
	HspMenu.prototype.ObjectMapIdx += 1;
	var objectMapId = 'id'+HspMenu.prototype.ObjectMapIdx;
	HspMenu.prototype.ObjectMap[objectMapId] = div;
	return objectMapId;
}

function hspGetElementById(doc, id) {
	if ( isIE3Mac ) {
	}
	else if ( TOP.is.DOMW3C ) {
		return doc.getElementById(id);
	}
	else if ( TOP.is.nav || is.opera ) {
		return doc.layers[id];
	}
	else if ( TOP.is.ie ) {
		return doc.all[id];
	}
	return null;
}


function hspToSource () {
	var answer = "{  ID='" + this.ID + "',\n";
	answer = answer + "   targetFrame=" + this.targetFrame + "\n";
	answer += "   timeoutId=" + this.timeoutId + "\n";
	answer += "}";
	return answer;
}

function hspToInteger (str) {
	return str.replace('px','') - 0;
}

function hspFixupHandlers (wdw, doc, div) {

	if ( !div.getElementsByTagName ) {
		return;
	};

	var tds;
	if ( div.getElementsByTagName ) {
		tds = div.getElementsByTagName('TD');
	} else {
		tds = doc.getElementsByName(div.id+"_item");
	}
	for ( var i=0; i<tds.length; i++) {
		var td = tds[i];
		var _hspMenu = td.getAttribute('hspMenu');
		if ( _hspMenu && _hspMenu != '' ) {
			var hspMenu = _hspMenu.split('|');
            if ( hspMenu[0] && (hspMenu[0] == "item") ) {
                var anc = td.getElementsByTagName('A');
                if ( anc && anc[0] && !td.link) {
                    td.onclick = hspOnClick;
                    td.setAttribute('link', anc[0].href);
                    anc[0].href = '#';
                } else {
                    td.onclick = hspOnClick;
                }
                if ( hspMenu[1] != null && hspMenu[1] != '' ) {
                    var submenu = new HspMenu(wdw, doc, hspGetElementById(doc,hspMenu[1]),true);
                    if ( submenu != null && submenu.div != null ) {
                        computeDimensions(wdw, td);
                        submenu.parent = this;
                        submenu.opener = td;
                        submenu.div.onmouseover = this.HiLite;
                        submenu.div.onmouseout  = this.LoLite;
                        td.setAttribute('theSubMenu', this.NewObjectMap(submenu));
                    }
                }
                if ( !td.onmouseover ) td.onmouseover = this.HiLite;
                if ( !td.onmouseout )  td.onmouseout  = this.LoLite;
                td.setAttribute('theContainerMenu', this.NewObjectMap(this));
		    }
		}
	}
	this.div.setAttribute('theHspMenu', this.NewObjectMap(this));
}

function computeDimensions (wdw, elem) {
    if ( elem.currentStyle ) {
		elem.setAttribute('cTextAlign',elem.currentStyle.textAlign);
        elem.setAttribute('cTop',elem.currentStyle.top);
        elem.setAttribute('cLeft',elem.currentStyle.left);
        elem.setAttribute('cHeight',elem.currentStyle.height);
        elem.setAttribute('cWidth',elem.currentStyle.width);
    }
    else {
        elem.setAttribute('cTextAlign',wdw.hspComputedStyle(elem, 'text-align'));
        elem.setAttribute('cTop',wdw.hspComputedStyle(elem, 'top'));
        elem.setAttribute('cLeft',wdw.hspComputedStyle(elem, 'left'));
        elem.setAttribute('cHeight',wdw.hspComputedStyle(elem, 'height'));
        elem.setAttribute('cWidth',wdw.hspComputedStyle(elem, 'width'));
    }
}
function hspHiLite (elem) {
	var menu;
	var div;

	if ( this.className == 'HspMenuObject' ) {
		menu = this;
		div = this.div;
		
//		if ( menu.origPosition == 'relative' ) {
//			div.style.width  = '100';
			div.style.position = 'absolute';
			div.style.textAlign = 'right';
			div.style.left = menu.offsetLeft() + menu.origLeft - this.toInteger(div.style.width);
			div.style.top  = menu.offsetTop() + menu.origTop;
//		}
//		this.wdw.hspHiLite(div);
		div.style.visibility = 'visible';
		div.style.display = 'inline';
	} else {
		elem = this;
		menu = HspMenu.prototype.ObjectMap[this.getAttribute('theSubMenu')];
		div = this;
		if ( menu ) {
			menu.HiLite(elem);
			if ( menu.opener ) {
				var _timeoutId = menu.opener.getAttribute('timeoutid');
				window.clearTimeout(HspMenu.prototype.Timeouts['id'+_timeoutId]);
				HspMenu.prototype.Timeouts['id'+_timeoutId] = null;
				HspMenu.prototype.TimeoutDivs['id'+_timeoutId] = null;
				menu.opener.setAttribute('timeoutid', '');
			}
		}
	}
	
	var _timeoutId = div.getAttribute('timeoutid');
	if ( _timeoutId && _timeoutId != '' ) {
		window.clearTimeout(HspMenu.prototype.Timeouts['id'+_timeoutId]);
		HspMenu.prototype.Timeouts['id'+_timeoutId] = null;
		HspMenu.prototype.TimeoutDivs['id'+_timeoutId] = null;
		div.setAttribute('timeoutid', '');
	}
	
	return false;
}


function hspLoLite () {
	var menu;
	var div;
	
	if ( this.className == 'HspMenuObject' ) {
		menu = this;
		div = this.div;
		
//		if ( menu.origPosition == 'relative' ) {
			div.style.position = 'absolute';
//			div.style.textAlign = 'right';
//			div.style.left = menu.offsetLeft() + menu.origLeft - this.toInteger(div.style.width);
//			div.style.top  = menu.offsetTop() + menu.origTop;
//		}
//		this.wdw.hspHiLite(div);
		div.style.visibility = 'visible';
		div.style.display = 'inline';
	} else {
		menu = HspMenu.prototype.ObjectMap[this.getAttribute('theSubMenu')];
		div = this;
		if ( menu ) {
			menu.LoLite();
		} else
			menu = HspMenu.prototype.ObjectMap[div.getAttribute('theContainerMenu')];
	}

	HspMenu.prototype.SetTimeout(div);

	return false;
}

function hspSetTimeout (div) {
	HspMenu.prototype.TimeoutIdx += 1;
	var timeoutId = HspMenu.prototype.TimeoutIdx;
	HspMenu.prototype.TimeoutDivs['id'+timeoutId] = div;
	HspMenu.prototype.Timeouts['id'+timeoutId] = window.setTimeout("hspLoLiteGlobal("+timeoutId+")", 42);
	div.setAttribute('timeoutid', timeoutId);
}

function hspOnClick() {
	if ( this.getAttribute('link').substr(0,11) == 'javascript:' )
		eval(this.getAttribute('link'));
	else {
		HspMenu.prototype.ObjectMap[this.getAttribute('theContainerMenu')].targetFrame.location = this.getAttribute('link');
		//frames['centerFrame'].focus();
	}
	return false;
}

function hspOffsetLeft () {
	var px = this.origLeft;
	for (var div = this.opener ; div ; div = div.offsetParent ) {
		px += div.offsetLeft;
	}
	return px;
}
function hspOffsetTop () {
	var px = this.origTop;
	for (var div = this.opener ; div ; div = div.offsetParent ) {
		px += div.offsetTop;
	}
	return px;
}

}

function hspLoLiteGlobal (id) {
	var div = HspMenu.prototype.TimeoutDivs['id'+id];
	if ( div ) {
		if ( div.getAttribute('theHspMenu') ) {
			var menu = HspMenu.prototype.ObjectMap[div.getAttribute('theHspMenu')];
			menu.div.style.visibility = menu.origVisibility;
			menu.div.style.display = menu.origDisplay;
		}
		else {
			div.style.fontWeight = 'normal';
		}
	}
	HspMenu.prototype.Timeouts['id'+id] = null;
	HspMenu.prototype.TimeoutDivs['id'+id] = null;
}

function hspPopup (elem, newTarg, mod) {
	var newMod=null, newHref=elem.href.replace(/^.*#_/,'');
	if ( newHref == elem.href ) elem.href = '#_'+elem.href;

	if ( newTarg == null || newTarg == '' ) newTarg = 'hazelst';
	if ( mod )
		if ( mod == 'C' ) {
			newMod = 'location=no,menubar=no,status=no,toolbar=no';
		} else {
			newMod = mod;
		}

	var newWdw = window.open(newHref, newTarg, newMod);
	try {
		newWdw.focus();
	} catch (err) { // possibly popups are trapped
		window.location = newHref;
		newHref = '';
	}

	return false;
}
