//############################################################
//# CALENDAR
//############################################################

var selecteddate = new Date();
var currentdate = new Date();
var comparedate = new Date();
var maxdate = new Date();
var mindate = new Date();
var rolloverobj = null;
var dateformname = "";
var datefieldname = "";
var ondateselect = false;

addEventListener(window,"load",initcalendar);

function initcalendar() {
	var calendar = document.createElement("div");
	var calendarHTML = "";
	calendar.id = "calendar";
	calendar.style.position = "absolute";
	calendar.style.zIndex = "10";
	calendar.style.top= "0";
	calendar.style.left = "0";
	calendar.style.display = "none";
	calendarHTML = calendarHTML +
		"<table class=\"calendar\" cellspacing=\"1\">" +
		"<tr>" +
		"<td class=\"calendar_button\" onMouseOver=\"this.className='calendar_button_over';\" onMouseOut=\"this.className='calendar_button';\" onClick=\"prevmonth();\">" +
		"<p>&lt;</p>" +
		"</td>" +
		"<td class=\"calendar_header\" onClick=\"hidecalendar();\" colspan=\"5\">" +
		"<p id=\"calendar_header\"></p>" +
		"</td>" +
		"<td class=\"calendar_button\" onMouseOver=\"this.className='calendar_button_over';\" onMouseOut=\"this.className='calendar_button';\" onClick=\"nextmonth();\">" +
		"<p>></p>" +
		"</td>" +
		"</tr>" +
		"<tr>" +
		"<td class=\"calendar_weekday\">" +
		"<p>S</p>" +
		"</td>" +
		"<td class=\"calendar_weekday\">" +
		"<p>M</p>" +
		"</td>" +
		"<td class=\"calendar_weekday\">" +
		"<p>T</p>" +
		"</td>" +
		"<td class=\"calendar_weekday\">" +
		"<p>W</p>" +
		"</td>" +
		"<td class=\"calendar_weekday\">" +
		"<p>T</p>" +
		"</td>" +
		"<td class=\"calendar_weekday\">" +
		"<p>F</p>" +
		"</td>" +
		"<td class=\"calendar_weekday\">" +
		"<p>S</p>" +
		"</td>" +
		"</tr>";
	for (w=0; w<6; w++) {
		calendarHTML = calendarHTML + "<tr>"
		for (d=0; d<7; d++) {
			calendarHTML = calendarHTML + "<td class=\"calendar_day\" id=\"day_" + (parseInt(7 * w) + parseInt(d + 1)) + "\"></td>";
		}
		calendarHTML = calendarHTML + "</tr>"
	}
	calendarHTML = calendarHTML + "</table>"
	calendar.innerHTML = calendarHTML;
	document.body.appendChild(calendar);
	updatecalendar(currentdate.getYear(),currentdate.getMonth());
}

function showcalendar(_img,_fieldname) {
	var _x = getoffsetx(_img);
	var _y = getoffsety(_img);
	var _field = document.getElementsByName(_fieldname)[0];
	var _form = getformobj(_field);
	var windowwidth = document.body.offsetWidth ? document.body.offsetWidth : window.innerWidth;
	dateformname = _form.name;
	datefieldname = _field.name;
	maxdate = new Date("12/31/3000");
	mindate = new Date("1/1/1900");
	if (isdate(_field.value)) {
		selecteddate = new Date(_field.value);
	}
	updatecalendar(currentdate.getYear(),currentdate.getMonth());
	document.getElementById("calendar").style.top = _y;
	if ((_x + 182) > windowwidth) {
		_x = _x - 159;
	}
	_setopacity(document.getElementById("calendar"),100);
	document.getElementById("calendar").style.left = _x + 1;
	document.getElementById("calendar").style.display = "block";
	//_fadein("calendar");
	var select = document.getElementsByTagName("SELECT");
	for (i=0;i<select.length;i++) {
		select[i].style.visibility = "hidden";
	}
}

function nextmonth() {
	var nextmonth = new Date(currentdate.getYear(), currentdate.getMonth() + 1, 1);
	if (nextmonth.getYear() < 1900) {
		updatecalendar(nextmonth.getYear() + 1900,nextmonth.getMonth());
	} else {
		updatecalendar(nextmonth.getYear(),nextmonth.getMonth());
	}
}

function prevmonth() {
	var prevmonth = new Date(currentdate.getYear(),currentdate.getMonth() - 1,1);
	if (prevmonth.getYear() < 1900) {
		updatecalendar(prevmonth.getYear() + 1900,prevmonth.getMonth());
	} else {
		updatecalendar(prevmonth.getYear(),prevmonth.getMonth());
	}
}

function updatecalendar(y,m) {
	if (y < 1900) {
		y = y + 1900;
	}
	currentdate = new Date(y,m,1);
	document.getElementById("calendar_header").innerHTML = monthname[m] + " " + y;
	for (i=1; i<=42; i++) {
		eval("document.getElementById('day_" + i + "').innerHTML = ''");
		eval("document.getElementById('day_" + i + "').className = 'calendar_day'");
		eval("removeEventListener(document.getElementById('day_" + i + "'),'mouseover',rolloverday)");
		eval("removeEventListener(document.getElementById('day_" + i + "'),'mouseout',rolloutday)");
		eval("removeEventListener(document.getElementById('day_" + i + "'),'click',selectday)");
	}
	for (i=1; i<=42; i++) {
		if (i <= daysinmonth(currentdate.getYear(),currentdate.getMonth())) {
			comparedate = new Date(currentdate.getYear(),currentdate.getMonth(),i);
			eval("document.getElementById('day_" + (i + currentdate.getDay()) + "').innerHTML = '<p>" + i + "</p>'");
			if (selecteddate.getTime() == comparedate.getTime() && selecteddate.getDate() == comparedate.getDate() && selecteddate.getMonth() == comparedate.getMonth() && selecteddate.getYear() == comparedate.getYear()) {
				eval("document.getElementById('day_" + (i + currentdate.getDay()) + "').className = 'calendar_day_selected'");
				eval("document.getElementById('day_" + (i + currentdate.getDay()) + "').getElementsByTagName('P')[0].style.fontWeight = 'bold'");
			} else if (!withinrange(mindate,maxdate,comparedate)) {
				eval("document.getElementById('day_" + (i + currentdate.getDay()) + "').className = 'calendar_day'"); //ADD STYLE DISABLED
			} else {
				eval("document.getElementById('day_" + (i + currentdate.getDay()) + "').className = 'calendar_day'");
				eval("addEventListener(document.getElementById('day_" + (i + currentdate.getDay()) + "'),'mouseover',rolloverday)");
				eval("addEventListener(document.getElementById('day_" + (i + currentdate.getDay()) + "'),'mouseout',rolloutday)");
				eval("addEventListener(document.getElementById('day_" + (i + currentdate.getDay()) + "'),'click',selectday)");
			}
		}
	}
}

function rolloverday(e) {
	var e = e ? e : window.event;
	var obj = e.target ? e.target : e.srcElement;
	while (obj.tagName != "TD") {
		obj = obj.parentElement;
	}
	obj.style.cursor = "hand";
	obj.className = "calendar_day_rollover";
	rolloverobj = obj;
}

function rolloutday(e) {
	rolloverobj.className = "calendar_day";
}

function selectday(e) {
	var datevalue = currentdate.getMonth() + 1 + "/" + rolloverobj.getElementsByTagName("P")[0].innerHTML + "/" + currentdate.getYear();
	eval("document.forms." + dateformname + "." + datefieldname + ".value = '" + datevalue + "'");
	if (ondateselect) {
		dateselected(datevalue);
	}
	hidecalendar();
}

function hidecalendar() {
	//document.getElementById("calendar").style.display = "none";
	_fadeout("calendar");
	var select = document.getElementsByTagName("SELECT");
	for (i=0;i<select.length;i++) {
		select[i].style.visibility = "visible";
	}
}