
var BCzIndexLog  = new Array(); // zIndex
var BCstatusLog  = new Array(); // hidden / visible

// Function: baseChange()
// Alter the style/properties of an object

function baseChange(objectID, objectAction, setValue) {

  var thisObject    = document.getElementById(objectID);

  if( typeof(thisObject) == "object" ) {

    switch(objectAction) {
    case 'index':
    // Change the zIndex of the object to setValue
    // If no set value is specified, use previous
    // If no previous value is available, do nothing ...
      useIndex      = (setValue != null && typeof(setValue) == "number") ? setValue : BCzIndexLog[objectID];
      if( typeof(useIndex) == "number" ) {
        // Set the new zIndex value
        thisObject.style.zIndex  = useIndex;
        BCzIndexLog[objectID]    = useIndex; // log this value
        return true;
      } // ! got a value to set?
    return false;
    break;
    case 'status':
    // Change the visibility of an object to either show or hide
    // If no set value is specified, use previous
    // If no previous value is available, do nothing ...
      useStatus     = (setValue == "visible" || setValue == "hidden") ? setValue : BCstatusLog[objectID];
      if( typeof(useStatus) == "string" ) {
        // Set the new status value
        thisObject.style.visibility  = useStatus;
        BCstatusLog[objectID]        = useStatus;
        return true;
      } // ! got a value to set?
    return false;
    break;
    case 'shift':
    // Shift the position of an element based on setValue
    // Because top/left is most common, the values are: L T R B
    // If no value is passed, nothing is done ...
      var objectPositions   = new Array();
      setValue              = setValue + ''; // make sure setValue is a string

      objectPositions       = setValue.split(' ');
      var objectPosLeft     = objectPositions[0];
      var objectPosTop      = objectPositions[1];
      var objectPosRight    = objectPositions[2];
      var objectPosBottom   = objectPositions[3];

      // Shift the position
      if( objectPosLeft != undefined ) { thisObject.style.left = objectPosLeft + 'px'; }
      if( objectPosTop != undefined ) { thisObject.style.top = objectPosTop + 'px'; }
      if( objectPosRight != undefined ) { thisObject.style.right = objectPosRight + 'px'; }
      if( objectPosBottom != undefined ) { thisObject.style.bottom = objectPosBottom + 'px'; }

      return true;

    break;
    default:
      // do nothing ...
    } // ! switch (action)

  } // ! valid object?

} // ! baseChange()



// Function: swapObjects()
// Swaps the visibility of two objects. If the objects don't have values:
// oldObject is hidden and newObject is set visible via baseChange().

var oldObjectLast;
var newObjectLast;

function swapObjects(oldObject, newObject) {

  // Use the previous objects if no objects are passed
  oldObject    = (oldObject != null) ? oldObject : oldObjectLast;
  newObject    = (newObject != null) ? newObject : newObjectLast;

  // Read the object styles
  oldElement   = document.getElementById(oldObject);
  newElement   = document.getElementById(newObject);

  if( typeof(oldElement) == "object" && typeof(newElement) == "object" ) {

    oldStatus  = oldElement.style.visibility;
    newStatus  = newElement.style.visibility;

    if( oldStatus == "" || newStatus == "" ) {
    // Never been changed before, so swap them now
      baseChange(oldObject, 'status', 'hidden');
      baseChange(newObject, 'status', 'visible');
    } else {
    // Swap the visibility values of the two objects
      oldStatusTMP = oldStatus;
      oldElement.style.visibility = newStatus;
      newElement.style.visibility = oldStatusTMP;
    } // ! change?

  } // ! valid objects?

  oldObjectLast   = oldObject;
  newObjectLast   = newObject;

} // ! swapObjects



// Function: swapNav()
// Changes the status of a nav entry and shows/hides the dropdown

var navStatus;
var navHoverColor = '#FCDC06';

function swapNav(navName, navAction, navSub) {

  navAction     = (navAction != null) ? navAction : navStatus;

  var subNavName    = 'subnav' + navName;
  var subNavObject  = document.getElementById(subNavName);
  subNavObject      = (subNavObject != undefined) ? 'object' : null;

  switch(navAction) {
  case 'show':
  // Activate the nav using swapObjects() and baseChange()
  // Also ensure that on sub-menus the navHoverColor stays on
    // 1. Set the primary navigation to on
    var navMaster     = 'nav' + navName;
    var navSlave      = 'nav' + navName + 'roll';
    swapObjects(navMaster, navSlave);

    // 2. If there is a sub-nav, activate it
    if( subNavObject == "object" ) {
      baseChange(subNavName, 'status', 'visible');
      // 3. If this is a sub-nav entry, keep the primary nav lit
      if( navSub == 1 && navName != 'home' ) {
        document.getElementById('navlink' + navName).style.backgroundColor = navHoverColor;
        
      } // ! subNav event?
    } // ! valid subNav?
  navStatus = 'hide'; // this will be the action to do next
  break;
  default:
  // Default behaviour is hiding the nav
    // 1. Set the primary navigation to off
    swapObjects();

    // 2. If there is a sub-nav, de-activate it
    if( subNavObject == "object" ) {
      baseChange(subNavName, 'status', 'hidden');
      document.getElementById('navlink' + navName).style.backgroundColor = '';
    }
  navStatus = 'show'; // this will be the action to do next
  } // ! switch (action)

} // ! setNav

