var _menu_isIE = navigator.userAgent.indexOf("MSIE") >= 0;
var _menu_isGecko = navigator.userAgent.indexOf("Gecko/index.html") >= 0;
var _menu_isSafari = navigator.userAgent.indexOf("Safari/index.html") >= 0;
var _menu_activeClass = null;
var _menu_timeout;

/* EVENT HANDLERS */	
function _menu_handleMouseOver(event, id) {
	var trigger = _menu_isIE ? window.event.srcElement : event.currentTarget;
	if (_menu_isSafari) return;
	
	if (_menu_activeClass == null || (_menu_activeClass != null && _menu_activeClass != trigger)) {
		trigger.blur();
		if (trigger.menu == null) {
			_menu_initTrigger(trigger, id);
			var minwidth = trigger.vertical ? -1 : (trigger.useTable ? trigger.parentNode.offsetWidth : trigger.offsetWidth) - 1;
			var maxwidth = trigger.vertical ? -1 : (trigger.useTable ? trigger.parentNode.parentNode.parentNode.parentNode.offsetWidth : trigger.parentNode.offsetWidth) - _menu_x(trigger) - 1;
			if (trigger.menu.init == null) _menu_init(trigger.menu, minwidth, maxwidth);
		}
		if (trigger.onmouseout == null) trigger.onMouseOut = _menu_handleMouseOut;
		
		if (trigger == _menu_activeClass) return false;
		if (_menu_activeClass != null) _menu_deactivate(_menu_activeClass);
		if (trigger != _menu_activeClass) {
			_menu_activate(trigger);
			_menu_activeClass = trigger;
		} else {
			_menu_activeClass = null;
		}
	}
}

function _menu_handleMouseOut(event) {
	if (_menu_activeClass == null) return;

	var obj = null;
	if (_menu_isIE) {
		obj = window.event.toElement;
	} else if (event.relatedTarget != null) {
		obj = event.relatedTarget.tagName ? event.relatedTarget : event.relatedTarget.parentNode;
	}
	
	if (obj != null) {
		if (!_menu_isMenu(obj)) {
			_menu_deactivate(_menu_activeClass);
			_menu_activeClass = null;
		}
	}
}

function _menu_handleClick(event) {
	if (_menu_activeClass != null) {
		_menu_deactivate(_menu_activeClass);
		_menu_activeClass = null;
	}
}

/* CONTROL FUNCTIONS */
function _menu_initTrigger(obj, id) {
	obj.menu = document.getElementById(id);
	if (obj.menu.onmouseout == null) obj.menu.onmouseout = _menu_handleMouseOut;
	
	if (obj.inactiveClass == null) obj.inactiveClass = obj.className;
	if (obj.activeClass == null) obj.activeClass = obj.attributes["activeClass"] == null ? obj.className : obj.attributes["activeClass"].value;
	if (obj.vertical == null) obj.vertical = _menu_hasAttribute(obj, "vertical");
	if (obj.onmouseout == null) obj.onmouseout = _menu_handleMouseOut;
	if (obj.onclick == null) obj.onclick = _menu_handleClick;
	
	if (obj.useTable == null) obj.useTable = _menu_useTable(obj);
	if (obj.useTable) {
		if (obj.parentNode.isMenu == null) obj.parentNode.isMenu = true;
		if (obj.parentNode.onmouseout == null) obj.parentNode.onmouseout = _menu_handleMouseOut;
	}
}

function _menu_init(obj, minwidth, maxwidth) {
	if (obj.isMenu == null) obj.isMenu = true;
	
	_menu_tagMenu(obj, "IMG");
	_menu_tagMenu(obj, "DIV");
	_menu_tagMenu(obj, "TABLE");
	_menu_tagMenu(obj, "TR");
	_menu_tagMenu(obj, "TD");
	var elements = obj.getElementsByTagName("A");
	if (elements.length > 0) {
		for (var i = 0; i < elements.length; i++) {
			elements[i].isMenu = true;
		}
		if (_menu_isIE) {
			for (var i = 0; i < elements.length; i++) {
				if (elements[i].onclick == null) elements[i].onclick = _menu_handleClick;
				var width = Math.max(elements[i].offsetWidth, minwidth);
				if (maxwidth >= 0 && width > maxwidth) {
					width =  maxwidth;
					elements[i].style.whiteSpace = "normal";
				}
				width -= 20;
				if (!_menu_skinID() == 3) {
					elements[i].style.width = width + "px";
					var difference = elements[i].offsetWidth - width;
					width -= difference;
				}
				elements[i].style.width = width + "px";
			}
						
			var iframe = document.createElement("IFRAME");
			iframe.frameBorder = 0;
			iframe.src = "javascript:void(0);"	
			iframe.style.position = "absolute";
			iframe.style.display = "none";
			iframe.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
			obj.iframe = obj.parentNode.insertBefore(iframe, obj);			
		} else {
			var width = Math.max(obj.offsetWidth, minwidth);
			if (maxwidth >= 0 && width > maxwidth) {
				width = maxwidth;
			}
			for (var i = 0; i < elements.length; i++) {
				if (elements[i].offsetWidth > maxwidth) {
					elements[i].style.whiteSpace = "normal";
				}
			}
			obj.style.width = width + "px";
		}
	}
	obj.init = true;
}

function _menu_activate(obj) {
	obj.className = obj.activeClass;
	if (obj.menu != null) {
		obj.menu.style.left = _menu_x(obj) + "px";
		obj.menu.style.top = _menu_y(obj) + "px";
		obj.menu.style.visibility = "visible";
		
		if (obj.menu.iframe != null) {
			obj.menu.iframe.style.left = obj.menu.style.left;
			obj.menu.iframe.style.top = obj.menu.style.top;
			obj.menu.iframe.style.width = obj.menu.offsetWidth + "px";
			obj.menu.iframe.style.height = obj.menu.offsetHeight + "px";
			obj.menu.iframe.style.display = "";				
		}
	}
}

function _menu_deactivate(obj) {
	obj.className = obj.inactiveClass;
	if (obj.menu != null) {
		obj.menu.style.visibility = "hidden";
	}
	if (obj.menu.iframe != null) {
		obj.menu.iframe.style.display = "none";
	}
}

/* UTILITY FUNCTIONS */
function _menu_offsetX(obj) {
	var x = obj.offsetLeft;
	if (obj.offsetParent != null) x += _menu_offsetX(obj.offsetParent);
	return x;
}

function _menu_offsetY(obj) {
	var y = obj.offsetTop;
	if (obj.offsetParent != null) y += _menu_offsetY(obj.offsetParent);
	return y;
}

function _menu_isMenu(obj) {
	return obj.isMenu != null ? obj.isMenu : false;
}

function _menu_useTable(obj) {
	if (obj.parentNode.tagName == "TD") {
		return true;
	}
	return false;
}

function _menu_hasAttribute(obj, name) {
	if (obj.attributes[name] != null) {
		if (obj.attributes[name].value + "" != "") {
			return true;
		}
	}
	return false;
}

function _menu_x(obj) {
	var x = 0;
	if (_menu_skinID() == 5) {
	} else if (obj.useTable) {
		x = _menu_offsetX(obj.parentNode);
		if (_menu_isIE) {
			x += obj.parentNode.offsetParent.clientLeft;
		} 
		if (_menu_skinID() != 3) {
			x -= 1;
		}
		if (obj.vertical) {
			x += obj.parentNode.offsetWidth;
			if (_menu_isIE) x += Math.ceil(obj.offsetWidth / 2);
			if (_menu_isSafari) x += obj.offsetWidth;
		}
	} else {
		x = _menu_offsetX(obj);
		if (_menu_isIE) x += obj.offsetParent.clientLeft;
		if (obj.vertical) x += obj.offsetWidth;
	}
	return x;
}

function _menu_y(obj) {
	var y = 0;
	if (obj.useTable) {
		y = _menu_offsetY(obj.parentNode);
		if (_menu_isIE) {
			y += obj.parentNode.offsetParent.offsetTop + obj.parentNode.parentNode.offsetParent.offsetTop; 
		} else {
			y = obj.parentNode.offsetParent.offsetTop; 
		}
		if (!obj.vertical) {
			y += obj.parentNode.offsetParent.offsetHeight;
		}
	} else {
		y = _menu_offsetY(obj);
		if (_menu_isIE) y += obj.offsetParent.clientTop;
		if (obj.vertical) {
			y -= 5;
			if (_menu_isGecko) y -= 1;
		} else {
			y += obj.offsetHeight;
		}
	}
	if (_menu_skinID() == 5) {
		if (_menu_isIE) {
			y -= 16;
		}
	} 
	return y;
}


function _menu_tagMenu(obj, tag) {
	var elements = obj.getElementsByTagName(tag);
	for (var i = 0; i < elements.length; i++) {
		elements[i].isMenu = true;
	}
}

function _menu_skinID() {
	if (_menu_skin_id != undefined) {
		return _menu_skin_id;
	}
	return 0;
}