//************ Globals
var g_clientCursor = { x: 0, y: 0 }; // Used with body.mousemove to track cursor movement.
                                     // This is dangerous; body.mousemove should not have any
                                     // more code added to it, as the browser must process it
                                     // every time the mouse is moved.

var g_menuController;                // Will define after classes are created.



//************ Menu Controller Singleton (g_menuController)
function SheaMenuController()
{
  var m_menus = [];
  var m_menuItemClasses = { standard: "menu_item", highlighted: "menu_item_selected" };
  var m_hideInterval = 200;
  var m_hideTimeout  = null;

  // Create a menu:
  this.CreateMenu = function(m_menuObject)
  {
    m_menuObject.mid = m_menus.length;
    m_menus.push(new SheaMenu(m_menuObject));
  }

  // Hide or show menu:
  this.DisplayMenu = function(m_menuIndex, m_action)
  {
    switch (m_action)
    {
      case 'show':
        this.HideAllMenus();
        m_menus[m_menuIndex].ShowMenu();
        this.StopHide();
        break;
      
      default:
        m_menus[m_menuIndex].HideMenu();    
    }
  }

  // Hide all menus:
  this.HideAllMenus = function()
  {
    for (var i = 0; i < m_menus.length; i++)
    {
      this.DisplayMenu(i, 'hide');
    }
  }

  // Highlight a menu item:
  this.Highlight = function(m_itemId, m_onOrOff, m_menuIndex)
  {
    var m_item = document.getElementById(m_itemId);
    
    if (m_onOrOff)
    {
      m_item.className = m_menuItemClasses.highlighted;
      this.StopHide();
    }
    else
    {
      m_item.className = m_menuItemClasses.standard;
      this.ResetHide(m_menuIndex);
    }
    m_item = null;
  }

  this.ResetHide = function (m_menuIndex)
  {
    this.StopHide();
    m_hideTimeout = setTimeout("g_menuController.DisplayMenu(" + m_menuIndex + ", 'hide')", m_hideInterval);
  }

  this.StopHide = function()
  {
    if (m_hideTimeout == null) { return; }
    clearTimeout(m_hideTimeout);
    m_hideTimeout = null;
  }

}

//************ Menu Class
function SheaMenu(m_menuObject)
{
  var thisMenu = m_menuObject;
  
  // Add the rollover effect.
  var m_rollDom = document.getElementById(m_menuObject.domRollover);
  m_rollDom.onmouseover = function() { g_menuController.DisplayMenu(thisMenu.mid, 'show'); };
  m_rollDom.onmouseout  = function() { g_menuController.ResetHide(thisMenu.mid); };
  m_rollDom = null;

  // Create output HTML for this object.
  var m_output = "<div class='drop_menu_content'>";
  m_output    += "<div class='menu_padding' onMouseOver='g_menuController.StopHide();' onMouseOut='g_menuController.ResetHide(" + thisMenu.mid + ");'>";

  for (var i = 0; i < thisMenu.items.length; i++)
  {
    var m_item   = thisMenu.items[i];
    var m_itemId = thisMenu.domContainer + "." + m_item.displayText.replace(" ", "");

    m_output  += "<a href='" + m_item.linksTo + "'><div id='sheaMenu." + m_itemId + "' class='menu_item' onMouseOver=\"g_menuController.Highlight(this.id, true, " + thisMenu.mid + ");\" onMouseOut=\"g_menuController.Highlight(this.id, false, " + thisMenu.mid + ");\">";
    m_output  += "<div class='menu_item_text'>" + m_item.displayText + "</div></div></a>";
  }

  m_output    += "</div></div>";

  // Show this menu:
  this.ShowMenu = function()
  {
    var domContainer = document.getElementById(thisMenu.domContainer);
    domContainer.innerHTML = m_output;
    domContainer = null;
  }

  // Hide this menu:
  this.HideMenu = function()
  {
    var domContainer = document.getElementById(thisMenu.domContainer);
    domContainer.innerHTML = "";
    domContainer = null;
  }
}


//************ Create Menus

// Create the singleton g_menuController, 
// which is used to add menus.
g_menuController = new SheaMenuController();

// Add the About Us menu.
/*
g_menuController.CreateMenu
({
  domContainer: "aboutMenu",
  domRollover:  "aboutNavLink",
  items:
  [
    { displayText: "Our Story", linksTo: "about-shea-properties.cfm" },
    { displayText: "Link 2", linksTo: "#" },
    { displayText: "Link 3", linksTo: "#" }
  ]
});
*/

// Add the News menu.
/*
g_menuController.CreateMenu
({
  domContainer: "newsMenu",
  domRollover:  "newsNavLink",
  items:
  [
    { displayText: "Press", linksTo: "recent-press.cfm" },
	{ displayText: "Contacts", linksTo: "media-contacts.cfm" }
    //{ displayText: "Resources", linksTo: "resources.cfm" }
  ]
});
*/

// Add the Portfolio menu.
g_menuController.CreateMenu
({
  domContainer: "portfolioMenu",
  domRollover:  "portfolioNavLink",
  items:
  [
    { displayText: "Office &amp; Industrial",      linksTo: "search.cfm?type=office" },
    { displayText: "Retail",      linksTo: "search.cfm?type=retail" },
    { displayText: "Apartments",  linksTo: "about-shea-apartments.cfm" },
    { displayText: "Mixed-Use",   linksTo: "property-other.cfm?type=mixed-use" }
    //{ displayText: "Development", linksTo: "property-other.cfm?type=development" }
  ]
});

// Add the Contact Us menu.
/*
g_menuController.CreateMenu
({
  domContainer: "contactMenu",
  domRollover:  "contactNavLink",
  items:
  [
    { displayText: "Link 8", linksTo: "#" },
    { displayText: "Link 9", linksTo: "#" }
  ]
});
*/