﻿var NewsTrigger = new Class({
	initialize: function(trigger, parent) {
		this.Element	= trigger;
		this.Parent		= parent;
		this.Content	= trigger.getNext();
		this.Container	= new Element('div');
		this.Effect		= new Fx.Styles(this.Container, {duration:320, transition:Fx.Transitions.circOut});
		this.IsOpen		= true;
		
		this.Container.setStyles({
			'overflow':			'hidden',
			'padding-bottom':	'3px'
		});
		
		this.Content.replaceWith(this.Container).appendChild(this.Content);
		this.MaxHeight	= this.Content.getSize().scrollSize.y;
					
		this.Element.addEvent('click', this.Toggle.bind(this, [false]));
		this.Element.setStyle('cursor', 'pointer');
	},
			
	Close: function(quick) {
		this.IsOpen = false;
		this.Effect.stop();
		this.Element.removeClass('ExpandedHeading');
		this.Element.addClass('CollapsedHeading');
		
		if (quick) {
			this.Effect.set({
				height:		[0],
				opacity:	[0]
			});
		}
		else {
			this.Effect.start({
				height:		[0],
				opacity:	[0]
			});
		}
	},
	
	Open: function(quick) {
		this.IsOpen = true;
		this.Effect.stop();
		this.Element.removeClass('CollapsedHeading');
		this.Element.addClass('ExpandedHeading');
		
		if (quick) {
			this.Effect.set({
				height:		[this.MaxHeight],
				opacity:	[1]
			});
		}
		else {
			this.Effect.start({
				height:		[this.MaxHeight],
				opacity:	[1]
			});
		}
		
		this.Parent.CloseAll(false, this);
	},
	
	Toggle: function(quick) {
		if (this.IsOpen)
			this.Close(quick);
		else
			this.Open(quick);
	}
});

var NewsAccordion = new Class({
	initialize: function(triggers) {
		this.Triggers = new Array();
		
		$each(triggers, function(trigger) { this.AddTrigger($(trigger)); }, this);
		
		this.CloseAll(true);
		//this.Triggers[1].Open(true);
	},
	
	AddTrigger: function(trigger) {
		this.Triggers[this.Triggers.length] = new NewsTrigger(trigger, this);
	},
	
	CloseAll: function(quick, exception) {
		$each(
			this.Triggers,
			function(trigger) {
				if (trigger !== exception)
					trigger.Close(quick);
			}
		);
	}
});