function aoiToggleClick(response, ev, toggle) {

	if (response != null) {

		// get toggle element
		var toggle = $$("a#toggle_" + response.cat_id)[0];
		
		// get checkbox element status
		var checkbox = $$("input#cat_" + response.cat_id)[0];
		var checked = checkbox.get("checked");
		
		// update classes
		toggle.removeClass("expand");
		toggle.addClass("collapse");
		
		// get parent list item element
		var li = toggle.getParent("li");
		
		if (response.html != null && li.getChildren("ul").length == 0) {
		
			// split checkbox value
			var cat_arr = checkbox.value.split("-");
		
			// only hide checkbox elements that are not aoi categories
			if (cat_arr.length != 3) {
			
				// uncheck and hide checkbox element
				// checkbox.set("checked", false);
				// checkbox.addClass("hidden");
				
			}
		
			// append returned html
			var html = li.get("html");
			html = html + response.html;
			
			li.set("html", html);
			
			// set aoi category checkbox element status
			if (cat_arr.length == 3) {
			
				var checkbox = $$("input#cat_" + response.cat_id)[0];
				checkbox.set("checked", checked);
				
			}
			
		}
	
	} else {
	
		// handle event
		var event = new Event(ev).stop();
		
		if ($(toggle).hasClass("expand")) {
		
			// get sibling checkbox element
			var checkbox = $(toggle).getNext("input");
			
			if (checkbox != null) {
			
				// split checkbox element value
				var cat_arr = checkbox.value.split("-");
				
				// validate numeric category id
				if (!isNaN(cat_arr[0])) {
				
					// json request
					new Request.JSON({
							url: "/modules/h_members/actions.php",
							onSuccess: aoiToggleClick
						}).post({
							"a": "expand_aoi",
							"toggle": 1,
							"cat-id": cat_arr[0],
							"aoi-id": cat_arr[1],
							"checked": checkbox.get("checked")
						});
					
				}
				
			}
			
		} else {
		
            // var answer = confirm("By collapsing the list, your selections will be lost. To keep your choices in place and leave the list expanded, please click on Cancel.")
            // if (!answer){   // if cancel clicked return
                // return;
            // }

			// get sibling unordered list element
			var ul = $(toggle).getNext("ul");
			
					
			// get status of checkboxes in sibling ul
			var status = aoiCheckStatus(ul);
			
			if (ul != null)
				// remove
				ul.dispose();
				
			// update classes
			toggle.removeClass("collapse");
			toggle.addClass("expand");
			
			// get sibling checkbox element
			var checkbox = $(toggle).getNext("input");
			
			// unhide checkbox element
			// checkbox.removeClass("hidden");
			
			// split checkbox element value
			var cat_arr = checkbox.value.split("-");
			
			// set checkbox element status
			if (cat_arr.length != 3) {
			
				if (status)
					checkbox.set("checked", true);
				else
					checkbox.set("checked", false);
					
			}
		
		}
		
		return false;
	
	}
	
}

function aoiCheckStatus(ul) {

	if (ul != null) {

		// get total and selected checkbox elements
		var total_checkboxes = ul.getElements("li input");
		var sel_checkboxes = ul.getElements("li input:checked");
		
		// compare and return
		if (total_checkboxes.length == sel_checkboxes.length)
			return true;
		else
			return false;
		
	} else
		return false;

}

function checkAll(theForm, cName, status) {
	for (i=0;i<theForm.elements.length;i++){
		var classes = theForm.elements[i].className.split(' ');
		for (j=0;j<classes.length;j++) {
			if (classes[j] == 'group_'+cName) {
				theForm.elements[i].checked = status;
				break;
			}
		}
	}
}

function uncheckParent(theForm, status, parent, grandparent, greatgrandparent){
	if (status == false) {
		theForm.elements['cat_'+parent].checked = false;
		if (theForm.elements['cat_'+grandparent]) {
			theForm.elements['cat_'+grandparent].checked = false;
		}
		if (theForm.elements['cat_'+greatgrandparent]) {
			theForm.elements['cat_'+greatgrandparent].checked = false;
		}
	}
}
