// ===================================================================
// Inspired by http://calendar.swazz.org/
// ===================================================================

// Calendar script
var calendar=new Object();

var calvalarr = new Array(42);

	// Start draw empty calendar table
	document.write(
		'<table id="calendar" style="display: none;" >' +
		'<thead><tr>' +
			'<th onclick="previous_month()"><img border="0" src="/orario/freccia-sinistra.gif"></th>' +
			'<th colspan="5" id="top_date"></th>' +
			'<th onclick="next_month()"><img border="0" src="/orario/freccia-destra.gif"></th>' +
		'</tr></thead>' +
			'<tr>');
	if (startDay == 'Sun') {
		for (var kk=0; kk<=6; kk++) {
			document.write('<th>' + dayNames[kk].substring(0, 2) + '</th>');
		}
	}
	else if (startDay == 'Mon')	{
		for (var kk=1; kk<=7; kk++) {
			document.write('<th>' + dayNames[(kk == 7 ? 0 : kk)].substring(0, 2) + '</th>');
		}
	}
	document.write('</tr>');

	for (var kk=1; kk<=6; kk++) {
		document.write('<tr>');
		for(var tt=1; tt<=7; tt++)
		{
			var num = 7 * (kk-1) - (-tt);
			document.write('<td id="v' + num + '">&nbsp;</td>');
		}
		document.write('</tr>');
	}
	// End draw calendar table
	document.write('</table>');

function showCalendar(input_id) {


	calendar.date = actual_date(); // actual date
	calendar.display = actual_date() // internal date of displayed calendar
	calendar.input = new Array(3); // date from input filed

	calendar.inputObject = getObj(input_id); // objekt input
	calendar.tableObject = getObj('calendar'); // objekt calendar table
	var Position = getAnchorPosition(input_id); // zjisti pozici inputu

	// umisti tabulku kalendare na souradnice pod input
	calendar.tableObject.style.left = Position.x + 1 + "px";
	calendar.tableObject.style.top = Position.y + 1 + calendar.inputObject.offsetHeight + "px";

	//calendar.tableObject.style.top += calendar.inputObject.offsetHeight + "px";
	calendar.tableObject.style.display = '';

	// First check date is valid
	calendar.input = jsParseDate (dateFormat, calendar.inputObject.value);
	if (calendar.input) calendar.display = copyObj(calendar.input); // set display date from input
	else calendar.display = copyObj(calendar.date); // datum inputu neni platne, vykreslime aktualni kalendar

	fillCalendar(calendar.display[1], calendar.display[0]);

	 // vyrusi prvni kliknuti na odkaz, aby se nezavrel kalendar
	document.all ? document.attachEvent('onclick', checkClick) : document.addEventListener('click', checkClick, false);
}

function fillCalendar(month, year) {
	var days_in_past = false; // calendar display past days overlined
	var is_today = false; // calendar display actual day with extra background
	var is_selected = false; // select day from input into calendar

	var last_day = parseInt(jsDate('t', calendar.display)); // last day in month
	// set first day in month and get his day in week
	var day_in_week = new Date();
	day_in_week.setFullYear(year,month,1); // Set first day in month
	day_in_week = day_in_week.getDay(); // 0 = sunday, 1 = monday etc..

	// posun dne v tydnu pokud ma tyden zacinat pondelim
	if (startDay == 'Mon') {
		day_in_week--;
		if (day_in_week < 0) day_in_week = 6;
	}

	getObj('top_date').innerHTML = jsDate('M Y', calendar.display).toUpperCase();

	var tmp_day = 0;
	for (var position=1; position<=42; position++)
	{
		var cell = getObj('v' + parseInt(position));

		tmp_day = position - day_in_week; // we must calculate day from difference between cell position and day in week
		if (position >= day_in_week +1 && position <= day_in_week + last_day)
		{
			days_in_past = disablePast && (tmp_day < calendar.date[2]) && (month == calendar.date[1]) && (year == calendar.date[0]);
			// set variable true or false
			is_today = (tmp_day == calendar.date[2] && month == calendar.date[1] && year == calendar.date[0]);
			is_selected = (calendar.input && tmp_day == calendar.input[2] && month == calendar.input[1] && year == calendar.input[0]);

			if (days_in_past) // den v minulosti
				cell.className = 'old';
			else if (is_selected)
				cell.className = 'selected';
			else if (is_today)
				cell.className = 'today';
			else // normalni den
				cell.className = '';

			cell.onclick = (days_in_past) ? null : cs_click; // when onclick action detected on cell witch day, copy them to input
			cell.innerHTML = tmp_day; // display day in cell

			// postupne naplni calvararr vsemi datumy v mesici podle formatu napr. array(,,1.1.2008,2.1.2008,3.1.2008 atd..)
			calvalarr[position] = jsDate(dateFormat, [year,month,tmp_day]);
		}
		else
		{
			cell.onclick = null; // we must clear onlick action assigned to element by previous month
			cell.innerHTML = '&nbsp'; // clear day in cell, doesnt matter if exists or not
			cell.className = 'none';
		}
	}
}

function copyObj (obj) {
    var objCopy = {};
    for (var i in obj) {
        objCopy[i] = obj[i];
    };
    return objCopy;
};

function getObj(objID)
{
	var obj;
	if (document.getElementById) obj = document.getElementById(objID);
	else if (document.all) obj = document.all[objID];
	else if (document.layers) obj = document.layers[objID];
	return obj;
}

function checkClick(e) {
	var evt = e ? e : event;
	evt = evt.target ? evt.target : evt.srcElement;

	while (evt.parentNode) {
		if (evt == calendar.tableObject) return;
		evt = evt.parentNode;
	}
	calendar.tableObject.style.display = 'none';
}

function evtTgt(e) {
	var el;
	if (e.target) el = e.target;
	else if (e.srcElement) el = e.srcElement;
	if (el.nodeType==3) el = el.parentNode; // defeat Safari bug
	return el;
}

function EvtObj(e) {
	if (!e) e = window.event;
	return e;
}

function cs_click(e) {
	//alert(evtTgt(EvtObj(e)).id);
	calendar.inputObject.value = calvalarr[ evtTgt(EvtObj(e)).id.substring(1, evtTgt(EvtObj(e)).id.length) ];
	calendar.tableObject.style.display = 'none';
}

function actual_date() // return array(year,month,day)
{
	var date = new Date();
	return [date.getFullYear(),date.getMonth(),date.getDate()];
}

function previous_year() {
	// var endday = ( !(ccy%4) && ccy%100 || !(ccy%400) ) ? leap_year : normal_year;

	calendar.display[0]--;
	fillCalendar(calendar.display[1],calendar.display[0]);
}

function next_year() {
	// var endday = ( !(ccy%4) && ccy%100 || !(ccy%400) ) ? leap_year : normal_year;
	calendar.display[0]++;
	fillCalendar(calendar.display[1],calendar.display[0]);
}

function previous_month() {
	// var endday = ( !(ccy%4) && ccy%100 || !(ccy%400) ) ? leap_year : normal_year;
	calendar.display[1]-=1;
	if (calendar.display[1]<0) {
		calendar.display[1]=11;
		calendar.display[0]--;
	}
	cdayf();
	fillCalendar(calendar.display[1],calendar.display[0]);
}

function next_month() {
	// var endday = ( !(ccy%4) && ccy%100 || !(ccy%400) ) ? leap_year : normal_year;

	calendar.display[1]+=1;
	if (calendar.display[1]>=12) {
		calendar.display[1]=0;
		calendar.display[0]++;
	}
	cdayf();
	fillCalendar(calendar.display[1],calendar.display[0]);
}

function cdayf() {
	if (!disablePast || (calendar.display[0] > calendar.date[0] || (calendar.display[0] == calendar.date[0] && calendar.display[1] >= calendar.date[1]))) return;
	else {
		calendar.display[0] = calendar.date[0];
		calendar.display[1] = calendar.date[1];
		calendar.display[2] = calendar.date[2];
	}
}

