mp.report.events.menu = {};
mp.report.events.menu.util = {
    track_demo_interaction: function() {
        mpmetrics.register({'demo interaction': 'true'}, 'funnels');
    }
};

mp.report.events.menu.update = function(menu_item) {
    // Update menu to show clicked item
    var container = menu_item.parent().parent();
    var current = container.children('div');
    menu_item.siblings().removeClass('selected');
    menu_item.addClass('selected');
    current.text(menu_item.text());
    menu_item.parent().hide();
    
    var key = container.parent().attr('key'),
        params = {};
    params[key] = menu_item.attr('val');

    if (key == 'unit') {
        var intervals = {
            hour: 96,
            day: 31,
            week: 12,
            month: 12
        };
        params.interval = intervals[menu_item.attr('val')];
    }
    return params;

    // if (mp.report.globals.params.service == 'events/geo' && key == 'unit') {
    //     mp.report.events.views.advanced_maps(mp.report.globals.current_event[0]);
    // }

    // Update advanced when you click on events
    // if (menu_item.attr('val') == 'events') {
    //     mp.report.events.views.advanced_events();
    // }
};


mp.report.events.menu.table_update = function(menu_item) {
    // Update table menu to show clicked item
    var container = menu_item.parent().parent();
    menu_item.siblings().removeClass('selected');
    menu_item.addClass('selected');
    var key = container.parent().attr('key');
    mp.report.globals.table_params[key] = menu_item.attr('val');
    var current = container.parent().parent().find('.current');
    current.text(menu_item.text());
};

mp.report.events.menu.maintain_state = function(params) {
    var request = mp.report.globals.nav.getURLRequest();
        
    function arr_to_obj(arr) {
        var o = {};
        for (var i = 0; i < arr.length; i++ ) {
            o[arr[i]] = '';
        }
        return o;
    }
    
    var show_hide_li = function(div_name, to_select, to_show) {
        
        to_show = arr_to_obj(to_show);        
        $("#" + div_name + " li").each(function() {
            var val = $(this).attr('val');
            
            // Select or unselect this element
            if (val == to_select) {
                $(this).addClass('selected');
                $("#" + div_name + " .current").text($(this).text());
            } else {
                $(this).removeClass('selected');
            }
            
            // Show or hide this element
            if (val in to_show) {
                $(this).removeClass('hidden');
            } else {
                $(this).addClass('hidden');
            }
            
        });
    };
    
    switch(request.path) {
        case '#events':            
            // Analysis dropdown
            show_hide_li("analysis_dropdown", "events", ["events"]);
            
            // Type dropdown
            var type = params.endpoint || params.type;
            var types = ["general", "unique", "average"];
            if (params.event.length == 1) {
                types.push("retention");
            }
            show_hide_li("type_dropdown", type, types);
            
            var views = [],
                ctype = '';
            // View dropdown
            if (type == 'retention') {
                views = ['line', 'table'];
                ctype = params.chart_sub_type;
            } else {
                views = ['line'];
                if (params.event.length > 1) {
                    views.push('pie');
                }
                ctype = params.chart_type;
                if ($.inArray(ctype, views) < 0) {
                    ctype = views[0];
                }
            }
            show_hide_li("view_dropdown", ctype, views);
            
            // Time dropdown
            var times = ['day', 'week', 'month'];
            if (type == 'general') {
                times.push('hour');
            }
            show_hide_li("time_dropdown", params.unit, times);
            break;
        case '#events/properties':
            // Analysis dropdown
            show_hide_li("analysis_dropdown", "events/properties", [/*"events", */"events/properties"]);
        
            // Type dropdown
            var type = params.type;
            show_hide_li("type_dropdown", type, ["general", "unique", "average"]);
        
            // View dropdown
            var views = ['line', 'pie'];
            show_hide_li("view_dropdown", params.chart_type, views);
        
            // Time dropdown
            var times = ['day', 'week', 'month'];
            if (type == 'general') {
                times.push('hour');
            }
            show_hide_li("time_dropdown", params.unit, times);
            break;
    }
};


mp.report.events.menu.click_handlers = function() {
    $(".dropdown").mouseenter(function() { 
        $(this).find('ul').show();
    }).mouseleave(function() {
        $(this).find('ul').hide();
    });

    $(".dropdown.graph li").click(function() { 
        /*  Click handler for graph-related dropdown menus.
        */
        // Parse the changes from the menu
        var params = mp.report.events.menu.update($(this)),
            request = mp.report.globals.nav.getURLRequest();
            
        request.params = $.extend({}, request.params, params);
        mp.report.globals.nav.setURL(request);
        
        // var state = ((mp.report.globals.current_event.length > 1 ) ? 'overview' : mp.report.globals.params.service);
        // mp.report.events.menu.change_state(state, mp.report.globals.params.endpoint);
        
        // var rgp = mp.report.globals.params;
        // mpmetrics.track('change graph', {
        //     'graph': [state, rgp.endpoint, rgp.chart_type].join('-'),
        //     'graph+unit': [state, rgp.endpoint, rgp.chart_type, rgp.unit].join('-'),
        //     'unit': rgp.unit,
        //     'service': state,
        //     'endpoint': rgp.endpoint,
        //     'chart type': rgp.chart_type
        // });
        // mpmetrics.track('reports', {'action': 'click graph menu'});
        // mp.report.events.menu.util.track_demo_interaction();
    });

    $("#events_table .event").click(function() {
        /*  Click handler for event-table clicks.
            Updates the hash url with the correct event value.
        */
        var evt = mp.report.globals.wrappers.event.map[$(this).attr('val')];
        mp.report.globals.nav.updateURL("events", { 
            event: [evt], 
            service: 'events'
        });
        
        // mp.report.events.graph_event(evt);
        mpmetrics.track('reports', {'action': 'click event table'});
        mp.report.events.menu.util.track_demo_interaction();
    });

    $("#prop_table .prop_table_item").live('click', function() {
        /*  Live click handler for properties menu.  Will handle clicks for 
            all present and future menu items.
        */
        $("#prop_table .prop_table_item").removeClass("selected");
        $(this).addClass("selected");
        
        
        mp.report.globals.nav.updateURL("events/properties", { 
            name: mp.report.globals.wrappers.property.map[$(this).attr('val')],
            service: 'events/properties'
        });        
    });

    $("#properties_header img").click(function() {
        var div = $("#prop_table");
        if (div.is(':visible')) {
            $(this).attr('src', '/site_media/images/reports/events/maximize.png');
        } else {
            $(this).attr('src', '/site_media/images/reports/events/minimize.png');
        }
        div.toggle();
    });
    
    // Only for the retention menu, unfortunately
    $(".dropdown.table li").click(function() { 
        /*  Click handler for graph-related dropdown menus.
        */
        $(this).parent().hide();
        mp.report.events.menu.table_update($(this));
        var parent = $(this).parent();
        if (parent.attr('id') == 'table_update') {
            mp.report.globals.table_params.endpoint = 'table_update';
            mp.report.globals.table_params.unit = 'week';
        } else if (parent.attr('id') == 'table_retention') {
            mp.report.globals.table_params.endpoint = 'retention'; 
        }
        mp.report.events.views.table();

        // Tracking info
        var update_info = '', 
            rgp = mp.report.globals.table_params;
        if (parent.attr('id') == 'table_update') {
            update_info = [rgp.endpoint, rgp.type].join('-');
        } else if (parent.attr('id') == 'table_retention') {
            update_info = [rgp.endpoint, rgp.unit].join('-');
        }
        mpmetrics.track('change event table', {
            'table': update_info,
            'endpoint': rgp.endpoint
        });
        mpmetrics.track('reports', {'action': 'click table menu'});
        mp.report.events.menu.util.track_demo_interaction();
    });
};
