
Ext.ns('LSI.Widgets');

LSI.Widgets.TabPanel = Ext.extend(Object, {

		loadedEls : {},

		constructor : function(config) {

			Ext.apply(this, config);

			this.el = Ext.get(this.el);

			if (!this.el) throw 'El not found';

			LSI.Widgets.TabPanel.tps = LSI.Widgets.TabPanel.tps || {};
			LSI.Widgets.TabPanel.tps[this.el.id] = this;

		},

		init : function() {

			// over on tabs
			this.el.select('.tabBar .tabTitle').addClassOnOver('tabTitle-over');

			// click on tabs
			this.el.child('.tabBar').on('click', function(e, node) {

					var el;
					
					el = Ext.get(node);

					// just a normal link ?
					if (el.hasClass("tab-with-url")) return true;

					e.preventDefault();


					// Change active tab
					this.setActiveTab(node.id);

					return false;

				}, this, {delegate:'.tabTitle'});


		},

		setActiveTab : function(id) {

			var el ,url, contentEl;
			url = false;

			el = Ext.get(id);

			// ajax link ?
			if (el.hasClass("tab-with-ajax")) {
				// look for url in "rel"
				url = el.child("a").dom.rel;
			}

			el.radioClass('tabTitle-active').removeClass('tabTitle-over');

			contentEl = Ext.get(id + '-content');
			contentEl.radioClass('tabContent-active');

			if (url && !this.loadedEls[contentEl.dom.id]) {
				contentEl.load({url:url, scripts:true, text:"Chargement..."});
				this.loadedEls[contentEl.dom.id] = true;
			}

		}


	});

// Find a tab by its name and show it
LSI.Widgets.TabPanel.showTab = function(name) {
	var found = false;
	Ext.select(".tabPanel").each(function(el) {
			var id = el.id + "-" + name;
			if (Ext.get(id)) {
				LSI.Widgets.TabPanel.tps[el.id].setActiveTab(id);
				found = true;
			}
		});
	return found;
};

// Bug on IE
if (Ext.isIE) {
  Ext.override(Ext.EventObjectImpl, {
      getTarget : function(selector, maxDepth, returnEl) {

        var targetElement;

        try {
          targetElement = selector ? Ext.fly(this.target).findParent(selector, maxDepth, returnEl) : this.target;
        } catch(e) {
          targetElement = this.target;
        }

        return targetElement;

      }
    }
  );
}


