var mapa = null;
var geocoder = null;
var oXmlHttp = null;
var przystankiPozycje = []; 
var linie = '';

	function sprawdz()
	{
	    if(linie != "")
	     {
	        $("linie").innerHTML=linie;
	     }
	}


	function Przystanek(point,id,nazwa)	{
		
		this.punkt=point;
		this.id=id;
		this.nazwa=nazwa;
	}

	
	function mapaStart()  
		{  
			if(GBrowserIsCompatible())
			{  
			/* Inicjalizacja Mapy */
			mapa = new GMap2(document.getElementById('mapaZTM'),{mapTypes: [G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP]});
			mapa.setCenter(new GLatLng(54.349403,18.645687),14);
			
			mapa.enableDoubleClickZoom();
			mapa.enableContinuousZoom();
			mapa.enableScrollWheelZoom();  				
			mapa.setMapType(G_NORMAL_MAP);
			mapa.addControl(new GMapTypeControl());  			

			mapa.addControl(new GLargeMapControl());

			/* Inicjalizacja Geocodera */
			geocoder = new GClientGeocoder();
			oXmlHttp = zXmlHttp.createRequest();
			
			/* Obsługa klawiszy kursorów */
			new GKeyboardHandler(mapa);
			GEvent.trigger(document, "click", {srcElement: document.getElementById("mapaZTM"), target: document.getElementById("mapaZTM"), nodeType: 1});

			GEvent.addListener(mapa,'mouseout',function()  
				{  
				mapa.hideControls();  
				});  
			GEvent.addListener(mapa,'mouseover',function()  
			{  
				mapa.showControls();  
			});
			GEvent.addListener(mapa,'click',function(o,p)  
			{  
				if (o==null) 
				{
				mapa.panTo(p);
				// szukamy najblizszego przystanku
				var odleglosc = 20000000;
				var odleglosc2=0;
				var najblizszy = new Przystanek(new GLatLng(0,0) ,0,'');
				
				for (var i=0; i<przystankiPozycje.length; i++)
					{
					odleglosc2=p.distanceFrom(przystankiPozycje[i].punkt);
					if (odleglosc2<odleglosc)
						{
						najblizszy=przystankiPozycje[i];
						odleglosc=odleglosc2;
						}
					}
				pokazPrzystanek(najblizszy.punkt.lat(),najblizszy.punkt.lng(),najblizszy.id,najblizszy.nazwa);
				
				
				}
				
			});
			
			// pobieranie wszystkich przystanków do tablicy
			GDownloadUrl('przystanki.php', function(przystanki,kodOdpowiedzi)
				{
				if(kodOdpowiedzi==200)
					{
					var xml = GXml.parse(przystanki);
					var punkty = xml.documentElement.getElementsByTagName('przystanek');

					for(var i=0; i<punkty.length; i++)
								{
								var x=parseFloat(punkty[i].getAttribute("x"));
								var y=parseFloat(punkty[i].getAttribute("y"));
								var id=parseFloat(punkty[i].getAttribute("id"));
								var nazwa=punkty[i].getAttribute("nazwa");

								var point=new GLatLng(y,x);				
								przystankiPozycje.push(new Przystanek(point,id,nazwa));
								}					
					}				
				});
			}   

		}  
		
	
	function poczatekTrasy(id)	{
	show('zaplanuj');
	$('przystanekOd').value=id;
	}
	
	function koniecTrasy(id)	{
	show('zaplanuj');
	$('przystanekDo').value=id;
	}

	function pobierzLinie(id) {
	
	linie = '';
	
	oXmlHttp.open("get", "http://rozklady.ztm.gda.pl/rozklad.php?id="+id, true);
	oXmlHttp.onreadystatechange = function() {
           if(oXmlHttp.readyState == 4) {
    		linie = oXmlHttp.responseText;	
    		$("linie").innerHTML=oXmlHttp.responseText;	
    		
//		alert(oXmlHttp.responseText);	

	   }
	}
	        setTimeout('sprawdz()',1);    		
	
		try {
		oXmlHttp.send(null);	
		}
		catch(e)
	    {

	        return null;
	    }
	
	
	}
	
	function pobierzRozklad(id,idLini) {

	oXmlHttp.open("get", "http://rozklady.ztm.gda.pl/rozklad.php?id="+id+"&idLinia="+idLini, true);
	oXmlHttp.onreadystatechange = function() {
   if(oXmlHttp.readyState == 4) {
				 $("rozklad").innerHTML=oXmlHttp.responseText;
		}
	}
	alert('roz');
	oXmlHttp.send(null);	
	
	}
	
	function rysujMarker(point,id,tytul,opis,kolor) {

  var ikona = new GIcon();  
 // ikona.image = "http://maps.google.com/mapfiles/kml/pal2/icon13.png";  
 // ikona.shadow = "http://maps.google.com/mapfiles/kml/pal2/icon13s.png";  
if (kolor===undefined) kolor=0;
 ikona.image = ''+kolor+'.png';  
//	alert(ikona.image);
 
//	ikona.iconSize = new GSize(32, 32);  
	ikona.iconSize = new GSize(26, 26);  
	ikona.infoWindowAnchor = new GPoint(13,26);  
	ikona.iconAnchor = new GPoint(13,26);  
	//ikona.shadowSize = new GSize(59, 32); 	
	
	var marker = new GMarker(point,{title: tytul, icon:ikona});
	var zwroconerozklady="";

	var linkTrasa = '<div id="przystanekInfo"><p><a onclick="poczatekTrasy('+id+');"><img src="start.png" width="32" height"32" />Ustaw jako przystanek początkowy</a></p><p><a onclick="koniecTrasy('+id+');"><img src="stop.png" width="32" height"32" />Ustaw jako przystanek końcowy</a></p></div>';
	
	
	marker.opis=opis;  
	mapa.addOverlay(marker);	

  var content1 = new GInfoWindowTab('Przystanek','<h2>'+marker.opis+'</h2>'+linkTrasa);  
	var content2 = new GInfoWindowTab('Rozkłady','<h2>Rozkłady poszczególnych linii</h2><div id="linie" ></div><div id="rozklad"></div>');  
		
  GEvent.addListener(marker,"click",function() {  
		marker.openInfoWindowTabsHtml([content1,content2]); 
		pobierzLinie(id);
		}
	);
}
	// TA FUNKCJA powinna rysować markery zwykła metodą + rysowac linie :|
		// bo nie zapanujemy nad asynchronicznym wywolywaniem z ajaxa

		function rysujPrzystanki(daneXML) {
			show('transparentblock');
			GDownloadUrl(daneXML, function(przystanki,kodOdpowiedzi)
				{
					if(kodOdpowiedzi==200)
					{
						rysujPunkty(przystanki);
					}
					else
					{
						alert('Nie mogłem otworzyć pliku z danymi Przystanków');
					}
				toggle('transparentblock');							
				});
		}

		// typy trzeba będzie dorobić

		function rysujPunkty(punktyXML) {

			var xml = GXml.parse(punktyXML);
			var punkty = xml.documentElement.getElementsByTagName('przystanek');
			var obszar = new GLatLngBounds();
			mapa.clearOverlays();
			
			
			for(var i=0; i<punkty.length; i++)
				{
				var x=parseFloat(punkty[i].getAttribute("x"));
				var y=parseFloat(punkty[i].getAttribute("y"));
				var id=parseFloat(punkty[i].getAttribute("id"));
				var nazwa=punkty[i].getAttribute("nazwa");

				var point=new GLatLng(y,x);				
				rysujMarker(point,id,nazwa,nazwa,0)	;
				obszar.extend(point);
				}
			var nowyZoom = mapa.getBoundsZoomLevel(obszar);
			var nowyPunkt = obszar.getCenter();
			mapa.setCenter(nowyPunkt,nowyZoom);				
		}

		function rysujTrase2(daneXML,idPocz,idKoniec,godzina,minuta)
			{
			show('transparentblock');
			GDownloadUrl(daneXML+"?poczatekId="+$(idPocz).value+"&koniecId="+$(idKoniec).value+"&odGodzina="+$(godzina).value+"&odMinuta="+$(minuta).value, function(trasa,kodOdpowiedzi)
					{
						if(kodOdpowiedzi==200)
						{
							rysujXML(trasa);
						}
						else
						{
							alert('Nie mogłem otworzyć pliku z danymi Trasy');
						}
					toggle('transparentblock');						
					});
			}
		function rysujTrase(daneXML)
			{
			show('transparentblock');
				GDownloadUrl(daneXML, function(trasa,kodOdpowiedzi)
					{
						if(kodOdpowiedzi==200)
						{
							rysujXML(trasa);
						}
						else
						{
							alert('Nie mogłem otworzyć pliku z danymi Trasy');
						}
					toggle('transparentblock');
					});
			}
		/* Oprócz rysowania ścieżki, dodaję rysowanie przystanków,
		generalnie to nie powinno tutaj być ale chwilowo nie mam czasu na inne rozwiązanie */
		
		function rysujXML(trasa) {
			var xml = GXml.parse(trasa);
			var sciezka = xml.documentElement.getElementsByTagName('sciezka');
			mapa.clearOverlays();
			obszar = new GLatLngBounds();
			var barwa = new Array();
			var tmpKolor= null;

			barwa[1]='#FF0000';
			barwa[2]='#00b4ff';
			barwa[3]='#9b9a7b';
			barwa[4]='#00ff00';
			barwa[5]='#804400';
			barwa[6]='#951f64';
			barwa[7]='#add800';
			barwa[8]='#0000ff';
			barwa[9]='#00a992';
			barwa[10]='#808080';
			barwa[254]='#ff6f00';
			barwa[255]='#000000';
			barwa[0]='#ff6f00';			
			barwa[65000]='#ff6f00';		
		var przebieg='<table><tr><td><strong>Przystanek</strong></td><td><strong>Godzina odjazdu</strong></td></tr>';
		
		for (var i=0; i<sciezka.length; i++)
			{
				var punkty = sciezka[i].getElementsByTagName("interpolacja");
				var kolor=sciezka[i].getAttribute("kolor");
				var nazwa =sciezka[i].getAttribute("nazwa"); 
				var nazwa2 =sciezka[i].getAttribute("nazwa2"); 
				var godzina = sciezka[i].getAttribute("godzina"); 
				var godzina2 = sciezka[i].getAttribute("godzina2"); 

				var id =sciezka[i].getAttribute("id"); 
				var id2 =sciezka[i].getAttribute("id2"); 
				
				var punkty_sciezka=[];

				for(var j=0; j<punkty.length; j++)
				{
					var x = parseFloat(punkty[j].getAttribute("x"));
					var y = parseFloat(punkty[j].getAttribute("y"));
					var point=new GLatLng(y,x);
					punkty_sciezka.push(point);
					obszar.extend(point);
					}
				
				var szukanaTrasa = new GPolyline(punkty_sciezka,barwa[kolor],4,0.8);
				mapa.addOverlay(szukanaTrasa);
				rysujMarker(punkty_sciezka[0],id,nazwa,nazwa,kolor);
				
				if (godzina==null) { godzina='-';}
				if (godzina2==null) { godzina2='-';}

				if(i==0)
					{
					tmpKolor=kolor;
					przebieg+='<tr><td colspan="2"><strong>Początek podróży</strong></td></tr>';
					przebieg+='<tr><td>'+nazwa+'</td><td>'+godzina+'</td></tr>';
					}

					if (tmpKolor!=kolor && i!=0) // zmiana liniii czyli
					{
					tmpKolor=kolor;
					przebieg+='<tr><td colspan="2"><strong>Przesiadka</strong></td></tr>';
					przebieg+='<tr><td>'+nazwa+'</td><td>'+godzina+'</td></tr>';
					}
				
				if (i==(sciezka.length-1))
					{
					rysujMarker(punkty_sciezka[punkty.length-1],id2,nazwa2,nazwa2,kolor);

					przebieg+='<tr><td colspan="2"><strong>Koniec podróży</strong></td></tr>';
					przebieg+='<tr><td>'+nazwa2+'</td><td>'+godzina2+'</td></tr>';
					}
				
						
			}
			przebieg+='</table>';
			/*
			if (godzina!==null)
				{
				$('przebiegTrasy').innerHTML=przebieg;
				}
				else 
				{
				$('przebiegTrasy').innerHTML='';
				}
			*/
			$('przebiegTrasy').innerHTML=przebieg;

			var nowyZoom = mapa.getBoundsZoomLevel(obszar);
			var nowyPunkt = obszar.getCenter();
			mapa.setCenter(nowyPunkt,nowyZoom);
		}
		
		function pokazAdres(adres) {  
			mapa.clearOverlays();		
			geocoder.getLatLng(adres,function(point) 
				{
				if (!point) 
					{
					alert("Niestety "+adres + " nie został znaleziony");
					} 
				else 
					{
					// Tutaj musi byc dodawanie Markera własna funkcją a nie jakieś "coś"
					var marker = new GMarker(point);        
					mapa.setCenter(point, 14);
					mapa.addOverlay(marker);        
					marker.openInfoWindowHtml(adres);      
					}    
				});
		}

		function $(id)	{
		return document.getElementById(id);
		}

		function toggle(id)
			{
			var element=$(id);
			
			if (element.style.display=='none' || element.style.display=='') 
				{
				element.style.display='block';
				}
				else {
				element.style.display='none';
				}
			return false;	
			}
		function show(id)	
			{
			$(id).style.display='block';
			}

			
		function pokazPrzystanek(x,y,id,nazwa) {
			var linkTrasa = '<div id="przystanekInfo"><p><a onclick="poczatekTrasy('+id+');"><img src="start.png" width="32" height"32" />Ustaw jako przystanek początkowy</a></p><p><a onclick="koniecTrasy('+id+');"><img src="stop.png" width="32" height"32" />Ustaw jako przystanek końcowy</a></p></div>';

			var content1 = new GInfoWindowTab('Przystanek','<h2>'+nazwa+'</h2>'+linkTrasa);  
			var content2 = new GInfoWindowTab('Rozkłady','<h2>Rozkłady poszczególnych linii</h2><div id="linie"></div><div id="rozklad"></div>');  

			mapa.panTo(new GLatLng(x,y));
			mapa.openInfoWindowTabsHtml(new GLatLng(x,y),[content1,content2]);

			pobierzLinie(id);
		}
		
