Initialiser.modules.nav = function(){
	
	var nav = {
	  navElement: null,
	  subContainers: null,
	  active:false,
	  subActive: false,
	  focusAnchor: null,
	  hoverReset: false,
	  setWidths: function() {
   
	   nav.subContainers.each(function(){
			if ($(this).parent().hasClass('faceted')) {
				var $this = $(this);
		      var thisWidth = $this.innerWidth(),
		          subColumns = $this.children('li').children('ul'),
		          childCount = subColumns.length;

		        subColumns.each(function(i, e){
		          $(this).css({width:thisWidth/childCount});
		     		 if (i%2) $(this).addClass('odd');
					 if (i == childCount-1) $(this).addClass('last');
		         });
			}
		 });
	 },
	 showMenu: function(menu) {
	   nav.subActive = true;
	     menu
	       .siblings()
	         .removeClass('active')
	       .end()
	         .addClass('active');
		
		$('body').addClass('navActive');
			
		$('body').one('click', function(){
			nav.hideMenu(menu);
		});
	 },
	 hideMenu: function(menu) {
	   var delay = 750;
	   if (!menu) {
	     menu = nav.navElement.find('li.topLevelItem');
	     delay = 100;
	   } 
	   menu
	   .animate({'text-indent':0}, delay, function(){
			if (!nav.hoverReset) {
	    	 $(this).removeClass('active');
		    	nav.subActive = false;
			 	if (!jQuery.browser.msie) menu.children('ul.subContainer').children('li').css({opacity:1});
				$('body').removeClass('navActive');
			}
	   });
	 },
	 hoverEffects: function() {
   
	   //Enhance hover with intent delay
	   nav.navElement
	      .children('.topLevel')
	        .children()
	          .hover(
	            function(){
	              nav.showMenu($(this));
					  nav.hoverReset = true;
	            },
	            function(){
	            	nav.hideMenu($(this));
						nav.hoverReset = false;
	            })
	          .find('a')
	            .focus(function(){
	              nav.showMenu($(this).closest('li'));
	            })
	            .blur(function(){
	              nav.hideMenu($(this).closest('li'));
	            });
	
      nav.navElement
			.find('li.faceted > ul.subContainer > li')
			    ._hover(
	            function(){
	              if (!jQuery.browser.msie) {
							$(this).siblings().fadeTo(200,0.5);
	              		$(this).fadeTo(200,1);
						}
	            },
	            function(){}
	          );
	if (!jQuery.browser.msie) {
	   nav.subContainers.each(function(){
	      $(this)
	        .hover(
	          function(){},
	          function(){
	            $(this)
	              .children('li').children('ul')
	              .fadeTo(0,1);
	          })  
	          .find('a')
	            ._hover(
	              function(){
	                $(this).addClass('hover');
	              },
	              function(){
	                $(this).removeClass('hover');
	              }
	            )
	            .focus(
	              function(){
	                $(this)
	                  .closest('ul')
	                    .siblings()
	                      .fadeTo(200,0.5)
	                    .end()
	                    .fadeTo(200,1);
	              },
	              function(){}
	            );
	 	  });
		}
	 },
	 focusEvents: function() {
	   nav.navElement.find('a').focus(function(){
	     nav.focusAnchor = $(this);
	   });
	 },
	 keyboardEvents: function() {
	   nav.navElement.keydown(function (e) {
	     var keyCode = e.keyCode || e.which,
	     arrow = {37: 'left', 38: 'up', 39: 'right', 40: 'down', 27: 'esc' };
     
	     nav.keyboardNavigation(nav.focusAnchor, arrow[keyCode]);
      
	  });
	 },
	 keyboardNavigation: function(element, direction) {
   
	    var currentItemIndex = element.closest('li').prevAll().length;
	    var isTopLevel = element.closest('ul').is('.topLevel');
    
	    switch (direction) {
	      case 'left':
	        if (isTopLevel) {element.closest('li').prev().find('a').eq(0).focus();}              
	        else { element.closest('ul').prev().children('li').eq(currentItemIndex).find('a').focus();}
	        return false;
	      break;
	      case 'up':
	        if (!isTopLevel && element.parent().prev(':not(.title)').length == 0) {
	          element.closest('ul.topLevel > li').find('a').eq(0).focus();
	        }else{
	          element.parent().prev().find('a').focus();
	        }
	        return false;
	      break;
	      case 'right':
	        if (isTopLevel) {
	          element.closest('li').next().find('a').eq(0).focus();
	        }              
	        else {element.closest('ul').next().children('li').eq(currentItemIndex).find('a').focus();}
	        return false;
	      break;
	      case 'down':
	        if (isTopLevel) {
	          element.closest('li').find('ul li a').eq(0).focus()
	          }
	        else {element.parent().next().find('a').focus();}
	        return false;
	      break;
	      case 'esc' :
	          nav.hideMenu();
	        return false;
	      break;
	    }
	 },
	 initialise: function(){
   
	   nav.navElement = $('#nav');
	   nav.subContainers = nav.navElement.find('ul.subContainer');
   
	   nav.setWidths();
	   nav.hoverEffects();
	   nav.focusEvents();
	   nav.keyboardEvents();
	 }
	}

	nav.initialise();

};
