﻿(function($) {
    $.fn.norisgallery = function(options) {

        var defaults = {
            width: 460,
            height: 268,
            thumbPerSlide: 4,
            previewArea: ".preview-container",
            textArea: ".gallery-container .left",
            thumbArea: ".thumbnail-container"
        };

        var loaded, totalSlides, currentSlide = 1;
        var options = $.extend(defaults, options);
        var imgPreloader = new Image();
        var imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*/i;

        process_image = function() {

            var img = $("<img />").attr({
                'src': imgPreloader.src
            });

            var finish_resizing = function() {
                $(options.previewArea).html("").append(img).fadeIn("normal").trigger("resized");
            };

            var height = imgPreloader.height + "px";

            $(options.previewArea).animate({ height: height }, 400, finish_resizing);

        };

        process_flash = function(contents) {

            var finish_resizing = function() {
                $(options.previewArea).html(contents).fadeIn("normal").trigger("resized");
            };

            var height = options.height + "px";

            $(options.previewArea).animate({ height: height }, 400, finish_resizing);

        };

        move_thumbs_left = function() {

            var currentThumb = (currentSlide * options.thumbPerSlide) - (options.thumbPerSlide - 1);
            var nextSlideThumb = currentThumb + options.thumbPerSlide;

            var currentThumbLeft = $(".thumbnail", $(options.thumbArea)).eq(currentThumb - 1).position().left;
            var nextThumbLeft = $(".thumbnail", $(options.thumbArea)).eq(nextSlideThumb - 1).position().left;
            var left = nextThumbLeft - currentThumbLeft;

            if (currentSlide < totalSlides) {

                $(".thumbnails", $(options.thumbArea)).animate({ left: '-=' + left }, 1000);

                currentSlide++;

                manage_arrows();

            }
        };

        move_thumbs_right = function() {

            var currentThumb = (currentSlide * options.thumbPerSlide) - (options.thumbPerSlide - 1);
            var nextSlideThumb = currentThumb - options.thumbPerSlide;

            var currentThumbLeft = ($(".thumbnail", $(options.thumbArea)).eq(currentThumb - 1).position().left);
            var nextThumbLeft = ($(".thumbnail", $(options.thumbArea)).eq(nextSlideThumb - 1).position().left);
            var left = currentThumbLeft - nextThumbLeft;

            if (currentSlide != 1) {

                $(".thumbnails", $(options.thumbArea)).animate({ left: '+=' + left }, 1000);

                currentSlide--;

                manage_arrows();

            }
        };

        manage_arrows = function() {

            if (currentSlide == 1) {
                $(".arrow-left", $(options.thumbArea)).addClass("disabled-left").unbind();

                if (currentSlide == totalSlides) {
                    $(".arrow-right", $(options.thumbArea)).addClass("disabled-right").unbind();
                }
                else {
                    $(".arrow-right", $(options.thumbArea)).removeClass("disabled-right").unbind().bind("click", move_thumbs_left);
                }

            } else if (currentSlide >= totalSlides) {
                $(".arrow-right", $(options.thumbArea)).addClass("disabled-right").unbind();
                $(".arrow-left", $(options.thumbArea)).removeClass("disabled-left").unbind().bind("click", move_thumbs_right);
            } else if (currentSlide < totalSlides) {
                $(".arrow-right", $(options.thumbArea)).removeClass("disabled-right").unbind().bind("click", move_thumbs_left);
                $(".arrow-left", $(options.thumbArea)).removeClass("disabled-left").unbind().bind("click", move_thumbs_right);
            }

        };

        return this.each(function() {

            obj = $(this);

            obj.bind("click", function(e) {

                e.preventDefault();

                var target = $(e.currentTarget);
                var href = target.attr("href");

                var img = $("img:first", target);

                if (href.match(imgRegExp)) {

                    imgPreloader = new Image();

                    imgPreloader.onload = function() {
                        imgPreloader.onerror = null;
                        imgPreloader.onload = null;
                        process_image();
                    };

                    imgPreloader.src = href;

                }
                else {

                    var contents;

                    contents = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + options.width + '" height="' + options.height + '"><param name="movie" value="' + href + '"></param>';
                    emb = '';

                    $.each(options.swf, function(name, val) {
                        contents += '<param name="' + name + '" value="' + val + '"></param>';
                        emb += ' ' + name + '="' + val + '"';
                    });

                    contents += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + options.width + '" height="' + options.height + '"' + emb + '></embed></object>';

                    process_flash(contents);
                }

                $(options.textArea).html(img.attr("alt"));

            });

            if (!loaded) {

                obj.trigger("click");

                var thumbCount = $(".thumbnail", $(options.thumbArea)).length;

                var thumsPerSlide = $(".thumbnail-list", $(options.thumbArea)).width() / ($(".thumbnail:first", $(options.thumbArea)).width() + 4)
                options.thumbPerSlide = (thumsPerSlide < 1) ? Math.ceil(thumsPerSlide) : Math.floor(thumsPerSlide);
                totalSlides = Math.ceil(thumbCount / options.thumbPerSlide);

                var slideAreaWidth = ($(".thumbnail:first", $(options.thumbArea)).width() + 4) * thumbCount;

                $(".thumbnails", $(options.thumbArea)).css("width", slideAreaWidth);

                var img = $("<div />").attr({
                    'class': "arrow-left"
                })

                img.appendTo($(options.thumbArea));

                img.click(function() { alert(1) });

                img = $("<div />").attr({
                    'class': "arrow-right"
                });

                img.appendTo($(options.thumbArea));

                manage_arrows();

                loaded = true;
            }

        });
    };
})(jQuery);
