//var Tooltip2 = Class.create();
//Tooltip2.prototype = {
var Tooltip2 = Class.create({
	initialize: function(element, url) {
		this.element = $(element);
		this.tooltip = null;
		this.timer	 = null;
		this.url	 = url;
		this.eventMouseOver = this.mouseHoverShow.bindAsEventListener(this);
		this.eventMouseOut = this.mouseHoverHide.bindAsEventListener(this);
		Event.observe(this.element, "mousemove", this.eventMouseOver);
		Event.observe(this.element, "mouseout", this.eventMouseOut);
    },
	destroy: function() {
		Event.stopObserving(this.element, "mousemove", this.eventMouseOver);
		Event.stopObserving(this.element, "mouseout", this.eventMouseOut);
	},
	mouseHoverShow: function(event) {
		if (this.timer != null) {
			clearTimeout(this.timer);
			this.timer = null;
		}

		var obj = this;
		Event.stop(event);
		var mouse_x = Event.pointerX(event);
		var mouse_y = Event.pointerY(event);
		var handler = function() { obj.showTooltip(new Array(mouse_x, mouse_y)); };
		this.timer = setTimeout(handler, 1000);
	},

	mouseHoverHide: function(event) {
		if (this.timer != null) {
			clearTimeout(this.timer);
			this.timer = null;
		}
		if (this.tooltip == null)
			return;
		var obj = this;
		Element.remove(obj.tooltip);
		obj.tooltip = null;
/*
		new Rico.Effect.FadeTo(this.tooltip, 0, 300, 10,
			{complete:function() {
				Element.remove(obj.tooltip);
				obj.tooltip = null;
			}} );
*/

	},
	showTooltip: function(mpos) {
		clearTimeout(this.timer);
		this.timer = null;

		this.tooltip = document.createElement('div');
		var e = this.tooltip;
		Element.hide(this.tooltip);
		document.body.appendChild(this.tooltip);

		var obj = this;
		var handler = function(req) {
			obj.tooltip.innerHTML = req.responseText;
			var mouse_x = mpos[0];
			var mouse_y = mpos[1];

			var dimensions = Element.getDimensions(obj.tooltip);
			var element_width = dimensions.width;
			var element_height = dimensions.height;

			if ((element_width + mouse_x) >= (obj.getWindowWidth() - 5) ) {
				mouse_x = mouse_x - element_width;
        		mouse_x = mouse_x - 5;
    		} else {
        		mouse_x = mouse_x + 5;
    		}

    		if ((element_height + mouse_y) >= ( obj.getWindowHeight() - 5)) {
        		mouse_y = mouse_y - element_height;
        		mouse_y = mouse_y - 5;
    		} else {
        		mouse_y = mouse_y + 5;
    		}

			Element.setStyle(obj.tooltip, { position: 'absolute',
				top: mouse_y + 'px', left: mouse_x + 'px'});
			Element.show(obj.tooltip);
		};
		var eHandler = function(req) {
			Element.remove(obj.tooltip);
		};
		var req = new Ajax.Request(this.url,
			{ method: 'get', onSuccess: handler, onError: eHandler});
	},

  // stolen functions :)
  getWindowHeight: function(){
    var innerHeight;
    if (navigator.appVersion.indexOf('MSIE')>0) {
        innerHeight = document.body.clientHeight;
    } else {
        innerHeight = window.innerHeight;
    }
    return innerHeight;
  },

  getWindowWidth: function(){
    var innerWidth;
    if (navigator.appVersion.indexOf('MSIE')>0) {
        innerWidth = document.body.clientWidth;
    } else {
        innerWidth = window.innerWidth;
    }
    return innerWidth;
  }

});
