var Tooltip = Class.create();

Tooltip.prototype = {

	initialize: function(element, tooltip, options) {

		var options = Object.extend({delta_x: 5, delta_y: 5}, options || {});

		this.element = element;
		this.tooltip = tooltip;
		this.options = options;

		//this.tooltip.hide();

		this.eventMouseOver = this.showTooltip.bindAsEventListener(this);
		this.eventMouseOut   = this.hideTooltip.bindAsEventListener(this);
		this.eventMouseMove = this.followMouse.bindAsEventListener(this);

		this.registerEvents();

		},

	destroy: function() {
		Event.stopObserving(this.element, "mouseover", this.eventMouseOver);
		Event.stopObserving(this.element, "mouseout", this.eventMouseOut);
		},

	registerEvents: function() {
		Event.observe(this.element, "mouseover", this.eventMouseOver);
		Event.observe(this.element, "mouseout", this.eventMouseOut);
		Event.observe(this.element, "mousemove", this.eventMouseMove);
		},

	showTooltip: function(event) {

		Event.stop(event);

		var mouse_x = Event.pointerX(event);
		var mouse_y = Event.pointerY(event);

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

		if (((element_width + mouse_x) >= (this.getWindowWidth() - this.options.delta_x)) && this.options.wrap_left) {
			mouse_x = mouse_x - element_width;
			mouse_x = mouse_x - this.options.delta_x;
			} else {
				mouse_x = mouse_x + this.options.delta_x;
				}

		if (((element_height + mouse_y) >= (this.getWindowHeight() - this.options.delta_y)) && this.options.wrap_top) {
			mouse_y = mouse_y - element_height;			
			mouse_y = mouse_y - this.options.delta_y_top;
			} else {
				mouse_y = mouse_y + this.options.delta_y;
				} 

	
		this.setStyles(mouse_x, mouse_y);

		new Element.show(this.tooltip);

		this.tooltip.setOpacity(this.options.opacity);

		},
		
	followMouse: function (event) {

		Event.stop(event);

		var mouse_x = Event.pointerX(event);
		var mouse_y = Event.pointerY(event);

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

		if (((element_width + mouse_x) >= (this.getWindowWidth() - this.options.delta_x)) && this.options.wrap_left) {
			mouse_x = mouse_x - element_width;
			mouse_x = mouse_x - this.options.delta_x;
			} else {
				mouse_x = mouse_x + this.options.delta_x;
				}

		if (((element_height + mouse_y) >= (this.getWindowHeight() - this.options.delta_y)) && this.options.wrap_top) {
			mouse_y = mouse_y - element_height;			
			mouse_y = mouse_y - this.options.delta_y;
			} else {
				mouse_y = mouse_y + this.options.delta_y;
				} 

		this.setStyles(mouse_x, mouse_y);

		},
  
	setStyles: function(x, y) {
		Element.setStyle(this.tooltip, { top: y + "px", left: x + "px" });
		},

	hideTooltip: function(event) {
		new Element.hide(this.tooltip);
		},

	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;	
		}
	}
