

var elementToBeUpdatedByCalendar;

function showCalendar(id) {
	elementToBeUpdatedByCalendar = document.getElementById(id);
	if (!elementToBeUpdatedByCalendar) {
		return false;
	}

	var calendar = document.getElementById('calendar');
	if (!calendar) {
		calendar = document.createElement('div');
		calendar.id = 'calendar';
		calendar.style.position = 'absolute';
		calendar.style.display = 'none';
		document.body.insertBefore(calendar, document.body.childNodes[0]);
	}

	refreshCalendar(elementToBeUpdatedByCalendar.value);
}

function refreshCalendar(date) {
	if ($('#calendar').length == 0 || (!elementToBeUpdatedByCalendar)) { return false; }
	if (typeof(baseUrl) == 'undefined') {
		url = '/generate_calendar_inline.php';
	} else {
		url = baseUrl + 'generate_calendar_inline.php';
	}
	$('#calendar').load(url + '?date=' + date, function() {
		$('#calendar').css({
			left: findPosX(elementToBeUpdatedByCalendar) + 'px', 
			top: (findPosY(elementToBeUpdatedByCalendar) + elementToBeUpdatedByCalendar.offsetHeight) + 'px'
		}).show();
	});
}

function selectCalendarDate(date) {
	hideCalendar();
	if (elementToBeUpdatedByCalendar) {
		elementToBeUpdatedByCalendar.value = date;
	}
	hideCalendar();
}

function hideCalendar() {
	$('#calendar').hide();
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y)
		curtop += obj.y;
	return curtop;
}
