var PopUpHint = {
    followMouse: false,
    overlaySelects: true,  // iframe shim for select lists (ie win)
    offX: 8,
    offY: 12,
    Hint_ID: "ToolTipDiv",
    showDelay: 100,
    hideDelay: 200,
	ovTimer:0,
	ready:false,
	timer:null,
	tip:null,
	shim:null,
	supportsOverlay:false,
	
	On_Start:function()
	{
		if(document.createElement&&document.body&&typeof document.body.appendChild!="undefined")
			{
				var el=document.createElement("DIV");
				el.id=this.Hint_ID;
				document.body.appendChild(el);
				this.supportsOverlay=this.checkOverlaySupport();
				this.ready=true;
			}
	},
	
  showTheHint:function(e,msg)
  {
	  	if(this.timer)
		{
			clearTimeout(this.timer);
			this.timer=0;
		}
		
		this.tip=document.getElementById(this.Hint_ID);
		if(this.followMouse)dw_event.add(document,"mousemove",this.trackMouse,true);
		this.Write_Tool_Tip("");
		this.Write_Tool_Tip(msg);
		viewport.getAll();
		this.handleOverlay(1,this.showDelay);
		this.Position_Tool_Tip(e);
		this.timer=setTimeout("PopUpHint.toggleVis('"+this.Hint_ID+"', 'visible')",this.showDelay);
	},
	
	Write_Tool_Tip:function(msg)
	{
		if(this.tip&&typeof this.tip.innerHTML!="undefined")
			this.tip.innerHTML=msg;
	},
	
	Position_Tool_Tip:function(e)
	{
		if(this.tip&&this.tip.style)
		{
			var x=e.pageX?e.pageX:e.clientX+viewport.scrollX;
			var y=e.pageY?e.pageY:e.clientY+viewport.scrollY;
			if(x+this.tip.offsetWidth+this.offX>viewport.width+viewport.scrollX)
				{
					x=x-this.tip.offsetWidth-this.offX;
					if(x<0)
						x=0;
				}else 
					x=x+this.offX;
			if(y+this.tip.offsetHeight+this.offY>viewport.height+viewport.scrollY)
				{
					y=y-this.tip.offsetHeight-this.offY;
					if(y<viewport.scrollY)
						y=viewport.height+viewport.scrollY-this.tip.offsetHeight;
				}else 
					y=y+this.offY;
					this.tip.style.left=x+"px";
					this.tip.style.top=y+"px";
		}
		this.positionOverlay();
	},
	
	hideTheHint:function()
	{	if(this.timer)
		{
			clearTimeout(this.timer);
			this.timer=0;
		}
		this.handleOverlay(0,this.hideDelay);
		this.timer=setTimeout("PopUpHint.toggleVis('"+this.Hint_ID+"', 'hidden')",this.hideDelay);
		if(this.followMouse)
			dw_event.remove(document,"mousemove",this.trackMouse,true);
		this.tip=null;
	},
	
	toggleVis:function(id,vis)
	{	
		var el=document.getElementById(id);
		if(el)
			el.style.visibility=vis;
	},
	
	trackMouse:function(e)
	{
		e=dw_event.DOMit(e);
		PopUpHint.Position_Tool_Tip(e);
	},
	
	checkOverlaySupport:function()
	{
		if(navigator.userAgent.indexOf("Windows")!=-1&&typeof document.body!="undefined"&&typeof document.body.insertAdjacentHTML!="undefined"&&!window.opera&&navigator.appVersion.indexOf("MSIE 5.0")==-1)
		return true;
		else return false;
	},
	
	handleOverlay:function(bVis,d)
	{
		if(this.overlaySelects&&this.supportsOverlay)
		{
			if(this.ovTimer)
			{
				clearTimeout(this.ovTimer);
				this.ovTimer=0;
			}
			switch(bVis)
			{
				case 1:
					if(!document.getElementById('tipShim'))
						document.body.insertAdjacentHTML("beforeEnd",'<iframe id="tipShim" src="about:blank" style="position:absolute; left:0; top:0; z-index:500; visibility:hidden" scrolling="no" frameborder="0"></iframe>');
					this.shim=document.getElementById('tipShim');
					
					if(this.shim&&this.tip)
					{
						this.shim.style.width=this.tip.offsetWidth+"px";
						this.shim.style.height=this.tip.offsetHeight+"px";
					}
					
					this.ovTimer=setTimeout("PopUpHint.toggleVis('tipShim', 'visible')",d);
					break;
				case 0:
					this.ovTimer=setTimeout("PopUpHint.toggleVis('tipShim', 'hidden')",d);
					if(this.shim)
						this.shim=null;
						break;
			}
		}
	},
	
	positionOverlay:function()
	{
		if(this.overlaySelects&&this.supportsOverlay&&this.shim)
		{
			this.shim.style.left=this.tip.style.left;
			this.shim.style.top=this.tip.style.top;
		}
	}
};