YAHOO.namespace('YAHOO.mrl.overlay');

function get_overlay_id(element_id) {
	var i = element_id.indexOf('_');
	if (i > 0) {
		var num = element_id.substr(i + 1);
		return isNaN(num) ? null : num;
	} else {
		return null;
	}
}

function show_desc(element_id, descid, overlay, show_left)
{
	var id = get_overlay_id(element_id);
	if (!id)
		return;
	xy = YAHOO.util.Dom.getXY(element_id);
	desc = document.getElementById(descid + id);
	YAHOO.util.Dom.removeClass(desc, 'hidden');
	var x = xy[0];
	if (show_left) {
		overlay.cfg.setProperty('context', [element_id, 'br', 'tr']);
	} else {
		overlay.cfg.setProperty('context', [element_id, 'bl', 'tl']);
	}
	overlay.show();
}

function hide_desc(element_id, descid, overlay)
{
	var id = get_overlay_id(element_id);
	if (!id)
		return;
	desc = document.getElementById(descid + id);
	YAHOO.util.Dom.addClass(desc, 'hidden');
	overlay.hide();
}

function show_links(element_id, id_prefix, container_id)
{
	var focus_class = 'feature_focus';
	var hide_class = 'feature_hidden';
	function set_visible(el, make_visible)
	{
		var to_add = make_visible ? focus_class : hide_class;
		var to_remove = make_visible ? hide_class : focus_class;
		YAHOO.util.Dom.addClass(el, to_add);
		YAHOO.util.Dom.removeClass(el, to_remove);
	}
	var id = get_overlay_id(element_id);
	var wrapper_id = id_prefix + '_company_logo_wrapper_' + id;
	var wrapper = YAHOO.util.Dom.get(wrapper_id);
	var old_visible = YAHOO.util.Dom.getElementsByClassName(focus_class, 'div', container_id);
	set_visible(old_visible, false);
	set_visible(wrapper, true);
}

function register_description_overlays(id_prefix, container_id, show_left) {
	function fc_show_desc(id) {
		if (YAHOO.mrl.overlay.hide) {
			YAHOO.mrl.overlay.hide();
			clearTimeout(YAHOO.mrl.overlay.hide_timer);
		}
		show_desc(id, id_prefix + 'desc_', company_desc, show_left);
		if (container_id) {
			show_links(id, id_prefix, container_id);
		}
	}

	function fc_hide_desc(id) {
		hide_desc(id, id_prefix + 'desc_', company_desc);
	}

	function to_show(id) {
		return YAHOO.mrl.overlay.over_element_id == id;
	}

	function to_hide(id) {
		return !(YAHOO.mrl.overlay.over_element_id == id || YAHOO.mrl.overlay.in_overlay);
	}

	function show_with_delay(event, obj) {
		var id = this.getAttribute('id');
		YAHOO.mrl.overlay.over_element_id = id;
		function show() {
			if (to_show(id)) {
				fc_show_desc(id);
				YAHOO.mrl.overlay.last_shown = id;
			}
		}
		setTimeout(show, obj.delay);
	}
	
	function hide_with_delay(event, obj) {
		YAHOO.mrl.overlay.in_overlay = false;
		var id = this.getAttribute('id');
		var overlay_id = get_overlay_id(id);
		if (overlay_id == null) {
			id = YAHOO.mrl.overlay.last_shown;
		}
		YAHOO.mrl.overlay.over_element_id = null;
		function hide() {
			if (to_hide(id)) {
				fc_hide_desc(id);
				YAHOO.mrl.overlay.last_shown = null;
			}
		}
		setTimeout(hide, obj.delay);
	}

	var elements = YAHOO.util.Dom.getElementsByClassName(id_prefix + '_company_img');
	if (elements.length > 0) {
		var id = id_prefix + '_company_desc_overlay';
		var company_desc = new YAHOO.widget.Overlay(
			id,	{ visible: false } );
		YAHOO.util.Event.addListener(elements, 'mouseover', show_with_delay,
									 {delay:500});
		YAHOO.util.Event.addListener(elements, 'mouseout', hide_with_delay,
									 {delay:500});
		YAHOO.util.Event.addListener(id, 'mouseover', function() {
				YAHOO.mrl.overlay.in_overlay = true;
			});
		YAHOO.util.Event.addListener(id, 'mouseout', hide_with_delay, 
									 {delay:500});
		company_desc.render();
		YAHOO.util.Dom.removeClass(id_prefix + '_company_desc_overlay', 'hidden');
	}
}

