//Author: Dustin Diaz
//Author URI: http://www.dustindiaz.com

var cd = {
	codes : Array,
	init : function() {
		cd.codes = document.getElementsByClassName('code','contentBody');
		cd.attach();
		
	},
	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);
			
			var el = cd.codes[i].nextSibling;
			new Effect.Parallel(
				[
					//new Effect.SlideUp(el,{sync:true}),
					new Effect.Fade(el,{sync:true})
				],
				{
					duration:0,
					fps:40
				}
			);
			Element.addClassName(el,'closed');
			//alert(cd.codes[i].parentNode.ClassName);
			Element.addClassName(cd.codes[i],'show');
		}
	},
	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 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:1.0,
					fps:40
				}
			);
			Element.removeClassName(el,'closed');
			Element.removeClassName(el.previousSibling,'show');
			Element.addClassName(el.previousSibling,'hide');
			
		} else {
			
			new Effect.Parallel(
				[
					new Effect.SlideUp(el,{sync:true}),
					new Effect.Fade(el,{sync:true})
				],
				{
					duration:1.0,
					fps:40
				}
			);
			Element.addClassName(el,'closed');
			Element.addClassName(el.previousSibling,'show');
			Element.removeClassName(el.previousSibling,'hide');
		}
	},
	
	showAll : function(e) {
		var i;
		for ( i=0;i<cd.codes.length;i++ ) {
			//alert(Element.hasClassName(cd.codes[i],'hide'));
			if (!Element.hasClassName(cd.codes[i],'hide')) {
				//alert(Element.hasClassName(cd.codes[i],'closed'));
				var el = cd.codes[i].nextSibling;
				new Effect.Parallel(
					[
						new Effect.SlideDown(el,{sync:true}),
						new Effect.Appear(el,{sync:true})
					],
					{
						duration:1.0,
						fps:40
					}
				);
				Element.removeClassName(el,'closed');
				Element.removeClassName(el.previousSibling,'show');
				Element.addClassName(el.previousSibling,'hide');
			}
		}
	},
	
	collapseAll : function(e) {
		var i;
		for ( i=0;i<cd.codes.length;i++ ) {
			if (!Element.hasClassName(cd.codes[i],'show')) {
				var el = cd.codes[i].nextSibling;
				new Effect.Parallel(
					[
						new Effect.SlideUp(el,{sync:true}),
						new Effect.Fade(el,{sync:true})
					],
					{
						duration:1.0,
						fps:40
					}
				);
				Element.addClassName(el,'closed');
				Element.addClassName(el.previousSibling,'show');
				Element.removeClassName(el.previousSibling,'hide');
			}
		}
	}

};

Event.observe(window,'load',cd.init,false);



var allCd = {
	codes : Array,
	init : function() {
		allCd.codes = document.getElementsByClassName('allCode','contentBody');
		allCd.attach();
		
	},
	attach : function() {
		Event.observe(allCd.codes[0],'click',allCd.collapse,false);
	},
	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 el = allCd.getEventSrc(e).nextSibling;
		//alert(Element.hasClassName(allCd.codes[0],'closed'));
		//alert(allCd.codes[0].attributes);
		//if ( Element.hasClassName(allCd.codes[0],'closed') ) {
			
		//	cd.collapseAll();
		//	Element.removeClassName(allCd.getEventSrc(e),'closed');
		//	Element.removeClassName(allCd.getEventSrc(e).previousSibling,'show');
		//	Element.addClassName(allCd.getEventSrc(e).previousSibling,'hide');
			
		//} else {
			cd.showAll();
		//	Element.addClassName(allCd.getEventSrc(e),'closed');
		//	Element.addClassName(allCd.getEventSrc(e).previousSibling,'show');
		//	Element.removeClassName(allCd.getEventSrc(e).previousSibling,'hide');
		//}
	}

};


Event.observe(window,'load',allCd.init,false);

var noCd = {
	codes : Array,
	init : function() {
		noCd.codes = document.getElementsByClassName('noCode','contentBody');
		noCd.attach();
		
	},
	attach : function() {
		Event.observe(noCd.codes[0],'click',noCd.collapse,false);
	},
	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 el = noCd.getEventSrc(e).nextSibling;
		cd.collapseAll();
	}

};


Event.observe(window,'load',noCd.init,false);
