﻿/****************************************************/
/*													*/
/*	マップ制御										*/
/*													*/
/****************************************************/

/*--------------------------------------------------*/
/*	共通変数										*/
/*--------------------------------------------------*/
var regionDataList;					//地域データ
var communityDataList;				//市町村データ
var companyDataList;				//企業データ

var MAPObject;						//マップオブジェクト
var MAPStatus;						//マップステータス(1:市町村マップ 2:企業マップ)
var selectedregionID;				//表示地域ID
var selectedcommunityID;			//表示市町村ID
var largeMapControl;				//移動縮尺
var overviewMapControl;				//大局地図
var infowindowObject; 				//情報ウィンドウ表示判定用

var clientID;						//クライアントID

/*--------------------------------------------------*/
/*	初期表示										*/
/*--------------------------------------------------*/
function Initialize(regionID)
{
	if (GBrowserIsCompatible())
	{
		//データ取得
		regionDataList = GetRegionDataList();
		communityDataList = {};
		companyDataList = {};

		//マップ表示
		MAPObject = new GMap2($("divSeizouMap"));
		var communityMapScale = parseInt($(clientID + "hdnCommunityMapScale").value);	//市町村マップ縮尺

		if (regionID == "1")
		{
			MAPObject.setCenter(new GLatLng(regionDataList[regionID].dispLat, regionDataList[regionID].dispLng), communityMapScale + 1);
		}
		else
		{
			MAPObject.setCenter(new GLatLng(regionDataList[regionID].dispLat, regionDataList[regionID].dispLng), communityMapScale);
		}

		//マップステータス変更
		MAPStatus = 1;

		//表示地域IDを保管
		selectedregionID = regionID;
		//表示市町村IDを初期化
		selectedcommunityID = null;
		
		//業種情報取得
		businessDataList = GetBusinessDataList();

		var checkedBusiness;
		//var checkedBusiness2;
		var checkedCapital;
		var checkedEmployee;

		//業種全選択
		for (i in businessDataList)
		{
			if (checkedBusiness == null)
			{
				checkedBusiness = businessDataList[i];
			}
			else
			{
				checkedBusiness += "," + businessDataList[i];
			}
		}

		//資本金別全選択
		checkedCapital = "1,1,1,1";

		//従業員数別全選択
		checkedEmployee = "1,1,1,1";

		//インジケータ開始
		indi.indi_start(1);

		//地域情報設定
		SetRegionDataList(checkedBusiness, checkedCapital, checkedEmployee);
	}
}

/*--------------------------------------------------*/
/*	市町村マップ表示								*/
/*--------------------------------------------------*/
function ShowCommunityMap(regionID)
{
	//マップ表示
	var communityMapScale = parseInt($(clientID + "hdnCommunityMapScale").value); //市町村マップ縮尺
	
	if (regionID == "1")
	{
		MAPObject.setCenter(new GLatLng(regionDataList[regionID].dispLat, regionDataList[regionID].dispLng), communityMapScale + 1);
	}
	else
	{
		MAPObject.setCenter(new GLatLng(regionDataList[regionID].dispLat, regionDataList[regionID].dispLng), communityMapScale);
	}

	//選択した地域の市町村情報を取得
	var communityMapData = communityDataList[regionID];

	//リンク強調表示
	$("lnkRegionLink" + selectedregionID).style.fontSize = "medium";
	$("lnkRegionLink" + regionID).style.fontSize = "x-large";
	if (selectedcommunityID != null)
	{
		$("lnkCommunityLink" + selectedcommunityID).style.fontSize = "medium";
	}

	//リンク表示切替
	$("trRegion" + selectedregionID).style.display = "none";
	$("trRegion" + regionID).style.display = "block";

	//表示マーカー削除
	MAPObject.clearOverlays();

	//市町村マーカー表示
	for (id in communityMapData)
	{
		ShowCommunityMarker(communityMapData[id]);
	}

	//マップコントロール(企業マップから表示した場合のみ削除)
	if (MAPStatus == 2)
	{
		MAPObject.removeControl(largeMapControl);
		MAPObject.removeControl(overviewMapControl);
	}

	//凡例を表示
	$("divHanrei").style.display = "block";
	$("divHanreiHaikei").style.display = "block";

	//マップステータス変更
	MAPStatus = 1;

	//表示地域IDを保管
	selectedregionID = regionID;
	//表示市町村IDを初期化
	selectedcommunityID = null;
}

/*--------------------------------------------------*/
/*	市町村マーカー表示								*/
/*--------------------------------------------------*/
function ShowCommunityMarker(markerElement)
{
	//表示件数取得
	var countLow = parseInt($(clientID + "hdnSearchCountLow").value);
	var countMiddle = parseInt($(clientID + "hdnSearchCountMiddle").value);
	var countHigh = parseInt($(clientID + "hdnSearchCountHigh").value);
	
	//アイコン作成
	var iconObject = new GIcon();

	if (markerElement.count == 0)
	{
		iconObject.iconSize = new GSize(20, 20);
		iconObject.iconAnchor = new GPoint(10, 10);
		iconObject.infoWindowAnchor = new GPoint(10, -10);
		iconObject.image = "../images/m_icon/m_gray.gif";
	}
	else if (markerElement.count <= countLow) {
		iconObject.iconSize = new GSize(25, 25);
		iconObject.iconAnchor = new GPoint(12, 12);
		iconObject.infoWindowAnchor = new GPoint(12, -10);
		iconObject.image = "../images/m_icon/m_yellow.gif";
	}
	else if (countLow < markerElement.count && markerElement.count <= countMiddle) {
		iconObject.iconSize = new GSize(30, 30);
		iconObject.iconAnchor = new GPoint(15, 15);
		iconObject.infoWindowAnchor = new GPoint(15, -10);
		iconObject.image = "../images/m_icon/m_green.gif";
	}
	else if (countMiddle < markerElement.count && markerElement.count <= countHigh) {
		iconObject.iconSize = new GSize(35, 35);
		iconObject.iconAnchor = new GPoint(17, 17);
		iconObject.infoWindowAnchor = new GPoint(17, -10);
		iconObject.image = "../images/m_icon/m_blue.gif";
	}
	else if (countHigh < markerElement.count) {
		iconObject.iconSize = new GSize(40, 40);
		iconObject.iconAnchor = new GPoint(20, 20);
		iconObject.infoWindowAnchor = new GPoint(20, -10);
		iconObject.image = "../images/m_icon/m_red.gif";
	}

	//マーカー作成
	var markerObject = new GMarker(new GLatLng(markerElement.lat, markerElement.lng), { icon: iconObject });

	//マーカーイベント
	GEvent.addListener(markerObject, 'mouseover', function() {
		markerObject.openInfoWindowHtml(GetInfoWindowHtmlString(markerElement.community, markerElement.count));
	});
	GEvent.addListener(markerObject, 'mouseout', function() {
		markerObject.closeInfoWindow();
	});
	GEvent.addListener(markerObject, 'click', function() {
		ShowCompanyMap(markerElement.ID);
	});

	//マーカー表示
	MAPObject.addOverlay(markerObject);
}

/*--------------------------------------------------*/
/*	吹き出し表示									*/
/*--------------------------------------------------*/
function OpenInfoWindow(communityID)
{
	if (MAPStatus == 1)
	{
		//吹き出し作成
		var lat = communityDataList[selectedregionID][communityID].lat;
		var lng = communityDataList[selectedregionID][communityID].lng;
		var community = communityDataList[selectedregionID][communityID].community;
		var count = communityDataList[selectedregionID][communityID].count;

		MAPObject.openInfoWindowHtml(new GLatLng(lat, lng), GetInfoWindowHtmlString(community, count));
	}
}

/*--------------------------------------------------*/
/*	吹き出し非表示									*/
/*--------------------------------------------------*/
function CloseInfoWindow(communityID)
{
	if (MAPStatus == 1)
	{
		MAPObject.closeInfoWindow();
	}
}

/*--------------------------------------------------*/
/*	吹き出し内容作成								*/
/*--------------------------------------------------*/
function GetInfoWindowHtmlString(community, count)
{
	var htmlString = "<table>";
	htmlString += "<tr><td style=\"padding:10px 0 0 0;\"><span style=\"font-size:medium; color:#008000;\">【市町村別登録状況】</span></td></tr>";
	htmlString += "<tr><td style=\"padding:5px 0 0 0;\">";
	htmlString += "<span style=\"padding:0 0 0 10px; font-size:medium;\"><img alt=\"\" src=\"../images/icon/listbullet.gif\" />" + community + "</span>";
	htmlString += "<span style=\"padding:0 0 0 20px; font-size:medium; color:#008000;\">" + count + "件</span>";
	htmlString + "</td></tr>";
	htmlString += "</table>";

	return htmlString;
}

/*--------------------------------------------------*/
/*	企業マップ表示									*/
/*--------------------------------------------------*/
function ShowCompanyMap(communityID)
{
	//マップ表示
	var lat = communityDataList[selectedregionID][communityID].dispLat;		//緯度
	var lng = communityDataList[selectedregionID][communityID].dispLng;		//経度
	var companyMapScale = parseInt($(clientID + "hdnCompanyMapScale").value); 		//企業マップ縮尺
	MAPObject.setCenter(new GLatLng(lat, lng), companyMapScale);

	//選択した市町村の企業情報を取得
	var companyMapData = companyDataList[communityID];

	//リンク強調表示
	if (selectedcommunityID == null)
	{
		$("lnkCommunityLink" + communityID).style.fontSize = "x-large";
	}
	else
	{
		$("lnkCommunityLink" + selectedcommunityID).style.fontSize = "medium";
		$("lnkCommunityLink" + communityID).style.fontSize = "x-large";
	}

	//表示マーカー削除
	MAPObject.clearOverlays();

	//企業マーカー表示
	for (id in companyMapData)
	{
		ShowCompanyMarker(companyMapData[id]);
	}

	//マップコントロール(市町村マップから表示した場合のみ表示)
	if (MAPStatus == 1)
	{
		largeMapControl = new GLargeMapControl();
		overviewMapControl = new GOverviewMapControl();
		MAPObject.addControl(largeMapControl);
		MAPObject.addControl(overviewMapControl);
	}

	//凡例を非表示
	$("divHanrei").style.display = "none";
	$("divHanreiHaikei").style.display = "none";

	//マップステータス変更
	MAPStatus = 2;

	//表示地域IDを保管
	selectedcommunityID = communityID;
}

/*--------------------------------------------------*/
/*	企業マーカー表示								*/
/*--------------------------------------------------*/
function ShowCompanyMarker(markerElement)
{
	//アイコン作成
	var iconObject = new GIcon();
	iconObject.iconSize = new GSize(30, 30);
	iconObject.iconAnchor = new GPoint(15, 15);
	iconObject.infoWindowAnchor = new GPoint(15, -10);

	if (markerElement.icontype == "1") {
		iconObject.image = "../images/m_icon/" + markerElement.businessID + ".gif";
	}
	else {
		if (markerElement.businessID2) {
			iconObject.image = "../images/m_icon/" + markerElement.businessID2 + ".gif";
		}
	}

	//マーカー作成
	var markerObject = new GMarker(new GLatLng(markerElement.lat, markerElement.lng), { icon: iconObject });

	//吹き出し作成
	var htmlString = "<table style=\"width:350px;\">";
	htmlString += "<tr>";
	htmlString += "<td style=\"padding: 5px 0 0 0;\"><span style=\"font-size:150%\">" + markerElement.name + "&nbsp;&nbsp;" + markerElement.tenpoName + "</span>&nbsp;&nbsp;" + markerElement.rootUrl + "</td>";
	htmlString += "</tr>";
	htmlString += "<tr><td style=\"padding: 5px 0 0 0;\">" + markerElement.address + "</td></tr>";
	if (markerElement.url)
	{
		if (markerElement.url.length > 0)
		{
			htmlString += "<tr><td style=\"padding: 5px 0 0 0;\"><a href=\"" + markerElement.url + "\" target=\"_blank\">" + markerElement.url + "</a></td></tr>";
		}
}
	if (markerElement.business2 && markerElement.business != markerElement.business2) {
		if (markerElement.business2.length > 0) {
			htmlString += "<tr><td style=\"padding: 5px 0 0 0;\">業種：" + markerElement.business + ",&nbsp;" + markerElement.business2 + "</td></tr>";
		}
	}
	else {
		htmlString += "<tr><td style=\"padding: 5px 0 0 0;\">業種：" + markerElement.business + "</td></tr>";
	}
	
	htmlString += "<tr><td style=\"padding: 5px 0 0 0;\">" + markerElement.service + "</td></tr>";
	htmlString += "</table>";

	//マーカーイベント
	GEvent.addListener(markerObject, 'click', function() {
		if (infowindowObject == markerObject)
		{
			markerObject.closeInfoWindow();
		}
		else
		{
			markerObject.openInfoWindowHtml(htmlString);
		}
	});
	GEvent.addListener(markerObject, 'infowindowopen', function() {
		infowindowObject = markerObject;
	});
	GEvent.addListener(markerObject, 'infowindowclose', function() {
		infowindowObject = null;
	});

	//マーカー表示
	MAPObject.addOverlay(markerObject);
}

/****************************************************/
/*													*/
/*	検索											*/
/*													*/
/****************************************************/

/*--------------------------------------------------*/
/*	検索											*/
/*--------------------------------------------------*/
function SearchMap()
{
	if (!MAPObject)
	{
		return;
	}
    
    var businessDataList;
    var checkedBusiness = null;
	var checkedCapital = null;
	var checkedEmployee = null;

	//業種情報取得
	businessDataList = GetBusinessDataList();

	//チェックした業種別のIDをカンマ区切りの文字列にする
	for (i in businessDataList)
	{
		if ($("chkBusiness" + businessDataList[i]).checked == true)
		{
			if(checkedBusiness == null)
			{
				checkedBusiness = businessDataList[i];
			}
			else
			{
				checkedBusiness += "," + businessDataList[i];
			}
		}
	}

	//チェックした資本金別をカンマ区切りの文字列にする
	if ($("chkCapitalLow").checked == true)
	{
		checkedCapital = "1";
	}
	else
	{
		checkedCapital = "0";
	}
	if ($("chkCapitalMlow").checked == true)
	{
		checkedCapital += ",1";
	}
	else
	{
		checkedCapital += ",0";
	}
	if ($("chkCapitalMhigh").checked == true)
	{
		checkedCapital += ",1";
	}
	else
	{
		checkedCapital += ",0";
	}
	if ($("chkCapitalHigh").checked == true)
	{
		checkedCapital += ",1";
	}
	else
	{
		checkedCapital += ",0";
	}

	//チェックした従業員別をカンマ区切りの文字列にする
	if ($("chkEmployeeLow").checked == true)
	{
		checkedEmployee = "1";
	}
	else
	{
		checkedEmployee = "0";
	}
	if ($("chkEmployeeMlow").checked == true)
	{
		checkedEmployee += ",1";
	}
	else
	{
		checkedEmployee += ",0";
	}
	if ($("chkEmployeeMhigh").checked == true)
	{
		checkedEmployee += ",1";
	}
	else
	{
		checkedEmployee += ",0";
	}
	if ($("chkEmployeeHigh").checked == true)
	{
		checkedEmployee += ",1";
	}
	else
	{
		checkedEmployee += ",0";
	}

    //入力チェック
    if (checkedBusiness == null)
    {
		alert("業種別を選択してください。");
	}
	else if (checkedCapital == "0,0,0,0")
	{
		alert("資本金別を選択してください。");
	}
	else if (checkedEmployee == "0,0,0,0")
	{
		alert("従業員別を選択してください。");
	}
	else
	{
		//インジケータ開始
	    indi.indi_start(0);

		//地域情報設定
		SetRegionDataList(checkedBusiness, checkedCapital, checkedEmployee);
	}
}

/*--------------------------------------------------*/
/*	地域情報設定									*/
/*--------------------------------------------------*/
function SetRegionDataList(businessID, capital, employee)
{
		//地域情報取得
		seizoumap.system.mapservice.GetRegionDataList(businessID, capital, employee,
			function(result)
			{
				regionDataList = result;

				//地域リンク設定
				SetRegionDataLink(businessID, capital, employee);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	地域リンク設定									*/
/*--------------------------------------------------*/
function SetRegionDataLink(businessID, capital, employee)
{
		//地域リンク文字列取得
		seizoumap.system.mapservice.GetRegionLinkString(businessID, capital, employee,
			function(result)
			{
				$("divRegionLink").innerHTML = result;

				//リンク強調表示
				$("lnkRegionLink" + selectedregionID).style.fontSize = "x-large";

				//市町村情報設定
				SetCommunityDataList(businessID, capital, employee);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	市町村情報設定									*/
/*--------------------------------------------------*/
function SetCommunityDataList(businessID, capital, employee)
{
		//市町村情報取得
		seizoumap.system.mapservice.GetCommunityDataList(businessID, capital, employee,
			function(result)
			{
				communityDataList = result;

				//市町村リンク設定
				SetCommunityDataLink(businessID, capital, employee);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	市町村リンク設定								*/
/*--------------------------------------------------*/
function SetCommunityDataLink(businessID, capital, employee)
{
		//市町村リンク文字列取得
		seizoumap.system.mapservice.GetCommunityLinkString(businessID, capital, employee,
			function(result)
			{
				$("divCommunityLink").innerHTML = result;

				//リンク強調表示
				if (selectedcommunityID != null)
				{
					$("lnkCommunityLink" + selectedcommunityID).style.fontSize = "x-large";
				}

				//リンク表示切替
				$("trRegion" + selectedregionID).style.display = "block";

				//企業情報設定
				SetCompanyDataList(businessID, capital, employee);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	企業情報設定									*/
/*--------------------------------------------------*/
function SetCompanyDataList(businessID, capital, employee)
{
		//企業情報取得
	seizoumap.system.mapservice.GetCompanyDataList(businessID, capital, employee,
			function(result)
			{
				companyDataList = result;

				//検索結果表示
				DisplaySearchResult();
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	検索結果表示									*/
/*--------------------------------------------------*/
function DisplaySearchResult()
{
	//表示マーカー削除
	MAPObject.clearOverlays();

	if (MAPStatus == 1)
	{
		//市町村マーカー表示
		var communityMapData = communityDataList[selectedregionID];
		for (id in communityMapData)
		{
			ShowCommunityMarker(communityMapData[id]);
		}
	}
	else if (MAPStatus == 2)
	{
		//企業マーカー表示
		var companyMapData = companyDataList[selectedcommunityID];
		for (id in companyMapData)
		{
			ShowCompanyMarker(companyMapData[id]);
		}
	}

	//インジケータ停止
	indi.indi_stop();
}

/*--------------------------------------------------*/
/*	検索例外時										*/
/*--------------------------------------------------*/
function SearchException(type, message)
{
	if (message == "TimeoutException")
	{
		//タイムアウトの場合
		//location.href = "../notfound.aspx";
		return;
	}
	else
	{
		//alert(type + "\n" + message);
		alert("検索に失敗しました。\n再度検索ボタンを押してください。");
	}

	//インジケータ停止
	indi.indi_stop();
}

/****************************************************/
/*													*/
/*	キーワード検索									*/
/*													*/
/****************************************************/

/*--------------------------------------------------*/
/*	キーワード検索									*/
/*--------------------------------------------------*/
function SearchMapDetail()
{
	if (!MAPObject)
	{
		return;
	}

	if ($(clientID + "txtSearchDetail").value == "")
	{
		alert("キーワードを入力してください。");
	}
	else if ($(clientID + "txtSearchDetail").value.length > 128)
	{
		alert("キーワードは128文字以内で入力してください。");
	}
	else
	{
		//インジケータ開始
		indi.indi_start(0);

		//地域情報設定
		SetRegionDataListDetail($(clientID + "txtSearchDetail").value);
	}
}

/*--------------------------------------------------*/
/*	地域情報設定									*/
/*--------------------------------------------------*/
function SetRegionDataListDetail(keyword)
{
		//地域情報取得
		seizoumap.system.mapservice.GetRegionDataListDetail(keyword,
			function(result)
			{
				regionDataList = result;

				//地域リンク設定
				SetRegionDataLinkDetail(keyword);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	地域リンク設定									*/
/*--------------------------------------------------*/
function SetRegionDataLinkDetail(keyword)
{
		//地域リンク文字列取得
		seizoumap.system.mapservice.GetRegionLinkStringDetail(keyword,
			function(result)
			{
				$("divRegionLink").innerHTML = result;

				//リンク強調表示
				$("lnkRegionLink" + selectedregionID).style.fontSize = "x-large";

				//市町村情報設定
				SetCommunityDataListDetail(keyword);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	市町村情報設定									*/
/*--------------------------------------------------*/
function SetCommunityDataListDetail(keyword)
{
		//市町村情報取得
		seizoumap.system.mapservice.GetCommunityDataListDetail(keyword,
			function(result)
			{
				communityDataList = result;

				//市町村リンク設定
				SetCommunityDataLinkDetail(keyword);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	市町村リンク設定								*/
/*--------------------------------------------------*/
function SetCommunityDataLinkDetail(keyword)
{
		//市町村リンク文字列取得
		seizoumap.system.mapservice.GetCommunityLinkStringDetail(keyword,
			function(result)
			{
				$("divCommunityLink").innerHTML = result;

				//リンク強調表示
				if (selectedcommunityID != null)
				{
					$("lnkCommunityLink" + selectedcommunityID).style.fontSize = "x-large";
				}

				//リンク表示切替
				$("trRegion" + selectedregionID).style.display = "block";

				//企業情報設定
				SetCompanyDataListDetail(keyword);
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

/*--------------------------------------------------*/
/*	企業情報設定									*/
/*--------------------------------------------------*/
function SetCompanyDataListDetail(keyword)
{
		//企業情報取得
		seizoumap.system.mapservice.GetCompanyDataListDetail(keyword,
			function(result)
			{
				companyDataList = result;

				//検索結果表示
				DisplaySearchResult();
			},
			function(ext)
			{
				SearchException(ext.get_exceptionType(), ext.get_message());
			}
		);
}

