function areSiblings(navItemA, navItemB) {
    if(navItemA.parentNavItem == navItemB.parentNavItem && navItemA != navItemB) {
		debug('siblings: ' + navItemA.li.id + ' :: ' + navItemB.li.id);
		return true;
	} else {
        return false;
    }
}

function cleanStack(stack) {
	debug('cleaning stack.');
	
	var item = stack.pop();
	while(item != -1) {
		if(item!=null) item.mouseout("clean stack");
		item = stack.pop();
	}
}

function isSame(navItem, stackItem) {
    if(navItem==null) return false;
    else if(stackItem==null || stackItem==-1) return false;
    else if(navItem != stackItem) return false;
    else if(navItem == stackItem) return true;
    else alert("Stack isSame exception.");
}

// find parent and fire its event of the same type
function onFireParent(myEvent) { // can't call ele fireEvent in Firefox 1.5
	var e = new xEvent(myEvent);
	debug("<b>firing parent for tag:</b> " + e.target.tagName);
	var li = findAncestor(e.target.parentNode,"LI");

    if(e.type=="mouseover") {
	    debug("direct call to parent mouseOver handler for: " + li.id);
	    onNavItemOver(null, li);
	} else if(e.type=="mouseout") { // workingHere:not seeing mouseOut in logger, but 2x mouseOver. Leads to prob when 2_b_1 --> 2_b in IE because they aren't touching.
	    debug("direct call to parent mouseOut handler.");
	    onNavItemOut(null, li);
	} else {
	    alert("Trying to fire parent, but encountered unsupported event type: " + e.type);
	}

	return; // removeMe

	/*
	var eventType = null;

	//debug(e.target.tagName + " firing " + e.type + " parent: " + parent.tagName + ":" + parent.id);

	if(e.addEventListener) {
	    eventType = e.type; // Mozilla
	} else if(e.attachEvent) {
	    eventType = "on" + e.type; // don't know when this is true
	} else {
	    eventType = "on" + e.type; // IE
	}

	parent.fireEvent(eventType);
    */
}

function findAncestor(ele, tagName, loopCount) {
	if(loopCount!=null) loopCount++; // removeMe: all this loop stuff - it was for debugging.
	else loopCount=0;
	
	if(ele==null) return false;

	//alert("loop count: " + loopCount);

	if(ele.tagName!=tagName) {
		debug("Not find LI for child: " + tagName);
		return findAncestor(ele.parentNode, tagName, loopCount);
	} else {
		debug("Found LI for child: " + tagName);
		return ele;
	}
}

function findTopLevelItem(eDescendant) {
	var nav = NAVMASTERS.getNavMaster(eDescendant);
	var item = nav.getItem(findAncestor(eDescendant,"LI"));
	return item.getTopLevelItem(item);
}
