(function($) {
	$.fn.flexToolTip = function(options) {		
		// Standart-Setup
		var defaults = {
			speed: 200,
			delay: 500,
			source: 'div', // or rel attribute in same element
			adjustTopOffset: 0, //30,
			adjustLeftOffset: 10
		};
		
		var o = $.extend(defaults, options);
			
		getToolTip = function() {
			var ttConstruct = '<div class="flexTooltip" style="display: none;">'+
									'<div class="flexTooltip-bottom">'+
										'<div class="flexTooltip-inner"></div>'+
									'</div>'+									
								'</div>';
			return ttConstruct;
		}
		
		if ($('body div.flexTooltip').length < 1) {
			$('.M614 .cell-01').append(getToolTip());
		}
		
		return this.each(function(intIndex, jObj) {	
			$(jObj).data('dataStorage', { speed: o.speed, delay: o.delay, source: o.source, adjustTopOffset: o.adjustTopOffset, adjustLeftOffset: o.adjustLeftOffset});

			var obj				= $(this);
			var toolTip			= $('div.flexTooltip');
			var toolTipInner	= $('div.flexTooltip-inner');
			var contentID;
			var areaID;
			
			$(this).hover(function() {
				stopTimer(jObj);
				toolTip.hide();
				
				if ($(jObj).data('dataStorage').source === 'div') {
					var ttHtml = $(this).parent().find('div.flexTooltip-content').html();
				} else if($(jObj).data('dataStorage').source === 'area') {
					areaID = jQuery(this).attr('id');
					contentID = areaID.replace('map-', 'content-');
					data = $(jObj).parent().parent().find('ul #'+contentID);
					var ttHtml = data.html();					
				} else {
					var ttHtml = $(this).attr('rel');
				}
				
				toolTipInner.html(ttHtml);
				setToolTip(obj, jObj, contentID);
				setTimer(jObj);
			}, function() {
				stopTimer(jObj);
				toolTip.hide();
			});
			
			toolTip.hover(function(){
				stopTimer(jObj);
				toolTip.hide();
			});
			
			setTimer = function(jObj) {
				var setTimeoutFunc = function () { showToolTip(jObj);};
				jObj.showToolTipTimer = setTimeout(setTimeoutFunc, $(jObj).data('dataStorage').delay);
				
			}
					
			stopTimer = function(jObj) {
				clearTimeout(jObj.showToolTipTimer);
			}
	
			setToolTip = function(tooltipTarget, jObj, contentID) {
				//bei jedem Aufruf neu positionieren
				var offset;
				var ttLeft;
				var ttTop;
				var topOffset = 0;
				if($(jObj).data('dataStorage').source === 'area') {
					areaCoords = $(jObj).attr('coords');

					var i, coords = areaCoords.split(',');
					for (i=0; i < coords.length; i++) { coords[i] = parseFloat(coords[i]); }
					ttLeft = coords[0];
					ttTop = coords[1];
			
				} else {
					offset		= tooltipTarget.offset();
					ttLeft		= offset.left;
					ttTop		= offset.top;
					topOffset	= parseInt(toolTip.height()) + 5; // 5-Pixel-Safty
					
				}
				
				var xToolTip	= (ttLeft + $(jObj).data('dataStorage').adjustLeftOffset) + "px";
				var yToolTip	= (ttTop - 30 - $(jObj).data('dataStorage').adjustTopOffset) + "px";
				
				toolTip.css({
					'top': parseInt(yToolTip),
					'left': parseInt(xToolTip)
				});				
			}
			
			showToolTip = function(jObj) {
				stopTimer(jObj);
				if (jQuery(toolTip).is(':animated')) {
					jQuery(toolTip).stop(true, true);
				}
				
				toolTip.animate({
					top: "+="+$(jObj).data('dataStorage').adjustTopOffset+"px",
					opacity: "toggle"
					//display: "block"
				}, $(jObj).data('dataStorage').speed);
			}
		});
	};
})(jQuery);
