/********************************************************************/	
/********************************************************************/
	
	function Kalendarz(dataAktualna,dataMin,dataMax,numerDnia,formatDaty,operator,idWywolania,idZawartosci,nazwaPola,wartoscPola,znakZamknij,znakWstecz,znakDalej,weekendA,weekendB,jezyk)
	{
		this.dataAktualna=dataAktualna;
		this.dataStart=new Data(1,this.dataAktualna.pobierzMiesiac(),this.dataAktualna.pobierzRok());
		
		this.dataMin=dataMin;
		this.dataMax=dataMax;
		
		this.numerDnia=numerDnia;
		
		this.operator=operator;

		this.idWywolania=idWywolania;
		this.idZawartosci=idZawartosci;
		
		this.jezyk=jezyk;

		this.tekst=new Array();		
		this.miesiac=new Array();
		this.dzien=new Array();
		
		this.tekst['PL']=new Array('otwórz lub zamknij kalendarz','zamknij kalendarz','poprzedni rok','następny rok','poprzedni miesiąc','następny miesiąc','wybierz rok','wybierz miesiąc');
		this.miesiac['PL']=new Array('styczeń','luty','marzec','kwiecień','maj','czerwiec','lipiec','sierpień','wrzesień','październik','listopad','grudzień');
		this.dzien['PL']=new Array('poniedziałek','wtorek','środa','czwartek','piątek','sobota','niedziela');
				
		this.znakZamknij=znakZamknij;
		this.znakWstecz=znakWstecz;
		this.znakDalej=znakDalej;
		
		this.weekendA=weekendA;
		this.weekendB=weekendB;
		
		nazwaPola=nazwaPola;
		formatDaty=formatDaty;
		opisDnia=new Array(7);
		
		/**************************************************************/
		
		function stworz()
		{	
			var pole=this.stworzPoleTekstowe();
			var przyciskOtworz=this.stworzPrzyciskOtworz();
			var wywolanie=document.getElementById(this.idWywolania);
			var zawartosc=document.getElementById(this.idZawartosci);
			wywolanie.className='kalendarzWywolanieOnMouseOut';
			wywolanie.onmouseover=function()
			{
				ustawAtrybut(pole,'class','kalendarzPoleTekstoweOnMouseOver',1);
			}
			wywolanie.onmouseout=function()
			{
				ustawAtrybut(pole,'class','kalendarzPoleTekstoweOnMouseOut',0);	
			}
			zawartosc.className='kalendarzZawartoscBlur';
			wywolanie.appendChild(pole);
			wywolanie.appendChild(przyciskOtworz);
			wywolanie.title=this.pobierzTekst(0);
			wywolanie.onclick=function(){pokazKalendarz(true);};
			
			if(!((this.dataStart.porownaj(this.dataMin)==1) && (this.dataStart.porownaj(this.dataMax)==2)))
				this.dataStart=new Data(this.dataMin.pobierzDzien(),this.dataMin.pobierzMiesiac(),this.dataMin.pobierzRok());
			
			this.stworzKalendarz();			
		}
		this.stworz=stworz;
		
		/**************************************************************/
		
		function stworzPoleTekstowe()
		{
			var poleTekstowe=document.createElement('input');	
			poleTekstowe.className='kalendarzPoleTekstoweOnMouseOut';
			poleTekstowe.id=nazwaPola;
			poleTekstowe.name=nazwaPola;
			poleTekstowe.value=wartoscPola;
			poleTekstowe.maxLength=10;
			return(poleTekstowe);
		}
		this.stworzPoleTekstowe=stworzPoleTekstowe;
		
		/**************************************************************/
		
		function stworzPrzyciskOtworz()
		{
			var przyciskOtworz=document.createElement('div');	
			przyciskOtworz.className='kalendarzPrzyciskOtworzOnMouseOut';			
			return(przyciskOtworz);
		}
		this.stworzPrzyciskOtworz=stworzPrzyciskOtworz;
		
		/**************************************************************/	
		
		function pokazKalendarz(operacja)
		{
			var obiekt=document.getElementById(idZawartosci);
			if(obiekt.className=='kalendarzZawartoscFocus')
				ustawAtrybut(obiekt,'class','kalendarzZawartoscBlur',0);	
			else
			{
				if(operacja) ustawAtrybut(obiekt,'class','kalendarzZawartoscFocus',0);
				else ustawAtrybut(obiekt,'class','kalendarzZawartoscBlur',0);
			}
		}
		this.pokazKalendarz=pokazKalendarz;		
		
		/**************************************************************/	
		
		function stworzKalendarz()
		{
			var wiersz,komorka;
			var obiekt=document.getElementById(idZawartosci);
			
			var przyciskZamknij=document.createElement('div');
			przyciskZamknij.className='kalendarzPrzyciskZamknijOnMouseOut';
			przyciskZamknij.onmouseover=function(){ustawAtrybut(przyciskZamknij,'class','kalendarzPrzyciskZamknijOnMouseOver',1);}
			przyciskZamknij.onmouseout=function(){ustawAtrybut(przyciskZamknij,'class','kalendarzPrzyciskZamknijOnMouseOut',0);}
			przyciskZamknij.onclick=function(){pokazKalendarz(false);}
			przyciskZamknij.title=this.pobierzTekst(1);
			
			var znakZamknij=document.createElement('div');
			znakZamknij.className='kalendarzZnakZamknij';
			
			if(this.znakZamknij!=null)
				znakZamknij.appendChild(document.createTextNode(this.znakZamknij));
			
			przyciskZamknij.appendChild(znakZamknij);
			obiekt.appendChild(przyciskZamknij);
					
		  	var tabela=document.createElement('table');	
		  	var cialo=document.createElement('tbody');
			
			tabela.className='kalendarzTabela';
			tabela.cellSpacing='1';
			tabela.cellPadding='0';
					
			wiersz=document.createElement('tr');
			wiersz.appendChild(this.stworzPrzycisk(this,'przyciskRok',2,-1,this.znakWstecz,this.pobierzTekst(2),'kalendarzPrzyciskZmniejszRok'));
			komorka=document.createElement('td');
			komorka.colSpan='3';
			komorka.appendChild(this.stworzListe(this,'listaRok',this.pobierzTekst(6)));
			wiersz.appendChild(komorka);
			wiersz.appendChild(this.stworzPrzycisk(this,'przyciskRok',2,1,this.znakDalej,this.pobierzTekst(3),'kalendarzPrzyciskZwiekszRok'));
			cialo.appendChild(wiersz);	
			
			wiersz=document.createElement('tr');
			wiersz.appendChild(this.stworzPrzycisk(this,'przyciskMiesiac',1,-1,this.znakWstecz,this.pobierzTekst(4),'kalendarzPrzyciskZmniejszMiesiac'));
			komorka=document.createElement('td');
			komorka.colSpan='5';
			komorka.appendChild(this.stworzListe(this,'listaMiesiac',this.pobierzTekst(7)));
			wiersz.appendChild(komorka);
			wiersz.appendChild(this.stworzPrzycisk(this,'przyciskMiesiac',1,1,this.znakDalej,this.pobierzTekst(5),'kalendarzPrzyciskZwiekszMiesiac'));		
			cialo.appendChild(wiersz);				

 			for(i=0;i<7;i++)	
			{
				var wartosc;
				var indeks=this.numerDnia-1;
				wiersz=document.createElement('tr');
				for(j=0;j<7;j++)
				{
					komorka=document.createElement('td');						
					komorka.id=i+'-'+j;			
					
					if(i==0) 
					{	
						if((++indeks)>7) indeks=1;										
							wartosc=this.dzien[this.jezyk][indeks-1].substr(0,2);
					}
					else wartosc=' ';
										
					komorka.appendChild(document.createTextNode(wartosc));		
					wiersz.appendChild(komorka);	
				}
				cialo.appendChild(wiersz);
			}		

			wiersz=document.createElement('tr');
			komorka=document.createElement('td');
			komorka.className='kalendarzOpisDnia';
			komorka.colSpan=7;
			komorka.id='opisDnia';
			
			wiersz.appendChild(komorka);
			cialo.appendChild(wiersz);
			
			tabela.appendChild(cialo);
			obiekt.appendChild(tabela);
		
			this.wypelnijKalendarz();
		}
		this.stworzKalendarz=stworzKalendarz;		
		
		/**************************************************************/
		
		function wypelnijKalendarz()
		{
			var data;
			var przesuniecie=1;
			var miesiac=this.dataStart.pobierzMiesiac();
			var numer=this.dataStart.pobierzNumerDniaWTygodniu();
			
			if((this.numerDnia!=1) || (numer!=1)) 
			{
				przesuniecie=(9-this.numerDnia)+numer;
				if(przesuniecie>8) przesuniecie-=7;
			}
			else przesuniecie=1;
				
			if((przesuniecie-1)>1)
				data=this.dataStart.dodajDzien(-1*(przesuniecie-2));
			else data=this.dataStart;
	
 			for(i=1;i<7;i++)	
			{
				opisDnia[i-1]=new Array(7);
				
				for(j=0;j<7;j++)
				{
					var obiekt=document.getElementById(i+'-'+j);
					var numerDnia=data.pobierzNumerDniaWTygodniu();
					
					if(i==1)
					{
						if((numerDnia==this.weekendA) || (numerDnia==this.weekendB))
							document.getElementById('0-'+j).className='kalendarzSkrotDniaWeekend';
						else document.getElementById('0-'+j).className='kalendarzSkrotDniaTydzien';	
					}
					
					this.ustawKlase(data,obiekt);
					this.ustawZdarzenie(data,obiekt);
				
					opisDnia[i-1][j-1]=data.pobierzDzien()+'-'+data.pobierzMiesiac()+'-'+data.pobierzRok()+'-'+this.dzien[this.jezyk][numerDnia-1]+'-'+this.miesiac[this.jezyk][data.pobierzMiesiac()-1];						
					obiekt.innerHTML=data.pobierzDzien();
					data=data.dodajDzien(1);
				}
			}	
						
			this.ustawZaznaczenieListy('listaMiesiac',this.dataStart.pobierzMiesiac());
			this.ustawZaznaczenieListy('listaRok',this.dataStart.pobierzRok());	
			document.getElementById('opisDnia').innerHTML='&nbsp;';		
		}
		this.wypelnijKalendarz=wypelnijKalendarz;
		
		/**************************************************************/
		
		function stworzPrzycisk(obiekt,id,iloscKolumn,przyrost,znak,tytul,klasa)
		{
 			komorka=document.createElement('td');	
			komorka.title=tytul;
			komorka.colSpan=iloscKolumn;
			komorka.className=klasa+'OnMouseOut';
			komorka.onmouseover=function(){ustawAtrybut(this,'class',klasa+'MouseOver',1);}; 
			komorka.onmouseout=function(){ustawAtrybut(this,'class',klasa+'OnMouseOut',0);}; 
			komorka.onclick=function(){obiekt.idzDoData(id,przyrost);};
			komorka.appendChild(document.createTextNode(znak));
			return(komorka);
		}
		this.stworzPrzycisk=stworzPrzycisk;			
		
		/**************************************************************/
		
		function stworzListe(obiekt,id,tytul)
		{
			var i,j;
			var lista=document.createElement('select');
			switch(id)
			{
				case 'listaRok'		:
					for(i=this.dataMin.pobierzRok();i<=this.dataMax.pobierzRok();i++)
					{
						var opcja=document.createElement('option');
						opcja.appendChild(document.createTextNode(i));
						opcja.value=i;
						lista.appendChild(opcja);
					}				
				break;
				case 'listaMiesiac'	:
					for(i=0;i<12;i++)
					{
						var opcja=document.createElement('option');
						opcja.appendChild(document.createTextNode(this.miesiac[this.jezyk][i]));
						opcja.value=(i+1);
						lista.appendChild(opcja);
					}				
				break;
			}
			lista.id=id;
			lista.name=id;
			lista.title=tytul;
			lista.className='kalendarzListaSterowanie';
			lista.onchange=function(){obiekt.idzDoData(id,0);};
			return(lista);
		}
		this.stworzListe=stworzListe;			
		
		/**************************************************************/
		
		function idzDoData(id,przyrost)
		{
			switch(id)
			{
				case 'przyciskRok'			:
					if(this.dataStart.pobierzRok()+przyrost>this.dataMax.pobierzRok())
						this.dataStart.ustawRok(this.dataMin.pobierzRok());
					else
					if(this.dataStart.pobierzRok()+przyrost<=this.dataMin.pobierzRok()) 
						this.dataStart.ustawRok(this.dataMax.pobierzRok());	
					else this.dataStart.ustawRok(this.dataStart.pobierzRok()+przyrost);				
				break;
				case 'listaRok'				:
					this.dataStart.ustawRok(parseInt(this.pobierzZaznaczenieListy(id)));
				break;				
				case 'przyciskMiesiac'		:
					if(this.dataStart.pobierzMiesiac()+przyrost>12)
						this.dataStart.ustawMiesiac(1);
					else
					if(this.dataStart.pobierzMiesiac()+przyrost<=0) 
					  this.dataStart.ustawMiesiac(12);	
					else this.dataStart.ustawMiesiac(this.dataStart.pobierzMiesiac()+przyrost);
				break;
				case 'listaMiesiac'			:
					this.dataStart.ustawMiesiac(parseInt(this.pobierzZaznaczenieListy(id)));
				break;
			}	
			this.wypelnijKalendarz();
		}
		this.idzDoData=idzDoData;
		
		/**************************************************************/
		
		function ustawZaznaczenieListy(id,wartosc)
			{ document.getElementById(id).value=wartosc; }
		this.ustawZaznaczenieListy=ustawZaznaczenieListy;
		
		/**************************************************************/
		
		function pobierzZaznaczenieListy(id)
			{ return(document.getElementById(id).value); }
		this.pobierzZaznaczenieListy=pobierzZaznaczenieListy;	
		
		/**************************************************************/
		
		function pobierzTekst(id)
			{ return(this.tekst[this.jezyk][id]); }
		this.pobierzTekst=pobierzTekst;

		/**************************************************************/
		
		function pokazOpisDnia(obiekt)
		{
			var lancuch=new String(obiekt.id);
			var tablica=lancuch.split('-');
			lancuch=new String(opisDnia[tablica[0]-1][tablica[1]-1]);
			tablica=lancuch.split('-');
			document.getElementById('opisDnia').innerHTML='<b>'+tablica[3]+'</b>, '+tablica[0]+' '+tablica[4]+' '+tablica[2];	
		}
		this.pokazOpisDnia=pokazOpisDnia;

		/**************************************************************/
	
		function pobierzDate(obiekt)
		{		
			var wartosc=new String(formatDaty);
			var lancuch=new String(obiekt.id);
			var tablica=lancuch.split('-');
			
			lancuch=new String(opisDnia[tablica[0]-1][tablica[1]-1]);
			tablica=lancuch.split('-');	
			
			wartosc=wartosc.replace('dd',(tablica[0].length==1) ? tablica[0]='0'+tablica[0] : tablica[0]);
			wartosc=wartosc.replace('mm',(tablica[1].length==1) ? tablica[1]='0'+tablica[1] : tablica[1]);
			
			if(formatDaty.length==10)
				wartosc=wartosc.replace('rrrr',tablica[2]);	
			else wartosc=wartosc.replace('rr',tablica[2].substring(2,2));

			document.getElementById(nazwaPola).value=wartosc;
			pokazKalendarz(false);			
		}
		this.pobierzDate=pobierzDate;

		/**************************************************************/
		
		function ustawKlase(data,obiekt)
		{
			var klasa;
			var wynik=this.dataAktualna.porownaj(data);
			var miesiac=this.dataStart.pobierzMiesiac();
			var numerDnia=data.pobierzNumerDniaWTygodniu();
						
			if(this.operator!='')
			{
				switch(wynik)
				{
					case 1 :
				 		if((this.operator=='<') || (this.operator=='<='))
				 			klasa='kalendarzDzienNieaktywny'; 	
				 		else klasa='kalendarzDzienAktywny'; 
					break;
					case 0 :
				 		if((this.operator=='>=') || (this.operator=='<='))
				 			klasa='kalendarzDzienNieaktywny'; 	
				 		else klasa='kalendarzDzienAktualnyOnMouseOut'; 					
					break;
					case 2 :
				 		if((this.operator=='>') || (this.operator=='>='))
				 			klasa='kalendarzDzienNieaktywny';
				 		else klasa='kalendarzDzienAktywny';  				
					break;
				}
			}
			else 
			{
				if(wynik==0) klasa='kalendarzDzienAktualnyOnMouseOut';
				else klasa='kalendarzDzienAktywny';
			}
			
			if((klasa=='kalendarzDzienAktywny') || (klasa=='kalendarzDzienAktualnyOnMouseOut'))
			{
				if((data.porownaj(this.dataMin)==2) || (data.porownaj(this.dataMax)==1))
					klasa='kalendarzDzienNieaktywny';
			}
			
			if(klasa=='kalendarzDzienNieaktywny')
			{
			 	if((numerDnia==this.weekendA) || (numerDnia==this.weekendB))
					klasa='kalendarzDzienWeekendNieaktywny';	
				else klasa='kalendarzDzienZwyklyNieaktywny';	
			}	
			
			if(klasa=='kalendarzDzienAktywny')
			{		
				if(miesiac==data.pobierzMiesiac())
				{
					if((numerDnia==this.weekendA) || (numerDnia==this.weekendB))
						klasa+=' kalendarzDzienWeekendMiesiacAktywnyOnMouseOut';
					else klasa+=' kalendarzDzienZwyklyMiesiacAktywnyOnMouseOut';
				}
				else
				{
					if((numerDnia==this.weekendA) || (numerDnia==this.weekendB))
						klasa+=' kalendarzDzienWeekendMiesiacNieaktywnyOnMouseOut';
					else klasa+=' kalendarzDzienZwyklyMiesiacNieaktywnyOnMouseOut';
				}		
			}
			
			obiekt.className='kalendarzDzien '+klasa;		
		}
		this.ustawKlase=ustawKlase;
		
		/**************************************************************/
		
		function ustawZdarzenie(data,obiekt)
		{
			var klasa;
			var zdarzenie=true;
			var tekst=new String(obiekt.className);
			var tablica=new Array();
			
			tablica=tekst.split(' ');
			
			switch(tablica[tablica.length-1])
			{
				case 'kalendarzDzienAktualnyOnMouseOut' :
					klasa='kalendarzDzienAktualnyOnMouseOver';
				break;
				case 'kalendarzDzienWeekendMiesiacAktywnyOnMouseOut' :
					klasa='kalendarzDzienWeekendMiesiacAktywnyOnMouseOver';
				break;
				case 'kalendarzDzienZwyklyMiesiacAktywnyOnMouseOut' :
					klasa='kalendarzDzienZwyklyMiesiacAktywnyOnMouseOver';			
				break;
				case 'kalendarzDzienWeekendMiesiacNieaktywnyOnMouseOut' :
					klasa='kalendarzDzienWeekendMiesiacNieaktywnyOnMouseOver';
				break;
				case 'kalendarzDzienZwyklyMiesiacNieaktywnyOnMouseOut' :
					klasa='kalendarzDzienZwyklyMiesiacNieaktywnyOnMouseOver';
			  	break;
				default : zdarzenie=false;
			}
					
			if(zdarzenie==true)
			{
				obiekt.onmouseover=function()
				{
					pokazOpisDnia(this);
					ustawAtrybut(obiekt,'class',klasa,1);
				}
				obiekt.onmouseout=function() 	{ ustawAtrybut(obiekt,'class',tablica[tablica.length-1],-1) } ;
				obiekt.onclick=function() 		{ pobierzDate(this); }
			}
			else
			{
				obiekt.onmouseover=function() { document.getElementById('opisDnia').innerHTML='&nbsp;'; }
				obiekt.onmouseout=function() 	{ document.getElementById('opisDnia').innerHTML='&nbsp;'; }
				obiekt.onclick=function() 		{ document.getElementById('opisDnia').innerHTML='&nbsp;'; }
			}
		}
		this.ustawZdarzenie=ustawZdarzenie;
	}