/*!
 * Ext JS Library 3.3.0
 * Copyright(c) 2006-2010 Ext JS, Inc.
 * licensing@extjs.com
 * http://www.extjs.com/license
 */

Ext.onReady(function() {
	Ext.History.init();
});

Ext.ns('Ext.ux.RapidApp');
Ext.ux.RapidApp.AutoHistory= {
	eventIdx: 0,
	ignoreEvent: '',
	recordHistEvent: function(id, oldval, newval) {
			var nextIdx= Ext.History.eventIdx < 9? Ext.History.eventIdx+1 : 0;
			var eventText= ''+nextIdx+':'+id+':'+oldval+':'+newval;
			if (oldval && eventText != Ext.History.ignoreEvent) {
				console.log('recordHistEvent '+eventText);
				Ext.History.newestEvent= eventText;
				Ext.History.eventIdx= nextIdx;
				Ext.History.add(eventText);
			}
			else {
				console.log('recordHistEvent '+eventText+' (ignored)');
			}
		},
	Ext.History.on('change', function(token){
		Ext.History.ignoreEvent= '';
		console.log('onChange: '+Ext.History.newestEvent+' => '+token);
		if (Ext.History.newestEvent != token) {
			var parts= token? token.split(':') : [ ];
			var newIdx= token? parseInt(parts[0]) : Ext.History.eventIdx;
			var nextIdx= newIdx < 9? newIdx+1 : 0;
			var diff= token? newIdx - Ext.History.eventIdx : -1;
			var prevEvent= Ext.History.newestEvent;
			Ext.History.newestEvent= token;
			Ext.History.eventIdx= newIdx;
			
			if (diff <= -5 || (diff > 0 && diff < 5)) { // navigating forward
				if (parts[1] && parts[2] && parts[3]) {
					var tabPanel= Ext.getCmp(parts[1]);
					Ext.History.ignoreEvent= ''+nextIdx+':'+parts[1]+':'+parts[2]+':'+parts[3];
					tabPanel.setActiveTab(parts[3]);
				}
			}
			else if (prevEvent) { // navigating backward
				parts= prevEvent.split(':');
				if (parts[1] && parts[2] && parts[3]) {
					var tabPanel= Ext.getCmp(parts[1]);
					Ext.History.ignoreEvent= ''+nextIdx+':'+parts[1]+':'+parts[3]+':'+parts[2];
					tabPanel.setActiveTab(parts[2]);
				}
			}
		}
		if (!token) {
			Ext.History.newestEvent= ''+Ext.History.eventIdx+':::';
			Ext.History.add(Ext.History.newestEvent);
		}
		console.log('  newest='+Ext.History.newestEvent+' ign='+Ext.History.ignoreEvent+' idx='+Ext.History.eventIdx);
	});
    
    var tp = new Ext.TabPanel({
        renderTo: Ext.getBody(),
        id: 'main-tabs',
        height: 300,
        width: 600,
        activeTab: 0,
        
        items: [{
            xtype: 'tabpanel',
            title: 'Tab 1',
            id: 'tab1',
            activeTab: 0,
            tabPosition: 'bottom',
            
            items: [{
                title: 'Sub-tab 1',
                //id: 'subtab1'
            },{
                title: 'Sub-tab 2',
                //id: 'subtab2'
            },{
                title: 'Sub-tab 3',
                id: 'subtab3'
            }]/*,
            
            listeners: {
                'beforetabchange': function(tabPanel, newTab, currentTab){
                    Ext.History.recordHistEvent(tabPanel.id, currentTab? currentTab.id : "", newTab? newTab.id : "");
                    return true;
                }
            }*/
        },{
            title: 'Tab 2',
            id: 'tab2'
        },{
            title: 'Tab 3',
            id: 'tab3'
        },{
            title: 'Tab 4',
            id: 'tab4'
        },{
            title: 'Tab 5',
            id: 'tab5'
        }]/*,
        
			listeners: {
				 'beforetabchange': function(tabPanel, newTab, currentTab){
					  Ext.History.recordHistEvent(tabPanel.id, currentTab? currentTab.id : "", newTab? newTab.id : "");
					  return true;
				 }
			}*/
    });
});


Ext.override(Ext.TabPanel,{

	initComponent_orig: Ext.TabPanel.prototype.initComponent,

	initComponent: function() {
		Ext.TabPanel.prototype.initComponent_orig.call(this);
		
		this.on('beforetabchange', function(tabPanel, newTab, currentTab){
			  Ext.History.recordHistEvent(tabPanel.id, currentTab? currentTab.id : "", newTab? newTab.id : "");
			  return true;
		 });
	}

});