// 地図・GeognoSis連動制御クラス.
function ViewController()
{
	// 中心移動.
	// x					x座標(m).
	// y					y座標(m).
	this.MoveCenter = function(x, y)
	{
		mapImage.NeighborhoodMouseOut();
		mapImage.HiddenEmphasis();
//		debug.WriteLine("ViewController.MoveCenter(" + x + "," + y);
		//クリッカブルマップを破棄.
//		document.getElementById("featuresMap").innerHTML = "";
		document.getElementById("geoMap").style.visibility = "hidden";
//		document.getElementById("geoMap").src = "";
		document.getElementById("geoMap").title = "cancel";
		mapImage.MoveCenter(x, y);
		// ChangeScaleの絡みでMoveCenterからMoveCenterScaleに変更.
		//geoAccess.MoveCenter(x, y);
		geoAccess.MoveCenterScale(x, y, mapImage.Scale);
	}
	
	// スケール変更.
	// scale			スケール.
	this.ChangeScale = function(scale)
	{
		
		if (mapImage.Scale == scale)
		{
			return;
		}
		
		mapImage.NeighborhoodMouseOut();
		mapImage.HiddenEmphasis();
		
		//クリッカブルマップを破棄.
//		document.getElementById("featuresMap").innerHTML = "";
		document.getElementById("geoMap").style.visibility = "hidden";
//		document.getElementById("geoMap").src = "";
		document.getElementById("geoMap").title = "cancel";

		// スケールに応じた背景図を選択.
		geoAccess.SetActiveImageMap(scale);
		// 配信画像変更.
		mapImage.ChangeScale(scale);
		// GeognoSIS画像変更(通信が詰まる場合があるので後に呼ぶ)
		// ここでChangeScaleをかけるとFireFoxで正しい動作をしない
		// mapImage.ChangeScaleの中でviewController.MoveCenter
		// を呼んでいるので、そちらでviewController.MoveCenter
		// 内でgeoAccess.MoveCenterをgeoAccess.MoveCenterScaleすること
		// により対応する。
		//geoAccess.ChangeScale(scale);

		measureFigure.Redraw();
	}
	
	// 中央表示(スケール指定).
	// x					x座標(m).
	// y					y座標(m).
	// scale			スケール.
	this.MoveCenterScale = function(x, y, scale)
	{
	
		mapImage.NeighborhoodMouseOut();
		mapImage.HiddenEmphasis();
		//クリッカブルマップを破棄.
//		document.getElementById("featuresMap").innerHTML = "";
		document.getElementById("geoMap").style.visibility = "hidden";
//		document.getElementById("geoMap").src = "";
		document.getElementById("geoMap").title = "cancel";
		// スケールに応じた背景図を選択.
		geoAccess.SetActiveImageMap(scale);
		// 配信画像変更.
		mapImage.MoveCenterScale(x, y, scale);
		// GeognoSIS画像変更(通信が詰まる場合があるので後に呼ぶ).
		geoAccess.MoveCenterScale(x, y, scale);

		measureFigure.Redraw();
	}

	// 指定した座標の指定したアイテムに強調表示を行います。
	// x					x座標(m).
	// y					y座標(m).
	// layerId		レイヤID.
	// featureId	フィーチャID.
	this.JumpItem = function(x, y, layerId, featureId)
	{
		var layer = null;
		var scale = 0;
		
		layer = layerTree.getLayer(layerId);
		
		if (layer != null)
		{
			scale = geoAccess.GetVisibleScaleFromList(mapImage.Scale, layer.getMaxScale(), layer.getMinScale(), geoAccess.MapScaleSetting.ScaleList);
			if (scale != 0)
			{
				viewController.JumpItemScale(x, y, scale, layerId, featureId);
				return;
			}
		}
	
		mapImage.NeighborhoodMouseOut();
		mapImage.HiddenEmphasis();
		
		document.getElementById("geoMap").style.visibility = "hidden";
//		document.getElementById("geoMap").src = "";
		document.getElementById("geoMap").title = "cancel";

		mapImage.MoveCenter(x, y);
		mapImage.MoveCenterEmphasis(x, y, layerId, featureId);
		
		geoAccess.JumpItem(x, y, layerId, featureId);

		measureFigure.Redraw();
	}

	// 指定した座標の指定したスケールの指定したアイテムに強調表示を行います。
	// x					x座標(m).
	// y					y座標(m).
	// scale			スケール.
	// layerId		レイヤID.
	// featureId	フィーチャID.
	this.JumpItemScale = function(x, y, scale, layerId, featureId)
	{
	
		mapImage.NeighborhoodMouseOut();
		mapImage.HiddenEmphasis();
		
		document.getElementById("geoMap").style.visibility = "hidden";
//		document.getElementById("geoMap").src = "";
		document.getElementById("geoMap").title = "cancel";

		geoAccess.SetActiveImageMap(scale);
		mapImage.MoveCenterScale(x, y, scale);
		mapImage.MoveCenterEmphasis(x, y, layerId, featureId);
		
		geoAccess.JumpItemScale(x, y, scale, layerId, featureId);

		measureFigure.Redraw();
	}

	// 指定された座標を中心に一段階拡大する.
  // x					x座標(m).
	// y					y座標(m).
	this.MoveCenterZoom = function(x, y)
	{
		var newScale = 0;
		
		mapImage.NeighborhoodMouseOut();
		mapImage.HiddenEmphasis();
		
		for(var i = 1; i < geoAccess.MapScaleSetting.ScaleList.length; i++)
		{
			if (geoAccess.MapScaleSetting.ScaleList[i].Scale == mapImage.Scale)
			{
				newScale = geoAccess.MapScaleSetting.ScaleList[i - 1].Scale;
				break;
			}
		}
		if (newScale > 0)
		{
			viewController.MoveCenterScale(x, y, newScale);
			// ここでスケールボタンの設定をしないと、直後にマウス移動された場合正しく表示されない
			geoAccess.SetScaleButtonImage(newScale);
		}
		else
		{
			viewController.MoveCenter(x, y);
		}
	}

	// 拡大.
	this.ZoomIn = function()
	{
		for(var i = 1; i < geoAccess.MapScaleSetting.ScaleList.length; i++)
		{
			if (geoAccess.MapScaleSetting.ScaleList[i].Scale == mapImage.Scale)
			{
				viewController.ChangeScaleIndex(i - 1);
				break;
			}
		}	
	}	

	// 縮小.
	this.ZoomOut = function()
	{
		for(var i = 0; i < geoAccess.MapScaleSetting.ScaleList.length - 1; i++)
		{
			if (geoAccess.MapScaleSetting.ScaleList[i].Scale == mapImage.Scale)
			{
				viewController.ChangeScaleIndex(i + 1);
				break;
			}
		}	
	}
	
	// 指定したindexのスケールに変更する.
	// index					インデックス.
	this.ChangeScaleIndex = function(index)
	{
		var scale;
		
		if (index < geoAccess.MapScaleSetting.ScaleList.length)
		{
			scale = geoAccess.MapScaleSetting.ScaleList[index].Scale;
				
			viewController.ChangeScale(scale);
		}
	}
}

