var Tooltip = {
	gabWidth : 5, 
	gabHeight : 5, 
	lastElement : null, 
	tooltip : null, 
	init : function() {
		this.tooltip = $('gc_tooltip');
	}, 
	
	hide : function() {
		if(!this.tooltip) return;
		this.tooltip.style.visibility = 'hidden';
		this.tooltip.innerHTML = '';
		this.lastElement = null;
	}, 

	show : function(event, html, isUp) {
		var element = Event.element(event);
		if(this.lastElement!=element) {
			this.lastElement = element;
			element.onmouseout = this.hide.bind(this);
			this.tooltip.style.visibility = 'visible';
			this.tooltip.innerHTML = html;
		}

		var scrollLeft = DocumentBody.getScrollLeft();
		var scrollTop = DocumentBody.getScrollTop();
		var pageWidth = DocumentBody.getWidthIncludeScroll();
		var pageHeight = DocumentBody.getHeightIncludeScroll();
		var tooltipWidth = Element.getWidth(this.tooltip);
		var tooltipHeight = Element.getHeight(this.tooltip);
		var pointerX = Event.pointerX(event);
		var pointerY = Event.pointerY(event);
		var extra = 15;

		if(pageWidth < tooltipWidth + extra + pointerX) {
			this.tooltip.style.left = pageWidth - (tooltipWidth + extra) + this.gabWidth + 'px';
		}else {
			this.tooltip.style.left = pointerX + this.gabWidth + 'px';
		}

		if(!isUp) {
			if(pageHeight < tooltipHeight + extra + pointerY) {
				this.tooltip.style.top = pageHeight - (tooltipHeight + extra) + this.gabHeight + 'px';
			}else {
				this.tooltip.style.top = pointerY + this.gabHeight + 'px';
			}
		}else {
			if(0 > pointerY - (tooltipHeight + extra)) {
				this.tooltip.style.top = this.gabHeight + 'px';
			}else {
				this.tooltip.style.top = pointerY + scrollTop - (tooltipHeight + this.gabHeight) + 'px';
			}
		}
	}
};
function tooltip(event, html, isUp) {
	Tooltip.show(event, html, isUp);
}

Tooltip.init();
