if (Prototype.Browser.IE) {
  Prototype.Browser.IEVersion = parseFloat(navigator.appVersion.split(';')[1].strip().split(' ')[1]);
  Prototype.Browser.IE6 =  Prototype.Browser.IEVersion == 6;
  Prototype.Browser.IE7 =  Prototype.Browser.IEVersion == 7;
}

var tooltipIndex = 0;
var toolTip = Class.create();
toolTip.prototype = {

	element:null,
	content:null,
	target:null,
	unique:null,
	eventMouseOver:null,
	eventMouseOut:null,
	eventMouseMove:null,
	elementWidth: 0,
	elementHeight: 0,

	initialize: function (element) {
		Element.extend(element);
		this.options = Object.extend({
			default_css: false,
			margin: "0px",
			padding: "5px",
			backgroundColor: "#d6d6fc",
			min_distance_x: 5,
			min_distance_y: 5,
			delta_x: 0,
			delta_y: 0,
			zindex: 1000
		}, arguments[2] || {});
		this.element = element;
		this.content = element.readAttribute("rel");
		if(this.content) {
			this.content = this.content.replace(new RegExp('\\+','g'),' ');
			this.content = unescape(this.content);
			if(element.readAttribute("rev")) {
				this.unique = true;
				this.target = $(element.readAttribute("rev"));
			} else {
				if($("tooltip"+tooltipIndex)) {
					this.target = $("tooltip"+tooltipIndex);
				} else {
					this.target = new Element("div", {id:"tooltip"+tooltipIndex});
					this.target.addClassName("tooltipOverlay");
					document.body.appendChild(this.target);
					this.target.innerHTML = this.content;
					tooltipIndex++;
					Element.hide(this.target);
				}
			}
			this.eventMouseOver = this.over.bindAsEventListener(this);
			this.eventMouseOut   = this.out.bindAsEventListener(this);
			this.eventMouseMove  = this.move.bindAsEventListener(this);
			this.registerEvents();
		}
	},

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

	over: function (e) {
		if(this.unique) {
			this.target.innerHTML = this.content;
		} else {
			var dimensions = Element.getDimensions(this.target);
			this.elementWidth = dimensions.width;
			this.elementHeight = dimensions.height;
			Event.stop(e);
			this.move(e);
			Element.show(this.target);
		}
	},

	out: function (e) {
		if(this.unique) {
			this.target.innerHTML = '';
		} else {
			Element.hide(this.target);
		}
	},
	
	move: function(event) {
		Event.stop(event);
		var mouse_x = Event.pointerX(event);
		var mouse_y = Event.pointerY(event);
		if((this.elementWidth + mouse_x) >= ( this.getWindowWidth() - this.options.min_distance_x) ) {
			mouse_x = mouse_x - this.elementWidth;
			mouse_x = mouse_x - this.options.min_distance_x;
		} else {
			mouse_x = mouse_x + this.options.min_distance_x;
		}
		this.setStyles(mouse_x + this.options.min_distance_x, mouse_y + this.options.min_distance_y);
	},
	
	setStyles: function(x, y) {
		Element.setStyle(this.target, { position:'absolute',
			top:y + this.options.delta_y + "px",
			left:x + this.options.delta_x + "px",
			zindex:this.options.zindex
		});
		if (this.options.default_css){
			Element.setStyle(this.target, {
				margin:this.options.margin,
				padding:this.options.padding,
				backgroundColor:this.options.backgroundColor,
				zindex:this.options.zindex
			});
		}	
	},
	
	getWindowWidth: function() {
		return Prototype.Browser.IE ? document.body.clientWidth : window.innerWidth;
	},
	
	getWindowHeight: function() {
		return Prototype.Browser.IE ? document.body.clientHeight : window.innerHeight;
	}

}
