define(function(require) {
    
    var Origin = require('coreJS/app/origin');
    var SidebarItemView = require('coreJS/sidebar/views/sidebarItemView');
    var Backbone = require('backbone');

    var EditorBlockEditSidebarView = SidebarItemView.extend({

        events: {
            'click .editor-block-edit-sidebar-save': 'saveEditing',
            'click .editor-block-edit-sidebar-cancel': 'cancelEditing'
        },

        saveEditing: function(event) {
            event.preventDefault();
            this.updateButton('.editor-block-edit-sidebar-save', window.polyglot.t('app.saving'));
            Origin.trigger('editorBlockEditSidebar:views:save');
        },

        cancelEditing: function(event) {
            event.preventDefault();
            Backbone.history.history.back();
            Origin.trigger('editingOverlay:views:hide');
        }

    }, {
        template: 'editorBlockEditSidebar'
    });

    return EditorBlockEditSidebarView;

});
define(function(require) {
    
  var Origin = require('coreJS/app/origin');
  var SidebarItemView = require('coreJS/sidebar/views/sidebarItemView');
  var Backbone = require('backbone');

  var EditorThemeEditSidebarView = SidebarItemView.extend({

    events: {
        'click .editor-theme-edit-sidebar-save'     : 'saveEditing',
        'click .editor-theme-edit-sidebar-cancel'   : 'cancelEditing'
    },

    saveEditing: function(event) {
        event.preventDefault();

        Origin.trigger('editorThemeEditSidebar:views:save');
    },

    cancelEditing: function(event) {
        event.preventDefault();
        Backbone.history.history.back();
        Origin.trigger('editingOverlay:views:hide');
    }

  }, {
    template: 'editorThemeEditSidebar'
  });

  return EditorThemeEditSidebarView;

});
define(function(require) {
    
    var Origin = require('coreJS/app/origin');
    var SidebarItemView = require('coreJS/sidebar/views/sidebarItemView');
    var Backbone = require('backbone');

    var EditorExtensionsEditSidebarView = SidebarItemView.extend({}, {
        template: 'editorExtensionsEditSidebar'
    });

    return EditorExtensionsEditSidebarView;

});
define(function(require) {

  var Origin = require('coreJS/app/origin');
  var SidebarItemView = require('coreJS/sidebar/views/sidebarItemView');

  var PluginManagementSidebarView = SidebarItemView.extend({
    events: {
      'click .pluginManagement-sidebar-upload'	: 'onAddNewPluginClicked',
      'click .pluginManagement-sidebar-extensions'	: 'onManageExtensionsClicked',
      'click .pluginManagement-sidebar-themes'	: 'onManageThemesClicked',
      'click .pluginManagement-sidebar-components'	: 'onManageComponentsClicked',
      'click .pluginManagement-sidebar-menus'  : 'onManageMenusClicked',
      'click .pluginManagement-sidebar-dashboard'	: 'returnToDashboard'
    },

    onAddNewPluginClicked: function () {
      Origin.router.navigate('#/pluginManagement/upload', { trigger: true });
    },

    onManageExtensionsClicked: function () {
      this.managePluginType('extension');
    },

    onManageThemesClicked: function () {
      this.managePluginType('theme');
    },

    onManageComponentsClicked: function () {
      this.managePluginType('component');
    },

    onManageMenusClicked: function () {
      this.managePluginType('menu');
    },

    managePluginType: function (pluginType) {
      Origin.router.navigate('#/pluginManagement/' + pluginType, {trigger: false});
    },

    returnToDashboard: function() {
      Origin.router.navigate('#/dashboard', {trigger:true});
    },

  }, {
    template: 'pluginManagementSidebar'
  });

  return PluginManagementSidebarView;

});
define(function(require) {

    var Origin = require('coreJS/app/origin');
    var SidebarItemView = require('coreJS/sidebar/views/sidebarItemView');

    var EditorMenuSidebarView = SidebarItemView.extend({

      // If adding 'events', extend from the base view
      
    }, {
        template: 'editorMenuSidebar'
    });

    return EditorMenuSidebarView;

});
define(function(require) {

    var Origin = require('coreJS/app/origin');
    var SidebarItemView = require('coreJS/sidebar/views/sidebarItemView');
    var Backbone = require('backbone');
    var EditorComponentModel = require('editorPage/models/editorComponentModel');

    var EditorComponentListSidebarView = SidebarItemView.extend({

        events: {
            'click .editor-component-list-sidebar-save':      'onSaveClicked',
            'click .editor-component-list-sidebar-save-edit': 'onSaveAndEditClicked',
            'click .editor-component-list-sidebar-cancel':    'cancelEditing'
        },

        onSaveClicked: function(event) {
            event.preventDefault();
            this.updateButton('.editor-component-list-sidebar-save', window.polyglot.t('app.saving'));
            if (!this.model.get('component') || !this.model.get('layout')) {
              return;
            }

            var componentType = _.find(Origin.editor.data.componentTypes.models, function(type){
              return type.get('name') == this.model.get('component');
            }, this);

            var _this = this;
            var newComponentModel = new EditorComponentModel();

            newComponentModel.save({
              title: window.polyglot.t('app.placeholdernewcomponent'),
              displayTitle: '',
              body: '',
              _parentId: this.model.get('_parentId'),
              _courseId: Origin.editor.data.course.get('_id'),
              _type: 'component',
              _componentType: componentType.get('_id'),
              _component: componentType.get('component'),
              _layout: this.model.get('layout'),
              version: componentType.get('version')
            },
            {
              error: function() {
                  Origin.Notify.alert({
                    type: 'error',
                    text: window.polyglot.t('app.erroraddingcomponent')
                  });
              },
              success: function() {
                Origin.trigger('editor:refreshData', function() {
                    Backbone.history.history.back();
                    Origin.trigger('editingOverlay:views:hide');
                }, this);
              }
            });
        },

        onSaveAndEditClicked: function(event) {
            event.preventDefault();
            this.updateButton('.editor-component-list-sidebar-save-edit', window.polyglot.t('app.saving'));
            if (!this.model.get('component') || !this.model.get('layout')) {
              return;
            }

            var componentType = _.find(Origin.editor.data.componentTypes.models, function(type){
              return type.get('name') == this.model.get('component');
            }, this);

            var _this = this;
            var newComponentModel = new EditorComponentModel();

            newComponentModel.save({
              title: window.polyglot.t('app.placeholdernewcomponent'),
              displayTitle: '',
              body: '',
              _parentId: this.model.get('_parentId'),
              _courseId: Origin.editor.data.course.get('_id'),
              _type: 'component',
              _componentType: componentType.get('_id'),
              _component: componentType.get('component'),
              _layout: this.model.get('layout'),
              version: componentType.get('version')
            },
            {
              error: function() {
                  Origin.Notify.alert({
                    type: 'error',
                    text: window.polyglot.t('app.erroraddingcomponent')
                  });
              },
              success: function(data) {
                Origin.trigger('editor:refreshData', function() {
                    Origin.trigger('editingOverlay:views:hide');
                    Backbone.history.navigate('#/editor/'
                        + Origin.editor.data.course.get('_id')
                        + '/component/'
                        + data.get('_id'));
                }, this);

              }
            });
        },

        cancelEditing: function(event) {
            event.preventDefault();
            var currentCourseId = Origin.location.route1;
            var currentBlockId = Origin.location.route3;
            var currentBlock = Origin.editor.data.blocks.findWhere({_id: currentBlockId});
            // Don't like this line but until we have findAncestor this will do
            var currentPage = currentBlock.getParent().getParent();
            var currentPageId = currentPage.get('_id');

            Backbone.history.navigate('#/editor/' + currentCourseId + '/page/' + currentPageId);
            Origin.trigger('editingOverlay:views:hide');

        }

    }, {
        template: 'editorComponentListSidebar'
    });

    return EditorComponentListSidebarView;

});