(function() {
	
	var glow;
	
	gloader.load(
	 ["glow", "1", "glow.dom", "glow.events", "glow.anim", "glow.tweens"],
	 {
		async: false,
		onLoad: function(fetchedGlow) {
			glow = fetchedGlow;
			glow.ready(init);
		}
	 }
	);
	
var newanim = {
	/**
	@name glow.anim.slideDown
	**/	
	slideDown :		function(NodeList, duration, opts) {
						if(typeof duration == "object") { var opts = duration; var duration = 0.5; }
						if(!duration) { var duration = 0.5; }
						this.slideElement(NodeList, duration, 'down', opts);
					},

	/**
	@name glow.anim.slideUp
	**/		
	slideUp : 		function(NodeList, duration, opts) {
						if(typeof duration == "object") { var opts = duration; var duration = 0.5; }
						if(!duration) { var duration = 0.5; }
						this.slideElement(NodeList, duration, 'up', opts);
					},
	
	/**
	@name glow.anim.slideToggle
	**/			
	slideToggle : 	function(NodeList, duration, opts) {
						if(typeof duration == "object") { var opts = duration; var duration = 0.5; }
						if(!duration) { var duration = 0.5; }
						this.slideElement(NodeList, duration, 'toggle', opts);
					},

	/**
	@name glow.anim.slideElement
	**/
	slideElement : 	function(NodeList, duration, action, opts) {
						this.opts = glow.lang.apply({
							tween: glow.tweens.easeBoth(),
							onStart: function(){},
							onComplete: function(){}
						}, opts);
						
						var that = this;
						var i = 0;
						var thatlength = NodeList.length;
						
						for(; i < thatlength; i++) {
							if((action == "up") || (action == "toggle" && parseInt(glow.dom.get(NodeList[i]).css("height")) > 0)) {
								NodeList[i].style.overflow = 'hidden';
								var completeHeight = 0;
								var fromHeight = parseInt(glow.dom.get(NodeList[i]).css("height"));
							} else if((action == "down" && parseInt(glow.dom.get(NodeList[i]).css("height")) == 0) || (action = "toggle" && parseInt(glow.dom.get(NodeList[i]).css("height")) == 0)) {
								var fromHeight = 0;
								NodeList[i].style.height = "";
								var completeHeight = parseInt(glow.dom.get(NodeList[i]).css("height"));
								NodeList[i].style.height = "0px";
							}
				
							var slideElement = glow.anim.css(NodeList[i], duration, { 'height': {from: fromHeight, to: completeHeight} }, { tween: this.opts.tween });
				
							if(i == 0) { 
								glow.events.addListener(slideElement, "start", function() { that.opts.onStart } );
								glow.events.addListener(slideElement, "complete", function() { that.opts.onComplete } );
							}
							slideElement.start();
						}
					}
};
	
function init() {
	var headers = glow.dom.get(".annotate h3");
		glow.events.addListener(
			headers,
			'click',
			function(){
				var that = glow.dom.get(this);
				var annoinner = that.next();
				newanim.slideToggle(
									  annoinner,
									  0.5,
									  {
										onStart: function(){
											var span = that.get("span");
											if(span.hasClass("down")){
												span.removeClass("down");
											} else {
												span.addClass("down");
											}
										},
										onComplete: function(){
											var span = that.get("span");
											if(annoinner.height() != 0 && !span.hasClass("down")){
												span.addClass("down");
											} else if (annoinner.height() == 0 && span.hasClass("down")) {
												span.removeClass("down");
											}
										}
									  }
									  );
				
			}
		);
		glow.events.addListener(
			headers,
			'mouseover',
			function(){
				var that = glow.dom.get(this);
				that.addClass("over");
			}
		);
		glow.events.addListener(
			headers,
			'mouseout',
			function(){
				var that = glow.dom.get(this);
				that.removeClass("over");
			}
		);
	var inners = glow.dom.get(".annotate .annotate-inner");
	inners.each(function(){
		var that = glow.dom.get(this)
		newanim.slideUp(that,0);
	});
	
}
})();