/*
 *  jqSlider - jQuery plugin
 *  written by Bumbella
 *  Copyright (c) 2011
 *  Built for jQuery library
 *  http://jquery.com
/*
 *  example for $("#sliderContent").jqSlider();
 *  
 *  <div id="sliderContent">
 *      <ul>
 *          <li><img src="images/01.jpg" alt="" /></li>
 *          <li><img src="images/02.jpg" alt="" /></li>
 *          <li><img src="images/03.jpg" alt="" /></li>
 *          <li><img src="images/04.jpg" alt="" /></li>
 *          <li><img src="images/05.jpg" alt="" /></li>
 *      </ul>
 *  </div>
 *
 */

(function($){
    $.fn.jqSlider = function(options)
    {
        var defaults = {
            pagerArrows         : false,
            slideSpeed          : 1000,
            autoSlide           : true,
            autoInterval        : 4000,
            autoDirection       : "right",
            paginator           : false,
            paginatorNums       : false
        };

        var options             = $.extend(defaults, options);

        var obj                 = $(this);
        var items               = $('li', obj).length;
        var itemWidth           = $('li', obj).width();
        var itemsWidth          = (items+2)*itemWidth;
        var firstItem           = $('li', obj).first().html();
        var lastItem            = $('li', obj).last().html();
        var marginLeft;
        var newMarginLeft;
        var rotator;
        var activeSlide = 1;

        var init = function(){

            if (options.paginator == true) {
                var html =  '<div style="clear:both;"></div>'+
                            '<div class="sliderPaginator">';

                for (var a = 1; a <= items; a++) {
                    html += '<a class="slideItem" href="javascript:void(0);">';
                    if (options.paginatorNums == true) { html+=a;}
                    html += '</a>';
                }

                html +=     '</div>';

                $(obj).append(html);
            }

            var sliderPaginatorWidth = items * (parseInt($('.sliderPaginator a',obj).width())+parseInt($('.sliderPaginator a',obj).css('margin-left'))+parseInt($('.sliderPaginator a',obj).css('margin-right')));

            $('ul', obj).css('width', itemsWidth);
            $('ul', obj).append('<li>' + firstItem + '</li>');
            $('ul', obj).prepend('<li>' + lastItem + '</li>');
            $('ul', obj).css('margin-left', -itemWidth);
            $('.sliderPaginator', obj).css('width',sliderPaginatorWidth);

            $('.sliderPaginator a:eq('+(activeSlide-1)+')', obj).addClass('active');

            if (options.pagerArrows == true) {
                $(obj).prepend('<div class="sliderButton left"></div>');
                $(obj).prepend('<div class="sliderButton right"></div>');
            }

            $('.sliderButton.left', obj).bind('click', function() { changeSlideTo('left',activeSlide-1);});
            $('.sliderButton.right', obj).bind('click', function() { changeSlideTo('right',activeSlide+1);});

            $('.sliderPaginator a', obj).bind('click', function(){
                var i=$('.sliderPaginator a', obj).index(this)+1;
                var direction;
                if (i>activeSlide) {direction = 'right';}
                if (i<activeSlide) {direction = 'left';}
                changeSlideTo(direction,i);
            });

        }

        var paginatorActivate = function(i)
        {
            paginatorResetClass();
            $('.sliderPaginator a:eq('+(i-1)+')', obj).addClass('active');
        }

        var paginatorResetClass = function()
        {
            $('.sliderPaginator',obj).children().each(function(){
                $('a',obj).removeClass('active');
            });
        }

        var autoSlide = function(param)
        {
            if (param == true) {
                rotator = setInterval(function(){
                    var i;
                    if (options.autoDirection=='right') {i=activeSlide+1;}
                    if (options.autoDirection=='left') {i=activeSlide-1;}
                    changeSlideTo(options.autoDirection,i);},
                    options.autoInterval);
            } else { clearInterval(rotator);}
        }

        var changeSlideTo = function(direction,slideTo)
        {
            var jump;
            if (slideTo > activeSlide) {jump = slideTo-activeSlide;}
            if (slideTo < activeSlide) {jump = activeSlide-slideTo;}

            marginLeft = parseInt($('ul',obj).css('margin-left'));

            if (marginLeft == 0) {
                marginLeft = -itemsWidth + (itemWidth*2);
                $('ul',obj).css({'marginLeft': marginLeft});
            }

            if (marginLeft == -itemsWidth +(itemWidth)) {
                marginLeft = -itemWidth;
                $('ul',obj).css({'marginLeft': marginLeft});
            }

            if (direction == 'right'){
                newMarginLeft = marginLeft - (itemWidth*jump);
            }

            if (direction == 'left'){
                newMarginLeft = marginLeft + (itemWidth*jump);
            }

            $('ul',obj).filter(':not(:animated)').animate(
                {'margin-left': newMarginLeft + 'px'},
                options.slideSpeed,
                function() {
                    if (direction == 'right'){
                        if ((slideTo )>items) {
                            activeSlide = 1;
                        } else activeSlide = slideTo;
                    }

                    if (direction == 'left'){
                        if ((slideTo)<1) {
                            activeSlide = items;
                        } else activeSlide = slideTo;
                    }

                    paginatorActivate(activeSlide);
                }
            );
        }

        //controller
        init();
/*
        if (options.autoSlide == true) {
            $(obj)
              .mouseover(function(){autoSlide(false);})
              .mouseout(function(){if (options.autoSlide==true) {autoSlide(true);}});
        }
*/
        autoSlide(options.autoSlide);
    }
})(jQuery);
