//animate the opening of the branch (span.grower jQueryElement)
function openBranch(jQueryElement, noAnimation) {
    var openedChild = false;
    // Close other expanded menu items
    $('ul.tree > li').each(function(){
      $('ul.tree_sub > li', this).each(function(){
        if ($(this).hasClass('active')) {
          openedChild = true;
        }       
      });
      if (!openedChild) {
        closeBranch($('span', this));
      }
    });
    
    jQueryElement.addClass('OPEN').removeClass('CLOSE');
    jQueryElement.parent().addClass('list_open');
    if (noAnimation) {
        jQueryElement.parent().find('ul:first').show();
    } else {
        jQueryElement.parent().find('ul:first').slideDown();
        $('ul.tree_sub > li').each(function(){
          var $currentLink = $('a', this);

          if ($currentLink.outerHeight() > 37) {
            $currentLink.css('line-height', '27px');
          } else {
            $currentLink.css('line-height', '37px');
          }
        });
    }
}
//animate the closing of the branch (span.grower jQueryElement)
function closeBranch(jQueryElement, noAnimation) {
    jQueryElement.addClass('CLOSE').removeClass('OPEN');
    jQueryElement.parent().removeClass('list_open');
    if(noAnimation)
        jQueryElement.parent().find('ul:first').hide();
    else
        jQueryElement.parent().find('ul:first').slideUp();
}

//animate the closing or opening of the branch (ul jQueryElement)
function toggleBranch(jQueryElement, noAnimation) {
    if(jQueryElement.hasClass('OPEN'))
        closeBranch(jQueryElement, noAnimation);
    else
        openBranch(jQueryElement, noAnimation);
}

//when the page is loaded...
$(document).ready(function () {
    $('ul.tree li').each(function(){
        var id = $(this).attr('id');
        id = id.split('_');
        id = id[1];
        if ($('#children_' + id).length != 0)
        {
            $('#children_' + id).appendTo($(this));
        }
    });
    
    $('ul.tree_sub > li').each(function(){
      var $currentLink = $('a', this);

      if ($currentLink.outerHeight() > 37) {
        $currentLink.css('line-height', '27px');
      } else {
        $currentLink.css('line-height', '37px');
      }
    });
    
    //to do not execute this script as much as it's called...
    if(!$('ul.tree.dhtml').hasClass('dynamized'))
    {
        //add growers to each ul.tree elements
        $('ul.tree.dhtml ul').prev().before("<span class='grower OPEN'> </span>");
		
        //dynamically add the '.last' class on each last item of a branch
        $('ul.tree.dhtml ul li:last-child, ul.tree.dhtml li:last-child').addClass('last');
		
        //collapse every expanded branch
        $('ul.tree.dhtml span.grower.OPEN').addClass('CLOSE').removeClass('OPEN').parent().find('ul:first').hide();
        $('ul.tree.dhtml').show();
		
        //open the tree for the selected branch
        $('ul.tree.dhtml .selected').parents().each( function() {
            if ($(this).is('ul'))
              toggleBranch($(this).prev().prev(), true);
        });
        toggleBranch( $('ul.tree.dhtml .selected').prev(), true);
		
        //add a fonction on clicks on growers
        $('ul.tree.dhtml span.grower').click(function(){
            toggleBranch($(this));
        });
        //mark this 'ul.tree' elements as already 'dynamized'
        $('ul.tree.dhtml').addClass('dynamized');

        $('ul.tree.dhtml').removeClass('dhtml');
    }
});

