var gSlideObjArr = new Array();

function initAccordionFunctionality() {
	var myAccordion = new Accordion($('accordion1'), 'div.sectionHd', 'div.sectionBd', {
		opacity: true,
		onActive: function(toggler, element){
			var btnEl = toggler.getElements('a')[0];
			btnEl.className = "active";
		},
		onBackground: function(toggler, element){
			var btnEl = toggler.getElements('a')[0];
			btnEl.className = "";
		}
	});
}

function initExpandCollapseFunctionality(aMode) {

	var expandableSectionsExist = false;
	var sectionArr = $$('div.sectionHd');
	
	for (var i=0; i<sectionArr.length; i++) {
		var curHeaderEl = sectionArr[i];
		var curBtnEl = $(curHeaderEl).getElements('a')[0];
		var curBodyEl = curHeaderEl.getNext();
		var curSlideObj = new Fx.Slide(curBodyEl);
		
		// --------------------------------
		// collapse sections
		// --------------------------------
		switch (aMode) {
			case 'firstOpen':
				if (i > 0) { curSlideObj.hide(); }
				break;
			case 'collapseAll':
				if (i >= 0) { curSlideObj.hide(); }
				break;
		}


		// --------------------------------
		// add events to section headers
		// --------------------------------
		// change header class on complete sliding
		curSlideObj.addEvent('complete', function(curSlideObj, curBtnEl) {
			return function() {
				if (curSlideObj.open == true) {
					curBtnEl.className = 'active';
					updateToggleAllBtn();
				} else {
					curBtnEl.className = '';
					updateToggleAllBtn();
				}
			}
		}(curSlideObj, curBtnEl))

		gSlideObjArr.push(curSlideObj);
		
		// if section body exists
		if (curBodyEl) {
			if (curBodyEl.className.indexOf('sectionBd') > -1) {
												
				// add event to header
				curHeaderEl.onclick = function(curSlideObj) {
					return function() {curSlideObj.toggle();}; // why it works: http://www.room51.co.uk/js/closures.html
				}(curSlideObj);
				
				// set flag
				expandableSectionsExist = true;
			}
		}
	}


	if (expandableSectionsExist) {
		// --------------------------------
		// add events to toggle all button
		// --------------------------------
		var i = 0;
		var toggleAllEl = $$('div.toggleAll')[0].getElements('a')[0];
		toggleAllEl.onclick = function() {
			toggleAll();
			return false;
		}
		updateToggleAllBtn();
	}
}


function getSectionsStatus() {
	
	var statusStr = '';
	var allCollapsed = true;
	var allExpanded = true;
	gSlideObjArr.each(function(aSlideObj) {
		if (aSlideObj.open) { allCollapsed = false; }
		if (!aSlideObj.open) { allExpanded = false; }
	});
	
	if (allCollapsed) {
		statusStr = 'allCollapsed';
	} else {
		if (allExpanded) {
			statusStr = 'allExpanded';
		} else {
			statusStr = 'someExpanded';
		}
	}
	
	return statusStr;
}


function updateToggleAllBtn() {
	
	var sectionsStatus = getSectionsStatus();
	var toggleAllEl = $$('div.toggleAll')[0].getElements('a')[0]
	
	if (sectionsStatus == 'allCollapsed') {
		toggleAllEl.className = 'toggleAll_allCollapsed';
		toggleAllEl.innerHTML = 'Open All';
	} else {
		if (sectionsStatus == 'allExpanded') {
			toggleAllEl.className = 'toggleAll_notAllCollapsed';
			toggleAllEl.innerHTML = 'Close All';
		} else {
			toggleAllEl.className = 'toggleAll_notAllCollapsed';
			toggleAllEl.innerHTML = 'Open All';
		}
	}
}


function toggleAll() {
	var sectionsStatus = getSectionsStatus();
	
	if (sectionsStatus == 'allCollapsed') {
		gSlideObjArr.each(function(aSlideObj) {
			aSlideObj.slideIn();
		});
	} else {
		if (sectionsStatus == 'allExpanded') {
			gSlideObjArr.each(function(aSlideObj) {
				aSlideObj.slideOut();
			});
		} else {
			gSlideObjArr.each(function(aSlideObj) {
				aSlideObj.slideIn();
			});
		}
	}
}