/*  Jentla Tech, http://www.jentla.com  Copyright (c) 2009 ZacWareTech Pty. Ltd.

 Released under the GNU General Public License
*/

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);
	
	content.setStyle('display','none');
	
        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);
		content.setStyle('display','');
                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);
			  content[i].setStyle('display','');
		}
                else{
			 this.fx['content'][container][i].start(0);
			 content[i].setStyle('display','none');
		}
            }, 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);

