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