var Marquee = new Class({
    Implements:[Options, Events],
    
    options:
    {
        rotate:true,
        duration:10000,
        onHideActive:$empty
    },
    
    element:null,
    slidesContainer:null,
    thumbContainer:null,
    slideClosures:[],
    
    currentSlide:-1,
    
    fx:null,
    
    initialize:function(element, options)
    {
        this.element = $(element);
        if(!$chk(this.element)){ return; }
        
        if(options != undefined && options != null)
            this.setOptions(options);
        
        this.slidesContainer = this.element.getElement(".slides");
        this.thumbContainer = this.element.getElement(".thumbnails");
        
        if(!$chk(this.slidesContainer) || !$chk(this.thumbContainer)){ return; }
        
        this.element.getElements(".slide").each(function(slide)
        {
            if(this.slideClosures.length == 4){ return; }
            
            this.setup_slide(slide);
        }.bind(this));
        
        this.start();
    },
    
    setup_slide:function(slide)
    {
        var self = this;
        var thumb = slide.getElement(".thumbnail");
        
        if($chk(thumb))
        {
            var a = thumb.getElement("a");
            if(!$chk(a))
            {
                a = new Element("a");
                a.set("html", thumb.get("html"));
                thumb.empty();
                thumb.grab(a);
            }
            
            this.thumbContainer.grab(thumb);
            
            this.addEvent("hideActive", function()
            {
                if(thumb.hasClass("active"))
                {
                    this.hideSlide(thumb, a, slide);
                }
            }.bind(this));
            
            this.hideSlide(thumb, a, slide);
            
            var activateClosure = function()
            {
                this.showSlide(thumb, a, slide);
            }.bind(this);
            
            a.addEvent("click", function(e)
            {
                e = new Event(e);
                e.stop();
                activateClosure();
            });
            
            this.slideClosures.push(
            {
                thumb: thumb, 
                slide: slide,
                activate: activateClosure
            });
            
            if(this.slideClosures.length == 1)
            {
                slide.addClass("first");
                thumb.addClass("first");
            }
            else if(this.slideClosures.length == 4)
            {
                slide.addClass("last");
                thumb.addClass("last");
            }
        }
    },
    
    hideSlide:function(thumb, a, slide)
    {
        thumb.removeClass("active");
        a.removeClass("active");
        
        if(slide.hasClass("active"))
        {
            slide.removeClass("active");
            //slide.addClass("hidden");
        
            new Fx.Tween(slide, {
                duration:"short",
                onComplete:function(){ slide.addClass("hidden"); }
            }).start("opacity", 1, 0);
        }
        else
        {
            slide.addClass("hidden");
        }
    },
    
    showSlide:function(thumb, a, slide)
    {
        if(a.hasClass("active")){ return; }
        
        this.fireEvent("hideActive");
        
        thumb.addClass("active");
        a.addClass("active");
        
        if(!slide.hasClass("active"))
        {
            slide.addClass("active");
            //slide.removeClass("hidden");
            
            var fx = new Fx.Tween(slide, {
                duration:"long",
                onComplete:function(){  }
            });
            
            fx.set("opacity", 0);
            slide.removeClass("hidden");
            fx.start("opacity", 0, 1);
        }
    },
    
    start:function()
    {
        var closure = function()
        {
            this.nextSlide();
            if(this.options.rotate)
            {
                setTimeout(closure, this.options.duration);
            }
        }.bind(this);

        closure();
    },
    
    nextSlide:function()
    {
        var nextSlideIndex = this.currentSlide + 1;
        
        if(nextSlideIndex >= this.slideClosures.length)
        {
            nextSlideIndex = 0;
        }
        
        if(this.slideClosures.length > 0)
        {
            this.currentSlide = nextSlideIndex;
            this.slideClosures[nextSlideIndex].activate();
        }
    }
    
    
});

if(loader != undefined) loader.add(marquee_init);

function marquee_init()
{
    var marquee = new Marquee("homepage_marquee", 
    {
        duration:15000,
        rotate:false
    });
}