MainPanel = function(){
   
this.preview = new Ext.Panel({
        id
: 'preview',
        region
: 'south',
        cls
:'preview',
        autoScroll
: true,
        listeners
: FeedViewer.LinkInterceptor,

        tbar
: [{
            id
:'tab',
            text
: 'View in New Tab',
            iconCls
: 'new-tab',
            disabled
:true,
            handler
: this.openTab,
            scope
: this
       
},
       
'-',
       
{
            id
:'win',
            text
: 'Go to Post',
            iconCls
: 'new-win',
            disabled
:true,
            scope
: this,
            handler
: function(){
                window
.open(this.gsm.getSelected().data.link);
           
}
       
}],

        clear
: function(){
           
this.body.update('');
           
var items = this.topToolbar.items;
            items
.get('tab').disable();
            items
.get('win').disable();
       
}
   
});

   
this.grid = new FeedGrid(this, {
        tbar
:[{
            text
:'Open All',
            tooltip
: {title:'Open All',text:'Opens all item in tabs'},
            iconCls
: 'tabs',
            handler
: this.openAll,
            scope
:this
       
},
       
'-',
       
{
            split
:true,
            text
:'Reading Pane',
            tooltip
: {title:'Reading Pane',text:'Show, move or hide the Reading Pane'},
            iconCls
: 'preview-bottom',
            handler
: this.movePreview.createDelegate(this, []),
            menu
:{
                id
:'reading-menu',
                cls
:'reading-menu',
                width
:100,
                items
: [{
                    text
:'Bottom',
                    checked
:true,
                    group
:'rp-group',
                    checkHandler
:this.movePreview,
                    scope
:this,
                    iconCls
:'preview-bottom'
               
},{
                    text
:'Right',
                    checked
:false,
                    group
:'rp-group',
                    checkHandler
:this.movePreview,
                    scope
:this,
                    iconCls
:'preview-right'
               
},{
                    text
:'Hide',
                    checked
:false,
                    group
:'rp-group',
                    checkHandler
:this.movePreview,
                    scope
:this,
                    iconCls
:'preview-hide'
               
}]
           
}
       
},
       
'-',
       
{
            pressed
: true,
            enableToggle
:true,
            text
:'Summary',
            tooltip
: {title:'Post Summary',text:'View a short summary of each item in the list'},
            iconCls
: 'summary',
            scope
:this,
            toggleHandler
: function(btn, pressed){
               
this.grid.togglePreview(pressed);
           
}
       
}]
   
});

   
MainPanel.superclass.constructor.call(this, {
        id
:'main-tabs',
        activeTab
:0,
        region
:'center',
        margins
:'0 5 5 0',
        resizeTabs
:true,
        tabWidth
:150,
        minTabWidth
: 120,
        enableTabScroll
: true,
        plugins
: new Ext.ux.TabCloseMenu(),
        items
: {
            id
:'main-view',
            layout
:'border',
            title
:'Loading...',
            hideMode
:'offsets',
            items
:[
               
this.grid, {
                id
:'bottom-preview',
                layout
:'fit',
                items
:this.preview,
                height
: 250,
                split
: true,
                border
:false,
                region
:'south'
           
}, {
                id
:'right-preview',
                layout
:'fit',
                border
:false,
                region
:'east',
                width
:350,
                split
: true,
                hidden
:true
           
}]
       
}
   
});

   
this.gsm = this.grid.getSelectionModel();

   
this.gsm.on('rowselect', function(sm, index, record){
       
FeedViewer.getTemplate().overwrite(this.preview.body, record.data);
       
var items = this.preview.topToolbar.items;
        items
.get('tab').enable();
        items
.get('win').enable();
   
}, this, {buffer:250});

   
this.grid.store.on('beforeload', this.preview.clear, this.preview);
   
this.grid.store.on('load', this.gsm.selectFirstRow, this.gsm);

   
this.grid.on('rowdblclick', this.openTab, this);
};

Ext.extend(MainPanel, Ext.TabPanel, {

    loadFeed
: function(feed){
       
this.grid.loadFeed(feed.url);
       
Ext.getCmp('main-view').setTitle(feed.text);
   
},

    movePreview
: function(m, pressed){
       
if(!m){ // cycle if not a menu item click
           
var items = Ext.menu.MenuMgr.get('reading-menu').items.items;
           
var b = items[0], r = items[1], h = items[2];
           
if(b.checked){
                r
.setChecked(true);
           
}else if(r.checked){
                h
.setChecked(true);
           
}else if(h.checked){
                b
.setChecked(true);
           
}
           
return;
       
}
       
if(pressed){
           
var preview = this.preview;
           
var right = Ext.getCmp('right-preview');
           
var bot = Ext.getCmp('bottom-preview');
           
var btn = this.grid.getTopToolbar().items.get(2);
           
switch(m.text){
               
case 'Bottom':
                    right
.hide();
                    bot
.add(preview);
                    bot
.show();
                    bot
.ownerCt.doLayout();
                    btn
.setIconClass('preview-bottom');
                   
break;
               
case 'Right':
                    bot
.hide();
                    right
.add(preview);
                    right
.show();
                    right
.ownerCt.doLayout();
                    btn
.setIconClass('preview-right');
                   
break;
               
case 'Hide':
                    preview
.ownerCt.hide();
                    preview
.ownerCt.ownerCt.doLayout();
                    btn
.setIconClass('preview-hide');
                   
break;
           
}
       
}
   
},

    openTab
: function(record){
        record
= (record && record.data) ? record : this.gsm.getSelected();
       
var d = record.data;
       
var id = !d.link ? Ext.id() : d.link.replace(/[^A-Z0-9-_]/gi, '');
       
var tab;
       
if(!(tab = this.getItem(id))){
            tab
= new Ext.Panel({
                id
: id,
                cls
:'preview single-preview',
                title
: d.title,
                tabTip
: d.title,
                html
: FeedViewer.getTemplate().apply(d),
                closable
:true,
                listeners
: FeedViewer.LinkInterceptor,
                autoScroll
:true,
                border
:true,

                tbar
: [{
                    text
: 'Go to Post',
                    iconCls
: 'new-win',
                    handler
: function(){
                        window
.open(d.link);
                   
}
               
}]
           
});
           
this.add(tab);
       
}
       
this.setActiveTab(tab);
   
},

    openAll
: function(){
       
this.beginUpdate();
       
this.grid.store.data.each(this.openTab, this);
       
this.endUpdate();
   
}
});

Ext.reg('appmainpanel', MainPanel);