var map = null;
var mgr = null;

function getIcon(num)
{
	img	=	geo_map_img1_src;
	img_size_w = geo_map_img1_w;
	img_size_h = geo_map_img1_h;
	
	if(num>geo_map_img1_znum)
	{
		img = geo_map_img2_src;
		img_size_w = geo_map_img2_w;
		img_size_h = geo_map_img2_h;
	}
	
	if(num>geo_map_img2_znum)
	{
		img = geo_map_img3_src;
		img_size_w = geo_map_img3_w;
		img_size_h = geo_map_img3_h;
	}
	
  var icon = new google.maps.MarkerImage(
		((geo_map_ipath!='')?geo_map_ipath:IPATH+'grafiken/people/')+img,
	  // This marker is 20 pixels wide by 32 pixels tall.
	  new google.maps.Size(img_size_w, img_size_h),
	  // The origin for this image is 0,0.
	  new google.maps.Point(0,0),
	  // The anchor for this image is the base of the flagpole at 0,32.
	  //new google.maps.Point(0, 32));
	  new google.maps.Point(	parseInt(img_size_w/2)	,	parseInt(img_size_h/2)	)
	);
	//icon.shadow = "images/"+ IMAGES[i]+"-shadow.png";
	//icon.shadowSize = new google.maps.Size(59, 32);
	return icon;
}

function getUserIcon()
{
	img	=	geo_map_img_src;
	img_size_w = geo_map_img_w;
	img_size_h = geo_map_img_h;	
  var icon = new google.maps.MarkerImage(
		((geo_map_ipath!='')?geo_map_ipath:IPATH+'grafiken/people/')+img,
	  // This marker is 20 pixels wide by 32 pixels tall.
	  new google.maps.Size(img_size_w, img_size_h),
	  // The origin for this image is 0,0.
	  new google.maps.Point(0,0),
	  // The anchor for this image is the base of the flagpole at 0,32.
	  //new google.maps.Point(0, 32));
	  new google.maps.Point(	parseInt(img_size_w/2)	,	parseInt(img_size_h)	)
	);
	return icon;
}

function show_zoom_level(zoom)
{
	var predata = [];
	var data = [];
	var tmp_lat = 0;
	var tmp_lon = 0;
	var tmp_num = 0;
	var avg_lat = 0;
	var avg_lon = 0;
	var avg_num = 0;
	var latmin = 0;
	var latmax = 0;
	var lonmin = 0;
	var lonmax = 0;
	var latmini = 0;
	var latmaxi = 0;
	var lonmini = 0;
	var lonmaxi = 0;
	var num = 0;
	if (zoom)
	{
		for(var i=0;i<geo_data.length;i++)
		{
			var lat = geo_data[i][0];
			var lon = geo_data[i][1];
			var num = geo_data[i][2];
			var latmin = geo_data[i][3];
			var latmax = geo_data[i][4];
			var lonmin = geo_data[i][5];
			var lonmax = geo_data[i][6];
			var floorlat = Math.floor(lat/4/zoom);
			var floorlon = Math.floor(lon/zoom);
			
			predata.push(	[	lat,lon,num,latmin,latmax,lonmin,lonmax,floorlat,floorlon ]	);
		}
		
		predata.sort(sort_geopos);
		
		for(var i=0;i<predata.length;i++)
		{
			var lat = predata[i][0];
			var lon = predata[i][1];
			var num = predata[i][2];				
			var latmini = predata[i][3];
			var latmaxi = predata[i][4];
			var lonmini = predata[i][5];
			var lonmaxi = predata[i][6];
			var floorlat = predata[i][7];
			var floorlon = predata[i][8];
			
			if ( tmp_lat != floorlat || tmp_lon != floorlon )
			{
				avg_lat = lat*num;
				avg_lon = lon*num;
				avg_num = num;
				
				latmin = latmini;
				latmax = latmaxi;
				lonmin = lonmini;
				lonmax = lonmaxi;
				
				data.push(	[	lat,lon,avg_num,latmini,latmaxi,lonmini,lonmaxi	]	);
				
				tmp_lat = floorlat;
				tmp_lon = floorlon;
				
			}
			else
			{
				avg_lat += lat*num;
				avg_lon += lon*num;
				avg_num += num;
				lasti = data.length-1;
				
				latmin = data[lasti][3];
				latmax = data[lasti][4];
				lonmin = data[lasti][5];
				lonmax = data[lasti][6];
				
				latmin = ((latmin >= latmini)?latmini:latmin);
				latmax = ((latmax <= latmaxi)?latmaxi:latmax);
				lonmin = ((lonmin >= lonmini)?lonmini:lonmin);
				lonmax = ((lonmax <= lonmaxi)?lonmaxi:lonmax);
				
				data[lasti][0] = avg_lat/avg_num;
				data[lasti][1] = avg_lon/avg_num;
				data[lasti][2] = avg_num;
				data[lasti][3] = latmin;
				data[lasti][4] = latmax;
				data[lasti][5] = lonmin;
				data[lasti][6] = lonmax;
			}
		}
	}
	else
	{
		data = geo_data;
	}

	markernum = data.length;
	for(var i=0;i<data.length;i++)
	{
		lat = data[i][0];
		lon = data[i][1];
		create_overview_marker(lat,lon,data[i][2],data[i][2],zoom,data[i][3],data[i][4],data[i][5],data[i][6],i);
	}
}

var markernum = 0;
var marker = new Array();
function create_overview_marker(lat,lon,num,title,zoom,latmin,latmax,lonmin,lonmax,pos)
{
	var latlon = new google.maps.LatLng(lat,lon);
  marker[pos] = new google.maps.Marker({
      position: latlon,
      map: map,
      /*shadow: shadow,*/
      icon: getIcon(num),
      /*shape: shape,*/
      title: title+' '+((title==1)?geo_map_pin_title_sing:geo_map_pin_title_plur),
      zIndex: pos
  });
	
	
	marker[pos].value = title;
	google.maps.event.addListener(marker[pos],"click",
		function() {
			
			if (geo_debug == 1)
			{
				var myHtml = "<b>Anzahl für Region: " + title + "</b><br/>";
				myHtml += "Lat: " + lat + "<br/>";
				myHtml += "Lon: " + lon + "<br/>";
				myHtml += "Floor: " + zoom + "<br/>";
				myHtml += "Lat Min: " + latmin + "<br/>";
				myHtml += "Lat Max: " + latmax + "<br/>";
				myHtml += "Lon Min: " + lonmin + "<br/>";
				myHtml += "Lon Max: " + lonmax + "<br/>";
				map.openInfoWindowHtml(latlon, myHtml);
				
				var polygon = new google.maps.Polygon([
	        new google.maps.LatLng(latmin, lonmin),
	        new google.maps.LatLng(latmin, lonmax),
	        new google.maps.LatLng(latmax,lonmax),
	        new google.maps.LatLng(latmax, lonmin),
	        new google.maps.LatLng(latmin, lonmin)
			  ], "#f33f00", 5, 1, "#ff0000", 0.2);
	  		map.addOverlay(polygon);
	  	}
	  	else
	  	{
				var geostr = latmin+','+latmax+','+lonmin+','+lonmax;
				location.href=PPATH+'geo/index.html?COOR='+geostr;
				//console_alert(geostr);
			}
		}
	);
	return marker[pos];
}

var zoom_level = 0;
function MarkerControl() {
	if (map.getZoom() != zoom_level)
	{
		for(var i=0;i<markernum;i++) marker[i].setMap(null) ;

		zoom_level = map.getZoom();
		if (zoom_level < geo_map_flz1)
		{
			show_zoom_level(geo_map_fls1);
		}
		else if (zoom_level == geo_map_flz1)
		{
			show_zoom_level(geo_map_fls2);
		}
		else if (zoom_level >= geo_map_flz2)
		{
			show_zoom_level();
		}
	}
  zoom_timeout = window.setTimeout(MarkerControl, 50);
}

var zoom_timeout;
function init_geomap()
{
	eval("var point = new google.maps.LatLng("+geo_map_latlon+");");
	var myOptions = {
		zoom: 6,
		mapTypeId: google.maps.MapTypeId.TERRAIN
	};
	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	map.setCenter(point, geo_map_zoom);
	//map.addControl(new google.maps.SmallMapControl());
	//map.addControl(new google.maps.MapTypeControl());
	geo_map_typ = 'TERRAIN';
	eval("map.setMapTypeId."+geo_map_typ+";");
	zoom_timeout = window.setTimeout(MarkerControl, 50);
}

function init_geomapuser() {
	eval("var point = new google.maps.LatLng("+geo_map_latlon+");");
  var myOptions = {
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	map.setCenter(point, geo_map_zoom);
	//map.addControl(new GSmallMapControl());
	//map.addControl(new GMapTypeControl());
	geo_map_typ = 'TERRAIN';
	eval("map.setMapTypeId."+geo_map_typ+";");
}

var umarker;
var ugoogleinfowindow = new google.maps.InfoWindow({
	content: ''
});
function create_user_marker(lat,lon,title,html)
{
	var latlon = new google.maps.LatLng(lat,lon);
  umarker = new google.maps.Marker({
      position: latlon,
      map: map,
      /*shadow: shadow,*/
      icon: getUserIcon(),
      /*shape: shape,*/
      title: title+'',
      zIndex: 1
  });
  
	ugoogleinfowindow.setContent(html);
	
	/*
	google.maps.event.addListener(umarker,"click",
		ugoogleinfowindow.open(map,umarker)
	);
	*/
}

function sort_geopos(a, b)
{
	a = a[7]+' '+a[8];
	b = b[7]+' '+b[8];
	return a == b ? 0 : (a < b ? -1 : 1)
}

