(function ($) {
    var fadeDuration = 500;
    var displayDuration = 10000;

    var cycleProducts = function(element, products, index, productUrl) {
        var crossFade = function(newContent) {
            element.fadeOut(fadeDuration, function() {
                element.html(newContent);
                element.fadeIn(fadeDuration, function() {
                    setTimeout(
                        cycleProducts(element, products, ++index % products.length, productUrl),
                        displayDuration);
                });
            });
        };

        return function() {
            if(products.length === 0) {
                return;
            }

            if(products[index].html) {
                crossFade(products[index].html);
            } else {
                $.get(productUrl + products[index].id, function(data, textStatus) {
                    products[index].html = data;
                    crossFade(data);
                });
            }
        };
    }; 

    $.fn.extend({
        productSlideShow: function(jsonUrl, productUrl) {
            var element = $(this);
            productUrl = productUrl.replace('0', '');
            jQuery.getJSON(jsonUrl, function(data) {
                var startCycle = cycleProducts(element, data, 0, productUrl);
                startCycle();
            });
        }
    });
}(jQuery));


