var eventCalendar = function() {
	var that = {};
	var frozen = false;
	var display = function(e) {
		if (cvhUtils.checkMouseMove(e, this)) {
			var data = this.getElementsByTagName('span')[0];
			if (data && data.getElementsByTagName('h5')[0]) {
				popup.innerHTML = data.innerHTML;
				var curX = 0;
				var curY = 0;
				var element = this;
				while (element.offsetParent.nodeName.toLowerCase() != 'table') {
					curX += element.offsetLeft;
					curY += element.offsetTop;
					element = element.offsetParent;
				}
				curX += element.offsetLeft;
				curY += element.offsetTop;
				popup.style.left = curX+10+'px';
				popup.style.top = curY+30+'px';
				popup.style.display = 'block';
			}
		}
	}
	var startHide = function(e) {
		if (cvhUtils.checkMouseMove(e, this)) {
			window.setTimeout(hide, 3000);
		}
	}
	var hide = function() {
		if (!frozen) {
			popup.style.display = 'none';
		} else {
			window.setTimeout(hide, 3000);
		}
	}
	var freeze = function(e) {
		if (cvhUtils.checkMouseMove(e, this)) {
			frozen = true;
		}
	}
	var unfreeze = function(e) {
		if (cvhUtils.checkMouseMove(e, this)) {
			frozen = false;
		}
	}
	// init
	var mainDiv = document.getElementById('calendar_outer');
	var cells = mainDiv.getElementsByTagName('td');
	for (var i = 0; i < cells.length; i++) {
		if (cells[i].className.indexOf('day') != -1) {
			var cell = cells[i];
			cell.onmousemove = display;
			cell.onmouseout = startHide;
		}
	}
	var popup = document.createElement('div');
	popup.className = 'event_data';
	popup.style.display = 'none';
	popup.style.position = 'absolute';
	popup.style.zIndex = 100;
	popup.onmousemove = freeze;
	popup.onmouseout = unfreeze;
	mainDiv.appendChild(popup);
	return that;
};
