function toggleCollapse(event) {
	e = getEvent(event);
	var src =  e.srcElement || e.target;
	if(src != null) {
		var sectionEl = src.parentNode;
		if (sectionEl != null) {
			var className = sectionEl.className;
			var classString = "" + className;
			var result = classString.search(/\bexpanded\b/);
			if (result > -1) {
				var collString = classString.replace(/\bexpanded\b/, "collapsed");
				sectionEl.className = collString;
			} else {
				var expString = classString.replace(/\bcollapsed\b/, "expanded");
				sectionEl.className = expString;
			}
		}
	}
}

function toggleEnabled(type, subtype) {
	var profileRoot = document.getElementById("profile");
	var checkboxEl = type + "_en";
	var selected = document.getElementsByName(checkboxEl)[0].checked;
	var replacement;
	var disabled = !selected;
	var elementArray = document.getElementsByName(type);
	if (elementArray.length == 0) {
		/* IE cannot handle "name" attributes on DIV tag */
		elementArray = ieGetDivElementsByName(profileRoot,type);
	}
	arrayLength = elementArray.length;
	var el;
	/* all grouping divs that can be disabled or enabled for that type */
	for (var i=0; i<arrayLength; i++) {
		el = elementArray[i];
		setDisabledClass(el,disabled);
		disableFormElements(el,disabled);
		if (subtype) {
			var checkboxSubtype = subtype + "_en";
			var subtypeSelected = document.getElementsByName(checkboxSubtype)[0].checked;
			var subEls = document.getElementsByName(subtype);
			if (subEls.length == 0) {
				subEls = ieGetDivElementsByName(el,subtype);
			}
			subElsLength = subEls.length;
			var subtypeDisabled = !subtypeSelected; /* subtype checkbox is off */
			if (!selected) {
				subtypeDisabled = !selected;
			}
			for (var s=0; s<subElsLength; s++) {
				var subEl = subEls[s];
				setDisabledClass(subEl,subtypeDisabled);
				disableFormElements(subEl,subtypeDisabled);
			}
		}
	}
}

function getEvent(e){
  if(window.event != null) {
    return event;
  }
  return e;
}

function setDisabledClass(element,disabled) {
	var clName = element.className;
	/* remove the disabled class in any case */
	var newClassString = clName.replace(/\bdisabled\b/g, "");
	if (disabled) {
		element.className = newClassString + " disabled";
	} else {
		element.className = newClassString;
	}
}

function disableFormElements(element,disabled) {
	/* all subelement form elements that can be enabled or disabled */
	var inputEls = element.getElementsByTagName("input");
	var selectEls = element.getElementsByTagName("select");
	var fel;
	for (var j=0; j<inputEls.length; j++) {
		inputEls[j].disabled = disabled;
	}
	for (var k=0; k<selectEls.length; k++) {
		selectEls[k].disabled = disabled;
	}
}

function ieGetDivElementsByName(root,name) {
	var divEls = root.getElementsByTagName("div");
	var array = new Array();
	var nameAtt;
	var idx = 0;
	var divEl;
	for (var d=0; d<divEls.length; d++) {
		divEl = divEls[d];
		nameAtt = divEl.getAttribute("name");
		if(nameAtt == name) {
			array[idx] = divEl;
			idx++;
		}
	}
	return array;
}
