/**
 * TCalendar 
 * 
 * @autor: Robert Kotecki, seemerlin@o2.pl
 * 
 * Opcje:
 * - className: nazwa zmiennej do ktorej zostal przypisany kalendarz  
 * - input: identyfikator pola do ktorego zwrocona ma zostac wybrana data
 *
 */ 
	var Calendar = JS.Class();
	Calendar.prototype = {
	
		initialize: function(element)
		{
			this.monthName = new Array('Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień');
			this.monthSubName = new Array('Sty','Lut','Mar','Kwi','Maj','Cze','Lip','Sie','Wrz','Paź','Lis','Gru');
			this.dayName = new Array('Niedziele','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota');
			this.daySubName = new Array('N','Pn','Wt','Śr','Cz','Pt','So');
			
			this.className = element.className;
			this.inputName = element.input;
			
			var tData = new Date();
			
			this.vDay = element.day | tData.getDate();
			
			if(element.month)
			{
				// miesiace liczymy od zera
				this.vMonth = element.month - 1;
			}
			else
			{
				this.vMonth = tData.getMonth();
			}
			
			this.vYear = element.year | tData.getFullYear();
			
			
			
		},
		
		/**
		 *	Wyswietla i wskazana date 
		 * 
		 * 	@param month miesiac
		 *	@param year rok
		 *
		 **/
		setSelectDate : function(month, year)
		{
			this.vMonth = month;
			this.vYear  = year;
			
			this.draw();						
		},
		
		/**
		 *	Wskazuje poprzedni miescia
		 *
		 **/
		previoustMonth: function()
		{
			this.vMonth--;
			if(this.vMonth < 0) 
			{
				this.vMonth = 11;
				this.vYear--;
			}
			
			this.setSelectDate(this.vMonth,this.vYear);
		},
		
		/**
		 *	Wskazuje nastepny miesiac
		 *
		 **/
		nextMonth: function()
		{
			this.vMonth++;
			if(this.vMonth > 11)
			{
				this.vMonth = 0;
				this.vYear++;
			}
						
			this.setSelectDate(this.vMonth,this.vYear);
		},	
		
		/**
		 *	Wskazuje dzien
		 *
		 *	@param day dzien
		 *
		 **/
		setDay: function(day)
		{
			this.vDay = day | this.vDay;
		},		
		
		/**
		 * Wskazuje pelna date
		 *
		 *	@param year rok
		 *	@param month miesiac
		 *	@param day dzien
		 *
		 **/
		setDate: function(year, month, day)
		{
			this.vYear = year | this.vYear;
			
			// poprawka dany, poniewaz w kalendarzu js miesiace liczone sa od zera
			if(month)
			{
				this.vMonth = month - 1;
			}
			
			this.vDay = day | this.vDay;
		},	
		
		/**
		 *	Zwraca dzien
		 *
		 *	@param day
		 *
		 **/
		get: function(day)
		{
			var d = day;
			var m = this.vMonth + 1;
			var y = this.vYear;		
			
			if(d < 10)
			{
				d = '0' + d;
			}
			
			if(m < 10)
			{
				m = '0' + m;
			}
						
			document.getElementById(this.inputName).value = d + '-' + m + '-' + y;
			document.getElementById('calendar').innerHTML = '&nbsp;';
		},
		
		/**
		 *	Ukrywa kalendarz
		 *
		 **/
		hide: function()
		{
			document.getElementById('calendar').innerHTML = '&nbsp;';
		},
		
		/**
		 *	Wyswietla kalendarz
		 *
		 **/
		draw: function()		
		{														
			var data = new Date(this.vYear, this.vMonth, 1);
			
		    if (((this.vYear % 4 == 0) && (this.vYear % 100 != 0)) || (this.vYear % 400 == 0))
			{
				// rok przestępny	
				this.monthDay = new Array(31,29,31,30,31,30,31,31,30,31,30,31)
			}
			else
			{
				this.monthDay = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
			}		    
								
			var fDay = data.getDay();  // pierwszy dzień miesiąca
			var nDay = 0;			   // licznik dni w miesiacu
			var txt = '<table class="calendar" cellspacing="1" cellpading="0" border="0">';
					
			if(fDay == 0)
			{
				fDay = 7;
			}		

			txt += '<tr><td colspan="1" class="lm"><a href="javascript:' + this.className + '.previoustMonth();"><<</a></td><td colspan="4" class="mm">' + this.monthName[this.vMonth] + ' ' + this.vYear + '</td><td colspan="1" class="rm"><a href="javascript:' + this.className + '.nextMonth();">>></a></td><td class="xm"><a href="javascript:' + this.className + '.hide();">X</a></td></tr>'
			txt += '<tr><td class="d">' + this.daySubName[1] + '</td><td class="d">' + this.daySubName[2] + '</td><td class="d">' + this.daySubName[3] + '</td><td class="d">' + this.daySubName[4] + '</td><td class="d">' + this.daySubName[5] + '</td><td class="d">' + this.daySubName[6] + '</td><td class="d">' + this.daySubName[0] + '</td></tr>'
						
			b = '';			
							
			// tydzien		
			for(t = 0; t < 6; t++)
			{
				txt += '<tr>';
				for(d = 1; d < 8; d++)
				{													
					if(t == 0 && fDay <= d)
					{
						++nDay;
												
						if(d == 6 || d == 7)
						{
							txt += '<td class="b"><a href="javascript:' + this.className + '.get(' + nDay  + ');">' + nDay + '</a></td>';
						}
						else
						{
							txt += '<td class="a"><a href="javascript:' + this.className + '.get(' + nDay  + ');">' + nDay + '</a></td>';
						}						
					}
					else
					{
						if (nDay > 0 && nDay < this.monthDay[this.vMonth]) 
						{
							++nDay;
																				
							if(d == 6 || d == 7)
							{
								txt += '<td class="b"><a href="javascript:' + this.className + '.get(' + nDay  + ');">' + nDay + '</a></td>';
							}
							else
							{
								txt += '<td class="a"><a href="javascript:' + this.className + '.get(' + nDay  + ');">' + nDay + '</a></td>';
							}
						}
						else
						{
							txt += '<td class="c">&nbsp;</td>';	
						}
					}
				}
				txt += '</tr>';
			}
			
			txt += '</table>';
			
			document.getElementById('calendar').innerHTML = txt;
		}
	};
	
