/*
 * Mootools Class for element Cross-fading.
 * 
 */
var MooFader = new Class({
	
	Implements: [Options],  
	 
	options: {
		elementTag: 'li',
		duration: 500,
		interval: 10000,
		loop: true,
		fixIE: false
	},
	
	initialize: function(container, options){
		this.setOptions(options);	
		
		if ($type(container) == 'element')
			this.container = container;
		else
			this.container = $(String(container));
			
		if (!this.container) 
			return false;

		this.messages = this.container.getElements(this.options.elementTag);
		this.number_of_messages = this.messages.length;
		if (this.number_of_messages < 2) {			
			return false;
		}
		
		this.current_message = 0;
		this.previous_message = null;
		
		this.initMessages();
		
		// show the first message
		this.showMessage();
		
		// Install timer
		this.timer = this.showMessage.periodical(this.options.interval, this);

	},
	
	initMessages: function() {
		
		this.clones = new Array();
		
		this.messages.each(function(message, index) {
			
			// set to abs positioning
			message.setStyle('position', 'absolute');

			// save the clone
			if (this.options.fixIE) {
				var clone = message.clone();
				clone.setStyle('display', 'none');
				this.clones[index] = clone;
				clone.inject(this.container);
			}
						
			// set effects
			message.fadeIn = new Fx.Tween(message, {
				duration: this.options.duration,
				wait: false,
				onComplete: this.fadedIn.bindWithEvent(this)
			});			
			message.fadeOut = new Fx.Tween(message, {
				duration: this.options.duration,
				wait: false
			});
					
			
			// now set opacity to 0 on the message (expect first)
			if (message.getStyle('display') == 'none') {
				message.setStyle('opacity', 0);
			} 
			
			// now set opacity to 0 on the message (expect first)
			if (index == 0) {
				message.setStyle('opacity', 1);
				message.setStyle('display', 'block');
			} else {
				message.setStyle('opacity', 0);
				message.setStyle('display', 'none');
			}
			message.removeClass("hidden");
		}, this);
	},
	
	fadedIn: function() {
		if (this.options.fixIE) {
			this.messages[this.previous_message].setStyle('display', 'none');
			this.clones[this.previous_message].setStyle('display', 'block');
		}
	},
	
	showMessage: function()	{
		
		this.fadeMessage();
		
		if (this.messages[this.current_message].getStyle('opacity') == 0) {		
			this.messages[this.current_message].setStyle('display', 'block');
			this.messages[this.current_message].fadeIn.start('opacity', 0, 1);
		}
		
		
		if (this.current_message < this.number_of_messages-1) {
			this.previous_message = this.current_message;
			this.current_message = this.current_message + 1;
		} else {
			this.current_message = 0;
			this.previous_message = this.number_of_messages - 1;
			if (this.options.loop == false	) {
				$clear(this.timer);
			} 
		}
	},
	
	fadeMessage: function()	{
		if (this.previous_message != null) {
			if (this.options.fixIE) {
				this.clones[this.previous_message].setStyle('display', 'none');
				this.messages[this.previous_message].setStyle('display', 'block');
			}
			this.messages[this.previous_message].fadeOut.start('opacity', 1, 0);
			return true;
		} else {
			return false;
		}
	}
});
