/**
 * RokContentRotator - A smooth content fader
 * 
 * @version		1.1
 * 
 * @license		MIT-style license
 * @author		Djamil Legato <djamil [at] djamil.it>
 * @client		Andy Miller @ Rockettheme
 * @copyright	Author
 */
 
var RokContentRotator = new Class({
	options: {
		classname: '.rok-content-rotator',
		start: 1,
		hover: false,
		duration: 1000
	},
	
	initialize: function(options) {
		this.setOptions(options);
		this.container = $$(this.options.classname);
		this.links = [], this.contents = [], this.arrow = [], this.current = [];
		this.fx = {'arrow': [], 'content': []};
		
		(this.container).each(function(container, i) {
			this.fx.content[i] = [];
			this.links[i] = container.getElements(this.options.classname + '-link');
			
			var fx = this.fx, options = this.options;
			this.contents[i] = this.links[i].map(function(lnk, j) {
				var content = lnk.getParent().getNext();
				
				fx['content'][i][j] = new Fx.Style(content, 'opacity', {duration: options.duration, wait: false}).set(0);
				return content;
			});
			this.arrow[i] = new Element('div', {'class': 'arrow'}).inject(container);
			this.fx['arrow'][i] = new Fx.Style(this.arrow[i], 'top', {wait: false});
			
			new Element('div', {'class': 'clr'}).inject(container.getElement('ul'), 'after');
		}, this);

		(this.container).each(function(container, i) {
			(this.contents[i]).each(function(content, index) {
				if (index == (this.options.start - 1)) {
					this.links[i][index].addClass('active');
					content.setStyle('opacity', 1);
					this.current[i] = index;
					
					this.slideArrow(i, index);
				} 
			}, this);
		}, this);
		
		
		this.attachEvents();
	},
	
	attachEvents: function() {
		var self = this;
		this.links.each(function(container, i) {
			container.each(function(lnk, j) {
				lnk.addEvent((self.options.hover) ? 'mouseenter' : 'click', function(e) {
					e = new Event(e).stop();
					self.goTo(i, j);
				});
			});
		});
		
		return this;
	},
	
	slideArrow: function(container, index) {
		var link = this.links[container][index];
		this.links[container].removeClass('active');
		link.addClass('active');
		var position = link.getPosition();
		
		//alert("top: " + position.y + " - container: " + this.container[container].getPosition().y);
		
		var top = position.y - this.container[container].getPosition().y;
		
		this.fx['arrow'][container].start.delay(100, this.fx['arrow'][container], top);
		
		this.current[container] = index;
		return this;
	},
	
	fadeContent: function(container, index) {
		var content = this.contents[container];
		content.each(function(trash, i) {
			if (i == index) this.fx['content'][container][i].start(1);
			else this.fx['content'][container][i].start(0);
		}, this);
		
		return this;
	},
	
	next: function(container, current) {
		var link = this.links[container];
		var next = link[current+1] ? link[current+1] : link[0];
		
		return this.slideArrow(container, next).fadeContent(container, next);
	},
	
	previous: function(container, current) {
		var link = this.links[container];
		var previous = link[current-1] ? link[current-1] : link[link.length - 1];
		
		return this.slideArrow(container, previous).fadeContent(container, previous);
	},
	
	goTo: function(container, where) {
		var link = this.links[container];
		var to = link[where] ? link[where] : link[0];
		
		return this.slideArrow(container, where).fadeContent(container, where);
	}
});

RokContentRotator.implement(new Options, new Events);