/*
 * 	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);
                    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 () {
                        if (active === false) {
                            animate("next", true);
                            if (o.autoStart) {
                                if (o.restart) {
                                    autoStart()
                                } else {
                                    clearInterval(sliderIntervalID)
                                }
                            }
                        }
                        return false
                    });
                    $(".previous", $t).click(function () {
                        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);
                                clearInterval(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 - 1) + ")", $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)
                                });
                                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
                                });
                                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);
                                active = false
                            });
                            break;
                        default:
                            break
                        }
                    }
                })
            }
        });
        $.fn.loopedSlider.defaults = {
            container: ".container",
            slides: ".slides",
            pagination: "pagination",
            containerClick: false,
            autoStart: 0,
            restart: 0,
            slidespeed: 300,
            fadespeed: 200,
            autoHeight: 0,
            addPagination: false
        }
    })
}
