﻿function findElementRecursive(el, sClassName) {

	for (var i = 0; i < el.childNodes.length; i++) {
		var oNode = el.childNodes[i];
		if (oNode.nodeType === 1 && oNode.className && oNode.className === sClassName) {
			return oNode;
		}
		if (oNode.firstChild) {
			var oTarget = findElementRecursive(oNode, sClassName);
			if (oTarget) {
				return oTarget;
			}
		}
	}

}

function addRightArrowMenuLinks(sContainerElementId) {

	var oStartingElement = document.getElementById(sContainerElementId);
	if (!oStartingElement) return;
	
	var oMenuContainer = findElementRecursive(oStartingElement, "menuContainer");
	if (!oMenuContainer) return;
	
	var oTopLevelUl = findElementRecursive(oMenuContainer, "rtUL");
	if (!oTopLevelUl) return;
	
	for (var i = 0; i < oTopLevelUl.childNodes.length; i++) {
		var oNode = oTopLevelUl.childNodes[i];
		
		if (oNode.nodeType === 1 && oNode.tagName && oNode.tagName.toUpperCase() === "LI") {
		
			var bHasNestedUl = false;
			var oNestedDiv;
			for (var c = 0; c < oNode.childNodes.length; c++) {
			
				var oChildNode = oNode.childNodes[c];
			
				if (oChildNode.nodeType === 1 && oChildNode.tagName) {
				
					if (oChildNode.tagName.toUpperCase() === "DIV") {
						oNestedDiv = oChildNode;  // save a reference to the DIV -- may need later.
					} else if (oChildNode.tagName.toUpperCase() === "UL") {
						bHasNestedUl = true;
						break;
					}
				}
			}
			
			if (!bHasNestedUl && oNestedDiv) {
			
				// When there is no nested UL, within the DIV, there will be a SPAN and a A.  We want to insert a new SPAN between the existing SPAN and A.
				for (var c = 0; c < oNestedDiv.childNodes.length; c++) {
				
					var oChildNode = oNestedDiv.childNodes[c];
					if (oChildNode.nodeType === 1 && oChildNode.tagName && oChildNode.tagName.toUpperCase() === "A") {
					
						var oNewSpan = document.createElement('span');
						oNewSpan.className = 'rtPlus';
						oNewSpan.style.cursor='default';
						
						// The Treeview control will toggle the right-facing arrow to a down-facing arrow when our right-facing arrow is clicked.  This doesn't
						// hurt anything, but it's preferred for nothing to happen.  Capture and cancel that event.
						oNewSpan.onclick = function(event) {
						
							event = event || window.event;
						
							if (event.stopPropagation) {
								event.stopPropagation();
								event.preventDefault();
							}
							else if (event.cancelBubble) {
								event.cancelBubble = true;
								event.returnValue = false;
							}
						}
						oChildNode.parentNode.insertBefore(oNewSpan, oChildNode);
						
						break;
					}
				}
			}
		}
	}

}

