/* Non-CSS2 (li:hover) navigation support script */

var oDebug = null;
var tStart = new Date();

function writeDebug(x) {
  if (!oDebug) {
    if (document.getElementsByTagName('p').length) oDebug = document.getElementsByTagName('p')[document.getElementsByTagName('p').length-1];
    if (document.body) {
      document.body.appendChild(oDebug);
      oDebug.style.display = 'block';
    }
  }
  var o = document.createElement('span'); // can't put block-level elements under P tags
  o.style.display = 'block';
  c = document.createTextNode((new Date()-tStart)+': '+x);
  o.appendChild(c);
  if (!oDebug) return false;
  try {
    oDebug.appendChild(o);
  } catch(e) {
    window.status = 'Warning: writeDebug failed.';
    setTimeout("window.status=''",1000);
  }
}

writeDebug = function(x) {} // disable

function Nav() {
  var self = this;
  this.o = document.getElementById('nav');
  this.oParent = this.o.getElementsByTagName('ul')[0];
  this.LIs = [];
  this.ULs = [];
  this.DDs = this.oParent.getElementsByTagName('dd');
  this.DTs = this.oParent.getElementsByTagName('dt');
  this.tmp = this.oParent.getElementsByTagName('li');
  this.ULs = this.oParent.getElementsByTagName('ul');
  this.H3s = this.oParent.getElementsByTagName('h3');
  this.r = new RegExp(' hover|hover','g');
  var n = null;

  for (var i=0; i<this.tmp.length; i++) {
    n = this.tmp[i].nodeName.toLowerCase();
    if (n=='li') {
      this.LIs[this.LIs.length] = this.tmp[i];
    }
  }

  this.isChildOf = function(o,oParent) {
    if (!o || !oParent) return false;
    writeDebug('isChildOf(): '+o.nodeName+', '+oParent.nodeName);
    if (o.className) writeDebug('o ID: '+o.className);
    while (o != oParent && o.parentNode) {
      o = o.parentNode;
    }
    writeDebug('isChildOf(): '+(o==oParent));
    return (o==oParent);
  }

  this.liOver = function(e) {
    writeDebug('liOver');
    var tmp = (e?e.target:event.toElement).nodeName;
    if (tmp=='UL') return false;
    this.className += ' hover hover-'+this._className;
  }

  this.liOut = function(e) {
    writeDebug('liOut()');
    if (self.isChildOf(e?e.target:event.toElement,this)) return false; // e?e.relatedTarget:event.toElement
    this.className = this.className.replace(new RegExp(' hover hover-'+this._className,'g'),'');
  }

  this.dtOver = function(e) {
    writeDebug('dtOver');
    self.DDs[this._index].className = 'hover';
    annoy();
    self.cancelBubble(e);
  }

  this.dtOut = function(e) {
    writeDebug('dtOut');
    self.DDs[this._index].className = '';
    // self.cancelBubble(e);
  }

  this.h3Over = function(e) {
    var tmp = (e?e.target:event.toElement).nodeName;
    if (this.className.indexOf('hover')<=-1) {
      this.className = 'hover';
      this.parentNode.className = (this.parentNode.className?this.parentNode.className+' ':'')+ 'hover';
    }
    if (tmp=='H3') self.cancelBubble(e);
  }

  this.h3Out = function(e) {
    var tmp = (e?e.target:event.toElement).nodeName;
    if (!tmp) return false;
    if (this.className.indexOf('hover')>=0) {
      this.className = '';
      this.parentNode.className = this.parentNode.className.replace(self.r,'');
    }
    if (tmp=='H3') self.cancelBubble(e);
  }

  this.liSubOver = function(e) {
    writeDebug('liSubOver()');
    var tmp = (e?e.target:event.toElement).nodeName;
    if (tmp=='UL') return false;
    this.className = (this.className?this.className+' ':'')+'hover';
    writeDebug('liSubOver(): '+this.className);
    if (tmp=='LI') self.cancelBubble(e);
  }

  this.liSubOut = function(e) {
    writeDebug('liSubOut()');
    if (self.isChildOf(e?e.target:event.toElement,this)) return false;
    this.className = this.className.replace(self.r,'');
  }

  this.cancelBubble = function(e) {
    (e?e.stopPropagation():event.cancelBubble = true);
  }

  this.init = function() {
    for (var i=0; i<self.LIs.length; i++) {
      self.LIs[i]._className = self.LIs[i].className;
      self.LIs[i].onmouseover = self.liOver;
      self.LIs[i].onmouseout = self.liOut;
    }
    var j=0,items=null;
    for (i=0; i<self.LIs.length; i++) {
      items = self.LIs[i].getElementsByTagName('li'); // sub-LI elements
      for (j=0; j<items.length; j++) {
        // items[j].onmouseover = self.cancelBubble;
        items[j].onmouseover = self.liSubOver;
        items[j].onmouseout = self.liSubOut;
      }
    }
    for (i=0; i<self.H3s.length; i++) {
      self.H3s[i].onmouseover = self.h3Over;
      self.H3s[i].onmouseout = self.h3Out;
    }
    for (i=0; i<self.DTs.length; i++) {
      self.DTs[i]._index = i;
      self.DTs[i].onmouseover = self.dtOver;
      self.DTs[i].onmouseout = self.dtOut;
    }
  }
}

function navInit() {
  nav = new Nav();
  nav.init();
}

function removeChildNodes(o) {
  // remove children from bottom up
  var nodes = o.childNodes;
  if (!nodes || !o) {
    writeDebug('removeChildNodes('+(o||'null')+'): no nodes to remove.');
    return false;
  }
  writeDebug('removeChildNodes('+o.nodeName+'): removing '+nodes.length+' node'+(nodes.length>1?'s':''));
  for (var i=nodes.length-1; i>=0; i--) {
    o.removeChild(nodes[i]);
  }
}


// CONTENT MANAGER - re-hashed from 2004 site

function ContentManager() {
  writeDebug('ContentManager()');
  var self = this;
  this.xmlhttp = null;
  this.oLast = null;

  try {
    this.xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
  } catch(e) {
    try {
      this.xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
    } catch(E) {
      this.xmlhttp = null;
    }
  }
  if (!this.xmlhttp) {
    try {
      this.xmlhttp = new XMLHttpRequest();
      this.xmlhttp.overrideMimeType('text/xml'); // So mozilla doesn't crash
    } catch(e) {
      this.xmlhttp = null;
    }
  }

  this.readystatechangeHandler = function() {
    if (self.xmlhttp.readyState == 4) {
      if (self.onloadHandler) {
        self.onloadHandler();
      }
    }
  }

  this.load = function(url) {
    url = url.toString();
    writeDebug('ContentManager.load('+url+')');
    if (url.indexOf('.xml')>=0 || (url.indexOf('webpad')>=0)) return true;
    if (url.indexOf('#')>=0) {
      return false;
    }
    if (self.xmlhttp) {
      try {
        target = document.getElementById('content');
/*
        dC = document.createElement('div');
        dC.className = 'top header';
        dCH = document.createElement('h1');
        dCH.appendChild(document.createTextNode('Loading'));
        dCH.style.position = 'absolute';
        dCD = document.createElement('div');
        dCD.className = 'divider';
        dC.appendChild(dCD);
        dCC = document.createElement('div');
        dCC.className = 'copy';

        dCP = document.createElement('p');
        dCP.appendChild(document.createTextNode('Holla...'));
        dCC.appendChild(dCP);
        dC.appendChild(dCC);
*/
        // document.documentElement.appendChild(dC);
        // target.innerHTML = '';
//        var result = target.insertBefore(dC,target.childNodes[0]); // insert at top of "content"
        url = url.toString();
        if (APP_XHTML||(window.location.href.indexOf('test')>=0)) {
          file = 'index.php?xml=true&r='+parseInt(Math.random()*1048576);
        } else {
          file = 'content.html';
        }
        // window.status = url+file;
        self.xmlhttp.open('GET',url+file,true); // "true" - don't hold up browser
        self.xmlhttp.onreadystatechange = self.readystatechangeHandler;
        self.xmlhttp.setRequestHeader('Content-Type', 'text/xml');
        self.xmlhttp.send(null); // xmlDoc
      } catch(e) {
        // something blew up - d'oh!
        writeDebug('contentManager.load(): error @ '+e.lineNumber+','+e.message);
        return true;
      }
    } else {
      // no XMLHTTP support.
      return true;
    }
    return false;
  }

  this.onloadHandler = function() {
    writeDebug('ContentManager.onloadHandler()');
    soundManager.play('load');
    c = document.getElementById('content');
    if (APP_XHTML==true) {
      removeChildNodes(document.getElementById('content'));
      document.getElementById('content').appendChild(document.importNode(self.xmlhttp.responseXML.documentElement.getElementsByTagName('div')[0],true));
    } else {
      // Internet explorer etc. get to do it the non-standards way
      c.innerHTML = '';
      c.innerHTML = self.xmlhttp.responseText;
    }
  }

  this.assignHandlers = function() {
    // intercept onclick and load via XMLHTTP where supported
    var a = document.getElementById('nav').getElementsByTagName('a');
    for (var i=0; i<a.length; i++) {
      a[i].onclick = self.clickHandler;
    }
  }

  this.clickHandler = function(o) {
    writeDebug('ContentManager.clickHandler('+o+')');
    o = (o&&o.href?o:this); // event firing either direct assignment or .clickHandler(this) - test for .href property as Mozilla transparently passes event argument by default
    // soundManager.play(null,'click0');
    // setEntryHighlight(o.id);
    o.blur();
    return self.load(o);
  }

}

var contentManager = new ContentManager();

var isSafari = (navigator.appVersion.toLowerCase().indexOf('safari')+1?1:0);

function setStyle(n) {
  var css = document.styleSheets&&!isSafari?document.styleSheets:document.getElementsByTagName('head')[0].getElementsByTagName('link');
  for (var i=css.length; i--;) {
    css[i].disabled = (i!=n?'disabled':'');
  }
}

// NAV - general init shizzy

var nav = null;
var appliesTo = ['msie','netscape6','opera 7.0'];
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('opera')+1) appliesTo[0] = '-invalid-'; // Opera pretends to be IE
var needed = false;
for (var i=0; i<appliesTo.length; i++) {
  if (ua.indexOf(appliesTo[i])+1) needed = true;
}
if (needed) window.onload = navInit;

function makeNoise() {
  if (soundManager) {
    soundManager.setVolume('open',50);
    soundManager.play('open');
  }
}

function annoy() {
  if (soundManager) {
    // soundManager.setVolume('over',10);
    soundManager.play('over');
  }
}

function fireworksInit() {
  for (var i=0; i<3; i++) {
    setTimeout("createFirework(null,null,null,null,null,null,null,null,null,true)",20+(Math.random()*500*(i+1)));
  }
}

function heyLetsAnnoyTheUser() {
  contentManager.assignHandlers();
  soundManagerInit();
  var a = document.getElementById('nav').getElementsByTagName('h2');
  for (var i=0; i<a.length; i++) {
    a[i].onmouseover = makeNoise;
  }
  if (!(navigator.userAgent.indexOf('MSIE')+1)) {
    a = document.getElementById('nav').getElementsByTagName('a');
    for (var i=0; i<a.length; i++) {
      a[i].onmouseover = annoy;
    }
  }
  // setTimeout(fireworksInit,1000+(2000*Math.random()));
}

addEventHandler(window,'load',heyLetsAnnoyTheUser);