var onMapLoad;
var slupkiOn = false;

var markerPoczatkowy = null;
var markerDocelowy = null;
var aktualnyMarker = null;
var map;
var G_PRZYSTANKI_MAP;
var wezlyNaMapie = false;
var trasaMM;
var tooltip;
//var gdir;

/** STALE */
var TYPMARK_TRAM = 0;
var TYPMARK_BUS = 1;
var TYPMARK_TRAM_BUS = 2;
var TYPMARK_WALK = 10;
var TYPMARK_START = 11;
var TYPMARK_END = 12;
var TYPMARK_PRZESIADKA1 = 13;
var TYPMARK_PRZESIADKA2 = 14;
var TYPMARK_WSKAZNIK = 15;

var TRAM_COLOUR = "#3A7ED6";
var BUS_COLOUR = "#D6543A";
var WALK_COLOUR = "#6f6f6d";

var tempDraw = new Array();


var icon_tram;
var icon_bus;
var icon_tram_bus;
var icon_walk
var icon_przesiadka1;
var icon_przesiadka2;
var startBubIco;
var endBubIco;
var wskaznikIco;

var mm;

function loadIcons()
{
	icon_tram = new GIcon();
	icon_tram.image = "/gfx/map_icons/ico_t.png";
	icon_tram.iconSize = new GSize(18, 18);
	icon_tram.iconAnchor = new GPoint(9, 9);
	icon_tram.infoWindowAnchor = new GPoint(9, 9);

	icon_bus = new GIcon();
	icon_bus.image = "/gfx/map_icons/ico_a.png";
	icon_bus.iconSize = new GSize(18, 18);
	icon_bus.iconAnchor = new GPoint(9, 9);
	icon_bus.infoWindowAnchor = new GPoint(9, 9);

	icon_tram_bus = new GIcon();
	icon_tram_bus.image = "/gfx/map_icons/ico_at.png";
	icon_tram_bus.iconSize = new GSize(20, 20);
	icon_tram_bus.iconAnchor = new GPoint(10, 10);
	icon_tram_bus.infoWindowAnchor = new GPoint(10, 10);

	icon_walk = new GIcon();
	icon_walk.image = "/gfx/map_icons/ico_walk.png";
	icon_walk.iconSize = new GSize(43, 40);
	icon_walk.iconAnchor = new GPoint(48, 45);
	icon_walk.infoWindowAnchor = new GPoint(48, 45);

	icon_przesiadka1 = new GIcon();
	icon_przesiadka1.image = "/gfx/map_icons/ico_change.png";
	icon_przesiadka1.iconSize = new GSize(42, 44);
	icon_przesiadka1.iconAnchor = new GPoint(-8, 54);
	icon_przesiadka1.infoWindowAnchor = new GPoint(21, 22);

	icon_przesiadka2 = new GIcon();
	icon_przesiadka2.image = "/gfx/map_icons/ico_change.png";
	icon_przesiadka2.iconSize = new GSize(42, 44);
	icon_przesiadka2.iconAnchor = new GPoint(-8, 54);
	icon_przesiadka2.infoWindowAnchor = new GPoint(21, 22);

	startBubIco = new GIcon();
	startBubIco.image = "/gfx/map_icons/ico_start.png";
	startBubIco.iconSize = new GSize(38, 76);
	startBubIco.iconAnchor = new GPoint(2, 88);
	startBubIco.infoWindowAnchor = new GPoint(16, 40);

	endBubIco = new GIcon();
	endBubIco.image = "/gfx/map_icons/ico_end.png";
	endBubIco.iconSize = new GSize(38, 76);
	endBubIco.iconAnchor = new GPoint(2, 88);
	endBubIco.infoWindowAnchor = new GPoint(16, 40);

	wskaznikIco = new GIcon();
	wskaznikIco.image = "/gfx/map_icons/ico_this.png";
	wskaznikIco.iconSize = new GSize(22, 34);
	wskaznikIco.iconAnchor = new GPoint(11, 46);
	wskaznikIco.infoWindowAnchor = new GPoint(16, 40);

}

function getIconByType(typ)
{
	var icon = icon_walk;

	/* TYPY PRZYSTANKU */
	if (typ == TYPMARK_BUS)
		icon = icon_bus;
	if (typ == TYPMARK_TRAM)
		icon = icon_tram;
	if (typ == TYPMARK_TRAM_BUS)
		icon = icon_tram_bus;
	if (typ == TYPMARK_WALK)
		icon = icon_walk;

	/* TYPY MARKEROW - start, end, przesiadki */
	if (typ == TYPMARK_PRZESIADKA1)
		icon = icon_przesiadka1;
	if (typ == TYPMARK_PRZESIADKA2)
		icon = icon_przesiadka2;
	if (typ == TYPMARK_START)
		icon = startBubIco;
	if (typ == TYPMARK_END)
		icon = endBubIco;
	if (typ == TYPMARK_WSKAZNIK)
		icon = wskaznikIco;

	if (typ != TYPMARK_WALK && icon == icon_walk)
	{
		icon = new GIcon();
		icon.image = "/gfx/map_icons/lines/" + typ.substring(3) + ".png";
		icon.iconSize = new GSize(66, 40);
		icon.iconAnchor = new GPoint(75, 46);
		icon.infoWindowAnchor = new GPoint(75, 46);

	}
	return icon;
}


function mapsLoaded()
{
	map = new google.maps.Map2(document.getElementById("map"));
	map.setCenter(new google.maps.LatLng(51.107845, 17.030143), 14);
	loadIcons();

	load();
	if (onMapLoad)
		onMapLoad();
}

function loadMaps(onMapL)
{
	onMapLoad = onMapL;
	google.load("maps", "2", {"callback" : mapsLoaded});
}

function load()
{
		//naniesWezlyPrzystankowe("GMPrzystanki", 14, 15, 0);
		GEvent.addListener(map, "zoomend", function(zoomOld, zoomNew)
		{
			if ($("#show_stops_check").attr("checked") == true)
			{
				if (slupkiOn == false && zoomNew >= 16 && zoomNew <= 19)
				{
					slupkiOn = true;
					naniesWezlyPrzystankowe("GMSlupki", 16, 19, 1);
				}
			}
		});
		// buttony w formie dropdown'a
		map.addControl(new GMenuMapTypeControl());

		map.setCenter(new GLatLng(51.10784511112753, 17.03014328978287),14);
		var stopFrom = $('#stopFrom');
		if (stopFrom && stopFrom.val() == undefined)
		{
			stopFrom = $('#stopListFrom');
			$('#stopListFrom').change(function()
			{
				oznaczPrzyst(stopFrom.val(), 0);
			});
		}

		var stopTo = $('#stopTo');
		if (stopTo && stopTo.val() == undefined)
		{
			stopTo = $('#stopListTo');
			$('#stopListTo').change(function()
			{
				oznaczPrzyst(stopTo.val(), 1);
			});
		}
		if (stopFrom && stopTo && stopFrom.val() != undefined && stopTo.val() != undefined)
		{
			if (stopFrom.val().length > 0)
				oznaczPrzyst(stopFrom.val(), 0);
			if (stopTo.val().length > 0)
				oznaczPrzyst(stopTo.val(), 1);
		}
		// maksymalny i minimalny zoom
		var mt = map.getMapTypes();
		for (var i=0; i<mt.length; i++) {
			mt[i].getMinimumResolution = function() {return 11;}
		}

		map.addControl(new GSmallMapControl());
		// map.enableScrollWheelZoom();
		trasaMM = new MarkerManager(map);
		tooltip = document.createElement("div");
		document.getElementById("map").appendChild(tooltip);
		tooltip.style.visibility="hidden";



		$("#show_stops_check").click(function ()
		{
			updateShowStops();
		});
		updateShowStops();
		//TEMPORARY
//		GEvent.addListener(map, "click", function(marker, point) {
//			//alert("You clicked the map " + point);
//			tempDraw.push(point);
//			//map.clearOverlays();
//			map.addOverlay(new GPolyline(tempDraw, '#777777', 4, 0.6));
//
//			var mark = new GMarker(point, wskaznikIco);
//			GEvent.addListener(mark, "click", function() {
//				var punkty = "";
//
//				for (var i = 0; i < tempDraw.length; i++)
//				{
//					if (tempDraw[i] != undefined)
//					{
//						punkty += tempDraw[i].lat() + '|' + tempDraw[i].lng() + '|';
//					}
//				}
//				$.get("Rysuj", {punkty : punkty}, function(data) {
//
//				});
//
//				tempDraw = new Array();
//			});
//			map.addOverlay(mark);
//		});
//		gdir = new GDirections(null);
//		GEvent.addListener(gdir, "load", function()
//		{
//			var poly = gdir.getPolyline();
//			poly.setStrokeStyle({color:WALK_COLOUR});
//			map.addOverlay(poly);
//		});
//		GEvent.addListener(gdir,"error", function()
//		{
//			var code = gdir.getStatus().code;
//			var reason="Code "+ code;
//			if (reasons[code]) {
//				reason = "Code "+code +" : " + reasons[code];
//			}
//			alert("Failed to obtain directions, "+reason);
//		});

//		return map;
}

function updateShowStops()
{
	if (!$("#show_stops_check").is('*'))
		return ;

	var date = new Date();
	date.setTime(date.getTime() + (30 * 24 * 60 * 60 * 1000));
	var ch = $("#show_stops_check").attr("checked");
	if (ch == true)
	{
		var zoom = map.getZoom();
		if (zoom >= 16 && zoom <= 19)
			naniesWezlyPrzystankowe("GMSlupki", 16, 19, 1);
		naniesWezlyPrzystankowe("GMPrzystanki", 14, 15, 0);
	}
	else
	{
		map.clearOverlays();
		if (markerPoczatkowy != null)
			map.addOverlay(markerPoczatkowy);
		if (markerDocelowy != null)
			map.addOverlay(markerDocelowy);
		if (mm != null)
			mm.clearMarkers();
	}
	$.cookie("kmAdvShowStops",ch, { path:'/', expires: date });
}

function naniesPrzystanek(przystanek, wezly, center)
{
	$.get("/GMPrzystanek", {przystanek:przystanek, wezly:wezly}, function (data)
	{
		var data2= GXml.parse(data);
		var markers = data2.getElementsByTagName("przystanek");
		naniesPrzystanki(markers, false, null, null, null, center);
	});
}

function addListener(marker)
{
	GEvent.addListener(marker, "mouseover", function()
	{
		showTooltip(marker);
	});
	GEvent.addListener(marker, "mouseout", function()
	{
		tooltip.style.visibility="hidden";
	});
	GEvent.addListener(map, "zoomend", function()
	{
		tooltip.style.visibility="hidden";
	});
}


function addListeners(marker, html)
{
	addListener(marker);
	if (html != null)
	{
		GEvent.addListener(marker, "click", function() {
			aktualnyMarker = marker;
			marker.openInfoWindow(html);
		});
		GEvent.addListener(marker, "singlerightclick", function() {
			marker.openInfoWindow(html);
		});
	}

}

function createMarker(point, name, html, typ)
{
	createMarker(point, name, html, typ, false);
}

function createMarker(point, name, html, typ, draggable)
{
	var marker = new GMarker(point, {icon:getIconByType(typ), draggable: draggable});
	//marker.tooltip = "<div class='tooltip'><span class='tooltip_ctnr'>" + name + "</span><div id='triangle'></div></div>";
	marker.tooltip = "<div class='tooltip'>" + name + "</div>";
	addListeners(marker, html);
	return marker;
}

//function dragEnd(marker, name, html)
//{
//	var point = marker.getLatLng();
//	$.get("GMAdres",{lat:point.lat(), lng:point.lng()}, function(data)
//	{
//		var adrs = data.getElementsByTagName("p");
//		if (adrs.length > 0)
//		{
//			var adr = adrs[0].firstChild.nodeValue;
//			var i = html.indexOf("<a");
//			if (i > 0)
//			{
//				var i2 = html.indexOf("</a>");
//				html = html.replace(html.substring(i, i2), "<b>" + adr + "</b>");
//			}
//			//html = adr;
//			name = adr;
//			GEvent.clearListeners(marker);
////			GEvent.addListener(marker, "dragend", function() {
////				dragEnd(marker, name, html);
////			});
//			marker.tooltip = "<div class='tooltip'>" + name + "</div>";
//			addListeners(marker, html);
//		}
//	});
//}


function addMarkerEvent_Wezel(marker, przyst, slupek)
{
	GEvent.addListener(marker, "click", function()
	{
		var loadingDiv = document.createElement("div");
		loadingDiv.innerHTML = "<div><ul class='ac_results'><li><img src='/gfx/autocomplete_loading.gif'/></li></ul></div>";
		loadingDiv.style.visibility = "hidden";
		map.getContainer().appendChild(loadingDiv);
		var point = map.fromLatLngToContainerPixel(marker.getLatLng());
		var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(point.x,point.y));
		pos.apply(loadingDiv);
		loadingDiv.style.visibility = "visible";

		var is = true;
		if ($('#stopTo').val() == undefined && $('#stopListTo').val() == undefined)
			is = false;
		$.get("gmap_marker_content.jsp", {przyst:przyst, slupek: slupek, isStopTo:is}, function (content)
		{
			aktualnyMarker = marker;
			markerMaxContent(marker, przyst, slupek, content);
			loadingDiv.style.visibility = "hidden";
		});

	});
}


function markerMaxContent(marker, przyst, slupek, content)
{
	var extContent = document.createElement('div');
	extContent.innerHTML = 'Loading...';
	marker.openInfoWindowHtml(content, {maxContent: extContent, maxWidth:200});

	var window = map.getInfoWindow();
	GEvent.addListener(window,'maximizeclick',function()
	{
		$.post("gmap_marker_extended.jsp", {przyst:przyst, slupek:slupek}, function(data)
		{
			extContent.innerHTML = data;
		});
	});
}


function trasaHTML(j, przyst, slupek, linia, wariant, nrPrzystanku, kierunek, typ, odjazd, showPrev, showNext)
{
	// Wyswietlic 'przyjazd' czy 'odjazd'
	var loc_odjazd_przyjazd;
	if (j == 0)
	{
		if (wariant != "WALK")
			loc_odjazd_przyjazd = loc_odjazd;
		else
			loc_odjazd_przyjazd = loc_przejscieOdCzas;
	}
	else
	{
		if (wariant != "WALK")
			loc_odjazd_przyjazd = loc_przyjazd;
		else
			loc_odjazd_przyjazd = loc_przejscieDoCzas;
	}

	var liniaClass = "linia_autobus";
	if (typ == 0)
		liniaClass = "linia_tramwaj";
	if (wariant == "WALK")
		liniaClass = "walk";

	var stopLink = przyst;
	if (typ != -1)
	{
		stopLink = "";
		
		if (showPrev)
			stopLink += "<a title=\"" + loc_poprzedni + "\" class=\"prev\" href=\"#\" onclick=\"aktualnyMarker.goback(); return false;\"><img src=\"/gfx/ico_arrow_blue.gif\" title=\"poprzedni\"/></a>";		
		stopLink += "<a class=\"nazwa_przystanku\" href=\"/rozklad_przystanek.do?przystanek=" + przyst + "\">" + przyst + "</a>";
		if (slupek)
			stopLink += "<a class=\"slupek\" href=\"/rozklad_przystanek.do?slupek=" + slupek + "\">(" + slupek + ")</a>";
		if (showNext)
			stopLink += "<a title=\"" + loc_nastepny + "\" class=\"next\" href=\"#\" onclick=\"aktualnyMarker.gonext(); return false;\"><img src=\"/gfx/ico_arrow_blue.gif\" title=\"następny\"/></a>";
	}

	var html = "<div class=\"cloud_thinner\"><div class='cloud_header'>"
		+ stopLink + "</div>"
		+ "<div class=\"cloud_content\">"

		+ "<div class=\"col_linie\"><ul><li class=\""
		+ liniaClass + "\">";

	if (wariant != "WALK")
		html = html + "<a href=\"/rozklad_wariant.do?linia=" + linia + "&nrWariantu=" + wariant + "&przystanek=" + nrPrzystanku +"\" title =\"\">" + linia
		+ "</a>";
	else
		html = html + "<a href=\"#\" title =\"" + loc_przejsciePiesze + "\">P</a>";

	html = html + "</li></ul></div></div>"
		+ "<div class='cloud_footer'>"
		+ "<p class='kierunek'>" + loc_kierunek + ": <strong>" + kierunek + "</strong></p>";

	if (odjazd != null)
		html += "<p class='godz'>" + loc_odjazd_przyjazd + ": " + "<strong>" + odjazd + "</strong>" + "</p>";
	html += "</div></div>";

	return html;
}


function naniesPrzystanki(markers, czyPojazdHTML, linia, wariant, doc, center, level1, level2)
{
	if (level1 == undefined)
		level1 = 14;
	else
		level1 = parseInt(level1);

	if (level2 == undefined)
		level2 = 17;
	else
		level2 = parseInt(level2);
	var bounds = new GLatLngBounds();
	var mrks = new Array(markers.length);
	for (var j = 0; j < markers.length; j++)
	{
		var lok = new Lok(markers[j]);

		var point;
		if (lok.lat != 0 && lok.lng != 0)
		{
			point = new GLatLng(lok.lat, lok.lng);

			var m = null;
			if (czyPojazdHTML == true)
			{
				var pojazdHTML = trasaHTML(j, lok.przyst, lok.slupek, linia, wariant, lok.nrPrzystanku, doc, lok.typ,
						lok.odjazd, true, true);
				m = createMarker(point, lok.przyst, pojazdHTML, lok.typ);
			} else
			{

				var html = "<div class=\"cloud\"><div class='cloud_header'>" +
				"<a class=\"nazwa_przystanku\" href=\"#\">" +
				lok.przyst + "</a></div><div class='cloud_footer'>" +
				"<p class='kierunek'><strong><a href='/rozklad_przystanek.do?slupek=" + lok.slupek + "'>" + loc_slupek + " " + lok.slupek + "</a></strong><p></div></div>";
				m = createMarker(point, lok.przyst, html, lok.typ);
				//addMarkerEvent_Slupki(mrks[j], przyst, slupek);
			}
			mrks[j] = m;

			if (center == true)
				bounds.extend(point);
		}
	}

	trasaMM.addMarkers(mrks, level1, level2);
	if (center == true)
	{
		var zoom = map.getBoundsZoomLevel(bounds) - 1;
		if (zoom < 12)
			zoom = 12;

			map.setZoom(zoom);
			map.setCenter(bounds.getCenter());
	}
	return mrks;
}


function getPoints(points)
{
	var pts = new Array();
	if (points != null && points.length > 0)
	{
		var split = points.split(";");
		for (var a = 0; a < split.length; a++)
		{
			if (split[a] == null || split[a].length < 5)
				break;
			pts.push(GLatLng.fromUrlValue(split[a]));
		}
	}
	return pts;
}

function naniesTrase(data, drawLines, kursXMLName, center, setZoom, level1, level2)
{
	if (setZoom == undefined)
		setZoom = true;

	var odjazd;
	var pts;
	var kursy = data.getElementsByTagName(kursXMLName);
	var przyst;
	var lastChangeHtml = "";
	var trasa = new Array(kursy.length);
	var bounds = new GLatLngBounds();

	var poczatkowyHTML;
	var docelowyHTML;

	if (trasaMM)
		trasaMM.clearMarkers();
	trasaMM = new MarkerManager(map);


	// nanosimy przystanki na mape
	for ( var i = 0; i < kursy.length; i++)
	{
		var pocz = kursy[i].getAttribute("pocz");
		var doc = kursy[i].getAttribute("doc");
		var linia = kursy[i].getAttribute("linia");
		var wariant = kursy[i].getAttribute("wariant");
		var nrPrzystanku = kursy[i].getAttribute("nr");
		if (nrPrzystanku == null)
			nrPrzystanku = 0;

		var markers = kursy[i].getElementsByTagName("przystanek");

		var typ = parseInt(markers[0].getAttribute("typ"));
		var slupek = "";
		if (i == 0)
		{
			slupek = markers[0].getAttribute("slupek");
			odjazd = markers[0].getAttribute("odjazd");
			przyst = markers[0].getAttribute("przystanek");
			poczatkowyHTML = trasaHTML(0, przyst, slupek, linia, wariant, nrPrzystanku, doc, typ, odjazd, false, false);
		}
		if (i + 1 == kursy.length)
		{
			var currMark = markers[markers.length-1];
			slupek = currMark.getAttribute("slupek");
			odjazd = currMark.getAttribute("odjazd");
			przyst = currMark.getAttribute("przystanek");
			docelowyHTML = trasaHTML(kursy[i].length-1, przyst, slupek, linia, wariant, nrPrzystanku, doc, typ, odjazd, false, false);
		}

		var mrks = naniesPrzystanki(markers, true, linia, wariant, doc, false, level1, level2);
		var lastMrks;
		if (drawLines)
		{
			pts = new Array();
			var lineColour = BUS_COLOUR;
			if (typ == 0)
				lineColour = TRAM_COLOUR;
			if (wariant == "WALK")
				lineColour = WALK_COLOUR;
			for (var j = 0; j < markers.length; j++)
			{
				pts.push(mrks[j].getLatLng());
//				var points = markers[j].getAttribute("points");
//				var p = getPoints(points);
//				if (p.length < 1)
//					p = points;
//				if (p.length > 0)
//					pts = pts.concat(p);

			}

			map.addOverlay(new GPolyline(pts, lineColour, 4, 0.6));
		}
		var czasNaPrzes;
		if (i > 0)
			czasNaPrzes = kursy[i-1].getAttribute("przesiadka");

		// icony na mapie
		for (j = 0; j < markers.length; j++)
		{
			slupek = markers[j].getAttribute("slupek");
			bounds.extend(mrks[j].getLatLng());
			if (i == 0 && j == 0)
				map.addOverlay(createMarker(mrks[j].getLatLng(), "<p class='cloud_subt'>" + (typ == -1 ? loc_adresPocz : loc_przystPocz) + "</p>" + poczatkowyHTML, "<p class='cloud_subt'>" + loc_przystPocz + "</p>" + poczatkowyHTML, TYPMARK_START));

			if (i + 1 == kursy.length && j + 1 == mrks.length)
				map.addOverlay(createMarker(mrks[j].getLatLng(), "<p class='cloud_subt'>" + (typ == -1 ? loc_adresDoc : loc_przystDoc) + "</p>" + docelowyHTML, "<p class='cloud_subt'>" + loc_przystDoc + "</p>" + docelowyHTML, TYPMARK_END));
			else
			if (j == 0 || j + 1 == mrks.length)
			{
				// przesiadki
				odjazd = markers[j].getAttribute("odjazd");
				var przyst = markers[j].getAttribute("przystanek");

				var pojazdHtml = trasaHTML(j, przyst, slupek, linia, wariant, nrPrzystanku, doc, typ, odjazd, false, false);
				var changeHtml = "<table class='przesiadka'>" +
								"<tr>" +
									"<td class='centered' colspan='3'>" + "<p class='cloud_subt'>" + loc_przesiadka + "</p>" + "</td>" +
								"</tr>" +
								"<tr>" +
									"<td>" + lastChangeHtml + "</td>" +
									"<td>" + "<img src=\"/gfx/ico_tabh_przesiadki.gif\"/></td>" +
									"<td>" + pojazdHtml + "</td>" +
								"</tr>" +
								"<tr>" +
									"<td class='centered' colspan='3'>";

				if (czasNaPrzes >= 0 && czasNaPrzes != null)
					changeHtml += "<p class='cloud_note'>" + loc_czasNaPrzesiadke + ": <strong>" + czasNaPrzes + " min.</strong></p>";

				changeHtml += "</td>" +
								"</tr>" +
								"</table>";

				if (j == 0)
				{
					map.addOverlay(createMarker(mrks[j].getLatLng(), pojazdHtml, pojazdHtml, "$L$" + linia));
					if (i > 0 && kursy[i-1].getAttribute("wariant") != "WALK" && kursy[i].getAttribute("wariant") != "WALK")
						map.addOverlay(createMarker(lastMrks[lastMrks.length-1].getLatLng(), changeHtml, changeHtml, TYPMARK_PRZESIADKA1));
					else if (i > 0 && kursy[i-1].getAttribute("wariant") != "WALK" && kursy[i].getAttribute("wariant") == "WALK")
						map.addOverlay(createMarker(lastMrks[lastMrks.length-1].getLatLng(), changeHtml, changeHtml, TYPMARK_WALK));

				}
				lastChangeHtml = pojazdHtml;

			}

			lastMrks = mrks;
		}
		trasa[i] = mrks;
	}

	var current = null;
	var last = null;
	for (i = 0; i < trasa.length; i++)
	{
		for (j = 0; j < trasa[i].length; j++)
		{
			current = trasa[i][j];
			if (last)
			{
				current.prev = last;
				last.next = current;
			}
			current.goback = function() {if (this.prev) {map.panTo(this.prev.getLatLng()); GEvent.trigger(this.prev, "click"); }return false;}
			current.gonext = function() {if (this.next) {map.panTo(this.next.getLatLng());GEvent.trigger(this.next, "click"); } return false;}
			last = current;
		}
	}
	if (center == true)
	{
		if (setZoom)
		{
			var zoom = map.getBoundsZoomLevel(bounds);
			map.setZoom(zoom);
		}
		map.panTo(bounds.getCenter());
		trasaMM.refresh();
	}

	return trasa;
}

function drawWalkLines(pts)
{
	var path = "from: " + pts[0].toUrlValue() + "  to: " + pts[1].toUrlValue();
	gdir.load(path, {getPolyline:true});
}

function naniesWezlyPrzystankowe(servlet, from, to, wezelSlupek)
{
	$.get(servlet, {}, function (doc)
	{

		$("#show_stops_loading").html(" <strong>" + loc_wczytuje + "</strong>");
		var tramwaje = [];
		var autobusy = [];
		var markers = doc.getElementsByTagName("przystanek");

		for (var i = 0; i < markers.length; i++)
		{
			var lok = new Lok(markers[i]);
			if (lok.lat != 0 && lok.lng != 0)
				{
					var point = new GLatLng(lok.lat, lok.lng);
					var html = lok.przyst;//loc_przystanek + ":<b>" +  przyst;
					var marker = createMarker(point, lok.przyst, null, lok.typ);
					if (wezelSlupek == 0)
						addMarkerEvent_Wezel(marker, lok.przyst, '');
					else
						addMarkerEvent_Wezel(marker, lok.przyst, lok.slupek);
					if (lok.typ == TYPMARK_TRAM || lok.typ == TYPMARK_TRAM_BUS)
						tramwaje.push(marker);
					else if (lok.typ != -1)
						autobusy.push(marker);


				}
			var dots = ".";

			if ((i % 50) == 0)
			{
				for (var a = 0; a < i/50; a++)
					dots += ".";
				var s = " <strong>"+ loc_wczytuje + " " +  dots + "</strong>";
				$("#show_stops_loading").html(s);
			}

		}
		mm = new MarkerManager(map);
		mm.addMarkers(autobusy, from, to);
		mm.addMarkers(tramwaje, from, to);
		mm.refresh();
		$("#show_stops_loading").html("");
	});
}


function pokazNaMapieTrase(routeNr, fake)
{
	var sel = $("tr[rel='p_" + routeNr + "']");
	if (!$(sel).attr("selected"))
	{
		$("tr[rel^='p_']").removeClass("selected");
		$("tr[rel='p_" + routeNr + "']").attr("class", "selected");
		$.get("GMPolaczenieServlet", {
			routeNr :routeNr,
			f :fake
		}, function(data) {
			map.clearOverlays();
			naniesTrase(data, true, "kurs", true);
		});
	}
}

/*
 * Pokaz chmurke
 */
function showTooltip(marker)
{
	tooltip.innerHTML = marker.tooltip;
	var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
	var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor=marker.getIcon().iconAnchor;
	var width=marker.getIcon().iconSize.width;
	var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width,- offset.y + point.y +anchor.y));
	pos.apply(tooltip);
	tooltip.style.visibility="visible";
	}

function jakoPoczatkowy(value, name)
{
	if (name == undefined)
	{
		name = "stopFrom";
		if (document.getElementById(name) == undefined || document.getElementById(name) == null)
		{
			name = "stopListFrom";
			var html = '<option value="' + value + '">' + value +  '</option>';
			var el = document.createElement('option');
			el.setAttribute("value", value);
			el.innerHTML = value;
			document.getElementById(name).insertBefore(el, document.getElementById(name).childNodes[0]);
			document.getElementById(name).selectedIndex = "0";
		}
		else
		{
			document.getElementById(name).value = value;
		}

	}
	if (aktualnyMarker != null)
	{
		aktualnyMarker.closeInfoWindow();
		//document.getElementById(name).focus();
		//document.forms[0].stopFrom.select();
		if (markerPoczatkowy != null)
			map.removeOverlay(markerPoczatkowy);
		var html = getHTMLPrzystPocz(value, true)
		markerPoczatkowy = createMarker(aktualnyMarker.getLatLng(), loc_przystPocz + "<br/>" + value,
				html, TYPMARK_START);

		map.addOverlay(markerPoczatkowy);
		//map.panTo(markerPoczatkowy.getLatLng());
	}
}

function jakoDocelowy(value, name)
{
	if (name == undefined)
	{
		name = "stopTo";
		if (document.getElementById(name) == undefined || document.getElementById(name) == null)
		{
			name = "stopListTo";
			var html = '<option value="' + value + '">' + value +  '</option>';
			var el = document.createElement('option');
			el.setAttribute("value", value);
			el.innerHTML = value;
			document.getElementById(name).insertBefore(el, document.getElementById(name).childNodes[0]);
			document.getElementById(name).selectedIndex = "0";
		}
		else
		{
			document.getElementById(name).value = value;
		}

	}
	if (aktualnyMarker != null)
	{
		aktualnyMarker.closeInfoWindow();
		//document.getElementById(name).focus();
		//document.forms[0].stopTo.select();
		if (markerDocelowy != null)
			map.removeOverlay(markerDocelowy);
		var html = getHTMLPrzystDoc(value, true);
		markerDocelowy = createMarker(aktualnyMarker.getLatLng(), loc_przystDoc + ":<br/> " + value, html, TYPMARK_END);
		map.addOverlay(markerDocelowy);
		//map.panTo(markerDocelowy.getLatLng());
	}
}

function getHTMLPrzyst(nazwa, czyPrzystanek, loc_miejsce)
{
	var html = "<div class='cloud'><div class='cloud_content'>"
		+ loc_miejsce + "</div><div class='cloud_header'>";
	if (czyPrzystanek)
		html+= "<a class=\"nazwa_przystanku\" href=\"/rozklad_przystanek.do?przystanek=" + nazwa + "\">" + nazwa + "</a>";
	else
		html+= "<b>" + nazwa + "</b>";
	html+= "</div></div>";
	return html;
}

function getHTMLPrzystPocz(nazwa, czyPrzystanek)
{
	return getHTMLPrzyst(nazwa, czyPrzystanek, loc_miejscePocz);
}

function getHTMLPrzystDoc(nazwa, czyPrzystanek)
{
	return getHTMLPrzyst(nazwa, czyPrzystanek, loc_miejsceDoc);
}

function oznaczPrzyst(przystanek, poczDoc)
{
	//if (przystanek && przystanek.length() > 0)
	//{

		$.get("/GMPrzystanek", {przystanek:przystanek, wezly:true}, function (data)
		{
			var data2 = GXml.parse(data);
			var markers = data2.getElementsByTagName("przystanek");
			if (markers.length > 0)
			{
				var lok = new Lok(markers[0]);
				var point = new GLatLng(lok.lat, lok.lng);
				if (poczDoc == 0)
				{
					if (markerPoczatkowy != null)
						map.removeOverlay(markerPoczatkowy);
					var html = getHTMLPrzystPocz(lok.przyst, lok.typ != -1? true: false);

					markerPoczatkowy = createMarker(point, loc_miejscePocz + ": " + lok.przyst, html, TYPMARK_START);
					map.addOverlay(markerPoczatkowy);
					map.panTo(markerPoczatkowy.getLatLng(), map.getZoom());
					aktualnyMarker = markerPoczatkowy;
				} else
				{
					if (markerDocelowy != null)
						map.removeOverlay(markerDocelowy);
					var html = getHTMLPrzystDoc(lok.przyst, lok.typ != -1? true: false);
					markerDocelowy = createMarker(point, loc_miejsceDoc + ": " + lok.przyst, html, TYPMARK_END);
					map.addOverlay(markerDocelowy);
					map.panTo(markerDocelowy.getLatLng(), map.getZoom());
					aktualnyMarker = markerDocelowy;
				}
			}
		});
	//}
}

function Lok(element)
{
	this.lat = parseFloat(element.getAttribute("lat"));
	this.lng = parseFloat(element.getAttribute("lng"));
	this.typ = element.getAttribute("typ");
	this.przyst = element.getAttribute("przystanek");
	this.odjazd = element.getAttribute("odjazd");
	this.slupek = element.getAttribute("slupek");
	this.nrPrzystanku = element.getAttribute("nr");
	if (this.nrPrzystanku == null)
		this.nrPrzystanku = 0;
}




