/*! NV Menu v3 <http://nvinteractive.co.nz>
	Copyright (c) NV Interactive
	
	References:
		jquery-1.3.x.js
		
	Release Notes:
		3.0 rewrote as a jquery plugin
*/


//
// create closure
//
(function($) {

//
// plugin definition
//
	$.fn.nvmenu = function(options) {
		debug(this);
		// build main options before element iteration
		var opts = $.extend({}, $.fn.nvmenu.defaults, options);
		
		// iterate and reformat each matched element
		return this.each(function(){$.fn.nvmenu.processmenu(this, opts)});
	};
	
//
// private function for debugging
//
	function debug($obj) {
		if (window.console && window.console.log)
			window.console.log('nvmenu selection count: ' + $obj.size());
	};
	
//
// define and expose our format function
//
	$.fn.nvmenu.processmenu = function(element, opts) {
		$this = $(element);
		// build element specific options
		var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
		
		//Setup interaction and add general descriptor classes
		$("li", $this)
			.hover($.fn.nvmenu.mouseover, $.fn.nvmenu.mouseout)
			.filter(":has(ul)").addClass("has_sub")
			.end()
			.filter(":first-child").addClass("first")
			.end()
			.filter(":last-child").addClass("last")
			.end()
			.each(function(index){
						   $(this).addClass("item-" + index);
						   });
			
		//Wrap each UL in a div
		$("ul", $this).wrap("<div></div>");
		
		//Add descriptor classes
		$("> li > a", $this).addClass("root");
		$("> li > div", $this).addClass("level-1");
		$("> li > div div", $this).addClass("level-n");
		
		//Add a footer to each sub menu
		$("ul", $this).append("<li class='footer'></li>");
		
		if(o.debug){
			$("ul:first", $this).css("display", "block");
		}
		
	};
	
//
// Events
//
$.fn.nvmenu.mouseover = function(){
	$(this).addClass("over");
	
	var menu = $("> div", $(this));
	//$("> div", $(this)).css("display", "block");	
	
	if(jQuery.browser.msie){
		/* MSIE */
		if(menu.css("display") != "block")menu.css({display: "block", top: 22});	
		menu.stop(true, false).animate({top: 32}, 100);
	}else{
		/* Firefox, webkit etc */
		if(menu.css("display") != "block")menu.css({display: "block", opacity: 0, top: 22});
		menu.stop(true, false).animate({opacity: 1, top: 32}, 100);
	}

}

$.fn.nvmenu.mouseout = function(){
	$(this).removeClass("over");
	
	if(jQuery.browser.msie){
		$("> div", $(this)).stop(true, false).animate({top: 22}, 100, function(){$(this).css("display", "none");});	
	}else{
		$("> div", $(this)).stop(true, false).animate({opacity: 0, top: 22}, 100, function(){$(this).css("display", "none");});			
	}
}


	
//
// plugin defaults
//
	$.fn.nvmenu.defaults = {
		debug: false
  	};
//
// end of closure
//
})(jQuery);
