var PopupMenu = {
	currentMenu: null,
	
	show: function(elem, mnu) {
		var mnu = $(mnu);
		if (mnu.visible()) return;
		if (this.currentMenu) this.currentMenu.hide();
		this.currentMenu = mnu;
		elem = $(elem);
		var pos = elem.cumulativeOffset();
		mnu.setStyle({left: (pos.left - 1) + "px", top: (pos.top - mnu.getHeight() - 3) + "px", width: (Math.max(mnu.getWidth(), elem.getWidth()) - 2) + "px"}).show();
		var clicks = 2;
		var orig_doc_click = document.onclick;
		document.onclick = function() {
			if (--clicks == 0) {
				mnu.hide();
				document.onclick = orig_doc_click;
			}
		};
		return false;
	}
};

var PopupNotification = {
	create: function(elem, content, url, imgCross, reuseBalloon) {
		elem = $(elem);
		if (elem.balloon) reuseBalloon = elem.balloon;
		if (reuseBalloon) {
			elem.balloon = reuseBalloon;
			$(reuseBalloon).select("div.message").each(function(msg) {
				msg.update(content);
			});
		} else {
			if (elem.balloon) elem.balloon.remove();
			elem.balloon = $(document.createElement("div")).addClassName("notification");
			elem.balloon.setStyle({display: "none"});
			var msg = $(document.createElement("div")).addClassName("message");
			msg.onclick = function() {
				if (elem.balloon) {
					if (url) {
						location.href = url;
					} else {
						elem.balloon.remove();
						elem.balloon = null;
					}
				}
			};
			msg.update(content);
		}
		if (imgCross) {
			var imgClose = $(document.createElement("img")).setStyle({float: "right", paddingLeft: "10px"});
			imgClose.src = imgCross;
			imgClose.onclick = function() {
				elem.balloon.remove();
				elem.balloon = null;
				return false;
			};
			msg.insert({top: imgClose});
		}
		if (!reuseBalloon) {
			elem.balloon.appendChild(msg);
			document.body.appendChild(elem.balloon);
		}
		var pos = elem.cumulativeOffset();
		elem.balloon.setStyle({left: (pos.left - Math.floor((elem.balloon.getWidth() - elem.getWidth()) / 2)) + "px", top: (pos.top - elem.balloon.getHeight()) + "px", display: "block"});
		return elem.balloon;
	}
};
