/**
 * @author Andreas Wiberg, rxl.se
 */

// Extending MooTools 1.2. Basic show / hide / toggle and isVisible
Element.implement({
	show: function() {
		this.setStyle('display','');
	},
	hide: function() {
		this.setStyle('display','none');
	},
	toggle: function() {
		this.isVisible() ? this.hide() : this.show();
	},
	isVisible: function() {
		return this.getStyle('display') != 'none';
	}
});

// Basic tab class
var MooTabs = new Class({
	
	Implements: [Options],
	
	options: {
		activeTabClass: 'active',
		tabSelector: 'ul li',
		panelSelector: 'div',
		selectedTab: 0,
		rememberTab: false
	},
	
	container: 'tabs', // the container id string/element
	tabs: [], // the tab elements
	panels: [], // the panel elements,
	cookieName: 'MooTabsRemember',
	
	initialize: function(container, options) {
		
		this.setOptions(options);
		this.container = (container ? $(container): $(this.container));
		this.cookieName = this.cookieName + '_' + this.container.id;
		
		
		if (Cookie.read(this.cookieName) && !options.selectedTab) {
			this.options.selectedTab = Cookie.read(this.cookieName);
		} else {
			if (this.options.rememberTab) {
				Cookie.write(this.cookieName, this.options.selectedTab);
			}
		}
		
		this.tabs = this.container.getElements(this.options.tabSelector);
		this.panels = this.container.getElements(this.options.panelSelector);
		
		if (this.tabs.length != this.panels.length) {
			return false;
		}
		
		this.panels.each(function(element, index) {
			if (index != this.options.selectedTab)
				element.hide();
		}.bind(this));
		
		this.tabs.each(function(element, index) {
			element.addEvent('click', function(e) {
				e.stop();
				this.activate(index);
			}.bind(this));
			
			if (index == this.options.selectedTab)
				element.addClass(this.options.activeTabClass);
		}.bind(this));
	}, 
	
	activate: function(tab) {
		this.panels.each(function(element, index) {
			if (element.isVisible() && tab != index) {
				element.hide();
			} else if (tab == index) {
				element.show();
			}
		});
		
		this.tabs.each(function(element, index) {
			(tab == index) ? element.addClass(this.options.activeTabClass) : element.removeClass(this.options.activeTabClass);
		}.bind(this));
		
		if (this.options.rememberTab) {
			Cookie.write(this.cookieName, tab);
		}
	}
});
