(function($) {

	$(function() {

		$('#header').css({
			position: 'relative'
		});

		var parents = $('#nav li:has(ul)'),
			timeouts = [];

		timeouts.length = parents.length;
		parents.each(function(i, parent) {
			parent = $(parent);
			var subnav = parent.find('ul').css({ opacity: 0, display: 'block' }),
				windowWidth = $(window).width(),
				subnavWidth = subnav.width(),
				parentWidth = parent.width(),
				headerWidth = $('#header').width(),
				offsetParent = parent[0],
				marginLeft = 0,
				textAlign = '',
				paddingLeft = subnav.find('li').css('paddding-left'),
				paddingRight = '',
				backgroundPosition = '',
				offset = {
					top: 0,
					left: 0
				};
			do {
				if($(offsetParent).css('position').match(/^(absolute|relative)$/)) {
					break;
				}
				offset.top += offsetParent.offsetTop;
				offset.left += offsetParent.offsetLeft;
			} while(offsetParent = offsetParent.offsetParent);

			if(
				offset.left + subnavWidth > headerWidth - parseInt($('#nav > ul > li:last').css('marginRight'), 10)
			) {
				marginLeft -= subnavWidth - parentWidth +
					(
						i == parents.length - 1 && (!$.browser.msie || !$.browser.version.match(/^[67](\.|$)/)) ?
							$.browser.msie && $.browser.version.match(/^[67](\.|$)/) ?
								15 :
								0
							: 5
					);
				textAlign = 'right';
				paddingRight = '20px';
				paddingLeft = 0;
				backgroundPosition = 'center right';
				var childStyles = {
					paddingLeft: paddingLeft,
					paddingRight: paddingRight,
					backgroundPosition: backgroundPosition
				};
			}

			subnav.css({
				top: (offset.top + parent.height()) + 'px',
				left: offset.left + 'px',
				marginLeft: marginLeft + 'px',
				textAlign: textAlign
			}).css({ opacity: '', display: '' }).hide();
			if(childStyles) {
				subnav.find('li').css(childStyles);
			}

		}).hover(
			function() {
				var index = parents.index(this),
					visibleSubnavs = $('#nav li ul:visible'),
					thisSubnav = $(this).find('ul');
				if(timeouts[index]) {
					clearTimeout(timeouts[index]);
				}
				if(visibleSubnavs.length > 0 && visibleSubnavs[0] != thisSubnav[0]) {
					visibleSubnavs.hide();
					thisSubnav.show();
				} else {
					$(this).find('ul').fadeIn(150);
				}
			},
			function() {
				var menu = $(this),
					index = parents.index(this);
				timeouts[index] = setTimeout(function() {
					menu.find('ul').fadeOut(200);
				}, 250);
			}
		);

		$('#subnav').hide();

		$('.current_page_item').parents('li').filter(function() {
			return $(this).is('#nav li');
		}).addClass('current_page_item');

	});

})(jQuery);