var Tabs = new Class({

	Implements: Options,

	tabs: [],
	el: null,
	currentTab: null,

	options: {
		initialTab: 0,
		tabId: 				'tabs',
		tabListPosition: 	'before',
		tabContent: 		'.tab',
		firstTabClass: 		'firstItem',
		lastTabClass: 		'lastItem',
		triggerEvent:		'click',
		animate:			true
	},

	initialize: function(el, options) {
		this.el = $(el);
		this.setOptions(options); 
		this.buildStruct();
		
		this.currentTab = this.options.initialTab;
	},

	buildStruct: function() {
		var tabContent = this.el.getChildren(this.options.tabContent);		

		var tabContainer = new Element('div', { 'id': this.options.tabId }).inject(this.el, this.options.tabListPosition);		
		var tabList = new Element('ul').inject(tabContainer);
		
		tabContent.each(function(tabContentItem, i) {
			var className = null;
			
			if (i == 0) {
				className = this.options.firstTabClass;
			} else if (i == tabContent.length - 1) {
				className = this.options.lastTabClass;
			}
			
			var triggerEvent = this.options.triggerEvent;
			var trigger = new Element('li', {
				'class': className	
			}).inject(tabList);
			
			trigger.addEvent(triggerEvent, this.go.bindWithEvent(this, i));
						
			trigger.adopt(new Element('a').adopt(new Element('span').set('text', tabContentItem.get('title'))));
			
			this.tabs.push({
				trigger: trigger,
				content: tabContentItem
			});
		}, this);
		
		this.showTab(this.options.initialTab);
	},

	go: function(event, i) {
		event.stop();
		this.showTab(i);
	},

	showTab: function(i) {
		if (this.currentTab == i) return;
		
		this.tabs.each(function(tab, j) {
			if (i === j) {
				tab.trigger.addClass('selected');
				
				if (this.options.animate) {
					tab.content.fade("in").setStyle('display', 'block');	
				} else {
					tab.content.setStyle('display', 'block');
				}
			} else {
				tab.trigger.removeClass('selected');
				
				if (this.options.animate) {
					tab.content.fade("out").setStyle('display', 'none');	
				} else {
					tab.content.setStyle('display', 'none');
				}
			}
		}.bind(this));
	
		this.currentTab = this.tabs[i];
	}
});

