﻿/*! 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
		
3.0.1	- Can now disable subs :: disableSubs: true
- Add class to menu root to indicate that it's been processed :: menuActiveClass: "active"
- Set selected items from url :: autoSelect: true, selectedItemClass: "selected"
*/


//
// 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);
        });


        //Autoselect	
        //		$("a", $this).each( function(){
        //			$this = $(this);
        //			
        //			if( this.href.toLowerCase() == window.location.toString().toLowerCase() )
        //				$this.parents("li").addClass( o.selectedItemClass );
        //									 });


        //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");


        
        //Split list in two

        $(".level-1:lt(5)", $this).addClass("multicolumn").each(function () {
            var items = $("> ul li", this);
            var ul = $("<ul class='col2'></ul>");
            $(this).append(ul);
            items.slice(Math.ceil(items.length / 2)).appendTo(ul);
        });

        //Add a footer to each sub menu
        $(".level-1", $this).append("<div class='nav-footer'><a href='/contact/default.aspx'>Contact us</a></div>");


        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: 40 });
            menu.stop(true, false).animate({ top: 42 }, 100);
        } else {
            /* Firefox, webkit etc */
            if (menu.css("display") != "block") menu.css({ display: "block", opacity: 0, top: 40 });
            menu.stop(true, false).animate({ opacity: 1, top: 42 }, 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: 40 }, 100, function () { $(this).css("display", "none"); });
        } else {
            $("> div", $(this)).stop(true, false).animate({ opacity: 0, top: 40 }, 100, function () { $(this).css("display", "none"); });
        }
    }



    //
    // plugin defaults
    //
    $.fn.nvmenu.defaults = {
        debug: false,
        menuActiveClass: "active",
        disableSubs: false,
        autoSelect: false,
        selectedItemClass: "selected"
    };
    //
    // end of closure
    //
})(jQuery);
