//some comment
var mapa;
var geo = new GClientGeocoder(new GGeocodeCache());
var visibleArea = new GLatLngBounds();
var path = [];
var addresses = [];
var addressTab = [];
var markersTab = [];
var txt = [];
var pointsTab = [];
//my comment
var indexToMarker = [];

var addressCounter = 0;
var defaultAddress = "Warszawa, Cybernetyki 19";

var isBusy = "false";
var firstClick = "true";
var pointAdress=[];

//ikonka markera
var icon = new GIcon();
//duza mapa na stronie map.php
function mapaStart(search/*, searchString*/)
{
	//pojawiamy diva z mapka
	document.getElementById('mapka').style.display = "block";

	//sprawdzamy czy przegladarka jest kompatybilna
	if(GBrowserIsCompatible())
	{
		//ogolne ustawienia mapy
		//dopuszczalne tryby przelaczania mapy
		mapa = new GMap2(document.getElementById("mapka"),{mapTypes: [G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP]});
		//strona startowa mapy wyswietla Polske
		showPolska(geo, mapa);
		mapa.addControl(new GLargeMapControl());
		var typyMapy = mapa.getMapTypes();
		typyMapy[0].getName= function() { return "Mapa";}
		typyMapy[1].getName = function() { return "Satelita";}
		typyMapy[2].getName = function() { return "Hybryda";}
		//pozwalamy na zoomowanie dwukrotnym kliknieciem myszki
		mapa.enableDoubleClickZoom();
		//pozwalamy na ciagly zoom
		mapa.enableContinuousZoom();
		mapa.addControl(new GMapTypeControl());
		mapa.addControl(new GOverviewMapControl());
		//wstawiamy skale
		mapa.addControl(new GScaleControl());

		//szukanie miejsc/wydarzen na podstawie danych wpisanych przez usera i wyciagnietych z bazy
//		if(searchString!='')
        if (typeof(searchResultsArray) != "undefined" && searchResultsArray.length > 0) //zmienna globalna ustawiona w HTMLu
		{
			//wyswietlamy wiele punktow
//			var addressTab = parseSearchString(searchString)
//			var pointsTab = parseSearchStringForShow(searchString);
            addressTab = parseSearchArray();
            pointsTab = parseSearchArrayForShow();

            //console.log("addressTab.length = %d, pointsTab.length = %d", addressTab.length, pointsTab.length);

            addressCounter = 0;
			showMultiplePlaces();
		}
		//pokazanie adresu - ulica + miasto
		else if(search!='')
		{
			geo.getLatLng(search, function(point)
			{
				if (!point)
				{
					document.getElementById('errorsPlace').style.display = 'block';
				}
				else
				{
					// centrujemy na znalezionym punkcie
					mapa.setCenter(point, 10);
					visibleArea.extend(point);
					var nowyZoom = mapa.getBoundsZoomLevel(visibleArea);
					var nowyPunkt = visibleArea.getCenter();
					mapa.setCenter(nowyPunkt,nowyZoom);
					marker = new GMarker(point);
					mapa.addOverlay(marker);
				}
			});
		}
	}
}


function parseSearchArray()
{
    var addressTab = [];
    for (i = 0; i < searchResultsArray.length; i++)
    {
        addressTab.push(searchResultsArray[i][0] + ", " + searchResultsArray[i][1]);
    }
    return addressTab;
}

function parseSearchArrayForShow()
{
    var pointsTab = [];
    var pointTab = "";
    var url;
    for (i = 0; i < searchResultsArray.length; i++)
    {
        var searchItem = searchResultsArray[i];
        if(searchItem[2]==0)
        {
            url = 'ShowPlace.php?id='+searchItem[3];
        }
        else
        {
            url = 'ShowEvent.php?id='+searchItem[3];
        }
        pointTab = '<div id="mapCloud">';

        tit=searchItem[4];
        titLength=searchItem[4].length;
		tit1='';
        if (titLength<25) {
        	for (z=0;z<40-titLength;z++){
        		tit1 += '&nbsp;';
        	}
        }

        pointTab += '<span class="title"><a href="'+ url +'">'+ tit+tit1 +'</a></span><br />';

        var reg = /.jpg/;
        var match = reg.test(searchItem[6]);
        if(searchItem[6]!='' && match)
        {
        	if (searchItem[5]!='') magrinImgBottom='40px'; else magrinImgBottom='0px';
            pointTab += '<br /><a href="'+ url +'"><img src="'+ searchItem[6] +'" style="float:left; margin: 0px 10px '+magrinImgBottom+' 0px;" /></a>';
        }
        pointTab += '<a href="'+ url +'"><b>Adres:</b><br />' + searchItem[0] + '<br />' + searchItem[1];
        if (searchItem[5]!=''){
        	pointTab += '<br /><br /><b>Telefon kontaktowy:</b><br />' + searchItem[5];
        }
        pointTab += '</a></div>';

        pointsTab.push(pointTab);
    }
    return pointsTab;
}

//parsowanie wynikow wyszukiwania, tak zeby dalo sie je wyswietlic na mapie
function parseSearchString(searchString)
{
	var searchArray = searchString.split('--');
	var searchArraySize = searchArray.length;
	var addressTab = new Array();
	for (i = 0; i < searchArraySize; i++)
	{
		var searchItem = searchArray[i].split('|');
		addressTab[i] = searchItem[0] + " " + searchItem[1];
	}
	return addressTab;
}
function parseSearchStringForShow(searchString)
{
	var searchArray = searchString.split('--');
	var searchArraySize = searchArray.length;
	var url;
	for (i = 0; i < searchArraySize; i++)
	{
		var searchItem = searchArray[i].split('|');
		if(searchItem[2]==0)
		{
			url = 'ShowPlace.php?id='+searchItem[3];
		}
		else
		{
			url = 'ShowEvent.php?id='+searchItem[3];
		}
		pointsTab[i] = '<div id="mapCloud">';
		pointsTab[i] += '<span class="title"><a href="'+ url +'">'+ searchItem[4] +'</a></span><br />';
		//alert(searchItem[6]);
		var reg = /.jpg/;
		var match = reg.test(searchItem[6]);
		if(searchItem[6]!='' && match)
		{
			pointsTab[i] += '<br /><a href="'+ url +'"><img src="'+ searchItem[6] +'" style="float:left; margin: 0px 10px 40px 0px;" /></a>';
		}
		pointsTab[i] += '<a href="'+ url +'"><strong>Adres:</strong><br />' + searchItem[1] + '<br />' + searchItem[0];
		pointsTab[i] += '<br /><br /><strong>Telefon kontaktowy:</strong><br />' + searchItem[5]+ '</a>';
		pointsTab[i] += '</div>';
	}
	return pointsTab;
}
function myclick(i)
{
    var markerIndex = indexToMarker[i];
    var divOffset = $('#foundItems').offset().top;
	var pOffset = $('#foundItems .foundItem:eq('+ i +')').offset().top;
	var pScroll = pOffset - divOffset;
//$('#foundItems').animate({scrollTop: '+=' + pScroll + 'px'}, 1000, 'bounceout',	function(){
	$('#foundItems').animate({scrollTop: '+=' + pScroll + 'px'}, 750, '',	function(){
		$('#foundItems .foundItem').css("background", "none");
		$('#foundItems .foundItem:eq('+ i +')').css("background", "#5F636A");
		if (markerIndex >= 0)
	    {
	    	markersTab[markerIndex].openInfoWindowHtml(pointsTab[i]);
	    }	    else
	    {
	        mapa.closeInfoWindow();
	        alert("Nie udało się zlokalizować na mapie adresu tego miejsca!");
	    }
	});

	//center the map on selected point
    var Point = pointAdress[i];
	if (Point)
	{
		mapa.setCenter(Point);
	}

}

function showPolska(geo, mapa)
{
	var	address = 'Polska';
	geo = new GClientGeocoder(new GGeocodeCache());
	geo.getLatLng(address, function(punkt)
	{
		if (!punkt)
		{
            var ep = document.getElementById('errorsPlace');
            if (ep)
                ep.style.display = 'block';
		}
		else
		{
			//centrujemy na znalezionym punkcie
			mapa.setCenter(punkt, 6);
		}
	});
}
function search()
{
	var address = document.getElementById('ulica').value;
	var city = document.getElementById('miasto').value;
	geo = new GClientGeocoder(new GGeocodeCache());
	geo.getLatLng(address + ' ' + city, function(punkt)
	{
		if (!punkt)
		{
			alert(address + " nie zostal znaleziony!");
		}
		else
		{
			var marker = new GMarker(punkt);
			mapa.addOverlay(marker);
			visibleArea.extend(punkt);
			var nowyZoom = mapa.getBoundsZoomLevel(visibleArea);
			var nowyPunkt = visibleArea.getCenter();
			mapa.setCenter(nowyPunkt,nowyZoom);
		}
	});
}
function showMultiplePlaces()
{
    if (addressCounter < addressTab.length)
    {
		geo.getLatLng(addressTab[addressCounter], function(point)
		{
			pointAdress[addressCounter]=point;
			if (point)
			{
				visibleArea.extend(point);
				var marker = createMarker(point, pointsTab[addressCounter], addressCounter);
                indexToMarker[addressCounter] = markersTab.length;
				markersTab.push(marker);
			}
            else
            {
//                console.log("Nie znaleziono: ", addressTab[addressCounter]);
                indexToMarker[addressCounter] = -1;
            }

            addressCounter++;
            showMultiplePlaces();
		});
    }
    else
    {
//        console.log("drawing...");
    	drawMarkers();
    }
}

function createMarker(point, html, id)
{
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function()
	{
		marker.openInfoWindowHtml(html);
		scrollOnList(id);
	});
	return marker;
}

function drawMarkers()
{
    var nowyZoom = mapa.getBoundsZoomLevel(visibleArea);
    var nowyPunkt = visibleArea.getCenter();
    mapa.setCenter(nowyPunkt, nowyZoom);
	mmgr = new GMarkerManager(mapa,{maxZoom: 20});
	mmgr.addMarkers(markersTab,5,20);
	mmgr.refresh();
}

function setStart()
{
	var start = trim(document.getElementById('start').value, "\n");
	geo.getLatLng(start, function (point)
    {
		//var marker1 = new GMarker(point, icon1);
		addresses[0] = start;
		path[0] = point;
		//mapa.addOverlay(marker1);
		visibleArea.extend(point);

	});
}

function setEnd()
{
	var end = trim(document.getElementById('end').value, "\n");
	geo.getLatLng(end, function (point)
    {
		//var marker2 = new GMarker(point, icon2);
		addresses[1] = end;
		path[1] = point;
		//mapa.addOverlay(marker2);
		visibleArea.extend(point);
	});
}
function startGettingDirections()
{
	invokeGemius('zZo6tq_Lb2Ig.rOG2u980NTajwzNLo8MhTrUIAzgv1z.X7');
	if (isBusy=="true")
	{
		return 0;
	}
	isBusy ="true";
	setStart();
	setEnd();
	setTimeout('getDirections()', 1000);
}
function getDirections()
{
	var a;
	var b;
	var poly;
	mapaStart('', '');
	showPolska(geo, mapa);


	document.getElementById("routeDirections").innerHTML = '';

	var gdir=new GDirections(mapa, document.getElementById("routeDirections"));
	if (path[0] && path[1])
	{
		document.getElementById("routeDirections").style.display = "block";
        var kateg = document.getElementById("boxKategorie");
        if (kateg)
            kateg.style.display = "none"; //ukryj chmurę przy wyświetlaniu wyników

		a = addresses[0] + "@" + path[0].toUrlValue(6);
		b = addresses[1] + "@" + path[1].toUrlValue(6);
		var a = "from: " + a + " to: " + b;
		gdir.load(a,
		{
			"locale": "pl"
		});
		if(document.getElementById('errorsPlace'))
		{
			document.getElementById('errorsPlace').style.display = 'none';
		}
	}
	else
	{
		document.getElementById('errorsPlace').style.display = 'block';
		document.getElementById('errorTxt').innerHTML = 'Przepraszamy, trasa nie została odnaleziona';
	}

	isBusy =false;
}

function showOnMap(address)
{
	document.getElementById('mapka').style.width="600px";
	document.getElementById('mapka').style.height="200px";
	document.getElementById('mapka').display = "block";
//	setTimeout('miniMapaStart(' + address + ')', 1000);
	miniMapaStart(address);
	geo.getLatLng(address, function(punkt)
	{
		if (!punkt && (document.getElementById('errorsPlace')))
		{
            $("#errorTxt").html("Nie znaleziono na mapie podanego adresu");
			$("#errorsPlace").css("display", "block");
		}
		else
		{
			if (document.getElementById('errorsPlace'))
			{
				document.getElementById('errorsPlace').style.display = 'none';
			}
			var marker = new GMarker(punkt);
			mapa.addOverlay(marker);

			visibleArea.extend(punkt);
			var nowyZoom = mapa.getBoundsZoomLevel(visibleArea);
			var nowyPunkt = visibleArea.getCenter();
			mapa.setCenter(nowyPunkt,nowyZoom);
		}
	});
}

function miniMapaStart(search)
{
	document.getElementById('mapka').style.display = "block";
	if(GBrowserIsCompatible())
	{
		//ogolne ustawienia mapy
		mapa = new GMap2(document.getElementById("mapka"),{mapTypes: [G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP]});
		mapa.enableDoubleClickZoom();
		mapa.enableContinuousZoom();

		//adds the pad and scale control to gmap
		var Ctrl = new GSmallMapControl();
		mapa.addControl(Ctrl);

		geo = new GClientGeocoder(new GGeocodeCache());
		showPolska(geo, mapa);
		//strona startowa mapy wyswietla Polske
		if(search!='')
		{
			geo.getLatLng(search, function(point)
			{
				if (!point && (document.getElementById('errorsPlace')))
				{
					if (document.getElementById('errorsPlace'))
					{
						document.getElementById('errorsPlace').style.display = 'block';
					}
				}
				else
				{
					if (document.getElementById('errorsPlace'))
					{
						document.getElementById('errorsPlace').style.display = 'none';
					}
					// centrujemy na znalezionym punkcie
					mapa.setCenter(point, 10);
					visibleArea.extend(point);
					var nowyZoom = mapa.getBoundsZoomLevel(visibleArea);
					nowyZoom=nowyZoom-3;
					var nowyPunkt = visibleArea.getCenter();
					mapa.setCenter(nowyPunkt,nowyZoom);
					marker = new GMarker(point);
					mapa.addOverlay(marker);
				}
			});
		}
	}
}

function interestingForMap()
{
	for (var i = 0; i < searchResultsArray.length; i++)
	{
		addresses[i] = searchResultsArray[i][0] + ", " + searchResultsArray[i][1];
	}
	if(GBrowserIsCompatible())
	{
		var whichAddress = 0;
		mapa = new GMap2(document.getElementById("mapkaInterestingForMap"),{mapTypes: [G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP]});
		mapa.enableDoubleClickZoom();
		mapa.enableContinuousZoom();
		geo = new GClientGeocoder(new GGeocodeCache());
		showPoint(whichAddress,mapa);
	}
}

function showPoint(whichAddress,mapa)
{
	for (i=0; i < 7; i++)
	{
		document.getElementById('element'+i).style.backgroundColor = '#EDEDED';
		document.getElementById('a'+i).style.color = '#666';
	}
	document.getElementById('element'+whichAddress).style.backgroundColor = '#8F9092';
	document.getElementById('a'+whichAddress).style.color = '#EDEDED';
	geo.getLatLng(addresses[whichAddress], function(punkt)
	{
		if (!punkt)
		{
			geo.getLatLng(addresses[whichAddress], function(punkt)
			{
				mapa.setCenter(punkt, 10);
				visibleArea.extend(punkt);
				marker = new GMarker(punkt);
				mapa.clearOverlays();
				mapa.addOverlay(marker);
				marker=null;

				/*var nowyZoom = mapa.getBoundsZoomLevel(visibleArea);
				var nowyPunkt = visibleArea.getCenter();
				mapa.setCenter(nowyPunkt,nowyZoom);*/
			});
			//alert('a');
		}
		else
		{
			//centrujemy na znalezionym punkcie

			mapa.setCenter(punkt, 10);
			visibleArea.extend(punkt);
			marker = new GMarker(punkt);
			mapa.clearOverlays();
			mapa.addOverlay(marker);
			marker=null;
			/*var nowyZoom = mapa.getBoundsZoomLevel(visibleArea);
			nowyZoom = nowyZoom - 1;
			var nowyPunkt = visibleArea.getCenter();
			mapa.setCenter(nowyPunkt,nowyZoom);*/
		}
	});
    if (whichAddress < addresses.length - 1)
	{
		whichAddress++;
	}
	else
	{
		whichAddress = 0;
	}
	GUnload();
	setTimeout('showPoint('+whichAddress+',mapa)', 10000);
}
function checkSearchField()
{
}
function trim(str, chars)
{
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars)
{
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars)
{
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}