
var AreaMap =
{
	mapId: "gmap",

	addressAreaId: "current_area",

	map: null,

	geocoder: null,

	scale: null,

	isChangedScale: false,

	init: function(lat, lng, scale)
	{
		if(!GBrowserIsCompatible()){
			return;
		}

		this.map = new GMap2(document.getElementById(this.mapId));
		this.map.addControl(new GSmallMapControl());
		this.map.addControl(new GOverviewMapControl(new GSize(150, 150)));
		this.map.addControl(new GMapTypeControl(true), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5,5)));

		this.geocoder = new GClientGeocoder();
		GEvent.addListener(this.map, "moveend", this.onMoveEnd);
		this.map.setCenter(new GLatLng(lat, lng), scale);

		GEvent.addListener(this.map, "zoomend", this.onZoomEnd);
	},

	onMoveEnd: function()
	{
		AreaMap.geocoder.getLocations(AreaMap.map.getCenter(), AreaMap.onGetLocationHandler);
	},

	onZoomEnd: function( oldLevel, newLevel )
	{
		AreaMap.isChangedScale = true;
		console.log(newLevel);
	},

	onGetLocationHandler: function(addresses)
	{
		var adr = ""

		//レスポンスがないもしくはStatusコードが200でないとき
		if(!addresses || addresses.Status.code!=200){
			//alert("エラーコード:" + addresses.Status.code);
			adr += "日本";
		}
		//県名取得
		else if(addresses.Placemark[0].AddressDetails.Country.AdministrativeArea)
		{
			var Area = addresses.Placemark[0].AddressDetails.Country.AdministrativeArea;

			adr = Area.AdministrativeAreaName;

			//郡名取得
			if(Area.SubAdministrativeArea)
			{
				adr += Area.SubAdministrativeArea.SubAdministrativeAreaName;
				Area = Area.SubAdministrativeArea; // ※
			}

			//市町区村名取得
			if(Area.Locality){
				adr += Area.Locality.LocalityName;

				//番地取得
				if(Area.Locality.DependentLocality)
				{
					adr += Area.Locality.DependentLocality.DependentLocalityName;

	                //番地取得
					if(Area.Locality.DependentLocality.Thoroughfare){
						adr += Area.Locality.DependentLocality.Thoroughfare.ThoroughfareName;
		            }
	            }
			}
		}
		//県名が場合は日本と表記
		else if(addresses.Placemark[0].AddressDetails.Country)
		{
			adr += addresses.Placemark[0].AddressDetails.Country.CountryName;
		}

		document.getElementById(AreaMap.addressAreaId).innerHTML = adr;
	},

	addOverlay: function(marker)
	{
		this.map.addOverlay(marker);
	}
}
