/*
Constructor for a general DHTML nav menu element.
Must be called in the page flow after the elements fow whom it takes dom ids as paramaters.
Called like so:
var nav1 = new NavElement('nav1', 'flyout-nav1');
Takes the following as arguments:
*/
function NavElement( nav_item_link_id, flyout_dom_id, nav_item_id, shim_id, nav_hover_classname, nav_default_classname ) {
//function NavElement( nav_item_link_id, flyout_dom_id, nav_item_id, nav_hover_classname, nav_default_classname ) {
var self = this; // Grab a reference to self for use in methods.
// Store contructor paramaters as attributes on new object.
this.nav_item_link_id = nav_item_link_id; // The nav item anchor element.
this.flyout_dom_id = flyout_dom_id; // The flyout nav container element.
this.nav_item_id = nav_item_id; // The nav item li element.
this.shim_id = shim_id; // The dom id of the IE 6 iframe shim.
this.nav_hover_classname = nav_hover_classname; // The nav hover CSS class name.
this.nav_default_classname = nav_default_classname; // the nav default CSS class name.
// Get the dom nodes for the nav item and flyout.
this.nav_item_link_node = document.getElementById( nav_item_link_id );
this.flyout_dom_node = document.getElementById( flyout_dom_id );
this.nav_item_node = document.getElementById( nav_item_id );
this.shim_node = document.getElementById( shim_id );
// Booleans to keep track of hover state for the primary nav item and related flyout.
this.over_nav_item = false;
this.over_flyout = false;
// Checks whether the user is over the primary nav or flyout menu, and reacts accordingly.
this.showHideFlyout = function () {
// User is not hovering over primary nav or flyout so hide the flyout.
if ( ( self.over_nav_item == false ) && ( self.over_flyout == false ) && ( self.flyout_dom_node.style.display != 'none' ) ) {
self.nav_item_link_node.className = self.nav_default_classname;
self.flyout_dom_node.style.display = 'none';
if ( self.shim_node ) {
self.shim_node.style.display = 'none';
}
}
// User is hovering over either the primary nav or the flyout, so make sure the flyout is visible.
if ( ( self.flyout_dom_node.style.display != 'block' ) && ( ( self.over_nav_item == true ) || ( self.over_flyout == true ) ) ) {
self.nav_item_link_node.className = self.nav_hover_classname;
self.flyout_dom_node.style.display = 'block';
if ( self.shim_node ) {
self.shim_node.style.display = 'block';
}
}
}
// This gets called on mouse over and mouse out events from the primary nav element.
this.manageMainState = function ( state ) {
self.over_nav_item = state;
self.showHideFlyout();
}
// This gets called on mouse over and mouse out events from the flyout menu container.
this.manageFlyoutState = function ( state ) {
self.over_flyout = state;
self.showHideFlyout();
}
}