(function($) {
	var cumulativeOffset = function(element) {
	    var top = 0, left = 0;
	    do {
	        top += element.offsetTop  || 0;
	        left += element.offsetLeft || 0;
	        element = element.offsetParent;
	    } while(element);

	    return {
	        top: top,
	        left: left
	    };
	};

	$('.subnav').each(function(i, subnav) {
		subnav = $(subnav);
		var menu = $('#' + subnav.attr('id').replace(/^subnav/, 'nav')),
			offset = menu[0].offsetLeft + Math.round(menu.width() / 2),
			margin = (0 - Math.round(subnav.width() / 2));

		subnav.css({
			left: offset + 'px',
			marginLeft: margin + 'px'
		});

		var menuTimeout, subnavs = $('#subnav .subnav');
		$('#' + menu.attr('id') + ', #' + subnav.attr('id')).hover(function(e) {
			menu.addClass('hover');
			var index = subnavs.index(subnav[0]);
			subnavs.filter(function(i) {
				return i != index;
			}).hide();
			if(menuTimeout) {
				clearTimeout(menuTimeout);
			}
			subnav.fadeIn(100, function() {
				if(this.style.filter !== undefined && this.style.removeAttribute) {
					this.style.removeAttribute('filter');
				}
			});
		}, function(e) {
			menuTimeout = setTimeout(function() {
				menu.removeClass('hover');
				if(menu.hasClass('hover')) {
					return;
				}
				subnav.fadeOut(100);
			}, 250);
		});
	});
})(jQuery);