// basic necessary functionality
// add event listening
function aaManageEvent(eventObj, event, eventHandler) {
   if (eventObj.addEventListener) {
      eventObj.addEventListener(event, eventHandler,false);
   } else if (eventObj.attachEvent) {
      event = "on" + event;
      eventObj.attachEvent(event, eventHandler);
   }
}


// setup accordion elements
window.onload= function() {
    var divs = document.getElementsByTagName('div');

    for (var i = 0; i < divs.length; i++) {

       // setup click for name bar
       if (divs[i].className == 'nameCollapsed') {
          aaManageEvent(divs[i],'click',Accordion.expandOrCollapse);

       // assign height as custom property to element and then collapse
       } else if (divs[i].className == 'elements') {
 
          // IE6.x handles elements returned from getElementsByTagName differently 
          // and clientHeight doesn't work; using offsetHeight, instead
          var height = divs[i].offsetHeight;
          divs[i].height = height;
          if (divs[i].id == "") divs[i].id = "div" + i;
          divs[i].style.height = "0";
      }
    }
}

// manage the accordion
var Accordion = { 

   // adjust height
   adjustItem  : function(val, newItem) {
            document.getElementById(newItem).style.height=val + "px";
   },

   // check if expand or collapse
   expandOrCollapse : function (evnt) {
            evnt = evnt ? evnt : window.event;
            var target = evnt.target ? evnt.target : evnt.srcElement;
            if (target.className == 'nameCollapsed') 
                 Accordion.expand(target);
            else
                 Accordion.collapse(target);
   },

   // expand panel
   expand : function(target) {
            target.className = 'nameExpanded';
            // switch signal
            var children = target.parentNode.childNodes;
            var panel;
            for (var i = 0; i < children.length; i++) {
              if (children[i].className == 'elements') {
                 panel = children[i];
                 break;
              }
            }
            var height = panel.height;

            // find increment based on computed height divided by loop count of 20
            var incr = height / 20;
            for (var i=0; i < 20; i++) {
              var val = (i+1) * incr;
              var func = "Accordion.adjustItem("+val+",'"+ panel.id +"')";
              setTimeout(func,(i+1)*30);
            }

   },
   
   // collapse panel
   collapse : function (target) {
            target.className = 'nameCollapsed';
            // switch signal
            var children = target.parentNode.childNodes;
            var panel;
            for (var i = 0; i < children.length; i++) {
              if (children[i].className == 'elements') {
                 panel = children[i];
                 break;
              }
            }
            var height = panel.height;

            // find increment based on computed height divided by loop count of 20
            var decr = height / 20;
            for (var i=0; i < 20; i++) {
              var val = height-(decr*(i+1));;
              var func = "Accordion.adjustItem("+val+",'"+ panel.id +"')";
              setTimeout(func,(i+1)*30);
            }
   }

 };


