var map = null;
var maptypectrl = null;
var stdMapTypes = new Array();
var registeredMapTypes = new Array();
var currentMarker = null;
var camera = false;
var controls = new Array();
var BOUNDS_ALL = new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180));

String.prototype.toInteger = function()
{
	var str = "";
	for (i = 0; i < this.length; i++)
	{
		if (!isNaN(this.substr(i,1))) str+=this.substr(i,1);
	}
	return str;
}

function addCustomMapType(name, shortName, alt, parent, tileUrlTemplate, minResolution, maxResolution, copyright, projection)
{
	var copyrightCollection = new GCopyrightCollection();
	var copyright = new GCopyright(name, BOUNDS_ALL, minResolution, copyright);
	copyrightCollection.addCopyright(copyright);
	var tileLayer = new GTileLayer(copyrightCollection, minResolution, maxResolution, {tileUrlTemplate:tileUrlTemplate});

	var maptype = new GMapType(new Array(tileLayer), projection, name, { shortName:shortName, minResolution:minResolution, maxResolution:maxResolution, alt:alt });
	if (parent.length > 0)
	{
		if (stdMapTypes[parent])
		{
			var parentMapType = stdMapTypes[parent];
		}
		else
		{
			var parentMapType = registeredMapTypes[parent];
		}
		maptypectrl.addRelationship(parentMapType, maptype);
	}
	registeredMapTypes[name] = maptype;
}

function addCustomMapOverlay(name, tileUrlTemplate, minResolution, maxResolution, copyright, opacity)
{
	var copyrightCollection = new GCopyrightCollection();
	var copyright = new GCopyright(name, BOUNDS_ALL, minResolution, copyright);
	copyrightCollection.addCopyright(copyright);
	var tileLayer = new GTileLayer(copyrightCollection, minResolution, maxResolution, {tileUrlTemplate:tileUrlTemplate, opacity:opacity});
	//tileLayer.getTileUrl = CustomGetTileUrl;
	map.addOverlay(new GTileLayerOverlay(tileLayer));
}
/*
CustomGetTileUrl=function(a,b){ 
	url = "http://www.conne.net/tiles/"+b+"_"+a.x+"_"+a.y+".png";
	if (b == 16 && a.x == 34126 && a.y == 21281) alert(url);
	if (b == 19 && a.x == 273001 && a.y == 170233) alert(url);
	return url;
}
*/


function mytest(overlay, latlng)
{
	alert(latlng);
}

window.onload = function()
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById("map"));
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();
		map.setCenter(new GLatLng(37.4419, -122.1419), 13);
		map.addControl(new mapcontrol());
		maptypectrl = new maptypecontrol();
		map.addControl(maptypectrl);
		//var myEventListener = GEvent.bind(map, "click", this, mytest);


		var maptypes = map.getMapTypes();
		for (i in maptypes)
		{
			stdMapTypes[maptypes[i].getName()] = maptypes[i];
		}
		registeredMapTypes["Gelände"] = G_PHYSICAL_MAP;
		
		var CustomMapTypes = eval(document.getElementById("g_maptypes").value);

		for (i in CustomMapTypes)
		{
			CustomMapType = CustomMapTypes[i];
			var name = CustomMapType.name;
			var shortName = CustomMapType.shortName;
			var alt = CustomMapType.alt;
			var parent = CustomMapType.parent;
			var tileUrlTemplate = CustomMapType.tileUrlTemplate;
			var minResolution = CustomMapType.minResolution;
			var maxResolution = CustomMapType.maxResolution;
			var copyright = CustomMapType.copyright;
			var projection = CustomMapType.projection;
			
			addCustomMapType(name, shortName, alt, parent, tileUrlTemplate, minResolution, maxResolution, copyright, projection);
		}

		var CustomMapOverlays = eval(document.getElementById("g_mapoverlays").value);
		//alert(CustomMapOverlays);
		for (i in CustomMapOverlays)
		{
			CustomMapOverlay = CustomMapOverlays[i];
			var name = CustomMapOverlay.name;
			var tileUrlTemplate = CustomMapOverlay.tileUrlTemplate;
			var minResolution = CustomMapOverlay.minResolution;
			var maxResolution = CustomMapOverlay.maxResolution;
			var copyright = CustomMapOverlay.copyright;
			var opacity = CustomMapOverlay.opacity;
			
			addCustomMapOverlay(name, tileUrlTemplate, minResolution, maxResolution, copyright, opacity);
		}

		//addCustomMapType("Fahrrad2", "Fahrrad", "http://c.andy.sandbox.cloudmade.com/tiles/cycle/{Z}/{X}/{Y}.png", 0, 15, copyrights);

		for (i in registeredMapTypes)
		{
			map.addMapType(registeredMapTypes[i]);
		}

/*
	osm[0].getTileUrl = function(a,b)
	{
		return "http://c.andy.sandbox.cloudmade.com/tiles/cycle/" + b + "/" + a.x + "/" + a.y + ".png";
	};
*/
/*
	osm[0].getCopyright = function(a,b)
	{
		return {prefix:copytah1, copyrightTexts:[copytah2]};
	}
*/
		map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(50,50)));
		//map.addControl(createControl("addresssearch", G_ANCHOR_BOTTOM_LEFT, 50, 50));

		if (document.getElementById("background") && document.getElementById("foreground"))
		{
			controls["SIDEBAR"] = (new Array("background", "foreground"));
			map.addControl(createControl("background", G_ANCHOR_TOP_RIGHT, 50, 150));
			map.addControl(createControl("foreground", G_ANCHOR_TOP_RIGHT, 51, 151));
		}

		/*
		mapedit = new MapEditControl()
		map.addControl(mapedit);
		*/
		
		if (document.getElementById("background-toolbox") && document.getElementById("foreground-toolbox"))
		{
			controls["TOOLBOX"] = (new Array("background-toolbox", "foreground-toolbox"));
			map.addControl(createControl("background-toolbox", G_ANCHOR_TOP_RIGHT, 50, 460));
			map.addControl(createControl("foreground-toolbox", G_ANCHOR_TOP_RIGHT, 51, 461));
		}
	
		GEvent.addListener(map, "mousemove", function(latlng)
		{
			if (currentMarker)
			{
				currentMarker.setLatLng(latlng);
			}
		});

		GEvent.addListener(map, "dragend", function(latlng)
		{
			if (camera)
			{
				drawCameraRect(cameraSize.width, cameraSize.height, map.getCenter());
			}
		});

		GEvent.addListener(map, "zoomend", function(latlng)
		{
			if (camera)
			{
				drawCameraRect(cameraSize.width, cameraSize.height, map.getCenter());
			}
		});

		GEvent.addListener(map, "click", function(overlay, latlng)
		{
			if (currentMarker)
			{
				currentMarker = null;
				map.getDragObject().setDraggableCursor("http://maps.google.de/intl/de_ALL/mapfiles/openhand.cur");
				var obj = document.getElementById('userPoiControl')
				obj.selected = false;
				obj.src = "content/module/connemap/images/poi.png";
				if (!latlng) latlng = overlay.getLatLng();
				var url = "content/module/connemap/include/popup.php?m="+mandant+"&lat="+latlng.lat()+"&lng="+latlng.lng();
				opwin(url, "_blank", 800, 500, true);
			}
		});

		var left = map.getContainer().offsetWidth / 2 - document.getElementById("laden").style.width.toInteger() / 2;
		var top = map.getContainer().offsetHeight / 2 - document.getElementById("laden").style.height.toInteger() / 2;
		map.addControl(createControl("laden", G_ANCHOR_TOP_LEFT, left, top));

		if (document.getElementById("background-cameratoolbox") && document.getElementById("foreground-cameratoolbox"))
		{
			map.addControl(createControl("background-cameratoolbox", G_ANCHOR_BOTTOM_LEFT, 50, 100));
			map.addControl(createControl("foreground-cameratoolbox", G_ANCHOR_BOTTOM_LEFT, 51, 101));
		}
		
		var DOM_autoload = document.getElementById("g_autoload");
		if (DOM_autoload)
		{
			if (DOM_autoload.value)
			{
				var infos = eval(DOM_autoload.value);
				if (infos[0]["id"])
				{
					toggleOverlay(infos);
				}
				else
				{
					for (var i = 0; i < infos.length; i++)
					{
						toggleOverlay(infos[i]);
					}
				}
			}
		}
	}
}

window.onunload = function()
{
	if (map)
	{
		GUnload();
	}
}
