/*************************************************************************
version date: Feb 2004
This code is from Dynamic Web Coding at http://www.dyn-web.com/
See Terms of Use at http://www.dyn-web.com/bus/terms.html
regarding conditions under which you may use this code.
This notice must be retained in the code as is!
*************************************************************************/

var dw_event = {
	add : function(obj, etype, fp, cap){
		cap = cap || false;
		if (obj.addEventListener) obj.addEventListener(etype, fp, cap);
		else if (obj.attachEvent) obj.attachEvent("on" + etype, fp);
	},
	remove : function(obj, etype, fp, cap){
		cap = cap || false;
		if (obj.removeEventListener) obj.removeEventListener(etype, fp, cap);
		else if (obj.detachEvent) obj.detachEvent("on" + etype, fp);
	}, 
	DOMit : function(e){
		e = e ? e : window.event;
		e.tgt = e.srcElement ? e.srcElement : e.target;
		if (!e.preventDefault) e.preventDefault = function() { return false; }
		if (!e.stopPropagation) e.stopPropagation = function() { if (window.event) window.event.cancelBubble = true; }
		return e;
	}
}

var Tooltip = {
	followMouse	: true,
	offX		: 8,
	offY		: 10,
	tipID		: "tipDiv",
	showDelay	: 0,
	hideDelay	: 0,
	ready		: false,
	timer		: null,
	tip			: null,

	tp_init : function(){
		if(document.createElement && document.body && typeof document.body.appendChild!="undefined") {
			if(!document.getElementById(this.tipID)){
				var el = document.createElement("DIV");
				el.id = this.tipID;
				document.body.appendChild(el);
			}
			this.ready = true;
		}
	},
	tp_show : function(e, msg, title){
		if(this.timer){
			clearTimeout(this.timer);
			this.timer=0;
		}
		this.tip = document.getElementById(this.tipID);
		if(this.followMouse)
			dw_event.add(document,"mousemove",this.trackMouse,true);
		this.writeTip("");
		this.writeTip(msg, title);
		viewport.getAll();
		this.positionTip(e);
		this.timer = setTimeout("Tooltip.toggleVis('"+this.tipID+"', 'visible')",this.showDelay);
	},
	writeTip : function(msg, title){
		if(this.tip&&typeof this.tip.innerHTML!="undefined") {
			//this.tip.innerHTML=msg;
			if( title )
				f_txt = "<table border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#AEA677><table width=100% border=0 cellpadding=3 cellspacing=0><tr><td class=tp2><b>"+title+"</b></td></tr></table><table width=100% border=0 cellpadding=3 cellspacing=0><tr><td class=tip bgcolor=lightyellow>"+msg+"</td></tr></table></td></tr></table>"
			else
				f_txt = "<table border=0 cellpadding=3 cellspacing=0><tr><td class=tip>"+msg+"</td></tr></table>"
			this.tip.innerHTML = f_txt;
		}
	},
	positionTip : 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;
			// added by BJ for select box overlapping
			var inv = document.getElementById("invF");
			if( inv ) {
				inv.style.left	= x+"px";
				inv.style.top	= y+"px";
			}
			//
			this.tip.style.left = x+"px";
			this.tip.style.top  = y+"px";
		}
	},
	tp_hide : function(){
		if(this.timer){
			clearTimeout(this.timer);
			this.timer=0;
		}
		this.timer = setTimeout("Tooltip.toggleVis('"+this.tipID+"', 'hidden')", this.hideDelay);
		if(this.followMouse)
			dw_event.remove(document, "mousemove", this.trackMouse, true);
		this.tip = null;
	},
	toggleVis : function(id, vis){
		// modified by BJ for select box overlapping
		var e_w, e_h;
		var inv = document.getElementById("invF");
		var el = document.getElementById(id);
		if (el) {
			e_w = el.offsetWidth;
			e_h = el.offsetHeight;
			if(inv) {
				inv.style.width	 = e_w;
				inv.style.height = e_h;
				inv.style.visibility = vis;
			}
			if(el) el.style.visibility = vis;
		}
		//
	},
	trackMouse : function(e){
		e = dw_event.DOMit(e);
		Tooltip.positionTip(e);
	}
};

var viewport = {
	getWinWidth : function(){
		this.width = 0;
		if (window.innerWidth)
			this.width = window.innerWidth - 18;
		else if (document.documentElement && document.documentElement.clientWidth) 
			this.width = document.documentElement.clientWidth;
		else if (document.body && document.body.clientWidth) 
			this.width = document.body.clientWidth;
	},
	getWinHeight : function() {
		this.height = 0;
		if (window.innerHeight)
			this.height = window.innerHeight - 18;
		else if (document.documentElement && document.documentElement.clientHeight) 
			this.height = document.documentElement.clientHeight;
		else if (document.body && document.body.clientHeight) 
			this.height = document.body.clientHeight;
	},
	getScrollX : function() {
		this.scrollX = 0;
		if (typeof window.pageXOffset == "number")
			this.scrollX = window.pageXOffset;
		else if (document.documentElement && document.documentElement.scrollLeft)
			this.scrollX = document.documentElement.scrollLeft;
		else if (document.body && document.body.scrollLeft) 
			this.scrollX = document.body.scrollLeft; 
		else if (window.scrollX)
			this.scrollX = window.scrollX;
	},
	getScrollY : function() {
		this.scrollY = 0;    
		if (typeof window.pageYOffset == "number")
			this.scrollY = window.pageYOffset;
		else if (document.documentElement && document.documentElement.scrollTop)
			this.scrollY = document.documentElement.scrollTop;
		else if (document.body && document.body.scrollTop) 
			this.scrollY = document.body.scrollTop; 
		else if (window.scrollY)
			this.scrollY = window.scrollY;
	},
	getAll : function() {
		this.getWinWidth();
		this.getWinHeight();
		this.getScrollX();
		this.getScrollY();
	}
}

function doTooltip(e, msg, title){
  if ( typeof Tooltip == "undefined" || !Tooltip.ready ) return;
  Tooltip.tp_show(e, msg, title);
}
function hideTip(){
  if ( typeof Tooltip == "undefined" || !Tooltip.ready ) return;
  Tooltip.tp_hide();
}
