var Dir = {

	reverse: function(a) {
		switch (a) {
			case 'left': return 'right';
			case 'right': return 'left';
			case 'bottom': return 'top';
			case 'top': return 'bottom';
			case 'width': return 'height';
		}
	},

	orthogonal: function(a) {
		switch (a) {
			case 'left': return 'top';
			case 'right': return 'top';
			case 'bottom': return 'left';
			case 'top': return 'left';
		}
	},
	
	metric: function(a) {
		switch (a) {
			case 'left':
			case 'right':
				return 'width';
			case 'top':
			case 'bottom':
				return 'height';
		}
	}

};


var Tooltip = {
	posX: 0, posY: 0,
	timer: null,
	init: function(width, height) {
		Tooltip.box = $('layTooltip');
		Tooltip.content = $('layTooltipContent');
		Tooltip.arrows = {};
		Tooltip.arrows.left = $('tooltipArrowLeft');
		Tooltip.arrows.right = $('tooltipArrowRight');
		Tooltip.arrows.top = $('tooltipArrowTop');
		Tooltip.arrows.bottom = $('tooltipArrowBottom');
		Tooltip.constraints = {"width": width, "height": height};
		Tooltip.box.addEvent('mousemove', Tooltip._mousemove);
		Tooltip.box.addEvent('click', Tooltip.hide);
	},
	_mousemove: function() {
		clearTimeout(Tooltip.timer);
		Tooltip.timer = setTimeout('Tooltip.hide()', 250000*100);
	},

	reposition: function() {
		Tooltip._hideArrows();
		var dims = $('layTooltip').getSize().size;
		
		var pos = {};
		 
		var overlays = {'bottom': 0, 'top': 0, 'left': 0, 'right': 0};
		overlays.left += Math.max((dims.x + 16) - Tooltip.posX, 0);		
		overlays.right += Math.max((dims.x + 16) - (Tooltip.constraints.width - Tooltip.posX), 0);		
		overlays.top += Math.max((dims.y + 16) - Tooltip.posY, 0);
		overlays.bottom += Math.max((dims.y + 16) - (Tooltip.constraints.height - Tooltip.posY), 0);
		
		Tooltip.type = Dir.reverse($H(overlays).min().key);
		
		var b;
		
		pos = {left: Tooltip.posX, top: Tooltip.posY};
		
		switch (Tooltip.type) {
			case 'right':
				pos.left -= dims.x + 16;
			case 'left':
				dims.x += 16;
				overlays.top = Math.max(overlays.top-16, 0);
				overlays.bottom = Math.max(overlays.bottom -16, 0);
				b = $H({bottom: overlays.bottom, top: overlays.top}).min();
				break;
			case 'bottom':
				pos.top -= dims.y + 16;
			case 'top':
				dims.y += 16;
				overlays.left = Math.max(overlays.left-16, 0);
				overlays.right = Math.max(overlays.right -16, 0);
				b = $H({left: overlays.left, right: overlays.right}).min();
				break;				
		}
		Tooltip.subtype = Dir.reverse(b.key);

		var margin = 0;

		switch (Tooltip.subtype) {
			case 'left':		
				pos.left -= 7;
				pos.left -= b.value;
				margin = Tooltip.posX - pos.left - 7;
				break;
			case 'right':
				pos.left -= dims.x;
				pos.left += b.value;
				margin = Tooltip.posX - pos.left - 35;
				break;
			case 'top':		
				pos.top -= b.value;
				pos.top -= 7;
				margin = Tooltip.posY - pos.top - 7;
				break;
			case 'bottom':
				pos.top -= dims.y;
				pos.top += b.value;
				margin = Tooltip.posY - pos.top - 35;
				break;			
		};
		
		Tooltip._showArrow(Tooltip.subtype, margin);

		pos = {left: pos.left+'px', top: pos.top+'px'}; 
		Tooltip.box.setStyles(pos);
	},
	setContent: function(content) {
		Tooltip.content.innerHTML = content;
		Tooltip.reposition();
	},
	
	_hideArrows: function() {
		$H(Tooltip.arrows).each( function(item) {
			item.hide();
		});					
	},
	
	_hideArrow: function() {
		if (Tooltip.type)
			Tooltip.arrows[Tooltip.type.toLowerCase()].hide();
	},
	
	_showArrow: function(subtype, margin) {
		var img = Tooltip.arrows[Tooltip.type.toLowerCase()]; 
		margin = margin || 0;
		var style = {marginTop: '0px', marginLeft: '0px'};
		switch (Tooltip.subtype) {
			case 'top':
			case 'bottom':
				style.marginTop = margin+'px';
				break;
			case 'left':
			case 'right':
				style.marginLeft = margin+'px';
				break;				
		}
		img.setStyles(style);

		if (subtype)
			img.src = 
				'http://dojazd.pl/designs/minin_tabs/imgs/tooltip2/'+Tooltip.type.toLowerCase()+'_'+subtype.toLowerCase()+'_arrow.gif';
		
		img.show();
	},
	
	show: function(x, y, content) {
		clearTimeout(Tooltip.timer);
		Tooltip.timer = setTimeout('Tooltip.hide()', 15000);
		Tooltip.posX = x; Tooltip.posY = y;  
		Tooltip.box.show();
		Tooltip.setContent(content);
	},
	
	hide: function() {
		clearTimeout(Tooltip.timer);
		if (Tooltip.box)
			Tooltip.box.hide();
	}
};

