(function() {
    tinymce.create('tinymce.plugins.Lbdesign', {
        /**
        * Initializes the plugin, this will be executed after the plugin has been created.
        * This call is done before the editor instance has finished it's initialization so use the onInit event
        * of the editor instance to intercept that event.
        *
        * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
        * @param {string} url Absolute URL to where the plugin is located.
        */
        init : function(ed, url) {
            ed.addButton('buttonshortcode', {
                title : 'Insert button shortcode',
                cmd : 'buttonshortcode',
                image : lbdbs_plugin.url + 'img/icon-grey.png'
            });
            ed.addCommand('buttonshortcode', function() {
                ed.windowManager.open({
                    title : 'Insert a Button',
                    body: [
                        {type: 'textbox', name: 'link', label: 'Link'},
                        {type: 'checkbox', name: 'new_tab', label: 'Open link in a new tab'},
                        {type: 'textbox', name: 'content', label: 'Button Text' },
                        {type: 'listbox',
                            name: 'type',
                            label: 'Button Type',
                            'values': [
                                {text: 'Default', value: 'default'},
                                {text: 'Primary', value: 'primary'},
                                {text: 'Action', value: 'action'},
                                {text: 'Highlight', value: 'highlight'},
                                {text: 'Warning', value: 'warning'},
                                {text: 'Info', value: 'info'}
                            ]
                        },
                        {type: 'listbox',
                            name: 'size',
                            label: 'Button Size',
                            'values': [
                                {text: 'Default', value: 'default'},
                                {text: 'Small', value: 'small'},
                                {text: 'Large', value: 'large'},
                                {text: 'Extra Large', value: 'xlarge'}
                            ]
                        },
                        {type: 'listbox',
                            name: 'styles',
                            label: 'Button Style',
                            'values': [
                                {text: 'Default', value: 'default'},
                                {text: 'Rounded', value: 'rounded'},
                                {text: 'Pill', value: 'pill'},
                                {text: 'Block', value: 'block'}
                            ]
                        },
                        {type: 'textbox', name: 'custom_class', label: 'Custom Button Class'},
                    ],
                    onsubmit: function(e) {
                        ed.focus();

                        // build shortcode that gets inserted into the content when 'ok' is pressed on the modal
                        // [lbdesign_button link="" new_tab="" type="" size="" style="" custom_class=""][/lbdesign_button]
                        ed.selection.setContent('[lbdesign_button link="' + e.data.link + '" new_tab="' + e.data.new_tab + '" type="' + e.data.type + '" size="' + e.data.size + '" style="' + e.data.styles + '" custom_class="' + e.data.custom_class + '"]' + e.data.content + '[/lbdesign_button]');
                    }
                });
            });
        },

        /**
        * Creates control instances based in the incomming name. This method is normally not
        * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
        * but you sometimes need to create more complex controls like listboxes, split buttons etc then this
        * method can be used to create those.
        *
        * @param {String} n Name of the control to create.
        * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
        * @return {tinymce.ui.Control} New control instance or null if no control was created.
        */
        createControl : function(n, cm) {
            return null;
        },

        /**
        * Returns information about the plugin as a name/value array.
        * The current keys are longname, author, authorurl, infourl and version.
        *
        * @return {Object} Name/value array containing information about the plugin.
        */
        getInfo : function() {
            return {
                longname : 'LBDesign Button Shortcode',
                author : 'Lauren Pittenger @ LBDesign',
                authorurl : 'http://lbdesign.tv',
                version : "1.3.2"
            };
        }
    });

    // Register plugin
    tinymce.PluginManager.add( 'lbdesign', tinymce.plugins.Lbdesign );
})();