mp.project = {};
mp.globals.nodes = {};

mp.project.hide_message = function(name) {
    $('#viral-messages').hide();
    mpmetrics.track('Hide message', {'type': name });
    mp.cookie.set('hide_' + name, 1, 999);
};

mp.project.add_member = function(project_id, token, box, email) {
    $.post('/projects/invite/' + project_id + '/', {'email' : email, 'token' : token}, function(data) {
        $('#project-invite-ajax-indicator').hide();
        if (data && data.invited) {
            if (data.full_name) {
                var member = '<div class="member">' +
                        '<img title="Remove" class="icon remove link" src="' + mp.globals.img_dir + '/icons/delete.png" project="' + project_id + '" user="' + data.user_id + '"/> ' +
                        mp.utility.shorten_string(data.full_name, 28) + 
                    '</div>';
                
                $('.options[project="' + project_id + '"] .member_names').append(member);
                box.siblings().filter('.email_sent_message').hide();
                mpmetrics.track('Add existing user to project');
            } else {
                box.siblings().filter('.email_sent_message').show();
                mpmetrics.track('Send project invite email');
            }
        }
    }, "json");
};

mp.project.ready = function() {
    $(".options_button").click(function() {
        $(this).parent().parent().siblings().filter(".options").toggle();
    });

    $('.invite_button').click(function() {
        var opt = $(this).parent().parent().siblings().filter(".options");
        var box = opt.find('.invite_box .add_member_email');
        opt.show();
        box.focus();
        box.select();
    });

    $('.text_replace').focus(function() {
        var default_val = $(this).attr('default_value');
        var current_val = $(this).val();
        $(this).css('color', '#000000');
        if (!default_val || default_val == current_val) {
            $(this).attr('default_value', current_val);
            $(this).attr('value', '');
        }
    });
    
    $('.text_replace').blur(function() {
        if (!$(this).val().length) {
            $(this).attr('value', $(this).attr('default_value'));
        }
        if ($(this).val() == $(this).attr('default_value')) {
            $(this).css('color', '#acacac');
        }
    });

    $('.remove').live('click', function() {
        var user_id = $(this).attr('user');
        var project_id = $(this).attr('project');
        $.get('/projects/remove_member/' + project_id + '/' + user_id + '/', "json");
        $(this).parent().hide();
    });

    $('.invite_form_button').click(function() {
        var project_id = $(this).attr('project');
        var token = $(this).attr('token');

        var box = $("#add_member_" + project_id);
        var email = box.val();

        if (email.length) {
            mp.project.add_member(project_id, token, box, email);
        }
    });

    $(".add_member_email").keydown(function(e) {
        // Handle the search field on enter
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code == 13) {
            // Enter key
            var email = $(this).val();
            var project_id = $(this).attr('project');
            var token = $(this).attr('token');
            var box = $(this);
            if (email.length) {
                $(this).blur();
                mp.project.add_member(project_id, token, box, email);
            }
        }
    });
    
    $('.edit').live('click', function() {
        var wrapper = $(this).parents('.project_info');
        var project_id = wrapper.attr('project');
        var editables = wrapper.find('.editable');
        for (var i = 0; i < editables.length; i++) {
            if (!mp.globals.nodes[project_id]) { mp.globals.nodes[project_id] = {}; }
            var el = editables[i];
            $(el).attr('editable_index', i);
            var editable_wrapper = $(el).parent();
            // Get 'value' attribute, defaulting to text()
            var value = ($(el).attr('value')) ? $(el).attr('value') : $(el).text();
            var field = $(el).attr('field');
            mp.globals.nodes[project_id][i] = el;
            var input = $('<input type="text">');
            input.addClass('text_replace').addClass('editable');
            input.attr('value', value).attr('editable_index', i).attr('field', field);
            editable_wrapper.html(input);
        }
        $(this).removeClass('edit').addClass('save');
        $(this).val('Save');
        mpmetrics.track('Projects - click edit');
    });

    $('.save').live('click', function() {
        var wrapper = $(this).parents('.project_info');
        var project_id = wrapper.attr('project');
        // Get text boxes
        editables = wrapper.find('.editable');
        var params = {
            to_send: {},
            to_insert: []
        };
        var that = this;
        // Prepare to save
        for (var i = 0; i < editables.length; i++) {
            var el = editables[i];
            var idx = $(el).attr('editable_index');
            var node = $(mp.globals.nodes[project_id][idx]);
            var editable_wrapper = $(el).parent();
            // Get 'value' attribute, defaulting to text()
            var value = ($(el).attr('value')) ? $(el).attr('value') : $(el).text();
            var maxlength = node.attr('maxlength');
            var field = node.attr('field');
            node.attr('value', value);
            node.attr('title', value);
            node.text(maxlength ? mp.utility.shorten_string(value, maxlength) : value);
            params.to_send[field] = value;
            // Save both container and node to insert
            params.to_insert.push([editable_wrapper, node]);
        }

        // Post update to server & process returned data
        $.post('/projects/update/' + project_id + '/', params.to_send, function(data) {
            if (data && data.updated == true) {                    
                for (var i in params.to_insert) {
                    if (i) {
                        var elements = params.to_insert[i];                        
                        elements[0].html(elements[1]);
                    }
                }
                $("#edit_errors").hide();
                $(that).removeClass('save').addClass('edit');
                $(that).val('Edit');
            } else if (data && data.errors){
                $("#edit_errors").html('');
                for (var field in data.errors) {
                    if (field) {
                        for (var err in data.errors[field]) {
                            if (err) {
                                $("#edit_errors").append(data.errors[field][err] + ' ');
                            }
                        }
                    }
                }
                $("#edit_errors").show();
            } else {
                $("#edit_errors").html('An unknown error occurred.');
                $("#edit_errors").show();
            }

        }, "json");
        mpmetrics.track('Projects - click save')
    });

    $('#datapoint_tooltip').qtip({
        content: 'Every time you track an event: a song play, a user comment, or a step in a funnel--that counts as a data point. They are like tracking credits.',
        style: 'mixpanel_wide',
        position: tt_pos,
        api: {
            onShow: function() { mpmetrics.track("pricing", {"tooltip": "datapoint"}); }
        }
    });

    $('.popup-continue').click(function() {
        var url = $(this).attr('next');
        mpmetrics.track('Click pay', {}, function() {
            window.location = url;
        });
    });

    $("#purchase_promo").click(function() {
        mpmetrics.track('Click continue (promo)')
    });
};



