var AccordionController = new Class
({
	accordions: [],
	
	initialize: function()
	{
		var accordionElements = document.getElements("div.tx-t3scontent-pi1-accordion");
		
		for (var i = 0; i < accordionElements.length; i++)
		{
			var accordion = new Accordion(accordionElements[i]);
			this.accordions.push(accordion);
		}
	}
});

var Accordion = new Class
({
	items: [],
	
	initialize: function(element)
	{
		var itemElements = element.getElements("div.accordionitem");
		
		for (var i = 0; i < itemElements.length; i++)
		{
			var item = new AccordionItem(itemElements[i]);
			item.addEvent("toggle", this.__handleItemToggle.bind(this));
			this.items.push(item);
		}
	},
	
	__handleItemToggle: function(event)
	{
		for (var i = 0; i < this.items.length; i++)
			if (this.items[i] !== event.target)
				this.items[i].hide();
	}
});

var AccordionItem = new Class
({
	Implements: [Events],
	
	bar: null,
	content: null,
	toggler: null,
	
	initialize: function(element)
	{
		this.bar = element.getElement("h3");
		this.content = element.getElement("div");
		
		this.bar.setStyles
		({
			"cursor": "pointer"
		});
		
		new Fx.Slide(this.content, { "mode": "vertical" }).hide();
		
		this.toggler = new Element("span", { "class": "unfold", "text": Locale.get("Common.unfold") }).inject(this.bar, "top");
		
		this.bar.addEvent("click", this.__handleBarClick.bind(this));
	},
	
	redraw: function()
	{
		if (this.toggler.hasClass("fold"))
			this.toggler.set("text", Locale.get("Common.fold"));

		if (this.toggler.hasClass("unfold"))
			this.toggler.set("text", Locale.get("Common.unfold"));
	},
	
	toggle: function()
	{
		this.toggler.toggleClass("fold");
		this.toggler.toggleClass("unfold");
		
		this.redraw();
		
		new Fx.Slide(this.content, { "mode": "vertical" }).toggle();
		
		this.fireEvent("toggle", { target: this });
	},
	
	hide: function()
	{
		new Fx.Slide(this.content, { "mode": "vertical" }).slideOut();
		this.toggler.removeClass("fold");
		this.toggler.addClass("unfold");
		
		this.redraw();
	},
	
	show: function()
	{	
		new Fx.Slide(this.content, { "mode": "vertical" }).slideIn();
		this.toggler.addClass("fold");
		this.toggler.removeClass("unfold");
		
		this.redraw();
	},
	
	__handleBarClick: function(event)
	{
		this.toggle();
	}
});

window.addEvent
(
	'domready',
	function()
	{
		var accordion = new AccordionController();
	}
);
