var activePopup = null;

function hidePopups () {
	if (activePopup != null) {
		prefix = activePopup;
		activePopup = null;
		var popup = _getElementById(prefix + '_popup');
		var trigger = _getElementById(prefix + '_trigger');
		
		if (popup && trigger) {
			removeCssClass(trigger, 'active');
			hideElement(popup);

		    if (_getElementById("sortControl") != null) 
		    {
		        Hide($get("sortControl"), true);
		    }      	
		}
	}
}

function showPopup (prefix) {
	var popup = _getElementById(prefix + '_popup');
	var trigger = _getElementById(prefix + '_trigger');
	
	if (popup && trigger) {
		hidePopups();
		
		removeCssClass(trigger, 'hover');
		addCssClass(trigger, 'active');
		
		popup.style.top = findTop(trigger) + trigger.offsetHeight + 'px';
		popup.style.left = findLeft(trigger) + 'px';
		
		showElement(popup);
		if (_getElementById("sortControl") != null) 
		{
		    Hide($get("sortControl"), true);
		}        
		// don't let it go off the right edge of the screen
		if (findLeft(popup) + popup.offsetWidth > document.body.clientWidth) {
			popup.style.left = (document.body.clientWidth - popup.offsetWidth) + 'px';
		}
		
		activePopup = prefix;
		
		return true;
	} else {
		return false;
	}
}

function event_popupTrigger_mousedown (e) {
	var exp = new RegExp("_trigger$", "");
	var prefix = this.id.replace(exp, "");
	
	var popup = _getElementById(prefix + '_popup');
	if (popup) {
		if (activePopup == prefix) {
			hidePopups();
		} else {
			showPopup(prefix);
		}
	}
	preventEventDefault(e);
}

function event_popupTrigger_mouseover (e) {
	if (!hasCssClass(this, 'active')) {
		addCssClass(this, 'hover');
	}
	
	if (activePopup != null && activePopup != prefix) {
		var exp = new RegExp("_trigger$", "");
		var prefix = this.id.replace(exp, "");
		if (!showPopup(prefix)) {
			hidePopups();
			activePopup = ' ';
		}
	}
}

function event_popupTrigger_mouseout (e) {
	removeCssClass(this, 'hover');
}

function event_menuItem_mouseover (e) {
	addCssClass(this, 'hover');
}

function event_menuItem_mouseout (e) {
	removeCssClass(this, 'hover');
}

function event_menuItem_mouseup (e) {
	removeCssClass(this, 'hover');
	var as = this.getElementsByTagName('a');
	if (as.length) {
		if (as[0].target.length > 0)
			window.open(as[0].href,as[0].target);
		else window.location = as[0].href;
		hidePopups();
	}
}

function registerPopup (prefix) {
	if (!document.getElementsByTagName) {
		return;
	}	
	
	// get the required elements
	var trigger = _getElementById(prefix + '_trigger');
	var popup = _getElementById(prefix + '_popup');
	
	if (popup) {
		if (trigger) {
			// setup the trigger
			_addEventListener(trigger, 'mousedown', event_popupTrigger_mousedown);
			_addEventListener(trigger, 'mouseover', event_popupTrigger_mouseover);
			_addEventListener(trigger, 'mouseout', event_popupTrigger_mouseout);
			_addEventListener(trigger, 'mouseup', preventEventDefault);
			_addEventListener(trigger, 'click', preventEventDefault);
			showElement(trigger);
		}
		
		// setup the popup body
		_addEventListener(popup, 'mouseup', absorbEvent);
		_addEventListener(popup, 'mousedown', absorbEvent);
		_addEventListener(popup, 'click', absorbEvent);
		hideElement(popup);
		popup.style.position = 'absolute';
		
		var items = popup.getElementsByTagName('li');
		for (var i = 0; i < items.length; i++) {
			_addEventListener(items[i], 'mouseover', event_menuItem_mouseover);
			_addEventListener(items[i], 'mouseout', event_menuItem_mouseout);
			_addEventListener(items[i], 'mouseup', event_menuItem_mouseup);
			_addEventListener(items[i], 'mousedown', preventEventDefault);
			var as = items[i].getElementsByTagName('a');
			if (as.length) {
				if (items[i].title == '') {
					items[i].title = getElementText(as[0]);
				}
				for (var j = 0; j < as.length; j++) {
					_addEventListener(as[j], 'click', passEvent);
				}
			} // if (as.length)
		} // for (items)
	}
}

function discoverPopups () {
	if (document.getElementsByTagName) {
		var tags = Array('td', 'div');
		for (var j = 0; j < tags.length; j++) {
			var elems = document.getElementsByTagName(tags[j]);
			for (var i = 0; i < elems.length; i++) {
				if (hasCssClass(elems[i], 'menuheader')) {
					var exp = new RegExp("_trigger$", "");
					var prefix = elems[i].id.replace(exp, "");
					registerPopup(prefix);
				} // if (hasCssClass(menuheader)
			} // for(elems)
		} // for (tags)
	} // if (document.getElementsByTagName)
}

_addEventListener(window, 'load', discoverPopups);
_addEventListener(document, 'click', hidePopups);
