// include slick.js
// include common.js
// include datetime.js
//
// CSS Includes:
// technical.css
// calendar.css

var g_bCalendar = false;
var g_dtStart = new Date();
var g_aMonths = new Array(12);
var g_aDays = new Array(12);
var g_aDowNames2 = new Array(7);
var g_sDateSelector = 'setDate';
var m_bFuture = true;

	g_aMonths[0] = 'January';
	g_aMonths[1] = 'February';
	g_aMonths[2] = 'March';
	g_aMonths[3] = 'April';
	g_aMonths[4] = 'May';
	g_aMonths[5] = 'June';
	g_aMonths[6] = 'Jule';
	g_aMonths[7] = 'August';
	g_aMonths[8] = 'September';
	g_aMonths[9] = 'October';
	g_aMonths[10] = 'November';
	g_aMonths[11] = 'December';
	
	g_aDays[0] = 31;
	g_aDays[1] = 28;
	g_aDays[2] = 31;
	g_aDays[3] = 30;
	g_aDays[4] = 31;
	g_aDays[5] = 30;
	g_aDays[6] = 31;
	g_aDays[7] = 31;
	g_aDays[8] = 30;
	g_aDays[9] = 31;
	g_aDays[10] = 30;
	g_aDays[11] = 31;
	
	g_aDowNames2[0] = 'Mo';
	g_aDowNames2[1] = 'Tu';
	g_aDowNames2[2] = 'We';
	g_aDowNames2[3] = 'Th';
	g_aDowNames2[4] = 'Fr';
	g_aDowNames2[5] = 'Sa';
	g_aDowNames2[6] = 'Su';

function setDateSelector (s)
{
	if (!good(s)) return;
	if (s == '') return;
	g_sDateSelector = s;
}

function ensureCalendar ()
{
	if (calendarExists()) return;
	
var div = document.createElement('DIV');
	div.className = 'calendarWrapper';
	div.style.display = 'none';
	div.id = 'calendarWrapper';
	
var tab = document.createElement('TABLE');
	tab.cellPadding = 0;
	tab.cellSpacing = 0;
	tab.className = 'calendarTable';
	tab.id = 'calendar';
	div.appendChild(tab);
	
var tbody = document.createElement('TBODY');
	tab.appendChild(tbody);

var tr = document.createElement('TR');
	tr.className = 'vaTop';
	tr.id = 'calhead1';
	
var td = document.createElement('TD');
	td.className = 'monthComboCell';
	td.colSpan = 4;
	tr.appendChild(td);
	
var cbx = document.createElement('SELECT');
	cbx.className = 'monthCombo';
	cbx.id = 'month';
	cbx.onchange = monthChanged;
	cbx.onmouseover = keepCalendar;
	cbx.onmouseout = keepCalendar;
	td.appendChild(cbx);
	
	td = document.createElement('TD');
	td.className = 'yearComboCell';
	td.colSpan = 3;
	tr.appendChild(td);
	
	cbx = document.createElement('SELECT');
	cbx.className = 'yearCombo';
	cbx.id = 'year';
	cbx.onchange = yearChanged;
	cbx.onmouseover = keepCalendar;
	cbx.onmouseout = keepCalendar;
	td.appendChild(cbx);

	tbody.appendChild(tr);
	
	tr = document.createElement('TR');
	tr.className = 'vaTop';
	tr.id = 'calhead2';
	
	td = document.createElement('TD');
	td.className = 'calendarCH';
	td.appendChild(document.createTextNode(g_aDowNames2[0]));
	tr.appendChild(td);
	
	td = document.createElement('TD');
	td.className = 'calendarCH';
	td.appendChild(document.createTextNode(g_aDowNames2[1]));
	tr.appendChild(td);
	
	td = document.createElement('TD');
	td.className = 'calendarCH';
	td.appendChild(document.createTextNode(g_aDowNames2[2]));
	tr.appendChild(td);
	
	td = document.createElement('TD');
	td.className = 'calendarCH';
	td.appendChild(document.createTextNode(g_aDowNames2[3]));
	tr.appendChild(td);
	
	td = document.createElement('TD');
	td.className = 'calendarCH';
	td.appendChild(document.createTextNode(g_aDowNames2[4]));
	tr.appendChild(td);
	
	td = document.createElement('TD');
	td.className = 'calendarCH';
	td.appendChild(document.createTextNode(g_aDowNames2[5]));
	tr.appendChild(td);
	
	td = document.createElement('TD');
	td.className = 'calendarCH';
	td.appendChild(document.createTextNode(g_aDowNames2[6]));
	tr.appendChild(td);
	
	tbody.appendChild(tr);
	
	div.onmouseover = calendarInbound;
	div.onmouseout = calendarOutbound;
	document.body.appendChild(div);
}

function initCalendarFromFutureDate (dtFrom,dt,iRange)
{
	m_bFuture = (iRange >= 0);
	ensureCalendar();

var dtNow = new Date();
var dt1 = (compareDates(dtNow,dtFrom) < 0)?dtNow:dtFrom;
	initMonthCombo(dt);
	initYearCombo(dt1,dt,iRange);
	initLines(dt1,dt);
	g_dtStart = dt1;
}

function initCalendarFromDate (dtFrom,dtMust,iRange)
{
	m_bFuture = (iRange >= 0);
	ensureCalendar();
	initMonthCombo(dtMust);
	initYearCombo(dtFrom,dtMust,iRange);
	initLines(dtFrom,dtMust);
	g_dtStart = dtFrom;
}

function initCalendar (dtMust,iRange)
{
	initCalendarFromDate(new Date(),dtMust,iRange);
}

function initCalendarToday (iRange)
{
var dtMust = new Date();
	initCalendar(dtMust,iRange);
}

function initMonthCombo (dt)
{
var month = document.getElementById('month');
var iMonth = dt.getMonth();
	clearCombo('month');
	for (var i = 0; i < 12; i++)
	{
	var opt = document.createElement('OPTION');
		opt.value = i;
		opt.selected = (i == iMonth);
		opt.appendChild(document.createTextNode(g_aMonths[i]));
		month.appendChild(opt);
	}
}

/*
dtFrom - from date
dtMust - date that must be reflected reflect
range - year range, integer (can be negative or zero too)
*/
function initYearCombo (dtFrom,dtMust,iRange)
{
var year = document.getElementById('year');
var iYearFrom = dtFrom.getFullYear();
var iYearMust = dtMust.getFullYear();
var iYearRange = iYearFrom + iRange;
	clearCombo('year');

	if ((iRange < 0) && (iYearMust > iYearFrom))
	{
	var opt = document.createElement('OPTION');
		opt.value = iYearMust;
		opt.selected = true;
		opt.appendChild(document.createTextNode(iYearMust));
		year.appendChild(opt);
	}
	else if ((iRange >= 0) && (iYearMust < iYearFrom))
	{
	var opt = document.createElement('OPTION');
		opt.value = iYearMust;
		opt.selected = true;
		opt.appendChild(document.createTextNode(iYearMust));
		year.appendChild(opt);
	}

	if (iRange >= 0)
	{
		for (var i = iYearFrom; i < iYearRange; i++)
		{
		var opt = document.createElement('OPTION');
			opt.value = i;
			opt.selected = (i == iYearMust);
			opt.appendChild(document.createTextNode(i));
			year.appendChild(opt);
		}
	}
	else
	{
		for (var i = iYearFrom; i > iYearRange; i--)
		{
		var opt = document.createElement('OPTION');
			opt.value = i;
			opt.selected = (i == iYearMust);
			opt.appendChild(document.createTextNode(i));
			year.appendChild(opt);
		}
	}
	
	if ((iRange < 0) && (iYearMust <= iYearRange))
	{
	var opt = document.createElement('OPTION');
		opt.value = iYearMust;
		opt.selected = true;
		opt.appendChild(document.createTextNode(iYearMust));
		year.appendChild(opt);
	}
	else if ((iRange >= 0) && (iYearMust >= iYearRange))
	{
	var opt = document.createElement('OPTION');
		opt.value = iYearMust;
		opt.selected = true;
		opt.appendChild(document.createTextNode(iYearMust));
		year.appendChild(opt);
	}
}

/*
dtNow - is actually "from date"
dt - is the date that must be reflected reflect
*/
function initLines (dtNow,dt)
{
var cal = document.getElementById('calendar');
var tbody = getTBody(cal);
var cnt = tbody.childNodes.length;
	for (var i = cnt - 1; i >=0; i--)
	{
	var row = tbody.childNodes[i];
		if ((row.id != 'calhead1') && (row.id != 'calhead2'))
			tbody.removeChild(row);
	}
	
var iDays = g_aDays[dt.getMonth()];
	if (isFebruary(dt.getMonth()) && isLeapYear(dt.getFullYear())) iDays++;
	
var dt1 = new Date(dt.getFullYear(),dt.getMonth(),1);
var iWeekDay = dt1.getDay();
	if (iWeekDay == 0)
		iWeekDay = 6;
	else
		iWeekDay--;
	
var dtRealNow = new Date();
var i = 1;
	while (i <= iDays)
	{
	var tr = document.createElement('TR');
		tr.className = 'vaTop';
		tbody.appendChild(tr);
	
		for (var j = 0; j < 7; j++)
		{
			if (j < iWeekDay)
			{
			var td = document.createElement('TD');
				tr.appendChild(td);
				continue;
			}

			if (i <= iDays)
			{
			var currdt = new Date(dt.getFullYear(),dt.getMonth(),i);
			var td = document.createElement('TD');
				tr.appendChild(td);
				
			var cmp = compareDates(currdt,dtNow);
				if (!m_bFuture) cmp *= -1;
				if (cmp > 0)
					td.className = 'calendarCell2';
				else
					td.className = 'calendarCell';
					
				if (compareDates(currdt,dtRealNow) == 0)
					td.style.backgroundColor = '#EEE8AA';
					
				if (cmp <= 0)
				{
				var dtlnk = document.createElement('A');
					dtlnk.appendChild(document.createTextNode(i));
					dtlnk.href = 'javascript:' + g_sDateSelector + '(' + dt.getFullYear() + ',' + dt.getMonth() + ',' + i + ')';
					td.appendChild(dtlnk);
				}
				else
				{
					td.appendChild(document.createTextNode(i));
				}
					
				i++;
			}
			else
			{
			var td = document.createElement('TD');
				tr.appendChild(td);
			}
		}
		iWeekDay = 0;
	}
}

function calendarInbound ()
{
	g_bCalendar = true;
}

function calendarOutbound ()
{
	g_bCalendar = false;
}

function keepCalendar ()
{
	g_bCalendar = true;
}

function yearChanged ()
{
	g_bCalendar = true;
	mmyyyy_change();
	g_bCalendar = true;
}

function monthChanged ()
{
	g_bCalendar = true;
	mmyyyy_change();
	g_bCalendar = true;
}

function mmyyyy_change ()
{
var month = parseInt(document.getElementById('month').value);
var year = parseInt(document.getElementById('year').value);
var dt = new Date(year,month,1);
	initLines(g_dtStart,dt);
}

function showCalendar (x,y)
{
var cal = document.getElementById('calendarWrapper');
	cal.style.position = 'absolute';
	cal.style.display = '';
	cal.style.left = x + 'px';
	cal.style.top = y + 'px';
	g_bCalendar = true;
}

function calendarExists ()
{
var div = document.getElementById('calendarWrapper');
	return good(div);
}

function calendarActivated ()
{
var cal = document.getElementById('calendarWrapper');
	if (!good(cal)) return false;
	return (cal.style.display != 'none');
}

function hoveringOverCalendar ()
{
	return g_bCalendar;
}

function hideCalendar ()
{
	document.getElementById('calendarWrapper').style.display = 'none';
	g_bCalendar = false;
}

