		var mapa;
		var markery=[];
		var geo = new GClientGeocoder(); 

		// deklarujemy ikonkę bazową
		var domyslna_ikona = new GIcon();
		domyslna_ikona.image = '';
		domyslna_ikona.iconSize = new GSize(32,32);
		domyslna_ikona.shadow = '';
		domyslna_ikona.shadowSize = new GSize(0,0);
		domyslna_ikona.iconAnchor = new GPoint(16,16);
		domyslna_ikona.infoWindowAnchor = new GPoint(16,16);
		
		function odswiezSidebar()
		{
			var html='<ul style="height: 504px; overflow: auto;">'
			var licznik=0;
			for(i=0; i<markery.length; i++)
			{
				if(!markery[i].isHidden())
				{
					html+='<li><a style="color: #ffcc33" href="#" onclick="markery['+i+'].pokazInfo(); return false;">'+markery[i].tytul+'</a><br />';//+markery[i].opis+'</li>';
					licznik++;
				}
			}
			html+='</ul>';
			if(licznik!=i)
				html='<h2>'+lang_obiekty+'</h2>'+lang_wyswietlono+' <strong>'+licznik+'</strong> '+lang_z+' <strong>'+i+'</strong> '+lang_obiektow + html;
			else
				html='<h2>'+lang_obiekty+'</h2>'+html;
			document.getElementById('sidebar').innerHTML=html;
		}
		
		// ta funkcja jest wywoływana przy kliknięciu na pole checkbox
		function przerysuj(checkbox,kategoria)
		{
			// jeśli kliknięty checkbox jest zaznaczony, to wywołujemy funkcję z parametrem, mówiącym że ma pokazać markery
			// jeśli kliknięty checkbox nie jest zaznaczony, to wywołujemy funkcję z parametrem, mówiącym że ma ukryć markery			
			if(document.getElementById(checkbox).checked)
				ukryjPokazKategorie(kategoria,true);
			else
				ukryjPokazKategorie(kategoria,false);
			odswiezSidebar();
		}
		
		// ta funkcja generuje zawartość okienka informacyjnego
		function zawartoscOkna(tytul,opis,ulica,id,url,kategoria)
		{
			var zaw = '<h3><a href="http://'+document.location.host+'/index.php/main';
			if (kategoria == 'puby')
				zaw += '/showPub/';
			else if (kategoria == 'restauracje')
				zaw += '/showRestaurant/';
			zaw += id+'/'+url+'">'+tytul+'</a> '+ulica+'</h3>';
			zaw += '<p>'+opis+'</p>';

			return zaw;
		}
		

		// ta funkcja pokazuje lub ukrywa markery danej kategorii, zgodnie z przekazanymi argumentami
		function ukryjPokazKategorie(kategoria,pokaz)
		{
			// kategoria oznacza id kategorii której widzialność trzeba zmienić
			// jeśli pokaz = false, to znaczy że mamy ukryć, w przeciwnym wypadku pokazać
			
			// dla każdego z markerów
			for(var i=0; i<markery.length; i++)
			{
				// jeśli poszukiwana kategoria jest kategorią markera
				if(markery[i].kategoria==kategoria)
				{
					// to go ukrywamy lub pokazujemy, w zależności od argumetu pokaz
					if(pokaz==true)
						markery[i].show();
					else
						markery[i].hide();
				}
			}
		}
		
		GMarker.prototype.pokazInfo=function()
		{
			this.openInfoWindowHtml(zawartoscOkna(this.tytul,this.opis,this.ulica,this.id,this.url,this.kategoria),{"maxWidth":300});
		};
		
		// ta funkcja dodaje marker we współrzędnych lat, lon, o tytule: tytul, opisie: opis, kategorii: kategoria, i ikonce z pliku ikona_url
		function dodajMarker(lat,lon,tytul,opis,kategoria,ikona_url,ulica,id,url)
		{
			var punkt = new GLatLng(lat,lon);
			var ikona = new GIcon(domyslna_ikona);
			ikona.image = ikona_url;
			
			//var tt = '<a href="http://vivakrakow.com/">'+tytul+'</a> abc';
			var marker = new GMarker(punkt,{icon: ikona, title: tytul});
			
			// przypisujemy markerowi ID kategorii
			marker.kategoria = kategoria;
			marker.tytul = tytul;
			marker.ulica = ulica;
			marker.id = id;
			marker.url = url;
			marker.opis = opis;
			markery.push(marker);
			mapa.addOverlay(marker);
			GEvent.addListener(marker,'click',function()
			{
				marker.pokazInfo();
			});
		}

		function xml_marker_cmp(a,b) {
			sA = a.getAttribute("tytul");
			sB = b.getAttribute("tytul");
			return sA.localeCompare(sB);
		}
		
		function mapaStart()
		{
			if(GBrowserIsCompatible())  
			{
				mapa = new GMap2(document.getElementById("mapka"));
				//mapa.setCenter(new GLatLng(50.0646500, 19.9449800), 12);
				mapa.setCenter(new GLatLng(50.0646500, 19.9449800), 13);
				mapa.addControl(new GLargeMapControl());
				
				// dodajemy serię markerów (lat,lon,tytul,opis,kategoria,ikona_url)
			GDownloadUrl('http://www.vivakrakow.com/plan_xml.php?language='+lang, function(dane,kodOdpowiedzi)
				{
					if(kodOdpowiedzi==200)
					{
						var xml = GXml.parse(dane); 
						__markery = xml.documentElement.getElementsByTagName("marker");
						var aEee = [];

						for(var i=0; i<__markery.length; i++) {
							aEee[i] = __markery[i];
						}
						aEee.sort(xml_marker_cmp);
						//alert(aEee instanceof Array);
						__markery = aEee;
						for(var i=0; i<__markery.length; i++)
						{
							var lat			=	parseFloat(__markery[i].getAttribute("lat"));
							var lon			=	parseFloat(__markery[i].getAttribute("lon"));
							var tytul		=	__markery[i].getAttribute("tytul");
							var opis		=	__markery[i].getAttribute("opis");
							var kategoria	=	__markery[i].getAttribute("kategoria");
							var ikona_url	=	__markery[i].getAttribute("ikona_url");
							var ulica = __markery[i].getAttribute("ulica");
							var id = __markery[i].getAttribute("id");
							var url = __markery[i].getAttribute("url");
							var marker		=	dodajMarker(lat,lon,tytul,opis,kategoria,
							ikona_url,ulica,id,url);
						}
					}
					else
					{
						alert('Could not open file plan_xml.php');
					}
					odswiezSidebar();
				});
				odswiezSidebar();
			}
		}
		function geokoduj(adres)
		{
			var html='';
			geo.getLocations(adres, function(wyniki)
			{
				// sprawdzamy, czy geokodowanie powiodło się
				if (wyniki.Status.code == G_GEO_SUCCESS)
				{
					// jest więcej niż 1 rezultat
					if(wyniki.Placemark.length>1)
					{
						html+='<strong>'+lang_kilka_znalazlem+'</strong><ul>';
						// dla każdego z wyników...
						for (var j=0; j<wyniki.Placemark.length; j++)
						{
							var punkt = wyniki.Placemark[j].Point.coordinates;
							
							// dodajemy linki, umożliwiające dodanie markera
							html += '<li><a href="#" onclick="document.getElementById(\'geoAdresy\').style.display=\'none\'; mapa.addOverlay(new GMarker(new GLatLng('+parseFloat(punkt[1])+','+parseFloat(punkt[0])+'))); mapa.setCenter(new GLatLng('+parseFloat(punkt[1])+','+parseFloat(punkt[0])+'),15);  return false;">'+wyniki.Placemark[j].address+'</a>';
						}
						html +='</ul>';
						
						// zmieniamy zawartość tagu geoAdresy i wyświetlamy go
						document.getElementById('geoAdresy').innerHTML=html;
						document.getElementById('geoAdresy').style.display='block'; 
					}
					else
					{
						// ukrywamy obiekt z wieloma wynikami wyszukiwania
						document.getElementById('geoAdresy').style.display='none';
						document.getElementById('geoAdresy').innerHTML = '';
		                var punkt = wyniki.Placemark[0].Point.coordinates;
		                
						// dodajemy bezpośrednio marker
						mapa.addOverlay(new GMarker(new GLatLng(parseFloat(punkt[1]),parseFloat(punkt[0]))));
						mapa.setCenter(new GLatLng(parseFloat(punkt[1]),parseFloat(punkt[0])),15);
					}
				}
				else
				{
					// ukrywamy pole wyboru wielu wyników
					document.getElementById('geoAdresy').style.display='none';
					document.getElementById('geoAdresy').innerHTML = '';
					alert(lang_nie_znalazlem);
				}
			});
		}
