/**

 * ToolTips - show tooltips on hover

*/



var ToolTip = new Class({



	initialize: function(options) {



		this.options = Object.extend({



			tipper: null,		// element displaying the tooltip



			message:null,		// some predefined message



			ajax:null,			// show message from ajax / if message is not null, this will override it



			ToolTipClass:'ToolTips',	// tooltip display class



			followMouse:false,	// follow mouse on move



			sticky:false,		// remove tooltip if closed



			fromTop: 15,		// distance from mouse or object



			fromLeft: 15,



			duration: 300,		// fade effect transition duration



			fadeDistance: 20    // the distance the tooltip sarts fading in/out



		}, options || {});



		if(!$(this.options.tipper)) return;		



		this.el = $(this.options.tipper);



		this.start();



		this.visible = 0;



	},



	



	start: function(){



		this.createContainer();



		



		this.header.setHTML(this.el.title);



		this.el.set({'title':''});



		



		if(!this.options.ajax){



			this.message.setHTML(this.options.message);



		}else{



			this.message.removeClass('message');



			this.message.addClass('message_loading');



			new Ajax(this.options.ajax, {



				method: 'get',



				onComplete: function() {



					this.message.removeClass('message_loading');



					this.message.addClass('message');



				}.bind(this),



				update: this.message



			}).request();



		}



		



		this.fx = new Fx.Styles(this.container, {duration:this.options.duration, wait:false, transition:Fx.Transitions.Sine.easeOut});



		



		this.el.addEvent( this.options.followMouse ? 'mousemove' : 'mouseenter', this.showToolTip.bind(this) );



		if(!this.options.sticky)



			this.el.addEvent('mouseleave', this.hideToolTip.bind(this));	



		else{



			this.closeTip = new Element('a').set({'class':'sticky_close','href':'#'}).setStyles({'position':'absolute','top':3,'right':3});



			this.closeTip.injectInside(this.header);	



			this.closeTip.addEvent('click', this.hideToolTip.bind(this));				



		}		



	},



	



	showToolTip: function(event){



		var event = new Event(event);



		



		this.elemHeight = this.options.followMouse ? 0 : this.el.getCoordinates().height;		



		this.top = this.options.followMouse ? event.client.y : this.el.getPosition().y;



		var left = this.options.followMouse ? event.client.x : this.el.getPosition().x;



		



		var top_dist = this.visible == 1 ? 



					   this.top + this.options.fromTop + this.elemHeight : 



					   this.top + this.options.fromTop + this.elemHeight + this.options.fadeDistance;



		



		this.container.setStyles({'top': top_dist,'left':left+this.options.fromLeft,'display':'block', 'z-index':'110000'});		



		this.fx.start({'opacity':1, 'top':this.top + this.options.fromTop + this.elemHeight});	



		this.visible = 1;



	},



	



	hideToolTip: function(event){		



		new Event(event).stop();



		this.container.setStyles({'z-index':'100000'});



		this.fx.start({'opacity':0,'top': this.top + this.options.fromTop + this.elemHeight + this.options.fadeDistance});



		this.visible = 0;



	},



	



	createContainer: function(){



		this.container = new Element('div').set({'class':this.options.ToolTipClass}).setStyles({'position':'absolute','opacity':0,'display':'none','z-index':'100000'}).injectInside(document.body);



		this.header = new Element('div').set({'class':'top'});



		this.message = new Element('div').set({'class':'message'});



		this.footer = new Element('div').set({'class':'footer'});



		this.container.adopt(this.header, this.message, this.footer);		



	},



	



	/*debug function - sterge dupa terminare*/



	alert: function(message){



		$('debug').innerHTML += '<br>'+message;



	}



});