function loadGallerySelection() {
    $("ul.gallery-category a:first").addClass("select").closest("li").addClass("select-item");
    $("ul.gallery-category a").click(galleryCategoryChange);
    $("ul.gallery-selection").each(function() {
        setupGallerySelection(this);
    });
}

function setupGallerySelection(gallery) {
    var galleryBox = $(gallery).closest("div.gallery-box");
    galleryBox.find("a.nextPage").click(gallerySelectionNextPage);
    galleryBox.find("a.prevPage").click(gallerySelectionPrevPage);
    galleryBox.find("div.gallery-paging").css("visibility", "visible");
    configureGallerySelection(galleryBox, 0);
}

function gallerySelectionNextPage() {
    var gallery = $(this).closest("div.gallery-box");
    var pageNumber = parseInt(gallery.find("div.gallery-paging input").attr("value"));
    configureGallerySelection(gallery, pageNumber + 1);
    return false;
}

function gallerySelectionPrevPage() {
    var gallery = $(this).closest("div.gallery-box");
    var pageNumber = parseInt(gallery.find("div.gallery-paging input").attr("value"));
    configureGallerySelection(gallery, pageNumber - 1);
    return false;
}

function galleryCategoryChange() {
    var gallery = $(this).closest("div.gallery-box");
    gallery.find("ul.gallery-category a").removeClass("select");
    gallery.find("ul.gallery-category li").removeClass("select-item");
    $(this).addClass("select").closest("li").addClass("select-item").removeClass("onhover");
    configureGallerySelection(gallery, 0);
    return false;
}

function galleryFilter(gallery) {
    var filter = gallery.find("ul.gallery-category a.select").closest("li").find("input").attr("value");
    if (filter == null || filter == "") {
        filter = "";
    } else {
        filter = "." + filter;
    }
    return filter;
}

function configureGallerySelection(gallery, pageNumber) {
    var filter = galleryFilter(gallery);
    if (filter != "") {
        gallery.find("ul.gallery-selection li:not(" + filter + ")").hide();
    }
    var elements = gallery.find("ul.gallery-selection li" + filter).show();
    var count = elements.length;
    var totalPages = gallerySelectionTotalPages(count);
    var paging = $(gallery).find("div.gallery-paging");

    if (pageNumber < 0) {
        pageNumber = 0;
    }

    if (pageNumber != 0 && pageNumber > totalPages - 1) {
        pageNumber = totalPages - 1;
    }

    if (totalPages > 1) {
        paging.find("a.prevPage, a.nextPage").show().hide().show();
    } else {
        paging.find("a.prevPage, a.nextPage").hide();
    }

    var startIndex = count == 0 ? 0 : pageNumber * 9 + 1;
    var endIndex = (pageNumber + 1) * 9;
    if (endIndex > count) {
        endIndex = count;
    }

    paging.find("input").attr("value", pageNumber);
    paging.find("span").html(startIndex + "-" + endIndex + " of " + count);

    elements.each(function(index) {
        if (index >= startIndex - 1 && index <= endIndex - 1) {
            $(this).show();
        } else {
            $(this).hide();
        }
    });
}

function gallerySelectionTotalPages(count) {
    return galleryPageCount(count, 9);
}

function galleryPageCount(count, itemsPerPage) {
    var pages = (count / itemsPerPage) | 0;
    if (count % itemsPerPage > 0) {
        pages++;
    }
    return pages;
}

function loadGalleryThumbnailsPreview() {
    $("div.gallery-details-container div.thumbnails-container li").mouseenter(function() {
        var offset = $(this).offset();
        var href = $(this).find("a").attr("href");
        var img = $(this).find("img").attr("src");
        /*var ext = img.substring(img.length - 4, img.length);
        var base = img.substring(0, img.length - 4);*/
        var left = 0;
        if ($.browser.msie && $.browser.version == "6.0") {
            var index = $(this).closest("ul").find("li.visible").index(this);
            left = $(this).closest("gallery-box").offset().left + 330 + 53 * index;
        } else {
            left = offset.left + 26 - 48;
        }
        var preview = $("#galleryThumbnailPreview");
        preview.find("a").attr("href", href);
        preview.find("img").attr("src", img);
        preview.stop().show()
                .css("top", offset.top - 17)
                .css("left",  left)
                .animate({ opacity: 1.0 }, 200);
    });
    $("#galleryThumbnailPreview").mouseleave(function() {
        $("#galleryThumbnailPreview").stop().animate({ opacity: 0.0 }, 200, "swing", function() {
            $(this).hide().css("opacity", 0);
        });
    });
    $("#galleryThumbnailPreview").mouseenter(function() {
        $("#galleryThumbnailPreview").stop().show().animate({ opacity: 1.0 }, 200);
    });
    $("div.gallery-details-container div.thumbnails-container ul li a").click(showGalleryImage);
    $("#galleryThumbnailPreview a").click(showGalleryImage);
}

function showGalleryImage() {
    var image = $(this).attr("href");
    $("div.gallery-box").find(".img-container img").attr("src", image);
    return false;
}

function loadGalleryDetailsScroll() {
    $("div.gallery-details-text div.scrolling-box a.scroll-up").click(function() {
        var scrollingBox = $(this).closest("div.scrolling-box");
        var contents = scrollingBox.find(".scroll-contents");
        /*var contentsHeight = contents.height();*/
        var marginTop = contents.css("marginTop");
        marginTop = parseInt(marginTop.substring(0, marginTop.length - 2));

        if (marginTop < 0) {
            marginTop = marginTop + 25;
        }

        if (marginTop > 0) {
            marginTop = 0;
        }

        contents.css("marginTop", marginTop);

        return false;
    });

    $("div.gallery-details-text div.scrolling-box a.scroll-down").click(function() {
        var scrollingBox = $(this).closest("div.scrolling-box");
        var contents = scrollingBox.find(".scroll-contents");
        var containerHeight = scrollingBox.find(".scroll-container").height();
        var contentsHeight = contents.height();
        var marginTop = contents.css("marginTop");
        marginTop = parseInt(marginTop.substring(0, marginTop.length - 2));

        if (containerHeight - marginTop < contentsHeight) {
            marginTop -= 25;
        }

        if (containerHeight - marginTop > contentsHeight) {
            marginTop = containerHeight - contentsHeight;
        }

        contents.css("marginTop", marginTop - 25);

        return false;
    });
}

function loadGalleryDetailsThumbnailsPagination() {
    $(".gallery-box .thumbnails-container a.prev").click(function () {
        var container = $(this).closest(".thumbnails-container");
        var index = container.find("input").attr("value") - 1;
        setupGalleryThumbnails(index, container);
        return false;
    });

    $(".gallery-box .thumbnails-container a.next").click(function () {
        var container = $(this).closest(".thumbnails-container");
        var index = container.find("input").attr("value") + 1;
        if (index < 0) {
            index = 0;
        }
        setupGalleryThumbnails(index, container);
        return false;
    });

    setupGalleryThumbnails(0, $(".gallery-box .thumbnails-container"));
}

function setupGalleryThumbnails(pageIndex, container) {
    var thumbs = container.find("ul li");
    var thumbsCount = thumbs.length;
    var pageCount = galleryPageCount(thumbsCount, 10);

    if (pageIndex >= pageCount) {
        pageIndex = pageCount - 1;
    }

    container.find("input").attr("value", pageIndex);
    container.find("a.prev").css("visibility", pageIndex == 0 ? "hidden" : "visible");
    container.find("a.next").css("visibility", pageIndex == pageCount - 1 ? "hidden" : "visible");

    var startIndex = 10 * pageIndex;
    var endIndex = 10 * (pageIndex + 1);

    if (endIndex > thumbsCount) {
        /*var dif = endIndex - thumbsCount;*/
        endIndex = thumbsCount;
        startIndex = endIndex - 10;
        if (startIndex < 0) {
            startIndex = 0;
        }
    }
    thumbs.css("visibility", "visible");
    container.find("div.anim ul").animate({ marginLeft: startIndex * -53 }, 250, "swing", function() {
        thumbs.each(function(index) {
            var visible = index >= startIndex && index < endIndex;
            $(this).css("visibility", visible ? "visible" : "hidden");
            if (visible) {
                $(this).addClass("visible");
            } else {
                $(this).removeClass("visible");
            }
        });
    });

}

$(document).ready(function() {
    loadGallerySelection();
    loadGalleryThumbnailsPreview();
    loadGalleryDetailsScroll();
    loadGalleryDetailsThumbnailsPagination();
});