function apps_index() {
    $(document).ready(function() {
        $("#how_to").click(function() {
            $("#howto").modal({
                overlayClose: true
            });
            return false;
        });
    });
}

function testers_app() {
    $(document).ready(function() {
        $("#tabs").tabs();
        tabs_pagination("#tabs", "#feedback_history", "/feedback/history");
        tabs_forms("#feedback_create form", function() {
            var app_id = $("#feedback_create input[name='id']").val();
            if (app_id) {
                $.ajax({
                    type: "GET",
                    url: "/feedback/history",
                    data: "id=" + app_id + "&page=1",
                    dataType: "json",
                    success: function(json) {
                        if (json['html']) {
                            $("#feedback_history").html(json['html']);
                        }
                    }
                });
            }
        });
        view_feedback();
    });
}

function developers_feedback() {
    $(document).ready(function() {
        $("#tabs").tabs();
        tabs_pagination("#tabs", "#rated_feedback", "/feedback/rated");
        tabs_pagination("#tabs", "#unrated_feedback", "/feedback/unrated");
        review_feedback();
    });
}

function developers_testers() {
    $(document).ready(function() {
        $("#tabs").tabs();
        tabs_pagination("#tabs", "#testers", "/requests/view");
        tabs_pagination("#tabs", "#requests", "/testers/view");
        requests_accept();
        requests_reject();
    });
}

function developers_app() {
    $(document).ready(function() {
        $("#tabs").tabs();
        tabs_forms("#edit form", function() {
            $("#content h1:first").html($("#edit form input[name='name']").val());
            $.ajax({
                type: "GET",
                url: "/developers/nav",
                dataType: "json",
                success: function(json) {
                    if (json['html']) {
                        $("#apps_nav").html(json['html']);
                    }
                }
            });
        });

        $("#edit_openings").click(function(evt) {
            $(".opening_show").addClass("hidden");
            $(".opening_edit").removeClass("hidden");
            return false;
        });
        $("#openings_form").submit(function(evt) {
            $(".opening_edit").addClass("hidden");
            $(".opening_show").removeClass("hidden");
            var jq = $(this);
            var opens = parseInt(jq.find("input[name='openings']").val());
            if (opens >= 0) {
                var url = jq.find("input[name='action']").val();
                $.ajax({
                    type: jq.attr("method"),
                    url: url,
                    data: jq.serialize(),
                    dataType: "json",
                    success: function(json) {
                        $("#open_show").html(opens);
                        if (json['message']) {
                            show_message(json['message']);
                        }
                    }
                });
            }
            else {
                jq.find("input[name='openings']").val($("#open_show").html());
            }
            return false;
        });
    });
}

function tabs_pagination(tabs_id, div_id, url) {
    $(tabs_id + " " + div_id + " .pager a").live("click", function(evt) {
        var href = $(this).attr("href");
        if (href) {
            href = href.substr(1);
            var id_page = href.split('/');
            $.ajax({
                type: "GET",
                url: url,
                data: "id=" + id_page[0] + "&page=" + id_page[1],
                dataType: "json",
                success: function(json) {
                    if (json['html']) {
                        $(div_id).html(json['html']);
                    }
                    if (json['message']) {
                        show_message(json['message']);
                    }
                }    
            });  
        }

        // stop default link behavior, must return false according to jQuery docs 
        return false;
    });
}

function tabs_forms(form, callback) {
    $("#tabs " + form).live("submit", function(evt) {
        var jq = $(this);
        var method = jq.attr("method");
        var url = jq.find("input[name='action']").val();
        if (url && method) {
            $.ajax({
                type: method,
                url: url,
                data: jq.serialize(),
                dataType: "json",
                success: function(json) {
                    if (json['html']) {
                        jq.parent().html(json['html']);
                    }
                    if (json['message']) {
                        show_message(json['message']);
                    }
                    if (callback) {
                        callback(json);
                    }
                }
            });
        }

        // stop default submit behavior, must return false according to jQuery docs
        return false;
    });
}

function show_message(msg) {
    $("#message").html('<span class="ui-icon ui-icon-info left" style="margin:0 5px;"></span>' + msg).show().delay(5000).fadeOut("slow");
}

function requests_accept() {
    $("#tabs a.accept-request").live("click", function(evt) {
        var jq = $(this);
        var req_id = jq.attr("reqid");
        var app_id = jq.attr("appid");
        if (req_id) {
            $.ajax({
                type: "GET",
                url: "/requests/verdict",
                data: "id=" + req_id + "&verdict=1",
                dataType: "json",
                success: function(json) {
                    if (json['email']) {
                        var emails = $("#email_list").text().trim();
                        if (emails) {
                            emails += ", ";
                        }
                        emails += json['email'];
                        $("#email_list").text(emails);
                    }
                    var row = jq.parent().parent();
                    var table = row.parent();
                    row.remove(); // remove row
                    var rownum = table.find("tr").length;
                    if (rownum < 2) {
                        table.append('<tr><td colspan="9" style="text-align:center;padding:10px 2px;">No requests.</td></tr>');
                    }
                    if (json['message']) {
                        show_message(json['message']);
                    }
                    $.ajax({
                        type: "GET",
                        url: "/testers/view",
                        data: "id=" + app_id + "&page=1",
                        dataType: "json",
                        success: function(json) {
                            if (json['html']) {
                                $("#testers").html(json['html']);
                            }
                        }
                    });
                }
            });
        }

        return false; // prevent default link behavior
    });
}

function requests_reject() {
    $("#tabs a.reject-request").live("click", function(evt) {
        var jq = $(this);
        var req_id = jq.attr("reqid");
        if (req_id) {
            $.ajax({
                type: "GET",
                url: "/requests/verdict",
                data: "id=" + req_id + "&verdict=0",
                dataType: "json",
                success: function(json) {
                    var row = jq.parent().parent();
                    var table = row.parent();
                    row.remove(); // remove row
                    var rownum = table.find("tr").length;
                    if (rownum < 2) {
                        table.append('<tr><td colspan="9" style="text-align:center;padding:10px 2px;">No requests.</td></tr>');
                    }
                    if (json['message']) {
                        show_message(json['message']);
                    }
                }
            });
        }

        return false; // prevent default link behavior
    });
}

function view_feedback() {
    $("#tabs .view-fb").live("click", function(evt) {
        var jq = $(this);
        var url = jq.attr("href");
        if (url) {
            $.ajax({
                type: "GET",
                url: url,
                dataType: "json",
                success: function(json) {
                    if (json['html']) {
                        $.modal('<div>' + json['html'] + '</div>', {
                            maxWidth: 750
                        });
                    }
                }
            });
        }

        return false; // prevent default behavior
    });

    $("#close_fb").live("click", function(evt) {
        $.modal.close();

        return false; // prevent default behavior
    });
}

function review_feedback() {
    $("#tabs .view-fb").live("click", function(evt) {
        // .remove-me-plz is used to make note of which row to remove if a feedback rating
        // is successful.  The row should be removed from unrated and rated should be refreshed.
        // Initially remove all elements of class .remove-me-plz if .view-fb is clicked, in case
        // a previous feedback review didn't remove the class itself
        $(".remove-me-plz").removeClass("remove-me-plz");
        var jq = $(this);
        var url = jq.attr("href");
        if (url) {
            $.ajax({
                type: "GET",
                url: url,
                dataType: "json",
                success: function(json) {
                    if (json['html']) {
                        jq.addClass("remove-me-plz");
                        $.modal('<div>' + json['html'] + '</div>', {
                            maxWidth: 750
                        });
                    }
                }
            });
        }

        return false; // prevent default behavior
    });

    $("#feedback_rating").live("submit", function(evt) {
        var jq = $(this);
        var method = jq.attr("method");
        var action = jq.find("input[name='action']:first").val();
        var app_id = jq.find("input[name='app_id']:first").val();
        if (method && action && app_id) {
            $.ajax({
                type: method,
                url: action,
                data: jq.serialize(),
                dataType: "json",
                success: function(json) {
                    if (json['message']) {
                        $.ajax({
                            type: "GET",
                            url: "/feedback/rated",
                            data: "id=" + app_id + "&page=1",
                            dataType: "json",
                            success: function(json) {
                                if (json['html']) {
                                    $("#rated_feedback").html(json['html']);
                                }
                            }
                        });
                        var row = $(".remove-me-plz").parent().parent();
                        var table = row.parent();
                        row.remove();
                        if (table.find("tr").length < 2) {
                            table.append('<tr><td colspan="5" style="text-align:center;padding:10px 2px;">No requests.</td></tr>');
                        }
                        show_message(json['message']);
                    }
                    $.modal.close();
                }
            });
        }
        return false; // prevent default behavior
    });

    $("#close_fb").live("click", function(evt) {
        $(".remove-me-plz").removeClass("remove-me-plz");
        $.modal.close();

        return false; // prevent default behavior
    });
}
