$(document).ready(function()
{
	bindCarousel();
});

var bindCarousel = function() {
    // Init
    var carousel = jQuery("#carousel");
    if (carousel.length > 0) {
        var images = carousel.find("a").clone();
        var visibleImage = jQuery(carousel.find("img")[0]);
        var link = visibleImage.parent();
        var timer = null;
        var index = 0;
        var pause = 5000;
        var fadeDuration = 750;
        var hovering = false;
        var transitioning = false;

        // Create pagers
        var pagers = jQuery("<div id=\"carousel_pagers\"></div>");
        for (var i = 0; i < images.length; i++) {
            pagers.append("<img src=\"img/null.gif\" />");
        }
        carousel.after(pagers);
        pagers = pagers.find("img").each(function(i) {
            var pager = jQuery(this);
            if (i == 0) pager.addClass("active");
            pager.click(function() {
                index = i - 1;
                pagers.removeClass("active");
                jQuery(this).addClass("active");
                action();
            });
        });

        // This business
        var action = function() {
            if (transitioning) {
                timer = window.setTimeout(action, fadeDuration);
                return;
            }
            if (hovering) {
                timer = window.setTimeout(action, pause);
                return;
            }
            transitioning = true;
            window.clearTimeout(timer);
            index++;
            if (index >= images.length) index = 0;
            pagers.removeClass("active");
            jQuery(pagers[index]).addClass("active");
            var newImage = jQuery(images[index]).find("img");
            carousel.css("background-image", "url(" + newImage[0].src + ")");
            visibleImage.fadeOut(fadeDuration, function() {
                visibleImage.attr("src", newImage[0].src).show();
                link.attr("href", newImage.parent().attr("href"));
                timer = window.setTimeout(action, pause);
                transitioning = false;
            });
        };
        timer = window.setTimeout(action, pause);
    }
};