(function($){
	$.fn.nestedMenu = function(params){
		var elements = this;
		var i = 0;
		
		elements.each(function(){
			
			element = $(this);
			element.find('a').eq(0).addClass('first-item');
			
			init(params);
				
			function init(params){
				
				var ultags = $(element).find("ul");
			   	
				ultags.each(function(){
					
					var ultag = $(this);
					var ultag_parent = ultag.parent();
										
					ultag.find('a').eq(0).addClass('first-item');
					ultag_parent.find('a').eq(0).addClass('subfolderstyle');
					
					if( ultag_parent.parent().attr('id') == elements.eq(i).attr('id') )
						ultag.css({'left': ultag_parent.outerWidth() + "px" });
					else
						ultag.css({'left': ultag_parent.parents('ul').eq(0).find('li').eq(0).outerWidth() + "px" });

					ultag_parent.mouseenter(function(){
						
						var childUl = $(this).children('ul');
						
						$(this).children('a').eq(0).addClass('active-route');
												
						childUl.css({
							'top': '0'
						});
										
						// Calculate position
						var windowHeight = $(window).height() + $(window).scrollTop();
						var ulOffset = $(this).offset();
						var moveUp = windowHeight - ( childUl.outerHeight() + ulOffset.top );
												
						// Move up if it runs off screen
						if (moveUp < 0) {
							childUl.css({
								'top': moveUp + 'px'
							});
						}
						
						childUl.fadeIn(100);
						//childUl.show();
						
						if( typeof params.hideSelector != 'undefined' ){
							$(params.hideSelector).css({
								'visibility': 'hidden'
							});
						}
					});
					
					ultag_parent.mouseleave(function(){
						$(this).find('ul').eq(0).hide();
						$(this).children('a').eq(0).removeClass('active-route');
																								
						if( typeof params.hideSelector != 'undefined' ){
							$(params.hideSelector).css({
								'visibility': 'visible'
							});
						}
					});
				});
				
				ultags.each(function(){
					$(this).css({
						'visibility':'visible'
					}).hide();
				});
				
			};
			
			i++;
		});
	};
})(jQuery);
