﻿
(function ($) {
  $.fn.extend({

    slideshow: function (options) {

      var defaults = {
        transitionTime: 500,
        waitTime: 5000,
        visible: 1,
        autoRotate: false
      };

      var options = $.extend(defaults, options);

      return this.each(function () {
        var obj = $(this);
        var itemWidth = $('li', obj).outerWidth();
        var itemCount = $('li', obj).length - 1;
        var leftValue = itemWidth * (-1);
        var currentIndex = 0;

        $('ul', obj).prepend($('li', obj).slice(-options.visible).clone());

        for (var i = 0; i < options.visible; i++) {
          $('li', obj).eq(i).css('margin-left', (itemWidth * (options.visible - i) * -1) + 'px');
        }

        $('ul', obj).append($('li', obj).slice(options.visible, options.visible * 2).clone());
        $('ul', obj).css('width', (itemCount + 1 + options.visible) * itemWidth);

        $('li', obj).css('visibility', 'visible');

        $('a.next', obj).click(function () {
          slide('next', true);
          return false;
        });

        $('a.prev', obj).click(function () {
          slide('prev', true);
          return false;
        });

        $('a.pager', obj).click(function () {
          slide('pager', true, $(this));
          return false;
        });

        obj.hover(
          function () {
            if (typeof timeout != 'undefined') {
              clearTimeout(timeout);
            }
          },
          function () {
            setAuto();
          });

        function slide(direction, wasClick, pagerItem) {
          clearTimeout(timeout);

          switch (direction) {
            case 'pager':
              currentIndex = $('.pager').index(pagerItem);
              break;

            case 'next':
              currentIndex = currentIndex + 1;
              break;

            case 'prev':
              currentIndex = currentIndex - 1;
              break;
          };

          $('ul', obj).animate({ 'margin-left': (currentIndex * itemWidth * -1) }, options.transitionTime, function () {
            if (currentIndex > itemCount) currentIndex = 0;
            if (currentIndex < 0) currentIndex = itemCount;

            $('ul', obj).css('margin-left', (currentIndex * itemWidth * -1));
            $('a.active', obj).removeClass('active');
            $('a.pager', obj).eq(currentIndex).addClass('active');
          });

          if (options.autoRotate) {
            setAuto();
          }
        };

        function setAuto() {
          timeout = setTimeout(function () {
            slide('next', false);
          }, options.waitTime);
        }

        if (options.autoRotate) {
          setAuto();
        }
      });
    }
  });
})(jQuery);
