var Map = null;
var MapTempMarker;
var MapPhotoStartIndex = 0;
var MapPhotoMaxCount = 24;
var MapPhotoLastStartIndex = 0;
var MapPhotoLastMaxCount = 0;
var MapInfoNoPhotosText = "%s";
var MapInfoPhotosText = "%s %s %s";
var MapInfoPreviousText = "<<";
var MapInfoNextText = ">>";
var MapInfoBrowseText = "";
var MapMarkerArray = new Array();
var MapFocusMarkerArray = new Array();
var MapMarkerIndex = 0;

try{
var Geocoder = new GClientGeocoder();
}catch(e)
{
	setCookie('locrusersetting[locr_map_source]','MIRCOSOFT');
	window.location.reload();
}

function MapGoogleOpen(Latitude, Longitude, ObjectLatitude, ObjectLongitude, ZoomLevel, MapType, Width, Height) 
{
	if(GBrowserIsCompatible())
	{
		if(document.URL.search('photo_detail.php') != -1)
		{
			TempZoomLevel = GetMapCookie("photo_detail_map_zoom_level");
		}
		else if(document.URL.search('photo_change_position.php') != -1)
		{
			TempZoomLevel = GetMapCookie("photo_change_position_map_zoom_level");
		}
		else
			TempZoomLevel = '';

		if(TempZoomLevel != '')
			ZoomLevel = TempZoomLevel;

		if(isNaN(Height)) {}
		else if(Width == 0 && Height == 0)
		{
			MapResize();
			window.onresize = MapResize;
		}
		else
		{
			document.getElementById("map").style.width = Width+'px';
			document.getElementById("map").style.height = Height+'px';
		}	

		Map = new GMap2(document.getElementById("map"));

		Map.addMapType(G_PHYSICAL_MAP);
		Map.addMapType(G_SATELLITE_3D_MAP);

		if(MapType & 8)
		{ 
//			var overlay_control = new GOverviewMapControl(new GSize(87, 91));
//			Map.addControl(overlay_control);
//			Map.addControl(new GOverviewMapControl(new GSize(87, 91)));
//			var overlay_control = new GOverviewMapControl(new GSize(87, 91));
//			Map.addControl(overlay_control);
//			overlay_map = overlay_control.getOverviewMap();
//			GEvent.addListener(overlay_map, "zoomend", function() {overlay_map.setZoom(5);});
		}

		if(MapType & 16)
			Map.addControl(new GSmallMapControl());
			
		if(MapType & 32)
			Map.addControl(new GMapTypeControl());

		if ((MapType & 64) && (!(MapType & 16)))
			Map.addControl(new GLargeMapControl());
		
		if(MapType & 128) 
			MapGoogleHideControls();

		if(MapType & 256)
		{
			//MapGoogleMouseWheelZoom();
			Map.getContainer().onmouseover = dowheel;
			Map.getContainer().onmouseout = stopwheel;
		}

		Map.enableDoubleClickZoom();
		//Map.enableContinuousZoom();
		Map.enableScrollWheelZoom();

		SetMapOverlay();

		if(Latitude == 0 && Longitude == 0 && ZoomLevel != 0)
		{
			Map.setCenter(new GLatLng(0, 0), 3);
		}		
		else
		{
			if(ObjectLatitude != 0 && ObjectLongitude != 0)
			{
				// Karte neu zentrieren
				var bounds = new GLatLngBounds();
				bounds.extend(new GLatLng(ObjectLatitude, ObjectLongitude));
				bounds.extend(new GLatLng(Latitude, Longitude));
				Map.setCenter(bounds.getCenter(), parseInt(ZoomLevel));
			} else
			{
				Map.setCenter(new GLatLng(Latitude, Longitude), parseInt(ZoomLevel));
			}

			if(document.getElementById('MapTypeOverride') && document.getElementById('MapTypeOverride').value != '')
			{
				var MapType = document.getElementById('MapTypeOverride').value;

				switch(MapType)
				{
					case 'G_NORMAL_MAP':
					default:
						Map.setMapType(G_NORMAL_MAP);
						break;
					case 'G_SATELLITE_MAP':
						Map.setMapType(G_SATELLITE_MAP);
						break;
					case 'G_HYBRID_MAP':
						Map.setMapType(G_HYBRID_MAP);
						break;
				}
			}
			else 
			{
				if(MapType & 1)	
					Map.setMapType(G_NORMAL_MAP);
					
				if(MapType & 2)	
					Map.setMapType(G_SATELLITE_MAP);
					
				if(MapType & 4)	
					Map.setMapType(G_HYBRID_MAP);
			}
		}
		getMapTypeCookie(Map);
	}
}

function getMapTypeCookie(Map)
{
	if(typeof getCookie == 'function')
	{
		var MapCookieType = getCookie('map_type');

		if(MapCookieType)
		{
			if(MapCookieType == 'H')
				Map.setMapType(G_HYBRID_MAP);
			else
			if(MapCookieType == 'P')
				Map.setMapType(G_PHYSICAL_MAP);
			else
			if(MapCookieType == 'S')
				Map.setMapType(G_SATELLITE_MAP);
			else
			if(MapCookieType == 'N')
				Map.setMapType(G_NORMAL_MAP);
		}
	}
}

function setMapTypeCookie(Map)
{
	var CookieExpireDate = new Date();
	var OneYear = CookieExpireDate.getTime() + (365 * 24 * 60 * 60 * 1000);
	CookieExpireDate.setTime(OneYear);

	if(Map)
		var MapType = Map.getCurrentMapType();
	if(MapType == G_HYBRID_MAP)
		MapTypeCookie = 'H';
	else if (MapType == G_PHYSICAL_MAP)
		MapTypeCookie = 'P';
	else if (MapType == G_SATELLITE_MAP)
		MapTypeCookie = 'S';
	else
		MapTypeCookie = 'N';
	document.cookie = "map_type=" + MapTypeCookie + "; expires=" + CookieExpireDate.toGMTString() + "; path=/";
}

function MapGoogleClose()
{
	setMapTypeCookie(Map);
	GUnload();
}
 			
function MapCenter(Latitude, Longitude) 
{
	Map.setCenter(new GLatLng(Latitude, Longitude));
}

function MapGoogleCenterAndBounds(LatitudeCenter, LongitudeCenter, LatitudeSw, LongitudeSw, LatitudeNe, LongitudeNe) 
{
	Map.setCenter(new GLatLng(LatitudeCenter, LongitudeCenter));
	Map.setZoom(Map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(LatitudeSw, LongitudeSw), new GLatLng(LatitudeNe, LongitudeNe))) + 1);
}

function MapZoom(ZoomLevel)
{
	Map.setZoom(ZoomLevel);
}

function MapGoogleSetCenterAndZoom(Latitude, Longitude, ZoomLevel)
{
	MapCenter(Latitude, Longitude);
	MapZoom(ZoomLevel);
}

function MapResize() 
{
	WidthResize(0);
	
	MinWidth = 900;
	MinHeight = 600+12; // 12 = padding
	Border = 50;
	BorderContent = 20;
	if(self.innerHeight) // all except Explorer
	{
		Width = self.innerWidth;
		Height = self.innerHeight - 20;
	}
	else if(document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
	{
		Width = document.documentElement.clientWidth;
		Height = document.documentElement.clientHeight;
	}
	else if(document.body) // other Explorers
	{
		Width = document.body.clientWidth;
		Height = document.body.clientHeight - 40;
	}

	if(Map)
		Location = Map.getCenter();

	MapPhotoStartIndex = 0;
	
	if(Height > Width)
	{
		Width = Math.max(parseInt((Width - Border - BorderContent) / 100) * 100, MinWidth);
		Height = Math.max(Height - 225, MinHeight);
		
		MapAndPhotosStyle = document.getElementById("map_and_photos").style;
		MapAndPhotosStyle.width = Width+'px';
		MapAndPhotosStyle.height = Height+'px';
		
		MapStyle = document.getElementById("map").style;
		MapStyle.left = 0;
		MapStyle.top = 0;
		MapStyle.width = Width+'px';
		MapStyle.height = Height - 300+'px';

		DisplayedPhotosStyle = document.getElementById("displayed_photos").style;
		DisplayedPhotosStyle.left = '-2px';
		DisplayedPhotosStyle.top = Height - 300+2+'px';
		DisplayedPhotosStyle.width = Width-84+'px';
		DisplayedPhotosStyle.height = 300+'px';
	
		MapPhotoMaxCount = (Width-84) * 3 / 102;
	}
	else
	{
		Width = Math.max(Width - Border - BorderContent, MinWidth);
		Height = Math.max(parseInt((Height - 205) / 100) * 102, MinHeight);
		
		MapAndPhotosStyle = document.getElementById("map_and_photos").style;
		MapAndPhotosStyle.width = Width+'px';
		MapAndPhotosStyle.height = Height+'px';
		
		MapStyle = document.getElementById("map").style;
		MapStyle.left = 0;
		MapStyle.top = 0;
		MapStyle.width = Width - 408+'px';
		MapStyle.height = Height-2+'px';

		DisplayedPhotosStyle = document.getElementById("displayed_photos").style;
		DisplayedPhotosStyle.top = 0 +'px';
		DisplayedPhotosStyle.left = Width - 408+'px';
		DisplayedPhotosStyle.width = 408+'px';
		DisplayedPhotosStyle.height = Height+'px';
		
		if(document.getElementById('LOCR_RATING_STARS'))
		{
			RatingStarsStyle = document.getElementById('LOCR_RATING_STARS').style;
			RatingStarsStyle.left = Width - 408+'px';
		}
	
		MapPhotoMaxCount = Height * 4 / 102;
	}

	if(Map)
	{
		Map.checkResize();
		Map.setCenter(Location);
		MapGooglePhotoWorldMapRefresh();
	}
	if(document.getElementById('AlbumDescription'))
		setAlbumDescription();

	var MapContainer = document.getElementById('map');

	if(MapContainer)
		SetMapOverlay();
}

function MapGoogleShowSmallTempMarker(Latitude, Longitude, IconName)
{
	if(Latitude == 0 && Longitude == 0)
		return;

	var TempIcon = new MapIconObject();

	MapTempMarker = new GMarker(new GLatLng(Latitude, Longitude), TempIcon.GetMapIcon(IconName));
	MapTempMarker.show();
	Map.addOverlay(MapTempMarker);
}

function MapGoogleHideSmallTempMarker() 
{
	if(Map)
		if(MapTempMarker)
			Map.removeOverlay(MapTempMarker);
}

function MapGooglePhotoDetailInitMaps(Latitude, Longitude, ObjectLatitude, ObjectLongitude, ZoomLevel, MapType, Width, Height)
{
	MapGoogleOpen(Latitude, Longitude, ObjectLatitude, ObjectLongitude, ZoomLevel, MapType, Width, Height);
	
	if(!(Latitude == 0 && Longitude == 0))
	{
		var Icon = new MapIconObject();
		// draggable muss zuerst aktiviert werden, dann deaktiviert werden, damit man es nachträglich wieder aktivieren kann!
		PositionMarker['photographer'] = new GMarker(new GLatLng(Latitude, Longitude), {
			icon: Icon.GetMapIcon('photographer'),
			draggable: true
		});
		PositionMarker['photographer'].disableDragging();
		Map.addOverlay(PositionMarker['photographer']);
	}
	if(!(ObjectLatitude == 0 && ObjectLongitude == 0))
	{
		var Icon = new MapIconObject();
		PositionMarker['object'] = new GMarker(new GLatLng(ObjectLatitude, ObjectLongitude), {
			icon: Icon.GetMapIcon('object'),
			draggable: true
		});
		PositionMarker['object'].disableDragging();
		Map.addOverlay(PositionMarker['object']);
		
		// Öffnungswinkelanzeigen
		getPhotoViewPoints();
	} else
	if(document.getElementById('PHOTO_DIRECTION'))
	{
		getPhotoViewPoints();
	}
}

function MapGoogleMouseWheelZoom()
{
	function MouseZoom(Mouse) 
	{ 
		if (Mouse.detail < 0 || -Mouse.wheelDelta < 0) 
			Map.zoomIn();
		else
			Map.zoomOut(); 
	}

	GEvent.addDomListener(document.getElementById("map"), "mousewheel", MouseZoom);
	GEvent.addDomListener(document.getElementById("map"), "DOMMouseScroll", MouseZoom);
}

function MapGoogleHideControls()
{
	function HideControls() 
	{ 
		Map.hideControls();
	}
	function ShowControls() 
	{ 
		Map.showControls(); 
	}

	GEvent.addDomListener(document.getElementById("map"), "mouseover", ShowControls); 
	GEvent.addDomListener(document.getElementById("map"), "mouseout", HideControls); 
}

function MapGoogleShowAddress(NotFoundText, UserId)
{
	var Address = document.getElementById("Address").value;

	var FirstChar = Address.charAt(0);
	var SpecialChar = '*';

	if(UserId && (UserId == 1457176 || UserId == 27) && (FirstChar == SpecialChar))
	{
		// special location search
		var Bounds = new GLatLngBounds();

		var Url = '/functions/ajax/special_location.php';
		var Request = new AjaxRequest();
			Request.Send(Url, {
				method: 'POST',
				url_params: 'action=getLocationCoords&entryName='+encodeURIComponent(Address.slice(1)),
				callback: CallbackMapGoogleShowAddress,
				callback_parameters: {
					get_response: true
				}
			});
	}
	else
	{
		var TabAccuracy = new Array(2,4,6,10,12,13,16,16,17);

		Geocoder.getLocations
		(
			Address,
			function(Response)
			{
				if(Response.Status.code != 200)
				{
	        		alert(Address + ' - ' + NotFoundText);
				}
				else
				{
					Place = Response.Placemark[0];
					Accuracy = Place.AddressDetails.Accuracy;
					Map.setCenter(new GLatLng(Place.Point.coordinates[1], Place.Point.coordinates[0]), TabAccuracy[Accuracy]);
				}
			}
		);
	}
}

function CallbackMapGoogleShowAddress(Params)
{
	ResultString = Params.TextResult;

	if(ResultString.length > 0)
	{
		ResultArray  = ResultString.split("|@|");

		Latitude = parseFloat(ResultArray[0]);
		Longitude = parseFloat(ResultArray[1]);

		Bounds.extend(new GLatLng(Latitude, Longitude));

		Map.setZoom(Map.getBoundsZoomLevel(Bounds));
		Map.setCenter(Bounds.getCenter());
	}
}

// GoogleZoom

function wheel(event)
{
	var delta = 0;

	// ie event handler
	if (!event)
	{
		event = window.event;
	}

	// ie Opera
	if (event.wheelDelta)
	{
	    delta = event.wheelDelta/120;

    // kpera korrektur
    if (window.opera)
    {
		delta = -delta;
    }

	// mozilla
	}
	else if (event.detail)
	{
    	delta = -event.detail/3;
  	}

	// wenn gescrollt wird tue dies
	if (delta)
	{
    	setZoom(delta);
	}

	// mozilla scrolling verhindern
	if (event.preventDefault)
	{
    	event.preventDefault();
	}

	// ie opera scrolling verhindern
	event.returnValue = false;
}

function dowheel()
{
	if (window.addEventListener)
	{
		// mozilla
		window.addEventListener('DOMMouseScroll', wheel, false);
	}

	// ie opera
	window.onmousewheel = document.onmousewheel = wheel;
}

function stopwheel()
{
	// scroll listener hinzufügen
	if (window.removeEventListener)
	{
    	// mozilla
		window.removeEventListener('DOMMouseScroll', wheel, false);
	}

	// ie opera
	window.onmousewheel = document.onmousewheel = '';
}

function setZoom(delta)
{
    if(delta<0)
    {
		Map.zoomOut();
    }
    else
    {
		Map.zoomIn();
	}
}
