var otherLoadFunction = null;

function onLoad() {
	var layerMenus = document.getElementById('layerMenus');
	var layerIndex = document.getElementById('layerIndex');
	var bl = getImmediateChildrenByTagName(layerMenus, 'UL')[0];
	if( !bl || !layerIndex || !layerMenus || layerIndex.childNodes.length > 0 ) {
		if( otherLoadFunction ) otherLoadFunction();
		return;
	}
	
	var targetArea = document.createElement('ul');
	layerIndex.appendChild(targetArea);
	var arrayIndex = new Array();
	generateIndex(bl, arrayIndex);
	sortIndex(arrayIndex);
	indexToHtml(targetArea, arrayIndex);

	if( otherLoadFunction ) otherLoadFunction();
}

function sortIndex(arrayIndex) {
	arrayIndex = arrayIndex.sort();
	for (var i = 0; i < arrayIndex.length; i++)
	{
		var loc = arrayIndex[i].indexOf("%$%");
		if (loc != -1)
		{
			arrayIndex[i] = arrayIndex[i].substr(loc + 3, arrayIndex[i].length - loc - 3);
		}
	}
}

function getInnerText(inputHtml)
{
	var outputHtml = "";
	var findClose = false;
	
	inputHtml = stripWhitespace(inputHtml);
	
	for (var i = 0; i < inputHtml.length; i++)
	{
		if (findClose == true)
		{
			if ( inputHtml.substr(i, 1) == ">" )
				findClose = false;
		}

		else if ( inputHtml.substr(i, 1) == "<" )
		{
			findClose = true;
		}

		else if ( isAlphanumeric(inputHtml.substr(i, 1)) )
			outputHtml = outputHtml + inputHtml.substr(i, 1);
	}
	
	return outputHtml;
}

function generateIndex(bl, arrayIndex, prefixText) {
	var origPrefix = prefixText;
	var liTags = getImmediateChildrenByTagName(bl, 'LI');
	for( var i = 0; i < liTags.length; i++ ) {
		prefixText = origPrefix;
		if( getImmediateChildrenByTagName(liTags[i], 'UL').length ) {
			// recurse deeper into tree
			if( prefixText && prefixText.length > 0 ) 
				prefixText += ', ';
			else
				prefixText = '';
			if( liTags[i].attributes['indexText'] ) {
				if( liTags[i].attributes['indexText'].value.length )
					prefixText += liTags[i].attributes['indexText'].value;
				else
					prefixText = prefixText.substr(0, prefixText.length-2); // trim comma
			} else {
				for( var j = 0; j < liTags[i].childNodes.length; j++ )
					if( liTags[i].childNodes[j].nodeName != 'UL' && liTags[i].childNodes[j].nodeValue )
						prefixText += liTags[i].childNodes[j].nodeValue.replace(/^\s*|\s*$/g,"");
			}
			generateIndex(getImmediateChildrenByTagName(liTags[i], 'UL')[0], arrayIndex, prefixText);
		} else { // leaf node
			// liTags[i].textContent + prefixText + "%$%"  was added for searching pourposes.
			// it appends the text name and context of the link onto the beginning making alphabetical serches
			// possible. The added text is removed in the sortIndex method. Christian.
			arrayIndex[arrayIndex.length] = getInnerText(liTags[i].innerHTML) + prefixText + "%$%" + liTags[i].innerHTML + (prefixText ? "<span class='navLink'> (" + prefixText + ")</span>" : "");
		}
	}
}

function indexToHtml(targetArea, arrayIndex) {
	for( var i = 0; i < arrayIndex.length; i++ ) {
		var indexLI = document.createElement('li');
		indexLI.innerHTML = arrayIndex[i];
		if( getImmediateChildrenByTagName(indexLI, 'A').length )
			getImmediateChildrenByTagName(indexLI, 'A')[0].className = 'navLink';
		targetArea.appendChild(indexLI);
	}
}

otherLoadFunction = window.onload;
window.onload = onLoad;
