	var cd = {
		codes: Array,

		init: function() {
			cd.codes = document.getElementsByClassName('exhibition', 'contentBody');
			cd.attach();

			for (i = 0; i < cd.codes.length; i++) {
				var el = cd.codes[i].nextSibling;
				if (Element.hasClassName(el, 'current'))
					continue;
				new Effect.Parallel([new Effect.SlideUp(el, { sync: false })]);
				Element.addClassName(el, 'closed')
			}
		},

		attach: function() {
			var i;
			for (i = 0; i < cd.codes.length; i++) {
				Event.observe(cd.codes[i], 'click', cd.collapse, false);
				Element.cleanWhitespace(cd.codes[i].parentNode);
			}
		},

		getEventSrc: function(e) {
			if (!e) e = window.event;
			if (e.originalTarget)
				return e.originalTarget;
			else if (e.srcElement)
				return e.srcElement;
		},

		collapse: function(e) {
			var elTest = cd.getEventSrc(e).nextSibling;
			if (!Element.hasClassName(elTest, 'closed'))
				return;

			for (i = 0; i < cd.codes.length; i++) {
				var el = cd.codes[i].nextSibling;
				if (!Element.hasClassName(el, 'closed')) {
					new Effect.Parallel([new Effect.SlideUp(el, { sync: true }), new Effect.Fade(el, { sync: true })], { duration: 0.5, fps: 40 })
					Element.addClassName(el, 'closed');
				}
			}

			var el = cd.getEventSrc(e).nextSibling;
			if (Element.hasClassName(el, 'closed')) {
				new Effect.Parallel([new Effect.SlideDown(el, { sync: true }), new Effect.Appear(el, { sync: true })], { duration: 0.5, fps: 40 });
				Element.removeClassName(el, 'closed');
			}
			else {
				new Effect.Parallel([new Effect.SlideUp(el, { sync: true }), new Effect.Fade(el, { sync: true })], { duration: 0.5, fps: 40 });
				Element.addClassName(el, 'closed')
			}
		}
	};
	
	Event.observe(window, 'load', cd.init, false);	
