/*! 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;

        $this.addClass(o.menuActiveClass);

            if (jQuery.browser.msie && jQuery.browser.version == 6.0){
				//Add png class for IE6 png fix
				$("a", $this).addClass("png");
			}

        //Setup interaction and add general descriptor classes
        $("li", $this)
			.hover($.fn.nvmenu.mouseover, $.fn.nvmenu.mouseout)
			.data("nvmenuoptions", o)
			.filter(":has(ul)").addClass("has_sub")
			.end()
			.filter(":first-child").addClass("first")
			.end()
			.filter(":last-child").addClass("last")
			.end()

		$("> li", $this).each(function(index) {
			$(this).attr("id", "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");

        //Hide menus by default
        $("div", $this).css("display", "none");

        //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 o = $(this).data("nvmenuoptions");

        if (o.disableSubs) return;

        var menu = $("> div", $(this));
        //$("> div", $(this)).css("display", "block");	

        if (jQuery.browser.msie) {
            /* MSIE */
            if (menu.css("display") != "block") menu.css({ display: "block", top: 15 });
            menu.stop(true, false).animate({ top: 25 }, 100);
        } else {
            /* Firefox, webkit etc */
            if (menu.css("display") != "block") menu.css({ display: "block", opacity: 0, top: 15 });
            menu.stop(true, false).animate({ opacity: 1, top: 25 }, 100);
        }

    }

    $.fn.nvmenu.mouseout = function() {
        $(this).removeClass("over");

        var o = $(this).data("nvmenuoptions");

        if (o.disableSubs) return;

        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,
        menuActiveClass: "active",
        disableSubs: false
    };
    //
    // end of closure
    //
})(jQuery);