// Copyright (c) 2009 Brian Edwards

Ext.ns('App');

Ext.Msg.minWidth = 360;

Ext.Direct.addProvider({
  url: '/api',
  type: 'remoting',
  namespace: 'App.api',
  actions: {
    AppUserRouter: [
      {
        name: 'load',
        len: 1
      }, {
        name: 'submit',
        len: 1,
        formHandler: true
      }
    ],
    ContentRouter: [
      {
        name: 'load',
        len: 1
      }, {
        name: 'submit',
        len: 1,
        formHandler: true
      }
    ],
    PerformanceRouter: [
      {
        name: 'load',
        len: 1
      }
    ]
  }
});



App.FragmentLoader = function(url) {
  this.load = function(panel) {
    panel.load({
      url: url,
      callback: function(element, success, response) {
        if (!success) {
          var html = '<p>HTTP Status Code: ' + response.status + ' (';
          html += response.statusText + ')</p>';
          html += response.responseText;
          panel.update(html);
        }
      }
    });
  }
};

App.NavigationPanel = Ext.extend(Ext.Panel, {
  constructor: function(config) {
    var items = [];
    Ext.each(config.button_configs, function(button_config) {
      items.push({
        xtype: 'button',
        id: button_config.id,
        text: button_config.text,
        pressed: button_config.pressed,
        enableToggle: true,
        toggleGroup: 'nav_toggleGroup',
        allowDepress: false,
        width: '100%',
        toggleHandler: function(button, pressed) {
          if (pressed) {
            var panel = Ext.getCmp('centerRegion');
            panel.update();
            panel.removeAll();
            button_config.pressedHandler(panel);
            panel.doLayout();
          }
        }
      });
    });
    var listeners = {
      'expand': function(panel) {
        // when this panel is expanded, press the first button unless a button
        // in this panel is pressed
        if (!panel.items.find(function(button) {return button.pressed;})) {
          panel.items.first().toggle(true);
        }
      }
    };
    config = Ext.apply({
      autoScroll: true,
      border: false,
      items: items,
      listeners: listeners
    }, config);
    App.NavigationPanel.superclass.constructor.call(this, config);
  }
});

Ext.reg('app_navigationpanel', App.NavigationPanel);
