function accordion(el) {
  var elup;
  if (Element.hasClassName(el.parentNode.id+'-body','visible')){
      //do not need to perform an actions
      return;
  }
  var eldown = el.parentNode.id+'-body';
  var apanels = document.getElementsByClassName('panel_body',el.parentNode.parentNode);
  for (var i=0;i<apanels.length;i++){
      if (Element.hasClassName(apanels[i].parentNode.id+'-body','visible'))
          var elup = apanels[i].parentNode.id+'-body';
  }
  if (elup){
    new Effect.Parallel([ new Effect.SlideUp(elup), new Effect.SlideDown(eldown) ], {duration: 0.5});
    Element.removeClassName(elup,'visible');
    Element.addClassName(eldown,'visible');
  } else {
    //DNA: Added for when no panels are open.
    new Effect.SlideDown(eldown, {duration: 0.5});
    Element.addClassName(eldown,'visible');
  }  
}

//pass in ID of container element that has all instances of apanels
function accordion_init(id) {
  var apanels = document.getElementsByClassName('panel_body',id);
  for (var i=0;i<apanels.length;i++){
      apanels[i].style.display = 'none';
  }
  var velems = document.getElementsByClassName('visible');
  for (var i=0;i<velems.length;i++){
      $(velems[i]).style.display = 'block';
  }
}

function accordion_init_all() {
  var apanels = document.getElementsByClassName('panel_body');
  for (var i=0;i<apanels.length;i++){
      apanels[i].style.display = 'none';
  }
  var velems = document.getElementsByClassName('visible');
  for (var i=0;i<velems.length;i++){
      $(velems[i]).style.display = 'block';
  }
}
//The following line was added as I couldn't get the addEvent() lines to work from Brian's Code sample on the scriptaculous wiki. This approach works in both Firefox 1.5 and IE 6.
window.onload = accordion_init_all;
