/*
 * Google Maps Search functions
 * by Jacek Partyka & Tomasz Banasiak
 */
var markers = [];
var znaczniki = new Array();

var initialized = false;

// ====== Array for decoding the failure codes ======
/*
 * var reasons=[]; reasons[G_GEO_SUCCESS] = "Success";
 * reasons[G_GEO_MISSING_ADDRESS] = "Missing Address: The address was either
 * missing or had no value."; reasons[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address:
 * No corresponding geographic location could be found for the specified
 * address."; reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address: The
 * geocode for the given address cannot be returned due to legal or contractual
 * reasons."; reasons[G_GEO_BAD_KEY] = "Bad Key: The API key is either invalid
 * or does not match the domain for which it was given";
 * reasons[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries: The daily geocoding
 * quota for this site has been exceeded."; reasons[G_GEO_SERVER_ERROR] =
 * "Server error: The geocoding request could not be successfully processed.";
 * 
 */

function showAddressOnMap(lat, lon, tytul, adres) {
	var tekst = document.getElementById('obrazek_pokaz_mape');
	if (tekst.innerHTML.indexOf('na mapie') != -1) {
		$('#mapTR').show();
		tekst.innerHTML = 'Schowaj mapę';
		var map;
		var wartosc;

		if (lat > 0 || lon > 0) {
			map = new GMap(document.getElementById("map"));
			map.setCenter(new GLatLng(parseFloat(lat), parseFloat(lon)), 14);
			map.setUIToDefault();
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
			var marker = new GMarker(new GLatLng(parseFloat(lat),
					parseFloat(lon)));
			map.addOverlay(marker);
			map.openInfoWindowHtml(map.getCenter(), "<h3>" + tytul + "</h3>"
					+ adres);
			wartosc = true;

		} else {
			document.getElementById("map").style.height = '100px';
			document.getElementById("map").innerHTML = '<div class="message">Nie można znaleźć adresu, przepraszamy.</div>';
			wartosc = false;
		}

	} else {
		$('#mapTR').slideUp('slow');
		tekst.innerHTML = 'Pokaż na mapie';
	}
	return false;
	return wartosc;
}

// moja funkcja dodajaca marker na bazie przykładów GMap API
/*
 * var baseIcon = new GIcon(G_DEFAULT_ICON); baseIcon.shadow =
 * "m/img/shadow.png"; baseIcon.iconSize = new GSize(25, 27);
 * baseIcon.shadowSize = new GSize(30, 27); baseIcon.iconAnchor = new GPoint(9,
 * 27); baseIcon.infoWindowAnchor = new GPoint(18, 5);
 */

function vAddMarker(point, title, addr, link) {
	/*
	 * var letteredIcon = new GIcon(baseIcon); letteredIcon.image = ico;
	 * 
	 * 
	 * markerOptions = { icon:letteredIcon };
	 */
	var marker = new GMarker(point);

	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml("<b>" + title + "</b><br/>" + addr + "<br/><a href="+link+">Zobacz tą ofertę &raquo;</a>");
	});

	// dodajemy znaczniki do tablicy
	var punkt = new Array(3);
	punkt[0] = point;
	punkt[1] = title;
	punkt[2] = addr;

	znaczniki.push(punkt);

	return marker;

}

function setLoading(mode) {
	if (mode == 1) {
		document.getElementById('message').innerHTML = '<b>Pobieranie danych...</b>';
	}
	if (mode == 2) {
		document.getElementById('message').innerHTML = '<b>Rysowanie punktów...</b>';
	}
	if (mode == 3) {
		document.getElementById('message').innerHTML = '<b>Oczekiwanie na ustalenie pozycji mapy...</b>';
	}
	if (mode == 4) {
		document.getElementById('message').innerHTML = '<b>Wyszukiwanie adresu...</b>';
	}
}

function startMap() {
	if(initialized) return true;
	
	initialized = true;
	
	var geo = new GClientGeocoder();
	geo
			.getLatLng(
					'polska',
					function(result) {
						if (result) {
							map.setCenter(result, 6);
							GEvent.addListener(map, 'dragend', function() {
								setLoading(1);
								updatePoints();
							});
							GEvent.addListener(map, 'zoomend', function() {
								setLoading(1);
								updatePoints();
							});
							GEvent.addListener(map, 'dragstart', function() {
								setLoading(3);
								updatePoints();
							});

							updatePoints();
						} else {
							alert('Niestety nie znaleziono podanej lokacji, lub nie można ustalić jej jednoznacznie. Spróbuj wpisać inne słowa kluczowe. Zalecana forma zapytania to "Miasto, ulica"');
							return false;
						}
					});
}

function deletePoints() {
	j = 0;
	if (markers.length) {
		for ( var i = 0; i < markers.length; i++) { // cycle thru locations
			markers[i].remove();
			j++;
		}
	}
}

function goTo(adres) {
	setLoading(4);
	var geo = new GClientGeocoder();
	if (!geo)
		return;
	geo
			.getLatLng(
					adres,
					function(punkt) {
						if (!punkt) {
							// jeśli punkt nie istnieje, to adres nie został
							// znaleziony
							alert(adres + " nie został znaleziony.");
						} else {
							// centrujemy na znalezionym punkcie
							map.setCenter(punkt, 14);

							// czyścimy markery z mapy
							map.clearOverlays();

							// dodajemy w tym miejscu marker
							var ikona = new GIcon(G_DEFAULT_ICON);
							ikona.image = 'http://maps.google.com/mapfiles/kml/pal3/icon52.png';
							ikona.shadow = '';
							ikona.iconSize = new GSize(32, 32);
							ikona.iconAnchor = new GPoint(16, 16);
							ikona.infoWindowAnchor = new GPoint(16, 16);

							var marker = new GMarker(punkt, {
								icon : ikona,
								title : adres
							});
							map.addOverlay(marker);

							// i otwieramy dymek z adresem
							marker
									.openInfoWindowHtml('<STRONG>Poszukiwany adres</STRONG><BR>'
											+ adres);
							// update punktów dookoła
							updatePoints();
						}
					});
}

function updatePoints() {
	// deletePoints();
	var obszar = map.getBounds();

	var lewyDolny = obszar.getSouthWest();
	var prawyGorny = obszar.getNorthEast();

	var urlstr = MAINURL+"ajax/properties/mapa.html?act=getpoints&topright="
			+ prawyGorny.toUrlValue() + "&bottomleft=" + lewyDolny.toUrlValue();
	// alert(urlstr);

	/*
	 * request.open('GET', urlstr , true); // wykonujemy zapytanie ajaxa var j =
	 * 0; request.onreadystatechange = function () { if (request.readyState ==
	 * 4) {
	 */

	var request = $.ajax({
		url : urlstr,
		type : 'GET',
		success : pointUpdater
	});

	/*
	 * } } request.send(null);
	 */

}

function pointUpdater(request) {
	var j = 0;
	setLoading(2);

	//alert(request);
	
	/*if (window.DOMParser) {
		parser = new DOMParser();
		xmlDoc = parser.parseFromString(request, "text/xml");
	} else // Internet Explorer
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = "false";
		xmlDoc.loadXML(request);
	}*/
	
	xmlDoc = request;
	znaczniki = new Array();
	// var xmlDoc = request;
	locations = xmlDoc.documentElement.getElementsByTagName("location");
	// document.getElementById('restable').innerHTML = '';
	if (locations.length) {
		for ( var i = 0; i < locations.length; i++) { // cycle thru locations
			j++;
			if (markers[i] != null)
				markers[i].remove();
			
			
			
			markers[i] = vAddMarker(new GLatLng(locations[i]
					.getAttribute("lat"), locations[i].getAttribute("lng")),
					locations[i].getAttribute("name"), locations[i]
							.getAttribute("desc"),locations[i]
							.getAttribute("link"));
			map.addOverlay(markers[i]);
			znaczniki[i] = [];
			znaczniki[i][2] = locations[i].getAttribute("desc");
			znaczniki[i][0] = new GLatLng(locations[i].getAttribute("lat"),
					locations[i].getAttribute("lng"));
			znaczniki[i][1] = locations[i].getAttribute("name");
			// dodajemy wpis na listę
			// document.getElementById('restable').innerHTML += '<div
			// class="sitems" style="background:
			// url(\'m/img/'+locations[i].getAttribute("ico")+'wifi.gif\')
			// no-repeat center left;"><a href="#" onclick="selectMarker('+i+');
			// return
			// false;"><b>'+locations[i].getAttribute("name")+'</b></a><br/><i>'+locations[i].getAttribute("addr")+'</i><br/><a
			// href="'+locations[i].getAttribute("link")+'">Więcej..</a></div>';
		}
		for ( var i = locations.length; i < 51; i++) {
			if (markers[i] != null)
				markers[i].remove();
			znaczniki[i] = null;
		}
	}
	else
		{
		
		}
	if (locations.length > 50) {
		document.getElementById('message').innerHTML = '<font color="red"><b>Na wskazanym obszarze jest ponad 50 ogłoszeń. Zbliż mapę aby zobaczyć wszystkie.</b></font>';
	} else {
		document.getElementById('message').innerHTML = 'Ilość znalezionych na tym obszarze ogłoszeń: <b>'
				+ locations.length + '</b>';
	}
}

function selectMarker(id) {
	map.panTo(znaczniki[id][0]);
	map.openInfoWindowHtml(znaczniki[id][0], "<b>" + znaczniki[id][1]
			+ "</b><br/>" + znaczniki[id][2]);
	if (exmapa)
		document.getElementById('message').innerHTML = 'Zaznaczony punkt: <b>'
				+ znaczniki[id][1] + '</b>';
}

function pobierzWspolrzedne() {
	var znaczniki = new Array();
	var q = document.getElementById('query').value;
	var geo = new GClientGeocoder();
	geo
			.getLatLng(
					q,
					function(result) {
						if (result) {
							wyszukaj(1, result.toUrlValue());
							return result;
						} else {
							alert('Niestety nie znaleziono podanej lokacji, lub nie można ustalić jej jednoznacznie. Spróbuj wpisać inne słowa kluczowe. Zalecana forma zapytania to "Miasto, ulica"');
							return false;
						}
					});
}

function pokazMape(result) {
	map = new GMap(document.getElementById("mapaklikalna"));
	map.setUIToDefault();
	map.disableDoubleClickZoom();

	if (result) {
		map.setCenter(new GLatLng(result.lat(), result.lng()), 14);
		marker = new GMarker(new GLatLng(result.lat(), result.lng()));
		map.addOverlay(marker);

	} else
		map.setCenter(new GLatLng(52.106505, 19.445801), 6);

	GEvent
			.addListener(
					map,
					'dblclick',
					function(overlay, point) // Add a click listener
					{
						if (point) {
							map.clearOverlays();
							marker = new GMarker(new GLatLng(point.lat(), point
									.lng()));
							map.addOverlay(marker);
							document.getElementById('longitude').value = point
									.toUrlValue();
							var dane = document.getElementById('ZZZ_BUTTON');
							if (dane.innerHTML.indexOf('wyslij_mape') == -1) {
								dane.innerHTML += '&nbsp;&nbsp;&nbsp;<input type=\"button\" value="ZATWIERDŹ" class="button" onclick=\"wyslij_mape()\" />';
							}

						}
					});
}

function checkIfAddressCorrect(search, lat, lng, miasto) {
	var geo = new GClientGeocoder();
	var wartosc;
	var marker;

	if (lat && lng) {
		document.getElementById('longitude').value = lat + ',' + lng;
		map_show(true);
		map = new GMap(document.getElementById("mapaklikalna"));
		map.disableDoubleClickZoom();
		map.setCenter(new GLatLng(lat, lng), 14);
		marker = new GMarker(new GLatLng(lat, lng));
		map.addOverlay(marker);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		GEvent.addListener(map, 'dblclick',
				function(overlay, point) // Add a click listener
				{
					if (point) {
						map.clearOverlays();
						marker = new GMarker(new GLatLng(point.lat(), point
								.lng()));
						map.addOverlay(marker);
						document.getElementById('longitude').value = point
								.toUrlValue();
					}
				});
	} else

		geo.getLatLng(search, function(result) {
			if (result) {
				document.getElementById('longitude').value = result
						.toUrlValue();
				map_show(true);
				pokazMape(result);
			} else {
				geo.getLatLng(miasto, function(result) {
					if (result) {
						document.getElementById('longitude').value = result
								.toUrlValue();
						map_show(true);
						pokazMape(result);
					} else {
						map_show(false);
						pokazMape(result);
					}

				});
			}
		});

}

function wyslij_mape() {
	document.getElementById('mapaklikalna').style.display = 'none';
	document.getElementById('ajaxloader').style.display = 'block';
	document.getElementById('ZZZ_BUTTON').style.display = 'none';
	document.getElementById('newshopform').submit();
}

function createMarker(point, html) {
	var marker = new GMarker(point);
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function pokaz_na_mapie(miasto) {
	var kontener = document.getElementById('GMAP_NAMAPIE_WRAPPER');
	var kontenerki = kontener.getElementsByTagName('div');
	var tmp;
	var lat = 0;
	var lng = 0;
	var opis = '';
	var tablica = new Array();
	var indexx = 0;
	if (kontenerki.length > 0) {
		for ( var i = 0; i < kontenerki.length; i++) {
			$('#ha_cztery_pokaz').hide();
			tmp = kontenerki[i].getElementsByTagName('input');
			for ( var k = 0; k < 3; k++) {
				if (tmp[k].name == 'GMAP_LAT')
					lat = tmp[k].value;
				if (tmp[k].name == 'GMAP_LNG')
					lng = tmp[k].value;
				if (tmp[k].name == 'GMAP_OPIS')
					opis = tmp[k].value;
			}
			indexx = tablica.length;
			tablica[indexx] = new Array();
			tablica[indexx][0] = lat;
			tablica[indexx][1] = lng;
			tablica[indexx][2] = opis;

		}

		document.getElementById('szukaj_wyniki_div').innerHTML = '';
		document.getElementById('szukaj_wyniki_div').appendChild(AJAX_LOADER);

		// var opcje = new GMapOptions;
		// opcje.size = new GSize(600, 400);
		document.getElementById("szukaj_wyniki_div").style.height = '400px';
		map = new GMap(document.getElementById("szukaj_wyniki_div"));
		map.setCenter(new GLatLng(tablica[0][0], tablica[0][1]), 12);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());

		for ( var i = 0; i < tablica.length; i++) {
			marker = createMarker(new GLatLng(tablica[i][0], tablica[i][1]),
					tablica[i][2])
			map.addOverlay(marker);
		}
	}
}
