// lib_menunav.js - Provides the functions for rollover changes to the navigation menu

// Requires: lib_core.js
if (!LIB_CORE_LOADED) {
  // Here is where you _could_ do something to alert the user to a problem, but we don't want to do that.
}

var node_plus;           // Holds the SRC for the PLUS icon.
var node_minus;          // Holds the SRC for the MINUS icon.
var menuState = "";      // Clean the slate, but go ahead and start tracking any changes.
var preloadFlag = false; // Have images been pre-loaded yet?
var delayStorage = true; // Don't overwrite the cookie until we've had time to read it.

function preloadImages(imgPath) {
  if (imgPath == "") { return false; } // Leave if no path specified
  if (document.images) {
    load_img1 = new Image();
      load_img1.src = imgPath + "/leftNavMenuBlue_LeftArrow.gif";
    load_img2 = new Image();
      load_img2.src = imgPath + "/leftNavMenuWhite_LeftArrow.gif";
    load_img3 = new Image();
      load_img3.src = imgPath + "/leftNav_cel_BG.gif";
    load_img4 = new Image();
      load_img4.src = "/images/node_plus.gif";
    node_plus = '<img src="/images/node_plus.gif" border="0" alt=""/>';
    load_img5 = new Image();
      load_img5.src = "/images/node_minus.gif";
    node_minus = '<img src="/images/node_minus.gif" border="0" alt=""/>';
    preloadFlag = true;
  }
}

function changeImages() {
	if (document.images && (preloadFlag == true)) {
		for (var i=0; i<changeImages.arguments.length; i+=2) {
			document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
		}
	}
}

function leftNavRollOver(objname, obj) {
	if (document.getElementById) {
  	var objLink = document.getElementById(objname + "_Link");
  	var objBlurb = document.getElementById(objname + "_Blurb");
  	if (objname.indexOf("level2_") > -1) {
  		obj.className="leftNavSubMenuWhite_level2_selected";
  	} else {
  		if (objname.indexOf("level3_") > -1) {
  			obj.className="leftNavSubMenuWhite_level3_selected";
  		} else {
  			obj.className="leftNavMenuWhite";
  			objLink.className="leftNavBlueLink";
  			if(objBlurb != null) {
  				objBlurb.className="leftNavBlurb_selected";
  			}
  		}
  	}
	}
}

function leftNavRollOut(objname, obj) {
	if (document.getElementById) {
  	var objLink = document.getElementById(objname + "_Link");
  	var objBlurb = document.getElementById(objname + "_Blurb");
  	if (objname.indexOf("level2_") > -1) {
  		obj.className="leftNavSubMenuWhite_level2";
  	} else {
  		if (objname.indexOf("level3_") > -1) {
  			obj.className="leftNavSubMenuWhite_level3";
  		} else {
  			obj.className="leftNavMenuBlue";
  			objLink.className="leftNavWhiteLink";
  			if(objBlurb != null) {
  				objBlurb.className="leftNavBlurb";
  			}
  		}
  	}
	}
}

var nodeAction;
function navtoPage(objname) {
  if (document.getElementById) {
    var objLink = document.getElementById(objname);
    if (nodeAction) {
      nodeAction = false;
      return true;
    }
    if (trapLinks && pendingLink == "") {
      // Stop the user for now, until after handleClicks has been run.
      pendingLink = objname;
      return true;
    } else {
      // BZ 2179: Check link target and use it when present
      if (objLink.target != "") {
        window.open(objLink,objLink.target);
      } else {
        location.href = objLink;
      }
    }
  }
}

function toggleExpand(hashcode,forceState,storeState) {
  var groupdiv = document.getElementById("group_" + hashcode);
  var nodediv = document.getElementById("node_" + hashcode);
  if (forceState == "") {
    // Only set this if we did not force a state,
    // meaning the user simply toggled the display.
    nodeAction = true;
  }
  if (groupdiv && nodediv) {
    var isHidden = false;
    if (groupdiv.style.display == "none" ||
        groupdiv.style.display == "") {
      isHidden = true;
    }
    if (forceState == "show" || (forceState != "show" && isHidden)) {
      // Show group, change to minus
      groupdiv.style.display = "block";
      nodediv.innerHTML = node_minus;
      if (storeState) { setState(hashcode,"show"); }
    } else if (forceState == "hide" || !isHidden) {
      // Hide group, change to plus
      groupdiv.style.display = "none";
      nodediv.innerHTML = node_plus;
      if (storeState) { setState(hashcode,"hide"); }
    }
  }
}

function setState(hashcode,whatState) {
  var path = "/";
  var wasFound = false;
  var menuArray = new Array();
  menuArray = menuState.split(",");
  menuArray = menuArray.unique();

  // Expire in 1 day.
  expdate = new Date();
  expdate.setTime(expdate.getTime()+(1000*60*60*24));
  expdate=expdate.toGMTString();

  // NOTE: We only care to keep track of collapsible items that are still open.
  menuState = ""; // Clear out the current list of expanded groups.
  if (whatState == "show") {
    // Item was selected to be shown, so we'll want to make sure we keep track of it.
    for (i=0; i < menuArray.length; i++) {
      if (menuArray[i] == hashcode) {
        // Current item is already in the last-save list.
        wasFound = true;
      }
      menuState = trimCommas(menuState + "," + menuArray[i]); // Build as comma-delimited list
    }
    if (!wasFound) {
      // Item was NOT found, so add it to the list.
      menuState = menuState + "," + hashcode;
    }
  }
  if (whatState == "hide") {
    // Item was selected to be hidden, so we'll want to 'fuggedaboudit'.
    for (i=0; i < menuArray.length; i++) {
      if (menuArray[i] != hashcode) {
        // Only keep the old items that are NOT this one.
        menuState = trimCommas(menuState + "," + menuArray[i]); // Build as comma-delimited list
      }
    }
  }
  if (whatState == "curr") {
    // Special routine that just saves what we currently have.
    for (i=0; i < menuArray.length; i++) {
      menuState = trimCommas(menuState + "," + menuArray[i]); // Build as comma-delimited list
    }
  }
  menuState = trimCommas(menuState);
  if (SessionID != "" && SessionID != undefined && !delayStorage) {
    document.cookie="menu_" + SessionID + "=" + menuState + "; expires=" + expdate + "; path=" + path + ";";
  }
}

function cleanMenuCookies(skipName) {
  var nameEQ = skipName + "=";
  var cookieArray = document.cookie.split(";");
  for(var i=0;i < cookieArray.length;i++) {
    var thisCookie = trim(cookieArray[i]);
    // Remove any old cookies beginning with "menu_", since we only care about this session
    // If you have multiple sessions open with the same browser, this may cause minor UI problems
    if (regexCheck(thisCookie,/^(menu_.*)$/)) {
      if (!thisCookie.indexOf(nameEQ) == 0) {
        deleteCookie(thisCookie);
      }
    }
  }
  return true;
}

function restoreState() {
  var execList = "";
  var tempState = new Array();
  var cookieVal = readCookie("menu_" + SessionID);

  cleanMenuCookies("menu_" + SessionID);

  // Combine the stored values with anything else that may have already been triggered on the menu.
  if (cookieVal != "" && cookieVal != null) {
    menuState = menuState + "," + cookieVal;
    menuState = trimCommas(menuState);
  }

  // Only proceed if we have a previously saved state.
  if (menuState != "") {
    tempState = menuState.split(",");
    tempState = tempState.unique();
    for (i=0; i < tempState.length; i++) {
      // This should re-open any previously collapsed groups.
      execList = execList + "toggleExpand('" + tempState[i] + "','show',false);";
    }
    eval(execList);
  }
  // Once this function has run, it's safe to start setting the cookie with new data.
  delayStorage = false;
  if (menuState != "") {
    // If something is already set, save it.
    setState("","curr");
  }
}

// Preload the menu images
preloadImages(mainImagePath);

// Set a global flag that indicates this library has been loaded by the browser.
var LIB_MENUNAV_LOADED = true;

// End library
