Tooltip = Class.create();
Tooltip.prototype = {
	initialize: function(optionObj) {
		this.tooltipEl = $$(optionObj.tooltipSelector)[0];
		this.textEl = this.tooltipEl.down(optionObj.textSelector);
		this.tippedSelector = optionObj.tippedSelector||undefined;
		
		this.boundMove = this.move.bindAsEventListener(this)
		
		this.eventQueue = new Array();
		
		$$(this.tippedSelector).each(this.addTooltips.bind(this));
	},
	addTooltips: function(tooltipped) {
		Event.observe(tooltipped, "mouseover", this.toggle.bind(this))
		Event.observe(tooltipped, "mouseout", this.toggle.bind(this))
	},
	toggle: function(evt) {		
		this.move(evt);
		var eventEl = Event.element(evt);
		var tooltipText = (eventEl.tagName.toLowerCase() != 'a')?eventEl.up(this.tippedSelector).down("img").getAttribute("alt"):"Blah!";
		this.textEl.innerHTML = tooltipText;
		// toggle the display
		if(evt.type == 'mouseover') {
			Event.observe(document, 'mousemove', this.boundMove);
			this.tooltipEl.style.visibility = 'visible';
		} else if(evt.type == 'mouseout') {
			if(typeof evt.toElement != 'undefined') {
				transferTo = evt.toElement;
			} else if(typeof evt.relatedTarget != 'undefined') {
				transferTo = evt.relatedTarget;
			}
			if(typeof transferTo != 'undefined') {
				if(!$(transferTo) || ($(transferTo) && $(transferTo).up && !$(transferTo).up(0).hasClassName("tooltipped"))) {
					Event.stopObserving(document, 'mousemove', this.boundMove);
					this.tooltipEl.style.visibility = 'hidden';
				}
			}
		}
	},
	move: function(evt) {
		if(typeof(evt) != 'undefined') {
			var topPos = evt.clientY-5-this.tooltipEl.offsetHeight;
			var leftPos = evt.clientX-(this.tooltipEl.getWidth()/2);
			if(navigator.appVersion.indexOf('Safari') == -1) {
				if(window.pageYOffset) {
					topPos += window.pageYOffset;
					leftPos += window.pageXOffset;
				} else {
					topPos += (document.compatMode && document.compatMode != "BackCompat")? document.documentElement.scrollTop : document.body.scrollTop;
					leftPos += (document.compatMode && document.compatMode != "BackCompat")? document.documentElement.scrollLeft : document.body.scrollLeft;
				}
			}
			this.tooltipEl.style.top = String(topPos)+'px';
			this.tooltipEl.style.left = String(leftPos)+'px';
		}
	}
}