function loadToolTips(containerName,popupTT) {
	/*
	if ($('tooltip') && $('tooltip').hasChildNodes()) {
		$('tooltip').parentNode.removeChild($('tooltip'));
		this.tool_tip = $(document.createElement("div"));
		document.body.appendChild(this.tool_tip);
		this.tool_tip.setAttribute('id', "tooltip");
		// hide the tool-tip by default
		this.tool_tip.hide();
	}
	*/

	if(undefined == containerName)
	{
		containerName = 'tooltip';
	}
	
	var isPopup = 'false'
	if(undefined != popupTT)
	{
		isPopup = popupTT;
	}
	
	$$("*").findAll( function(node) {
		return node.getAttribute('title');
	}).each( function(node) {
		if(!node.hasClassName('noTT'))
		{
			new Tooltip(node, node.title, containerName, isPopup);
			node.removeAttribute("title");
			node.removeAttribute("alt");
		}
	});
}

var Tooltip = Class.create();

Tooltip.prototype = {
	getUrlParam : function(contentString, element) {
		contentString = contentString.gsub(/(.*)([^http:\/\/]|^)(www[^\s\?\/]*)(.*)/, function(match) {
				return (match[1] + " http://" + match[2] + match[3]);
		});

		var fullText = contentString.gsub(/(.*)(http:\/\/)(www[^\s\?\/]*)(\S*)(.*)/, function(match) {
				element.appendChild(document.createTextNode(match[1]));
				alink = element.appendChild(document.createElement("a"));
				alink.setAttribute('href', match[2] + match[3] + match[4]);
				alink.setAttribute('target',"_blank");
				alink.appendChild(document.createTextNode(match[3]));
				return match[5];
		});

		return fullText;
	},
	setStyles : function(x, y) {
		// set the right styles to position the tool tip
		Element.setStyle(this.tool_tip, {
			position :'absolute',
			top :y + this.options.delta_y + "px",
			left :x + this.options.delta_x + "px",
			zindex :this.options.zindex
		});

		// Breite von Tooltip festlegen
		var contentText = this.tool_tip.innerHTML;
		if (contentText.match(/(\<p\>)(.*)(\<\/p\>)/ig)) {
			contentText = RegExp.$2;
		}
		var contentString = contentText.stripTags().split(" ").toString().gsub(',', '<br>');
		var a = new Element('div', {'style' :'display: inline;'}).update(contentString);
		document.body.appendChild(a);

		if (a.offsetWidth > 65) {
			Element.setStyle(this.tool_tip, {
				width :a.offsetWidth + "px"
			});
		}
		if(30 < contentString.length)
		{
			Element.setStyle(this.tool_tip, {
				width :"15em"
			});
		}
		a.remove();

		// apply default theme if wanted
		if (this.options.default_css) {
			Element.setStyle(this.tool_tip, {
				margin :this.options.margin,
				padding :this.options.padding,
				backgroundColor :this.options.backgroundColor,
				zindex :this.options.zindex
			});
		}
	},

	

	initialize : function(element, tool_tip, containerName, isPopup) {
		var options = Object.extend( {
			default_css :false,
			margin :"0px",
			padding :"5px",
			backgroundColor :"#d6d6fc",
			min_distance_x :50,
			min_distance_y :5,
			delta_x :0,
			delta_y :0,
			zindex :1000
		}, arguments[2] || {});

		this.element = $(element);
		this.options = options;
		// use the supplied tooltip element or create our own div
		if ($(tool_tip)) {
			this.tool_tip = $(tool_tip);
			// hide the tool-tip by default
			this.tool_tip.hide();
		} else {
			this.tool_tip = $(document.createElement("div"));
			// hide the tool-tip by default
			this.tool_tip.hide();
			/*if ($('tooltip')) {
				$('tooltip').appendChild(this.tool_tip);*/
			if ($(containerName)) {
				$(containerName).appendChild(this.tool_tip);
			} else {
				document.body.appendChild(this.tool_tip);
			}
			
			if('true' == isPopup)
			{
				this.isPopup = true;
			}
			else 
			{
				this.isPopup = false;
			}
			
			this.tool_tip.addClassName("tooltip");
			if(element.hasClassName('simpleTT'))
			{
				this.tool_tip.addClassName("simpleTT");
			}
			var cssClass = this.getTitle(tool_tip).toLowerCase();
			var strDIV = document.createElement("div");
			strDIV.setAttribute("class", cssClass);

			info = this.tool_tip.appendChild(strDIV);
			
			if(!element.hasClassName('simpleTT'))
			{
				title = info.appendChild(document.createElement("span"));
				title.appendChild(document.createTextNode('| ' + this.getTitle(tool_tip)));
			}
			contents = info.appendChild(document.createElement("p"));
			contents.appendChild(document.createTextNode(this.getContent(tool_tip, contents)));
			this.tool_tip.eventMouseOut = this.hideTooltip.bindAsEventListener(this);
			this.registerEventsShort(this.tool_tip);
		}
		this.eventMouseOver = this.showTooltip.bindAsEventListener(this);
		this.eventMouseOut = this.hideTooltip.bindAsEventListener(this);
		this.registerEvents(this.element);
	},

	getTitle : function(tool_tip) {
		if (tool_tip.match(/([^:]+)(:\s)(.*)/i)) {
			return RegExp.$1;
		} else {
			return "Info";
		}
	},

	getContent : function(tool_tip, element) {
		if (tool_tip.match(/([^:]+)(:\s)(.*)/i)) {
			return this.getUrlParam(RegExp.$3, element);
		} else {
			return this.getUrlParam(tool_tip, element);
		}

	},

	destroy : function(elements) {
		Event.stopObserving(this.element, "mouseover", this.eventMouseOver);
		Event.stopObserving(this.element, "mouseout", this.eventMouseOut);
	},

	registerEvents : function(elements) {
		Event.observe(elements, "mouseover", this.eventMouseOver);
		Event.observe(elements, "mouseout", this.eventMouseOut);
	},

	registerEventsShort : function(elements) {
		Event.observe(elements, "mouseout", elements.eventMouseOut);
	},

	getPosition : function(element) {
		var orig = element;
		var el = this.element;

		orig.top = 0;
		orig.left = 0;
		
		var scrolledOffset = orig.cumulativeScrollOffset();
		orig.top -= scrolledOffset[1];
		
		do {
			orig.top += el.offsetTop;
			orig.left += el.offsetLeft;

			try {
				el = el.offsetParent;
			} catch (e) {
				el = false;
			}

		} while (el);
		// alias for w and h
		orig.width = orig.offsetWidth;
		orig.height = orig.offsetHeight;
		orig.bottom = orig.top + orig.width;
		orig.right = orig.left + orig.height;
				
		return orig;
	},

	moveTooltip : function(event) {
		Event.stop(event);
		var pos = this.getPosition(event.target);
		mouse_x = pos.left + (event.target.width - 10);
		mouse_y = pos.top + (event.target.height - 10);

		if('tooltip' != this.tool_tip.parentNode.id)
		{
			var scrolledTop = 0;

			if(document.all)
			{
				scrolledTop = (0 < document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
			}
			else 
			{
				scrolledTop = window.pageYOffset;
			}

			mouse_x -= $(winID).offsetLeft;
			mouse_y -= $(winID).offsetTop - scrolledTop;

			if(navigator.userAgent.toLowerCase().indexOf('msie') > -1)
			{
				mouse_y += 10;
			}
		}
		
		// now set the right styles
		this.setStyles(mouse_x, mouse_y);
	},

	showTooltip : function(event) {
		Event.stop(event);
		this.moveTooltip(event);
		
		$(this.tool_tip.parentNode.id).childElements().each(
				function(node){
					node.setStyle({'display':'none'});
				}
		);
		
		//$('tooltip').show();
		$(this.tool_tip.parentNode.id).show();
		
		new Element.show(this.tool_tip);
	},

	hideTooltip : function(event) {
		// alert('mouseOUT');
//console.log('mouseOUT');
//console.log(this.isMouseOver(event));
		
		if (this.isMouseOver(event) == 1) {
			new Element.show(this.tool_tip);
		} else {
			new Element.hide(this.tool_tip);
			//$('tooltip').hide();
		}
	},

	isMouseOver : function(event) {
		//var bcr = this.tool_tip.getBoundingClientRect();
		var topLeftY = this.tool_tip.offsetTop;
		var topLeftX = this.tool_tip.offsetLeft;

		// dim anstelle von bcr.bottom/right da sonst Tooltipausblendung verzögert
		var dim = this.tool_tip.getDimensions();
		var bottomRightY = topLeftY + dim.height - 1;
		var bottomRightX = topLeftX + dim.width - 1;
		
		if (navigator.appName.indexOf("Explorer") != -1){
			var mouseY = Event.pointerY(event) -2;
			var mouseX = Event.pointerX(event) -2;
		}else {
			var mouseY = Event.pointerY(event) + 1;
			var mouseX = Event.pointerX(event) + 1;
		}

		if(this.isPopup)
		{
			var popupTop = $(winID).offsetTop;
			var popupLeft = $(winID).offsetLeft;
			
			topLeftX += popupLeft;
			topLeftY += popupTop;
			bottomRightX += popupLeft;
			bottomRightY += popupTop;
		}
		
//console.log("mouseY: "+mouseY+" | mouseX: "+mouseX);
//console.log("tlY: "+topLeftY+" | tlX: "+topLeftX);
//console.log("brY: "+bottomRightY+" | brX: "+bottomRightX);
//console.log(this.isPopup);
		
		if (	mouseY >= topLeftY 
			&&  mouseY <= bottomRightY 
			&&  mouseX >= topLeftX
			&&  mouseX <= bottomRightX) {
			return 1;
		} else {
			return 0;
		}
	},

	getWindowHeight : function() {
		var innerHeight;
		if (navigator.appVersion.indexOf('MSIE') > 0) {
			innerHeight = document.body.clientHeight;
		} else {
			innerHeight = window.innerHeight;
		}
		return innerHeight;
	},

	getWindowWidth : function() {
		var innerWidth;
		if (navigator.appVersion.indexOf('MSIE') > 0) {
			innerWidth = document.body.clientWidth;
		} else {
			innerWidth = window.innerWidth;
		}
		return innerWidth;
	}
}