var calendarium = {};

function Calendar()
{
	var instance = this;
	var date = new Date();
	var months = new Array('Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień');
	var weakHTML = $('#calendar table tbody tr').parent().html();
	var day = date.getDate();
	var month = date.getMonth();
	var year = date.getFullYear();
	var dateFormat = day + '.' + month + '.' + year;

	this.getDates = function()
	{
		$.ajax({
			type: "POST",
			url: "/getcalendarium",
			data: { month: month, year: year },
			success: function( msg ) {
				//alert(msg);
				calendarium = eval("("+msg+")");
				
				for(var i in calendarium)
				{
					if(calendarium[i] == '')
						delete calendarium[i];
				}
				
				instance.draw();
				instance.setAction();
			
			}
		});
	};
	
	this.daysInMonth = function (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;
	} 
	
	this.draw = function()
	{
		$('#calendar .desc').hide();
		$('#calendar .desc').html('');
		$('#calendar .navigation h5').html(months[month] + ' ' + year);
		$('#calendar table tbody').html(weakHTML);
		
		var rows = 0;
		for(var i = 0; i < this.daysInMonth(month + 1, year); i++)
		{
			var calendarWeaks = $('#calendar table tbody tr');
			var calendarWeak = $(calendarWeaks[rows]);
			var calendarDay = $(calendarWeak).children('td');
			
			var d = new Date(year, month, i);
			$(calendarDay[d.getDay()]).html(i + 1);	
			
			var df = d.getDate() + '.' + d.getMonth() + '.' + d.getFullYear();
			
			var dreal = new Date(year, month, i + 1);
			
			var dayreal = dreal.getDate(); 
			var yeardreal =  dreal.getFullYear()
			var monthdreal = dreal.getMonth();
			/*
			if(monthdreal == 0)
			{
			    monthdreal = 1;
			    yeardreal--;
			}
			
			if(monthdreal == 9 && dayreal == 1 && month == 7)
			{
			    monthdreal = 8;
			    dayreal = 31;    
			}
			*/
			var dfreal = dayreal + '.' + (monthdreal + 1) + '.' + yeardreal;


			if(df == (day - 1) + '.' + date.getMonth() + '.' + date.getFullYear())
			{
				$(calendarDay[d.getDay()]).addClass('today');
			}
				
			//alert(dfreal);
			
			if(calendarium[dfreal] != undefined)
			{
			
			    var next = true;
			
				if(parseInt( date.getFullYear() ) == parseInt( yeardreal ))
				{
				    if(parseInt( date.getMonth() ) == parseInt( monthdreal ))
				    {
					if(day > dayreal )
					    next = false;
				    }
				    else if(parseInt( date.getMonth() ) > parseInt( monthdreal ))
					next = false;
				}
				else if(parseInt( date.getFullYear() ) > parseInt( yeardreal ))
				    next = false;    
				
				if(next)
				{
				    $(calendarDay[d.getDay()]).addClass('event');
				    var text = '<strong>' + dfreal + '</strong>' + calendarium[dfreal];                                        
				}
				else
				{
				    $(calendarDay[d.getDay()]).addClass('pastevent');
				    var text = '<strong>' + dfreal + '</strong>' + calendarium[dfreal];
				}
					
				//alert(calendarium[dfreal]);
								
				$(calendarDay[d.getDay()]).append('<div class="notvisible">' + text + '</div>');
				
				$(calendarDay[d.getDay()]).tooltip({ 
					
				    bodyHandler: function() { 
						return $(this).children('.notvisible').html();
			    	}, 
			    	showURL: false 
				});
				
				$(calendarDay[d.getDay()]).click( function(){
					if($(this).children('.notvisible').html() != $('#calendar .desc').html())
					{
						$('#calendar .desc').show();
						$('#calendar .desc').html($(this).children('.notvisible').html());
					}
					else
					{
						$('#calendar .desc').hide();
						$('#calendar .desc').html('');
					}
				});
				
				if(df == (day - 1) + '.' + date.getMonth() + '.' + date.getFullYear())
				{
					
					$('#calendar .desc').show();
					$('#calendar .desc').html($(calendarDay[d.getDay()]).children('.notvisible').html());
				}
			}
			
			if(d.getDay()%6 == 0 && d.getDay() != 0 && i + 1 < this.daysInMonth(month + 1, year))
			{
				$(calendarWeak).parent().append(weakHTML);
				rows++;
			}

		}
	};
	
	this.setAction = function()
	{
		$('#calendar tbody tr td').mouseover(function(){
			if($(this).html() != '')
				$(this).addClass('hover');
		});
		
		$('#calendar tbody tr td').mouseout(function(){
			if($(this).html() != '')
				$(this).removeClass('hover');
		});
	}
	
	this.init = function(){
		
		
		$('#calendar .navigation .button div').hover( function(){
			$(this).addClass('hover');
		}, function(){
			$(this).removeClass('hover');		
		});
		
		$('#calendar .navigation .button').click(function(){
			if($(this).attr('class').match(/prev/) == 'prev')
			{
				month--;
				if(month < 0)
				{
					month = 11;
					year--;
				}
			}
			else if($(this).attr('class').match(/next/) == 'next')
			{
				month++;
				if(month > 11)
				{
					month = 0;
					year++;
				}
			}
			
			instance.getDates();
		});
		
		this.getDates();
	};
}
