/*!
 * Ext Core Library $version&#xD;&#xA;http://extjs.com/&#xD;&#xA;Copyright(c) 2006-2009, $author.&#xD;&#xA;&#xD;&#xA;The MIT License&#xD;&#xA;&#xD;&#xA;Permission is hereby granted, free of charge, to any person obtaining a copy&#xD;&#xA;of this software and associated documentation files (the &quot;Software&quot;), to deal&#xD;&#xA;in the Software without restriction, including without limitation the rights&#xD;&#xA;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xD;&#xA;copies of the Software, and to permit persons to whom the Software is&#xD;&#xA;furnished to do so, subject to the following conditions:&#xD;&#xA;&#xD;&#xA;The above copyright notice and this permission notice shall be included in&#xD;&#xA;all copies or substantial portions of the Software.&#xD;&#xA;&#xD;&#xA;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xD;&#xA;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xD;&#xA;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&#xD;&#xA;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xD;&#xA;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xD;&#xA;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN&#xD;&#xA;THE SOFTWARE.&#xD;&#xA;
 */
Ext.ns('Ext.ux');

Ext.ux.Tabs = Ext.extend(Ext.util.Observable, {
  // Configuration options
    activeTab: 0,
    
  // Our class constructor
    constructor : function(element, config) {
        Ext.apply(this, config);
        Ext.ux.Tabs.superclass.constructor.call(this);
        
        this.addEvents(
            'beforetabchange',
            'tabchange'
        );
        
        this.el = Ext.get(element);
        this.init();
    },
    
    init : function() {
        var me = this;

    this.el.addClass('ux-tabs-container');
    
    this.tabStrip = this.el.child('ul');
    this.tabStrip.addClass('ux-tabs-strip');
    
    this.tabStrip.on('click', this.onStripClick, this, {delegate: 'a'});
    
    this.tabs = this.tabStrip.select('> li');
    this.cards = this.el.select('> div');
    
    this.cardsContainer = this.el.createChild({
      cls: 'ux-tabs-cards'
    });   
    this.cardsContainer.setWidth(this.el.getWidth());
    
    this.cards.addClass('ux-tabs-card');
    this.cards.appendTo(this.cardsContainer);
    
    this.el.createChild({
      cls: 'ux-tabs-clearfix'
    });
    
    this.setActiveTab(this.activeTab || 0);
  },
  
  onStripClick : function(ev, t) {
    if(t && t.href && t.href.indexOf('#')) {
      ev.preventDefault();      
      this.setActiveTab(t.href.split('#')[1]);
    }
  },
  
  setActiveTab : function(tab) {
    var card;   
    if(Ext.isString(tab)) {
      card = Ext.get(tab);
      tab = this.tabStrip.child('a[href=#' + tab + ']').parent();
    }
    else if (Ext.isNumber(tab)) {
      tab = this.tabs.item(tab);
      card = Ext.get(tab.first().dom.href.split('#')[1]);
    }
    
    if(tab && card && this.fireEvent('beforetabchange', tab, card) !== false) {
      card.radioClass('ux-tabs-card-active');
      tab.radioClass('ux-tabs-tab-active');
      this.fireEvent('tabchange', tab, card);
    }
  }
});
