/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);


//////////////////////////////////////////////
$.fn.nav = function(options){
	var container = this;

	var settings = $.extend({
		columnWidth: 140,
		columnHeight: 130
	}, options);

	container.find("> ul")
		.each(function(i,ul){
			$(ul)
				.addClass("l1")
				.find("> li")
				.each(function(j,val){
					$(val)
						.hoverIntent({
							over:function(){
								$(val).find("> a").addClass("hover");
								$(val).find("> ul").show();
							}, 
							timeout: 300,
							out:function(){
								$(val).find("> a").removeClass("hover");
								$(val).find("> ul").fadeOut("fast");
							}
						})
						.addClass("l1")
						.attr("id","l1_"+j)
						.find("> a")
							.addClass("l1")
							.find("> span")
								.addClass("l1");
				});
		
				$(ul)
					.find("> li")
					.each(function(j,val){
						var startPos = $(val).position().left;
						var menuWidth = $(val).find("> ul").length * settings.columnWidth;
						var rightSide = startPos + menuWidth;

						while(rightSide > container.width()){
							startPos-=settings.columnWidth;
							rightSide = startPos + menuWidth;
						}


						if(((startPos + menuWidth) <= $(val).position().left) || (j > 0 && ($.browser.mozilla || $.browser.opera) && $(val).position().left==0)){
							startPos = container.width() - menuWidth;
						}
						var navHeight = container.find("> ul.l1 > li.l1 > a.l1").height();
						//$(".foo").append(navHeight+":"+$(val).position().top + " | ");

						$(val).find("> ul:first").addClass("first");
						$(val).find("> ul:last").addClass("last");
						
						if($(val).find("> ul").length==1){
							$(val).find("> ul").addClass("solo");
						}

						$(val)
							.find("> ul")
							.removeClass("hidel2")
							.hide()
							.each(function(k,val2){
								var leftPos = startPos + (k * settings.columnWidth);
								
								$(val2)
									.addClass("l2_" + k)
									.css("position","absolute")
									.css("z-index","100")
									.css("left",leftPos)
									.css("width", settings.columnWidth)
									.css("height", settings.columnHeight)
									//.css("top",container.height()+$(val).position().top)
									.css("top",navHeight)
									.addClass("l2")
									.find("> li")
									.each(function(l,val3){
										$(val3)
											.addClass("l2")
											.attr("id","l2_"+k+"_"+l)
											.find("> a")
												.addClass("l2")
												.find("> span")
													.addClass("l2");
									});
							});
					});
		});

   return container;
};
