// FIX namespacing.
var makeLink = function($, image, description, name){
    var src = image.small;
    var href = image.large || image.small;
    var link = $("<a/>").attr("href", href).attr("rel", "lightbox[set]").attr("title", description);
    var img = $("<img/>").attr("src", src).attr("alt", name);
    link.append(img);
    return link;
};

var singleImageRowLayout = function($, container, images, description, name) {
    _.each(images, function(image) {
        var div = $("<div/>").addClass("imgDisplay");
        var link = makeLink($, image, description, name);
        div.append(link);
        container.append(div);
    });
};

var locationLayout = function($, container, images, description, name) {
    var mostImagesDiv = $("<div/>").addClass("imgDisplay");
    _.each(images, function(image, key) {
        var link = makeLink($, image, description, name);
        if(key === "001") {
            var imageDiv = $("<div/>").addClass("imgDisplay").append(link);
            container.append(imageDiv);
        } else {
            mostImagesDiv.append(link);
        }
    });
    container.append(mostImagesDiv);
};

var allOneRowLayout = function($, container, images, description, name) {
    var div = $("<div/>").addClass("imgDisplay");
    _.each(images, function(image) {
        var link = makeLink($, image, description, name);
        div.append(link);
    });
    container.append(div);
};

var layouts = {
    1 : singleImageRowLayout,
    2 : locationLayout,
    3 : allOneRowLayout
};

var displaySubmenu = function($, scriptsUrl) {

    var clickFn = function(hash) {
        var name = decodeURIComponent(hash);
        var pagePath = window.location.pathname;
        var sectionName = pagePath.substring(pagePath.lastIndexOf('/') + 1, pagePath.length - 4);

        $.get(scriptsUrl + "getPathFromName.php", {name: name, sectionName: sectionName}, function(path) {
            $.getJSON(scriptsUrl + "getFile.php", {page: path}, function(pageData) {
                var contentDiv = $(".actualContent");
                contentDiv.empty();
                var header = $("<h2/>").text(name);
                var subheader = $("<h3/>").text(pageData.description);
                contentDiv.append(header).append(subheader);
                layouts[pageData.layout || 1]($, contentDiv, pageData.images, pageData.description, name);
            });
        });
    };


    $.history.init(function(hash){
        if(hash != "") {
            clickFn(hash);
        }
    },
    { unescape: ",/" });

    var selected;
    var submenu = $(".submenu");
    $(".menu .menuItem").each(function() {
        var item = $(this);
        if(window.location.href.indexOf(item.attr("href")) > -1) {
            selected = item;
            item.addClass("selected");
        }
    });

    if(!selected) {
        submenu.hide();
        return;
    }

    submenu.show();
    var cats = submenu.find(".submenuCategories");
    cats.empty();

    var getSubmenuItems = function(location, header, div) {
        $.getJSON(scriptsUrl + "listFiles.php", {dir: location}, function(names) {
            _.each(names, function(name) {
                var encoded = encodeURIComponent(name);
                var subCatLink = $("<a/>").attr("href", "#" + encoded);
                subCatLink.click(function(e) {
                    e.preventDefault();
                    jQuery.history.load(encoded);
                });
                subCatLink.text(name);
                div.append(subCatLink);
            });
            header.data("subCats", div);
        });
    };

    var addLinks = function(allItems) {
        _.each(allItems, function(item) {
            var link = $("<a href='#'/>");
            link.text(item);
            var header = $("<h4/>").append(link);
            var container = $("<div/>");
            cats.append(header).append(container);
        });
    };

    var accordionise = function(prefix) {
        var getLocation = function(header) {
            var item = header.text();
            return prefix + item.toLowerCase() + "/";
        };

        var accordionChange = function(event, ui) {
            if(!ui.newHeader.data("subCats")) {
                var location = getLocation(ui.newHeader);
                getSubmenuItems(location, ui.newHeader, ui.newContent);
            } else {
                ui.newContent = ui.newHeader.data("subCats");
            }
        };

        var accordionCreate = function() {
            var header = cats.find("h4:first");
            getSubmenuItems(getLocation(header), header, cats.find("div:first"));
        };

        cats.accordion({animated: false, autoHeight: false, collapsible: true, active: false});
        cats.bind('accordionchangestart', accordionChange);
        cats.bind('accordioncreate', accordionCreate);
    };

    var addLinksToMenu = function(dir) {
        $.getJSON(scriptsUrl + "listFolders.php", {dir: dir}, function(pageData) {
            addLinks(pageData);
            accordionise(dir);
        });
    };

    if(selected.attr("class").indexOf("flowerMenu") > -1) {
        $(".formattingTable h1").text("All Flowers:");
        addLinksToMenu("../flowers/");
        $(".content").css("min-height", "500px");
    } else if(selected.attr("class").indexOf("orchidMenu") > -1) {
        $(".formattingTable h1").text("All Orchids:");
        $(".content").css("min-height", "500px");
        addLinksToMenu("../orchids/");
    } else if(selected.attr("class").indexOf("slideshowMenu") > -1) {
        $.getJSON(scriptsUrl + "listFolders.php", {dir: "../slideshows/"}, function(pageData) {
            var list = $("<ol/>");
            // FIX how to integrate with history?
            _.each(pageData, function(item) {
                var link = $("<a href='#'/>");
                var li = $("<li/>").append(link);
                link.text(item);
                link.click(function(e) {
                    e.preventDefault();
                    $(".actualContent").empty();
                    $.get(scriptsUrl + "getSlideshowFile.php", {page: item}, function(data) {
                        $(".actualContent").append(data);
                    });

                });
                list.append(li);
            });
            cats.append(list);
        });
    } else {
        $(".submenu").hide();
    }
};
