var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
var $ = function(id) {
	return document.getElementById(id);
}

// ++++++++++++++++++++++++++++++++++++
// YUI ACCORDION
// 1/22/2008 - Edwart Visser
//
// accordion
//
// REQUIRES: yahoo-dom-event.js, animation-min.js
//
// TODO: build hover script for highlighting header in IE
// TODO: attach behaviour based on rel attribute
// ++++++++++++++++++++++++++++++++++++

YAHOO.namespace("lutsr");

YAHOO.lutsr.accordion = {
	properties : {
		animation :true,
		animationDuration :10,
		multipleOpen :false
	},

	init : function(classContainer, animation, animationDuration, multipleOpen) {
		if (animation) {
			this.animation = animation;
		}
		if (animationDuration) {
			this.animationDuration = animationDuration;
		}
		if (multipleOpen) {
			this.multipleOpen = multipleOpen;
		}

		var accordionObjects = Dom.getElementsByClassName(classContainer);

		if (accordionObjects.length > 0) {

			for ( var i = 0; i < accordionObjects.length; i++) {
				if (accordionObjects[i].nodeName == "DL") {
					var headers = accordionObjects[i]
							.getElementsByTagName("dt");
					var bodies = headers[i].parentNode
							.getElementsByTagName("dd");
				}
				this.attachEvents(headers, i);
			}
		}
	},

	attachEvents : function(headers, nr) {
		for ( var i = 0; i < headers.length; i++) {
			var headerProperties = {
				objRef :headers[i],
				nr :i,
				jsObj :this
			}

			Event.addListener(headers[i], "click", this.clickHeader,
					headerProperties);
		}
	},

	clickHeader : function(e, headerProperties) {
		var parentObj = headerProperties.objRef.parentNode;
		var headers = parentObj.getElementsByTagName("dd");
		var header = headers[headerProperties.nr];
		var imgs = headerProperties.objRef.getElementsByTagName("img");

		if (Dom.hasClass(header, "open")) {
			headerProperties.jsObj.collapse(header);
			if (parentObj.id == "events"){
				if(imgs.length > 1)
					imgs[1].src = "site/images/open_events.gif";
				else
					imgs[0].src = "site/images/open_events.gif";
			}
		} else {
			if (headerProperties.jsObj.properties.multipleOpen) {
				headerProperties.jsObj.expand(header);
			} else {
				for ( var i = 0; i < headers.length; i++) {
					if (Dom.hasClass(headers[i], "open")) {
						headerProperties.jsObj.collapse(headers[i]);
					}
				}

				if (parentObj.id == "events") {
					var dts = parentObj.getElementsByTagName("dt");
					for ( var i = 0; i < dts.length; i++) {
						var tmp = dts[i].getElementsByTagName("img");
						if(tmp.length > 1)
							tmp[1].src = "site/images/open_events.gif";
						else
							tmp[0].src = "site/images/open_events.gif";
					}
				}

				headerProperties.jsObj.expand(header);
			}
			
			if (parentObj.id == "events"){
				if(imgs.length > 1)
					imgs[1].src = "site/images/close_events.gif";
				else
					imgs[0].src = "site/images/close_events.gif";
			}		
			
		}
	},

	collapse : function(header) {
		Dom.removeClass(Dom.getPreviousSibling(header), "selected");
		if (!this.properties.animation) {
			Dom.removeClass(header, "open");
		} else {
			this.initAnimation(header, "close");
		}
	},
	expand : function(header) {
		Dom.addClass(Dom.getPreviousSibling(header), "selected");
		if (!this.properties.animation) {
			Dom.addClass(header, "open");
		} else {
			this.initAnimation(header, "open");
		}
	},

	initAnimation : function(header, dir) {
		if (dir == "open") {
			Dom.setStyle(header, "visibility", "hidden");
			Dom.setStyle(header, "height", "auto");
			Dom.addClass(header, "open");
			var attributes = {
				height : {
					from :0,
					to :header.offsetHeight
				}
			}
			Dom.setStyle(header, "height", 0);
			Dom.setStyle(header, "visibility", "visible");

			var animation = new YAHOO.util.Anim(header, attributes);
			animationEnd = function() {
				// leave it here
			}
			animation.duration = this.properties.animationDuration;
			animation.useSeconds = false;
			animation.onComplete.subscribe(animationEnd);
			animation.animate();
		} else if ("close") {
			var attributes = {
				height : {
					to :0
				}
			}
			animationEnd = function() {
				Dom.removeClass(header, "open");
			}
			var animation = new YAHOO.util.Anim(header, attributes);
			animation.duration = this.properties.animationDuration;
			animation.useSeconds = false;
			animation.onComplete.subscribe(animationEnd);
			animation.animate();
		}
	}
}

initPage = function() {
	YAHOO.lutsr.accordion.init();
}

//Event.on(window, "load", initPage);

