﻿(function ($) {
    $.fn.extend({
        imgGallery: function (options) {
            var defaults = {
                sliderClass: "slider",
                easing: "swing",
                controlSelector: "#gallery .control",
                captionSelector: ".caption",
                images: {},
                onImageChange: function () { }
            };

            $(this).each(function () {
                options = $.extend(defaults, options);

                var animating = false;
                var currImage = 0;
                var imageCount = $(options.images).size();
                var gallery = $(this);
                var galleryWidth = gallery.width();

                function setGalleryImage(eventData, imageIndex, dir) {
                    if (animating) return;
                    animating = true;

                    if (imageIndex == null) {
                        currImage = (parseInt(currImage) + parseInt(dir)) % imageCount;
                        if (currImage < 0) currImage += imageCount;
                    } else {
                        currImage = imageIndex
                    }

                    var imageSrc = options.images[currImage].Url;
                    $(options.captionSelector).html(options.images[currImage].Caption).toggle(options.images[currImage].Caption != "");
                    gallery.append($("<img />").addClass(options.sliderClass).css("left", dir * galleryWidth).load(function () {
                        options.onImageChange(currImage);
                        $(this).animate({ left: 0 }, 1000, options.easing, function () { gallery.children(":not(." + options.sliderClass + ", " + options.controlSelector + ", " + options.captionSelector + ")").remove(); $(this).removeClass(options.sliderClass); animating = false; });
                    }).attr("src", imageSrc));
                }
                gallery.bind("setGalleryImage", setGalleryImage);

                $(this).append($("<img />").attr("src", options.images[0].Url));
                $(options.captionSelector).html(options.images[0].Caption).toggle(options.images[0].Caption != "");

                options.onImageChange(0);
                $(options.controlSelector).live("click", function (eventObj) {
                    var incr = parseInt($(this).attr("incr"));
                    setGalleryImage(null, null, incr);
                });
            });

        }
    });
})(jQuery);
