/*
	--Mootools Tips Class AJAX Modification--
	Modified by Brad Wilkie (bradwilkie@darkprismdesign.com), 10/15/08
	
	Needs Mootools Ver. 1.2 Core and More, with standard Tips Plugin dependencies.
	
	The only difference form standard Tips is that 'ajax:true' must be in the
	options of the constructor, and the 'rel' attribute of any link to get AJAX
	content must have a url. Any link without a 'rel' attribute will default back
	to standard Tips procedure.
	
	Other Options:
	failText - (string) Text to display in tip if AJAX request fails. Defaults to "Failed to load".
	
	--Example Constructor (domready recommended)--
	
		window.addEvent("domready", function() {
			var myTips = new Tips($$("#tooltips a"), { ajax: true });
		});
		
*/

/* DO NOT MODIFY */
Tips.prototype.options.ajax = false;
Tips.prototype.options.failText = "Failed to load";
Tips.prototype.attach = function(elements) {
	$$(elements).each(function(element){
		if (this.options.ajax && element.get('rel')) {
			var text = element.retrieve('tip:text', "?AJAX?");
		} else {
			var text = element.retrieve('tip:text', element.get('rel') || element.get('href'));
			var title = element.retrieve('tip:title', element.get('title'));
		}
		var enter = element.retrieve('tip:enter', this.elementEnter.bindWithEvent(this, element));
		var leave = element.retrieve('tip:leave', this.elementLeave.bindWithEvent(this, element));
		element.addEvents({mouseenter: enter, mouseleave: leave});
		if (!this.options.fixed){
			var move = element.retrieve('tip:move', this.elementMove.bindWithEvent(this, element));
			element.addEvent('mousemove', move);
		}
		element.store('tip:native', element.get('title'));
		element.erase('title');
	}, this);
	return this;
}
Tips.prototype.elementEnter = function(event, element){
	
	$A(this.container.childNodes).each(Element.dispose);
	
	var title = element.retrieve('tip:title');
	
	if (title){
		this.titleElement = new Element('div', {'class': 'tip-title'}).inject(this.container);
		this.fill(this.titleElement, title);
	}
	
	var text = element.retrieve('tip:text');
	if (text) {
		this.textElement = new Element('div', {'class': 'tip-text'}).inject(this.container);
		if (text != "?AJAX?"){
			this.fill(this.textElement, text);
		} else {
			var me = this;
			if (tipRequest) tipRequest.cancel();
			var tipRequest = new Request.HTML({
				url: element.get('rel'),
				method: 'get',
				onSuccess: function(html) {
					me.fill(me.textElement, html);
				},
				onFailure: function() {
					me.fill(me.textElement, me.options.failText);
				}
			}).send();
		}
	}
	
	this.timer = $clear(this.timer);
	this.timer = this.show.delay(this.options.showDelay, this);

	this.position((!this.options.fixed) ? event : {page: element.getPosition()}, element);
}
Tips.prototype.position = function(event, element){
	var size = window.getSize(), scroll = window.getScroll();
	var tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight};
	var props = {x: 'left', y: 'top'};
	var elemDimen = {x: element.getWidth(), y: element.getHeight()};
	for (var z in props){
		var pos = event.page[z] + this.options.offsets[z];
		if ((pos + tip[z] - scroll[z]) > size[z]) {
			pos = event.page[z] - this.options.offsets[z] - tip[z];
			if (z == "x") pos += elemDimen[z];
		}
		this.tip.setStyle(props[z], pos);
	}
}
