
$(document).ready(function() {
    $(".writebacks_wrapper").writeback();
});

(function($) {
    $.fn.extend({
        writeback: function(o) {
            this.each(function() {
                $(this).find(".sui_button").sui_button();
            });
            return $(this);
        },
        writebacks_init: function(o) {
            this.each(function() {
                $(this).find(".sui_button").sui_button();
            });
            return $(this);
        }
    });
    $.writeback = {
        add: function(d) {
            if (d.pid) {
                d.pid = "/" + d.pid;
            } else {
                d.pid = "";
            }
            $.post(
                WEBROOT + "writebacks/add/" + d.tt + "/" + d.tid + d.pid + "/c:" + CURRENT_CLASS + "/v:" + CURRENT_VIEW + "?a=html&h=1",
                {
                  "data[Writeback][type]": d.type,
                  "data[Writeback][title]": d.title,
                  "data[Writeback][content]": d.content
                },
                $.writeback.add_cb
            );
        },
        create_add_form: function(e, d, obj) {
            d = eval("(" + d + ")");
            $(".writeback_add_form").filter(":not(#writeback_add_form)").remove();
            var c = $("#writeback_add_form").clone(true);
            if (!d.pid) {
                c.attr('id', c.attr('id') + '_' + d.tt + '_' + d.tid)
                .find(".writebacks_button.add").unbind("click").click(function() {
                    if (!$(this).hasClass("disabled")) {
                        var y = c.find(".writeback_add_form_type input:checked").val();
                        $(this).addClass("disabled").find(".sui_content").html($.writeback.get_type_by_id(y).adding);
                        $.writeback.add({
                            tt: d.tt,
                            tid: d.tid,
                            type: y,
                            title: c.find(".writeback_add_form_subject input").val(),
                            content: c.find(".writeback_add_form_content textarea").val()
                        });
                    }
                });
                var r = c.find(".writeback_add_form_type");
                for (var i = 0; i < $.writeback.default_responses.length; i++) {
                    for (var j = 0; j < $.writeback.types.length; j++) {
                        if ($.writeback.types[j].id == $.writeback.default_responses[i]) {
                            r.append('<img src="' + WEBROOT + 'img/' + $.writeback.types[j].icon + '" alt="" />&nbsp;<input type="radio" name="writebacks_add_form_rd_' + d.tt + '_' + d.tid + '" value="' + $.writeback.types[j].id + '" />&nbsp;' + $.writeback.types[j].name + '&nbsp;');
                        }
                    }
                }
                r.find(":radio").click(function() {
                    c.find(".writeback_add_form_subject > p:first").html($.writeback.get_type_by_id($(this).val()).title);
                    c.find(".writeback_add_form_content > p:first").html($.writeback.get_type_by_id($(this).val()).content);
                    c.find(".writebacks_button.add .sui_content").html($.writeback.get_type_by_id($(this).val()).add);
                });
                if ($.writeback.default_responses.length == 1) {
                    r.hide();
                }
                var o = $(obj).parent();
                if (o.hasClass("writebacks_list_header_right") || o.hasClass("writebacks_list.empty")) {
                    $(".writebacks_list_contents").prepend(c);
                } else if (o.hasClass("writebacks_list_footer_right")) {
                    $(".writebacks_list_footer").after(c);
                }
                r.find(":radio:first").attr('checked', 'checked');
                c.find(".writeback_add_form_subject > p:first").html($.writeback.get_type_by_id(r.find(":radio:checked").val()).title);
                c.find(".writeback_add_form_content > p:first").html($.writeback.get_type_by_id(r.find(":radio:checked").val()).content);
                c.find(".writebacks_button.add .sui_content").html($.writeback.get_type_by_id(r.find(":radio:checked").val()).add);
                c.slideDown("fast");
            } else {
                c.attr('id', c.attr('id') + '_' + d.tt + '_' + d.tid + '_' + d.pid)
                .find(".writebacks_button.add").unbind("click").click(function() {
                    if (!$(this).hasClass("disabled")) {
                        var y = c.find(".writeback_add_form_type input:checked").val();
                        $(this).addClass("disabled").find(".sui_content").html($.writeback.get_type_by_id(y).adding);
                        $.writeback.add({
                            tt: d.tt,
                            tid: d.tid,
                            pid: d.pid,
                            type: y,
                            title: c.find(".writeback_add_form_subject input").val(),
                            content: c.find(".writeback_add_form_content textarea").val()
                        });
                    }
                });
                var r = c.find(".writeback_add_form_type");
                var n = $(":regex(id,writeback_" + d.pid + "(?:_\\d+)?)");
                var p = n.attr("class");
                p = /writeback_type_(\d+)/.exec(p);
                if (p != null) {
                    p = p[1];
                    for (var i = 0; i < $.writeback.types.length; i++) {
                        if (p == $.writeback.types[i].id) {
                            for (var j = 0; j < $.writeback.types[i].responses.length; j++) {
                                for (var k = 0; k < $.writeback.types.length; k++) {
                                    if ($.writeback.types[k].id == $.writeback.types[i].responses[j]) {
                                        r.append('<img src="' + WEBROOT + 'img/' + $.writeback.types[k].icon + '" alt="" />&nbsp;<input type="radio" name="writebacks_add_form_rd_' + d.tt + '_' + d.tid + '_' + d.pid + '" value="' + $.writeback.types[k].id + '" />&nbsp;' + $.writeback.types[k].name + '&nbsp;');
                                    }
                                }
                            }
                        }
                    }
                    r.find(":radio").click(function() {
                        c.find(".writeback_add_form_subject > p:first").html($.writeback.get_type_by_id($(this).val()).title);
                        c.find(".writeback_add_form_content > p:first").html($.writeback.get_type_by_id($(this).val()).content);
                        c.find(".writebacks_button.add .sui_content").html($.writeback.get_type_by_id($(this).val()).add);
                    });
                    if ($.writeback.default_responses.length == 1) {
                        r.hide();
                    }
                    n.find(".writeback_footer_extender").prepend(c);
                    r.find(":radio:first").attr('checked', 'checked');
                    c.find(".writeback_add_form_subject > p:first").html($.writeback.get_type_by_id(r.find(":radio:checked").val()).title);
                    c.find(".writeback_add_form_content > p:first").html($.writeback.get_type_by_id(r.find(":radio:checked").val()).content);
                    c.find(".writebacks_button.add .sui_content").html($.writeback.get_type_by_id(r.find(":radio:checked").val()).add);
                    c.slideDown("fast");
                } else {
                    c.remove();
                }
            }
        },
        remove_add_form: function(e, d, obj) {
            if (!d) {
                $(obj).parents(".writeback_add_form:first").slideUp("fast", function() {$(this).remove()});
            } else {
                $(d).slideUp("fast", function() {$(this).remove()});
            }
        },
        add_cb: function(d, s) {
            if (s == "success") {
                var t = $(d);
                var a = $(".writeback_add_form:not(#writeback_add_form)");
                a.find(".writebacks_button.add").removeClass("disabled").find(".sui_content").html($.writeback.get_type_by_id(a.find(".writeback_add_form_type").find(":radio:checked").val()).add);
                if (t.length > 0 && t.get(0).nodeName.toLowerCase() == "div" && t.hasClass("writeback")) {
                    if ($(".writebacks_list").hasClass("empty")) {
                        $(".writebacks_wrapper").parents(":first").load(RELOAD_URL + "?a=html&h=1", function(){$(this).find(".writebacks_wrapper, #writeback_add_form").writebacks_init()});
                    } else {
                        var i = /writeback_([\d,]+)(?:_([\d,]+))?/.exec(t.attr("id"));
                        if (i != null && i[1] != undefined && i[1] != null && i[1] != "") {
                            var n = null;
                            if (i[2] != undefined && i[2] != null && i[2] != "") {
                                n = $(":regex(id,writeback_" + i[2] + "(?:_\\d+)?)");
                                var ind = n.parents(".writeback").length;
                                var oe = (n.parents(".writeback:first").find(".writeback_main").hasClass("even") ? "odd" : "even");
                                t.find(".writeback_main").css({width: (700 - ((ind + 1) * 66)) + "px"}).removeClass("even").removeClass("odd").addClass(oe);
                                t.hide();
                                n.after(t);
                                a.slideUp("fast", function() {$(this).remove();});
                                t.writeback();
                                t.slideDown("fast");
                            } else {
                                n = $(".writebacks_list_contents");
                                var oe = (n.children(".writeback:first").find(".writeback_main").hasClass("even") ? "odd" : "even");
                                t.hide().find(".writeback_main").removeClass("even").removeClass("odd").addClass(oe);
                                n.prepend(t);
                                a.slideUp("fast", function() {$(this).remove();});
                                t.writeback();
                                t.slideDown("fast");
                            }
                        }
                    }
                } else {
                    t = t.find("error");
                    if (t.length > 0) {
                        a.find(".writeback_add_form_subject_error").html("").hide();
                        a.find(".writeback_add_form_type_error").html("").hide();
                        a.find(".writeback_add_form_content_error").html("").hide();
                        t.each(function() {
                            var v = $(this);
                            switch (v.children("field").text()) {
                                case "title":
                                    a.find(".writeback_add_form_subject_error").html(v.children("message").text()).show();
                                    break;
                                case "type":
                                    a.find(".writeback_add_form_type_error").html(v.children("message").text()).show();
                                    break;
                                case "content":
                                    a.find(".writeback_add_form_content_error").html(v.children("message").text()).show();
                                    break;
                                default:
                                    break;
                            }
                        });
                    } else {
                        sui.ajax.login_success_cb = function(){a.find(".writebacks_button.add").click()};
                        sui.ajax.login_response_handler(d, s);
                    }
                }
            }
        },
        get_type_by_id: function(d) {
            for (var i = 0; i < $.writeback.types.length; i++) {
                if ($.writeback.types[i].id == d) {
                    return $.writeback.types[i];
                }
            }
            return null;
        }
    };
})(jQuery);

