/*
###############################################################################
#
# File:     content/2009a/js/content.js
#
# Contents: JavaScript used by front-end pages (2009 design).
#
# Used by:
#   - content/htm/*.htm
#
# Requires:
#   - shared/js/shared.js
#
# Modifications:
#   - 2009-05-15  txe  Started initial creation.
#   - 2009-05-29  txe  Finished initial creation.
#   - 2009-06-19  txe  Tweaked nudge delay.
#   - 2009-09-23  txe  Started adding dynamic tracking.
#   - 2009-09-25  txe  Finished adding dynamic tracking.
#
###############################################################################
*/

//always execute //

setPopupXY(100, 100, 1, 0); // upper right //


////////////////////////////////////////////////////////////////////////////////
// ELEMENTS
////////////////////////////////////////////////////////////////////////////////

function getElementsWithClass(className, parent)
{
  parent = (parent ? parent : document.body);
  var elements = new Array();
  var regexp   = new RegExp(className);
  var children = parent.getElementsByTagName("*");
  for (var i = 0; i < children.length; i++)
  {
    var child = children[i];
    if (regexp.test(child.className))
    {
      elements.push(child);
    }
  }
  return elements;
}


////////////////////////////////////////////////////////////////////////////////
// SHOW/HIDE
////////////////////////////////////////////////////////////////////////////////

// 2009-09-25 txe start //
//function showElement(element)     { element.className = element.className.replace("cpHidden", "") + " cpVisible"; return false; }
//function hideElement(element)     { element.className = element.className.replace("cpVisible","") + " cpHidden";  return false; }
function showElement(element)     { element.className = element.className.replace("cpHidden", "").replace("cpVisible","") + " cpVisible"; return false; }
function hideElement(element)     { element.className = element.className.replace("cpVisible","").replace("cpHidden","")  + " cpHidden";  return false; }
// 2009-09-25 txe end //

function showElementID(elementID) { return showElement(document.getElementById(elementID)); }
function hideElementID(elementID) { return hideElement(document.getElementById(elementID)); }


////////////////////////////////////////////////////////////////////////////////
// SWAP
////////////////////////////////////////////////////////////////////////////////

function hideSwapOutElements()             { document.body.className += " cpHideSwapOut"; }
function swapInElementID(elementID,suffix) { return swapInElementIDSuffix(elementID, (suffix ? suffix : "")); }

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

function swapInElementIDSuffix(inElementID, suffix)
{
  var inElement    = document.getElementById(inElementID);
  var swapElements = getSwapElementsWithSuffix(suffix);
  for (var i = 0; i < swapElements.length; i++)
  {
    var element   = swapElements[i];
    var elementID = element.id;
    var isIn      = (elementID == inElementID);
    if (isIn)
    {
      showElement(element)
      element.className       = element.className.replace("cpSwapOut" + suffix, "cpSwapIn"  + suffix);
      document.body.className = document.body.className + " " + elementID + "SwapIn" + suffix;
//      showLoadingIconInElementForSeconds(element, 0.25);

// 2009-09-25 txe start //
			if (isElementTrackingEnabled())
			{
				element.innerHTML += getTrackingHtmlForElementID(inElementID);
			}
// 2009-09-25 txe end //

    }
    else
    {
      element.className       = element.className.replace("cpSwapIn"  + suffix, "cpSwapOut" + suffix);
      document.body.className = document.body.className.replace(elementID + "SwapIn" + suffix, "");
    }
  }
  return false;
}

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

function getSwapElementsWithSuffix(suffix)
{
  document._swapElements = (document._swapElements ? document._swapElements : new Array());
  if (!document._swapElements[suffix])
  {
    var inElements   = getElementsWithClass("cpSwapIn"  + suffix);
    var outElements  = getElementsWithClass("cpSwapOut" + suffix);
    var swapElements = outElements;
    for (var i = 0; i < inElements.length; i++)
    {
      swapElements.push(inElements[i]);
    }
    document._swapElements[suffix] = swapElements;
  }
  return document._swapElements[suffix];
}


////////////////////////////////////////////////////////////////////////////////
// TRACKING
////////////////////////////////////////////////////////////////////////////////

// 2009-09-23 txe start //
function isElementTrackingEnabled() { return false; }

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

function getTrackingHtmlForElementID(elementID)
{
	var html     = "";
  var oldImage = document.getElementById("cpTracking");
	if (oldImage)
	{
		var oldUrl   = oldImage.src;
		var oldIndex = oldUrl.indexOf("?");
		var oldQuery = oldUrl.substring(oldIndex);
		var oldParts = oldQuery.split("&");
		var newQuery = oldParts[0] + "--" + elementID;
		for (var i = 1; i < oldParts.length; i++)
		{
			newQuery += "&amp;" + oldParts[i];
		}
	  var imageName = "trk-" + Math.floor(Math.random() * 10000000) + ".gif";
		var newUrl    = "/content/trk-v1/" + imageName + newQuery;
		html = '<img class="cpTracking" src="' + newUrl + '" alt="" />';	                    
	}
	return html;
}

// 2009-09-25 txe end //


////////////////////////////////////////////////////////////////////////////////
// NUDGE
////////////////////////////////////////////////////////////////////////////////

function getNudgeDelaySeconds() { return 80; }
function showNudge()            { return showElementID("cpNudge"); }
function hideNudge()            { return hideElementID("cpNudge"); }
function startNudgeTimer()
{
  var numSeconds = getNudgeDelaySeconds();
  if (numSeconds >= 0)
  {
    setTimeout("showNudge()", numSeconds * 1000);
  }
}


////////////////////////////////////////////////////////////////////////////////
// LOADING ICON
////////////////////////////////////////////////////////////////////////////////

function showLoadingIconInElementID(elementID) { showLoadingIconInElement(document.getElementById(elementID)); }
function hideLoadingIconInElementID(elementID) { hideLoadingIconInElement(document.getElementById(elementID)); }

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

function showLoadingIconInElement(element)
{
  element.realHtml  = element.innerHTML;
  element.innerHTML = "<div class=\"cpLoading\"><div>" + element.realHtml + "</div></div>";
}

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

function hideLoadingIconInElement(element)
{
//alert("hideLoadingIconInElement() called");
  if (element.realHtml)
  {
    element.innerHTML = element.realHtml;
  }
  else
  {
//alert("changing className");
    element.className = element.className.replace("cpLoading", "");
  }
}

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

function showLoadingIconInElementForSeconds(element, numSeconds)
{
  showLoadingIconInElement(element);
  var elementID = element.id;
  setTimeout("hideLoadingIconInElementID('" + elementID + "')", numSeconds * 1000);
}


////////////////////////////////////////////////////////////////////////////////
// POPUPS
////////////////////////////////////////////////////////////////////////////////

function useSmallPopup(linkElement,  name, w, h, settings) { return useSmallWindow(getPopupVersionOfUrl(linkElement),  name, w, h, settings); }
function useMediumPopup(linkElement, name, w, h, settings) { return useMediumWindow(getPopupVersionOfUrl(linkElement), name, w, h, settings); }
function useLargePopup(linkElement,  name, w, h, settings) { return useLargeWindow(getPopupVersionOfUrl(linkElement),  name, w, h, settings); }
function useHugePopup(linkElement,   name, w, h, settings) { return useHugeWindow(getPopupVersionOfUrl(linkElement),   name, w, h, settings); }

//function useFullPopup(linkElement,   name, w, h, settings) { return useFullWindow(getPopupVersionOfUrl(linkElement),   name, w, h, settings); }
function useFullPopup(linkElement,   name, w, h, settings) { return useFullWindow(linkElement.href, name, w, h, settings); }

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

// override //
function useFullWindow(url, name, w, h, settings)
{
  w = (w ? w : 1024);
  h = (h ? h : 800);
  settings = (settings ? setting : "directories=1,location=1,menubar=1,resizable=1,scrollbars=1,status=1,toolbar=1");
  return useWindow(url, name, w, h, settings);
}

/*
function useWindow(url, name, w, h, settings)
{
  name         = (name     ? name     : "_blank");
  settings     = (settings ? settings : "scrollbars=yes,resizable=yes");
//  var x        = (screen.width  ? ((screen.width  - w) / 2) : 0);
//  var y        = (screen.height ? ((screen.height - h) / 2) : 0);
  var x        = getPopupXForWidth(w);
  var y        = getPopupYForHeight(h);
  var features = "height=" + h + ",width=" + w + ",left=" + x + ",top=" + y + "," + settings;


url = "http://google.com/";
name = "test";
features ="";
alert("url = '" + url + "', name = '" + name + "', features = '" + features + "'");

  var win      = window.open(url, name, features);
  win.focus();
  return false;
}
*/

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

function getPopupVersionOfUrl(wrappedElementOrUrl)
{
  var wrappedUrl    = (wrappedElementOrUrl.href ? wrappedElementOrUrl.href : wrappedElementOrUrl);
  var bookmarkIndex = wrappedUrl.indexOf("#");
  var before        = (bookmarkIndex >= 0 ? wrappedUrl.substring(0, bookmarkIndex) : wrappedUrl);
  var after         = (bookmarkIndex >= 0 ? wrappedUrl.substring(bookmarkIndex)    : "");
  return before + (wrappedUrl.indexOf("?") >= 0 ? "&" : "?") + "popup=" + getPopupDate() + after;
}

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

function forcePopupWithSize(size)
{
  var temp  = new Object();
  temp.href = document.location.href.replace(/forcePopup\=[a-zA-Z0-9]+/, "");
  if (temp.href != document.location.href)
  {
    size = (size == "1" ? "Large" : size);
    eval("use" + size.charAt(0).toUpperCase() + size.substr(1,size.length-1) + "Popup(temp);");
  }
}




////////////////////////////////////////////////////////////////////////////////
// URL
////////////////////////////////////////////////////////////////////////////////

function request(name,defaultValue)
{
  var value = "";
  var queryParts = location.search.replace("?","").split("&");
  for (var i = 0; i < queryParts.length; i++)
  {
    var subparts = queryParts[i].split("=");
    value        = (subparts[0] == name ? subparts[1] : value);
  }
  return (value ? value : defaultValue);
}

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

function getHost()          { return request("_host", location.hostname); }
function getHostParts()     { return getHost().split("."); }
function getHostPart(index) { return getHostParts()[index-1]; }
function getNumHostParts()  { return getHostParts().length; }
function getHostPrefix()    { return (isHostPrefixed() ? getHostPart(1) + "." : ""); }
function isHostPrefixed()   { return (getNumHostParts() >= 4); }


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

function setupHoverEventsForNavID(elementID)     { return setupHoverEventsForNav(document.getElementById(elementID)); }
function setupHoverEventsForElementID(elementID) { return setupHoverEventsForElement(document.getElementById(elementID)); }
function hoverElement(element)                   { element.className = element.className.replace(" hover","") + " hover"; }
function unhoverElement(element)                 { element.className = element.className.replace(" hover",""); }

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

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

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

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

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

function setupHoverEventsForElement(element)
{
  element.onmouseover = function() { hoverElement(this); }
  element.onmouseout  = function() { unhoverElement(this); }
}

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

function setupHoverEventsForElements(elements)
{
  for (var i = 0; elements && i < elements.length; i++)
  {
    setupHoverEventsForElement(elements[i]);
  }
}

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

function setupHoverEventsForNavsWithClass(className)
{
  var elements = getElementsWithClass(className);
  for (var i = 0; elements && i < elements.length; i++)
  {
     setupHoverEventsForNav(elements[i]);
  }
}


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

function handleLoad() { } // need to override //

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

function setLoadEvent(f)
{
  if (window.attachEvent)
  {
    window.attachEvent("onload", f);
  }
  else if (window.addEventListener)
  {
    window.addEventListener("load", f, false);
  }
  else
  {
    document.addEventListener("load", f, false);
  }
}

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

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


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