/** 
* HTML Navbar 
* for use with UL/LI-based markup
* @date: February 9, 2006
* @author: Brian Willy (a348146), Fidelity Investments
* 
* @depends: x_event.js, x_core.js(?), ofClassFunctions.js, ofNavOop.js
*/

// Note: to use x-browser, event names do not have the prefix "on"
// caller lives in ofNavOop.js

function attachEventHandlersItem(e) {
		
	if(e.tagName=="LI") {
	//xAddEventListener(e, 'click', onNavItemClick, false);
	xAddEventListener(e, 'mouseover', onNavItemOver, false);
	xAddEventListener(e, 'mouseout', onNavItemOut, false);
	} else {
		xAddEventListener(e, 'mouseover', onFireParent, false);
    	xAddEventListener(e, 'mouseout', onFireParent, false);
	}
}

// ------------------------------------------------------------------

function onNavItemClick(myEvent) {
	alert("click.");
}

/** Called either by browser event, or directly by supporting code.
    In the latter instance, it is because Firefox will not/cannot fire
    a native LI event from within the supporting code when the A has 
    the same event.
*/
function onNavItemOver(myEvent, altDirectCallTarget) {
    if(myEvent!=null && altDirectCallTarget!=null) alert("Bad call to onNavItemOut. Both params were defined");
    
    var eventTarget;
    
    if(altDirectCallTarget!=null) {
        eventTarget = altDirectCallTarget;
        debug("over LI via child A: " + eventTarget.id);
    } else {
        // standard event
        var ev = new xEvent(myEvent);
	    if(ev.target.tagName!="LI") {
            //debug("over event is not an LI");
            return false; // nested tags such as A and P fire this event // todo: as of 4/25/06, only A's are registered to fire parent Item
        }

	    debug('native over LI: ' + ev.target.id);
        

        eventTarget = ev.target;
    }
    
    if(IS_DEBUG) debugSetColor('green');

	try {
        var navItem = NAVMASTERS.getNavMaster(eventTarget).getItem(eventTarget);
		navItem.setMousingOver();		
		navItem.getMasterNav().setMousingOver();
		// todo: create onNavItemOverExtension method for developers to extend behavior
	} catch(e) {
        alert("onNavItemOver error: " + e.message);
    }
}

function onNavItemOut(myEvent, altDirectCallTarget) {
    if(myEvent!=null && altDirectCallTarget!=null) alert("Bad call to onNavItemOut. Both params were defined");

    var eventTarget;
    
    if(altDirectCallTarget!=null) {
        eventTarget = altDirectCallTarget;
        debug("native out LI via child A: " + eventTarget.id);
    } else {
    	var ev = new xEvent(myEvent);
	    if(ev.target.tagName!="LI") return false; // nested tags such as A and P fire this event

	    debug('native out LI: ' + ev.target.id);
	    
	    eventTarget = ev.target;
    }
    
    if(IS_DEBUG) debugSetColor('red');

    try {
        var navItem = NAVMASTERS.getNavMaster(eventTarget).getItem(eventTarget);
        navItem.setMousingOut();
        navItem.getMasterNav().setMousingOut();
	} catch(e) {
        alert("onNavItemOut error: " + e.message);
    }
}