function bodyLoad() {
	document.getElementById('Sort').style.display = 'block';
	document.getElementById('Randomize').style.display = 'block';
	document.getElementById('ShowAll').style.display = 'block';
	document.getElementById('HideAll').style.display = 'block';
	document.getElementById('Instructions').style.display = 'block';
	createTOC();
	document.getElementById('toc').style.display = 'block';
}
var TOCstate = 'none';

function showhideTOC()
{
	TOCstate = (TOCstate == 'none') ? 'block' : 'none';
	document.getElementById('toc').lastChild.style.display = TOCstate;
}
function createTOC() {
	var nodes = document.getElementsByTagName('h2');
	var tocDiv = document.getElementById('toc');

	var a = tocDiv.appendChild(document.createElement('span'));
	a.onclick = showhideTOC;
	a.innerHTML = '<span class="TOCTitle">Calls &dArr;</span>';
	a.className = 'contentheader';

	var z = tocDiv.appendChild(document.createElement('div'));
	z.onclick = showhideTOC;

	// Get the nodes.
	var calls = new Array();
	for (var i=0;i<nodes.length;i++) {
		var link = new Object();
		link['innerHTML'] = nodes[i].innerHTML;
		link['id'] = nodes[i].id;
		link['SortKey'] = nodes[i].id.toUpperCase();
		calls.push(link);
	}
	
	// Sort the nodes.
	calls.sort(SortBySortKey);
		
	// Display the nodes.
	for (var callCurr=0;callCurr<calls.length;callCurr++) {
		var tmp = document.createElement('a');
		tmp.innerHTML = calls[callCurr]['innerHTML'];
		tmp.href = '#' + calls[callCurr]['id'];
		tmp.className = 'TOC';
		z.appendChild(tmp);
	}
	
	
}

function toggleDefinition(nameElement) {
	var nameElementId = nameElement.id;
	var definitionName = nameElementId.substring(0, nameElementId.length - 'Name'.length) + 'Definition';
	var definitionElement = document.getElementById(definitionName);
	definitionElement.style.display = (definitionElement.style.display == 'none' ? 'block' : 'none');
}
function showAll() {
	setDisplayForAll('block');
}
function hideAll() {
	setDisplayForAll('none');
}
function setDisplayForAll(displayType) {
	var tags = document.getElementsByTagName('div');
	for (var tagCurr = 0; tagCurr < tags.length; tagCurr++)
	{
		if (tags[tagCurr].className == 'Definition') {
			tags[tagCurr].style.display = displayType;
		}
	}
}
function sortAll() {
	sortInternal(false);
}
function randomizeAll() {
	sortInternal(true);
}

/*
Client Side Sorting And Randomization
*/
var sortedAlready = false;

function sortInternal(random) {

	var allDivs = document.getElementsByTagName('div');
	var definitions = new Array();
	// Get all the definitions into an array.	
	for (var i=0;i<allDivs.length;i++) {
		if ('Call' == allDivs[i].className) {
			var definition = new Object();
			var childNodes = allDivs[i].childNodes;
			
			// Get contents.
			definition['innerHTML'] = allDivs[i].innerHTML;
			
			// Get sort key
			if (random) {
				definition['SortKey'] = Math.random();
			} else {
				for (var childIndex = 0; childIndex < childNodes.length; childIndex++) {
					if ('H2' == childNodes[childIndex].nodeName.toUpperCase()) {
						definition['SortKey'] = childNodes[childIndex].id.toUpperCase();	
					}
				}
			}
			// Add to array.
			definitions.push(definition);
		}
	}

	// Sort the array.
	if (random) {
		sortedAlready = false;
		document.getElementById('Sort').value = 'Sort [a-z]';
		definitions.sort(SortBySortKey);
	} else if (sortedAlready) {
		definitions.reverse();
		if ('Sort [z-a]' == document.getElementById('Sort').value ) {
			document.getElementById('Sort').value = 'Sort [a-z]';
		} else {
			document.getElementById('Sort').value = 'Sort [z-a]';
		}
	} else {
		sortedAlready = true;
		document.getElementById('Sort').value = 'Sort [z-a]';
		definitions.sort(SortBySortKey);
	}

	// Re-write the document
	var arrayIndex = 0;
	for (var j=0;j<allDivs.length;j++) {
		if ('Call' == allDivs[j].className) {
			allDivs[j].innerHTML = definitions[arrayIndex]['innerHTML'];
			arrayIndex++;
		}
	}

}

function SortBySortKey(a, b) {
	return (a['SortKey'] == b['SortKey'] ? 0 : (a['SortKey'] > b['SortKey'] ? 1 : -1));
}
/* $Id: square-dancing-flash-cards.js 1012 2007-04-02 02:10:51Z nvaracal $ */
