function dialog (message, info, width, buttons) {
    this.views = [];
    this.message = message || "Message Text";
    this.info = info;
    this.width = width || ui.width;
    if (buttons instanceof Array && buttons.length > 0) {
        this.buttons = buttons;
    } else {
        this.buttons = ["OK", "Cancel"];
    }
    var alert = NSAlert.alloc().init();
    alert.setMessageText(this.message);
    if (this.info) {
        alert.setInformativeText(this.info);
    }
    // Icon
    var icon = NSImage.imageNamed("plugins");
    if (__command.pluginBundle() && __command.pluginBundle().alertIcon()) {
        icon = __command.pluginBundle().alertIcon();
    }
    alert.setIcon(icon);
    this.buttons.forEach(function(button) {
        alert.addButtonWithTitle(button);
    });
    this.self = alert;
}
@param  {String} message
@param  {String} info
@param  {Number} width Optional default is 300.
@param  {Array} buttons Optional, array with 1..3 strings, default is ["OK", "Cancel"].