var sM = {
  init: function() {
    var uls = document.getElementsByTagName('ul');
    for (var u = 0; u < uls.length; u++) {
      if (uls[u].className.search(/\bnav\b/) == -1) continue;
      var lis = uls[u].getElementsByTagName('li');
      for (var i = 0; i < lis.length; i++) {
        var node = lis[i];
        if (node.nodeName.toLowerCase() == 'li' && node.getElementsByTagName('ul').length > 0) {
          sM.addEvent(node, 'mouseover', sM.getMoverFor(node), false);
          sM.addEvent(node, 'mouseout', sM.getMoutFor(node), false);
          node.isIn = false;
        }
      }
    }
  },
  
  getMoverFor: function(node) {
    return function(e) { sM.mover(e, node); };
  },
  
  getMoutFor: function(node) {
    return function(e) { sM.mout(e, node); };
  },

  mover: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    clearTimeout(el.outTimeout);
    for (var i = 0; i < el.childNodes.length; i++) {
      var node = el.childNodes[i];
      if (node.nodeName.toLowerCase() == 'ul') {
	node.style.display = 'block';
      }
    }
  },

  mout: function(e, targetElement) {
    var el = window.event ? targetElement : e ? e.currentTarget : null;
    if (!el) return;
    el.outTimeout = setTimeout(function() { sM.mout2(el); }, 350);
  },

  mout2: function(el) {
    var zind = 1000;
    for (var i = 0; i < el.childNodes.length; i++) {
      var node = el.childNodes[i];
      if(node.nodeName.toLowerCase() == 'ul') {
	node.style.display = 'none';
 	node.style.zIndex = 0;
      }
    }
  },
  
  addEvent: function(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } 
    else if (elm.attachEvent) {
      var r = elm.attachEvent('on' + evType, fn);
      EventCache.add(elm, evType, fn);
      return r;
    } 
    else {
      elm['on' + evType] = fn;
    }
    return false;
  },

  setupRollovers: function() {
    if (!document.getElementsByTagName){
      return;
    }
    var all_links = document.getElementsByTagName('a');
    for (var i = 0; i < all_links.length; i++) {
      var link = all_links[i]; 
      if (link.className && (' ' + link.className + ' ').indexOf(' rollover ') != -1) {
        if (link.childNodes && link.childNodes.length == 1 && link.childNodes[0].nodeName.toLowerCase() == 'img') {
         link.onmouseover = sM.mouseover;
         link.onmouseout = sM.mouseout;
        }
      }
    }
  },

  find_target: function(e){
    var target; 
    if (window.event && window.event.srcElement) {
      target = window.event.srcElement;
    }
    else if(e && e.target){
      target = e.target;
    }
    if (!target){
      return null;
    }
    while (target != document.body &&target.nodeName.toLowerCase() != 'a'){
      target = target.parentNode;
    }
    if (target.nodeName.toLowerCase() != 'a'){
      return null;
    }
    return target;
  }, 
  
  mouseover: function(e){
    var target = sM.find_target(e);
    if (!target) return;
    var img_tag = target.childNodes[0];
    img_tag.src = img_tag.src.replace(/(\.[^.]+)$/, '-on$1');
  },

  mouseout: function(e) {
    var target = sM.find_target(e);
    if (!target) return;
    var img_tag = target.childNodes[0];
    img_tag.src = img_tag.src.replace(/-on(\.[^.]+)$/, '$1');
  }
};

sM.addEvent(window, 'load', sM.setupRollovers, false);
sM.addEvent(window, 'load', sM.init, false);
sM.addEvent(window, 'unload', EventCache.flush, false);
