
var offsetxpoint=-20 //Customize x offset of tooltip
var offsetypoint=20 //Customize y offset of tooltip
var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
var showtooltipontop=false;
if (ie||ns6)
//var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : "" -- original but got broken in ie for some reason
var tipobj=$("dhtmltooltip")

function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function ddrivetip(thetext, thecolor, bordercolor, thewidth, displaytooltipontop){
	if (ns6||ie){
	// added in to make tooltip work on details popups
	tipobj.style.visibility="visible"
	document.onmousemove=positiontip
	//////////////////////////////////////////////////
	if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px"
	if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor
	if (typeof bordercolor !="undefined" && bordercolor!="") tipobj.style.borderColor=bordercolor
	tipobj.innerHTML=thetext
	enabletip=true
	if(displaytooltipontop != null){
		showtooltipontop=displaytooltipontop;
	} else {
		showtooltipontop = false;
	}
	return false
	}
}

function positiontip(e){
if (enabletip){
var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
//Find out how close the mouse is to the corner of the window
var rightedge=ie&&!window.opera? ietruebody().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint-20
var bottomedge=ie&&!window.opera? ietruebody().clientHeight-event.clientY-offsetypoint : window.innerHeight-e.clientY-offsetypoint-20

var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<tipobj.offsetWidth)
//move the horizontal position of the menu to the left by it's width
tipobj.style.left=ie? ietruebody().scrollLeft+event.clientX-tipobj.offsetWidth+"px" : window.pageXOffset+e.clientX-tipobj.offsetWidth+"px"
else if (curX<leftedge)
tipobj.style.left="5px"
else
//position the horizontal position of the menu where the mouse is positioned
tipobj.style.left=curX+offsetxpoint+"px"

//same concept with the vertical position
if (bottomedge<tipobj.offsetHeight || showtooltipontop)
tipobj.style.top=ie? ietruebody().scrollTop+event.clientY-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+e.clientY-tipobj.offsetHeight-offsetypoint+"px"
else
tipobj.style.top=curY+offsetypoint+"px"
tipobj.style.visibility="visible"
}
}

function hideddrivetip(){
if (ns6||ie){
enabletip=false
tipobj.style.visibility="hidden"
tipobj.style.left="-1000px"
tipobj.style.backgroundColor=''
tipobj.style.width=''
}
}

//document.onmousemove=positiontip -- moved into function ddrivetip()

function _applyStyles_(elem, styles) {
	for (x in styles) {
		elem.style[x] = styles[x];
	}
}

function Location(x, y) {
	this.x = x;
	this.y = y;
}

function getOffset(elem) {
	var x = elem.offsetLeft, y = elem.offsetTop, orig = elem;
	while ((elem = elem.offsetParent) && (typeof(elem.offsetLeft) == 'number' && typeof(elem.offsetTop) == 'number') && (elem.style.position != "relative")) {
		x += elem.offsetLeft;
		y += elem.offsetTop;
	}
	return new Location(x + 10, y + orig.clientHeight + 8);
}

ToolTip = {
	tts : [],
	showIt : function(source, ttId) {
                var sawMyself = false;
		var loc = getOffset(source);
		var tt = document.getElementById(ttId);
                if (!tt) {
                    tt = document.createElement('div')
                    tt.id="tooltip";
                    tt.innerHTML = ttId;
                    document.body.appendChild(tt);
                }
		for (var i = 0, l = this.tts.length; i<l; i++) {
                    if (tt !== this.tts[i][0]) {
                        ToolTip.hide(this.tts[i][0], true);
                    } else {
                        sawMyself = true;
                    }
		}
                if (!sawMyself) {
                   this.tts.push([tt, source]);
                }
		tt.style.position = "absolute"
		tt.style.top = loc.y + "px";
		tt.style.left = loc.x + 15 + "px";

		tt.style.display = 'block';
                tt.kill = false;
		tt.onmouseover = function() {
			ToolTip.registerFocus(tt);
		};
		source.onmouseout = function() {
			ToolTip.requestKill(tt);
		};
		tt.onmouseout = function() {
			ToolTip.requestKill(tt);
		};
	},
	requestKill : function(tt) {
		tt.kill = true;
		setTimeout(function(){
			ToolTip.hide(tt);
		}, 500);
	},
	hide : function(tt, force) {
		if (tt.kill || force) {
			tt.style.display = "none";
		}
	},
	registerFocus : function(tt) {
		tt.kill = false;
	},
	smash : function(intoOblivion) {
		for (var i = 0, l = this.tts.length; i<l; i++) {
			this.tts[i][0].onmouseover = null;
			this.tts[i][0].onmouseout = null;
                        this.tts[i][0].style.display = "none";
			this.tts[i][1].onmouseout = null;
                        if (intoOblivion)
                            this.tts[i][1].onmouseover = null;
		}
	}
}




