/* ================================
	Menu Navigation
	Author: Tom Kentell
   ================================ */

(function($) {
	var menuTimeout;
	var menuFadeoutTime = 650; // in miliseconds

	$.fn.SetupMenu = function() {
		$('#mainnav #mainnav_sleeve>ul>li>a').bind('mouseover', {focused:false}, showMenu)
											 .bind('focus', {focused:true}, showMenu);
		$('#mainnav #mainnav_sleeve>ul>li').bind('mouseleave', {focused:false}, hideMenu);
		$('#mainnav #mainnav_sleeve>ul>li>div a').bind('focus', {state:'over'}, menuOpenCheck)
												 .bind('blur', {state:'out'}, menuOpenCheck);
	}

	function showMenu(event) {
		if($('#mainnav .over').length > 0) {
			clearTimeout(menuTimeout);
			$('#mainnav>#mainnav_sleeve>ul>li').removeClass('over').children('div').css({left:'-9999px', zIndex:'99'});
		}

		// add class of over and move into focus
		$(this.parentNode).addClass('over');
		// stop menu going off screen
		if($(this.parentNode).children('div').length > 0) {
			if ($.browser.msie && $.browser.version < 7)
				$(this.parentNode).children('div').bgiframe();
			$(this.parentNode).children('div').css({left:'auto', zIndex:'100'});

			var wrapperWidth = $('#wrapper').get(0).offsetWidth;
			var wrapperOffset = $('#wrapper').offset();
			var dropdownWidth = $(this.parentNode).children('div').get(0).offsetWidth;
			var dropdownOffset = $(this.parentNode).children('div').offset();

			// move drop down menu if running off of screen
			if((dropdownWidth + dropdownOffset.left) > (wrapperOffset.left + wrapperWidth)) {
				$(this.parentNode).children('div').css({marginLeft:'-'+((dropdownWidth + dropdownOffset.left)
														   -(wrapperOffset.left + (wrapperWidth-parseInt($('#wrapper').css('padding-left')))))
														   +'px'});
			}
		}
	}

	function hideMenu(event) {
		if(!event.data.focused) {
			var menuItem = this;

			// if menu item has drop down then set a timeout else just remove over class
			if($(menuItem).children('div').length > 0) {
				menuTimeout = setTimeout(function() {
					$(menuItem).children('div').css({left:'-9999px', zIndex:'99'}); 
				}, menuFadeoutTime);
			} else {
				$(menuItem).removeClass('over');
			}
		}
	}

	function menuOpenCheck(event) {
		if($(this).parents('li').eq(1).is(':not(.over)')) {
			showMenu.call($(this).parents('li').eq(1).children('a').get(0));
		}
	}
})(jQuery);