define(function(require, module, exports) {
    main.consumes = ["Dialog", "util"];
    main.provides = ["dialog.confirm"];
    return main;
    
    function main(options, imports, register) {
        var Dialog = imports.Dialog;
        var util = imports.util;
        
        /***** Initialization *****/
        
        var plugin = new Dialog("Ajax.org", main.consumes, {
            name: "dialog.confirm",
            allowClose: false,
            modal: true,
            elements: [
                { type: "checkbox", id: "dontshow", caption: "Don't show again", visible: false },
                { type: "filler" },
                { type: "button", id: "ok", caption: "OK", color: "green", "default": true, onclick: function() { plugin.hide(); } },
                { type: "button", id: "cancel", caption: "Cancel", hotkey: "ESC", onclick: function() { plugin.hide(); } }
            ]
        });
        
        /***** Methods *****/
        
        function show(title, header, msg, onconfirm, oncancel, options) {
            return plugin.queue(function() {
                if (!options) 
                    options = {};
                
                plugin.title = title;
                plugin.heading = options.isHTML ? header : util.escapeXml(header);
                plugin.body = options.isHTML ? msg : util.escapeXml(msg).replace(/\n/g, "<br>");
                
                plugin.getElement("ok").setCaption(options.yes || "OK");
                plugin.getElement("cancel").setCaption(options.no || "Cancel");
                
                plugin.update([
                    { id: "dontshow", visible: options.showDontShow },
                    { id: "ok", onclick: function() { plugin.hide(); onconfirm(); } },
                    { id: "cancel", onclick: function() { plugin.hide(); oncancel && oncancel(); } },
                ]);
            });
        }
        
        /***** Register *****/
        
        plugin.freezePublicAPI({
            show: show
        });
        
        register("", {
            "dialog.confirm": plugin
        });
    }
});