(function($) {	
	$.nxsOxNavBox = function(menuObj, aOptions){
		var $sMenuObject 	= $(menuObj);		
		var $iLiCounter 	= 0;
		var $iUlCounter 	= 0;
		initMenu();		
			
			
		function openNavBox() {
			$iIdent = $(this).attr('nxsNavBoxIdent');
			$(this).children(".nxsNavBoxSubBoxFrame").addClass("show");
			if ($(this).hasClass("openToLeft")) {
				$(this).children(".nxsNavBoxSubBoxFrame").children(".nxsNavBoxSubBoxArrow").addClass("toLeft");
				$iRight = (parseInt($(this).children(".nxsNavBoxSubBoxFrame").css('width')) - aOptions.subNavMarginLeft) - parseInt($(this).css("width"));
				$iRight = $iRight * -1;
				$(this).children(".nxsNavBoxSubBoxFrame").css("left", $iRight);
			} else {
				$(this).children(".nxsNavBoxSubBoxFrame").css("left", aOptions.subNavMarginLeft);
				$(this).children(".nxsNavBoxSubBoxFrame").css("z-index", "1200");
			}
		}
		
		function closeNavBox() {
			$iIdent = $(this).attr('nxsNavBoxIdent');
			$(this).children(".nxsNavBoxSubBoxFrame").removeClass("show");
		}
			
		function addSubNavLevel(object, iTmpLiCounter, lowerlevel) {
			parentCounter = iTmpLiCounter;			
			if (lowerlevel == 1) {
				$(object).addClass("nxsNavBoxSubSubBox");
				$(object).children("li").each(function (){	
					if (!$(this).hasClass("dontReadInNavBox")) {
						$(this).addClass("nxsNavBoxSubSubPoint");
					}
				});		
			}
			else {
				$(object).addClass("nxsNavBoxSubBox");
				$(object).children("li").each(function (){	
					if (!$(this).hasClass("dontReadInNavBox")) {
						$(this).addClass("nxsNavBoxSubPoint");
					}
				});
			}
			$(object).attr("nxsNavBoxParentIdent", parentCounter);			
			$(object).children("li").each(function (){	
				if (!$(this).hasClass("dontReadInNavBox")) {
					$iLiCounter++;
					$(this).attr("nxsNavBoxParentIdent", parentCounter);
					$(this).attr("nxsNavBoxIdent", $iLiCounter);
					$(this).addClass("nxsNavBoxIdent_" + $iLiCounter);
				}
			});
			$(object).children("li").each(function (){
				if (!$(this).hasClass("dontReadInNavBox")) {
					iTmpSubLiCounter = $(this).attr('nxsNavBoxIdent');
					$(this).children("ul").each(function(){
						addSubNavLevel(this, iTmpSubLiCounter, 1);
					});
				}
			});
		}		
										
		function initMenu() {
			//NavBox vorbereiten		
			$sMenuObject.addClass('nxsNavBox');
			$sMenuObject.children("li").addClass("nxsNavBoxPoint");	
			$sMenuObject.children("li").each(function (){
				if (!$(this).hasClass("dontReadInNavBox")) {
					$iLiCounter++;
					$(this).attr("nxsNavBoxIdent", $iLiCounter);
					$(this).addClass("nxsNavBoxIdent_" + $iLiCounter);
					/*if ($iLiCounter > aOptions.pointuntilright) {
						$(this).addClass("openToLeft");	
					}*/
				}
			});
			
			//Subklassen zuweisen
			$sMenuObject.children("li").each(function (){
				if (!$(this).hasClass("dontReadInNavBox")) {
					iTmpLiCounter = $(this).attr('nxsNavBoxIdent');
					$(this).children("ul").each(function(){
						addSubNavLevel(this, iTmpLiCounter);
					});
				}
			});
						
			//Rahmen für SubBox bauen
			$sMenuObject.children("li").each(function (){
				if (!$(this).hasClass("dontReadInNavBox")) {
					$(this).children("ul").each(function(){
						$(this).wrap("<div class=\"nxsNavBoxSubBoxFrame\"></div>");						
						$(this).before("<div class=\"nxsTopNavArrow\"></div>");
						$(this).before("<div class=\"nxsTopNavTop\"></div>");
					});
							
				}
			});
			
			//Ausrichten
			$(".nxsNavBoxSubBoxFrame").each(function() {
				$(this).css("top", aOptions.subNavMarginTop);
				
				$height = 0;
				$(this).children("ul").children("li").each(function (){
					$new_height = $(this).css("height");
					$new_height = parseInt($new_height);
					if ($height < $new_height)
						$height = $new_height;
				});
				
				$(this).children("ul").children("li").children("ul").each(function (){
					$(this).css("height", $height);
				});
			});
						
			//Funktionen zuordnen
			$sMenuObject.children("li").each(function (){
				$(this).hover(
					openNavBox,
					closeNavBox
				);
			});
			
			//Verstecken
			$(".nxsNavBoxSubBoxFrame").hide();
			
			
			
			$('.nxsNavBoxSubBoxFrame').append("<div class=\"nxsTopNavBottom\"></div>");
				
		}			
				
	}
	
	
	$.fn.nxsOxNavBox = function(aOptions){
		aOptions = aOptions || {};
		aOptions.subNavMarginLeft = aOptions.subNavMarginLeft || 0;
		aOptions.subNavMarginTop = aOptions.subNavMarginTop || 0;
		aOptions.speedCloseNav = aOptions.speedCloseNav || 500;
		aOptions.pointuntilright = aOptions.pointuntilright || 5;
		aOptions.imagearrow = aOptions.imagearrow || 'navboxarrow.jpg';
				
		this.each(function() {
			new $.nxsOxNavBox(this, aOptions);
		});
	}
	
})(jQuery);
