(function($) {
    var currentIndex = 0;
    var settings = {};
    var container;
    var width, height, count;
    var interval;
    $.fn.slider = function(s) {
        settings = $.extend({ easeFunc: "easeOutCubic", easeTime: 450, interval: 7000 }, s);

        return this.each(function() {
            container = $(this);
            width = container.find("li").width();
            height = container.find("li").height();
            count = container.find("li").size();
            container.find("ul").css("width", width * count);
            if (count <= 1) {
                return;
            }
            $prev = $("<a>").addClass("slider-prev").attr('href', 'javascript:void(0);').html("&laquo;");
            $next = $("<a>").addClass("slider-next").attr('href', 'javascript:void(0);').html("&raquo;");
            container.find(".slider-nav").append($next).append($prev).hover(function() { $(this).find("a:not(.dot)").show(); }, function() { $(this).find("a:not(.dot)").hide(); });
            for (var i = 0; i < count; i++) {
                var e = $("<a>").html("&bull;").attr('href', 'javascript:void(0);').attr('rel', i).addClass("dot");
                container.find(".slider-nav").append(e);
            }
            container.find(".slider-nav a.dot:first").addClass("active");

            container.find(".slider-nav a.dot").click(function() {
                $.fn.slider.goto($(this).attr("rel"));
                $.fn.slider.clearInterval();
            });

            $next.click(function(arg) {
                $.fn.slider.next();
                $.fn.slider.clearInterval();
            });
            $prev.click(function(arg) {
                $.fn.slider.prev();
                $.fn.slider.clearInterval();
            });
            interval = window.setInterval('$.fn.slider.next()', settings.interval);
        });
    };
    $.fn.slider.clearInterval = function() {
        window.clearInterval(interval);
    }
    $.fn.slider.next = function() {
        $.fn.slider.goto(currentIndex < count - 1 ? currentIndex + 1 : 0);
    };
    $.fn.slider.prev = function() {
        $.fn.slider.goto(currentIndex > 0 ? currentIndex - 1 : count - 1);
    }
    $.fn.slider.goto = function(index) {
        currentIndex = index;
        container.find("ul").dequeue().animate({ left: -(width * currentIndex) }, settings.easeTime, settings.easeFunc);
        container.find(".slider-nav a.dot").removeClass("active").eq(currentIndex).addClass("active");
    };
})(jQuery);