sY = {

  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);
      return r;
    } else {
      elm['on' + evType] = fn;
    }
  },

  init: function() {
    // Walk the DOM tree to isolate those items that need event
    // listeners, and add them.
    var uls = document.getElementsByTagName('ul');
    for (var i=0; i < uls.length; i++) {
      if (uls[i].className.search(/\byear-list\b/) != -1) {
        var all_links = uls[i].getElementsByTagName('a');
        for (j=0; j < all_links.length; j++) {
          if (all_links[j].parentNode.className.search(/\byear\b/) != -1) {
            sY.addEvent(all_links[j], 'click', sY.expandCollapse, false);
            // old style cancel for Safari browser
            if (all_links[j].onclick) {
              all_links[j].onclick = false;
            }
          }
        }
        // Initially hide but leave displayed if JavaScript disabled
        var all_months = uls[i].getElementsByTagName('li');
        for (var j=0; j < all_months.length; j++) {
          if (all_months[j].className.search(/\bmonth\b/) != -1)
            all_months[j].style.display = 'none';
        }
      }
    }
  },

  expandCollapse: function(e) {
    // cross-browser reference to the element that was clicked
    var el;
    if (window.event && window.event.srcElement)
      el = window.event.srcElement;
    if (e && e.target)
      el = e.target;
    if (!el)
      return;

    sY.toggleChildren(el.parentNode.getElementsByTagName('li'));
    sY.swallowLink(e);
  },

  toggleChildren: function(aList) {
    for (i=0; i < aList.length; i++) {
      if (aList[i].style.display != 'list-item') {
        aList[i].style.display = 'list-item';
        aList[i].style.listStyleType = 'circle';
      }
      else {
        aList[i].style.display = 'none';
      }
    }
  },

  swallowLink: function(e) {
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    }
    if (e && e.stopPropagation && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    }
  }
}

sY.addEvent(window, 'load', sY.init, false);

