
var Nicetitle = Class.create();

Nicetitle.prototype = {
	initialize: function(element) {
		this.element = $(element);
		this.active = false;
		this.STD_WIDTH = 300;
		
		this.nicetitle = Builder.node('div', {className: 'nicetitle'}, [
	    Builder.node('p', {className: 'text'}, this.element.getAttribute("title") ),
	    Builder.node('p', {className: 'destination'}, this.element.getAttribute("href") )
	  ]);
		
		this.element.setAttribute('title', '');
		
		Event.observe(this.element, "mouseover", this.show.bindAsEventListener(this));
		Event.observe(this.element, "mouseout", this.hide.bindAsEventListener(this));
		Event.observe(this.element, "focus", this.show.bindAsEventListener(this));
		Event.observe(this.element, "blur", this.hide.bindAsEventListener(this));

		Event.observe(this.element, "mousemove", this.followMouse.bindAsEventListener(this));
		
		Element.hide(this.nicetitle);
		document.getElementsByTagName("body")[0].appendChild(this.nicetitle);
	},
	
	show: function(e) {
		if(!this.active) {
			this.nicetitle.style.position = 'absolute';
		
			/* Width calc, from original nicetitle.js */
			h = this.element.href?this.element.getAttribute("href").length:this.element.getAttribute("title").length;
			t = this.element.getAttribute("title").length.length;
			h_pixels = h*6;
			t_pixels = t*10;
		
			if (h_pixels > this.STD_WIDTH) {
				w = h_pixels;
			} else if ((this.STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
				w = t_pixels;
			} else if ((this.STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
				w = h_pixels;
			} else {
				w = this.STD_WIDTH;
			}
			
			this.nicetitle.style.width = w + 'px';    
		
			Position.clone(this.element, this.nicetitle, {setHeight: false, setWidth: false, offsetTop: this.element.offsetHeight});
			Effect.Appear(this.nicetitle, {duration: 0.3});
			this.active = true;
		}
	},
	
	hide: function(e) {
		if(this.active) {
			Effect.Fade(this.nicetitle, { duration: 0.5 });
			this.active = false;
			
		}
	},
	
	followMouse: function(e) {
		
		var offsetLeft = 0;
		var securityOffset = 25;
		
		if (window.innerWidth && ((Event.pointerX(e) + this.STD_WIDTH + securityOffset) > window.innerWidth)) {
        offsetLeft = Event.pointerX(e) + this.STD_WIDTH + securityOffset - window.innerWidth;
    }
    if (document.body.scrollWidth && ((Event.pointerX(e) + this.STD_WIDTH + securityOffset) > document.body.scrollWidth)) {
        offsetLeft = Event.pointerX(e) + this.STD_WIDTH + securityOffset - document.body.scrollWidth;
    }
    
		
		this.nicetitle.style.left = Event.pointerX(e) - offsetLeft + 'px';
		this.nicetitle.style.top = Event.pointerY(e) + this.element.offsetHeight + 'px';
	}
}

Event.observe(window, 'load', function(e){
	$$("a").each ( function(element) {
		if($(element).getAttribute('title')) {
			new Nicetitle(element);
		}
	});
});