var dynamicMenu = {

	deltaX : 0,
	deltaY : 60,
	currentMenu : null,
	currentTimeout : null,
	hideTimeout : 500,

	overItem : function (e, id) {
		var x = jQuery.utils.getPosition(e).x;
		var y = jQuery.utils.getPosition(e).y;

		dynamicMenu.hideMenu();
		clearTimeout(dynamicMenu.currentTimeout);
		dynamicMenu.currentMenu = jQuery('div#' + id);
		dynamicMenu.currentMenu.left((x + dynamicMenu.deltaX) + 'px');
		dynamicMenu.currentMenu.top((y + dynamicMenu.deltaY) + 'px');
		dynamicMenu.currentMenu.show();
		dynamicMenu.currentMenu.hover(dynamicMenu.overMenu, dynamicMenu.outMenu);
	},

	outItem : function () {
		clearTimeout(dynamicMenu.currentTimeout);
		dynamicMenu.currentTimeout = setTimeout("dynamicMenu.hideMenu()", dynamicMenu.hideTimeout);
	},

	overMenu : function () {
		clearTimeout(dynamicMenu.currentTimeout);
	},

	outMenu : function () {
		clearTimeout(dynamicMenu.currentTimeout);
		dynamicMenu.currentTimeout = setTimeout("dynamicMenu.hideMenu()", dynamicMenu.hideTimeout);
	},

	hideMenu : function (){
		if (dynamicMenu.currentMenu) {
			dynamicMenu.currentMenu.hide();
		}
	}

}

jQuery.utils = {
	getPosition : function(e) {
		var x = 0;
		var y = 0;
		var es = e.style;
		var restoreStyles = false;
		if (jQuery(e).css('display') == 'none') {
			var oldVisibility = es.visibility;
			var oldPosition = es.position;
			restoreStyles = true;
			es.visibility = 'hidden';
			es.display = 'block';
			es.position = 'absolute';
		}
		var el = e;
		while (el){
			x += el.offsetLeft + (el.currentStyle && !jQuery.browser.opera ?parseInt(el.currentStyle.borderLeftWidth)||0:0);
			y += el.offsetTop + (el.currentStyle && !jQuery.browser.opera ?parseInt(el.currentStyle.borderTopWidth)||0:0);
			el = el.offsetParent;
		}
		el = e;
		while (el && el.tagName  && el.tagName.toLowerCase() != 'body')
		{
			x -= el.scrollLeft||0;
			y -= el.scrollTop||0;
			el = el.parentNode;
		}
		if (restoreStyles == true) {
			es.display = 'none';
			es.position = oldPosition;
			es.visibility = oldVisibility;
		}
		return {x:x, y:y};
	}

};
