function open_and_close(tooltip) {
	if (window.active_tooltip) {
		//window.active_tooltip.style.display = 'none';
		window.active_tooltip.style.visibility = 'hidden';
	}

	//tooltip.style.display = 'block';
	tooltip.style.visibility = 'visible';
	window.active_tooltip = tooltip;
}

function wait_to_close(tooltip) {
	if (tooltip) {
		window.tooltip_timeout = setTimeout(function() {
			//tooltip.style.display = 'none';
			tooltip.style.visibility = 'hidden';
			window.active_tooltip = null;
			window.tooltip_timeout = null;
		}, 666);
	}
}

function cancel_close() {
	if (window.tooltip_timeout) {
		clearTimeout(window.tooltip_timeout);
		window.tooltip_timeout = null;
	}
}

function close_immediately(tooltip) {
	if (tooltip) {
		//tooltip.style.display = 'none'
		tooltip.style.visibility = 'hidden';
		window.active_tooltip = null;
	}
}

Tooltip = {
	elm: null,
	top: null,
	middle: null,
	bottom: null,
	init: function(root) {
		Tooltip.elm = document.createElement('div');
		Tooltip.elm.id = 'tooltip';
		Tooltip.elm.style.display = 'none'

		//<span class="top"></span>
		//	<span class="middle">...</span>
		//<span class="bottom"></span>

		Tooltip.top = document.createElement('span');
		Tooltip.top.className = 'top';
		Tooltip.top.id = 'tt_top';

		Tooltip.middle = document.createElement('span');
		Tooltip.middle.className = 'middle';
		Tooltip.middle.id = 'tt_middle';

		Tooltip.bottom = document.createElement('span');
		Tooltip.bottom.className = 'bottom';
		Tooltip.bottom.id = 'tt_bottom';

		Tooltip.elm.appendChild(Tooltip.top);
		Tooltip.elm.appendChild(Tooltip.middle);
		Tooltip.elm.appendChild(Tooltip.bottom);

		document.body.appendChild(Tooltip.elm);

		root = root && root.nodeType ? root : document;

		var elms = root.getElementsByTagName('a'),
			elm = null,
			xx = elms.length,
			x = 0;

		for (; x < xx; ++x) {
			elm = elms[x];
			if (elm.rel && elm.rel.indexOf('tooltip') > -1) {
				elm.tooltip = elm.title;
				elm.title = '';

				Tooltip.observe(elm, 'mouseover', Tooltip.bind(function(evt) {
					Tooltip.show(this.tooltip, evt || window.event);
				}, elm));
				Tooltip.observe(elm, 'mouseout', Tooltip.bind(function() {
					Tooltip.hide();
				}, elm));
			}
		}
	},
	show: function(text, evt) {
		Tooltip.middle.innerHTML = decodeURI(text);

		Tooltip.elm.style.display = 'block';
		Tooltip.elm.style.position = 'absolute';
		if (Tooltip.mouse(evt).x + 15 > document.body.offsetWidth - Tooltip.elm.offsetWidth) {
			Tooltip.elm.className = 'left';
			Tooltip.elm.style.left = (Tooltip.mouse(evt).x - Tooltip.elm.offsetWidth - 10) + 'px';
		} else {
			Tooltip.elm.className = 'right';
			Tooltip.elm.style.left = (Tooltip.mouse(evt).x + 15) + 'px';
		}
		Tooltip.elm.style.top = Tooltip.mouse(evt).y + 'px';

		Tooltip.observe(document, 'mousemove', Tooltip.move);
	},
	move: function(evt) {
		evt = evt || window.event;
		if (Tooltip.mouse(evt).x + 15 > document.body.offsetWidth - Tooltip.elm.offsetWidth) {
			Tooltip.elm.className = 'left';
			Tooltip.elm.style.left = (Tooltip.mouse(evt).x - Tooltip.elm.offsetWidth - 10) + 'px';
		} else {
			Tooltip.elm.className = 'right';
			Tooltip.elm.style.left = (Tooltip.mouse(evt).x + 15) + 'px';
		}
		Tooltip.elm.style.top = Tooltip.mouse(evt).y + 'px';
	},
	hide: function() {
		Tooltip.elm.style.display = 'none';
		Tooltip.unobserve(document, 'mousemove', Tooltip.move);
	},
	bind: function(func, obj) {
		if (!obj) { return func; }
		var __func = func;
		return function() {
			return __func.apply(obj, arguments);
		}
	},
	observe: function(elm, evt, func) {
		if (elm.addEventListener) {
			elm.addEventListener(evt, func, false);
		} else {
			elm.attachEvent('on' + evt, func);
		}
	},
	unobserve: function(elm, evt, func) {
		if (elm.removeEventListener) {
			elm.removeEventListener(evt, func, false);
		} else {
			elm.detachEvent('on' + evt, func);
		}
	},
	mouse: function(evt) {
		return {
			'x': evt.pageX || (evt.clientX +
					(document.documentElement.scrollLeft || document.body.scrollLeft)),
			'y': evt.pageY || (evt.clientY +
					(document.documentElement.scrollTop || document.body.scrollTop))
		}
	}
}

Tooltip.observe(window, 'load', Tooltip.init);

