(function($) {
    $.profile = function(options){
        var defaults = {
            url: "",
            selected: "",
            showPrivacy: ["private", "users", "friends"],

            initialData: {
                search: "",
                filters: []
            }
        };

        var opts = $.extend(defaults, options);

        var data = opts.initialData;

        var lane = $("#memo-lane");
        var laneLeft = 0;
        var laneOffsetLeft = lane.offset().left;

        var popups = $("#popup-templates").bitPopup();
        var templates = $("#memo-lane").bitTemplates();
        
        var layout = $("#memo-lane").layoutRects({
            containerHeight: 435,
            handler: templates.handler
        });

        $('#memo-content').scrollable({
            items: '#selected_items',
            prevPage: '.selected_items_left',
            nextPage: '.selected_items_right',
            keyboard: false
        });

        $("a.favorite").favorite();
        $("ul.tabs").tabs("div.panes > div.sub-pane");

        function update(url){
            $.loader().show_ajax_loader();
            $.post(url, data, function(json) {
                layout.reset().update(json.memories);
                lane.enableDraggable({laneLeft: laneLeft, laneOffsetLeft: laneOffsetLeft});
                bindEvents();
                $.loader().hide_ajax_loader();
            }, "json");
        }

        update(opts.url);

        function bindEvents() {
            $(".memo-lane-content").click(function() {
                $.metadata.setType("attr", "data");
                var bit_data = $(this).metadata().bit_data;
                
                // When a public memory is clicked, it should be opened rather than popped up.
                // FIXME Should probably be done via HTML directly rather than with JS.
                if (bit_data.doc_type == "Memory") {
                    window.location = bit_data.showmore_url;
                } else {
                    popups.show($(this));

                    var current = popups.currentPopup();
                    current.click(function(e) {
                        var et = e.target;
                        if (!$(et).is("embed, object") && !$(et).hasClass("dont_hide_popup")){
                            popups.hide(current);
                            return false;
                        }
                    });
                }

                return false;
            });

            $(".memo-lane-content").hover(
                function() {
                    $(this).addClass("rotate0");
                    $(this).find("span, a").addClass("focused");
                    $(this).find(".overlay-fade").fadeTo("fast", 0.1);
                    $(this).find(".overlay-info").show();
                },
                function() {
                    $(this).removeClass("rotate0");
                    $(this).find("span, a").removeClass("focused");
                    $(this).find(".overlay-fade").fadeTo("fast", 1.0);
                    $(this).find(".overlay-info").hide();
                }
            );
        }
        
        return {
            update: function(url){
                 update(url);
            }
        };
    };
})(jQuery);


