var mooItems = new Class({

	getOptions: function(){
		return {
			onChange: false,
			slideStyle: 'icon',
			transition: Fx.Transitions.quadOut,
			duration: 500,
			unit: 'em'
		};
	},

	initialize: function(element, options){
		this.setOptions(this.getOptions(), options);
		this.element = element;
		if(this.options.slideStyle=='icon'){
			this.icon();
		}else if(this.options.slideStyle=='accordion'){
			this.accordion();
		}else if(this.options.slideStyle=='horizontal'){
			this.horizontal();
		}else{
			this.vertical();
		}
	},

	vertical: function(){
		var list = $$('#'+this.element+' li div.collapse');
		var headings = $$('#'+this.element+' li h3');
		var collapsibles = new Array();
		
		headings.each( function(heading, i) {
			var collapsible = new Fx.Slide(list[i], { 
				duration: this.options.duration,
				transition: this.options.transition,
				unit: this.options.unit
			});
			collapsibles[i] = collapsible;
			heading.addEvent('click', function(e){
				new Event(e).stop();
				if(this.options.onChange) this.options.onChange();
				var span = $E('span', heading);
				if(span){
					var newHTML = span.innerHTML == '+' ? '-' : '+';
					span.setHTML(newHTML);
				}
				collapsible.toggle();
			}.bind(this));
			collapsible.hide();
		}.bind(this));
		
/*		$('collapse-all').addEvent('click', function(e){
			new Event(e).stop();
			headings.each( function(heading, i) {
				collapsibles[i].hide();
				var span = $E('span', heading);
				if(span) span.setHTML('+');
			});
		}
		$('expand-all').addEvent('click', function(e){
			new Event(e).stop();
			headings.each( function(heading, i) {
				collapsibles[i].show();
				var span = $E('span', heading);
				if(span) span.setHTML('-');
			});
		}
*/	},
	
	horizontal: function(){
		var list = $$('#'+this.element+' li div.collapse');
		var headings = $$('#'+this.element+' li h3');
		var collapsibles = new Array();
		
		headings.each( function(heading, i) {
			var collapsible = new Fx.Slide(list[i], { 
				duration: this.options.duration,
				transition: this.options.transition,
				unit: this.options.unit
			});
			collapsibles[i] = collapsible;
			heading.addEvent('click', function(e){
				new Event(e).stop();
				if(this.options.onChange) this.options.onChange();
				var span = $E('span', heading);
				if(span){
					var newHTML = span.innerHTML == '+' ? '-' : '+';
					span.setHTML(newHTML);
				}
				collapsible.toggle('horizontal');
			}.bind(this));
		}.bind(this));
		
/*		$('slideout-all').addEvent('click', function(e){
			new Event(e).stop();
			headings.each( function(heading, i) {
				collapsibles[i].hide('horizontal');
				var span = $E('span', heading);
				if(span) span.setHTML('+');
			});
		}
		
		$('slidein-all').addEvent('click', function(e){
			new Event(e).stop();
			headings.each( function(heading, i) {
				collapsibles[i].show('horizontal');
				var span = $E('span', heading);
				if(span) span.setHTML('-');
			});
		}
*/		
	},

	accordion: function(){
		var list = $$('#'+this.element+' li div.collapse');
		var headings = $$('#'+this.element+' li h3');
		var collapsibles = new Array();
		var spans = new Array();
		headings.each( function(heading, i) {
			var collapsible = new Fx.Slide(list[i], { 
				duration: this.options.duration,
				transition: this.options.transition,
				unit: this.options.unit
			});
			collapsibles[i] = collapsible;
			spans[i] = $E('span', heading);

			heading.addEvent('click', function(e){
				new Event(e).stop();
				if(this.options.onChange) this.options.onChange();
				var span = $E('span', heading);
				if(span){
					var newHTML = span.innerHTML == '+' ? '-' : '+';
					span.setHTML(newHTML);
				}
				for(var j = 0; j < collapsibles.length; j++){
					if(j!=i) {
						collapsibles[j].slideOut();
						if(spans[j]) spans[j].setHTML('+');
					}
				}
				collapsible.toggle();
			}.bind(this));
			collapsible.hide();
		}.bind(this));
	},

	icon: function(){
		var list = $$('#'+this.element+' li div.collapse');
		var headings = $$('#'+this.element+' li div.collapse div.collapseContainer h3');
		var images = $$('#'+this.element+' li div.collapse img');
		var collapsibles = new Array();
		headings.each( function(heading, i) {

			var collapsible = new Fx.Style(list[i], 'height', {duration: this.options.duration, transition: this.options.transition, unit: this.options.unit}).set(3);
			collapsibles[i] = collapsible;

			heading.addEvent('click', function(e){
				new Event(e).stop();
				if(this.options.onChange) this.options.onChange();
				for(var j = 0; j < collapsibles.length; j++){
					if(j!=i) {
						collapsibles[j].start(3);
					}
				}
				collapsible.start(10);
			}.bind(this));
		}.bind(this));

		images.each( function(image, i) {

			var collapsible = new Fx.Style(list[i], 'height', {duration: this.options.duration, transition: this.options.transition, unit: this.options.unit}).set(3);
			collapsibles[i] = collapsible;

			image.addEvent('click', function(e){
				new Event(e).stop();
				if(this.options.onChange) this.options.onChange();
				for(var j = 0; j < collapsibles.length; j++){
					if(j!=i) {
						collapsibles[j].start(3);
					}
				}
				collapsible.start(10);
			}.bind(this));
		}.bind(this));

	}
});

mooItems.implement(new Options);
mooItems.implement(new Events);
