/*
 * date:  2003-01-23
 * info:  http://inspire.server101.com/js/xc/
 */

var xcNode = [];

function xcSet(m, c) {
if (document.getElementById && document.createElement) {
  m = document.getElementById(m).getElementsByTagName('ul');
  var d, p, x, h, i, j;
  for (i = 0; i < m.length; i++) {
    if (d = m[i].getAttribute('id')) {
      xcCtrl(d, c, 'x', '[+]', 'Show', m[i].getAttribute('title')+' (expand menu)');
      x = xcCtrl(d, c, 'c', '[-]', 'Hide', m[i].getAttribute('title')+' (collapse menu)');

      p = m[i].parentNode;
      if (h = !p.className) {
        j = 2;
        while ((h = !(d == arguments[j])) && (j++ < arguments.length));
        if (h) {
          m[i].style.display = 'none';
          x = xcNode[d+'x'];
        }
      }

      p.className = c;
      p.insertBefore(x, p.firstChild);
    }
  }
}}


function xcShow(m) {
  xcXC(m, 'block', m+'c', m+'x');
}


function xcHide(m) {
  xcXC(m, 'none', m+'x', m+'c');
}


function xcXC(e, d, s, h) {
  e = document.getElementById(e);
  e.style.display = d;
  e.parentNode.replaceChild(xcNode[s], xcNode[h]);
  xcNode[s].firstChild.focus();
}


function xcCtrl(m, c, s, v, f, t) {
  var a = document.createElement('a');
  a.setAttribute('href', 'javascript:xc'+f+'(\''+m+'\');');
  a.setAttribute('title', t);
  a.appendChild(document.createTextNode(v));

  var d = document.createElement('div');
  d.className = c+s;
  d.appendChild(a);

  return xcNode[m+s] = d;
}

// added by rjw

//
// returns true if xc should work in this browser
// (uses same criteria as xcSet() does)
//
function xcViable() {
  return (document.getElementById && document.createElement) ? true : false;
}

//
// displays 'expand all' link
//   (which should be enclosed in an element with id 'xcexpandall')
// t is the display value to use (such as 'block' or 'inline')
//
function xcDisplayExpandAll(t) {
  if (xcViable()) {
    var obj = document.getElementById('xcexpandall');  // get element enclosing the link
    obj.style.display = t;                             // set display style to something visible
  }
}

//
// opens all closed nodes
// arguments are same as first two originally passed to xcSet
//
function xcExpandAll(m, c) {
  if (xcViable()) {
    m = document.getElementById(m).getElementsByTagName('ul');  // get array of ULs (submenus) within main menu
    var i, d, nodeold, nodenew;
    for (i = 0; i < m.length; i++) {                            // for each UL
      if (d = m[i].getAttribute('id')) {                        // get its id
        m[i].style.display = 'block';                           // display it
        nodenew = xcNode[d+'c'];                                // get previously created nodes for [+] and [-]
        nodeold = xcNode[d+'x'];
        if (m[i].parentNode.firstChild.className == (c+'x'))    // if displaying the [+] node,
          m[i].parentNode.replaceChild(nodenew, nodeold);       //  replace it with the [-] node
      }
    }
  }
}

//
// xcSet2() - called in body onload() - sets up xc menus
//
function xcSet2(m, c) {

  if (xcViable()) {
    var k = -1;
    if (typeof document.URL == "string") {
      k = document.URL.indexOf("#"); // navigating to an anchor
    }
    
    // the core of this function is taken from the original xcSet() - the only
    // difference is the check if k < 0
    m = document.getElementById(m).getElementsByTagName('ul');
    var d, p, x, h, i, j;
    for (i = 0; i < m.length; i++) {
      if (d = m[i].getAttribute('id')) {
        xcCtrl(d, c, 'x', '[+]', 'Show', m[i].getAttribute('title')+' (expand menu)');
        x = xcCtrl(d, c, 'c', '[-]', 'Hide', m[i].getAttribute('title')+' (collapse menu)');
        p = m[i].parentNode;
        if (k < 0) { // not navigating to an anchor
          if (h = !p.className) {
            j = 2;
            while ((h = !(d == arguments[j])) && (j++ < arguments.length));
            if (h) {
              m[i].style.display = 'none';
              x = xcNode[d+'x'];
            }
          }
        }
        p.className = c;
        p.insertBefore(x, p.firstChild);
      }
    }

    xcDisplayExpandAll('block');          // show 'expand all' link
    // get the anchor name and try to find it on the page
    // if found, set focus to that link
    if (k >= 0) {
      var anchorname = document.URL.substring(k+1, document.URL.length);
      if (anchorname != "") {
        var linkobj = document.getElementById(anchorname);
        if (linkobj && linkobj.focus) {
          linkobj.focus();
        }
      }
    }
  }
}

