// dash_getElements() -- JS function to crawl DOM and return
// an array of appropriate objects
// http://invisibleblocks.wordpress.com/2006/01/18/hacking-the-browsers-dom-for-fun/
function dash_getElements (evalFunc, node) {
   if (!node) node = document.documentElement;
   var matches = new Array();  // storage space
   if (evalFunc(node))         // if it's a match...
       matches.push(node);     // store it

   var child = node.firstChild;
   while (child) {                // search thru each child
       matches = matches.concat(dash_getElements(evalFunc, child));
       child = child.nextSibling;
   }
   return matches;
}


var onclicksSetup = 0;
function dash_showLinkPanel(panelName) {
//alert("asked to reveal panel \"" + panelName + "\"");
  var active = 0;
  var spryPanelGroups = dash_getElements(
   function(node) {
       return node.nodeName == 'DIV' &&
       (node.className == "AccordionPanel");
   },null);
  for (var i = 0; i < spryPanelGroups.length; ++i) {
    // need the ID for this group
    var thisPanel = spryPanelGroups[i];
    var spryPanelLinkAreas = dash_getElements(
      function(node) {
       return node.nodeName == 'DIV' &&
       (node.className == "AccordionPanelContent");
      },thisPanel);
    for (var n = 0; n < spryPanelLinkAreas.length; ++n) {
      var thisLinks = spryPanelLinkAreas[n];
      if ( thisPanel.id == panelName ) {
        // toggle visibility
//alert("toggling visibility of panel number " + n + " for \"" + thisPanel.id + "\"");
        thisLinks.style.display = ( thisLinks.style.display == "none" ) ? "" : "none";
        if ( thisLinks.style.display == "" ) {
          active = 1;
        }
      } else {
//alert("hiding panel number " + n + " for \"" + thisPanel.id + "\"");
        thisLinks.style.display = "none"; //hide
      }
    }
    var spryPanelHeaderAreas = dash_getElements(
     function(node) {
     return node.nodeName == 'DIV' &&
     (node.className == "AccordionPanelTab");
    },thisPanel);
    for (var n = 0; n < spryPanelHeaderAreas.length; ++n) {
      var thisHeader = spryPanelHeaderAreas[n];
      // set up an onClick handler?
      if ( onclicksSetup == 0 ) {
//alert("setting onclick for " + thisPanel.id);
        thisHeader.onclick = function() { dash_handlePanelClick(this); };
      }
      if ( (thisPanel.id == panelName) && (active == 1) ) {
//alert(panelName + " active");
        thisHeader.style.backgroundImage = "url(/images/menu_btn_active_bg.gif)";
        thisHeader.style.color = "#ffffff";
      } else {
//alert(thisPanel.id + " not active");
        thisHeader.style.backgroundImage = "url(/images/menu_btn_bg.gif)";
        thisHeader.style.color = "#FFC61D";
      }
    }
  }
  onclicksSetup = 1;
}

function dash_handlePanelClick(obj) {
  if (obj == null) {
    // should never happen!
    return;
  }
  var containingObj = obj.parentNode;
  if ( (containingObj == null) || (containingObj.id == null) ) {
    // didn't set an id on the tab header?
    return;
  }
  dash_showLinkPanel(containingObj.id);
}

