    function copyCheck(list) {
        if (list != null) {
            var parent = list.parentNode.parentNode;
            var li = parent.getElementsByTagName("li");
            var allNode = li[0].getElementsByTagName("input");
            for(var index=1; index<li.length; index++) {
                var inputs = li[index].getElementsByTagName("input");
                inputs[0].checked = allNode[0].checked;
            }
        }
    }

	var updateList = function() {
		var listBox = $('selected-topics');
		
		if(!listBox) {
			return;
		}
		
		while(listBox.firstChild) {
			listBox.removeChild(listBox.firstChild);
		}
		
		var element = Builder.node('ul');

		listBox.appendChild(element);
		
		var listUL = listBox.firstChild;
		
		//alert($('subtopics').getElementsByTagName("ol").length);
		
		//for(var i=0; i < $('subtopics').length; i++) {
			var ol = $('subtopics').getElementsByTagName("ol");
			
			for(var j=0; j<ol.length; j++) {
				
				var li = ol[j].getElementsByTagName("li");
				var titleAdded = false;

				var allItemsChecked = false;
				for(var index=1; index<li.length; index++) {
					var inputs = li[index].getElementsByTagName("input");
					if(!inputs[0].checked) {
						allItemsChecked = false;
						break;
					}
					allItemsChecked = true;
				}

				if (allItemsChecked) {
					var inputs = li[0].getElementsByTagName("input");
					inputs[0].checked = true;
					listUL.appendChild(Builder.node('li', {}, ol[j].title));
					var elements = Builder.node('ul');
					elements.appendChild(Builder.node('li', {}, inputs[0].value));
					listUL.appendChild(elements);
				} else {
					var inputs = li[0].getElementsByTagName("input");
					inputs[0].checked = false;
					for(var k=1; k<li.length; k++) {

						var inputs = li[k].getElementsByTagName("input");

						var l = 0;
						if(inputs[l].checked && !titleAdded) {
							listUL.appendChild(Builder.node('li', {}, ol[j].title));
							titleAdded = true;
						}

						var elements = Builder.node('ul');

						if(inputs[l].checked) {
							elements.appendChild(Builder.node('li', {}, inputs[l].value));
						}

						listUL.appendChild(elements);
					}
				}
			}
		//}
	}

	var updateProgramList = function() {
		var listBox = $('selected-programs');
		
		if(!listBox) {
			return;
		}
		
		while(listBox.firstChild) {
			listBox.removeChild(listBox.firstChild);
		}
		
		var element = Builder.node('ul');

		listBox.appendChild(element);
		
		var listUL = listBox.firstChild;
		
		//alert($('subtopics').getElementsByTagName("ol").length);
		
		//for(var i=0; i < $('subtopics').length; i++) {
			var ol = $('programs').getElementsByTagName("ol");
			
			for(var j=0; j<ol.length; j++) {
				
				var li = ol[j].getElementsByTagName("li");
				var titleAdded = false;

				var allItemsChecked = false;
				for(var index=1; index<li.length; index++) {
					var inputs = li[index].getElementsByTagName("input");
					if(!inputs[0].checked) {
						allItemsChecked = false;
						break;
					}
					allItemsChecked = true;
				}

				if (allItemsChecked) {
					var inputs = li[0].getElementsByTagName("input");
					inputs[0].checked = true;
					listUL.appendChild(Builder.node('li', {}, ol[j].title));
					var elements = Builder.node('ul');
					elements.appendChild(Builder.node('li', {}, inputs[0].value));
					listUL.appendChild(elements);
				} else {
					var inputs = li[0].getElementsByTagName("input");
					inputs[0].checked = false;
					for(var k=1; k<li.length; k++) {

						var inputs = li[k].getElementsByTagName("input");

						var l = 0;
						if(inputs[l].checked && !titleAdded) {
							listUL.appendChild(Builder.node('li', {}, ol[j].title));
							titleAdded = true;
						}

						var elements = Builder.node('ul');

						if(inputs[l].checked) {
							elements.appendChild(Builder.node('li', {}, inputs[l].value));
						}

						listUL.appendChild(elements);
					}
				}
			}
		//}
	}
	
function toggleTopic(li) {
	var categories = $$('#subtopic-categories li');
	for(var i=0; i<categories.length; i++) {
		categories[i].removeClassName('selected');
	}
	
	li.addClassName('selected');
	
	var subtopics = $$('li.subtopic');
	
	for(var i=0; i<subtopics.length; i++) {
		subtopics[i].removeClassName('selected');
		if(subtopics[i].title==li.title) {
			subtopics[i].addClassName('selected');
		}
	}
}

function initSubtopicSelector() {
	
	if ($('subtopics') != null) {
		$('subtopics').observe('click', updateList);
	}
	
	if ($('subtopic-categories') != null) {
		var categories = $$('#subtopic-categories li');
		for(var i=0; i<categories.length; i++) {
			categories[i].observe('click', function () {
				toggleTopic(this);
			});
		}
	}
	
	updateList();
}

Event.observe(window, 'load', initSubtopicSelector, false);