var ChronoTips = new Class({

		options: {

			onShow: function(tip){

				tip.setStyle('visibility', 'visible');

			},

			onHide: function(tip){

				tip.setStyle('visibility', 'hidden');

			},

			maxTitleChars: 30,

			showDelay: 100,

			hideDelay: 100,

			className: 'tool',

			offsets: {'x': 16, 'y': 16},

			fixed: false

		},

		initialize: function(elements, lasthope,options){

			this.setOptions(options);

			this.lasthope = lasthope;

			this.toolTip = new Element('div', {

				'class': 'cf_'+this.options.className + '-tip',

				'id': this.options.className + '-tip-' + this.options.elementid,

				'styles': {

					'position': 'absolute',

					'top': '0',

					'left': '0',

					'visibility': 'hidden'

				}

			}).inject(document.body);

			this.wrapper = new Element('div').inject(this.toolTip);

			$$(elements).each(this.build, this);

			if (this.options.initialize) this.options.initialize.call(this);

		},

	

		build: function(el){

			el.$tmp.myTitle = (el.href && el.getTag() == 'a') ? el.href.replace('http://', '') : (el.rel || false);

			if (el.title){

				var dual = el.title.split('::');

				if (dual.length > 1){

					el.$tmp.myTitle = dual[0].trim();

					el.$tmp.myText = dual[1].trim();

				} else {

					el.$tmp.myText = el.title;

				}

				el.removeAttribute('title');

			} else {

				var dual = this.lasthope.split('::');

				if (dual.length > 1){

					el.$tmp.myTitle = dual[0].trim();

					el.$tmp.myText = dual[1].trim();

				} else {

					el.$tmp.myText = el.title;

				}

			}

			if (el.$tmp.myTitle && el.$tmp.myTitle.length > this.options.maxTitleChars) el.$tmp.myTitle = el.$tmp.myTitle.substr(0, this.options.maxTitleChars - 1) + "&hellip;";

			el.addEvent('mouseenter', function(event){

				this.start(el);

				if (!this.options.fixed) this.locate(event);

				else this.position(el);

			}.bind(this));

			if (!this.options.fixed) el.addEvent('mousemove', this.locate.bindWithEvent(this));

			var end = this.end.bind(this);

			el.addEvent('mouseleave', end);

			el.addEvent('trash', end);

		},

		start: function(el){

			this.wrapper.empty();

			if (el.$tmp.myTitle){

				this.title = new Element('span').inject(new Element('div', {'class': 'cf_'+this.options.className + '-title'}).inject(this.wrapper)).setHTML(el.$tmp.myTitle);

			}

			if (el.$tmp.myText){

				this.text = new Element('span').inject(new Element('div', {'class': 'cf_'+this.options.className + '-text'}).inject(this.wrapper)).setHTML(el.$tmp.myText);

			}

			$clear(this.timer);

			this.timer = this.show.delay(this.options.showDelay, this);

		},

		end: function(event){

			$clear(this.timer);

			this.timer = this.hide.delay(this.options.hideDelay, this);

		},

	

		position: function(element){

			var pos = element.getPosition();

			this.toolTip.setStyles({

				'left': pos.x + this.options.offsets.x,

				'top': pos.y + this.options.offsets.y

			});

		},

	

		locate: function(event){

			var win = {'x': window.getWidth(), 'y': window.getHeight()};

			var scroll = {'x': window.getScrollLeft(), 'y': window.getScrollTop()};

			var tip = {'x': this.toolTip.offsetWidth, 'y': this.toolTip.offsetHeight};

			var prop = {'x': 'left', 'y': 'top'};

			for (var z in prop){

				var pos = event.page[z] + this.options.offsets[z];

				if ((pos + tip[z] - scroll[z]) > win[z]) pos = event.page[z] - this.options.offsets[z] - tip[z];

				this.toolTip.setStyle(prop[z], pos);

			};

		},

	

		show: function(){

			if (this.options.timeout) this.timer = this.hide.delay(this.options.timeout, this);

			this.fireEvent('onShow', [this.toolTip]);

		},

	

		hide: function(){

			this.fireEvent('onHide', [this.toolTip]);

		}

	});

	ChronoTips.implement(new Options);

	ChronoTips.implement(new Events);

	window.addEvent('domready', function() {

		$ES('.tooltipimg').each(function(ed){

			var Tips2 = new ChronoTips(ed, $E('div.tooltipdiv', ed.getParent().getParent()).getText(), {elementid:ed.getParent().getParent().getFirst().getNext().getProperty('id')+'_s'});

		});

	});
