/*
###############################################################################
#
# File:     brands/monsterres/js/monster-shared.js
#
# Contents: JavaScript used by Monster pages.
#
# Used by:
#   - brands/monsterca/htm/wrapper.htm
#   - brands/monsterres/htm/wrapper.htm
#   - content/htm/resume-writing-sample-resumes.htm
#
# Modifications:
#   - 2005-05-11  txe  Initial creation.
#   - 2007-09-27  txe  Started adding nav logic for IE.
#   - 2007-09-28  txe  Finished adding nav logic for IE.
#   - 2008-04-28  txe  Added robustness to setupHoverEventsForNav().
#   - 2008-05-07  txe  Renamed (to be used by monsterca), added robustness.
#
###############################################################################
*/

// ALWAYS RUN //

addLoadEvent(setupHoverEvents);


///////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
///////////////////////////////////////////////////////////////////////////////

function setupHoverEvents() { return setupHoverEventsForNavWithID("nav1"); }


///////////////////////////////////////////////////////////////////////////////
// HOVER EVENTS (FOR IE)
///////////////////////////////////////////////////////////////////////////////

function isRobustHoverEnabled()                  { return true; }
function setupHoverEventsForNavWithID(elementID) { return setupHoverEventsForNav(document.getElementById(elementID)); }

///////////////////////////////////////////////////////////////////////////////

function setupHoverEventsForNav(navElement)
{
  var linkElements = (navElement ? navElement.childNodes : null);
	for (var i = 0; linkElements && i < linkElements.length; i++)
	{
		linkElements[i].onmouseover = function() { hoverLink(this); }
		linkElements[i].onmouseout  = function() { unhoverLink(this); }
	}
}

///////////////////////////////////////////////////////////////////////////////

function hoverLink(linkElement)
{
  if (isRobustHoverEnabled())
  {
     unhoverLinksInNav(linkElement.parentNode);   // can be slow //
  }
  linkElement.className += " hover";
}

///////////////////////////////////////////////////////////////////////////////

function unhoverLink(linkElement)
{
  linkElement.className = linkElement.className.replace(new RegExp(" hover\\b"), "");
}

///////////////////////////////////////////////////////////////////////////////

function unhoverLinksInNav(navElement, skipElement)
{
  var linkElements = (navElement ? navElement.childNodes : null);
	for (var i = 0; linkElements && i < linkElements.length; i++)
  {
    unhoverLink(linkElements[i]);
  }
}


///////////////////////////////////////////////////////////////////////////////
// ONLOAD
///////////////////////////////////////////////////////////////////////////////

function setLoadEvent(f) { if (window.attachEvent) window.attachEvent("onload", f); }

///////////////////////////////////////////////////////////////////////////////

function addLoadEvent(f)
{
  if (typeof window.onload != 'function')
  {
    setLoadEvent(f);
  }
  else
  {
    var oldonload = window.onload;
    setLoadEvent( function() { if (oldonload) oldonload(); f(); }   );
  }
}


///////////////////////////////////////////////////////////////////////////////
// MOVE TO SHARED
///////////////////////////////////////////////////////////////////////////////

function getQueryFromUrl(url)               { return (url.indexOf("?") > -1 ? url.replace(/^.*\?/, "") : ""); }
function getValueFromUrlWithName(url, name) { return getNameValueMapFromUrl(url)[name]; }

///////////////////////////////////////////////////////////////////////////////

function getNameValueMapFromUrl(url)
{
  var map   = new Array();
  var query = getQueryFromUrl(url);
  if (query)
  {
    var parts = query.split("&");
    for (var i = 0; i < parts.length; i++)
    {
      var pair  = parts[i].split("=");
      var name  = pair[0];
      var value = pair[1];
      map[name] = value;
    }
  }
  return map;
}

///////////////////////////////////////////////////////////////////////////////

function getUrlQueryForNameValueMap(map)
{
  var query = "";
  for (var name in map)
  {
    query += (query ? "&" : "") + name + "=" + map[name];
  }
  return query;
}

///////////////////////////////////////////////////////////////////////////////

function preserveUrlParamWithName(name)
{
  var currentValue = getValueFromUrlWithName(location.href, name);
  if (currentValue)
  {
    for (i = 0; i < document.links.length; i++)
    {
      var oldLinkUrl = document.links[i].href;
      if (oldLinkUrl != null)
      {
        var beforeQuery = oldLinkUrl.replace(/\?.*/,"");
        var linkMap     = getNameValueMapFromUrl(oldLinkUrl);
        linkMap[name]   = currentValue;
        var newQuery    = getUrlQueryForNameValueMap(linkMap);
        var newLinkUrl  = beforeQuery + "?" + newQuery;
        document.links[i].href = newLinkUrl;
      }
    }
  }
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////