// expandable.js
// Copyright 2007 BellTower Technologies LLC

function expandable_toggle(id) { 
   var elem = document.getElementById(id);
   if (elem) {
	   expandable_toggle_element(elem);
   }
}

function expandable_toggle_element(elem) {
	if (elem) {
		elem.className = (elem.className == "expandable_expanded") ?
												  "expandable_collapsed"
												: "expandable_expanded";
	}
}

function expandable_collapse_all() {
	var elems = getElementsByClass("expandable_expanded");
	for (var i=0; i < elems.length; i++) {
		expandable_toggle_element(elems[i]);
	}
}

function expandable_expand_all() {
	var elems = getElementsByClass("expandable_collapsed");
	for (var i=0; i < elems.length; i++) {
		expandable_toggle_element(elems[i]);
	}
}

function expandable_toggle_all(toggle_switch_element) {
	if (toggle_switch_element.getAttribute("expandable_toggle_all_state") == "collapsed") {
		expandable_expand_all();
		toggle_switch_element.className = "expandable_collapse_all";
		toggle_switch_element.setAttribute("expandable_toggle_all_state", "expanded");
	}
	else {
		expandable_collapse_all();
		toggle_switch_element.setAttribute("expandable_toggle_all_state", "collapsed");
		toggle_switch_element.className = "expandable_expand_all";
	}
}

function getElementsByClass(needle) {
// original code by Daniel Glazman, modified by TMK

	function _GetElementsByClass(outArray, seed, needle) {
		while (seed) {
		  if (seed.nodeType == (!window['Node'] ? 1 : Node.ELEMENT_NODE)) {
			//if (seed.hasAttribute("class")) {  // IE doesn't support this.
			if (seed.className) {
			  var c = " " + seed.className + " ";
			  if (c.indexOf(" " + needle + " ") != -1)
				outArray.push(seed);
			}
			_GetElementsByClass(outArray, seed.firstChild, needle)
		  }
		  seed = seed.nextSibling;
		}
	}

	var outArray = new Array();
	_GetElementsByClass(outArray, document.documentElement, needle);
	return outArray;
}	
