var SmokyTooltip = new Class({
	
	Implements: [Options],
	
	options: {
		toolTipItemClass: 'smokyToolTip',
		mode: 1
	},
	
	initialize: function(options) {
		this.setOptions(options);
		this.buildElement();
		this.buildToolTipItems();
	},
	
	modes: [
		{'position': 'centerTop', 'edge': 'centerBottom', 'classN': ''},
		{'position': 'centerBottom', 'edge': 'centerTop', 'classN': 'bottomToolTip'},
		{'position': 'centerLeft', 'edge': 'centerRight', 'classN': 'leftToolTip'},
		{'position': 'centerRight', 'edge': 'centerLeft', 'classN': 'rightToolTip'}
	],
	
	buildElement: function(){
		var tooltip = this.tooltip = new Element('div', {'class': 'mySmokyToolTip'});
		var top = new Element('div', {'class': 'top'});
		(new Element('div', {'class': 'l'})).inject(top);
		(new Element('div', {'class': 'r'})).inject(top);
		(new Element('div', {'class': 'c'})).inject(top);
		(new Element('div', {'class': 'clear'})).inject(top);
		top.inject(tooltip);
		var middle = new Element('div', {'class': 'middle'});
		this.toolTipContent = (new Element('div', {'class': 'c'})).inject(middle);
		middle.inject(tooltip);
		var bottom = new Element('div', {'class': 'bottom'});
		(new Element('div', {'class': 'l'})).inject(bottom);
		(new Element('div', {'class': 'r'})).inject(bottom);
		(new Element('div', {'class': 'c'})).inject(bottom);
		(new Element('div', {'clas': 'clear'})).inject(bottom);
		bottom.inject(tooltip);	
		tooltip.inject(document.id(document.body));
		tooltip.addEvents({
			'mouseleave': function(){
				this.hideToolTip();
			}.bind(this),
			'mouseenter': function(){
				if(this.hideTimeout){
					$clear(this.hideTimeout);
				}	
			}.bind(this)
		});
	},
	
	hideToolTip: function(){
		this.tooltip.setStyle('visibility', 'hidden');
		this.tooltip.className = 'mySmokyToolTip';	
	},
	
	buildToolTipItems: function(){
		var items = $(document.body).getElements('[class*='+this.options.toolTipItemClass+']');
		items.each(function(item,index){
			item.t = item.title;
			item.title = '';
			item.addEvents({
				'mouseover': function(ev){
					if(this.hideTimeout){
						$clear(this.hideTimeout);
					}
					var el = ev.target;
					var pos, edge, classN, modeCont;
					var mode = el.t.match(/#mode=([1-4])$/);
					mode = (mode ? mode[1] : this.options.mode) - 1;
					modeCont = this.modes[mode];
					pos = modeCont.position;
					edge = modeCont.edge;
					classN = modeCont.classN;
					
					this.toolTipContent.set('html', el.t.replace(/#mode=[1-4]$/,''));
					this.tooltip.position({relativeTo: el, position: pos, edge: edge, offset: {y:-$(document.body).getStyle('top').toInt()}});
					this.tooltip.addClass(classN);
					this.tooltip.setStyle('visibility', 'visible');
				}.bind(this),
				'mouseout': function(){
					this.hideTimeout = this.hideToolTip.bind(this).delay(100);
				}.bind(this)
			});
		}.bind(this));
	}
	
});
