// blank line needed for js concatenation
var Panels =
{
	init: function()
	{
		var panels = $$('.panel');
		var tabs = $$('.tab');
		Panels.panels = [];
		tabs.zip(panels).each(function(zip, i)
		{
			Panels.panels.push(new Panels.Panel(zip[0], zip[1], i == 0));
		});
	},
	showPanel: function(panel)
	{
		if (this.selected != panel)
		{
			Element.removeClassName(this.selected.tab, 'selected');
			var previousPanel = this.selected;
			this.selected = panel;
			Element.addClassName(this.selected.tab, 'selected');
			this.transition(previousPanel.content, panel.content, this.panels.indexOf(panel) > this.panels.indexOf(previousPanel));
		}
		return false;
	},
	hidePanel: function(toHide)
	{
		Panels.panels.detect(function(panel)
		{
			if(panel != toHide && panel.tab.visible())
			{
				Panels.showPanel(panel);
				return true;
			}
			return false;
		});
	},
	getPanel: function(content)
	{
		return Panels.panels.detect(function(panel)
		{
			return panel.content == content;
		});
	},
	transition: function(hideElement, showElement, left)
	{
		if (Element.hasClassName(hideElement.parentNode,'slide'))
		{
			if (left)
				new Effect.SlideExchangeLeft(hideElement, showElement);
			else
				new Effect.SlideExchangeRight(hideElement, showElement);
		}
		else
		{
			hideElement.hide();
			showElement.show();
		}
	}
};
Panels.Panel = Class.create();
Panels.Panel.prototype =
{
	initialize: function(tab, content, selected)
	{
		this.tab = tab;
		this.content = content;
		if (selected)
		{
			Panels.selected = this;
			Element.addClassName(tab, "selected");
			Element.show(content);
		}
		else
			Element.hide(content);
		Event.observe(tab, 'click', function (event)
		{
			Panels.showPanel(this);
			Event.stop(event);
		}.bindAsEventListener(this), true);
	}
};
