﻿(function($) {
    $.fn.wrapByDialog = function(options) {
        var options = $.extend({
            ajax: true,
            modal: true,
            width: 640,
            resizable: false,
            buttons: {
                "取消": function() { $(this).dialog("close"); },
                "重置": function() { $("form", this).resetForm(); },
                "提交": function() {
                    var dialog = $(this);
                    var form = $("form", this);
                    if (form.length == 0) {
                        dialog.dialog("close");
                    }
                    else {
                        if (options.ajax == true) {
                            form.ajaxSubmit({
                                success: function(data) {
                                    options.onFormSuccess(dialog, data);
                                },
                                error: function(xhr, textStatus, errorThrown) {
                                    alert('出错了！' + xhr.status + " " + xhr.statusText);
                                    dialog.data('dirty', true);
                                }
                            });
                        }
                        else {
                            form.get(0).submit();
                        }
                    }
                }
            },
            onFormSuccess: function(dialog, data) {
                if (data == "refresh") {
                    document.location = document.location.href;
                }
                else {
                    dialog.html(data);
                    dialog.data('dirty', true);
                }
            },
            beforeShow: function() { return true; }
        }, options ? options : {});
        
        return this.each(function() {
            var link = $(this);
            var href = link.attr('href');
            if (href) {
                link.one('click', function() {
                    if (options.beforeShow() == false)  {
                        link.one('click', arguments.callee);
                        return;
                    }
                    var dialog = $('<div></div>');
                    if (href != "javascript:;") {
                        dialog.load(href, function(response, status, xhr) {
                            if (status == "error") {
                                alert('出错了！' + xhr.status + " " + xhr.statusText);
                                dialog.data('dirty', true);
                                return;
                            }
                            var localOptions = $.extend({
                                title: link.attr('title') ? link.attr('title') : link.text()
                            }, options);
                            if ($('form', dialog).length == 0) {
                                localOptions.buttons = {
                                    "确定": function() { $(this).dialog("close"); }
                                };
                            }
                            dialog.dialog(localOptions);
                        });
                        link.click(function() {
                            if (options.beforeShow() == false)  {
                                return;
                            }
                            if ((options.alwaysDirty == true) || (dialog.data('dirty') == true)) {
                                dialog.load(href, function(response, status, xhr) {
                                    if (status == "error") {
                                        alert('出错了！' + xhr.status + " " + xhr.statusText);
                                        dialog.data('dirty', true);
                                        return;
                                    }
                                    dialog.data('dirty', false);
                                    dialog.dialog('open');
                                });
                            }
                            else {
                                $("form", dialog).resetForm();
                                dialog.dialog('open');
                            }
                            return false;
                        });
                        return false;
                    }
                    else {
                        if (options.contentEl) {
                            options.content = $(options.contentEl).html();
                        }
                        if (options.content) {
                            dialog.html(options.content);
                        }
                        var localOptions = $.extend({
                            title: link.attr('title') ? link.attr('title') : link.text()
                        }, options);
                        dialog.dialog(localOptions);
                        
                        link.click(function() {
                            if (options.beforeShow() == false)  {
                                return;
                            }
                            dialog.dialog('open');
                            return false;
                        });
                        return false;
                    }
                });
            }
            else {
                //
            }
        });
    };
    
})(jQuery);

