/*******************************************************************************

FILE: mud_ToolTip.js
REQUIRES: prototype.js
AUTHOR: Takashi Okamoto mud(tm) - http://www.mudcorp.com/
VERSION: 1.5 - added support for WIN IE6
DATE: 09/03/2006

--------------------------------------------------------------------------------

This file is part of MudToolTip.

	MudToolTip is free for anyone to use, but this header MUST be
	included, and may not be modified.
	
--------------------------------------------------------------------------------

Usage:

MudToolTip('tooltip_id')

--------------------------------------------------------------------------------

Add this css:

.tooltip {
	cursor: pointer;
}

#tooltipbox {
	position: absolute;
	width: 200px;
	height: 100px;
	z-index: 100;
	opacity: 0.8;
	filter: alpha(opacity=80);
	-moz-opacity: .8;
}

#tooltipbox-pointer {
	position: absolute;
	top: -4px;
	left: 0;
	height: 4px;
	width: 18px;
	background: url(/images/tip.gif) no-repeat;
}

#tooltipbox-content {
	padding: 4px;
	font-size: 9px;
	font-family: verdana, arial, helvetica, sans-serif;
	color: white;
	background-color: black;
}

*******************************************************************************/

var MudToolTip = Class.create();

MudToolTip.OFFSET = new Array(-12, 20);

MudToolTip.prototype = {
	
	/* ------------- DON'T EDIT PAST HERE ------------- */
	
	initialize: function(thisObj, id) {
		this.thisObj = thisObj;
		this.pos = new Array(0, 0);
		this.hidden = true;
		this.target = false;
		this.side = "right";
		
		// tooltipbox
		this.tipbox = document.createElement('div');
		this.tipbox.id = 'tooltipbox';
		document.getElementsByTagName('body')[0].appendChild(this.tipbox);
		this.tipbox.style.display = 'none';
		
		// tooltipbox-pointer
		var tooltipbox_pointer = document.createElement('div');
		this.tipbox.appendChild(tooltipbox_pointer);
		tooltipbox_pointer.id = 'tooltipbox-pointer';
		
		// tooptipbox-content
		var tooltipbox_content = document.createElement('div');
		this.tipbox.appendChild(tooltipbox_content);
		tooltipbox_content.id = 'tooltipbox-content';
		
		// save pointer position
		this.pointer_x = Element.getStyle('tooltipbox-pointer', 'left');
	},
	
	// call onmouseover
	showTip: function(evt) {
		evt = (evt) ? evt : event;
		this.setPos(evt);
		this.target = this.getTarget(evt);
		this.target.setAttribute('tiptext', this.target.getAttribute('title'));
		this.target.removeAttribute('title');
		this.hidden = false;
		Element.show(this.tipbox);
		$(this.tipbox.id+"-content").innerHTML = this.target.getAttribute('tiptext');
	},
	
	// call onmouseout
	hideTip: function() {
		if (this.target) {
			this.target.setAttribute('title', this.target.getAttribute('tiptext'));
			this.target.removeAttribute('tiptext');
			this.hidden = true;
			$(this.tipbox.id+"-content").innerHTML = "";
			this.target = false;
			Element.hide(this.tipbox);
		}
	},
	
	setPos: function(evt) {
		this.pos = cursorPos(evt);
		this.setSide(this.pos);
		switch(this.side) {
			case "left":
				var offset_x = MudToolTip.OFFSET[0] + Element.getDimensions('tooltipbox-content').width;
				this.tipbox.style.left = this.pos[0] - offset_x + "px";
				this.tipbox.style.top = this.pos[1] + MudToolTip.OFFSET[1] + "px";
				this.tipbox.style.textAlign = "right";
				Element.setStyle('tooltipbox-pointer', {left: (offset_x + MudToolTip.OFFSET[0]) + "px"});
				break;
			default:
				this.tipbox.style.left = this.pos[0] + MudToolTip.OFFSET[0] + "px";
				this.tipbox.style.top = this.pos[1] + MudToolTip.OFFSET[1] + "px";
				this.tipbox.style.textAlign = "left";
				Element.setStyle('tooltipbox-pointer', {left: this.pointer_x});
				break;
		}
	},
	
	setSide: function(pos) {
		if ($('content') && $('content-wrapper')) {
			if ((pos[0]+200) > Element.getDimensions('content-wrapper').width) this.side = "left";
			else this.side = "right";
		}
	},
	
	getTarget: function(evt) {
		var target = (evt.target) ? evt.target : evt.srcElement;
		if (target.className != "tooltip") target = target.parentNode;
		return target;
	}
}

/* ------------- PUBLIC FUNCTIONS ------------- */

function cursorPos(evt) {
	var pos = new Array(0, 0);
	evt = (evt) ? evt : event;
	if (!evt) return false;
	
	if (evt.pageX) {
		pos[0] = evt.pageX;
		pos[1] = evt.pageY;
	}
	else if (evt.clientX) {
		if (document.documentElement.scrollTop){
			pos[0] = evt.clientX + document.documentElement.scrollLeft;
			pos[1] = evt.clientY + document.documentElement.scrollTop;
		}
		else{
			pos[0] = evt.clientX + document.body.scrollLeft;
			pos[1] = evt.clientY + document.body.scrollTop;
		}
	}
	return pos;
}

function addEvent(obj, evType, fn) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, true);
		return true;
	}
	else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	}
	else {
		return false;
	}
}
