var tooltipOverTimeout = tooltipOutTimeout = [];
var activeTooltip = null;
var mousePosition = {"x":0,"y":0};
var uidcounter = 0;

function tooltipOver() {
	var elementUID = $(this).data('uid');
	if (!elementUID) {
		elementUID = ++uidcounter;
		$(this).data('uid', elementUID);
	}
	clearTimeout(tooltipOutTimeout[elementUID]);
	var tooltip = $(this).next('.image-tooltip:hidden');
	if (!tooltip.length) tooltip = $(this).prev('.image-tooltip:hidden');
	if (!tooltip.length) tooltip = $(this).parents('.image-tooltip-container').find('.image-tooltip:hidden');
	if (!tooltip.length) return true;
	
	tooltipOverTimeout[elementUID] = setTimeout(function() {
		activeTooltip = tooltip;
		tooltip.css({
			"opacity" : 0,
			"display" : 'block'
		});
		tooltipMove();
		tooltip.animate({ "opacity" : 1 },'fast', function() { tooltipMove(); });
	}, 300);
}
function tooltipOut() {
	var elementUID = $(this).data('uid');
	if (!elementUID) {
		elementUID = ++uidcounter;
		$(this).data('uid', elementUID);
	}
	clearTimeout(tooltipOverTimeout[elementUID]);
	var tooltip = $(this).parents('.image-tooltip-container').find('.image-tooltip:visible');
	if (!tooltip.length) return true;
	
	tooltipOutTimeout[elementUID] = setTimeout(function() {
		tooltip.fadeOut('fast', function() {
			if (activeTooltip === tooltip) {
				activeTooltip = null;
			}
		});
	}, 200);
}

function tooltipMove(e){
	if (e) {
		mousePosition.x = e.pageX;
		mousePosition.y = e.pageY;
	}
    if (activeTooltip !== null) {
    	var offset = activeTooltip.offset();
		var position = activeTooltip.position();
		activeTooltip.css({
            top: (mousePosition.y - (offset.top - position.top) + 15) + "px",
            left: (mousePosition.x - (offset.left - position.left) + 15) + "px"
        });
    }
}
