/*
 * 选项卡
 * param element: Element 菜单容器
 */
Fangbole.Tab = Class.create({
	initialize : function(element, options) {
		this.element = $(element);
		this.options = {
			defaultTab: 0,
			cnActive: 'current',
			cnDisabled: 'disabled',
			tnTab: 'li',
			beforeActivate: Prototype.emptyFunction,
			afterActivate: Prototype.emptyFunction
		};
		this.current = null;
		Object.extend(this.options, options || {});
		this.elTabs = this.element.select(this.options.tnTab);
		this.elContents = [];
		this.elTabs.each(function(tab){
			var content = $(this.tabID(tab));
			this.elContents.push(content);
			content && content.hide();
		}, this);
		this.activate(this.getInitialTab());
		this.elTabs.each(this.setupTab.bind(this));
		Fangbole.Tab.instances.push(this);
	},
	onclick: function(e){
		var elTab = Event.findElement(e, this.options.tnTab);
		e.stop();
		this.activate(elTab);
	},
	setupTab: function(elTab){
		if(!elTab.hasClassName(this.options.cnDisabled))
			elTab.observe('click', this.onclick.bindAsEventListener(this));
	},
	activate: function(elTab){
		if(elTab == this.current)return;
		this.options.beforeActivate(elTab, this.current);
		if(this.current)
			this.hide(this.current);
		this.show(elTab);
		this.current = elTab;
		this.options.afterActivate();
	},
	hide: function(elTab) {
		var elTab = $(elTab);
		var i = this.elTabs.indexOf(elTab);
		elTab.removeClassName(this.options.cnActive);
		this.elContents[i] && this.elContents[i].hide();
	},
	show: function(elTab) {
		var elTab = $(elTab)
		var i = this.elTabs.indexOf(elTab);
		elTab.addClassName(this.options.cnActive);
		this.elContents[i] && this.elContents[i].show();
	},
	tabID: function(elTab) {
		var elA = elTab.down('a');
		return elA ? elA.href.match(/#(\w.+)/) && elA.href.match(/#(\w.+)/)[1] : null;
	},
	getInitialTab : function(){
		return this.elTabs[this.options.defaultTab];
	}			  
})

Object.extend(Fangbole.Tab, {
	instances: []
})
