currentDate = new Date(); 

function Calendar(_xmlPath, _month, _year)
{
	var xmlPath = _xmlPath;
	var container = $('div.calendar');
	var month = (isNaN(month) || month == null) ? currentDate.getMonth() + 1 : _month;
	if (month < 6) {
		month = 6;
	} else if (month > 8) {
		month = 8;
	}
	var year  = (isNaN(year) || year == null) ? currentDate.getFullYear() : _year;
	var currentDay = currentDate.getDate();
	var currentMonth = currentDate.getMonth() + 1;
	var currentYear = currentDate.getFullYear();
	if (en)
	{
		var dayNames = new Array('Mo','Tu','We','Th','Fr','Sa','Su');
		var dayNamesLong = new Array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');
		var monthNames = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
		var nextName = 'next';
		var prevName = 'previous';
		var backName = 'back';
		var freeCottagesName = 'free cotta- ges';
		var dayFreeName = 'off-day';
		var eventName = 'event';
		var occupiedName = 'occu pied';
		var reservedName = 'reser ved';
		var freeName = 'free';
		var housesEn = {'Szalas': 'Shack','KR-80':'KR-80','Kociewie II':'Kociewie II','KR-60':'KR-60','Wiezyca':'Wiezyca','Kociewie I':'Kociewie I','Pawilon':'Pavillion'}
	}
	else
	{
		var dayNames = new Array('Po','Wt','Śr','Cz','Pi','So','Ni');
		var dayNamesLong = new Array('Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota','Niedziela');
		var monthNames = new Array("Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień");
		var nextName = 'następny';
		var prevName = 'poprzedni';
		var backName = 'powrót';
		var freeCottagesName = 'domki wolne';
		var dayFreeName = 'dzień wolny';
		var eventName = 'wydarzenie';
		var occupiedName = 'zajęte';
		var reservedName = 'zarezer wowa ne';
		var freeName = 'wolne';
	}
	var calendarData = null;
	var events = new Array();
	var houses = new Array();
	var sumFree = new Array();
	var calendarTableHolder = document.createElement('div');
	var calendarTable = document.createElement('table');
	var calendarControls = document.createElement('div');
	var calendarDetails = document.createElement('div');
	$(calendarTableHolder).addClass('table_holder')
	$(calendarTableHolder).append(calendarTable);
	$(calendarDetails).addClass('details')
	$(calendarTable).attr('cellspacing',0);
	calendarTable.cellSpacing = 0;
	$(calendarControls).addClass('controls');
	
	this.write = function()
	{
		loadXML();
	}
	
	function writeMonthControls()
	{
		var prevButton = document.createElement('a');
		var nextButton = document.createElement('a');
		var monthTitle = document.createElement('p');

		if (month > 6) {
			$(prevButton).click(prevMonth);
			$(prevButton).append(prevName);
			$(prevButton).attr('href','#');
			$(prevButton).addClass('prev');
		}

		if (month < 8) {
			$(nextButton).click(nextMonth);
			$(nextButton).append(nextName);
			$(nextButton).attr('href','#');
			$(nextButton).addClass('next');
		}

		$(monthTitle).append(monthNames[month-1]+' '+year);
		$(monthTitle).addClass('title');
		
		$(calendarControls).empty();
		$(calendarControls).append(prevButton);
		$(calendarControls).append(monthTitle);
		$(calendarControls).append(nextButton);


	}
	
	function writeDayControls(day)
	{
		var prevButton = document.createElement('a');
		var nextButton = document.createElement('a');
		var closeButton = document.createElement('a');
		var monthTitle = document.createElement('p');
		
		var fullDay = new Date(year, month-1, day);
		var weekDay = fullDay.getDay();
		if (weekDay == 0)
			weekDay = 7;
		
		if (day > 1)
		{
			$(prevButton).click(function(){$(container).find('td a[rel='+(day-1)+']').triggerHandler('click'); return false;});
			$(prevButton).append(prevName);
			$(prevButton).attr('href','#');
			$(prevButton).addClass('prev');
		}
		
		if (day < daysInMonth(month,year))
		{
			$(nextButton).click(function(){$(container).find('td a[rel='+(day+1)+']').triggerHandler('click'); return false;});
			$(nextButton).append(nextName);
			$(nextButton).attr('href','#');
			$(nextButton).addClass('next');
		}
		
		$(closeButton).click(hideDetails);
		$(closeButton).append(backName);
		$(closeButton).attr('href','#');
		$(closeButton).addClass('close');
			
		$(monthTitle).append(day+' '+monthNames[month-1]+' '+year+', '+dayNamesLong[weekDay-1]);
		$(monthTitle).addClass('title');
		
		$(calendarControls).empty();
		$(calendarControls).append(closeButton);
		$(calendarControls).append(prevButton);
		$(calendarControls).append(monthTitle);
		$(calendarControls).append(nextButton);

		
	}
	
	function writeCalendar()
	{
		var dayCount = 0;
		var days = daysInMonth(month,year)
		var prevLength = (month	== 1) ? daysInMonth(12,year-1) : daysInMonth(month-1,year);
		var startingDay = firstDay();
		
		$(container).empty();		
		$(calendarTable).empty();		
		$(container).append(calendarControls);
		writeMonthControls();
		
		var tableHeader = document.createElement('tr');
		for (i=0; i<7; i++)
			$(tableHeader).append('<th>'+dayNames[i]+'</th>')
		$(calendarTable).append(tableHeader);
		
		var calendarContent = '';
		
		calendarContent += '<tr>';
		for (i=1; i<startingDay; i++)
		{
			calendarContent += '<td class="prev_month"><a href="">'+((prevLength-startingDay+1)+i)+'</a></td>';
			dayCount++;
		}
		for (i=1; i<=days; i++)
		{
		  	tdclass = '';
			if (dayCount % 7 == 0)
				calendarContent += '</tr><tr>';
			if ((year == currentYear) && (month == currentMonth) && (i == currentDay))
				tdclass += 'today ';
			if (!calendarData[i]) {
				calendarContent += '<td class="current_month '+tdclass+'">';
				calendarContent += '<a href="" rel="0">'+i+' ';

				calendarContent += ' </a></td>';

			} else {
				if (calendarData[i]['events'])
					tdclass += 'event ';

				calendarContent += '<td class="current_month '+tdclass+'">';
				calendarContent += '<a href="" rel="'+i+'">'+i+' ';

				if (parseInt(sumFree[i]) > 0)
					calendarContent += '<span class="free_num">'+calendarData[i]['sum']['free']+'</span>';
				else
					calendarContent += '<span class="free_num red">'+calendarData[i]['sum']['free']+'</span>';
				calendarContent += '<span class="free_text">'+freeCottagesName+'</span>';
				calendarContent += ' </a></td>';
			}
			dayCount++;
		}
		if (dayCount % 7 != 0)
		{
			daysLeft = 7 - dayCount % 7;
			for (i=1; i<=daysLeft; i++)
			{
				calendarContent += '<td class="next_month"><a href="">'+i+'</a></td>';
			}
		}
		calendarContent += '</tr>';
		$(calendarTable).append(calendarContent);
		$(container).append(calendarTableHolder);
		$(container).find('tr').find('td:eq(6), th:eq(6)').addClass('no_border_right');
		$(container).find('tr:last').find('td').addClass('no_border_bottom');
		$(container).find('tr').find('td:gt(4)').each(function(){
			if ($(this).hasClass('current_month') && !$(this).hasClass('event'))
				$(this).addClass('free_day').find('a').prepend('<span class="free_day">'+dayFreeName+'</span>');
		})
		$(container).find('tr').find('td.event a').prepend('<span class="free_day">'+eventName+' </span>');
		$(container).find('a').click(function(){return false;});
		$(container).find('td.prev_month a').click(prevMonth);
		$(container).find('td.next_month a').click(nextMonth);
		$(container).find('td.current_month a').click(showDetails)
		$('#tooltip').css('opacity','0.9');	
	}
	
	function showDetails()
	{
		var day = parseInt($(this).attr('rel'));
		if (day == 0) {
			return;
		}
		var h = $(calendarTable).height();
		var w = $(calendarTable).width();
		var content = '';
		var statusTable = new Array();
		var housesCount = calendarData[day]['houses'].length;
		statusTable[0] = new Array();
		statusTable[1] = new Array();
		statusTable[2] = new Array();
		$(container).append(calendarDetails);
		$(calendarDetails).height(h);
		$(calendarDetails).width(w);
		content += '<table cellspacing="0">';
		for (i=0; i<housesCount; i++)
		{
			if (en)
				content += '<th><a href="./nasze_domki-'+(i+1)+'" class="new_window">'+housesEn[calendarData[day]['houses'][i]['name']]+'</a></th>'
			else
				content += '<th><a href="./nasze_domki-'+(i+1)+'" class="new_window">'+calendarData[day]['houses'][i]['name']+'</a></th>'
			statusTable[0][i] = calendarData[day]['houses'][i]['occupied'];
			statusTable[1][i] = calendarData[day]['houses'][i]['reserved'];
			statusTable[2][i] = calendarData[day]['houses'][i]['free'];
		}
		
		content += '<tr>';
		for (i=0; i<housesCount; i++)
			content += '<td><span class="cont"><span class="free_num">'+statusTable[0][i]+'</span><span class="free_text">'+occupiedName+'</span></span></td>'
		content += '</tr>';
		
		content += '<tr>';
		for (i=0; i<housesCount; i++)
			content += '<td><span class="cont"><span class="free_num">'+statusTable[1][i]+'</span><span class="free_text">'+reservedName+'</span></span></td>'
		content += '</tr>';
		
		content += '<tr>';
		for (i=0; i<housesCount; i++)
		{
			color_class = 'green';
			if (statusTable[2][i] == 0)
				color_class = 'red';				
			content += '<td><span class="cont"><span class="free_num '+color_class+'">'+statusTable[2][i]+'</span><span class="free_text">'+freeName+'</span></span></td>'
		}
		content += '</tr>';
		content += '</table>';
		if (calendarData[day]['events'])
		{
			eventsCount = calendarData[day]['events'].length;
			content += '<p class="events_header">Wydarzenia w ośrodku:</p><ul>';
			for (i=0; i<eventsCount; i++)
				content += '<li>'+calendarData[day]['events'][i]+'</li>'
			content += '</ul>';
		}
		$(calendarDetails).html(content);
		$(container).find('tr').find('td:eq(6), th:eq(6)').addClass('no_border_right');
		$(container).find('tr:last').find('td').addClass('no_border_bottom');
		$(container).find('a.new_window').click(function(){
			var newWindow = window.open($(this).attr('href'), '_blank');
			newWindow.focus();
			return false;
		})
		writeDayControls(day);
	}
	
	function hideDetails()
	{
		$(calendarDetails).empty();
		$(calendarDetails).remove();
		writeMonthControls();
		return false;
	}
	
	function nextMonth()
	{
		month++;
		if (month>8)
		{
			month = 6
			year++;
		}
		loadXML();
		return false;
	}
	
	function prevMonth()
	{
		month--;
		if (month<6)
		{
			month = 8
			year--;
		}
		loadXML();
		return false;
	}
		
	function loadXML()
	{
		$.get(xmlPath, {month: month, year: year}, parseJSON);
		$(calendarTable).css('opacity',0.5);
		$(container).append('<div class="loading"></div>').show();
	}
	
	function parseXML(data)
	{
		$(data).find('day').each(function(){
			var nr = $(this).attr('nr')
			events[nr] = $(this).children('event');
			houses[nr] = $(this).children('house');
			sumFree[nr] = $(this).children('free').text();
		})
		writeCalendar();
		$(calendarTable).css('opacity',1);
	}
	
	function parseJSON(data)
	{
		eval("calendarData = ("+data+")");
		writeCalendar();
		$(calendarTable).css('opacity',1);
	}
	
	function firstDay()
	{
		var firstDay = new Date(year, month-1, 1);
		var startingDay = firstDay.getDay();
		if (startingDay == 0)
			startingDay = 7;
		return startingDay;
	}
	
	function daysInMonth(month,year) 
	{
		var m = [31,28,31,30,31,30,31,31,30,31,30,31];
		if (month != 2) 
			return m[month - 1];
		if (year%4 != 0) 
			return m[1];
		if (year%100 == 0 && year%400 != 0) 
			return m[1];
		return m[1] + 1;
	} 	
	
}
