/* 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(); } }