//----------------------------------------------------------------------------
//  Copyright (C) 2011 The IPython Development Team
//
//  Distributed under the terms of the BSD License.  The full license is in
//  the file COPYING, distributed as part of this software.
//----------------------------------------------------------------------------

//============================================================================
// ToolBar
//============================================================================

var IPython = (function (IPython) {

    var MainToolBar = function (selector) {
        this.selector = selector;
        IPython.ToolBar.apply(this, arguments);
        this.construct();
        this.add_drop_down_list();
        this.bind_events();
    };

    MainToolBar.prototype = new IPython.ToolBar(); 

    MainToolBar.prototype.construct = function () {
        this.add_buttons_group([
                {
                    id : 'save_b',
                    label : 'Save',
                    icon : 'ui-icon-disk',
                    callback : function () {
                        IPython.notebook.save_notebook();
                        }
                }
            ]);
        this.add_buttons_group([
                {
                    id : 'cut_b',
                    label : 'Cut Cell',
                    icon : 'ui-icon-scissors',
                    callback : function () {
                        IPython.notebook.cut_cell();
                        }
                },
                {
                    id : 'copy_b',
                    label : 'Copy Cell',
                    icon : 'ui-icon-copy',
                    callback : function () {
                        IPython.notebook.copy_cell();
                        }
                },
                {
                    id : 'paste_b',
                    label : 'Paste Cell',
                    icon : 'ui-icon-clipboard',
                    callback : function () {
                        IPython.notebook.paste_cell();
                        }
                }
            ],'cut_copy_paste');

        this.add_buttons_group([
                {
                    id : 'move_up_b',
                    label : 'Move Cell Up',
                    icon : 'ui-icon-arrowthick-1-n',
                    callback : function () {
                        IPython.notebook.move_cell_up();
                        }
                },
                {
                    id : 'move_down_b',
                    label : 'Move Cell Down',
                    icon : 'ui-icon-arrowthick-1-s',
                    callback : function () {
                        IPython.notebook.move_cell_down();
                        }
                }
            ],'move_up_down');
        
        this.add_buttons_group([
                {
                    id : 'insert_above_b',
                    label : 'Insert Cell Above',
                    icon : 'ui-icon-arrowthickstop-1-n',
                    callback : function () {
                        IPython.notebook.insert_cell_above('code');
                        }
                },
                {
                    id : 'insert_below_b',
                    label : 'Insert Cell Below',
                    icon : 'ui-icon-arrowthickstop-1-s',
                    callback : function () {
                        IPython.notebook.insert_cell_below('code');
                        }
                }
            ],'insert_above_below');

        this.add_buttons_group([
                {
                    id : 'run_b',
                    label : 'Run Cell',
                    icon : 'ui-icon-play',
                    callback : function () {
                    IPython.notebook.execute_selected_cell();
                        }
                },
                {
                    id : 'interrupt_b',
                    label : 'Interrupt',
                    icon : 'ui-icon-stop',
                    callback : function () {
                        IPython.notebook.kernel.interrupt();
                        }
                }
            ],'run_int');


    };

    MainToolBar.prototype.add_drop_down_list = function () {
        var select = $(this.selector)
            .append($('<select/>')
                .attr('id','cell_type')
                .addClass('ui-widget ui-widget-content')
                    .append($('<option/>').attr('value','code').text('Code'))
                    .append($('<option/>').attr('value','markdown').text('Markdown'))
                    .append($('<option/>').attr('value','raw').text('Raw Text'))
                    .append($('<option/>').attr('value','heading1').text('Heading 1'))
                    .append($('<option/>').attr('value','heading2').text('Heading 2'))
                    .append($('<option/>').attr('value','heading3').text('Heading 3'))
                    .append($('<option/>').attr('value','heading4').text('Heading 4'))
                    .append($('<option/>').attr('value','heading5').text('Heading 5'))
                    .append($('<option/>').attr('value','heading6').text('Heading 6'))
                    .append($('<option/>').attr('value','heading7').text('Heading 7'))
                    .append($('<option/>').attr('value','heading8').text('Heading 8'))
                );
    };

    MainToolBar.prototype.bind_events = function () {
        var that = this;
        
        this.element.find('#cell_type').change(function () {
            var cell_type = $(this).val();
            if (cell_type === 'code') {
                IPython.notebook.to_code();
            } else if (cell_type === 'markdown')  {
                IPython.notebook.to_markdown();
            } else if (cell_type === 'raw')  {
                IPython.notebook.to_raw();
            } else if (cell_type === 'heading1')  {
                IPython.notebook.to_heading(undefined, 1);
            } else if (cell_type === 'heading2')  {
                IPython.notebook.to_heading(undefined, 2);
            } else if (cell_type === 'heading3')  {
                IPython.notebook.to_heading(undefined, 3);
            } else if (cell_type === 'heading4')  {
                IPython.notebook.to_heading(undefined, 4);
            } else if (cell_type === 'heading5')  {
                IPython.notebook.to_heading(undefined, 5);
            } else if (cell_type === 'heading6')  {
                IPython.notebook.to_heading(undefined, 6);
            }
        });
        $([IPython.events]).on('selected_cell_type_changed.Notebook', function (event, data) {
            if (data.cell_type === 'heading') {
                that.element.find('#cell_type').val(data.cell_type+data.level);
            } else {
                that.element.find('#cell_type').val(data.cell_type);
            }
        });
    };

    IPython.MainToolBar = MainToolBar;

    return IPython;

}(IPython));