/**
 * Global NTTGA namespace.
 * @author dkleehammer
 */

if ( ! NTTGA )
{
  var NTTGA = {};
}

NTTGA.Session =
{
  UserId: 0,
  Username: '',
  MemberData: null
};

NTTGA.Balances = 
{
  Pending: 0,
  Available: 0
};


NTTGA.EventHandler = function()
{
  NTTGA.EventHandler.superclass.constructor.apply(this, arguments);
};

Ext.extend(NTTGA.EventHandler, Ext.util.Observable);

NTTGA.Events = new NTTGA.EventHandler;

NTTGA.Events.addEvents(
{
  'componentready': true,
  'componentonload': true,
  'widgetready': true,
  'newpending': true
});

NTTGA.Component =
{
  Instances: [],
  ComponentLoaded: function(name, type)
  {
    NTTGA.Events.fireEvent('componentonload', true, name, type);
  },
  ComponentReady: function(name, type)
  {
    NTTGA.Events.fireEvent('componentready', true, name, type);
  },
  WidgetReady: function(name, type)
  {
    NTTGA.Events.fireEvent('widgetready', true, name, type);
  },
  AddComponent: function(name,type)
  {
    if (NTTGA.Component.Instances[name]) 
    {
      if (type.toLowerCase() == 'widget') 
      {
        NTTGA.Component.WidgetReady.defer(1, this, [name, type]);
      } else {
        NTTGA.Component.ComponentReady.defer(1, this, [name, type]);
      }
      return;
    }
    
    if (document.createElement && document.getElementsByTagName && name && type) 
    {
      var head = document.getElementsByTagName('head')[0];
      var script = document.createElement('script');
      var src = '';
      
      switch(type.toLowerCase())
      {
      case "form":
      case "component":
      case "widget":
        
        type = type.charAt(0).toUpperCase() + type.substr(1).toLowerCase();
        src = '/js/lib/objects/' + type + "/" + name + '.js?name=' + name + '&type=' + type;
        break;
      }
      document.y = src;
      if (src != '') 
      {
        script.onload = NTTGA.Component.ComponentLoaded.defer(1, this, [name, type]);
        script.setAttribute('type', 'text/javascript');
        script.setAttribute('src', src);
        head.appendChild(script);
        
        NTTGA.Component.Instances[name] = 
        {
          ComponentName: name,
          ComponentType: type,
          ComponentLoaded: true
        };
      }
    }
  }
};

NTTGA.Widgets =
{
  Tools:
  [
    { 
      id: 'help',
      handler: function(e, tool, panel)
      {
        document.x = e;
        document.y = tool;
        document.z = panel;
        
        // Open panel
        westPanel = NTTGA.Viewport.port.findById( 'west' );
        westPanel.expand( true );

        NTTGA.Util.ChangeHelp();
      }
    }
  ]
};

NTTGA.Util =
{
  cleanCols:0,
  columnCount:0,
  currentPanel:"home",
  PanelItems:
  {
    /** Dynamic Columns
     * Columns Object
     * colCount - Number of columns
     * colSizes - Size in order of columns
     */
    home: { pageTitle: "Home", portlets: [ 'OpenTaskList','DueTransactions', 'PaidMemberList' ], columns: { colCount: 3, colSizes: [.33] } },
    transactions: { pageTitle: "Transactions", portlets: ['Transactions' ], columns: { colCount: 1, colSizes: [1] } },
    tasks: { pageTitle: "Leadership Tasks Control Panel", portlets: ['TaskList' ], columns: { colCount: 1, colSizes: [1] }},
    members: { pageTitle: "Member Control Panel", portlets: ['MemberList' ], columns: { colCount: 1, colSizes: [1] }}
  },
  ModifyColumns: function ( portal, columnConfig )
  {
    var newColumnCount = columnConfig.colCount;
    
    // If we have more columns than we need, remove the extra columns.
    if ( portal.items.items.length > newColumnCount )
    {
      var removeCount = ( portal.items.items.length - ( portal.items.items.length - newColumnCount ) ); 
     
      for ( var ii = 0; ii < portal.items.items.length; ++ii )
      {
        var column = portal.items.items[ii];
        
        if ( ii >= removeCount - 1)
        {
          portal.remove( column );
        }
      }
    } else if ( portal.items.items.length < newColumnCount ) {
      var addCount = ( newColumnCount - portal.items.items.length );
      
      for ( var ii = 0; ii < addCount; ++ii )
      {
        portal.add({style: 'padding:10px 5px 10px'});
      }
    } 
    
    // REVIEW:: Check for sizing options and sizes, then resize accordingly.
    var sizeLength = columnConfig.colSizes.length;
    
    if ( sizeLength == 1 )
    {
      // We only have one.
      
      // Resize all columns to this size.
      for ( var ii = 0; ii < portal.items.items.length; ++ii )
      {
        var column = portal.items.items[ii];
        column.columnWidth = columnConfig.colSizes[0].toString();
      }
    } else {
      // We have the same amount.

      // resize existing colums.
      for ( var ii = 0; ii < portal.items.items.length; ++ii )
      {
        var column = portal.items.items[ii];
        column.columnWidth = columnConfig.colSizes[ii].toString();
      }
    }
    
    portal.doLayout();
  },
  ChangePanel: function ( newPanelName )
  {
    this.currentPanel = newPanelName;
    
    // Remove all components from the existing portal.
    var portal = NTTGA.Portal.getInstance();
    var columns = portal.items.items;
    
    for ( var ii = 0; ii < columns.length; ++ii )
    {
      var col = columns[ii];
      
      if ( col.items.items.length == 0 )
      {
        this.cleanCols += 1;
        continue;
      }
      
      for ( var jj = 0; jj < col.items.items.length; ++jj )
      {
        var colItems = col.items.items[jj];
        col.remove( colItems );
      }
    }
    this.AddPortlets( portal );
    this.ChangeHelp();
  },
  AddPortlets: function( portal )
  {
    // Add the new portlets.
    var pageTitle = this.PanelItems[this.currentPanel].pageTitle;
    var portalItems = this.PanelItems[this.currentPanel].portlets;
    var columnCount = this.PanelItems[this.currentPanel].columns;
    
    this.ModifyColumns( portal, columnCount );
    
    for ( ii = 0; ii < portalItems.length; ++ii )
    {
      NTTGA.Component.AddComponent( portalItems[ii], 'widget' );
    }
    
    portal.setTitle( pageTitle );
  },
  ChangeHelp: function()
  {
    // Available Panels
    helpPanels = [ 'home', 'transactions', 'tasks', 'members' ];
    
    // Show only help for current page.
    for ( ii = 0; ii < helpPanels.length; ++ii )
    {
      if ( helpPanels[ ii ] == NTTGA.Util.currentPanel )
      {
        var div = Ext.get( NTTGA.Util.currentPanel + "-tab" );
        div.removeClass( 'hideDiv' );
        div.addClass( 'showDiv' );
      } else {
        var div = Ext.get( helpPanels[ii] + "-tab" );
        div.addClass( 'hideDiv' );
        div.removeClass( 'showDiv' );
      }
    }
  }
};


