var wyz_x = '';
var wyz_y = '';
var mapa = '';
var opcje = {	title: ''};
var googlemapelem = '';
var markerycount = 0;
var markery = [];

function dodajKontur(kolor) {

}

function pokazMarker(icon) {
	var licz = 0;
	for (licz = 0; licz < markerycount; licz ++) {
		var ikona = markery[licz].getIcon();
		var text = '' + ikona.image;
		if (text.indexOf(icon) != -1) {
			markery[licz].show();
		}
	}
}

function schowajMarker(icon) {
	var licz = 0;
	for (licz = 0; licz < markerycount; licz ++) {
		var ikona = markery[licz].getIcon();
		var text = '' + ikona.image;
		if (text.indexOf(icon) != -1) {
			markery[licz].hide();
		}
	}
}

function dodajMarker(wys, szer, chmura, link) {
	if (mapa != '') {
		var punkt = new GLatLng(wys, szer);
		var markid = markerycount;
		markerycount ++;		markery[markid] = new GMarker(punkt, opcje);
		mapa.addOverlay(markery[markid]);

		GEvent.addListener(markery[markid], 'click', function() { 
			if (chmura != '') {
				var cloud = '';
				if (googlemapelem != '' && !document.getElementById('google_cloud')) {
					cloud = document.createElement('div');
					cloud.id = 'google_cloud';
					cloud.innerHTML = '<div id="google_cloud_top"></div><div id="google_cloud_text"></div><div id="google_cloud_bottom"></div>';
					googlemapelem.appendChild(cloud);
				} else {
					cloud = document.getElementById('google_cloud');
				}
				cloud.style.display = 'none';
				document.getElementById('google_cloud_top').innerHTML = '<div id="google_cloud_wys">' + wys + '</div><div id="google_cloud_szer">' + szer + '</div><div id="google_cloud_close"></div>';
				document.getElementById('google_cloud_text').innerHTML = chmura;
				if (link != '') {
					document.getElementById('google_cloud_bottom').innerHTML = '<a href="/' + link + '.html" id="google_cloud_button" target="_blank">Czytaj więcej...</a>';
				} else {
					document.getElementById('google_cloud_bottom').innerHTML = '';
				}
				mapa.setCenter(punkt);
				var pozycja = mapa.fromLatLngToContainerPixel(punkt);
				cloud.style.left = (pozycja.x - 135) + 'px';
				cloud.style.bottom = (500 - pozycja.y) + 'px';
				document.getElementById('google_cloud_close').onclick = function() {
					cloud.style.display = 'none';
				}
				cloud.style.display = 'block';
			}
		});
		
	}}

function ustawIkone(icon_h, icon_w, shadow_w, shadow_h, icon, shadow) {
	opcje = {		'title': '',		'icon': dodajIkone(			icon_h, icon_w,			shadow_h, shadow_w, 
			icon,			shadow
		)	};
}function dodajIkone(wys, szer, wysC, szerC, url, urlC) {	var ikona = new GIcon();  	ikona.image = url;  	ikona.shadow = urlC;  	ikona.iconSize = new GSize(wys, szer);
	ikona.infoWindowAnchor = new GPoint(wys/2, szer);  	ikona.iconAnchor = new GPoint(wys/2, szer);  	ikona.shadowSize = new GSize(wysC, szerC);
	return ikona;}

function obslugaBledow(google_dir, google_info){
	if (google_info && google_dir) {
		if (google_dir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Nie znaleziono miejsca na ziemi o podanym adresie. Możliwe że adres jest zbyt nowy (niezaindexowany przez Google) lub źle podany.</p>';

		else if (google_dir.getStatus().code == G_GEO_UNAVAILABLE_ADDRESS) 
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Dane dotyczące trasy nie mogą zostać podane przez Google Maps z przyczyn prawnych lub umownych.</p>';

		else if (google_dir.getStatus().code == G_GEO_UNKNOWN_DIRECTIONS)
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Google Maps nie mógł obliczyć trasy łączących punkty. Związane jest to z brakiem połączenia lądowego między tymi punktami bądź brakiem informacji o trasach je łączących.</p>';

		else if (google_dir.getStatus().code == G_GEO_SERVER_ERROR)
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Geokodowanie lub wyszukiwanie trasy zakończyło się błędem, niestety powód jest nieznany w tym momencie.</p>';

		else if (google_dir.getStatus().code == G_GEO_MISSING_QUERY)
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Brakuje parametru HTTP q. Oznacza to że został podany pusty adres.</p>';

		else if (google_dir.getStatus().code == G_GEO_MISSING_ADDRESS) 
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Brakuje parametru HTTP q. Oznacza to że został podany pusty adres.</p>';

		else if (google_dir.getStatus().code == G_GEO_BAD_KEY)
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Nieprawidłowy kod Google Maps.</p>';

		else if (google_dir.getStatus().code == G_GEO_BAD_REQUEST)
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Nieprawidłowa odpowiedź serwera Google.</p>';

		else if (google_dir.getStatus().code == G_GEO_TOO_MANY_QUERIES)
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Google Maps otrzymał zbyt wiele zapytań ze strony w danym momencie. Spróbuj ponownie później.</p>';

		else 
			google_info.innerHTML = '<p><strong>Błąd: ' + google_dir.getStatus().code + '</strong> Nieznany błąd Google Maps.</p>';
	}
}

function resetujWyznaczanie(value, info, poz_x, poz_y) {
	wyz_x = poz_x;
	wyz_y = poz_y;
	var google_value = document.getElementById(value);
	if (google_value) google_value.value = '';
	var google_info = document.getElementById(info);
	if (google_info) google_info.innerHTML = '';
}

function dodajWyznaczanie(button, value, info, poz_x, poz_y, color) {
	var google_value = document.getElementById(value);
	var google_button =document.getElementById(button);
	var google_info = document.getElementById(info);

	var google_dir = new GDirections(mapa, google_info);
	
	GEvent.addListener(google_dir, 'error', function () {
		obslugaBledow(google_dir, google_info);
	});
	GEvent.addListener(google_dir, 'addoverlay', function () {
		if (google_dir.getStatus().code == G_GEO_SUCCESS) {
			var odl_text = google_dir.getSummaryHtml();

			var temp_text = odl_text;
			odl_text = odl_text.split('(');
			if (odl_text[0]) temp_text = '<p>Odległość: <strong>' + odl_text[0] + '</strong></p>';
			if (odl_text[1]) temp_text += '<p>Czas: <strong>' + odl_text[1].replace(')', '') + '</strong></p>';
			google_info.innerHTML = temp_text;

			var numMarkers = google_dir.getNumGeocodes();
			for (var licz = 0; licz < numMarkers; licz++) {
				var marker = google_dir.getMarker(licz);
				if (marker != null) marker.hide();
			}

			if (color != '') {
				var linia = google_dir.getPolyline();
				linia.setStrokeStyle({'color': color, 'opacity': 1, 'z-index': 100000});
				mapa.addOverlay(linia);
			}

			mapa.zoomOut();
		}
	});

	google_button.onclick = function () {
		if (wyz_x != '' && wyz_y != '') {
			poz_x = wyz_x;
			poz_y = wyz_y;
		}
		if (poz_x != '' && poz_y != '') {
			google_info.innerHTML = '';
			google_dir.load("from: " + google_value.value + " to: " + poz_x + ', ' + poz_y, { "locale": 'pl_PL' });
		}
		return false;
	}

	google_value.onkeydown = function (event) {
		if (wyz_x != '' && wyz_y != '') {
			poz_x = wyz_x;
			poz_y = wyz_y;
		}
		if (event.keyCode == 13 && poz_x != '' && poz_y != '') {
			google_info.innerHTML = '';
			google_dir.load("from: " + google_value.value + " to: " + poz_x + ', ' + poz_y, { "locale": 'pl_PL' });
		}
	}

}
function resetujMape(center_x, center_y, zoom) {
	mapa.setCenter(new GLatLng(center_x, center_y), zoom);
	mapa.clearOverlays();
}
function mapaStart(element, center_x, center_y, zoom, control, type) {
	googlemapelem = document.getElementById(element);
	mapa = new GMap2(googlemapelem ,{mapTypes: [G_NORMAL_MAP, G_SATELLITE_MAP]});	mapa.setCenter(new GLatLng(center_x, center_y), zoom);

	/*if (control != false) {
		if (control == 'small') mapa.addControl(new GSmallMapControl());
		else if (control == 'large') mapa.addControl(new GLargeMapControl());
	}
	if (type == true) {
		mapa.addControl(new GMapTypeControl());
	}*/

	mapa.setUIToDefault();

	GEvent.addListener(mapa, 'move', function () {
		if (document.getElementById('google_cloud')) {
			var cloud = document.getElementById('google_cloud');
			var wys = document.getElementById('google_cloud_wys').innerHTML;
			var szer = document.getElementById('google_cloud_szer').innerHTML;
			var pozycja = mapa.fromLatLngToContainerPixel(new GLatLng(wys, szer));
			cloud.style.left = (pozycja.x - 135) + 'px';
			cloud.style.bottom = (500 - pozycja.y) + 'px';
		}
	});
}

