﻿(function ($) {
    $.fn.extend({
        imgGallery: function (options) {
            var defaults = {
                sliderClass: "slider",
                easing: "swing",
                controlSelector: "#gallery .control",
                images: {}
            };

            $(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];

                    gallery.append($("<img></img>").addClass(options.sliderClass).css("left", dir * galleryWidth).load(function () {
                        $(this).animate({ left: 0 }, 1000, options.easing, function () { gallery.children(":not(." + options.sliderClass + "):not(" + options.controlSelector + ")").remove(); $(this).removeClass(options.sliderClass); animating = false; });
                    }).attr("src", imageSrc));
                }
                gallery.bind("setGalleryImage", setGalleryImage);

                $(this).append($("<img></img>").attr("src", options.images[0]));
                $(options.controlSelector).live("click", function (eventObj) {
                    var incr = parseInt($(eventObj.target).attr("incr"));
                    setGalleryImage(null, null, incr);
                });
            });

        }
    });
})(jQuery);
