var calendar = null; // remember the calendar object so that we reuse
var divShow = null;
// it and avoid creating another

// This function gets called when an end-user clicks on some date
function selected(cal, date) {

	var date_arr = date.split('-');
	date = (parseInt(date_arr[0]) - parseInt(Calendar._TT["DIFF_YEAR"])) + '-' + date_arr[1] + '-' + date_arr[2]

	cal.sel.value = date; // just update the value of the input field

	if(document.getElementById(divShow)) {
		//var date_str = parseFloat(date_arr[2]) + ' ' +Calendar._MN[parseFloat(date_arr[1])-1]+ ' ' + (parseInt(date_arr[0])+parseInt(Calendar._TT["DIFF_YEAR"]));
		var date_str = parseFloat(date_arr[2]) + ' ' +Calendar._MN[parseFloat(date_arr[1])-1]+ ' ' + date_arr[0];

		if(document.getElementById(divShow).type == 'text') {
			document.getElementById(divShow).value = date_str;
		} else {
			document.getElementById(divShow).innerHTML = date_str;
		}
	}
	if (cal.dateClicked) cal.callCloseHandler();
	calendar = null;
}

// And this gets called when the end-user clicks on the _selected_ date,
// or clicks the "Close" (X) button.  It just hides the calendar without
// destroying it.
function closeHandler(cal) {
	cal.hide();			// hide the calendar
	calendar = null;

	// don't check mousedown on document anymore (used to be able to hide the
	// calendar when someone clicks outside it, see the showCalendar function).
	Calendar.removeEvent(document, "mousedown", checkCalendar);
}

// This gets called when the user presses a mouse button anywhere in the
// document, if the calendar is shown.  If the click was outside the open
// calendar this function closes it.
function checkCalendar(ev) {
	var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);
	for (; el != null; el = el.parentNode)
	// FIXME: allow end-user to click some link without closing the
	// calendar.  Good to see real-time stylesheet change :)
	if (el == calendar.element || el.tagName == "A") break;
	if (el == null) {
		// calls closeHandler which should hide the calendar.
		calendar.callCloseHandler(); Calendar.stopEvent(ev);
	}
}

// This function shows the calendar under the element having the given id.
// It takes care of catching "mousedown" signals on document and hiding the
// calendar if the click was outside.
function showCalendar(id, mode, showTime) {
	divShow = 'div_'+id;
	var el = document.getElementById(id);
	if (calendar != null) {
		// we already have one created, so just update it.
		calendar.hide();		// hide the existing calendar
	} else {
		// first-time call, create the calendar
		var cal = new Calendar(true, null, selected, closeHandler);
		calendar = cal;		// remember the calendar in the global
		if (mode == 'Before')
		{
			cal.setDisabledHandler(DisableBefore);
		} else if (mode == 'After') {
			cal.setDisabledHandler(DisableAfter);
		}
		
		if (showTime) {
			cal.showsTime = true;
			cal.time24 = true;
		}

		cal.setRange(1900, 2070);	// min/max year allowed
		calendar.create();		// create a popup calendar
	}
	calendar.parseDate(el.value); // set it to a new date
	calendar.sel = el;		// inform it about the input field in use
	calendar.showAtElement(el);	// show the calendar next to the input field
	
	// catch mousedown on the document
	Calendar.addEvent(document, "mousedown", checkCalendar);
	return false;
}

var MINUTE = 60 * 1000;
var HOUR = 60 * MINUTE;
var DAY = 24 * HOUR;
var WEEK = 7 * DAY;

function DisableBefore(date) {
	var today = new Date();
	return date.getTime() > today.getTime();
}

function DisableAfter(date) {
	var today = new Date();
	today.setDate(today.getDate()-1);
	return date.getTime() < today.getTime();
}