//animate the opening of the branch (span.grower jQueryElement)
function openBranch(jQueryElement, noAnimation) {
		jQueryElement.removeClass('CLOSE').addClass('OPEN');
		if(noAnimation)
			jQueryElement.parent().find('ul:first').show();
		else{
                        jQueryElement.parent().find('p:first').removeClass('inactive').addClass('active');
			jQueryElement.parent().find('div:first').removeClass('menu-inactive').removeClass('menu-active-expand').addClass('menu-active-selected');
			jQueryElement.parent().find('ul:first').slideDown();
                   
                       if(jQueryElement.parent().hasClass('li-menu-inactive'))
                       {
                         jQueryElement.parent().removeClass('li-menu-inactive').addClass('li-menu-active');
                       }
                   }
}
//animate the closing of the branch (span.grower jQueryElement)
function closeBranch(jQueryElement, noAnimation) {
	jQueryElement.removeClass('OPEN').addClass('CLOSE');
	if(noAnimation){
		jQueryElement.parent().find('div:first').removeClass('menu-active-selected').removeClass('menu-active-expand').addClass('menu-inactive');
		jQueryElement.parent().find('li.menu-active-expand:first').removeClass('menu-active-expand').addClass('test');
                jQueryElement.parent().removeClass('menu-active-expand').removeClass('menu-active-selected').addClass('test');
		jQueryElement.parent().find('ul:first').hide();
	}
	else
		jQueryElement.parent().find('p:first').removeClass('active').addClass('inactive');
		jQueryElement.parent().find('div:first').removeClass('menu-active-selected').removeClass('menu-active-expand').addClass('menu-inactive');
		jQueryElement.parent().find('ul:first').slideUp();

                
                if(jQueryElement.parent().hasClass('li-menu-active') )
                {
                   jQueryElement.parent().removeClass().addClass('li-menu-inactive');
                }
}

//animate the closing or opening of the branch (ul jQueryElement)
function toggleBranch(jQueryElement, noAnimation) {
	//only elements with class 'grower can be toggled'
	if(jQueryElement.hasClass('grower'))
	{
		//determine category level for the category that is toggled
		var categ_lvl = jQueryElement.next().attr('rel');
		if (categ_lvl == undefined)
		{
			categ_lvl = jQueryElement.next().find("a:first").attr('rel');
		}
		
		if(jQueryElement.hasClass('OPEN'))
			closeBranch(jQueryElement, noAnimation);
		else
		{
			//close categories with same level as category that is opened
			$('ul.tree.dhtml a[rel="'+categ_lvl+'"]').each( function() {
				
				if($(this).parent().parent().prev().hasClass('OPEN') && $(this).parent().parent().prev().hasClass('grower'))
				{
					closeBranch($(this).parent().parent().prev(), noAnimation);
					
				}
				if($(this).prev().hasClass('OPEN') && $(this).prev().hasClass('grower'))
					closeBranch($(this).prev(), noAnimation);
			});
			openBranch(jQueryElement, noAnimation);
		}
	}
}

//when the page is loaded...
$(document).ready(function () {
	//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>");
		
		//add span to all other for alignement purposes
		$('ul.tree.dhtml li:not(:has(ul))').prepend("<span class='align-grower'> </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 expanded branch
			$('ul.tree.dhtml .expand').parents().parent().each( function() {
				if ($(this).is('ul') && !$(this).parent().parent().prev().prev().hasClass('OPEN'))
					toggleBranch($(this).parent().parent().prev().prev(), true);
			});
			if(!$('ul.tree.dhtml .expand').parent().parent().prev().hasClass('OPEN'))
			{
				toggleBranch( $('ul.tree.dhtml .expand').parent().parent().prev(), true);
			}
			
		//open the tree for the selected branch
			$('ul.tree.dhtml .selected').parents().each( function() {
				if ($(this).is('ul') && !$(this).parent().parent().prev().prev().hasClass('OPEN'))
					toggleBranch($(this).parent().parent().prev().prev(), true);
			});
			if(!$('ul.tree.dhtml .selected').parent().parent().prev().hasClass('OPEN'))
			{
				toggleBranch( $('ul.tree.dhtml .selected').parent().parent().prev(), true);
			}
		
		//add a fonction on clicks on growers
		$('ul.tree.dhtml span.grower').click(function(){
			toggleBranch($(this));
		});
		
		$('ul.tree.dhtml li.menu-leve1-active a.selected').click(function(){
			if($(this).attr('rel')==3)
			{
			 if($(this).parent().parent().parent().hasClass(''))
			 {
			 	$(this).parent().parent().parent().addClass('menu-leve1-active');
			 }
			}
			toggleBranch($('ul.tree.dhtml li.menu-leve1-active span.grower'));
		});
		
		$('ul.tree.dhtml li.menu-leve1-active a.selected').click();
			
		//mark this 'ul.tree' elements as already 'dynamized'
		$('ul.tree.dhtml').addClass('dynamized');
		//$('ul.tree.dhtml li.menu-visual-effect span.grower.OPEN').parent().find('li').addClass('level1-default');
	}
});

