var g_MyGmapObject = undefined;

$(window).unload(function() 
	{
		//googlemapのアンロード.
		GUnload();
	}
);

//地図を最大化したり元に戻したりする.
function closeleft() 
{

	if ($('#listsec').css('display') == 'none')
	{
		$('#listsec').show();
		$('#event_list').super_fadeIn(500);
		$('#bar').addClass("allow-left");
		$('#bar').removeClass("allow-right");
	}
	else
	{
		$('#listsec').hide();
		$('#bar').addClass("allow-right");
		$('#bar').removeClass("allow-left");
	}
	//サイズが変わったかもしれないことを通知する.
	g_MyGmapObject.checkResize();
}

//マップをドラッグ可能にして、ドラッグ終了したときに周囲のイベントを検索します。
function RegisterMapReload(callurl,loadDivObecjt,waitDivObecjt,isSearchMode,callback)
{
		//2重要見込み防止フラグ
	var doubleLoadBlock = false;
	
	var searchModeFlg = isSearchMode;
	var MapDataReload = function()
	{
		if (doubleLoadBlock)
		{//既に読み込み中
			return ;
		}
		
		//読み込み中にする.
		if (waitDivObecjt != undefined)
		{
			loadDivObecjt.css('display', 'none');
			waitDivObecjt.css('display', 'block');
		}
		doubleLoadBlock = true;

		if (searchModeFlg)
		{

			//最初の一度は、地図の範囲ではなく、検索条件で検索を行い、その結果に応じて、中心点と拡大率を計算します.
			requesturl = AppendParam(callurl , "searchmode=1");
			searchModeFlg = false;
		}
		else
		{
			//地図に表示されている範囲を求める.
			var latlngBounds = g_MyGmapObject.getBounds();

			var sw = latlngBounds.getSouthWest();
			var ne = latlngBounds.getNorthEast();

			//地図の範囲内で検索します.
			requesturl = AppendParam(callurl , "fplace=" + sw.lat() + "," + sw.lng() + "-" + ne.lat() + "," + ne.lng() );
		}
		loadDivObecjt.super_load(
			requesturl,
			{
				url: requesturl
			}
			,
			function(jsonData, status, response) 
			{
				//読み込み中解除
				if (waitDivObecjt != undefined)
				{
					waitDivObecjt.css('display', 'none');
					loadDivObecjt.super_fadeIn(600);						
				}
				doubleLoadBlock = false;

				//コールバック
				if (callback != undefined)
				{
					callback.call();
				}
			}
		);
	}
	
	//GEvent.addListener(g_MyGmapObject,'moveend',MapDataReload);	//panしたときも反応してしまうのでこれはやめる
	
	//ドラッグを終了したときとズームが切り替わったとき
	GEvent.clearListeners(g_MyGmapObject,'dragend');
	GEvent.clearListeners(g_MyGmapObject,'zoomend');
	GEvent.addListener(g_MyGmapObject,'dragend',MapDataReload);
	GEvent.addListener(g_MyGmapObject,'zoomend',MapDataReload);

	MapDataReload();
}
//すべての点を含む位置に移動する
function SetCenterWithAllPoint(latlonArray)
{
	var gb = undefined;
	for(var i in latlonArray)
	{
		var point = new GLatLng(latlonArray[i]['event_lat'],latlonArray[i]['event_lon']);

		if (gb == undefined)
		{
			gb = new GLatLngBounds( point, point );
		}
		else
		{
			gb.extend( point );
		}
	}
	if (gb != undefined)
	{
		g_MyGmapObject.setCenter( gb.getCenter(), g_MyGmapObject.getBoundsZoomLevel( gb ) );
	}
}
//指定した場所を中心にして、アイコンを描画しなおします.
function CreateCenterIcon(lat,lon,zoom)
{
	this.clearOverlays();

	this.setCenter(lat,lon,zoom);

	var marker = g_MyGmapObject.createMarker(lat,lon);
	this.addOverlay(marker);
}

//地図に登録する.
function MapAppendRegister(lat , lon , divObject ,divPopupObject,iconImg , animeIconImg)
{
	//アイコンの設定
	var marker = CreateIconMarker(lat,lon,iconImg,48,32,24,32);

	//アニメアイコンの設定
	var animeMarker = CreateIconMarker(lat,lon,animeIconImg,16,32,8,32);

	//通常のアイコンを登録.
	g_MyGmapObject.addOverlay(marker);
	
	//地図上でポップアップするリンクをクリックしたときの処理
	divObject.find("a.map_popup_link").click(
		function()
		{
			var point = new GLatLng(lat,lon);
			g_MyGmapObject.openInfoWindowHtml(point,divPopupObject.html());
		}
	);

	//アイコンをクリックされたとき
	GEvent.addListener(marker,"click", 
		function()
		{
			var point = new GLatLng(lat,lon);
			g_MyGmapObject.openInfoWindowHtml(point,divPopupObject.html());
		}
	);

	//アイコンにマウスが乗ったときの処理
	GEvent.addListener(marker,"mouseover", 
		function()
		{
			//情報が載っている箇所に移動する
			if (jQuery.browser.msie)
			{//IEの場合素直に表示してくれる
				$('#listflow')[0].scrollTop = divObject[0].offsetTop;
			}
			else
			{//FFの場合、スクロールバーではないけど、なぞの数字が影響してしまうので適当にずらす. だれか知っていたら教えて!.
				$('#listflow')[0].scrollTop = divObject[0].offsetTop - 70;
			}

			divObject.animate({backgroundColor: '#F2ABCA'} , 'normal').animate({backgroundColor: 'white'} , 'normal').css('background-color','');
		}
	);

	//情報のほうにマウスがやってきたら、地図のアイコンをアニメーションさせる.
	divObject.mouseover( function()
		{
			//アニメーション開始
			g_MyGmapObject.addOverlay(animeMarker);
		}
	);

	//情報の方からマウスカーソルが離れたらアニメーションをやめる
	divObject.mouseout( function ()
		{
			//アニメーション開始
			g_MyGmapObject.removeOverlay(animeMarker);
		}
	);
}


//ドラッグ可能マーカーの作成
function CreateDraggableMarker(lat,lon,title)
{
	//ドラッグ可能マーカーの作成し、地図に投影する.
	var gmarkeroptions = new Object();
	gmarkeroptions.draggable = true;
	gmarkeroptions.title = title;

	return new GMarker(new GLatLng(lat,lon),gmarkeroptions);
}

//通常のマーカーの作成
function CreateMarker(lat,lon)
{
	var point = new GLatLng(lat,lon);
	return new GMarker(point);
}

//画像マーカーの作成
function CreateIconMarker(lat,lon,iconImg,sizeW,sizeH,anchorW,anchorH)
{
	var icon = new GIcon();
	icon.image = iconImg;
	icon.iconSize = new GSize(sizeW, sizeH);
	icon.iconAnchor = new GPoint(anchorW, anchorH);

	return new GMarker(new GLatLng(lat,lon),icon);
}

function CreateMyGmapObject(gmapDIVObject)
{
	if (!GBrowserIsCompatible()) 
	{//マップのロードに失敗しました
		alert("地図の読み込みに失敗しました");
		return ;
	}

	g_MyGmapObject = new GMap2(gmapDIVObject[0]);

	//拡大縮小、衛星写真切り替えのボタンをつける
	g_MyGmapObject.addControl(new GMapTypeControl());
	g_MyGmapObject.addControl(new GLargeMapControl());
	// 小さい地図表示
//		g_MyGmapObject.addControl(new GOverviewMapControl());

//		g_MyGmapObject.addMapType(G_SATELLITE_3D_MAP);
//		g_MyGmapObject.addControl(new GHierarchicalMapTypeControl());
//		g_MyGmapObject.addControl(new GLargeMapControl());

	return g_MyGmapObject;
}
