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

(function($) {
    $.soloBasicUtil = {};
    $.soloBasicUtil.currentSlide = {};
    $.soloBasicUtil.nextSlide = {};
    $.soloBasicUtil.prevSlide= {};
    $.soloBasicUtil.gallery = {};
    $.soloBasicUtil.prevButton = {};
    $.soloBasicUtil.nextButton = {};
  
    $.soloBasicUtil.Options = {
        startClass: 'start',
        slideSpeed: 'slow',
        prevButton: '.prev',
        nextButton: '.next',
        container: '#solobasic-widget .items'
    };

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

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

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

        var currIndex = 0;
        while (gallerySize < 3) {
            var $clone = $.soloBasicUtil.gallery.filter('[index=' + currIndex + ']').clone().attr({
                'index': lastIndex + 1,
                'prev': lastIndex,
                'next': lastIndex + 2
            }).removeClass($.soloBasicUtil.Options.startClass);
            $.soloBasicUtil.gallery.filter('[index=' + (lastIndex) + ']').after($clone);
            $.soloBasicUtil.gallery = $.soloBasicUtil.gallery.add($.soloBasicUtil.Options.container + ' .listing[index=' + (lastIndex + 1) + ']');
            lastIndex++;
            currIndex++;
            gallerySize++;
        }
        
        $.soloBasicUtil.gallery.filter('[index=' + lastIndex + ']').attr('next', 0);
        $.soloBasicUtil.gallery.filter('[index=0]').attr('prev', lastIndex);

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

        //set slides
        $.soloBasicUtil.setCurrent($.soloBasicUtil.gallery.filter('.' + $.soloBasicUtil.Options.startClass).show());
        $.soloBasicUtil.setNext($.soloBasicUtil.gallery.filter('[index=' + $.soloBasicUtil.currentSlide.slide.attr('next') + ']'));
        $.soloBasicUtil.setPrev($.soloBasicUtil.gallery.filter('[index=' + $.soloBasicUtil.currentSlide.slide.attr('prev') + ']'));

        $($.soloBasicUtil.Options.container).resize(function() {
            $.soloBasicUtil.definePositions();
            $.soloBasicUtil.setCurrent($.soloBasicUtil.currentSlide.slide);
            $.soloBasicUtil.setPrev($.soloBasicUtil.prevSlide.slide);
            $.soloBasicUtil.setNext($.soloBasicUtil.nextSlide.slide);
        });

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

    $.soloBasicUtil.fadeForward = function() {
      $.soloBasicUtil.currentSlide.slide.css({
        'z-index': $.soloBasicUtil.prevSlide.Lzindex
      });
      
      $.soloBasicUtil.nextSlide.slide.css({
        'z-index': $.soloBasicUtil.currentSlide.Lzindex
      }).fadeIn(300, function(){
        
        $.soloBasicUtil.prevSlide.slide = $.soloBasicUtil.currentSlide.slide;
        $.soloBasicUtil.currentSlide.slide = $.soloBasicUtil.nextSlide.slide;
        $.soloBasicUtil.setNext($.soloBasicUtil.gallery.filter('[index=' + $.soloBasicUtil.currentSlide.slide.attr('next') + ']'));
        
        $.soloBasicUtil.prevSlide.slide.hide();
      });
    };
    
    $.soloBasicUtil.fadeBackward = function() {
      $.soloBasicUtil.currentSlide.slide.css({
        'z-index': $.soloBasicUtil.nextSlide.Lzindex
      });
      
      $.soloBasicUtil.prevSlide.slide.css({
        'z-index': $.soloBasicUtil.currentSlide.Lzindex
      }).fadeIn(300, function(){
        
        $.soloBasicUtil.nextSlide.slide = $.soloBasicUtil.currentSlide.slide;
        $.soloBasicUtil.currentSlide.slide = $.soloBasicUtil.prevSlide.slide;
        $.soloBasicUtil.setPrev($.soloBasicUtil.gallery.filter('[index=' + $.soloBasicUtil.currentSlide.slide.attr('prev') + ']'));
        
        $.soloBasicUtil.nextSlide.slide.hide();
      });
    };

    $.soloBasicUtil.setCurrent = function(slide) {
        $.soloBasicUtil.currentSlide.slide = slide;
        $.soloBasicUtil.currentSlide.slide.css({
          'z-index': $.soloBasicUtil.currentSlide.Lzindex
        });
    };
    
    $.soloBasicUtil.setNext = function(slide) {
        $.soloBasicUtil.nextSlide.slide = slide;
        $.soloBasicUtil.nextSlide.slide.css({
          'z-index': $.soloBasicUtil.nextSlide.Lzindex
        });
    };

    $.soloBasicUtil.setPrev = function(slide) {
        $.soloBasicUtil.prevSlide.slide = slide;
        $.soloBasicUtil.prevSlide.slide.css({
          'z-index': $.soloBasicUtil.prevSlide.Lzindex
        });
    };

    $.soloBasicUtil.definePositions = function() {
      $.soloBasicUtil.prevSlide.Lzindex = 6;
      $.soloBasicUtil.nextSlide.Lzindex = 6;
      $.soloBasicUtil.currentSlide.Lzindex = 8;
    };
})(jQuery);
