/**
  *Copied from NCSU Libraries and modified
 **/
// inactive hierarchy div
var hierarchydiv = getHierarchyDiv();

// active flyout
var hierarchylistlevel2;

// matches found
var matches = 0;

// add mouse click listener
document.onmouseup = cleanUp; 
// add key press listener
//document.onkeypress = cleanUp;

// close flyouts that lose focus
function cleanUp(evt) { 
  //alert("cleanUp called");
  evt = (evt) ? evt : ((window.event) ? event : null);
  if(evt) {
    var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);          
    //alert("Received click: " + elem);
    if(elem && hierarchylistlevel2) {
      if(elem != hierarchylistlevel2 && childSearch(elem, hierarchylistlevel2) == 0) {
        hierarchylistlevel2.className = "hierarchylistlevel2";
        if (!hierarchydiv) {
          hierarchydiv = getHierarchyDiv();
        }
        if (hierarchydiv) {
          hierarchydiv.className = "";
        }
      }
      matches = 0;
    }   
  }
}

function childSearch(needle, haystack) {
  //alert("childSearch called\nneedle: " + needle + "\nhaystack: " + haystack); 
  if(!haystack) { return matches; }
  
  // extract children
  var children = haystack.childNodes;
  
  // loop through child nodes
  for(var i = 0; i < children.length; i++) {
    // match found
    if(children[i] == needle) {
      //alert("Match found!");
      matches++;
    }
    
    // recursive search
    if(children[i].childNodes.length > 0) {
      childSearch(needle, haystack.childNodes[i]);
    }
  }
  return matches;
}

function toggleDisplay(obj) {
  toggleLevel2Display(obj);
  toggleLevel1Display(obj);
}

function getHierarchyDiv() {
  return getObjectById("hierarchydiv");
}

function toggleLevel1Display(obj) {
  if (!hierarchydiv) {
    hierarchydiv = getHierarchyDiv();
  }
  if (obj && hierarchydiv) {
    if(obj.className == "displayhierarchylistlevel2") {
      // fade object
      hierarchydiv.className = "level1fade";
    } else {
      // unfade object
      hierarchydiv.className = "";
    }   
  }
}


function toggleLevel2Display(obj) {
  if (obj) {
    // check display class
    if(obj.className == "displayhierarchylistlevel2") {
      // hide object
      obj.className = "hierarchylistlevel2";
      hierarchylistlevel2 = null;
    } else {
      // show object
      obj.className = "displayhierarchylistlevel2";
      hierarchylistlevel2 = obj;
    }   
  }
}

function toggleHierarchy(hierarchylistlevel1anchor) {
  cleanUp;
  if (hierarchylistlevel1anchor) {
    var hierarchylistlevel1list = hierarchylistlevel1anchor.parentNode;
    if (hierarchylistlevel1list) {
      var hierarchylistlevel2divcollection = hierarchylistlevel1list.getElementsByTagName("div");
      if (hierarchylistlevel2divcollection) {
        var hierarchylistlevel2div = hierarchylistlevel2divcollection.item(0);
        if (hierarchylistlevel2div) {
          toggleDisplay(hierarchylistlevel2div);
        }
      }
    }
  }
}
