var currentGallery = 0;
var linkMax = 10;
var linkCount = 0;
var title = "";
var page = "";

$(document).ready(function() {
    linkCount = Math.ceil(galleryCount / pageCount)
    title = pageTitle;
    page = pageSrc;

    var navigation = $("#navigation");
    for (var x = 0; x < linkCount; x++) {
        var link = $("<li>" + (x + 1) + "</li>");
        link.click(function() {
            swapSelectedLink($(this));
            setVisibleLinks(navigation.children(":not(.unselectable)"));
            currentGallery = $("#navigation").children("li:not(.unselectable)").index(this) * pageCount;
            populate(currentGallery, pageCount);
        });
        navigation.append(link);
    }

    swapSelectedLink(navigation.children(":first-child"));
    setVisibleLinks(navigation.children());

    if (linkCount > 2) {
        navigation.prepend(createNavPrevLink());
        navigation.prepend(createNavFirstLink());
        navigation.append(createNavNextLink());
        navigation.append(createNavLastLink());
    }

    populate(0, pageCount);
});


function populate(start, count) {
    for (var x = 0; x < pageCount; x++) {
        $("#thumb" + x).show();
        var img = $("#thumb" + x + " img");
        img.addClass("loading");
        img.attr("alt", "");
        img.attr("src", "/blank.gif");
        $("#thumb" + x + " span.title").text("");
        $("#thumb" + x + " span.date").text("");
        $("#thumb" + x).unbind("click");
    }

    $.getJSON("php/carousel.php?title="+title+"&start=" + start + "&count=" + count, function(data) {
        for (x in data.carousel) {
            var name = "#thumb" + x;
            var img = $(name + " img");
            img.load(function() {
                $(this).removeClass('loading');
            });
            img.attr("alt", data.carousel[x].item.title);
            img.attr("src", data.carousel[x].item.thumbnail);
            $(name + " span.title").text(data.carousel[x].item.title);
            $(name + " span.date").text(data.carousel[x].item.date);
            $(name + " input[name=id]").attr("value", data.carousel[x].item.id);
            $(name).click(function() {
                window.location = page+"/" + $(this).children("input[name=id]").attr("value");
            });
        }
        for (x = data.carousel.length; x < pageCount; x++) {
            $("#thumb" + x).hide();
        }
    });
}

function swapSelectedLink(to) {
    if (!to.hasClass("unselectable")) {
        to.siblings(".selected").removeClass("selected");
        to.addClass("selected");
        to.siblings(".unselectable").removeClass("disabled");
        if (to.prev().hasClass("unselectable")) {
            to.prev().addClass("disabled");
            to.prev().prev().addClass("disabled");
        }
        if (to.next().hasClass("unselectable")) {
            to.next().addClass("disabled");
            to.next().next().addClass("disabled");
        }
    }
}

function setVisibleLinks(links) {
    var pos = 0;
    var len = links.length;

    for (; pos < len; pos++)
        if ($(links[pos]).hasClass("selected"))
            break;

    var half = Math.floor(linkMax / 2);
    var start = Math.max(0, pos - (len - pos > half ? half : linkMax - (len - pos)));
    var end = Math.min(start + linkMax, len);

    links.addClass("hidden");
    for (x = start; x < end; x++)
        $(links[x]).removeClass("hidden");
}

function createNavPrevLink() {
    var prev = $("<li class=\"unselectable\" >&lt;</li>");
    prev.click(function() {
        if ($(this).hasClass("disabled"))
            return;
        swapSelectedLink(prev.siblings(".selected").prev());
        setVisibleLinks(prev.siblings(":not(.unselectable)"));
        currentGallery = Math.max(currentGallery - pageCount, 0);
        populate(currentGallery, pageCount);
    });
    return prev;
}

function createNavNextLink() {
    var next = $("<li class=\"unselectable\" >&gt;</li>");
    next.click(function() {
        if ($(this).hasClass("disabled"))
            return;
        swapSelectedLink(next.siblings(".selected").next());
        setVisibleLinks(next.siblings(":not(.unselectable)"));
        currentGallery = Math.min(currentGallery + pageCount, galleryCount);
        populate(currentGallery, pageCount);
    });
    return next;
}

function createNavFirstLink() {
    var first = $("<li class=\"unselectable\" >&lt;&lt;</li>");
    first.click(function() {
        if ($(this).hasClass("disabled"))
            return;
        swapSelectedLink(first.next().next());
        setVisibleLinks(first.siblings(":not(.unselectable)"));
        currentGallery = 0;
        populate(currentGallery, pageCount);
    });
    return first;
}

function createNavLastLink() {
    var last = $("<li class=\"unselectable\" >&gt;&gt;</li>");
    last.click(function() {
        if ($(this).hasClass("disabled"))
            return;
        swapSelectedLink(last.prev().prev());
        setVisibleLinks(last.siblings(":not(.unselectable)"));
        currentGallery = (linkCount - 1) * pageCount;
        populate(currentGallery, pageCount);
    });
    return last;
}
