var gm_map = null;
var gm_markermanager = null;
var gm_legend = null;

var iconPeople = new Array();
var iconPlaces = new Array();




	
function createLabeledMarker(pointData, icon, text, label, labeloffset) 
{
    //var latlng = new GLatLng(pointData.latitude, pointData.longitude);
	if (labeloffset === null)
	{
		labeloffset = new GSize(16, -20);
	}
    
	opts = {
            "icon": icon,
            "draggable": false,
            "clickable": true,
            "labelText": text,
            "labelClass": label,
            "labelOffset": labeloffset
    	};
    var marker = new LabeledMarker(pointData, opts);
    
    /*
    var listItem = document.createElement('li');
    listItem.innerHTML = '<div class="label">'+pointData.abbr+'</div><a href="' + pointData.wp + '">' + pointData.name + '</a>';

    document.getElementById('sidebar-list').appendChild(listItem);
	*/


    return marker;
}

function createUserMarker(pointData, user_id, icon, text, label) 
{
	var marker = createLabeledMarker(pointData, icon, text, label, null);
	
    GEvent.addListener(marker, 'click', function() 
    {
        //marker.openInfoWindowHtml("loading");
        $.getJSON("/ajax?func=getUserProfile&user_id="+user_id, function(data) 
        {
        	marker.openInfoWindowHtml('<table><tr><td><img src="'+data.img+'" /></td><td style="padding-left:4px;" valign="top"><a href="/people/profil/'+user_id+'">'+data.name+'</a></td></tr></table>');
        });
     });
    return marker;
}

function createUserGroupMarker(pointData, groupsize, region, lat_rnd, lng_rnd, icon, text, label) 
{
	var marker = createLabeledMarker(pointData, icon, text, label, null);
	var query = 'region='+region;	
	
	if ((lat_rnd !== undefined) && (lng_rnd !== undefined)) 
	{
		query = 'lat_rnd='+lat_rnd+'&lng_rnd='+lng_rnd;
	}
	
    GEvent.addListener(marker, 'click', function() 
    {
    	marker.openInfoWindowHtml('<table><tr><td><img src="/themes/default/images/map/people.png"/></td><td style="padding-left:4px;" valign="top"><a href="/people/map?'+query+'#usermap_userlist">alle '+groupsize+' User anzeigen</a></td></tr></table>');
     });
    return marker;
}


function createPlaceMarker(pointData, type, place_id, icon, text, label) 
{
	var marker = createLabeledMarker(pointData, icon, text, label, null);
	
    GEvent.addListener(marker, 'click', function() 
    {
        //marker.openInfoWindowHtml("loading");
    	//alert("/ajax?func=getPlaceInfo&type="+type+"&id="+place_id);
        $.getJSON("/ajax?func=getPlaceInfo&type="+type+"s&id="+place_id, function(data) 
        {
        	marker.openInfoWindowHtml('<table><tr><td><img src="'+data.img+'" /></td><td style="padding-left:4px;" valign="top"><a href="'+data.url+'">'+data.name+'</a></td></tr></table>');
        });
     });
    return marker;
}


function createMarker(point, icon, html) 
{
  var marker = new GMarker(point, icon);
  GEvent.addListener(marker, 'click', function() 
  {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}


function gmInitialize() 
{
	if (GBrowserIsCompatible()) 
	{
        gm_map = new GMap2(document.getElementById("google_maps_canvas"));
        gm_map.setMapType(G_HYBRID_MAP);
        gmUpdate(gm_lat, gm_lng, gm_zoom);
        gm_map.addControl(new GSmallZoomControl3D());
        //gm_markermanager = new GMarkerManager(gm_map);
        
        GEvent.addListener(gm_map,"zoomend",function()
        {
    		if (gm_display_people) gmDrawPeople();
    		if (gm_display_places) gmDrawPlaces();
        	if (gm_display_singleoffer) gmDrawSingleOffer();
        });         
        
        GEvent.addListener(gm_map, "dragend", function() 
        {
    		if (gm_display_people) gmDrawPeople();
    		if (gm_display_places) gmDrawPlaces();
        	if (gm_display_singleoffer) gmDrawSingleOffer();
        });

        // show
        if (gm_display_people) gmDrawPeople();
    	if (gm_display_places) gmDrawPlaces();
    	if (gm_display_singleoffer)
    	{
    		gmUpdate(singleoffer_lat, singleoffer_lng, 11);
    		gmDrawSingleOffer();
    	}
	}
}

function gmUpdate(lat, lng, zoom)
{
    gm_map.setCenter(new GLatLng(lat, lng), zoom);
}


function updateMapWithFilters()
{
	$.getJSON("/ajax?func=getMapCurrentFilters", function(data)
	{
		if ((data.lat)&&(data.lng)&&(data.zoom))
		{
			var gm_lat = data.lat;
			var gm_lng = data.lng;
			var gm_zoom = data.zoom;

			gm_map.setCenter(new GLatLng(data.lat, data.lng), data.zoom);
		}
		if (gm_display_people) gmDrawPeople();
		if (gm_display_places) gmDrawPlaces();
	});

}

function gmDrawPeopleOverlay(query)
{
    $.getJSON("/ajax?func=getMapPeople"+query, function(data) 
	{
    	var unprecise = data.unprecise;
		if (unprecise.length > 0) 
		{
			var info = '';
			for (i = 0; i < unprecise.length; i++) 
			{
				if (unprecise[i]['groupsize'] > 0)
				{
					info += '+'+unprecise[i]['groupsize']+' '+unprecise[i]['name']+' User<br />';
				}
			}
			
			gm_legend = new MyPane({paneClass: 'gm_pane', paneText: info});
    		gm_map.addControl(gm_legend);
		}

    	var results = data.results;
    	
		if (results.length > 0) 
		{
			for (i = 0; i < results.length; i++) 
			{
	        	var point = new GLatLng(results[i]['latitude'], results[i]['longitude']);
	
	//	gm_map.addOverlay(new LabeledMarker(point, {labelText: 'Hallo', labelClass: 'gm_label'}));
	        	var regioname = '';
	        	if (results[i]['groupsize'] > 1)
	        	{
	        		//gm_map.addOverlay(createLabeledMarker(point, iconPeople['group'], results[i]['groupsize']+' User', 'gm_label', null));
	        		
	        		var marker = createUserGroupMarker(point, results[i]['groupsize'], results[i]['current_region'], results[i]['lat_rnd'], results[i]['lng_rnd'], iconPeople['group'], results[i]['groupsize']+' User', 'gm_label'); 
	        		gm_map.addOverlay(marker);
	        	}
	        	else
	        	{
	        		var icon = iconPeople['male'];
	        		if (results[i]['gender'] == 'f')
	        		{
	        			icon = iconPeople['female'];
	        		}
	        		//var infoWindow = '<img src="/files/'+results[i]['avatar']+'_squared.jpg" /> ';
	        		var marker = createUserMarker(point, results[i]['user_id'], icon, '', 'gm_label'); 
	        		gm_map.addOverlay(marker);
	        		//gm_map.addOverlay(createMarker(point, icon));
	        		
	        		//gm_map.removeControl(legend);
	        		//legend.setText('+'+results[i]['groupsize']+' '+regionname+' User');
	        		//gm_map.addControl(legend);
	        	}
			}
		}
	});

}

function gmDrawPlacesOverlay(query)
{
    $.getJSON("/ajax?func=getMapPlaces"+query, function(data) 
	{
    	url = location.href.split(/\?|#/)[0];

    	var unprecise = data.unprecise;
		if (unprecise.length > 0) 
		{
			var info = '';
			for (i = 0; i < unprecise.length; i++) 
			{
				if (unprecise[i]['groupsize'] > 0)
				{
					info += '<a href="'+url+'?list='+unprecise[i]['place_type']+'">+'+unprecise[i]['groupsize']+' '+data.withoutcoords+'</a><br />';
				}
			}
			
			gm_legend = new MyPane({paneClass: 'gm_pane', paneText: info});
    		gm_map.addControl(gm_legend);
		}
		
		var results = data.results;
    	
		if (results.length > 0) 
		{
			for (i = 0; i < results.length; i++) 
			{
	        	var point = new GLatLng(results[i]['latitude'], results[i]['longitude']);
	
	        	var regioname = '';
        		var icon = iconPlaces['default'];
        		if (results[i]['icon'])
        		{
        			iconkey = results[i]['place_type']+'_'+results[i]['icon'].split('\/')[2];
        			
        			if (iconPlaces[iconkey])
        			{
        				icon = iconPlaces[iconkey];
        			}
        			else
        			{
        				iconPlaces[iconkey] = new GIcon();
        				iconPlaces[iconkey].image = '/files/'+results[i]['icon']+'.png';
        				iconPlaces[iconkey].iconSize = new GSize(34, 24);
        				iconPlaces[iconkey].shadow = '/files/'+results[i]['icon']+'_shadow.png';
        				iconPlaces[iconkey].shadowSize = new GSize(34, 24);
        				iconPlaces[iconkey].iconAnchor = new GPoint(16, 16);
        				iconPlaces[iconkey].infoWindowAnchor = new GPoint(24, 24);
        				iconPlaces[iconkey].infoWindowAnchor = new GPoint(20, 10);
        			}
        		}
        		else if (results[i]['place_type'] == 'partner')
        		{
        			icon = iconPlaces['partner'];
        		}
	        	
        		if (results[i]['groupsize'] > 1)
	        	{
	        		gm_map.addOverlay(createLabeledMarker(point, icon, results[i]['groupsize'], 'gm_label', new GSize(4, -20)));
	        	}
	        	else
	        	{
	        		var marker = createPlaceMarker(point, results[i]['place_type'], results[i]['place_id'], icon, '', 'gm_label'); 
	        		gm_map.addOverlay(marker);
	        	}
			}
		}
	});

}


function gmDrawSingleOfferOverlay()
{
	iconOffer = new GIcon();
	iconOffer.image = '/files/'+singleoffer_icon+'.png';
	iconOffer.iconSize = new GSize(34, 24);
	iconOffer.shadow = '/files/'+singleoffer_icon+'_shadow.png';
	iconOffer.shadowSize = new GSize(34, 24);
	iconOffer.iconAnchor = new GPoint(16, 16);
	iconOffer.infoWindowAnchor = new GPoint(24, 24);
	iconOffer.infoWindowAnchor = new GPoint(20, 10);
    
	var point = new GLatLng(singleoffer_lat, singleoffer_lng);
	var marker = createMarker(point, iconOffer, '<b>'+singleoffer_name+'</b><br />'+singleoffer_address);
	gm_map.addOverlay(marker);
}


function gmDrawData() 
{
	//div.style.position = "absolute";
    var bounds 		= gm_map.getBounds();
    var southWest 	= bounds.getSouthWest();
    var northEast 	= bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat();
    var center = gm_map.getCenter();
	var p = '&zoom='+gm_map.getZoom()+'&lat='+center.lat()+'&lng='+center.lng()+'&ne_lat='+northEast.lat()+'&ne_lng='+northEast.lng()+'&sw_lat='+southWest.lat()+'&sw_lng='+southWest.lng();

	gm_map.clearOverlays();
	//alert(p);
	if (gm_legend)
	{
		gm_map.removeControl(gm_legend);
	}
	return p;
}


function gmDrawPeople()
{
	var query = gmDrawData();
	gmDrawPeopleOverlay(query);
}

function gmDrawPlaces()
{
	var query = gmDrawData();
	gmDrawPlacesOverlay(query);
}

function gmDrawSingleOffer()
{
	gmDrawSingleOfferOverlay();
}
