$(document).ready(function(){
  //  Get height of all foldud p-tags before hide() occurs.  Store height in heightArray, indexed based on position.
  heightArray = new Array();
  $(".headerFoldud").each(function(i) {
    innerArray = new Array();
    var sibling = $(this).next();
    var count = 0;  
    // sibling.lenght = check for null
    while (sibling.length && (sibling.attr('class').match('foldud') || sibling.children('.foldud').length)) {
      if(sibling.attr('class').match('foldud')){
        innerArray[count] = sibling.height();        
        count+= 1;
      }
      var children = sibling.children('.foldud');
      if(children.length){
        children.each(function(i) {
          innerArray[count] = $(this).height();
          count+= 1;
        });
      }
      sibling = sibling.next();
    }
    heightArray[i] = innerArray;
  });
  
  // Hide all foldud
  $(".foldud").hide();
  
  //  When a dt is clicked,
  $('.headerFoldud').click(function () {
    var sib = $(this).next();
    var count = 0;
    if (!sib.is(':visible') || sib.children('.foldud:not(:visible)').length != 0) {
      $(this).siblings(".foldud:visible").slideUp(600);
      $(this).siblings().children('.foldud:visible').slideUp(600);
    }

    while (sib.length && (sib.attr('class').match('foldud') || sib.children('.foldud').length)) {     
      if (sib.attr('class').match('foldud')) {
        sib.css({height: heightArray[$('.headerFoldud').index(this)][count]});
        sib.slideToggle(600);
        count+= 1;
      }
      
      var children = sib.children('.foldud');
      if(children.length){               
        children.css({height: heightArray[$('.headerFoldud').index(this)][count]});
        children.slideToggle(600);
        count+= 1;         
      }
      sib= sib.next();      
    }
    return false;
  });
});

