function GeoAccess()
{
	/* public variables */
	// center
	this.CenterX;
	this.CenterY;
	// extent
	this.MaxX;
	this.MaxY;
	this.MinX;
	this.MinY;
	this.ScaleMax;
	this.ScaleMin;
	this.InitialSetting;
	// image scale setting
	this.ActiveImageMap;
	this.MapScaleSetting;

	/* private variables */
	var imageMapSettings;
	var ImageMapple			= 0x0001;
	var ImageOrtho			= 0x0002;
	var ImageDM					= 0x0004;
	var ImageKeymap			= 0x0008;
	var ImageBreath			= 0x0010;
	var ImageOrthoS39		= 0x0020;
	
	
	var MoveInterval		= 500; // between user request and ajax request.(msec)
	var moveTimerId			= 0;
	
	var retryCount = 0;
	
	var printWindow;
	
	var initialized	= false;
	var needExtentFeature = true;

	this.Initialize = function()
	{
		AjaxPro.timeoutPeriod = 100 * 1000;
		
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetInitialSetting(geoAccess.GetInitialSetting_Callback);
	}

	// initialzie callback
	this.GetInitialSetting_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{

			Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetLayerList(geoAccess.GetLayerList_Callback);
		
			Nais.Gis2006.SubSystems.Citizen15225.MapForm.InitializeSession(geoAccess.InitializeSession_Callback);
		
			// get initial setting(extents, center...)
			geoAccess.InitialSetting = resultObject;

			// get scale setting(support scales)
			geoAccess.MapScaleSetting = geoAccess.InitialSetting.MapScaleSetting;

			// get image map setting(mapple, ortho, dm, keymap, etc...)
			imageMapSettings = geoAccess.InitialSetting.ImageMapSettings;

			// set checkbox state before set ActiveImageMap
			geoAccess.SetDefaultMapImageCheckBox();
			geoAccess.ActiveImageMap = GetTargetMap(resultObject.Scale);
			
			geoAccess.CenterX = resultObject.CenterX;
			geoAccess.CenterY = resultObject.CenterY;

			geoAccess.MaxX = resultObject.MaxX;
			geoAccess.MaxY = resultObject.MaxY;
			geoAccess.MinX = resultObject.MinX;
			geoAccess.MinY = resultObject.MinY;
			
			geoAccess.ScaleMax = getMaxScale();
			geoAccess.ScaleMin = getMinScale();
			
			geoAccess.SetScaleButtonImage(geoAccess.InitialSetting.Scale);
			
			// initialize mapImage
			mapImage.Initialize();
			mapImage.MoveCenterScale(geoAccess.CenterX, geoAccess.CenterY, resultObject.Scale);
			
			mapImage.ViewMap();
//			mapImage.SetMapImage();

		}
	}

	this.InitializeSession_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			initialized = true;
			
			document.getElementById("nowloading").style.visibility = "hidden";
			document.getElementById("nowloading").style.zIndex = 0;
		
			// 起動時に座標指定の場合強調表示を表示する
			// 071119 NAIS外立さん依頼対応
			if (geoAccess.InitialSetting.IsEmphasis)
			{
				mapImage.MoveCenterEmphasis(geoAccess.InitialSetting.CenterX, geoAccess.InitialSetting.CenterY, -1, -1);
			}
		
			ShowMap(resultObject);
		}
	}
	
	this.ViewChange_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			var mapExtent = resultObject;

			if (mapExtent != null)
			{
				ShowMap(mapExtent);
			}
		}
	}
	
	function ShowMap(mapExtent)
	{
		geoAccess.CenterX = (mapExtent.max_x + mapExtent.min_x) / 2;
		geoAccess.CenterY = (mapExtent.max_y + mapExtent.min_y) / 2;
	
		if (mapImage.DragFlag == true)
		{
			return;
		}

		//Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetAddress(geoAccess.GetAddress_Callback);

		geoAccess.GetNeighborhood();

		// if all layer are hiding then don't get geongoSIS image
		if (layerTree != null)
		{
			if (layerTree.allHide() || geoAccess.ActiveImageMap.Name == "Keymap")
			{
//				document.getElementById("geoMap").src = "";
				document.getElementById("geoMap").title = "cancel";
				document.getElementById("geoMap").style.visibility = "hidden";
				return;
			}
		}
/*
		// TODO:GeognoSIS地図画像を読み込んだタイミングで表示したいので、 
		// 暫定対策として、領域画像の読込コールバックで表示を行う 
//		document.getElementById("geoMap").style.visibility = "visible";
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetMapExtent(geoAccess.GetMapExtent_Callback);
*/

		needExtentFeature = true;

		// imgのonloadイベントを利用する 
		retryCount = 0;
		document.getElementById("geoMap").src = "Render.aspx?" + geoAccess.getRenderTime();
		document.getElementById("geoMap").title = "ready";
	}

/*	
	this.GetMapExtent_Callback = function(response)
	{
		// 周囲の図形情報を取得


		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetMapExtentFeatures(geoAccess.GetExtentFeatures_Callback);

		retryCount = 0;
		document.getElementById("geoMap").src = "Render.aspx";
//		document.getElementById("geoMap").style.visibility = "visible";
	}
*/	
	this.ChangeScale = function(scale)
	{
		geoAccess.AbortRequest();
		geoAccess.ChangeImageSetting(scale, false);
	
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.SetScale(scale, geoAccess.ViewChange_Callback);
	}

	this.GetAddress_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null && resultObject != "")
		{
			document.getElementById("addressLabel").innerHTML = resultObject + "付近";
		}
		else
		{
			document.getElementById("addressLabel").innerHTML = "";
		}
	}

	this.GetNeighborhood = function()
	{
		var area = 0;
		
		document.getElementById("neighborhoodLabel").innerHTML = "<img src = 'MapForm/img/nowloading.gif' style=' MARGIN: 130px 0px 0px 65px;'>";
		
		if (document.getElementById("DispArea").checked)
		{
//			area = mapImage.PixelWidth * 2 * mapImage.PixM;
			area = -1;
		}
		else if (document.getElementById("1KM").checked)
		{
			area = document.getElementById("1KM").value;
		}
		else if (document.getElementById("5KM").checked)
		{
			area = document.getElementById("5KM").value;
		}
		else 
		{
			area = 0;
		}
		
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetNeighborhood(area, geoAccess.GetNeighborhood_Callback);
	}
	
	this.GetNeighborhood_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			document.getElementById("neighborhoodLabel").innerHTML = resultObject;
		}
	}

	this.GetAttribute_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null && resultObject != "")
		{
			var attributeDialog = new AttributeDialog(300, 300);
			attributeDialog.Show(resultObject);
		}
	}

	this.GetExtentFeatures_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			mapImage.ShowAttribute = true;
			document.getElementById("featuresMap").innerHTML = resultObject;
		}
	}
	
	this.Search = function(keyword)
	{
		document.getElementById("addressCount").innerHTML = "検索しています...";
		document.getElementById("addressList").innerHTML = "<img src = 'MapForm/img/nowloading.gif' style=' MARGIN: 110px 0px 0px 60px;'>";
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.Search(keyword, geoAccess.Search_Callback);
	}
	
	this.Search_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			document.getElementById("addressList").innerHTML = resultObject[0];
			document.getElementById("addressCount").innerHTML = resultObject[1];
		}
	}

	this.FeatureClick = function(layerId, itemId)
	{
/*	
		if (mapImage.MapMode == "" && document.getElementById("geoMap").style.visibility == "visible")
		{
			Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetAttributeFromId(layerId, itemId, geoAccess.GetAttribute_Callback);
		}
*/		
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetAttributeFromId(layerId, itemId, geoAccess.GetAttribute_Callback);
	}
/*	
	this.GetAttributeFromXY = function(x, y)
	{
		if (layerTree != null)
		{
			if (layerTree.allHide())
			{
				return;
			}
		}
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetAttribute(x, y, geoAccess.GetAttribute_Callback);
	}
*/	

	this.GetLayerList_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			// イベントの関連図け 
			var ele = document.createElement('script');
			ele.type = "text/javascript";
			ele.text = resultObject;
			document.getElementById('layerList').appendChild(ele);
			
			
			ShowLayerTree();
		}
	}
	
	this.SetLayerVisible = function(layerId, visible)
	{
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.SetLayerVisible(layerId, visible, geoAccess.ViewChange_Callback);
	}

	this.SetLayersVisible = function(layerIdArray, visible)
	{
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.SetLayersVisible(layerIdArray, visible, geoAccess.ViewChange_Callback);
	}
	
	this.MoveCenter = function(x, y)
	{
		geoAccess.AbortRequest();

		clearTimeout(moveTimerId);
		moveTimerId = setTimeout("geoAccess.MoveCenterRequest('" + x + "','" + y + "')", MoveInterval);
	}
	
	this.JumpItem = function(x, y, layerId, featureId)
	{
		geoAccess.AbortRequest();

		// visible layer
		if (!layerTree.getLayerVisible(layerId))
		{
			layerTree.setLayerVisible(layerId, true);
			Nais.Gis2006.SubSystems.Citizen15225.MapForm.SetLayerVisible(layerId, true, function dummy(){});
		}

		clearTimeout(moveTimerId);
		moveTimerId = setTimeout("geoAccess.MoveCenterRequest('" + x + "','" + y + "')", MoveInterval);
	}
	
	this.MoveCenterRequest = function(x, y)
	{
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.ChangeView(x, y, -1, geoAccess.ActiveImageMap, geoAccess.ViewChange_Callback);
	}

	this.MoveCenterScale = function(x, y, scale)
	{
		geoAccess.AbortRequest();
		
		clearTimeout(moveTimerId);
		moveTimerId = setTimeout("geoAccess.MoveCenterScaleRequest('" + x + "','" + y + "','" + scale + "')", MoveInterval);
	}

	this.JumpItemScale = function(x, y, scale, layerId, featureId)
	{
		geoAccess.AbortRequest();

		// visible layer
		if (!layerTree.getLayerVisible(layerId))
		{
			layerTree.setLayerVisible(layerId, true);
			Nais.Gis2006.SubSystems.Citizen15225.MapForm.SetLayerVisible(layerId, true, function dummy(){});
		}

		clearTimeout(moveTimerId);
		moveTimerId = setTimeout("geoAccess.MoveCenterScaleRequest('" + x + "','" + y + "','" + scale + "')", MoveInterval);
	}
	
	this.MoveCenterScaleRequest = function(x, y, scale)
	{
		geoAccess.ChangeImageSetting(scale, false);
	
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.ChangeView(x, y, scale, geoAccess.ActiveImageMap, geoAccess.ViewChange_Callback);
	}

	this.Print = function()
	{
		document.getElementById("PrintSettingWin").style.visibility = "hidden";
		printWindow = window.open("printing.html","printing","top=" + (screen.height - 350) / 2 + ",left=" + (screen.width - 350) / 2 + ",width=350,height=370,status=no,scrollbars=no,directories=no,menubar=no,resizable=no,toolbar=no");
//		printWindow = window.open('printing.html', '_blank', 'width=400 height=400');
//		printWindow = window.open('printing.html', '_blank');

		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetEmptyPrintInformation(geoAccess.GetEmptyPrintInformation_Callback);
	}
	
	this.GetEmptyPrintInformation_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			var printInfo = resultObject;
			
			if (document.getElementById("PaperSizeA4").checked)
			{
				printInfo.PaperSize = document.getElementById("PaperSizeA4").value;
			}
			else if (document.getElementById("PaperSizeA3").checked)
			{
				printInfo.PaperSize = document.getElementById("PaperSizeA3").value;
			}
			else
			{
				printInfo.PaperSize = document.getElementById("PaperSizeB5").value;
			}
			
			if (document.getElementById("vertical").checked)
			{
				printInfo.Orientation = 1;
			}
			else
			{
				printInfo.Orientation = 0;
			}
			
			
			printInfo.MeasureItem = createMeasureItem(printInfo.MeasureItem);
			
//			Nais.Gis2006.SubSystems.Citizen15225.MapForm.StartPrint(printInfo, geoAccess.Print_Callback);
			Nais.Gis2006.SubSystems.Citizen15225.MapForm.SetPrintInformation(printInfo, geoAccess.SetPrintInformation_Callback);

		}
	
	}
/*	
	this.Print_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			adobeReader = window.open(resultObject, '_blank', 'resizable=yes, toolbar=yes, menubar=yes');
		}
		printWindow.close();
	}
*/
	this.SetPrintInformation_Callback = function(response)
	{
		printWindow.close();
		printWindow = null;
		window.open('PrintForm.aspx', '_blank', "top=" + (screen.height - 800) / 2 + ",left=" + (screen.width - 800) / 2 + ",resizable=yes, toolbar=yes, menubar=yes,scrollbars=yes,height=800,width=800");
	}
	
/*	
	this.MeasureLine = function(points)
	{
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.MeasureLine(points, geoAccess.MeasureLine_Callback);
	}

	this.MeasureLine_Callback = function(response)
	{
		if (response.value != null)
		{
			document.getElementById("MeasureResult").innerHTML = Math.round(response.value) + "ｍ";
		}
	}

	this.MeasureArea = function(points)
	{
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.MeasureArea(points, geoAccess.MeasureArea_Callback);
	}

	this.MeasureArea_Callback = function(response)
	{
		if (response.value != null)
		{
			document.getElementById("MeasureResult").innerHTML = Math.round(response.value) + "㎡";
		}
	}
*/	

	this.ChangeMapImage = function(id)
	{
		
		
		var imagesrc = "MapForm/img/" + id;
		
	
		if (id == "DM")
		{
			document.getElementById(id).checked = !document.getElementById(id).checked;
			if (document.getElementById(id).checked)
			{
				imagesrc += "_on";
			}
			imagesrc += ".gif";
			
			document.getElementById(id + 'Image').src = imagesrc;
		}

		// 移動直後に地図を切り替えると、移動もキャンセルされてしまう

//		geoAccess.AbortRequest();

		geoAccess.SetActiveImageMap(mapImage.Scale);
		geoAccess.ChangeImageSetting(mapImage.Scale, true);
		
		
		// copyright制御 Mappleが表示されていない場合(c)2007 Shobunshaは表示しない
/*
		if (document.getElementById("Mapple").checked)
		{
			document.getElementById("copyright").innerHTML = "この地図の作成に当たっては、国土地理院長の承認を得て、同院発行の数値地図25000(空間データ基盤）及び数値地図2500（空間データ基盤）を使用したものである。(承認番号　平18総使、第544号)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(c)2008 Uonuma-City All rights reserved";
		}
		else
		{
			document.getElementById("copyright").innerHTML = "この地図の作成に当たっては、国土地理院長の承認を得て、同院発行の数値地図25000(空間データ基盤）及び数値地図2500（空間データ基盤）を使用したものである。(承認番号　平18総使、第544号)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(c)2008 Uonuma-City All rights reserved";
		}
*/		
		mapImage.ViewMap();
//		mapImage.SetMapImage();
	}
	
	this.ChangeImageSetting = function(scale, changeMap)
	{
		geoAccess.SetScaleButtonImage(scale);
		
		if (changeMap)
		{
			Nais.Gis2006.SubSystems.Citizen15225.MapForm.ChangeImageMap(geoAccess.ActiveImageMap, geoAccess.ChangeImageSetting_Callback);
		}
	}
	
	this.ChangeImageSetting_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			var mapExtent = resultObject;

			// 表示するべき図形が無ければ、以降の処理(図GeognoSIS画像表示)を行わない 
			if (layerTree != null)
			{
				if (layerTree.allHide() || geoAccess.ActiveImageMap.Name == "Keymap")
				{
					return;
				}
			}

			retryCount = 0;
			document.getElementById("geoMap").src = "Render.aspx?" + geoAccess.getRenderTime();
			document.getElementById("geoMap").title = "ready";
		}

	}
	
	//コンテンツ情報取得


	this.GetContents = function(layerKey, startCount, endCount)
	{
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetContentsHtml(layerKey, startCount, endCount, geoAccess.GetContents_Callback);
	}
	
	this.GetContents_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
//			debug.WriteLine(resultObject);
			document.getElementById("contentshtml").innerHTML = resultObject;
			document.getElementById("body").scrollTop = 0;
		}
	}
	
	
	// 対象背景図取得 
	function GetTargetMap(scale)
	{
		var mapType = 0x0000;
		var targetSetting;
		
		if (document.getElementById("Ortho").checked)
		{
			mapType |= ImageOrtho;
		}
		if (document.getElementById("OrthoS39").checked)
		{
			mapType |= ImageOrthoS39;
		}
		if (document.getElementById("Mapple").checked)
		{
//			mapType |= ImageMapple;
				mapType |= ImageBreath;
		}
		if (document.getElementById("DM").checked)
		{
			mapType |= ImageDM;
		}
	
		// 対象の画像配信設定を取得します。 
		for(i = 0; i < imageMapSettings.length; i++)
		{
			if (geoAccess.IsTargetScale(imageMapSettings[i], scale))
			{
				// 完全に組み合わせが一致するものを取得 
				if (imageMapSettings[i].MapImageTypes == mapType)
				{
					targetSetting = imageMapSettings[i];
					break;
				}
			}
		}
		if (targetSetting == null)
		{
			mapType |= ImageKeymap;
			
			// 一致するものが無い場合、タイプが含まれるものを取得します 
			for(i = imageMapSettings.length - 1; i >= 0 ; i--)
			{
				if (geoAccess.IsTargetScale(imageMapSettings[i], scale))
				{
					// 表示するタイプが含まれるもの、かつ、チェックの付いていないタイプを含まないもの 
					if (((imageMapSettings[i].MapImageTypes & mapType) != 0)
					&& (imageMapSettings[i].MapImageTypes & ~mapType) == 0)
					{
						targetSetting = imageMapSettings[i];
						break;
					}
				}
			}
		}
		// if target setting is nothing then use dummy scale
		if (targetSetting == null)
		{
			targetSetting = imageMapSettings[imageMapSettings.length - 1];
		}
		
		return targetSetting;
	}	
	
	this.IsTargetScale = function(imageMapSetting, scale)
	{
		var result = false;

		if (imageMapSetting.TargetScales.length < 1)
		{
			return false;
		}

		if (imageMapSetting.TargetScales[0] <= scale && scale <= imageMapSetting.TargetScales[imageMapSetting.TargetScales.length - 1])
		{
			result = true;
		}
		if (imageMapSetting.TargetScales[0] >= scale && scale >= imageMapSetting.TargetScales[imageMapSetting.TargetScales.length - 1])
		{
			result = true;
		}

		return result;
	}

	this.SetDefaultMapImageCheckBox = function()
	{
		var orthoName = "Ortho";
		var orthoS39Name = "OrthoS39";
		var orthoNon = "OrthoNon";
		
		var dmName = "DM";
		var mappleName = "Mapple";
		var imagesrc = ""
	
//		imagesrc = "MapForm/img/" + orthoName;
//		document.getElementById(orthoName).checked = ((geoAccess.InitialSetting.DefaultImageMap.MapImageTypes & ImageOrtho) == ImageOrtho);
//		if (document.getElementById(orthoName).checked)
//		{
//				imagesrc += "_on";
//		}
//		imagesrc += ".gif";
//		document.getElementById(orthoName+"Image").src = imagesrc;
	
		
		document.getElementById(orthoName).checked = ((geoAccess.InitialSetting.DefaultImageMap.MapImageTypes & ImageOrtho) == ImageOrtho);	
		document.getElementById(orthoS39Name).checked = ((geoAccess.InitialSetting.DefaultImageMap.MapImageTypes & ImageOrthoS39) == ImageOrthoS39);
		document.getElementById(orthoNon).checked = false;
		
		if (!document.getElementById(orthoName).checked && !document.getElementById(orthoS39Name).checked)
		{
			document.getElementById(orthoNon).checked = true;
		}
		
		imagesrc = "MapForm/img/" + dmName;
		document.getElementById(dmName).checked = ((geoAccess.InitialSetting.DefaultImageMap.MapImageTypes & ImageDM) == ImageDM);
		if (document.getElementById(dmName).checked)
		{
				imagesrc += "_on";
		}
		imagesrc += ".gif";
		document.getElementById(dmName + "Image").src = imagesrc;
		
		
		imagesrc = "MapForm/img/" + mappleName;
		//document.getElementById(mappleName).checked = ((geoAccess.InitialSetting.DefaultImageMap.MapImageTypes & ImageMapple) == ImageMapple);
		document.getElementById(mappleName).checked = ((geoAccess.InitialSetting.DefaultImageMap.MapImageTypes & ImageBreath) == ImageBreath);
		if (document.getElementById(mappleName).checked)
		{
				imagesrc += "_on";
		}
		imagesrc += ".gif";
		document.getElementById(mappleName + "Image").src = imagesrc;
		
		// copyright制御 Mappleが表示されていない場合(c)2007 Shobunshaは表示しない.
/*		
		if (document.getElementById("Mapple").checked)
		{
			document.getElementById("copyright").innerHTML = "この地図の作成に当たっては、国土地理院長の承認を得て、同院発行の数値地図25000(空間データ基盤）及び数値地図2500（空間データ基盤）を使用したものである。(承認番号　平18総使、第544号)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(c)2008 Uonuma-City All rights reserved";
		}
		else
		{
			document.getElementById("copyright").innerHTML = "この地図の作成に当たっては、国土地理院長の承認を得て、同院発行の数値地図25000(空間データ基盤）及び数値地図2500（空間データ基盤）を使用したものである。(承認番号　平18総使、第544号)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(c)2008 Uonuma-City All rights reserved";
		}
*/		
	}
	
	this.AbortRequest = function()
	{
		// abort last request(except initialize)
		if (initialized)
		{
			AjaxPro.queue.abort();

			// GeognoSIS画像を描画しようとしていたら、それも止める
			document.getElementById("geoMap").style.visibility = "hidden";
//			document.getElementById("geoMap").src = "";
			document.getElementById("geoMap").title = "cancel";
		}
		
		// close printing window.
		if (printWindow != null)
		{
			printWindow.close();
		}
	}
	
	this.OnRenderAbort = function()
	{
		// 描画中に他の操作を行うと、Renderが中断される場合がある。



		// そのため、中断時に再設定を行う 
		if (retryCount < 10)
		{
			document.getElementById("geoMap").src = "Render.aspx?" + geoAccess.getRenderTime();
			document.getElementById("geoMap").title = "ready";
		}
		retryCount++;
	}

	this.OnRenderLoad = function(e)
	{
//		if (document.getElementById("geoMap").src != "")
//		if (e.srcElement.readyState == "complete")
		if (document.getElementById("geoMap").title == "ready")
		{
			document.getElementById("geoMap").style.visibility = "visible";

			if (needExtentFeature)
			{
				// get features clickable map
				Nais.Gis2006.SubSystems.Citizen15225.MapForm.GetMapExtentFeatures(geoAccess.GetExtentFeatures_Callback);
				needExtentFeature = false;
			}
		}
	}
	
	this.SetActiveImageMap = function(scale)
	{
		geoAccess.ActiveImageMap = GetTargetMap(scale);
	}
	
	this.SetScaleButtonImage = function(activeScale)
	{
		var mapType = 0x0000;
		var i = 0;
		var j = 0;
		
		if (document.getElementById("Ortho").checked)
		{
			mapType |= ImageOrtho;
		}
		if (document.getElementById("OrthoS39").checked)
		{
			mapType |= ImageOrthoS39;
		}
		if (document.getElementById("Mapple").checked)
		{
//			mapType |= ImageMapple;
				mapType |= ImageBreath;
		}
		if (document.getElementById("DM").checked)
		{
			mapType |= ImageDM;
		}
		
		// change button image from support scale
		for (i = 0; i < geoAccess.MapScaleSetting.ScaleList.length; i++)
		{
			var isSupport = false;

			// check support scale
			for(j = 0; j < imageMapSettings.length; j++)
			{
				if ((imageMapSettings[j].MapImageTypes & mapType) != 0)
				{
					if (geoAccess.IsTargetScale(imageMapSettings[j], 
						geoAccess.MapScaleSetting.ScaleList[i].Scale))
					{
						isSupport = true;
						break;
					}
				}
			}
			
			// active scale is fixed image
			if (activeScale == geoAccess.MapScaleSetting.ScaleList[i].Scale)
			{
				if (isSupport)
				{
					document.getElementById("scale" + i).src = "MapForm/img/reach_select.gif";
				}
				else
				{
					document.getElementById("scale" + i).src = "MapForm/img/reach_disable_select.gif";
				}
			}
			else
			{
				if (isSupport)
				{
					document.getElementById("scale" + i).src = "MapForm/img/reach.gif";
				}
				else
				{
					document.getElementById("scale" + i).src = "MapForm/img/reach_disable.gif";
				}
			}
		}
	}

	
	function getMaxScale()
	{
		var max = 0;
		for (i = 0; i < geoAccess.MapScaleSetting.ScaleList.length; i++)
		{
			if (geoAccess.MapScaleSetting.ScaleList[i].Scale > max)
			{
				max = geoAccess.MapScaleSetting.ScaleList[i].Scale;
			}
		}
		
		return max;
	}

	function getMinScale()
	{
		var min = 0;
		for (i = 0; i < geoAccess.MapScaleSetting.ScaleList.length; i++)
		{
			if (geoAccess.MapScaleSetting.ScaleList[i].Scale < min)
			{
				min = geoAccess.MapScaleSetting.ScaleList[i].Scale;
			}
		}
		
		return min;
	}
	
	this.getRenderTime = function()
	{
		var d = new Date();
		var hh = (d.getHours()).d(2);
		var min = (d.getMinutes()).d(2);
		var sec = (d.getSeconds()).d(2);
		var msec = (d.getMilliseconds()).d(3);
	    
		return hh.toString(10) +  min.toString(10) + sec.toString(10) + msec.toString(10);
	}
	
	function getResultObject(response)
	{
		var ajaxResult;
		
		if (response == null)
		{
			return null;
		}
		
		if (response.value == null)
		{
			return null;
		}
		ajaxResult = response.value;
		
		// 0:success 1:error
		if (ajaxResult.ResultCode == 1)
		{
			if (ajaxResult.Message.length > 0)
			{
				alert(ajaxResult.Message);
			}
			else
			{
				alert("セッションが切断された為、正しく処理が行われません。\nブラウザの更新を行い、再度表示してください。");
			}
			return null;
		}
		return ajaxResult.ResultObject;
	}
	
	function createMeasureItem(measureItem)
	{
		if (measureFigure.Result != 0)
		{
			var pointText;
			var i = 0;
			
			pointText = "";
			for (i = 0; i < measureFigure.X.length; i++)
			{
				pointText += ",";
				pointText += measureFigure.X[i];
				pointText += ",";
				pointText += measureFigure.Y[i];
			}
			
			// 先頭の「,」以外を取得


			measureItem.PointsText = pointText.substring(1);
			
			if (measureFigure.Mode == 0)
			{
				measureItem.Text = measureFigure.Result + "m";
				measureItem.Kind = "Line";
			}
			else
			{
				measureItem.Text = measureFigure.Result + "㎡";
				measureItem.Kind = "Area";
			}
			measureItem.Result = measureFigure.Result;
		}
		
		return measureItem;
	}
	
	// 表示可能なスケールを取得します.
	this.GetVisibleScaleFromList = function(checkScale, maxScale, minScale, scaleSettings)
	{
		var scale = 0;

		if (scaleSettings.length > 0)
		{
			// 指定されたスケールが最大値より大きい場合.
			if (maxScale != 0 && maxScale < checkScale)
			{
				for (var i = scaleSettings.length - 1; i >= 0; i--)
				{
					if (checkScale >= parseInt(scaleSettings[i].Scale) && maxScale >= parseInt(scaleSettings[i].Scale))
					{
						scale = parseInt(scaleSettings[i].Scale);
						break;
					}
				}
			}
			// 指定されたスケールが最小値より小さいの場合.
			if (minScale != 0 && minScale > checkScale)
			{
				for (var i = 0; i < scaleSettings.length; i++)
				{
					if (checkScale <= parseInt(scaleSettings[i].Scale) && minScale <= parseInt(scaleSettings[i].Scale))
					{
						scale = parseInt(scaleSettings[i].Scale);
						break;
					}
				}
			}
		}
		return scale;
	}
	
	this.GetKeitaiLink = function(x, y)
	{
		Nais.Gis2006.SubSystems.Citizen15225.MapForm.CreateKeitaiLink(x, y, geoAccess.GetKeitaiLink_Callback);
	}
	
	this.GetKeitaiLink_Callback = function(response)
	{
		var resultObject = getResultObject(response);
		if (resultObject != null)
		{
			document.getElementById("keitaiHref").href = resultObject;
		}
	}
}
