//--- Größe vom Tooltip bestimmen  -> Probleme
var tooltip_z_index = 1000;
function CTooltip(obj,event,type,text,arAjax,move,cWindow,showShadow,autosize,center,css,visibleStep,minOpacity,maxOpacity,isOnload, scroll)
{	
	if(!obj || !event)
	{
		return false;
	}
	
	this.event 				= event;													//--- Event, welches den Tooltip aktiviert (click, mouse)
	this.type 				= (type) 		? type 			: "text";					//--- art des Tooltips: text, id, ajax, iframe	
	this.status 			= "off";													//--- Soll der Tooltip eingeblendet oder ausgeblendet werden (on/off)
	this.ttWindow 			= false;													//--- Pseudo Window, welches als Controllkasten verwendet wird
	this.ttWindowcreated 	= (cWindow) 	? true 			: false;					//--- true = pseudo Window soll erstellt werden	
	this.ttWindowImagePath 	= (cWindow.length > 5) ? cWindow : "tooltip_ttWindow_img/"; //--- verzeichnis wo die Bilder für das Pseudowindow liegen	
	this.ttWindowControllBox= false;													//--- ControllBox mit Close zeichen für PseudoWindow
	this.ttWindowClose		= false;													//--- Image um pseude Window zu schliessen
	this.tooltip 			= false;													//--- Tooltip Knoten in den der Content reingehängt wird		
	this.Nr					= 0;														//--- momentan geladener Tooltip		
	this.arTooltip 			= new Array;												//--- zählt die Tooltips durch und kann einen Cache aufbauen	
	this.opacity 			= 0;														//--- aktuelle Transparenz
	this.mousePointerWidth 	= 15;														//--- Breite des Mauszeigers
	this.mousePointerHeight = 15;														//--- Höhe des Mauszeigers
	this.originalNode		= false;													//--- Knoten der in den Tooltip gehängt wird
	this.parent 			= false;													//--- Parent vom "original" Knoten
	this.ajax 				= false;													//--- Ajax Object	
	this.lastInnerWidth		= 0;														//--- die letzte breite des Windows (bei bedarf nochmal größe von Tooltip anpassen)
	this.lastInnerHeight	= 0;														//--- die letzte höhe des Windows (bei bedarf nochmal größe von Tooltip anpassen)
	this.arReferrer 		= new Array();	
	this.lastIframeSrc 		= false;													//--- was als letztes im Iframe geladen wurde, muss ja nicht nochmal geladen werden
	this.arIframeParameter	= false;													//--- Parameter fürs Iframe
	this.arCallback			= new Array();												//--- Callback für verschiedene Fälle z.B. bei Close
	this.eventScroll		= scroll || scroll === false ? scroll : true;				//--- Soll Tooltip bei Window gescrollt werden
	this.overflow			= false;													//--- Wenn Der Tooltip in einem OVerflow Bereich aufgehen soll
	
	this.__construct = function(obj,event,type,text,arAjax,move,cWindow,showShadow,autosize,center,css,visibleStep,minOpacity,maxOpacity,isOnload)
	{						
		this.Nr = this._setConfig(obj,event,type,text,arAjax,move,cWindow,showShadow,autosize,center,css,visibleStep,minOpacity,maxOpacity,isOnload);
		this.opacity = this.arTooltip[this.Nr]['minOpacity'];
		this._logicalDecision();
		//--- _createTooltip wird erst nach window onload gebaut, da sonst der IE meckert, wenn man es in eine noch nicht fertiges body reinhängt
		if(this.Nr == 0)
		{					
			if(!this.arTooltip[this.Nr]['isOnload'])
			{
				addEvent(window,"load",this._createTooltip.scope(this,this.Nr,this.ttWindowcreated));
			}else{
				var arArray = new Array();
				arArray[0] = false;				
				arArray[1] = this.Nr+"";
				arArray[2] = this.ttWindowcreated;
				this._createTooltip(false,arArray);
			}
		}
		if(this.type == "ajax")
		{
			if(!isset("hssJX"))
			{
				return false;
			}
			this.ajax = new hssJX();						
		}

		//this._getContent();
		this.Nr = -1;		
	};

	//--- Parameter mit denen man den Tooltip steuern kann
	this._setConfig = function(obj,event,type,text,arAjax,move,cWindow,showShadow,autosize,center,css,visibleStep,minOpacity,maxOpacity,isOnload)
	{
		var Nr								= this.arTooltip.length;					//--- momentan geladener Tooltip		
		this.arTooltip[Nr] 					= new Array;	
		this.arTooltip[Nr]['clicker']		= obj;										//--- Id des Objectes, welches den Tooltip aufruft
		if(Nr == 0)
		{			
			this.arTooltip[Nr]['text'] 			= (text) 		? text 			: false;	//--- Enthält entweder (text, ID knoten, datei für Ajax, URL für SRC des Iframe)	
			this.arTooltip[Nr]['strAjax'] 		= (arAjax)		? arrayToStr(arAjax) : "";	//--- Parameter String für Ajax aufruf	
			this.arTooltip[Nr]['move'] 			= (move)		? String(move)	: false;	//--- true - Tooltip hat ein onmousemove auf dem obj
			this.arTooltip[Nr]['showShadow'] 	= (showShadow)	? true			: false;	//--- wenn schwarzer Hintergrund angezeigt werden soll
			this.arTooltip[Nr]['autosize'] 		= (autosize)	? true			: false;	//--- true = Tooltip Breite passt sich dem Knoten an
			this.arTooltip[Nr]['center'] 		= (center)		? true			: false;	//--- Tooltip auf der Seite zentrieren
			this.arTooltip[Nr]['tooltipCss'] 	= (css)			? css			: "";		//--- css Klasse für den Tooltip Knoten
			this.arTooltip[Nr]['visibleStep'] 	= (visibleStep) ? visibleStep 	: 100;		//--- Schnelligkeit des Sichtbar machens
			//--- macht keinen Sinn, da Tooltip auîerhalb des Sichtbaren Bereichs steht
			this.arTooltip[Nr]['minOpacity'] 	= (minOpacity) 	? minOpacity 	: 0;		//--- 0 = Tooltip verschwindet komplett	
			this.arTooltip[Nr]['maxOpacity'] 	= (maxOpacity) 	? maxOpacity 	: 100;		//--- 100 = Tooltip wird komplett sichtbar
			this.arTooltip[Nr]['isOnload'] 		= (isOnload) 	? isOnload 		: false		//--- Wenn Tooltip schon im window.onload aufgerufen wird
		}else{			
			this.arTooltip[Nr]['text'] 			= (text) 		? text 				: this.arTooltip[0]['text'];	
			this.arTooltip[Nr]['strAjax'] 		= (arAjax)		? arrayToStr(arAjax): this.arTooltip[0]['strAjax'];	
			this.arTooltip[Nr]['move'] 			= (move)		? String(move)		: this.arTooltip[0]['move'];	
			this.arTooltip[Nr]['showShadow'] 	= (showShadow)	? true				: this.arTooltip[0]['showShadow'];	
			this.arTooltip[Nr]['autosize'] 		= (autosize)	? true				: this.arTooltip[0]['autosize'];	
			this.arTooltip[Nr]['center'] 		= (center)		? true				: this.arTooltip[0]['center'];	
			this.arTooltip[Nr]['tooltipCss'] 	= (css)			? css				: this.arTooltip[0]['tooltipCss'];
			this.arTooltip[Nr]['visibleStep'] 	= (visibleStep) ? visibleStep 		: this.arTooltip[0]['visibleStep'];			
			this.arTooltip[Nr]['minOpacity'] 	= (minOpacity) 	? minOpacity 		: this.arTooltip[0]['minOpacity'];
			this.arTooltip[Nr]['maxOpacity'] 	= (maxOpacity) 	? maxOpacity 		: this.arTooltip[0]['maxOpacity'];
			this.arTooltip[Nr]['isOnload'] 		= (isOnload) 	? isOnload 		: this.arTooltip[0]['isOnload'];
			this.arTooltip[Nr]['isClone'] 		= true;
		}		
		this.arReferrer[obj] = Nr;
		//--- Wenn move = true, dann in Zeichenkette umwandeln, damit die "true" mit einer Zeichenkette vergleicht werden kann
		if(this.arTooltip[Nr]['move'])
		{
			this.arTooltip[Nr]['move'] = String(this.arTooltip[Nr]['move']);
		}
		
		if(this.arTooltip[Nr]['move'] && this.arTooltip[Nr]['move'] != "true")
		{
			if(this.arTooltip[Nr]['move'].indexOf(',') > -1)
			{
				position = this.arTooltip[Nr]['move'].split(",");
				this.arTooltip[Nr]['top'] = position[0];
				this.arTooltip[Nr]['left'] = position[1];				
			}
		}		
		return Nr;
	};	
	
	//--- einige Einstellungen machen keinen Sinn, die sollen hier herausgefiltert werden
	this._logicalDecision = function()
	{		
		if(this.event == "mouse")
		{			
			//--- Wenn mouseover keinen Hintergrundschatten (der zittert sonst, da immer wieder nue geladen)			
			this.arTooltip[this.Nr]['showShadow'] = false;
			
			//--- Das Close kann nicht erreicht werden, wenn das Object bei einem Mouseout ausgeblendet wird
			this.ttWindowcreated = false;
		}
		
		//--- Wenn Tooltip am Mauszeiger hängt und nicht am Object positioniert werden soll... 
		if(this.arTooltip[this.Nr]['move'] && !this.arTooltip[this.Nr]['top'] && !this.arTooltip[this.Nr]['left'])
		{
			//--- ...ist ein Center des Tooltips sinnlos
			this.arTooltip[this.Nr]['center'] = false;
			
			//--- ...darf kein Schatten gezeichnet werden, da sonst nicht bewegt werden kann
			this.arTooltip[this.Nr]['showShadow'] = false;

		}
		
		//--- Wenn ein Schatten existiert... 
		if(this.arTooltip[this.Nr]['showShadow'])
		{
			//--- ...ist es unmöglich den Tooltip ohne Close zu beenden
//			this.ttWindowcreated = true;
		}
	};
	
	//--- Event, welches den Tooltip aufruft bestimmen
	this._createEvent = function(Nr)
	{		
		if(this.event && this.event == "mouse")
		{
			addEvent(this.arTooltip[Nr]['clicker'].obj,"mouseover",this.load.scope(this,"on",Nr));
			addEvent(this.arTooltip[Nr]['clicker'].obj,"mouseout",this.load.scope(this,"off",Nr));
//			addEvent(this.ttWindow.obj,"mouseover",this.load.scope(this,"on",Nr));
//			addEvent(this.ttWindow.obj,"mouseout",this.load.scope(this,"off",Nr));
		}else if(this.event && this.event == "click")
		{
			addEvent(this.arTooltip[Nr]['clicker'].obj,"click",this.load.scope(this,false,Nr));
		}		
		
		if(this.arTooltip[Nr]['move'] && !this.arTooltip[Nr]['top'] && !this.arTooltip[Nr]['left'])
		{			
			addEvent(this.arTooltip[Nr]['clicker'].obj,"mousemove",this.setPosition.scope(this,Nr));
		}			
		
		if(this.arTooltip[Nr]['center'] && this.eventScroll)
		{
			addEvent(window,"scroll",this.setPosition.scope(this,Nr));
		}
		
		this.arTooltip[Nr]['alt'] 	= this.arTooltip[Nr]['clicker'].obj.alt;
		this.arTooltip[Nr]['title'] = this.arTooltip[Nr]['clicker'].obj.title;
		this.arTooltip[Nr]['clicker'].obj.alt = "";
		this.arTooltip[Nr]['clicker'].obj.title = "";	
	};

	//--- Tooltip Knoten erstellen
	//------ createControllWindow = true -> Div als pseudo Window mit einem Close erstellen
	this._createTooltip = function(e,arArray)
	{
		var Nr = arArray[1];
		this.arTooltip[Nr]['clicker'] = new CElement(this.arTooltip[Nr]['clicker']);
		if(!this.arTooltip[Nr]['clicker'].obj)
		{
			return false;
		}		
		
		this._createEvent(Nr);		
		if(this.arTooltip[Nr]['isClone'])
		{						
			return false;
		}
		var createControllWindow = arArray[2];
		if(this.type == "iframe")
		{
			this.tooltip = new CElement(false,"iframe");
			this.tooltip.frameborder = 0;
			if(this.arTooltip[Nr]['strAjax'])
			{
				var arIframeParameter = strToArray(this.arTooltip[Nr]['strAjax']);
				for(var parameter in arIframeParameter)
				{
					this.tooltip.obj.setAttribute(parameter,arIframeParameter[parameter]);
				}
				
			}
			
//			this.tooltip.obj.setAttribute("scrolling","no");			
			this.tooltip.obj.setAttribute("frameborder","0");						
		}else{
			this.tooltip = new CElement(false,"div");						
		}	
		this.tooltip.setClass(this.arTooltip[Nr]['tooltipCss'],true);
		this.tooltip.setStyle("textAlign","left");
		if(createControllWindow)
		{
			ttWindowCloseHeight = 16;

			this.ttWindow = new CElement(false,"div");
			this.ttWindow.appendNode();
			this.ttWindow.setClass("Tooltip_Controll_Window");			
			if(!this.ttWindow.getStyle("backgroundColor") || (this.ttWindow.getStyle("backgroundColor") && this.ttWindow.getStyle("backgroundColor") == "transparent"))
			{
				this.ttWindow.setStyle("backgroundColor","#f0f2ef");
			}
			if(parseFloat(this.ttWindow.prop["border"]) == 0)
			{
				//this.ttWindow.setStyle("border","2px solid #999999");
			}			
			this.ttWindow.setStyle("textAlign","Right");
						
			this.ttWindowControllBox = new CElement(false,"div");
			this.ttWindowControllBox.appendNode(this.ttWindow.obj);			
			this.ttWindowControllBox.setClass("Tooltip_Controll_Window_close_image_main",true);
			this.ttWindowControllBox.setStyle("height",ttWindowCloseHeight);			
//			this.ttWindowControllBox.setStyle("border","1px solid #999999");
			this.ttWindowControllBox.setStyle("textAlign","right");
			this.ttWindowControllBox.setStyle("marginTop", ttWindowCloseHeight * -1);
						
			this.ttWindowClose = new CElement(false,"img");
			this.ttWindowClose.obj.src = this.ttWindowImagePath+"delete.gif";
			this.ttWindowClose.appendNode(this.ttWindowControllBox.obj);
			this.ttWindowClose.setStyle("cursor","pointer");			
			
			this.ttWindow.setStyle("paddingTop",ttWindowCloseHeight);
			addEvent(this.ttWindowClose.obj,"click",this.load.scope(this,"off"));
			this.tooltip.appendNode(this.ttWindow.obj);			
		}else{
			this.tooltip.appendNode();
			this.ttWindow = this.tooltip;
		}
		this.ttWindow.setStyle("position","absolute");
		if(this.arTooltip[Nr]['autosize'])
		{
			if(this.tooltip.prop['width'] <= 30)
			{
//				this.tooltip.setStyle('width',31);
			}			
			if(this.tooltip.prop['height'] <= 30)
			{
//				this.tooltip.setStyle('height',31);
			}			
		}
		this.ttWindow.setStyle("opacity",this.arTooltip[Nr]['minOpacity']);				
		this.ttWindow.getProp();
		this.ttWindow.moveOut();
	};
	
	this._Shadow = function(e,arArray)
	{		
		if(!this.arTooltip[this.Nr]['showShadow'])
		{
			return false;
		}
		if(arArray[1])
		{
			var visible = arArray[1];
		}else{
			var visible = arArray;
		}
		
		if(!this.shadow)
		{
			this.shadow	= new CElement(false,"div");
			this.shadow.appendNode();
			this.shadow.setStyle("backgroundColor","black");
			this.shadow.setStyle("position","absolute");
			this.shadow.setStyle("zIndex",1000);
			this.shadow.setStyle("opacity",0);			
			if(this.eventScroll)
			{
				addEvent(window,"scroll",this._Shadow.scope(this,true));
			}
		}		
		if(visible && this.status == "on")
		{
			this.shadow.setStyle("opacity",80);
			if(!this.eventScroll && document.body.offsetHeight > getScreenHeight())
			{
				this.shadow.setStyle("height",document.body.offsetHeight);
			}else{
				this.shadow.setStyle("height",getScreenHeight());
			}
			this.shadow.setStyle("width",getScreenWidth());
			this.shadow.setStyle("left",getScroll("X"));
			if(this.eventScroll)
			{
				this.shadow.setStyle("top",getScroll("Y"));
			}else{
				this.shadow.setStyle("top",0);
			}
			this.shadow.moveIframe();
		}else{
			this.shadow.setStyle("opacity",0);
			this.shadow.moveOut();
			this.shadow.moveIframe();
		}
	};
	
	//--- Content für Tooltip bereitstellen 
	this._getContent = function()
	{		
		switch(this.type)
		{			
			case "id":
				this.originalNode = new CElement(this.arTooltip[this.Nr]['text']);
				if(!this.originalNode.obj)
				{
					return false;
				}
				this.tooltip.obj.innerHTML = "";  //--- den Knoten leer machen						
				this.originalNode.getProp();
				if(this.arTooltip[this.Nr]['autosize'])
				{
					this._setSize(this.originalNode.prop['abs_height'],this.originalNode.prop['abs_width']);
				}
				this.cloneNode = this.originalNode.cloneNode();
				if(this.cloneNode.obj)
				{										
					this.cloneNode.setStyle("display","");
					if(this.arTooltip[this.Nr]['strAjax'] == "deleteNode")
					{
						this.originalNode.deleteNode();	
					}
					this.tooltip.appendChild(this.cloneNode.obj);					
				}else{
					return false;
				}

				break;				
			case "original":
				if(this.originalNode && this.parent)
				{
					this.parent.appendChild(this.originalNode.obj);
					this.originalNode = false;
				}
				this.originalNode = new CElement(this.arTooltip[this.Nr]['text']);
				if(!this.originalNode.obj)
				{
					return false;
				}
				this.parent = this.originalNode.parentNode;
				this.originalNode.setStyle("display","");
				this.originalNode.getProp();
				if(this.arTooltip[this.Nr]['autosize'])
				{
					this._setSize(this.originalNode.prop['abs_height'],this.originalNode.prop['abs_width']);
				}
				this.tooltip.appendChild(this.originalNode.obj);					
				break;				
			case "ajax":			
				this.tooltip.obj.innerHTML = "";  //--- den Knoten leer machen
				this.ajax.Exec(this.arTooltip[this.Nr]['text'], "", strToArray(this.arTooltip[this.Nr]['strAjax']), "GET", this._getAjaxContent.scope(this));
				break;
			case "iframe":				
				if(this.lastIframeSrc == this.arTooltip[this.Nr]['text'])
				{
					return false;
				}
				this.tooltip.obj.src = this.arTooltip[this.Nr]['text'];
				this.lastIframeSrc = this.arTooltip[this.Nr]['text'];
//				this.ttWindow.setStyle("height",getIframeWindow(this.tooltip.obj).body.offsetHeight);
//				this.ttWindow.setStyle("width",getIframeWindow(this.tooltip.obj).body.offsetWidth);
				this._setSize(getIframeWindow(this.tooltip.obj,this.arIframeParameter).body.offsetHeight,getIframeWindow(this.tooltip.obj,this.arIframeParameter).body.offsetWidth);
//				this.tooltip.setStyle("overflow","scroll");
				break;			
			default:
				this.tooltip.obj.innerHTML = "";  //--- den Knoten leer machen						
				this.tooltip.appendTextNode(this.arTooltip[this.Nr]['text']);
				break;
		}		
		this.ttWindow.getProp();
		return true;
	};

	this.refresh = function()
	{
		if(this.Nr > -1)
		{
			this._getContent();
		}
	};
	
	this._getAjaxContent = function(e,arArray)
	{
		//alert(this.ajax.IsReady());
		if (this.ajax.IsReady())
		{
			div = new CElement(false,"div",true);
			div.obj.innerHTML = this.ajax.GetResponseText();			
			this.tooltip.obj.appendChild(div.obj);
			div.getProp();
			this._setSize(div.prop['height'],div.prop['width']);
			if(this.status == "off")
			{
				this.ttWindow.moveOut();
			}			
		}
	};
	
	//--- Tooltip Laden
	this.load = function(e,arArray)
	{		
		if(!this.tooltip.obj)
		{
			return false;
		}

		//--- arArray --- 1 = Tooltip sichtbar ; 2 = Text ; 3 = strAjax				
		if(this.status == "off" || (arArray[1] && arArray[1] == "on"))
		{				
			arArray[1] = false;
			if(this.Nr != arArray[2])
			{						
				this.Nr = arArray[2];				
				this._getContent();
			}			
			this._on(e);
			this._Shadow(false,true);
		}else{				
			if(isset(arArray[2]) && this.Nr != arArray[2])
			{				
				arArray[0] = false;
				arArray[1] = "on";
				this.load(e,arArray);
				return true;
			}					
			this._off(e);
		}
	};
	
	this.visible = function(visible,id)
	{			
		if(!this.arReferrer[id] && this.arReferrer[id] !== 0)
		{
			return false;
		}
		this.Nr = this.arReferrer[id];
		if(visible && this.status == "off")
		{						
			this._getContent();
			this._on(true);
			this._Shadow(false,true);
		}else if(!visible && this.status == "on"){			
			this._off(false);
		}		
	};
	
	this.closeAktive = function()
	{
		this.status = "on";
		this._off(false);
	};
	
	//--- Tooltip einblenden
	this._on = function(e)
	{				
		if(this.arCallback["open"])
		{
			this.arCallback["open"]();
		}
		this.status = "on";	
		tooltip_z_index++;
		this.ttWindow.setStyle("zIndex",tooltip_z_index);
		this.ttWindow.setStyle("display","");		
		if(this.interval)
		{
			window.clearInterval(this.interval);
			this.interval = false;
		}
		this.ttWindow.setStyle("opacity",100);
		this.arTooltip[this.Nr]['visibleStep'] = Math.abs(this.arTooltip[this.Nr]['visibleStep']);
		if(e)
		{
			arArray = new Array(false,this.Nr);
			this.setPosition(e,arArray);
		}
		this.ttWindow.moveIframe();		
		this.interval = window.setInterval(this._opacity.scope(this),1);		
		
		if(this.arCallback["isOpened"])
		{
			this.arCallback["isOpened"]();
		}
	};

	//--- Tooltip ausblenden
	this._off = function(e)
	{
		if (this.Nr == -1)
			return;
		
		this.status = "off";
		if(this.interval)
		{
			window.clearInterval(this.interval);
			this.interval = false;
		}
		this.arTooltip[this.Nr]['visibleStep'] = this.arTooltip[this.Nr]['visibleStep'] * -1;
		this.interval = window.setInterval(this._opacity.scope(this),1);				
	};	
	
	//--- Tooltip transparenz setzen
	this._opacity = function()
	{		
		//--- Tooltip ausblenden
		if(this.opacity + this.arTooltip[this.Nr]['visibleStep'] < this.arTooltip[this.Nr]['minOpacity'])
		{
			this.opacity = this.arTooltip[this.Nr]['minOpacity'];
			this.ttWindow.setStyle("display","none");
			window.clearInterval(this.interval);
			this.ttWindow.moveOut();			
			this.ttWindow.moveIframe();
			this._Shadow(false,false);
			if(this.arCallback["close"])
			{
				this.arCallback["close"]();
			}
		}else if(this.opacity + this.arTooltip[this.Nr]['visibleStep'] > this.arTooltip[this.Nr]['maxOpacity'])
		{
			this.opacity = this.arTooltip[this.Nr]['maxOpacity'];
			window.clearInterval(this.interval);			
		}else{
			this.opacity += this.arTooltip[this.Nr]['visibleStep'];
		}		
		this.ttWindow.setStyle("opacity",this.opacity);
	};

	this._setSize = function(NodeHeight,NodeWidth)
	{		
		if(this.arTooltip[this.Nr]['autosize'])
		{			
			if(this.type == "ajax")
			{
				return true;
				NodeHeight -= 17;
				NodeWidth -= 17;				
			}
			this.tooltip.setStyle("height",NodeHeight+17);
			this.tooltip.setStyle("width",NodeWidth+17);		
		}else{
//			alert("Node WIDTH: " + NodeWidth + " ; Tooltip WIDTH:" + this.tooltip.prop['width'] + " ## Node HEIGHT: " + NodeHeight + " ; Tooltip HEIGHT:" + this.tooltip.prop['height'])
			if(NodeWidth > this.tooltip.prop['width'] && NodeHeight > this.tooltip.prop['height'])
			{
				this.tooltip.setStyle("overflow","scroll");
			}else if(NodeWidth > this.tooltip.prop['width'])
			{
				this.tooltip.setStyle("overflowX","scroll");
			}else if(NodeHeight > this.tooltip.prop['height'])
			{
				this.tooltip.setStyle("overflowY","scroll");
			}
		}				

		//--- nur ausführen, wenn pseudo Window aktiv
		if(this.ttWindowcreated)
		{
//			alert("Screen WIDTH: " + getScreenWidth() + " ; Tooltip WIDTH:" + this.tooltip.prop['width'] + " ## Screen HEIGHT: " + getScreenHeight() + " ; Tooltip HEIGHT:" + this.tooltip.prop['height'])		
			if(this.tooltip.prop["height"] > getScreenHeight() && this.tooltip.prop["width"] > getScreenWidth())
			{			
				if(this.ttWindowcreated)
				{
					var CBheight = this.ttWindowControllBox.prop['height'];
				}
				this.tooltip.setStyle("height",getScreenHeight() - CBheight - 30);
				this.tooltip.setStyle("width",getScreenWidth() - 30);			
				this.tooltip.setStyle("overflow","scroll");			
				this.ttWindow.setStyle("top",getScroll("Y"));
				this.ttWindow.setStyle("left",getScroll("X"));
			}else if(this.tooltip.prop["height"] > getScreenHeight()){
				if(this.ttWindowcreated)
				{
					var CBheight = this.ttWindowControllBox.prop['height'];
				}
				this.tooltip.setStyle("height",getScreenHeight() - CBheight - 30);
				this.tooltip.setStyle("overflowY","scroll");
				this.ttWindow.setStyle("top",getScroll("Y"));
			}else if(this.tooltip.prop["width"] > getScreenWidth()){
				this.tooltip.setStyle("width",getScreenWidth() - 30);			
				this.tooltip.setStyle("overflowX","scroll");
				this.ttWindow.setStyle("left",getScroll("X"));
			}
			
			this.tooltip.getProp();			
		}

		this.lastInnerWidth		= getScreenWidth();
		this.lastInnerHeight	= getScreenHeight();
		
		
//		this.ttWindow.setStyle("height",this.tooltip.prop['abs_height']);
//		this.ttWindow.setStyle("width",this.tooltip.prop['abs_width']);		
	};
	
	//--- Position bestimmen, wenn auîerhalb des sichtbaren bereichs -> anpassen
	this.setPosition = function(e,arArray)
	{
		if(this.setPositionByElement())
		{
			return false;
		}
		if(this.status == "off")
		{
			return false;
		}
//		alert(this.Nr + "-" + arArray[1]);
		if(this.Nr != arArray[1])
		{
			return false;
			this.load(e,new Array(false,"on",arArray[1]));			
		}
		
		//--- Wenn eine fixe Position für den Tooltip angegeben wurde
		if(this.arTooltip[this.Nr]['top'] && this.arTooltip[this.Nr]['left'])
		{
			var top = this.arTooltip[this.Nr]['top'];			
			var left = this.arTooltip[this.Nr]['left'];			
		}else{
			var top = getMouse(e,"Y") + this.mousePointerWidth;
			var bottom = top + this.ttWindow.prop['abs_height'];
			var left = getMouse(e,"X") + this.mousePointerHeight;
			var right = left + this.ttWindow.prop['abs_width'];		
			
			//--- nicht wenn Overflow = scroll, berechnungen sind anscheinend so groß, dass Brwoser kurz hängt
			if(!this.overflow)
			{
				if(this.arTooltip[this.Nr]['center'])
				{
					left = ((getScreenWidth()-17) - (right - left)) / 2;
					top = (getScreenHeight() - (bottom - top)) / 2;
				}else{
			//		alert("oben: " + top + " ; unten: " + bottom + " ; links: " + left + " ; rechts: " + right);
					if(right + this.mousePointerWidth >= (getScreenWidth()-17))
					{			
						left = left - (right - (getScreenWidth()-17)) - this.mousePointerWidth;
			//			left = left - (right - left) - this.mousePointerWidth;
					}
//				alert(bottom + this.mousePointerHeight);
					if(bottom + this.mousePointerHeight >= getScreenHeight())
					{			
			//			top = top - (bottom - this.windowBottom) - this.mousePointerHeight;
						top = top - (bottom - top) - this.mousePointerHeight - 5;
					}			
					if(top < 0)
					{
						top = getMouse(e,"Y") + this.mousePointerWidth;
					}			
				}			
				top += getScroll("Y");
				left += getScroll("X");
				if(left < 0 && !this.arTooltip[this.Nr]['center'])
				{
					left = 0;
				}
			}
		}		
		this.ttWindow.setStyle("top",top);
		this.ttWindow.setStyle("left",left);
		
		//--- nicht wenn Overflow = scroll, berechnungen sind anscheinend so groß, dass Brwoser kurz hängt
		if(!this.overflow)
		{		
			if(this.lastInnerHeight != getScreenHeight() || this.lastInnerWidth != getScreenWidth())
			{
				this._setSize(this.tooltip.prop['height'],this.tooltip.prop['width']);
			}
			this.lastInnerWidth		= getScreenWidth();
			this.lastInnerHeight	= getScreenHeight();
		}
		this.ttWindow.moveIframe("move");		
	};

	//--- Setzt den Tooltip neben das Clicker element
	this.setPositionByElement = function()
	{		
		var space = 5;
		if(!this.arTooltip[this.Nr])
		{
			return false;
		}
		this.arTooltip[this.Nr]['clicker'].getProp();
		this.ttWindow.getProp();
		switch(this.arTooltip[this.Nr]['top'])
		{
			case "top":
				var top = this.arTooltip[this.Nr]['clicker'].prop['abs_top'] - this.ttWindow.prop['abs_height'] - space;
				break;
			case "bottom":				
				var top = this.arTooltip[this.Nr]['clicker'].prop['abs_top'] + this.arTooltip[this.Nr]['clicker'].prop['height'] + space;
				break;
			case "left":
				var left = this.arTooltip[this.Nr]['clicker'].prop['abs_left'] - this.ttWindow.prop['abs_width'] - space;
				break;
			case "right":
				var left = this.arTooltip[this.Nr]['clicker'].prop['abs_left'] + this.arTooltip[this.Nr]['clicker'].prop['abs_width'] + space;
				break;
			default:				
				return false;
		}

		switch(this.arTooltip[this.Nr]['left'])
		{
			case "top":
				var top = this.arTooltip[this.Nr]['clicker'].prop['abs_top'];
				break;
			case "bottom":				
				var top = this.arTooltip[this.Nr]['clicker'].prop['abs_top'] + this.arTooltip[this.Nr]['clicker'].prop['height'] - this.ttWindow.prop['abs_height'];
				break;
			case "left":
				var left = this.arTooltip[this.Nr]['clicker'].prop['abs_left'];
				break;
			case "right":
				var left = this.arTooltip[this.Nr]['clicker'].prop['abs_left'] + this.arTooltip[this.Nr]['clicker'].prop['abs_width'] - this.ttWindow.prop['abs_width'];
				break;
			default:				
				return false;
		}		
		this.ttWindow.setStyle("top",top);
		this.ttWindow.setStyle("left",left);

		return true;
	};
	
	//--- Eine Funktion aufrufen nachdem bestimmten aktionen z.B. Tooltip close, Tooltip open etc...
	this.callback = function(type,func)
	{
		if(type == "close")
		{
			this.arCallback[type] = func;			
		} else if(type == "open") {
			this.arCallback[type] = func;			
		} else if (type == 'isOpened') {
			this.arCallback[type] = func;
		}
	};
	
	//--- einen bestehenden Tooltip kopieren und auf neuen Clicker anwenden, dabei können eventuelle Modifikationen vorgenommen werden
	this.copyTooltipToObj = function(obj,text,arAjax,move,cWindow,showShadow,autosize,center,css,visibleStep,minOpacity,maxOpacity,isOnload)
	{
		if(!obj)
		{
			return false;
		}
		this.clickObj 			= obj;
		//this.event 				= (event) ? event : this.event;	
		var Nr = this._setConfig(obj,this.event,type,text,arAjax,move,cWindow,showShadow,autosize,center,css,visibleStep,minOpacity,maxOpacity,isOnload,true);
		if(!this.arTooltip[Nr]['isOnload'])
		{
			addEvent(window,"load",this._createTooltip.scope(this,Nr,this.ttWindowcreated));
		}else{			
			var arArray = new Array();
			arArray[0] = false;
			arArray[1] = Nr+"";			
			this._createTooltip(false,arArray);
		}		
	};
	
	this.__construct(obj,event,type,text,arAjax,move,cWindow,showShadow,autosize,center,css,visibleStep,minOpacity,maxOpacity,isOnload);	
}
