﻿

(function($) {

    $.fn.slider = function(options) {

        // default configuration properties
        var defaults = {
            auto: true,
            autoDelay: 10000,
            easingCarousel: 'swing',
            durationCarousel: 1000
        };

        var options = $.extend(defaults, options);

        this.each(function() {

            var obj = $(this);
            var carousel;
            var carouselTotal = $("ul", obj).children().length;

            var mouseover = false;

            var carouselPosition = 1;
            var carouselLinkIndex = 1;
            var carouselLinks = "";
            var carouselwidth = $(obj).width();


            var locked = false;

            if (options.auto == true) {
                //Creat duplicates for seamless looping
                $("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left", "-" + carouselwidth + "px"));
                $("ul", obj).append($("ul li:nth-child(2)", obj).clone());


            }
            else {
                $(".previous", obj).hide();
                $(".play, .pause", obj).hide();
            }


            //Set main background width
            $("ul", obj).css("width", ((carouselTotal + 1) * carouselwidth) + 100 + "px");


            for (i = 1; i <= carouselTotal; i++) {
                (i == 1) ? carouselLinks += "<a rel=\"" + carouselLinkIndex + "\" title=\"Go to page " + carouselLinkIndex + " \" class=\"link" + carouselLinkIndex + " selected\" href=\"javascript:void(0)\">" + carouselLinkIndex + "</a>" : carouselLinks += "<a rel=\"" + carouselLinkIndex + "\"  title=\"Go to page " + carouselLinkIndex + " \" class=\"link" + carouselLinkIndex + "\" href=\"javascript:void(0)\" >" + carouselLinkIndex + "</a>";
                carouselLinkIndex++;
            }
            $("#numbers", obj).html(carouselLinks);

            //Bind carousel controls
            $(".next", obj).click(function() {
                carouselPage(parseInt(carouselPosition + 1), false);
                lock();
            });

            $(".previous", obj).click(function() {
                carouselPage(parseInt(carouselPosition - 1), false);
                lock();
            });

            $("#numbers a", obj).click(function() {
                carouselPage($(this).attr("rel"), false);
                lock();
            });

            $(".pause", obj).click(function() {
                autoPause();
            });
            $(".play", obj).click(function() {
                autoPlay();
            });


            $(obj).mouseover(function() {

                if (mouseover==false) {
                    mouseover=true
                    $(".control, .next-previous", obj).show();
                }

            });

            $(obj).mouseleave(function() {
                    mouseover = false
                    $(".control, .next-previous", obj).hide();
                
                
            });



            function lock() {
                locked = true;
            }

            function unLock() {
                locked = false;
            }


            function checkPreviousNext() {
                $("#numbers a", obj).removeClass("selected");
                $("#numbers .link" + carouselPosition, obj).addClass("selected");

                if (options.auto == false) {
                    (carouselPosition == carouselTotal) ? $(".next", obj).hide() : $(".next", obj).show();
                    (carouselPosition < 2) ? $(".previous", obj).hide() : $(".previous", obj).show();
                }
            }

            function adjust() {


                if (options.auto == true) {
                    if (carouselPosition < 1) {

                        $("ul", obj).css("margin-left", (-1 * ((carouselTotal - 1) * carouselwidth)));
                        carouselPosition = carouselTotal;

                    }
                    if (carouselPosition > carouselTotal) {
                        $("ul", obj).css("margin-left", 0);
                        carouselPosition = 1;
                    }
                }

            }

            function carouselPage(x, y) {

                if (locked != true) {

                    //console.log("New page: " + x);
                    carouselPosition = parseFloat(x);
                    //Cancel timer if manual click
                    if (y == false) autoPause();

                    var newPage = (x * carouselwidth) - carouselwidth;


                    if (newPage != 0) {
                        newPage = newPage * -1;

                    }

                    $("ul", obj).animate({
                        marginLeft: newPage
                    }, {
                        "duration": options.durationCarousel, "easing": options.easingCarousel,

                        complete: function() {
                            adjust();
                            checkPreviousNext();
                            unLock();
                        }
                    });
                }
            }

            function autoPause() {
                $(".pause", obj).hide();
                $(".play", obj).show();
                $("body").stopTime("autoScroll");
            }

            function autoPlay() {
                $(".pause", obj).show();
                $(".play", obj).hide();
                $("body").everyTime(options.autoDelay, "autoScroll", function() {
                    carouselPage(carouselPosition + 1, true);
                    lock();
                });
            }

            if (options.auto == true) {
                autoPlay();
            }

        });

    };

})(jQuery);




