ctk_image_gallery = function(gallery_element_id) {

    var self = this;

    var set_main_ids = new Array();
    var unset_main_ids = new Array();
    var privacy_level_ids = new Array();
    var make_friends_only_ids = new Array();
    var make_public_ids = new Array();
    var make_private_ids = new Array();
    var initial_main_image_id = null;
    var privacy_level_cache = new Array();

    function show(image_id, id_list, b) {
        var id;
        if (id = id_list[image_id]) {
            get_object(id).style.display = b ? 'block' : 'none';
        }
    }

    this.set_initial_main = function (image_id) {
        initial_main_image_id = image_id;
    };

    this.init = function() {
        self.set_main(initial_main_image_id);
    }

    this.add_set_main_action_link = function (image_id, set_id) {
        set_main_ids[image_id] = set_id;
    };

    this.add_unset_main_action_link = function (image_id, unset_id) {
        unset_main_ids[image_id] = unset_id;
    };

    this.set_main = function (image_id) {
        self.unset_main();
        add_css_class(get_object(image_id), 'default');
        show(image_id, unset_main_ids, true);
        show(image_id, set_main_ids, false);

        // Hide the privacy level links; they're irrelevant for main images.
        show(image_id, make_friends_only_ids, false);
        show(image_id, make_public_ids, false);
        show(image_id, make_private_ids, false);

    };

    this.unset_main = function () {
        function restore_privacy_level(image_id) {
            if (privacy_level_cache[image_id]) {
                self.set_privacy_level(image_id, privacy_level_cache[image_id]);
            }
        }
        for (var image_id in set_main_ids) {
            remove_css_class(get_object(image_id), 'default');
            show(image_id, unset_main_ids, false);
            show(image_id, set_main_ids, true);
            restore_privacy_level(image_id);
        };
    };

    this.add_make_friends_only_action_link =
        function (image_id, make_friends_only_id) {
            make_friends_only_ids[image_id] = make_friends_only_id;
        };

    this.add_make_public_action_link =
        function (image_id, make_public_id) {
            make_public_ids[image_id] = make_public_id;
        };

    this.add_make_private_action_link =
        function (image_id, id) {
            make_private_ids[image_id] = id;
        };

    this.set_privacy_level = function (image_id, privacy_level) {
        if (privacy_level == 'friends_only') {
            remove_css_class(image_id, 'public');
            remove_css_class(image_id, 'private');
            show(image_id, make_friends_only_ids, false);
            show(image_id, make_public_ids, true);
            show(image_id, make_private_ids, true);
        }
        else if (privacy_level == 'public') {
            remove_css_class(image_id, 'friends_only');
            remove_css_class(image_id, 'private');
            show(image_id, make_friends_only_ids, true);
            show(image_id, make_public_ids, false);
            show(image_id, make_private_ids, true);
        }
        else if (privacy_level == 'private') {
            remove_css_class(image_id, 'friends_only');
            remove_css_class(image_id, 'public');
            show(image_id, make_friends_only_ids, true);
            show(image_id, make_public_ids, true);
            show(image_id, make_private_ids, false);
        }
        add_css_class(image_id, privacy_level);
        privacy_level_cache[image_id] = privacy_level;
    };
}
