function setupURLJumperSelect() {
	// get all select elements with the class 'url_jump_select'
	var selects = getElementsByClass('url_jump_select', document, 'SELECT');
	// loop through, add event on change
	for (var i = 0; i < selects.length; i++) {
		selectElement = selects[i];
		// attach onclick function
		addEvent(selectElement, 'change', urlJumpSelect, false);
	}	
}

function urlJumpSelect(e) {
	// find the target
	var target = findTarget(e);
	var path = target.value;
	if (path.length > 0) {
		document.location.href = path;
	}
}

function setUpRadiosAndCheckboxes() {
	// get all select elements with the class 'url_jump_select'
	var inputs = document.getElementsByTagName('INPUT');
	// loop through, add class 'radio' if they are a radio or checkbox
	for (var i = 0; i < inputs.length; i++) {
		inputElement = inputs[i];
		if (inputElement.getAttribute('type') == 'checkbox' || inputElement.getAttribute('type') == 'radio') {
			// add class
			inputElement.className += ' radio';
		}
	}	
}

function setupToggleResults() {
	var elements = getElementsByClass('toggleResults', document, 'A');
	// loop through, add event on click
	for (var i = 0; i < elements.length; i++) {
		element = elements[i];
		// attach onclick function
		addEvent(element, 'click', toggleResults, false);
	}	
}

function toggleItem(targetID, target2ID) {

	var base = getPathToRoot();
	
	if (document.getElementById) {
	
		target = document.getElementById(targetID);
		target2 = document.getElementById(target2ID);
		
		if (target.style.display == "none") {
			target.style.display = "";
			var imageURL = "url('" + base + "images/triangle-open.gif')";
			//alert(imageURL);
		} else {
			target.style.display = "none";
			var imageURL = "url('" + base + "images/triangle-close.gif')";
		}
		
		target2.style.backgroundImage = imageURL;
	}
}

function toggleResults(e) {
	var state = 'open';
	var target = findTarget(e);
	
	// get the resultsDIV from the title tag
	var elementID = target.getAttribute('title');
	// console.log(elementID);
	
	if (document.getElementById(elementID)) {
		// toggle the results DIV
		var resultsDIV = document.getElementById(elementID);
		if (resultsDIV.style.display == 'none') {
			resultsDIV.style.display = '';
			state = 'open';
		} else {
			resultsDIV.style.display = 'none';
			state = 'closed';
		}
	}
	
	if (state == 'closed') {
		target.innerHTML = 'Show Results';
	} else {
		target.innerHTML = 'Hide Results';
	}
		
}

function toggleList(e) {
	
	// get a reference to the anchor and it's parentNode (the <li> element)
	if (window.event) {
		// IE does it differently... stores the event in a window.event object
		var thisA = window.event.srcElement;
		//alert(thisA);
		var thisLI = thisA.parentNode;
	} else {
		var thisA = this;
		var thisLI = this.parentNode;
	}
	// if this li has nested ul elements...
	if (thisLI.getElementsByTagName('ul').length > 0) {
		
		var toggleListTarget = thisLI.getElementsByTagName('ul')[0];
		//...toggle visibility of first ul
		if (toggleListTarget.style.display != 'none' ) {
			toggleListTarget.style.display = 'none';
			//thisA.style.color = '';
			thisA.style.backgroundImage = 'url(../images/arrowright.gif)';
			//closeListArrow();
		} else {
			toggleListTarget.style.display = '';
			//thisA.style.color = 'white';
			thisA.style.backgroundImage = 'url(../images/arrowdown.gif)';
			//expandListArrow();
		}
		// cancel bubble and href of this anchor
		cancelClick(e);
		// hack for Safari (stops browser following href link)
		thisA.onclick = function() { return false; }
	}
}

function setUpCollapsingList() {

	// find the toggle list
	var lists = getElementsByClass('collapsible_list', document, 'ul');
	
	for (var x = 0; x < lists.length; x++) {
		//list = document.getElementById('collapsingList');
		list = lists[x];
		// find all it's child UL elements
		var childLists = list.getElementsByTagName('ul');
		// hide them all
		for (var i = 0; i < childLists.length; i++) {
			var childList = childLists[i];
			childList.style.display = 'none';
		}
		
		// attach toggleList function to onclick of each anchor
		var childAnchors = list.getElementsByTagName('a');
		// hide them all
		for (var i = 0; i < childAnchors.length; i++) {
			var childAnchor = childAnchors[i];
			// attach toggleList function to onclick of each anchor
			addEvent(childAnchor, 'click', toggleList, false);
		}
	}
}

function checkAll(checkboxID, checkboxDivID) {

	if (document.getElementById(checkboxID) && document.getElementById(checkboxDivID)) {
	
		var checkbox = document.getElementById(checkboxID);
		var checkboxDiv = document.getElementById(checkboxDivID);
		// find all checkboxes in checkboxDiv
		var inputs = checkboxDiv.getElementsByTagName('INPUT');
		var labels = checkboxDiv.getElementsByTagName('LABEL');
		
		if (checkbox.checked) {
			// check all boxes in the DIV
			for (var i = 0; i < inputs.length; i++) {
				inputElement = inputs[i];
				if (inputElement.getAttribute('type') == 'checkbox') {
					// check it
					inputElement.checked = true;
				}
			}
			// highlight labels too
			for (var i = 0; i < labels.length; i++) {
				labelElement = labels[i];
				labelElement.className += ' checked';
			}
			
		} else {
			// un-check all boxes in the DIV
			for (var i = 0; i < inputs.length; i++) {
				inputElement = inputs[i];
				if (inputElement.getAttribute('type') == 'checkbox') {
					// check it
					inputElement.checked = false;
				}
			}
			// un-highlight labels too
			for (var i = 0; i < labels.length; i++) {
				labelElement = labels[i];
				labelElement.className = labelElement.className.replace(/\b ?checked\b/,'');
			}
		}
	}
}

function textResizingOptions() {

	if (document.getElementById('textsize_small') && 
		document.getElementById('textsize_medium') && 
		document.getElementById('textsize_large')) {

		document.getElementById('textsize_small').innerHTML = 'A';
		document.getElementById('textsize_medium').innerHTML = 'A';
		document.getElementById('textsize_large').innerHTML = 'A';
	}
}

function hideParent(e) {
	this.parentNode.style.display = 'none';
}

function addCloseButton(element) {

	if (!element) { return false; }
	
	// create close button
	var link = document.createElement('a');
	link.href = '#';
	
	// create link text
	var link_text = document.createTextNode('Close');
	link.appendChild(link_text);
	element.appendChild(link);
	
	// set styles of button
	link.className = 'hide_button';
	
	// attach behaviour
	addEvent(link, 'click', hideParent, false);
}

function addCloseButtonToErrorBox() {
	if (document.getElementById('error_box')) {
		element = document.getElementById('error_box');
		addCloseButton(element);
	}
}

addLoadEvent(setupToggleResults);
addLoadEvent(setupURLJumperSelect);
addLoadEvent(setUpRadiosAndCheckboxes);
addLoadEvent(setUpCollapsingList);
addLoadEvent(addCloseButtonToErrorBox);
addLoadEvent(setUpCollapsingList);