define(function(require, module, exports) {
    main.consumes = ["Dialog", "util"];
    main.provides = ["dialog.fileoverwrite"];
    return main;
    
    function main(options, imports, register) {
        var Dialog = imports.Dialog;
        var util = imports.util;
        
        /***** Initialization *****/
        
        // @todo think about merging this with question.
        
        var plugin = new Dialog("Ajax.org", main.consumes, {
            name: "dialog.fileoverwrite",
            allowClose: false,
            modal: true,
            elements: [
                { type: "button", id: "yestoall", caption: "Overwrite All", color: "green", visible: false },
                { type: "button", id: "notoall", caption: "Skip All", color: "red", "default": true, visible: false },
                { type: "filler" },
                { type: "button", id: "yes", caption: "Overwrite", color: "green", "default": true, hotkey: "Y" },
                { type: "button", id: "no", caption: "Skip", color: "red", hotkey: "N" },
                { type: "button", id: "cancel", caption: "Cancel", visible: false, hotkey: "ESC" }
            ]
        });
        
        /***** Methods *****/
        
        function show(title, header, msg, onOverwrite, onSkip, options) {
            return plugin.queue(function() {
                var all = options.all;
                var cancel = options.cancel;
                var metadata = options.metadata;
                
                plugin.title = title;
                plugin.heading = util.escapeXml(header);
                plugin.body = util.escapeXml(msg);
                
                plugin.allowClose = cancel;
                
                var gotYes = false;
                plugin.once("hide", function() {
                    !gotYes && cancel && onSkip(false, true, metadata);
                });
                
                plugin.update([
                    { id: "cancel", visible: cancel, onclick: function() { plugin.hide(); } },
                    { id: "yestoall", visible: all, onclick: function() { 
                        gotYes = true; 
                        plugin.hide(); 
                        onOverwrite(true, metadata); 
                    } },
                    { id: "notoall", visible: all, onclick: function() { 
                        plugin.hide(); 
                        onSkip(true, false, metadata); 
                    } },
                    { id: "yes", onclick: function() { 
                        gotYes = true; 
                        plugin.hide(); 
                        onOverwrite(false, metadata); 
                    } },
                    { id: "no", onclick: function() { 
                        plugin.hide(); 
                        onSkip(false, false, metadata); 
                    } }
                ]);
            });
        }
        
        /***** Register *****/
        
        plugin.freezePublicAPI({
            show: show
        });
        
        register("", {
            "dialog.fileoverwrite": plugin
        });
    }
});