/**
 * Dropdown Navigation
 * 
 * Version: 0.2
 */

(function($) {
	$.fn.of_dropDownNav = function(settings){
		
		var config = {
			lvl1LiSelector: 'li.lvl1',
			lvl2LiSelector: 'li.lvl2',
			currentSelector: '.current',
			lvl1WrapSelector: 'ul.lvl1',
			lvl2WrapSelector: 'ul.lvl2',
			lvl1trigger: 'a.lvl1',
			lvl2trigger: 'a.lvl2',
			activeClass: 'active',
			transparentBG: false,
			calcWidth: true,
			extraSpace: 10,
			extraSpaceIE6: 15,
			adjustParentUlSize: 0
		};
			
		if (settings) {
			$.extend(config, settings);
		}
		
		this.each(function(){
			
			// global object
			var trigger = $(this);
			
			// per default kein ie6
			var noie6 = true;
			
			// falls ein transparenter bg genutzt wird und der browser ie6 ist
			if($.browser.msie && $.browser.version == '6.0'){
				noie6 = false;
			}

			// lvl 1 li's
			var lvl1Lis = trigger.find(config.lvl1LiSelector);
			// lvl 2 li's
			var lvl2Lis = trigger.find(config.lvl2LiSelector);
			
			// aktuell aktive nav
			var currentLi = trigger.find(config.lvl1LiSelector + config.currentSelector);
			// Subnavs 
			var subNav = lvl1Lis.find(config.lvl2WrapSelector);
			
			if(config.calcWidth){
				// zeige sub navs bis auf die derzeit aktive beim start
				$(config.lvl2WrapSelector).show();
				
				// Bestimmte Breite der lvl2 Elemente
				lvl1Lis.each(function(){
					
					liIsBigger = false;
					
					biggerLiWidth = [];
					
					var thisLvl1Li = $(this);
					var thisLvl2Lis = thisLvl1Li.find(config.lvl2LiSelector);
					
					thisParentUlWidth = parseInt(thisLvl1Li.width());
					
					thisLvl2Lis.each(function(i){
						
						var thisLvl2Li = $(this);
						
						var extraSpace = config.extraSpace;
							
						if(!noie6){
							extraSpace = config.extraSpaceIE6;
						}
					
						var thisLiWidth = parseInt(thisLvl2Li.width()) + extraSpace;
						
						biggerLiWidth[i] = thisLiWidth;
						
					});
					
					thisWidth = 0;
					finalWidth = 0;
					
					$.each(biggerLiWidth,function(i){
						
						if(this > thisWidth){
							finalWidth = this;
						}
						
						thisWidth = this;
					});
					
					if(finalWidth > thisParentUlWidth){
						thisLvl2Lis.width(finalWidth);
					}
					else {
						thisLvl2Lis.width(thisParentUlWidth + config.adjustParentUlSize);
					}
					
				});
				
				// verstecke sub navs bis auf die derzeit aktive beim start
				$(config.lvl2WrapSelector).hide();
			}

			// zeige lvl2 navs beim hover der lvl1 nav
			trigger.find(config.lvl1trigger).bind('mouseenter', function(){
			
				var thisLi = $(this).parent('li');
				
				// wenn diese nav nicht bereits aktiv ist aktiviere sie
				if (!thisLi.hasClass(config.activeClass)) {
				
					// deaktiviere alle anderen lvl1 navs zuvor
					lvl1Lis.not(thisLi).removeClass(config.activeClass).children(config.lvl2WrapSelector).hide();
					
					thisLi.addClass(config.activeClass).children(config.lvl2WrapSelector).show();
				}
			});
			
			// falls ein transparenter bg genutzt wird und der browser ie6 ist
			if(!config.transparentBG){
				noie6 = true;
			}
			
			// falls noie6 false ist verschwindet das menu beim mouseleave nicht mehr
			if(noie6){
			
				// bringe die gesamte nav auf den ausgangszustand zurück wenn sie verlassen wird
				trigger.bind('mouseleave', function(){
				
					// deaktiviere alle lvl1 
					lvl1Lis.removeClass(config.activeClass).children(config.lvl2WrapSelector).hide();
				});
			}
			
		});
		
		return this;
	}
})(jQuery);
