//----------------------------------------------------------------------------
//  Copyright (C) 2008 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;
        if (this.selector !== undefined) {
            IPython.Cell.apply(this, arguments);
            // move the rest ouside
            this.construct();
            this.addDropDownList();
            this.bind_events();
        }
    };

    MainToolBar.prototype = new IPython.ToolBar(); 

    MainToolBar.prototype.addDropDownList = 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.construct = function() {
        this.addButtonsGroup([
                {
                    'id':'save_b',
                    'label':'Save',
                    'icon':'ui-icon-disk',
                    'callback':function(){
                        IPython.notebook.save_notebook();
                        },
                },
            ]);
        this.addButtonsGroup([
                {
                    '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.addButtonsGroup([
                {
                    '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.addButtonsGroup([
                {
                    '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.addButtonsGroup([
                {
                    '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.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));