/*
*       Developed by Sean Ouimet
*       ©2009 Redman Technologies Inc.
*   www.redmantech.ca
*
*/

(function($) {
    $.slideOverUtil = {};
    $.slideOverUtil.rightSlide = {};
    $.slideOverUtil.leftSlide = {};
    $.slideOverUtil.rightSlideStorage = {};
    $.slideOverUtil.leftSlideStorage = {};
    $.slideOverUtil.gallery = {};
    $.slideOverUtil.prevButton = {};
    $.slideOverUtil.nextButton = {};
  
    $.slideOverUtil.Options = {
        Lshrink:
          function(dimension) {
              return dimension * 1;
          },
        startClass: 'start',
        slideSpeed: 'slow',
        prevButton: '.prev',
        nextButton: '.next',
        gutterWidth: 2,
        gutterHeight: 2,
        
        leftPosition: 220,
    
        container: '#slides'
    };

    $.fn.slideOver = function(options) {
        //global settings
        $.extend($.slideOverUtil.Options, options);
        $.slideOverUtil.gallery = $(this);
        $.slideOverUtil.definePositions();

        //eliminate overflow
        $($.slideOverUtil.Options.container).css('overflow', 'hidden');

        //setup existing slides
        var lastIndex = 0;
        var gallerySize = $.slideOverUtil.gallery.each(function(i) {
            $(this).attr({
                'index': i,
                'prev': (i - 1),
                'next': (i + 1)
            }).css('position', 'absolute');
            lastIndex = i;
        }).hide().size();

        //fill in gallery with duplicates until there are at least 6
        var currIndex = 0;
        while (gallerySize < 6) {
            var $clone = $.slideOverUtil.gallery.filter('[index=' + currIndex + ']').clone().attr({
                'index': lastIndex + 1,
                'prev': lastIndex,
                'next': lastIndex + 2
            }).removeClass($.slideOverUtil.Options.startClass);
            $.slideOverUtil.gallery.filter('[index=' + (lastIndex) + ']').after($clone);
            $.slideOverUtil.gallery = $.slideOverUtil.gallery.add('li.slide[index=' + (lastIndex + 1) + ']');
            lastIndex++;
            currIndex++;
            gallerySize++;
        }
        $.slideOverUtil.gallery.filter('[index=' + lastIndex + ']').attr('next', 0);
        $.slideOverUtil.gallery.filter('[index=0]').attr('prev', lastIndex);

    $.slideOverUtil.prevButton = $($.slideOverUtil.Options.prevButton);
    $.slideOverUtil.nextButton = $($.slideOverUtil.Options.nextButton);

        //set slides
        $.slideOverUtil.setLeft($.slideOverUtil.gallery.filter('.' + $.slideOverUtil.Options.startClass).show());
        $.slideOverUtil.setRight($.slideOverUtil.gallery.filter('[index=' + $.slideOverUtil.leftSlide.slide.attr('next') + ']').show());
        $.slideOverUtil.setLeftStorage($.slideOverUtil.gallery.filter('[index=' + $.slideOverUtil.leftSlide.slide.attr('prev') + ']'));
        $.slideOverUtil.setRightStorage($.slideOverUtil.gallery.filter('[index=' + $.slideOverUtil.rightSlide.slide.attr('next') + ']'));
        
        $($.slideOverUtil.Options.container).resize(function() {
            $.slideOverUtil.definePositions();
            $.slideOverUtil.setLeft($.slideOverUtil.leftSlide.slide);
            $.slideOverUtil.setRight($.slideOverUtil.rightSlide.slide);
            $.slideOverUtil.setLeftStorage($.slideOverUtil.leftSlideStorage.slide);
            $.slideOverUtil.setRightStorage($.slideOverUtil.rightSlideStorage.slide);
        });

        //return the objects (for chaining purposes)
        return $(this);
    };

    $.slideOverUtil.slideRight = function() {
    $.slideOverUtil.leftSlideStorage.slide.css({
      'top': $.slideOverUtil.leftSlide.Ltop,
      'left': $.slideOverUtil.leftSlide.left,
      'z-index': $.slideOverUtil.leftSlideStorage.Lzindex
    }).show();

    $.slideOverUtil.rightSlide.slide.css({'z-index': $.slideOverUtil.rightSlideStorage.Lzindex});

    $.slideOverUtil.leftSlide.slide.addClass('moving').css({'z-index': $.slideOverUtil.rightSlide.Lzindex}).unbind().animate({
      'top': $.slideOverUtil.rightSlide.Ltop,
      'left': $.slideOverUtil.rightSlide.left
    }, $.slideOverUtil.Options.slideSpeed, 'linear', function() {
      $(this).removeClass('moving');

      $.slideOverUtil.rightSlideStorage.slide = $.slideOverUtil.rightSlide.slide;
      $.slideOverUtil.rightSlide.slide = $.slideOverUtil.leftSlide.slide;
      $.slideOverUtil.leftSlide.slide = $.slideOverUtil.leftSlideStorage.slide;
      $.slideOverUtil.setLeftStorage($.slideOverUtil.gallery.filter('[index=' + $.slideOverUtil.leftSlide.slide.attr('prev') + ']'));

      $.slideOverUtil.rightSlideStorage.slide.hide();
    });
    };

    $.slideOverUtil.slideLeft = function() {
    $.slideOverUtil.rightSlideStorage.slide.css({
      'top': $.slideOverUtil.rightSlide.Ltop,
      'left': $.slideOverUtil.rightSlide.left,
      'z-index': $.slideOverUtil.rightSlide.Lzindex - 1
    }).show();

    $.slideOverUtil.leftSlide.slide.css({'z-index': $.slideOverUtil.leftSlide.Lzindex - 1});
    
    $.slideOverUtil.prevButton.addClass('disabled');
    $.slideOverUtil.nextButton.addClass('disabled');
    
    $.slideOverUtil.rightSlide.slide.addClass('moving').css({'z-index': $.slideOverUtil.leftSlide.Lzindex}).unbind().animate({
      'top': $.slideOverUtil.leftSlide.Ltop,
      'left': $.slideOverUtil.leftSlide.left
    }, $.slideOverUtil.Options.slideSpeed, 'linear', function() {
      $(this).removeClass('moving');
      $.slideOverUtil.prevButton.removeClass('disabled');
      $.slideOverUtil.nextButton.removeClass('disabled');

      $.slideOverUtil.leftSlideStorage.slide = $.slideOverUtil.leftSlide.slide;
      $.slideOverUtil.leftSlide.slide = $.slideOverUtil.rightSlide.slide;
      $.slideOverUtil.rightSlide.slide = $.slideOverUtil.rightSlideStorage.slide;
      $.slideOverUtil.setRightStorage($.slideOverUtil.gallery.filter('[index=' + $.slideOverUtil.rightSlideStorage.slide.attr('next') + ']'));

      $.slideOverUtil.leftSlideStorage.slide.hide();
    });
    };

    $.slideOverUtil.setRightStorage = function(slide) {
        $.slideOverUtil.rightSlideStorage.slide = slide;
            $.slideOverUtil.rightSlideStorage.slide.hide().css({
                'top': $.slideOverUtil.rightSlideStorage.Ltop,
        'z-index': $.slideOverUtil.rightSlide.Lzindex
            });
        $.slideOverUtil.rightSlideStorage.slide.css('left', $.slideOverUtil.rightSlideStorage.left);
    };

    $.slideOverUtil.setLeftStorage = function(slide) {
        $.slideOverUtil.leftSlideStorage.slide = slide;
            $.slideOverUtil.leftSlideStorage.slide.hide().css({
        'z-index': $.slideOverUtil.leftSlide.Lzindex
            });
 
        $.slideOverUtil.leftSlideStorage.slide.css('left', $.slideOverUtil.leftSlideStorage.left);
    };

    $.slideOverUtil.setRight = function(slide) {
        $.slideOverUtil.rightSlide.slide = slide;
            $.slideOverUtil.rightSlide.slide.css({
                'top': $.slideOverUtil.rightSlide.Ltop,
        'z-index': $.slideOverUtil.rightSlide.Lzindex
            });
        $.slideOverUtil.rightSlide.slide.css('left', $.slideOverUtil.rightSlide.left);
    };

    $.slideOverUtil.setLeft = function(slide) {
        $.slideOverUtil.leftSlide.slide = slide;
            $.slideOverUtil.leftSlide.slide.css({
                'top': $.slideOverUtil.leftSlide.Ltop,
        'z-index': $.slideOverUtil.leftSlide.Lzindex
            });
        $.slideOverUtil.leftSlide.slide.css('left', $.slideOverUtil.leftSlide.left);
    };

    $.slideOverUtil.definePositions = function() {
    $.slideOverUtil.leftSlide.Lzindex = 8;
        $.slideOverUtil.leftSlide.Ltop = 5;
        $.slideOverUtil.leftSlide.left = 10;

    $.slideOverUtil.rightSlide.Lzindex = 8;
        $.slideOverUtil.rightSlide.Ltop = 5;
        $.slideOverUtil.rightSlide.left = $.slideOverUtil.Options.leftPosition;

    $.slideOverUtil.leftSlideStorage.Lzindex = 6;
        $.slideOverUtil.leftSlideStorage.Ltop = 5; 
        $.slideOverUtil.leftSlideStorage.left = 10 ; 

    $.slideOverUtil.rightSlideStorage.Lzindex = 6;
        $.slideOverUtil.rightSlideStorage.Ltop = 5; 
        $.slideOverUtil.rightSlideStorage.left = $.slideOverUtil.Options.leftPosition;
    };
})(jQuery);