/**************************************************

Description: accordeon menu
 			
			- extended logic 
 			- added classes
 			- added current class

Author:		R. Grave
			remco@trimm.nl

***************************************************/

$(document).ready(function(){
	LMPDD.init();
});

var LMPDD = {
	menuId : 'leftmenu',			

	init : function(){
		
		// hide the submenu's and add a class
		if(LMPDD.menuId) { $('#'+ LMPDD.menuId +' ul').css({'display':'none'}).addClass('sub'); }
		
		// Build the menu
		this.buildMenu();
		this.setCurrent();
		// Use the menu
		$('#leftmenu a.toggle').click(function() { LMPDD.switchClass($(this)); LMPDD.showMenu($(this)); });


	},
					
	showMenu : function(elem) {
		var targ = elem.parent();
		var sub = targ.children('ul');
		var subs = targ.find('ul');			
		var subVisible = $('#leftmenu ul:visible');
						
		
		/* Show/Hide menuitems */
		
		// 
		if(subs && subs.is(':visible')) {
			subs.parent().find('ul').filter(function() {
				$(this).parent().removeClass('selected');
				if($(this).parent().find('ul.firstselected')) {
					$(this).parent().removeClass('firstselected');
				}
				
				if($(this).parent().find('ul.lastselected')) {
					$(this).parent().removeClass('lastselected');
					$(this).parent().find('div.lastborder').hide();
				}
			});
			
			subs.slideUp('400');
		}
					
		if(subs && !subs.is(':visible') && targ.parent('ul:not("#leftmenu")').is(':visible')) {
			targ.parent().find('ul:visible').slideUp('400').filter(function() {
				$(this).parent().removeClass('selected');
				if($(this).parent().find('ul.firstselected')) {
					$(this).parent().removeClass('firstselected');
				}
				
				if($(this).parent().find('ul.lastselected')) {
					$(this).parent().removeClass('lastselected');
					$(this).parent().find('div.lastborder').hide();
				}
			});
			
			sub.slideDown('400');
		}
		
		if(subs && !subs.is(':visible') && !targ.parent('ul:not("#leftmenu")').is(':visible')) {
			
			subVisible.parent().removeClass('selected').filter(function() {
				
				if(subVisible.parent().hasClass('firstactive')) {
					subVisible.parent().removeClass('selected');
					subVisible.parent().removeClass('firstselected');
				}
				
				if(subVisible.parent().hasClass('lastactive')) {
					subVisible.parent().removeClass('selected');
					subVisible.parent().removeClass('lastselected');
					
					subVisible.parent().find('div.lastborder').hide();
				}
				
			});
			
			subVisible.slideUp('400');
			
			sub.slideDown('400');
		}
		
		return false;
	},
	
	buildMenu : function() {	
		var oFirst = $('#leftmenu li:first');			
		oFirst.addClass('first').filter(function() {
			if($(this).find('ul')[0]) {
				$(this).removeClass('first');
				$(this).removeClass('active');
				$(this).addClass('firstactive');
			}
			
		});
		
		var oLast = $('#leftmenu li:last-child');
		oLast.addClass('last').filter(function() {
			if($(this).find('ul')[0]) {
				$(this).removeClass('last');
				$(this).removeClass('active');
				$(this).addClass('lastactive');
			}
			
		});
		
		var oParent = $('#leftmenu ul').parent();
		oParent.addClass('active').filter(function() {
				
			if($(this).hasClass('firstactive') || $(this).hasClass('lastactive')) {
				$(this).removeClass('active');
			}
			
		});
		
		
		oParent.prepend('<a class="toggle" title=""><span /></a>');
		
		var oLastBorder = $('#'+ LMPDD.menuId).find('li.lastactive');
		oLastBorder.append('<div class="lastborder"><span /></div>');
		
		
	},
	
	setCurrent : function() {
		var oCurrent = $('#leftmenu li.current');
		
		if(oCurrent) {
			oCurrent.parents('ul:not("#leftmenu")').show();
			oCurrent.parents('li').toggleClass('selected').filter(function() {
				if($(this).hasClass('firstactive')) {
					$(this).removeClass('selected');
					$(this).toggleClass('firstselected');
				}
				
				if($(this).hasClass('lastactive')) {
					$(this).removeClass('selected');
					$(this).toggleClass('lastselected').find('div.lastborder').show().filter(function() {
						if($(this).prev('ul') && !$(this).prev('ul').is(':visible')) {
							$(this).hide();
						}
					});
				}
			});
		
		}
	},
	
	switchClass : function(elem) {

		var targ = elem.parent();
		var sub = targ.children('ul');
		var subs = targ.find('ul');	
		

		if(targ.hasClass('active')) {
			
			targ.toggleClass('selected');
		}
		
		if(targ.hasClass('firstactive')) {
			targ.toggleClass('firstselected');
		}
		
		if(targ.hasClass('lastactive')) {
			targ.toggleClass('lastselected');
			targ.find('div.lastborder').hide();
		}
				
		if(targ.hasClass('lastselected')) {
			targ.find('div.lastborder').show();
			targ.find("ul li div.lastborder").hide();
		}
	
		
	}

		
};