/**
 * Name: tooltip-js.js
 * Author: ddw
 * Description: Tooltip
 *
 * Date: 24.06.2010
 * Packed: no
 * jQuery: yes
 */

/** auszufuehrende Events bei Laden der Seite **/
jQuery(document).ready(function() {
  Tooltip.init();
});

/****** Konstantendefinitionen ******/
var TooltipConstants = {
  xOffset: -80,
  yOffset: -90
};

/****** Bibliotheksdefinition ******/
var Tooltip = {

  /**
   * Initialisierungsmethode
   */
  init: function() {
  
    /** Elemente mit '.hasTooltip'-Klassen **/
    jQuery(".tipM").each(function (i, item) {
		
		var ttSpan = jQuery(item).contents("span:last-child");
		jQuery(ttSpan).addClass('ttSpan');
		jQuery(item).contents("span:last-child").remove();
		jQuery('body').append(ttSpan);
	
		jQuery(item).mousemove(
			function(e) { Tooltip.doMouseMoveAction(item, ttSpan, e); }
		);
	
		jQuery(item).hover(
			function() { Tooltip.doHoverInAction(ttSpan); }, 
			function() { Tooltip.doHoverOutAction(ttSpan); }
		);
	});
		
	jQuery(".tipM").removeAttr("title");

  },
	
	/**
	 * Liefert die Hover-In-Action fuer das uebergebene Element 'elem'. 
	 * @param {Object} elem betreffendes Element
	 */
	doHoverInAction: function(elem) {
		jQuery(elem).css({ display: "block" });
	},
	
	/**
   * Liefert die Hover-Out-Action fuer das uebergebene Element 'elem'. 
   * @param {Object} elem betreffendes Element
   */
	doHoverOutAction: function(elem) {
    jQuery(elem).css({ display: "none" });
  },
  
	/**
   * Liefert die MouseMove-Action fuer das uebergebene Element 'elem'. 
   * @param {Object} elem betreffendes Element
   */
  doMouseMoveAction: function(elem, ttSpanOrig, event) {
		
	var ttSpan = jQuery(ttSpanOrig)[0];
	var offset = jQuery(elem).offset();
    var left = offset.left + TooltipConstants.xOffset;
    var top = offset.top + TooltipConstants.yOffset;

    var v = Tooltip.getViewPort();  
	var offset = jQuery(elem).offset();

    if (v.x + v.cx < offset.left + jQuery(elem).width() + ttSpan.offsetWidth + TooltipConstants.xOffset) {
      left -= ttSpan.offsetWidth + (TooltipConstants.xOffset * 2);
    }

    if (v.y + v.cy < offset.top + jQuery(elem).height() + ttSpan.offsetHeight + TooltipConstants.yOffset) {
      top -= ttSpan.offsetHeight + (TooltipConstants.yOffset);
    }
	
	var parentDiv = jQuery(elem).parents('div.box');
	if (parentDiv && jQuery(parentDiv).length > 0) {
		var pOf = jQuery(parentDiv).offset();
		var pW = jQuery(parentDiv).width();
		var tW = jQuery(ttSpan).width();
		if ((pOf.left+pW) < (tW+left)) {
			left -= (tW+left)-(pOf.left+pW)+20;
		}
	}

    jQuery(ttSpanOrig).offset({ top: top, left: left });
    
  },
	
	getViewPort: function() {
		vp = {
						x: jQuery(window).scrollLeft(),
						y: jQuery(window).scrollTop(),
						cx: jQuery(window).width(),  
						cy: jQuery(window).height()
				 }; 
		return vp;
	}
};
