var Dieffe = {
    init: function() {
        $('.carousel_wrapper').each(function(index) {
            new Carousel($(this));
        });
        
        $('.all_lines').each(function(index) {
            var all_lines = $(this),
                hidden_carousels = $(this).children('.carousel_module:hidden');
            
            $(this).siblings('nav').children('a.viewall').bind('click', function(event) {
                if ($(this).hasClass('expanded')) {
                    // hide em
                    hidden_carousels.slideUp();
                    $(this).removeClass('expanded');
                    $(this).text('View All Lines');
                    return false;
                } else {
                    // show em
                    hidden_carousels.slideDown();
                    $(this).addClass('expanded');
                    $(this).text('Hide All Lines');
                    return false;
                }
            });
        });

// END INIT CAROUSEL WRAP          

// BEGIN INDEX PAGE LARGE CAROUSEL       
        //vars
        var lastli = $('#main ul li').size(),
            liprev = 1,
            lion = 2,
            linext = 3;

        $('#mainbox ul li').removeClass("yesblock").addClass("noblock");
        $("#mainbox ul li:nth-child("+ lion +")").addClass("yesblock").removeClass("noblock");
        $("#mainbox ul li:nth-child("+ linext +")").addClass("yesblock").removeClass("noblock");
        $("#mainbox ul li:nth-child("+ liprev +")").addClass("yesblock").removeClass("noblock");

        //take caption from img title tag
        var title = $(".select img").attr("title");

        // Next Button
        $('#mainbox a.linext').click(function() { 
            $('.prevblock').removeClass('prevblock');
            $('.nextblock').removeClass('nextblock');

            theul = $('.select img');
            selected = $('.select');
            prev = $('.select').prev();
            next = $('.select').next();

            $(theul).fadeOut('fast', function () {
                selected.removeClass('select').addClass("prevblock").next().addClass('select').addClass("yesblock").removeClass("noblock");  
                prev.removeClass("yesblock").addClass("noblock");
                next.next().fadeIn('fast').addClass("yesblock").addClass("nextblock").removeClass("noblock");

                // move the first item and put it as last item
                $('#mainbox li:last').after($('#mainbox li:first'));
                $(theul).fadeIn('fast');
            });

            return false;
        });
//Image Clicks

        // Next Image
        $('.nextblock').live('click', function() {
            $('.prevblock').removeClass('prevblock');
            $('.nextblock').removeClass('nextblock');
            
            theul = $('.select img');
            selected = $('.select');
            prev= $('.select').prev();
            next = $('.select').next();
            
            $(theul).fadeOut('fast', function () {
                selected.removeClass('select').addClass("prevblock").next().addClass('select').addClass("yesblock").removeClass("noblock");
                prev.removeClass("yesblock").addClass("noblock");
                next.next().fadeIn('fast').addClass("yesblock").addClass("nextblock").removeClass("noblock");
                
                //move the first item and put it as last item
                $('#mainbox li:last').after($('#mainbox li:first'));
                $(theul).fadeIn('fast');
            });
            return false;
        });

        // Prev Image
        $('.prevblock').live('click', function() {
            $('.prevblock').removeClass('prevblock');
            $('.nextblock').removeClass('nextblock');
            $('#mainbox li:first').before($('#mainbox li:last'));
            
            theul = $('.select img');
            selected = $('.select');
            prev= $('.select').prev();
            next = $('.select').next();
            
            $(theul).fadeOut('fast', function () {
                $(selected).removeClass('select').addClass("nextblock").prev().addClass('select').addClass("yesblock").removeClass("noblock");
                $(prev).prev().addClass("yesblock").addClass("prevblock").removeClass("noblock");
                $(next).removeClass("yesblock").addClass("noblock");
                $(theul).fadeIn('fast');
            });
            return false;
        });
// Buttons
        // Prev Button
        $('#mainbox a.liprev').click(function() {
            $('.prevblock').removeClass('prevblock');
            $('.nextblock').removeClass('nextblock');
            $('#mainbox li:first').before($('#mainbox li:last'));
            
            theul = $('.select img');
            selected = $('.select');
            prev= $('.select').prev();
            next = $('.select').next();
            
            $(theul).fadeOut('fast', function () {
                $(selected).removeClass('select').addClass("nextblock").prev().addClass('select').addClass("yesblock").removeClass("noblock");
                $(prev).prev().addClass("yesblock").addClass("prevblock").removeClass("noblock");
                $(next).removeClass("yesblock").addClass("noblock");
                $(theul).fadeIn('fast');
            });
            return false;
        });
        
        
    }
};


var Carousel = function() {
    var self = this,
        args = arguments;
    
    // Constants
    self.VISIBLE = 6;
    
    self.init.apply(self, args);
}

Carousel.prototype = {
    init: function(wrapper) {
        var self = this;
        
        self.wrapper = wrapper;
        self.ul = wrapper.children('ul');
        self.items = self.ul.children('li');
        self.count = self.items.size();
        
        if (self.count > self.VISIBLE) {
            // If there are hidden items, we'll init the scroller mechanism.
            self.initScroller();
        }
        
        // Create the fancybox image slideshow for each carousel automatically
        self.ul.find('a').fancybox({
            'transitionIn': 'fade',
            'transitionOut': 'fade',
            'titlePosition': 'over',
            'titleFormat': function(title, currentArray, currentIndex, currentOpts) {
                return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
            }
        });
    },
    
    // Called when there are more than the visisble number of items, 
    // will add the next/prev items and get things movin.
    initScroller: function() {
        var self = this;
        
        self.currentOffset = 0;
        self.itemWidth = $(self.items.get(0)).width();
        
        // Add the next button.
        self.nextButton = $('<a/>').addClass('arrow').addClass('arrow_next').attr('href', '#');
        
        self.nextButton.bind('click', function(event) {
            self.slide('next');
            return false;
        });
        
        // Add the previous button.
        self.prevButton = $('<a/>').addClass('arrow').addClass('arrow_prev').attr('href', '#').hide();
        
        self.prevButton.bind('click', function(event) {
            self.slide('prev');
            return false;
        });
        
        
        self.wrapper.after(self.nextButton);
        self.wrapper.after(self.prevButton);
        
    },
    
    slide: function(direction) {
        var self = this;
        
        if (direction == 'prev') {
            self.currentOffset--;
        } else {
            self.currentOffset++;
        }
        
        // Handle showing and hiding of the previous button.
        if (self.currentOffset === 0) {
            self.prevButton.hide();
        } else {
            self.prevButton.show();
        }
        
        // Handle showing and hiding of the next button.
        if (self.currentOffset + self.VISIBLE == self.count) {
            self.nextButton.hide();
        } else {
            self.nextButton.show();
        }
        
        // Delegate the actual slide.
        if (direction == 'next') {
            self.prevButton.show();
        }
        
        self.ul.animate({ 'marginLeft': -(self.currentOffset * self.itemWidth) }, 200);
    },
    
}

$(document).ready(function() {
    Dieffe.init();
});
