/*
 * 	loopedSlider 0.5.6 - jQuery plugin
 *	written by Nathan Searles	
 *	http://nathansearles.com/loopedslider/
 *
 *	Copyright (c) 2009 Nathan Searles (http://nathansearles.com/)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *	Works with jQuery version 1.3+
 *
 *  */
if (typeof jQuery != 'undefined') {
    jQuery(function($) {
        $.fn.extend({
            loopedSlider: function(options) {
                var settings = $.extend({
                    }
                ,
                $.fn.loopedSlider.defaults, options);
                return this.each(function() {
                    if ($.fn.jquery < '1.3.2') {
                        return
                    }
                    var $t = $(this);
                    var o = $.metadata ? $.extend({
                        }
                    ,
                    settings, $t.metadata()) : settings;
                    var distance = 0;
                    var times = 1;
                    var slides = $(o.slides, $t).children().size();
                    var width = $(o.slides, $t).children().outerWidth();
                    var position = 0;
                    var active = false;
                    var number = 0;
                    var interval = 0;
                    var restart = 0;
                    var pagination = $("." + o.pagination + " li a", $t);

                    o.startUp();
					
                    if (o.addPagination && !$(pagination).length) {
                        var buttons = slides;
                        $($t).append("<ul class=" + o.pagination + ">");
                        $(o.slides, $t).children().each(function() {
                            if (number < buttons) {
                                $("." + o.pagination, $t).append("<li><a rel=" + (number + 1) + " href=\"#\" >" + (number + 1) + "</a></li>");
                                number = number + 1
                            }
                            else {
                                number = 0;
                                return false
                            }
                            $("." + o.pagination + " li a:eq(0)", $t).parent().addClass("active")
                        }
                        );
                        pagination = $("." + o.pagination + " li a", $t)
                    }
                    else {
                        $(pagination, $t).each(function() {
                            number = number + 1;
                            $(this).attr("rel", number);
                            $(pagination.eq(0), $t).parent().addClass("active")
                        }
                        )
                    }
                    if (slides === 1) {
                        $(o.slides, $t).children().css({
                            position: "absolute",
                            left: position,
                            display: "block"
                        }
                        );
                        return
                    }
                    $(o.slides, $t).css({
                        width: (slides * width)
                    }
                    );
                    $(o.slides, $t).children().each(function() {
                        $(this).css({
                            position: "absolute",
                            left: position,
                            display: "block"
                        }
                        );
                        position = position + width
                    }
                    );
                    $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                        position: "absolute",
                        left: -width
                    }
                    );
                    if (slides > 3) {
                        $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                            position: "absolute",
                            left: -width
                        }
                        )
                    }
                    if (o.autoHeight) {
                        autoHeight(times)
                    }
                    $(".next", $t).click(function(event) {
						event.preventDefault();	
	
                        if (active === false) {
                            animate("next", true);
                            if (o.autoStart) {
                                if (o.restart) {
                                    autoStart()
                                }
                                else {
                                    clearInterval(sliderIntervalID)
                                }

                            }

                        }
                        return false
                    }
                    );
                    $(".previous", $t).click(function(event) {
						event.preventDefault();	
                        if (active === false) {
                            animate("prev", true);
                            if (o.autoStart) {
                                if (o.restart) {
                                    autoStart()
                                }
                                else {
                                    clearInterval(sliderIntervalID)
                                }

                            }

                        }
                        return false
                    }
                    );
                    if (o.containerClick) {
                        $(o.container, $t).click(function() {
                            if (active === false) {
                                animate("next", true);
                                if (o.autoStart) {
                                    if (o.restart) {
                                        autoStart()
                                    }
                                    else {
                                        clearInterval(sliderIntervalID)
                                    }

                                }

                            }
                            return false
                        }
                        )
                    }
                    $(pagination, $t).click(function() {
                        if ($(this).parent().hasClass("active")) {
                            return false
                        }
                        else {
                            times = $(this).attr("rel");
                            $(pagination, $t).parent().siblings().removeClass("active");
                            $(this).parent().addClass("active");
                            animate("fade", times);
                            if (o.autoStart) {
                                if (o.restart) {
                                    autoStart()
                                }
                                else {
                                    clearInterval(sliderIntervalID)
                                }

                            }

                        }
                        return false
                    }
                    );
                    if (o.autoStart) {
                        sliderIntervalID = setInterval(function() {
                            if (active === false) {
                                animate("next", true)
                            }

                        }
                        ,
                        o.autoStart);
                        function autoStart() {
                            if (o.restart) {
                                clearInterval(sliderIntervalID, interval);
                                clearTimeout(restart);
                                restart = setTimeout(function() {
                                    interval = setInterval(function() {
                                        animate("next", true)
                                    }
                                    ,
                                    o.autoStart)
                                }
                                ,
                                o.restart)
                            }
                            else {
                                sliderIntervalID = setInterval(function() {
                                    if (active === false) {
                                        animate("next", true)
                                    }

                                }
                                ,
                                o.autoStart)
                            }

                        }

                    }
                    function current(times) {
                        if (times === slides + 1) {
                            times = 1
                        }
                        if (times === 0) {
                            times = slides
                        }
                        $(pagination, $t).parent().siblings().removeClass("active");
                        $(pagination + "[rel='" + (times) + "']", $t).parent().addClass("active")
                    }
                    ;
                    function autoHeight(times) {
                        if (times === slides + 1) {
                            times = 1
                        }
                        if (times === 0) {
                            times = slides
                        }
                        var getHeight = $(o.slides, $t).children(":eq(" + (times) + ")", $t).outerHeight();
                        $(o.container, $t).animate({
                            height: getHeight
                        }
                        ,
                        o.autoHeight)
                    }
                    ;
                    function animate(dir, clicked) {
                        active = true;
                        switch (dir) {
                        case "next":
                            times = times + 1;
                            distance = ( - (times * width - width));
                            current(times);
                            if (o.autoHeight) {
                                autoHeight(times)
                            }
                            if (slides < 3) {
                                if (times === 3) {
                                    $(o.slides, $t).children(":eq(0)").css({
                                        left: (slides * width)
                                    }
                                    )
                                }
                                if (times === 2) {
                                    $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                        position: "absolute",
                                        left: width
                                    }
                                    )
                                }

                            }
                            $(o.slides, $t).animate({
                                left: distance
                            }
                            ,
                            o.slidespeed,
                            function() {
                                if (times === slides + 1) {
                                    times = 1;
                                    $(o.slides, $t).css({
                                        left: 0
                                    }
                                    ,
                                    function() {
                                        $(o.slides, $t).animate({
                                            left: distance
                                        }
                                        )
                                    }
                                    );
                                    $(o.slides, $t).children(":eq(0)").css({
                                        left: 0
                                    }
                                    );
                                    $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                        position: "absolute",
                                        left: -width
                                    }
                                    )
                                }
                                if (times === slides) $(o.slides, $t).children(":eq(0)").css({
                                    left: (slides * width)
                                }
                                );
                                if (times === slides - 1) $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                    left: (slides * width - width)
                                }
                                );
								o.animationComplete(times);
                                active = false;
                            }
                            );
                            break;
                        case "prev":
                            times = times - 1;
                            distance = ( - (times * width - width));
                            current(times);
                            if (o.autoHeight) {
                                autoHeight(times)
                            }
                            if (slides < 3) {
                                if (times === 0) {
                                    $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                        position: "absolute",
                                        left: ( - width)
                                    }
                                    )
                                }
                                if (times === 1) {
                                    $(o.slides, $t).children(":eq(0)").css({
                                        position: "absolute",
                                        left: 0
                                    }
                                    )
                                }

                            }
                            $(o.slides, $t).animate({
                                left: distance
                            }
                            ,
                            o.slidespeed,
                            function() {
                                if (times === 0) {
                                    times = slides;
                                    $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                        position: "absolute",
                                        left: (slides * width - width)
                                    }
                                    );
                                    $(o.slides, $t).css({
                                        left: -(slides * width - width)
                                    }
                                    );
                                    $(o.slides, $t).children(":eq(0)").css({
                                        left: (slides * width)
                                    }
                                    )
                                }
                                if (times === 2) $(o.slides, $t).children(":eq(0)").css({
                                    position: "absolute",
                                    left: 0
                                }
                                );
                                if (times === 1) $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                    position: "absolute",
                                    left: -width
                                }
                                );
                                o.animationComplete(times);
								active = false
                            }
                            );
                            break;
                        case "fade":
                            times = [times] * 1;
                            distance = ( - (times * width - width));
                            current(times);
                            if (o.autoHeight) {
                                autoHeight(times)
                            }
                            $(o.slides, $t).children().fadeOut(o.fadespeed,
                            function() {
                                $(o.slides, $t).css({
                                    left: distance
                                }
                                );
                                $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                    left: slides * width - width
                                }
                                );
                                $(o.slides, $t).children(":eq(0)").css({
                                    left: 0
                                }
                                );
                                if (times === slides) {
                                    $(o.slides, $t).children(":eq(0)").css({
                                        left: (slides * width)
                                    }
                                    )
                                }
                                if (times === 1) {
                                    $(o.slides, $t).children(":eq(" + (slides - 1) + ")").css({
                                        position: "absolute",
                                        left: -width
                                    }
                                    )
                                }
                                $(o.slides, $t).children().fadeIn(o.fadespeed);
								o.animationComplete(times);
                                active = false
                            }
                            );
                            break;
                        default:
                            break
                        }

                    }

                }
                )
            }

        }
        );
        $.fn.loopedSlider.defaults = {
            container: ".container",
            slides: ".slides",
            pagination: "pagination",
            containerClick: true,
            autoStart: 0,
            restart: 0,
            slidespeed: 300,
            fadespeed: 200,
            autoHeight: 0,
            addPagination: false,
			startUp: function(){},
			animationComplete: function(){} // Function called at the completion of animation      
        }

    }
    )
}


