/*
	SlideItMoo v1.0 - Image slider
	(c) 2007-2008 Constantin Boiangiu <http://www.php-help.ro>
	MIT-style license.
*/
var SlideItMoo = new Class({

    initialize: function(options) {
    try {
        this.options = $extend({
            itemsVisible: 5,
            showControls: 1,
            autoSlide: 0,
            transition: Fx.Transitions.linear,
            currentElement: 0,
            thumbsContainer: 'thumbs',
            elementScrolled: 'thumb_container',
            overallContainer: 'gallery_container'
        }, options || {});

        this.images = $(this.options.thumbsContainer).getElements('a');
        // assumes that all thumbnails have the same width

            this.image_size = this.images[0].getSize();

        // resizes the container div's according to the number of itemsVisible thumbnails
        this.setContainersSize();

        this.myFx = new Fx.Scroll(this.options.elementScrolled, { transition: this.options.transition });
        // adds the forward-backward buttons
        if (this.images.length > this.options.itemsVisible) {
            this.fwd = this.addControlers('addfwd');
            this.bkwd = this.addControlers('addbkwd');
            this.forward();
            this.backward();
            /* if autoSlide is not set, scoll on mouse wheel */
            if (!this.options.autoSlide) {
                $(this.options.thumbsContainer).addEvent('mousewheel', function(ev) {
                    new Event(ev).stop();
                    ev.wheel < 0 ? this.fwd.fireEvent('click') : this.bkwd.fireEvent('click');
                } .bind(this));
            }
            else {
                this.startIt = function() { this.fwd.fireEvent('click') } .bind(this);
                this.autoSlide = this.startIt.periodical(this.options.autoSlide, this);
                this.images.addEvents({
                    'mouseover': function() {
                        $clear(this.autoSlide);
                    } .bind(this),
                    'mouseout': function() {
                        this.autoSlide = this.startIt.periodical(this.options.autoSlide, this);
                    } .bind(this)
                })
            }
        };

        // if there's a specific default thumbnail to start with, slide to it
        if (this.options.currentElement !== 0) {
            this.options.currentElement -= 1;
            this.slide(1);
        }
    }
    catch (e)
		{ }
    },

    setContainersSize: function() {
        $(this.options.overallContainer).set({
            styles: {
                'width': this.options.itemsVisible * 140 + 50 * this.options.showControls + (this.options.itemsVisible - 1) * 3
                //'width': 500
            }
        });
        $(this.options.elementScrolled).set({
            styles: {
                'width': this.options.itemsVisible * 135 + (this.options.itemsVisible - 1) * 3
            }
        });
    },

    forward: function() {
        this.fwd.addEvent('click', function() {
            this.slide(1);
        } .bind(this));
    },

    backward: function() {
        this.bkwd.addEvent('click', function() {
            this.slide(-1);
        } .bind(this))
    },

    addControlers: function(cssClass) {
        element = new Element('div', {
            'class': cssClass,
            styles: {
                'display': this.options.showControls ? '' : 'none'
            }
        }).injectInside($(this.options.overallContainer));
        return element;
    },

    slide: function(step) {
        /* if autoslice is on, when end is reached, go back to begining */
        if (this.options.autoSlide && this.options.currentElement >= this.images.length - this.options.itemsVisible) {
            this.options.currentElement = -1;
        }

        if ((this.options.currentElement < this.images.length - this.options.itemsVisible && step > 0) || (step < 0 && this.options.currentElement !== 0)) {
            this.myFx.cancel();
            this.options.currentElement += step;
            this.myFx.toElement(this.images[this.options.currentElement]);
        }
    }
})