var Tooltip = {
	config: {
		offset: {
			x: 16,
			y: 16
		}
	},
	set: function(o) {
		var e = o.element, m = o.content, t = o.title, g = o.target,
		os = o.onshow, om = o.onmove, oh = o.onhide, c = o.className || 'tooltip',
		f = o.offset, s =  o.style, cfg = Tooltip.config, df = cfg.offset, p = o.position;

		e = I(e);

		// Se non è stato settato un target uso l'elemento del tooltip
		if(!g) g = e;

		// Cerco il testo da inserire negli attributi title o rel
		if(!m) m = Dom.getAttribute(e, 'title');
		if(!m) m = Dom.getAttribute(e, 'rel');

		if(!s) s= {};
		// Aggiungo position:relative agli stili
		s.position = 'relative';

		// Creo l'elemento del tooltip e gli eventuali per il titolo e contenuto
		var b = ['div', {
			style: s,
			className: c
		}];
		if(t) b.push(['div', {className: 'title'}, t]);
		if(m) b.push(['div', {className: 'content'}, m]);

		b = Dom.create(b);

		// Creo l'elemento contenitore
		var d = ['div', {
				style: {
					position: 'absolute',
					top: '0px',
					left: '0px',
					zIndex: '1000',
					display: 'none'
				}
			},
			b
		];
		d = Dom.create(d, Dom.body());

		// Cerco eventuali offset
		var fx = (f || df).x, fy = (f || df).y, n;

		if(p && p.constructor == Array) {
			s = d.style;
			s.visibility = 'hidden';
			s.display = 'block';
			n = Element.size(b);
			s.visibility = '';
			s.display = 'none';
			c = p[1];
			// Allineamento orrizzontale
			if(c == 2 || c == 5 || c == 8) fx -= Math.round(n[0] / 2);
			else if(c == 3 || c == 6 || c == 9) fx -= n[0];
			// Allineamento verticale
			if(c >= 4 && c <= 6) fy -= Math.round(n[1] / 2);
			if(c >= 7 && c <= 9) fy -= n[1];
			p = p[0];
		}

		// Setto gli eventi
		Event.add(e, 'mouseover', function(ev){
			var s = d.style, m = Event.mousePosition(ev);

			if(p) m = Element.position(g, {alignment:p});
			s.left = (m[0] + fx) + 'px';
			s.top = (m[1] + fy) + 'px';

			if(os) os.call(b, ev);
			s.display = 'block';
		});
		Event.add(e, 'mousemove', function(ev){
			var s = d.style, m = Event.mousePosition(ev);

			if(p) m = Element.position(g, {alignment:p});
			s.left = (m[0] + fx) + 'px';
			s.top = (m[1] + fy) + 'px';

			if(om) os.call(b, ev);
		});
		Event.add(e, 'mouseout', function(ev){
			var s = d.style;
			if(oh) oh.call(b, ev);
			///s.display = 'none';
		});

	}
};