var Accordion =
{
	init: function()
	{
		// find all the accordions on the page
		var accordions = $(".accordion");
		// for each accordion
		for (var i = 0, ii = accordions.length; i < ii; i++)
		{	// collect together all it's children
			var folds = accordions[i].childNodes;
			for (var j = 0, jj = folds.length; j < jj; j++)
			{	// check each one is an element
				if (folds[j].nodeType == 1)
				{	// if it is collapse it
					Accordion.collapse(folds[j]);
					// collect all the links inside the collapsed fold
					var foldLinks = folds[j].getElementsByTagName("a");
					// identify the first one
					var foldTitleLink = foldLinks[0];
					// attach the click handler to it
					$(foldTitleLink).bind("click", Accordion.clickListener);
					
					for (var k = 1, kk = foldLinks.length; k < kk; k++)
					{
						$(foldLinks[k]).bind("focus", Accordion.focusListener);
					}
				}
			}
						
			var clientNavLinks = accordions[i].getElementsByTagName("a");
			
			for(var m = 0, mm = clientNavLinks.length; m < mm; m++)
			{
				if ($(clientNavLinks[m]).hasClass("selected"))
				{
					var selectedElement = clientNavLinks[m];
					Accordion.expand(selectedElement.parentNode.parentNode.parentNode);
				}
			}
		}
	},

	collapse: function(fold)
	{
		$(fold).removeClass("expanded");
		$(fold).addClass("collapsed");
	},

	collapseAll: function(accordion)
	{
		var folds = accordion.childNodes;
		for (var i = 0, ii = folds.length; i < ii; i++)
		{
			if (folds[i].nodeType == 1)
			{
				Accordion.collapse(folds[i]);
			}
		}
	},

	expand: function(fold)
	{
		Accordion.collapseAll(fold.parentNode);
		$(fold).removeClass("collapsed");
		$(fold).addClass("expanded");
	},
	
	clickListener: function(event)
	{
		var fold = this.parentNode.parentNode;
		if ($(fold).hasClass("collapsed"))
		{
			Accordion.expand(fold);
		}
		else
		{
			Accordion.collapse(fold);
		}
		event.preventDefault();
	},
	
	focusListener: function(event)
	{
		var element = this;
		while (element.parentNode)
		{
			if ($(element.parentNode).hasClass("accordion"))
			{
				Accordion.expand(element);
				return;
			}
			element = element.parentNode;
		}
	}
};

Accordion.init();

