//iniciujmey tablice ktore przechowuja tablice kategorii mapy do selectow
var map_category = new Array();

//tablica przechowuwujaca selecty miast dla mapy
var cache_map_town = new Array();
//tablica przechowujaca wpisy kategorii miasta
var cache_map_items = new Array();

//czy pinezka ma byc klikalna, czy mozna ja przemieszczac na mapie
//var map_click = 1;

function pokazOstatniePunkty(idMiasto)
{ 
	map.clearOverlays();
    var town = (HOST_TOWN == 'http://infolinia.org/poradnik/') ? 'http://infolinia.org/' : HOST_TOWN;
	pokazMarkery(town+'mapa/mapaxml/miasto/'+idMiasto+'/'+(new Date).getTime(),map,0,2);
}

/* wyswietla markery danej mapy lub usera, jesli idMapa jest 0 tzn ze wyswietla wpisy usera
 * rodzaj 1- user, 2 - ostatnie dodane
 *
 */
var markeryKopia = new Array();
//zmienne do polygonu
var polyShape;
var polyPoints = [];
var kolorLinii = '#968769';
var gruboscLinii = 1;
var przezroczystoscLinii = 0.7;
var kolorTla = '#EC9717';
var przezroczystoscTla = 0.7;
function pokazMarkery(url,mapa, idMapa, rodzaj)
{
    if (GBrowserIsCompatible())
    {
	    GDownloadUrl(url, function(data,responseCode)
	    {
			var xml = GXml.parse(data);
			var icon = new GIcon();
			var ikona = new Array();
			var aNazwa = new Array();

			//troche ponizej londynu
			var latLondon = 53.400152;
			var lngLondon = -1.832236;

			//icon.iconSize = new GSize(12, 20);
			icon.iconAnchor = new GPoint(6, 20);
			icon.infoWindowAnchor = new GPoint(5, 1);

			var wpis = xml.documentElement.getElementsByTagName("wpis");

			var markery = new Array(wpis.length);
			var punkty = new Array(wpis.length);

            if(wpis.length > 0)
            {
                for (var i = 0; i < wpis.length; i++)
                {
                    if(rodzaj != 0)
                    {
                        //ustawiamy pinezke
                        icon.image = wpis[i].getAttribute("pinezka");
                        //rodzaj mapy wpisu
                        idMapa = wpis[i].getAttribute("idMapa");
                    }
                    var id    = wpis[i].getAttribute("idWpis");
                    var nazwa = wpis[i].getAttribute("nazwa");
                    aNazwa[i] = new Array(nazwa, wpis[i].getAttribute("idWpis"));

                    if(idMapa == 9)
                    {
                        var polygony = wpis[i].getElementsByTagName('polygony');
                        var punkty2 = polygony[0].getElementsByTagName("polygon");
                        var punkty_polygony = [];

                        for (var k = 0; k < punkty2.length; k++)
                        {
                            punkty_polygony.push(new GLatLng(parseFloat(punkty2[k].getAttribute("lat")), parseFloat(punkty2[k].getAttribute("lng"))));
                        }

                        // jeśli tak to rysujemy polilinię z wypełnieniem
                        var rysuj = new GPolygon(punkty_polygony, kolorLinii, gruboscLinii, przezroczystoscLinii, kolorTla, przezroczystoscTla, {clickable: true});

                        map.addOverlay(rysuj);

                        //ustawiamy markera na srodku polygonu
                        if (punkty2[1])
                        {
                            var punktLat = (parseFloat(punkty2[1].getAttribute("lat")) > parseFloat(punkty2[0].getAttribute("lat"))) ? ((parseFloat(punkty2[1].getAttribute("lat")) + parseFloat(punkty2[0].getAttribute("lat"))) / 2) : ((parseFloat(punkty2[0].getAttribute("lat")) + parseFloat(punkty2[1].getAttribute("lat"))) / 2);
                            var punktLng = (parseFloat(punkty2[1].getAttribute("lng")) > parseFloat(punkty2[0].getAttribute("lng"))) ? ((parseFloat(punkty2[1].getAttribute("lng")) + parseFloat(punkty2[0].getAttribute("lng"))) / 2) : ((parseFloat(punkty2[0].getAttribute("lng")) + parseFloat(punkty2[1].getAttribute("lng"))) / 2);
                            if (punkty2[2])
                            {
                                punktLng = (parseFloat(punkty2[2].getAttribute("lng")) > punktLng) ? ((parseFloat(punkty2[2].getAttribute("lng")) + punktLng) / 2) : ((punktLng + parseFloat(punkty2[2].getAttribute("lng"))) / 2);
                                punktLat = (parseFloat(punkty2[2].getAttribute("lat")) > punktLat) ? ((parseFloat(punkty2[2].getAttribute("lat")) + punktLat) / 2) : ((punktLat + parseFloat(punkty2[2].getAttribute("lat"))) / 2);
                            }
                        }
                        else
                        {
                            var punktLat = parseFloat(punkty2[0].getAttribute("lat"));
                            var punktLng = parseFloat(punkty2[0].getAttribute("lng"));
                        }

                        punkty[i]  = new GLatLng(parseFloat(punktLat),	parseFloat(punktLng));

                        //ustawiamy srodek mniej wiecej na srodku punktow
                        if (i == 0)
                        {
                            mapa.setCenter(punkty[i], zoom);
                        }

                        var markery2 = new GMarker(punkty[i],icon);
                        markery2.infowindow = wpis[i].getAttribute("tresc");
                        mapa.addOverlay(markery2);
                        markeryKopia[id] = markery2;
                    }
                    else
                    {
                        punkty[i]  = new GLatLng(parseFloat(wpis[i].getAttribute("la")), parseFloat(wpis[i].getAttribute("ln")));
                        var markery2 = new GMarker(punkty[i],icon);
                        markery2.infowindow = wpis[i].getAttribute("tresc");
                        mapa.addOverlay(markery2);
                        markeryKopia[id] = markery2;

                        //ustawiamy srodek mniej wiecej na srodku punktow
                        if (i == 0)
                        {
                            mapa.setCenter(punkty[i], zoom);
                        }
                    }
                }

				//wyswietlamy liste wpisow w srodkowym polu
				aNazwa.sort();

				var listaWpisow = '';
				listaWpisow += '<ul>';
				for(var i=0; i<aNazwa.length; i++)
				{
					listaWpisow += '<li><a href="javascript:pokazMiejsce('+aNazwa[i][1]+')">'+aNazwa[i][0]+'</a></li>';
				}
				listaWpisow += '</ul>';
				$('#listaMiejsc').html(listaWpisow);
            }
            else
            {
                $('#listaMiejsc').html('Brak wpisów');
            }
		});
    }
}

/* pokazuje chmurke danego markera */
function pokazMiejsce(id)
{
    map.setCenter(markeryKopia[id].getPoint());
    markeryKopia[id].openInfoWindowHtml(markeryKopia[id].infowindow);
    $('.chmurka > .link').hide();
}

function load() 
{
    if (GBrowserIsCompatible()) {
	
		localSearch = new GlocalSearch();
		geocoder = new GClientGeocoder();
		
		map = new GMap2(document.getElementById("map"));
		
		GEvent.addListener(map, "moveend", function(){
			var center = map.getCenter();
			var zoom = map.getZoom();
		});
		map.enableContinuousZoom();
		map.addControl(new GLargeMapControl());
 		map.addControl(new GMapTypeControl());
		//map.addControl(new GOverviewMapControl());
		
		//var point = new GLatLng(postLat, postLng);
		//map.setCenter(point, zoom);	
			
		if (map_edit == 1) 
		{		
			var count_points = 0;
                        for(x in points)
			{ 
				var point = new GLatLng(points[x]['map_lat'], points[x]['map_lng']);
				map.setCenter(point, (count_points > 1 ? zoom : 13));
				var marker = new GMarker(point);
				marker.infowindow = points[x]['nazwa'];
				map.addOverlay(marker);

                                count_points++;
			}
					
			//jesli jest wiecej niz jeden punkt to dodajemy do niego infowindow
			//if(points.length > 1)
			//{
			    GEvent.addListener(map, "click", function(overlay, point) {
					if (overlay)
					{	
					   	overlay.openInfoWindowHtml(overlay.infowindow);			   		    	
					} 						
				});		
			//}				
			
			//document.getElementById("map_lat").value = point.y;
			//document.getElementById("map_lng").value = point.x;
		}
		else if(map_edit == 2)
		{
			var point = new GLatLng(postLat, postLng);
			map.setCenter(point, zoom);	
			map.addOverlay(new GMarker(point));			
		}
		else
		{
			var point = new GLatLng(postLat, postLng);
			map.setCenter(point, zoom);			
		}
		
		if (map_click == 1) 
		{
			GEvent.addListener(map, "click", function(overlay, point){
				if (overlay) {
					map.removeOverlay(overlay);
					if (document.getElementById("map_lat")) {
						document.getElementById("map_lat").value = 0;
						document.getElementById("map_lng").value = 0;
					}
				}
				else {
					map.clearOverlays();
					map.addOverlay(new GMarker(point));
					if (document.getElementById("map_lat")) {
						document.getElementById("map_lat").value = point.y;
						document.getElementById("map_lng").value = point.x;
					}
				}
			});
		}
        else if(map_click == 2)
        {
            GEvent.addListener(map, "click", function(overlay, point) {
                if (overlay)
                {
                    overlay.openInfoWindowHtml(overlay.infowindow);
                }
                else if (point) {czyscKomentarze();}
            });
        }
    }
}

var markeryKopia = new Array();
function user_points()
{
	map = new GMap2(document.getElementById("map"));
	map.enableContinuousZoom();
	map.addControl(new GLargeMapControl());
 	map.addControl(new GMapTypeControl());
	map.addControl(new GOverviewMapControl());
	
	for(x in points)
	{ 
		var point = new GLatLng(points[x]['map_lat'], points[x]['map_lng']);
		map.setCenter(point, (points.length > 1 ? zoom : 15));
		var marker = new GMarker(point);
		
		var text = '';
		
        text += '<div class="chmurka">';
        //if(points[x]['zdjecie'] != '') text += '<img src="'.site_url().'zdjecia/wpisy/'.$wpis['zdjecie'].'"/>';
        //text += '<div class="wiersz"><strong>'+points[x]['']+'</strong></div>';
        if(points[x]['nazwa'] != '') text += '<div class="wiersz"><strong>Nazwa:</strong>'+points[x]['nazwa']+'</div>';

        if(points[x]['opis'] != '')
        {
            text += '<div class="wiersz"><strong>Opis:</strong></div>';
            text += '<div class="wiersz opis">'+points[x]['opis']+'</div>';
        }

        //if(points[x]['ulica'] != '' || points[x]['miasto'] != '' || points[x]['kod_pocztowy'] != '') text += '<div class="wiersz clear"><strong>Adres</strong></div>';
        if(points[x]['ulica'] != '') text += '<div class="wiersz wciecie"><strong>Ulica:</strong>'+points[x]['ulica']+'</div>';
        if(points[x]['miasto'] != '') text += '<div class="wiersz wciecie"><strong>Miasto:</strong>'+points[x]['miasto']+'</div>';
        if(points[x]['kod_pocztowy'] != '') text += '<div class="wiersz wciecie"><strong>Kod pocztowy:</strong>'+points[x]['kod_pocztowy']+'</div>';
        //if(points[x]['www'] != '') text += '<div class="wiersz wciecie"><strong>www:</strong><a href="'+points[x]['www']+'" target="_blank">'+points[x]['www']+'</a></div>';
        text += '</div>';
		marker.infowindow = text;
		map.addOverlay(marker);	
		
		markeryKopia[x] = marker;
	}	
	
    GEvent.addListener(map, "click", function(overlay, point) {
		if (overlay)
		{	
		   	overlay.openInfoWindowHtml(overlay.infowindow);			   		    	
		} 						
	});		
}

function show_user_point(id)
{
    map.setCenter(markeryKopia[id].getPoint());
    markeryKopia[id].openInfoWindowHtml(markeryKopia[id].infowindow);	
}

function showAddress(address) 
{
	if (geocoder) 
	{
        geocoder.getLatLng(address, function(point) 
        {
            if (!point) 
            {
                alert(address + " - nie znaleziono lokalizacji");
            } 
            else 
            {
                map.setCenter(point, 9);
	            map.clearOverlays();
                var marker = new GMarker(point);
        		document.getElementById("map_lat").value = point.y;
		        document.getElementById("map_lng").value = point.x;	
            }
        });
    }    
}

function usePointFromPostcode(postcode) 
{
	localSearch.setSearchCompleteCallback(null, 
		function() {			
			if (localSearch.results[0])
			{		
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var point = new GLatLng(resultLat,resultLng);
				var marker = new GMarker(point);
				map.addOverlay(marker);
				map.setCenter(point, 9);
				document.getElementById("map_lat").value = point.lat();
				document.getElementById("map_lng").value = point.lng();				
			}else{
				alert("Postcode not found!");
			}
		});	
		
	localSearch.execute(postcode + ", UK");
}


/**
 * wybieramy do selecta podkategorie mapy
 */
function select_map_subcategory()
{
	var id_map_category = $('#map_category').val();
	var subcategory = map_category[id_map_category];

	var select_subcategory = $('#map_subcategory');

	if(subcategory.length > 0)
	{
		//czyscimy najpierw to co jest w seleccie
		select_subcategory.html('');
		//select_subcategory.append(new Option('wybierz podkategorię',0));
		select_subcategory.append('<option value="0">wybierz podkategorię</option>');
		for(var i=0; i<=(subcategory.length-1); i++)
		{
			//select_subcategory.append(new Option(subcategory[i][1],subcategory[i][0]));
			select_subcategory.append('<option value="'+subcategory[i][0]+'">'+subcategory[i][1]+'</option>');
		}
		select_subcategory.show()
	}
	else
	{
		select_subcategory.hide()
		select_subcategory.html('');
	}	
	
	//jak zmieniamy kategorie to chowamy niektore rzeczy
	$('#map_town').hide();
	$('#map_content_yes').hide();
}

/**
 * wrzucamy do selecta miasta mapy
 */
function select_map_town()
{
	var id_category = $('#map_subcategory').val();

	if (id_category > 0) 
	{
		if (!cache_map_town[id_category]) {
			advAJAX.post({
				url: HOST_TOWN + '/ajax',
				parameters: {
					"method": "select_map_town",
					"id_category": id_category
				},
				onSuccess: function(obj){
					eval(obj.responseText);
					
					//jesli zaznaczono ze dodajemy nowy wpis to wyswietlamy formularz dodawania wpisu
					if($('#map_checkbox_check').attr('checked')) show_form_map(id_category);
				},
				onError: function(obj){
					alert("Error: " + obj.status);
				}
			});
		}
		else 
		{
			$('#map_town').html((cache_map_town[id_category]));
		}
		
		$('#map_town').show();
	}
	else
	{
		$('#map_town').hide();
	}
	
	//jak zmieniamy kategorie to chowamy niektore rzeczy
	$('#map_content_yes').hide();	
}

/**
 * wyswietlamy wpisy mapy dla danej kategorii i miasta
 */
function show_map_items()
{
	var id_category = $('#map_subcategory').val();
	var id_town = $('#map_town').val();

	if (id_category > 0 && id_town > 0) 
	{
		if (!cache_map_items[id_category+id_town]) 
		{
			advAJAX.post({
				url: HOST_TOWN + '/ajax',
				parameters: {
					"method": "show_map_items",
					"id_category": id_category,
					"id_town" : id_town
				},
				onSuccess: function(obj){
					eval(obj.responseText);
				},
				onError: function(obj){
					alert("Error: " + obj.status);
				}
			});
		}
		else
		{
			$('#map_content_yes').html((cache_map_items[id_category+id_town]));
		}
		
		$('#map_content_yes').show();
	}
	else
	{
		$('#map_content_yes').hide();
	}	
}

/**
 * sprawdzamy czy dodajemy wpis czy tez wybieramy go z listy
 */
function check_form_map()
{
	var map_check = $('#map_checkbox_check').attr('checked');
	var subcategory = $('#map_subcategory').val();
	
	//jesli zaznaczono to wyswietlamy formularz dodawania wpisu
	if(map_check)
	{
		//usuwamy liste wpisow
		$('#map_content_yes').hide();
		
		//wyswietlamy komunikat ze dodajemy nowy punkt
		$('#new_item_header').show();
		
		//sprawdzamy czy wybrano podkategorie, jesli tak to mozemy wyswietlic formularz
		if(subcategory > 0)
		{
			show_form_map(subcategory);
			$('#map_content_no').show();
		}
	}
	else //jak nie to wybieramy wpis z listy
	{
		$('#new_item_header').hide();
		$('#map_content_no').hide();	
	}
}

/**
 * wyswietlamy formularz dodawania wpisu do mapy
 * @param {Object} id_category
 */
function show_form_map(id_map)
{
	advAJAX.post({
	   	url : HOST_TOWN+'/ajax',	
	   	parameters : {
	   	"method" : "create_map_form",
		"id_map" : id_map
	},	
	onInitialization : function() {		
	},	      	
	onSuccess : function(obj) {		
		eval(obj.responseText);		
		load();		
		$("input.map_upload").change(function(){add_map_files(this, 1);});
		
		//dla miejsca, synchronizujemy wartosci pol z polami miejsca
		$(document).ready(function() { 
			if($('#name')) $('#map_formNazwa').attr('value', $('#name').val());
			if($('#www')) $('#map_www').attr('value', $('#www').val());
			
			$('#map_formNazwa').keyup(function() {if($('#name')){$('#name').attr('value', $('#map_formNazwa').val());}});
			$('#map_www').keyup(function() {if($('#www')){$('#www').attr('value', $('#map_www').val());}});
			
			//dodajemy opis pod "www opisu", tylko przy dodawaniu miejsca
			if($('#map_www_opisu') && $('#name'))
			{
				$('#map_www_opisu').after('<div class="podpis">gdy pole pozostanie puste automatycznie dodaje adres do tego miejsca</div>');
			}
		}); 		
	},
	onError : function(obj) { alert("Error: " + obj.status); }	                    
   	});	
   	
  	
}

function add_map_files(obj, fm)
{
    //sprawdzamy czy nie za duzo jest plikow
	if ($('input.map_upload').size() > fm) {
        alert('Nie możesz dodać więcej plików');
        obj.value = '';
        return true;
    }
	
	var v = obj.value;
	$(obj).hide();
    $(obj).parent().prepend('<input type="file" class="map_upload" name="map_file[]" />').find("input").change(function(){
        add_map_files(this, 1)
    });	
    
    if (v != '') {
        $("div#map_files_list").append('<div>' + v + '<img src="'+HOST_MAIN+'media/images/cancel.png" title="usuń"/>').find("img").click(function(){
            $(this).parent().remove();
            $(obj).remove();
            return true;
        });
    }    
};

/** zaznaczamy wszystkie wpisy mapy **/
function check_all_map_items(check)
{
	var checkbox = document.form['map_item[]'];
	
	if(check == 1) //zaznaczamy wszystkie
	{		
		for (var counter = 0; counter < checkbox.length; counter++) {
			$(checkbox[counter]).attr('checked', 'checked');
		}	
		
		$('#check_all_map_items_desc').html('<button onclick="javascript:check_all_map_items(0);">odznacz wszystkie</button>');
	}
	else //odznaczamy wszystkie
	{
		for (var counter = 0; counter < checkbox.length; counter++) {
			$(checkbox[counter]).removeAttr('checked');
		}			
		$('#check_all_map_items_desc').html('<button onclick="javascript:check_all_map_items(1);">zaznacz wszystkie</button>');
	}
}

function valid_add_map_item()
{
	if ($('#map_formNazwa')) 
	{
		$('#map_nazwaError').hide();
		if ($('#map_formNazwa').val() == '') 
		{
			$('#map_nazwaError').html(Lang.map_nazwaError).show();
			error = 'true';
		}
	}
			
	if ($('#map_formUlica')) 
	{
		$('#map_ulicaError').hide();
		if ($('#map_formUlica').val() == '') 
		{
			$('#map_ulicaError').html(Lang.map_ulicaError).show();
			error = 'true';
		}
	}	
			
	if ($('#map_formOpis')) 
	{
		$('#map_opisError').hide();
		if ($('#map_formOpis').val() == '') 
		{
			$('#map_opisError').html(Lang.map_opisError).show();
			error = 'true';
		}
	}					
			
	$('#map_error').hide();
	if($('#map_lat').val() == '' || $('#map_lng').val() == '')
	{
		$('#map_error').html(Lang.map_error).show();
		error = 'true';
	}					
	
}