(function($) {

    var displayHandCursor = "false";

    $.fn.traderaThumbnail = function(options) {
        var defaults = {
            mainImageDiv: "",
            preloadImages: false,
            thumbnailBorderClass: "active",
            onImageClick: function() { }
        }

        options = $.extend(defaults, options || {});

        if (options.mainImageDiv == "") return this;

        setCursorAndClickImageStyle(options);

        preLoadImages(this, options);

        return this.each(function() {
            var thumbnailAnchors = $(this).find("a");
            thumbnailAnchors.click(function() { return onThumbnailClick(this, thumbnailAnchors, options); });
        });
    }

    $.traderaThumbnail = function() { };
    $.traderaThumbnail.setImageClickCursor = function(shouldDisplayHandCursor) {
        if (shouldDisplayHandCursor)
            displayHandCursor = "true";
    };

    function onThumbnailClick(thumbnail, anchors, options) {

        if (!isThumbnailSelected(thumbnail, options)) {
            var href = thumbnail.name;

            setBackgroundImageStyle(options, href);
            setActiveThumbnailClass(anchors, thumbnail, options);
        }

        return false;
    }

    function isThumbnailSelected(thumbnail, options) {
        $(thumbnail).hasClass(options.thumbnailBorderClass);
    }

    function addSecondImageToEnableFading(options) {
        var mainImage = $(options.mainImageDiv).find("img");
        $(options.mainImageDiv).css({ position: "relative", lineHeight: 0, overflow: "hidden" });
        $("<img>").attr("src", mainImage.attr("src")).attr("alt", mainImage.attr("alt")).css("height", 258).css("width", 344).appendTo(options.mainImageDiv);
        $(options.mainImageDiv).find("img").eq(0).css({ position: "absolute", top: 0, left: 0 });
    }

    function setActiveThumbnailClass(anchors, thumb, options) {
        $(anchors).removeClass(options.thumbnailBorderClass);
        $(thumb).addClass(options.thumbnailBorderClass);
    }

    function setCursorAndClickImageStyle(options) {
        var backgroundImage = $(options.mainImageDiv).find("img").eq(0);

        $(backgroundImage).unbind('click');

        if (displayHandCursor === "true")
        {    $(backgroundImage).css({ cursor: "pointer" });
            $(backgroundImage).click(options.onImageClick);
        }
        else
            $(backgroundImage).css({ cursor: "default" });


    }

    function setBackgroundImageStyle(options, href) {
        var backgroundImage = $(options.mainImageDiv).find("img").eq(0);
        $(backgroundImage).attr("src", href).css("height", 258).css("width", 344);
    }

    function preLoadImages(div, options) {
        var defaultImageSource = $(options.mainImageDiv).find("img")[0].src;
        $(div).find("a").each(function() {
            if (options.preloadImages && this.name) {
                var img = new Image();
                img.src = this.name;
            }
            if (this.name == defaultImageSource) $(this).addClass(options.thumbnailBorderClass);
        });
    }
})(jQuery);
