$.fn.tooltip = function(options) {
	defaults = {
		'alignment': 'bottom',
		'center': false,
		'padding': 5,
		'css_class': 'tooltip'
	}
	
	options = $.extend(defaults, options);
	
	var title_tag = 'data-tooltip-title';
	var trigger = $(this);
	var timer = null;

	function calculatePositions(elem, tooltip, options) {
		var positions = new Object;
		var top_adjustment = (options.center) ? (tooltip.outerHeight() / 2) - (elem.outerHeight() / 2) : 0;
		var left_adjustment = (options.center) ? (tooltip.outerWidth() / 2) - (elem.outerWidth() / 2) : 0;
		var elem_offset = elem.offset();

		switch (options.alignment) {
			case 'top':
				positions.top = elem_offset.top - tooltip.outerHeight() - options.padding;
				positions.left = elem_offset.left - left_adjustment;
				break;
			case 'bottom':
				positions.top = elem_offset.top + elem.height() + options.padding;
				positions.left = elem_offset.left - left_adjustment;
				break;
			case 'left':
				alert('Left ist noch verspackt, nicht benutzen ;)');
				break;
			case 'right':
				positions.top = elem_offset.top - top_adjustment;
				positions.left = elem_offset.left + elem.width() + options.padding;
				break;
			default:
				alert('Unknown alignment');
				break;
		}

		return positions;
	}

	function show(elem) {
		var title = elem.attr(title_tag);
		var tooltip = $('<div id="tooltip">'+title+'</div>');
		$('body').append(tooltip);

		tooltip.addClass(options.css_class)
		var positions = calculatePositions(elem, tooltip, options);
		tooltip.css({ 'top': positions.top, 'left': positions.left })
		tooltip.fadeIn(200);
	}

	trigger.mouseenter(function() {
		if ($(this).attr(title_tag) == '') {
			return;
		}
		var saved_this = $(this);
		clearTimeout(timer);
		timer = setTimeout(function() { show(saved_this) }, 100);
	});

	trigger.mouseleave(function() {
		clearTimeout(timer);
		$('#tooltip').remove();
	});
};
