var kalendar = new calendar('kalendar',new Date());
var editovane_datum = '';

//Constructor
function calendar(id,d){
	this.id = id;
	this.dateObject = d;
	this.write = writecalendar;
	this.length = getLength;
	this.month = d.getMonth();
	this.date = d.getDate();
	this.day = d.getDay();
	this.year = d.getFullYear();
	this.getFormattedDate = getFormattedDate;
	//get the first day of the month's day
	d.setDate(1);
	// tohle jsem nastavil ja abych posunul pondeli do prvniho sloupecku
	if (d.getDay() == 0) {this.firstDay = 6} else {this.firstDay = d.getDay() - 1}
	// takhle o bylo nastaveny puvodne
	//this.firstDay = d.getDay() - 1;
	//then reset the date object to the correct date
	d.setDate(this.date);
}

var days = new Array('Monday','Tuesday','Wednsday','Thursday','Friday','Saturday','Sunday');
var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

function getFormattedDate(){
	return this.date + ' ' + months[this.month].substring(0,3) + ' ' + this.year;
}

function writecalendar(){
	//var calString = '<div id="calContainer">';
	var calString = '';
	calString += '<table cellpadding="0" cellspacing="0" class="cal-table">';
	calString += '<tr><td colspan="7" class="cal-month">' + months[this.month] + ', ' + this.year + '</td></tr>';
	
	calString += '<tr><td colspan="7">';
	calString += '<table cellpadding="0" cellspacing="2" class="cal-table-days">';
	
	calString += '<tr class="cal-day-name">';
	
	for(i=0;i<days.length;i++){
		calString += '<td>' + days[i].substring(0,2) + '</td>';
	}
	
	calString += '</tr><tr>';
	for(j=0;j<42;j++){
		var displayNum = (j-this.firstDay+1);
		if(j<this.firstDay){
			//write the leading empty cells
			calString += '<td class="cal-empty">&nbsp;</td>';
		}else if(displayNum==this.date){
			if (j%7==6 || j%7==5) {
				calString += '<td id="' + this.id +'selected" class="cal-weekend cal-selected" onClick="javascript:changeDate(this)">' + displayNum + '</td>';
			}
			else {
				calString += '<td id="' + this.id +'selected" class="cal-workday cal-selected" onClick="javascript:changeDate(this)">' + displayNum + '</td>';
			}
		}else if(displayNum > this.length()){
			//Empty cells at bottom of calendar
			calString += '<td class="cal-empty">&nbsp;</td>';
		}else{
			//the rest of the numbered cells
			if (j%7==6 || j%7==5) {
				calString += '<td class="cal-weekend" onClick="javascript:changeDate(this)">' + displayNum + '</td>';
			}
			else {
				calString += '<td class="cal-workday" onClick="javascript:changeDate(this)">' + displayNum + '</td>';
			}
		}
		if(j%7==6){
			calString += '</tr><tr>';
		}
	}
	calString += '</tr></table></td></tr>';
	//write the nav row

	calString += '<tr><td colspan="7" class="cal-nav"><table cellpadding="0" cellspacing="0"><tr>';
	calString += '<td onClick="changeMonth(-12)" style="cursor: hand;">&lt;Y</td>';
	calString += '<td onClick="changeMonth(-1)" style="cursor: hand;">&lt;M</td>';
	calString += '<td colspan="3" style="width: 86px;" onClick="document.getElementById(\'calContainer\').style.display = \'none\';" style="cursor: hand;">close</td>';
	calString += '<td onClick="changeMonth(1)" style="cursor: hand;">M&gt;</td>';
	calString += '<td onClick="changeMonth(12)" style="cursor: hand;">Y&gt;</td>';
	calString += '</tr></table></td></tr>';

	calString += '</table>';
	//calString += '</div>';
	return calString;
}

function getLength(){
	//thirty days has September...
	switch(this.month){
		case 1:
			if((this.dateObject.getFullYear()%4==0&&this.dateObject.getFullYear()%100!=0)||this.dateObject.getFullYear()%400==0)
				return 29; //leap year
			else
				return 28;
		case 3:
			return 30;
		case 5:
			return 30;
		case 8:
			return 30;
		case 10:
			return 30
		default:
			return 31;
	}
}

function changeDate(td){
	//Some JavaScript trickery
	//Change the kalendar argument to the existing kalendarendar object
	//This is why the first argument in the constructor must match the variable name
	//The kalendar reference also allows for multiple kalendarendars on a page
	
	kalendar.dateObject.setDate(td.firstChild.nodeValue);
	kalendar = new calendar(kalendar.id,kalendar.dateObject);

	document.getElementById(editovane_datum + '_den').value = kalendar.date;
	document.getElementById(editovane_datum + '_mesic').value = kalendar.month + 1;
	document.getElementById(editovane_datum + '_rok').value = kalendar.year;
	document.getElementById('calContainer').style.display = 'none';
}

function changeMonth(mo){

	//The Date object is smart enough to know that it should roll over in December
	//when going forward and in January when going back
	kalendar.dateObject.setMonth(kalendar.dateObject.getMonth() + mo);
	kalendar = new calendar(kalendar.id,kalendar.dateObject);
	document.getElementById('calContainer').innerHTML = kalendar.write();
	
	document.getElementById(editovane_datum + '_den').value = kalendar.date;
	document.getElementById(editovane_datum + '_mesic').value = kalendar.month + 1;
	document.getElementById(editovane_datum + '_rok').value = kalendar.year;
}

function calMoveTop() {
	document.getElementById('calContainer').style.top = document.body.scrollTop + 'px';
}

function pickDate(nazev_pole, obj) {
	editovane_datum = nazev_pole;
	prednastavene_datum = new Date();
	pozice = findPos(obj);
	if(document.getElementById(editovane_datum + '_den').value != '') {
		prednastavene_datum.setDate(document.getElementById(editovane_datum + '_den').value);
		prednastavene_datum.setMonth(document.getElementById(editovane_datum + '_mesic').value - 1);
		prednastavene_datum.setFullYear(document.getElementById(editovane_datum + '_rok').value);
	}
	kalendar = new calendar(kalendar.id, prednastavene_datum);
	
	document.getElementById('calContainer').innerHTML = kalendar.write();
	document.getElementById('calContainer').style.top = pozice[1] + 24 + 'px';
	document.getElementById('calContainer').style.left = pozice[0] - 183 + 'px';
	document.getElementById('calContainer').style.display = 'block';
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}