function get_top(el) {
	top = el.offsetTop;
	
	while (el.offsetParent) {
		el = el.offsetParent;
		top = top + el.offsetTop;
	}

	return top;
}

function get_left(el) {
	left = el.offsetLeft;
	
	while (el.offsetParent) {
		el = el.offsetParent;
		left = left + el.offsetLeft;
	}

	return left;
}

/* ------------------------ tooltips -------------------------------*/
var tooltip_shown = false;
var tooltip = null;
var tooltip_timer = null;

function create_tooltip() {
	var div = document.createElement('<div>');
	div.setAttribute('class', 'tooltip');
	div.setAttribute('id', 'tooltip');
	div.setAttribute('onmouseover', 'return in_tooltip()');
	div.setAttribute('onmouseout', 'return out_tooltip()');
	document.body.insertBefore(div, null);
	return div;
}

function show_tooltip(contents, parent) {
	var el = document.getElementById(parent);
	if (!el)
		return false;

	in_tooltip();

	if (tooltip == null) 
		tooltip = create_tooltip();

	tooltip.innerHTML = contents;

	height = el.offsetHeight;
	top = get_top(el);
	left = get_left(el);

	tooltip.style.left = left + 'px';
	tooltip.style.top = top + height + 'px';
	tooltip.style.display = 'block';
	return false;
}

function in_tooltip() {
	window.clearInterval(tooltip_timer);
	tooltip_timer = null;
	tooltip_shown = true;
}

function hide_tooltip() {
	if (tooltip_timer) {
		window.clearInterval(tooltip_timer);
		tooltip_timer = null;
	}
	if (tooltip)
		tooltip.style.display = 'none';
	tooltip_shown = false;
}

function out_tooltip() {
	tooltip_shown = false;
	tooltip_timer = window.setInterval(
		'hide_tooltip()', 100);
	return false;
}

/* ------------------------ news -------------------------------*/

var news = null;
var news_timer = null;

function hookup_news(id) {
	var summary = document.getElementById('news_summary_'+id);
	if (summary == null)
		return;
	summary.setAttribute('onmouseover', 'return show_news('+id+')');
	summary.setAttribute('onmouseout', 'return out_news()');

	var el = document.getElementById('news_contents_'+id);
	if (el == null)
		return;
	el.setAttribute('onmouseover', 'return in_news()');
	el.setAttribute('onmouseout', 'return out_news()');
}

function show_news(id) {
	var summary = document.getElementById('news_summary_name_'+id);
	if (summary == null)
		return;

	var el = document.getElementById('news_contents_'+id);
	if (!el)
		return false;
	in_news();
	if (el != news && news)
		news.style.display = 'none';
	news = el;

	news.style.left = get_left(summary);
	news.style.top = get_top(summary) + summary.offsetHeight + 3;
	news.style.display = 'block';
	return false;
}

function in_news() {
	window.clearInterval(news_timer);
	news_timer = null;
}

function hide_news() {
	if (news_timer) {
		window.clearInterval(news_timer);
		news_timer = null;
	}
	if (news == null)
		return;
	news.style.display = 'none';
	news = null;
}

function out_news() {
	news_timer = window.setInterval(
		'hide_news()', 100);
	return false;
}
