var Tabs = Class.create({
	initialize : function(element, onclick) {
		this.element = $(element);
		this.onclick = onclick; 
		this.menu = this.element.select('a');
		var tabs = this.tabs = {};
		this.menu.each(function(el) {
			tabs[el.hash] = el;
		});
		var initial = this.getInitialTab();
		this.show(initial);
		if (this.onclick) {
			this.onclick(initial.hash);
		}
		this.menu.each(this.setupTab.bind(this));
	},
	
	setupTab: function(elm) {
		Event.observe(elm,'click',this.activate.bindAsEventListener(this));
	},
	
	activateHref: function(href) {
		this.activateElement(this.tabs[href]);
	},
	
	activate: function(ev) {
		var elm = Event.findElement(ev, "a");
		Event.stop(ev);
		this.activateElement(elm);
		if (this.onclick) {
			this.onclick(elm.hash);
		}
		if (elm.readAttribute('rel') != null) {
			CounterPixel.track(elm.readAttribute('rel'));
		}		
	},
	
	activateElement: function(elm) {
		this.hide(this.activeTab);
		this.show(elm);
	},
	
	hide: function(a) {
		a.up('li').removeClassName('selected');
		this.getDivs(a).each(function(item) {
			item.removeClassName('selected');
		});
	},
	
	show: function(a) {
		this.activeTab = a;
		a.up('li').addClassName('selected');
		this.getDivs(a).each(function(item) {
			item.addClassName('selected');
		});
	},
	
	getDivs: function(a) {
		var match = a.href.match(/#(.*)$/)[1];
		var divs = new Array($('tab-' + match));
		var element;
		if (match.startsWith('product')) {
			element = $('tab-' + match + '-reviews-a');
			if (element) { divs.push(element); }
			element = $('tab-' + match + '-reviews-b');
			if (element) { divs.push(element); }
		}
		return divs;
	},
	
	getInitialTab: function() {
		var hash = location.hash;
		var i = hash.indexOf("/");
		if (i != -1) {
			hash = hash.substring(0, i);
		}
		var elm = this.menu.find(function(a) {
			return a.hash == hash;
		});
		return elm || this.menu.first();
	}
});
