var Fabtabs = Class.create();
Fabtabs.prototype = {
	initialize : function(element) {
		this.element = $(element);
		var options = Object.extend( {}, arguments[1] || {});
		this.menu = $A(this.element.getElementsByTagName('a'));
		this.show(this.getInitialTab());
		this.menu.each(this.setupTab.bind(this));
	},
	setupTab : function(elm) {
		Event.observe(elm, 'click', this.activate.bindAsEventListener(this),
				false);
		Event.observe(elm, 'mouseover', this.hover.bindAsEventListener(this),
				false);
		Event.observe(elm, 'mouseout', this.out.bindAsEventListener(this),
				false);
				
	},
	activate : function(ev) {
		var elm = Event.findElement(ev, "a");
		Event.stop(ev);
		this.show(elm);
		this.menu.without(elm).each(this.hide.bind(this));
	},
	
	hide : function(elm) {
		$(elm).removeClassName('active-tab');
		var li = $(elm).parentNode;
		li = $(li);
		li.removeClassName('active');
		$(this.tabID(elm)).removeClassName('active-tab-body');
	},
	
	out : function(ev) {
		var elm = Event.findElement(ev, "a");
		Event.stop(ev);
		//this.show(elm);
		var li = $(elm).parentNode;
		li = $(li);
		$(elm).removeClassName('active-tab-hov');
		li.removeClassName('active-hov');
	},
	
	hover : function(ev) {
		var elm = Event.findElement(ev, "a");
		Event.stop(ev);
		//this.show(elm);
		var li = $(elm).parentNode;
		li = $(li);
		$(elm).addClassName('active-tab-hov');
		li.addClassName('active-hov');
	},
	
	show : function(elm) {
		var li = $(elm).parentNode;
		li = $(li);
		$(elm).addClassName('active-tab');
		li.addClassName('active');
		$(this.tabID(elm)).addClassName('active-tab-body');
	},
	
	tabID : function(elm) {
		return elm.href.match(/#(\w.+)/)[1];
	},
	getInitialTab : function() {
		if (document.location.href.match(/#(\w.+)/)) {
			var loc = RegExp.$1;
			var elm = this.menu.find( function(value) {
				return value.href.match(/#(\w.+)/)[1] == loc;
			});
			return elm || this.menu.first();
		} else {
			return this.menu.first();
		}
	}
}
Event.observe(window, 'load', function() {
	new Fabtabs('tab-chooser');
}, false);
