(function($){
    var homeSlider = {
        current_active              : 0,
        current_scroll              : 0,
        max_visible_small_images    : 5,
        li_width                    : 0,
        timeout                     : null,

        init : function(elem, options)
        {
            homeSlider.full_images  = $(options.full_images);
            homeSlider.small_images = $(options.small_images);
            homeSlider.next_button  = $(options.next_button);
            homeSlider.prev_button  = $(options.prev_button);
            homeSlider.fade_time    = options.fade_time;
            homeSlider.interval     = options.interval;

            homeSlider.li_width = homeSlider.small_images.eq(0).parent().outerWidth();
            //$('#small_images').width( homeSlider.li_width * homeSlider.small_images.size() + 20);

            homeSlider.small_images.click( homeSlider.onThumbClick );
            homeSlider.activateArrows();

            homeSlider.next_button.click( homeSlider.onNextButtonClick );
            homeSlider.prev_button.click( homeSlider.onPrevButtonClick );


            homeSlider.setTimeout();
        },

        setTimeout : function()
        {
            homeSlider.timeout = setInterval( homeSlider.onTimeout, homeSlider.interval );
        },

        onTimeout : function()
        {
            if( homeSlider.current_active + 1 < homeSlider.small_images.size()){
                homeSlider.small_images.eq( homeSlider.current_active + 1 ).click();
            }
            else{
                homeSlider.small_images.eq( 0 ).click();
            }
            //homeSlider.setTimeout();
        },

        onThumbClick : function(event)
        {
            var a = $(event.currentTarget);
            
            if(!a.parents('li').hasClass('active')){
                clearInterval( homeSlider.timeout );
                
                var current = homeSlider.current_active;
                var index = homeSlider.small_images.index(a);
                homeSlider.small_images.eq( current ).parents('li').removeClass('active');

                homeSlider.full_images.eq( current ).stop(true, true).fadeOut( homeSlider.fade_time );
                homeSlider.full_images.eq( index ).stop(true, true).fadeIn( homeSlider.fade_time );

                homeSlider.current_active = index;

                a.parents('li').addClass('active');
                homeSlider.activateArrows();

                homeSlider.setTimeout();
            }
            
            return false;
        },

        scroll : function(direction)
        {
            var left = -direction * homeSlider.li_width;
            $('#small_images').stop(true, true).animate({left : '+=' + left}, 500);
            homeSlider.current_scroll += direction;
        },

        onNextButtonClick : function()
        {
            if(homeSlider.next_button.hasClass('active')){
                if(     homeSlider.current_active - homeSlider.current_scroll > homeSlider.max_visible_small_images - 3
                    &&  homeSlider.current_active < homeSlider.small_images.size() - 2){
                    homeSlider.scroll(1);
                }
                homeSlider.small_images.eq( homeSlider.current_active + 1 ).click();
            }
            return false;
        },

        onPrevButtonClick : function()
        {
            if(homeSlider.prev_button.hasClass('active')){
                if(     homeSlider.current_active - homeSlider.current_scroll == 1
                    &&  homeSlider.current_active > 1){
                    homeSlider.scroll(-1);
                }
                homeSlider.small_images.eq( homeSlider.current_active - 1 ).click();
            }
            return false;
        },

        activateArrows : function()
        {
            var size = homeSlider.small_images.size();
            var max = homeSlider.max_visible_small_images;

            if(size > homeSlider.current_active + 1){
                homeSlider.next_button.addClass('active');
            }
            else{
                homeSlider.next_button.removeClass('active');
            }
            
            if(homeSlider.current_active > 0){
                homeSlider.prev_button.addClass('active');
            }
            else{
                homeSlider.prev_button.removeClass('active');
            }
        }
    };
    
    $.fn.homeSlider = function(options){
        var def = {full_images     : '#full_images li',
                    small_images    : '#small_images a',
                    next_button     : '#main_slider_controls_next',
                    prev_button     : '#main_slider_controls_prev',
                    fade_time       : 1000,
                    interval        : 7000
                  };
                  
        var opts = $.extend(def, options);

        return this.each( function(){
            homeSlider.init($(this), opts);
        });
    };
})(jQuery);

