// blank line needed for js concatenation
document.observe('dom:loaded', function()
{
	// if we want more than one panel/tab group on a page, we'll have to rework this
	var panels = $$('.panel');
	if (panels.length == 0)
		return;
	var outerContainer = $$('.panel-outer-container')[0];
	var container = $$('.panel-container')[0];
	var animate = Element.hasClassName(container, 'animate');
	var tabGroups = $$('.tab-group');
	var nextButtons = tabGroups.invoke('select', '.next').flatten();
	var previousButtons = tabGroups.invoke('select', '.previous').flatten();
	var selected;
	var eventTracking = null;
	if (container)
	{
		Element.classNames(container).each(function(className)
		                                   {
			                                   var result = /eventTracking-(.+)/.exec(className);
			                                   if (result)
				                                   eventTracking = result[1].gsub(/-/, ' ');
		                                   });
	}

	function select(panel, defaultSelected)
	{
		function after()
		{
			if (nextButtons.length)
			{
				if (panel.nextPanel)
					nextButtons.invoke('removeClassName', 'disabled');
				else
					nextButtons.invoke('addClassName', 'disabled');
			}
			if (previousButtons.length)
			{
				if (panel.previousPanel)
					previousButtons.invoke('removeClassName', 'disabled');
				else
					previousButtons.invoke('addClassName', 'disabled');
			}
			if (selected)
				selected.tabs.invoke('removeClassName', 'selected');
			panel.tabs.invoke('addClassName', 'selected');
			selected = panel;
			if (!defaultSelected && eventTracking && typeof _gaq != 'undefined')
				_gaq.push(['_trackEvent', 'Marketing', 'Panel Change', panel.eventName]);
		}

		if (animate)
		{
			new Effect.Parallel([
				                    new Effect.Morph(container, {
					                    style: 'left: ' + (-panel.left) + 'px;height:' + panel.height + 'px;',
					                    sync: true
				                    }),
				                    new Effect.Morph(outerContainer, {
					                    style: 'height:' + panel.height + 'px;',
					                    sync: true
				                    })
			                    ], { afterFinish: after });
		}
		else
		{
			if (container)
			{
				container.setStyle({
					                   left: -panel.left + 'px',
					                   height: panel.height + 'px'
				                   });
			}
			if (outerContainer)
			{
				outerContainer.setStyle({
					                        height: panel.height + 'px'
				                        });
			}
			after();
		}
	}

	function getText(element)
	{
		if (element.nodeName.toLowerCase() == '#text')
			return document.all ? element.data : element.textContent;
		else
		{
			for (var i = 0; i < element.childNodes.length; i++)
			{
				var text = getText(element.childNodes[i]);
				if (text)
					return text;
			}
			return null;
		}
	}

	panels.each(function(panel, i)
	            {
		            panel.tabs = [];
		            tabGroups.each(function(tabGroup)
		                           {
			                           panel.tabs.push(tabGroup.select('.tab')[i]);
		                           });
		            panel.left = panel.positionedOffset().left;
		            panel.height = panel.getDimensions().height;
		            if (panel.tabs[0].hasClassName('selected'))
			            selected = panel;
		            if (i > 0)
			            panel.previousPanel = panels[i - 1];
		            if (i + 1 < panels.length)
			            panel.nextPanel = panels[i + 1];
		            panel.tabs.each(function(tab)
		                            {
			                            panel.eventName = eventTracking ? eventTracking + ' - ' + getText(tab) : null;
			                            tab.observe('click', function(event)
			                            {
				                            event.stop();
				                            select(panel, false);
			                            })
		                            });
		            panel.selectPanel = function()
		            {
			            select(panel, false);
		            }
	            });
	select(selected ? selected : panels[0], true);

	function arrows(buttons, name)
	{
		buttons.each(function(button)
		             {
			             button.observe('click', function(event)
			             {
				             event.stop();
				             if (selected && selected[name + 'Panel'])
					             select(selected[name + 'Panel'], false);
			             });
		             });
	}

	arrows(nextButtons, 'next');
	arrows(previousButtons, 'previous');

	var hash = window.location.hash;
	if (hash.startsWith('#showPanel-'))
		selectContainingPanel(hash.substr(11));
});
function selectContainingPanel(element)
{
	element = $(element);
	while (element.parentNode)
	{
		if (Element.hasClassName(element, 'panel'))
		{
			element.selectPanel();
			Element.scrollTo(element);
			break;
		}
		element = element.parentNode;
	}
}

