/**

* Slidr.js
* Copyright (c) Fluid Creativity, 2009
*

* Implements a slider which scrolls content horizontally pausing between each internal element

*/



var Slidr = new Class({



    Implements: [Options, Events],



    options: {
        slideDelay: 3000,

        slideDuration: 500,

        slideWidth: 100,

        transition: 'quad',

        canPause: false,

        fadeIn: true

    },



    initialize: function(el, options) {

        this.el = $(el);

        this.setOptions(options);

        this.setupComponent();

    },



    setupComponent: function() {

        this.slider = new Element('div').setStyles({ 'position': 'relative', 'overflow': 'hidden', 'width': this.el.getParent().getWidth(), 'margin-left': 25 }).wraps(this.el);

        if (this.options.canPause) {

            this.el.addEvents({

                'mouseenter': function(e) {

                    this.store('mouseOver', true);

                },

                'mouseleave': function(e) {

                    this.eliminate('mouseOver');

                }

            });

        }

    },



    getInternalWidth: function() {

        var width = 0;


        this.el.getChildren().each(function(el) {

            width += el.getWidth() + el.getStyle('margin-left').toInt();

        });



        return width;

    },



    start: function() {

        var internalWidth = this.getInternalWidth();


        if (internalWidth > this.el.getSize().x) {

            this.el.setStyles({

                'width': internalWidth,

                'position': 'relative'

            });



            this.el.set('tween', {

                duration: this.options.slideDuration,

                transition: this.options.transition,

                link: 'cancel',

                onComplete: function() {

                    this.el.setStyle('left', 0)

						.getFirst().dispose()

						.removeClass('firstItem')

						.inject(this.el, 'bottom');


                    if (this.options.fadeIn) {

                        this.el.getFirst().addClass('firstItem').tween('opacity', 0, 1);

                        this.el.getFirst().getNext().setStyle('opacity', 0);

                    }

                    else {

                        this.el.getFirst().addClass('firstItem');

                    }



                    this.slideComponent.delay(this.options.slideDelay, this);

                } .bindWithEvent(this)

            });



            this.slideComponent.delay(this.options.slideDelay, this);

        }

    },



    slideComponent: function() {

        if (this.slider) {

            if (this.el.retrieve('mouseOver')) {

                this.slideComponent.delay(1000, this);

            } else {

                this.el.tween('left', -this.el.getFirst().getWidth() - this.el.getFirst().getStyle('margin-left').toInt()); //-this.options.slideWidth);

            }

        }

    },



    toElement: function() {

        return ($defined(this.slider) ? this.slider : this.el);

    }

});




Site = {

    init: function() {

        Site.setupPanels();

        if ($('NewsTicker') != null) {

            Site.ticker = new Slidr($('NewsTicker'), {

                slideWidth: 300,

                slideDuration: 1000,

                canPause: true,

                fadeIn: true,

                transition: 'quad'

            }).start();

        }



        if ($('rssTicker') != null) {

            Site.rssTicker = new Slidr($('rssTicker'), {

                slideDelay: 2000,

                slideDuration: 2000,

                canPause: true,

                fadeIn: false,

                transition: 'linear'

            }).start();

        }

    },



    formFocus: function() {
        this.store('val', this.value);

        this.value = '';

    },



    formBlur: function() {

        if (this.value == '') {

            this.value = this.retrieve('val');

        }

    },



    setupPanels: function() {

        if ($('collapser') == null) return;

        //var panels = $('collapser').getElements('div.menuTable');
        var panels = document.getElements('#collapser div.menuTable');


        Site.currentItem = panels.get(0);

        panels.each(function(el) {

            var expand = new Element('span').set('class', 'expand');



            expand.injectInside(el.getPrevious());



            el.store('origHeight', el.getSize().y).set('tween', { duration: 500 });



            var title = el.getPrevious().addEvent('click', function(e) {

                var elem = this.getNext();



                Site.currentItem = elem;

                Site.closePanels();

                elem.tween('height', elem.getStyle('height').toInt() > 0 ? 0 : elem.retrieve('origHeight'));



                if (elem.getStyle('height').toInt() > 0) {

                    expand.innerHTML = '';

                }

                else {

                    expand.innerHTML = '';

                }

            });

        });

        Site.closePanels();

    },


    closePanels: function() {

        var panels = $('collapser').getElements('div.menuTable');



        panels.each(function(el) {

            if (Site.currentItem != el) {

                if (el.getElement('span.expand') != null)

                    el.getElement('span.expand').innerHTML = '';

                el.tween('height', 0);

            }

        });

    }

};

window.addEvent('domready', Site.init);
