// watchizu.js : 地形図閲覧用非プラグイン版電子国土Webシステム利用スクリプト。

var CurrentZuyou = -1;
var colorBegin = '<font color="#000000">';

var zukakuVisible = false;

//電子国土ベータ２に対するコマンド
function app_main() {
	var htmlName = document.location.href;	//URLで指定されたファイル名を取得。「.html」以下の引数の取得のため。
	var hikisu_all = htmlName.split("?");	//引数を取得するために「?」で分割
	if(typeof hikisu_all[1] == 'undefined') {

		cxThis = 139.75;
		cyThis = 35.67;
	} else {

		var hikisu = hikisu_all[1].split("&");	//さらに「&」で分割
		for (i in hikisu) {
			hikisu_value = hikisu[i].split("=");
			if (hikisu_value[0] == "meshcode") {	//引数が「meshcode=」の場合
				var meshCodeThis = hikisu_value[1];	//「meshcode=」の引数を取得。通常は8桁の数字
				cxThis = meshCodeThis.slice(2,4)-0+100+meshCodeThis.slice(5,6)/60*7.5+meshCodeThis.slice(7,8)/5/60*7.5/2+7.5/4/60;	//メッシュコードから中心座標を取得
				cyThis = meshCodeThis.slice(0,2)/1.5+meshCodeThis.slice(4,5)/60*5+meshCodeThis.slice(6,7)/5/60*5/2+5/4/60;
			} else if(hikisu_value[0] == "b") {		//引数がBLの「b=」の場合
				var coord_b = hikisu_value[1];		//「b=」の引数を取得。
				cyThis = coord_b.slice(0,2) - 0 + coord_b.slice(2,4)/60 + coord_b.slice(4,10)/3600;		//60進法経緯度値を10進度に変更
			} else if(hikisu_value[0] == "l") {		//引数がBLの「l=」の場合
				var coord_l = hikisu_value[1];		//「l=」の引数を取得。
				cxThis = coord_l.slice(0,3) - 0 + coord_l.slice(3,5)/60 + coord_l.slice(5,10)/3600;		
			} else if(hikisu_value[0] == "latitude") {		//引数が経緯度の「latitude=」の場合
				cyThis = hikisu_value[1];		//「latitude=」の引数を取得。
			} else if(hikisu_value[0] == "longitude") {		//引数が経緯度の「longitude=」の場合
				cxThis = hikisu_value[1];		//「longitude=」の引数を取得。
			} else if(hikisu_value[0] == "citycode") {		//引数が「citycode=」の場合
				citycode2XY(hikisu_value[1]);
				cxThis = cityX;
				cyThis = cityY;
			} else {
				cxThis = 139.75;
				cyThis = 35.67;
			}
		}

	}

	//いわゆる電子国土の地図の読み出し
	top.map.createScaleBar();	//スケールバーの表示
//	top.map.disablePopup();		//ポップアップの非表示
	top.map.setMouseMode('pan');	//マウスモードの指定
	top.map.setMapCenter(cxThis,cyThis,"9000");	//地図の中心をメッシュコードから求めたものに設定、縮尺は1/9000
	top.map.openMap();
	top.map.event('leftup','mapClickEvent');		//左クリック（ドラッグを含む）で地図が移動した時に、図葉名等を変更するため、イベントを取得
//	top.map.event('dbclick','mapDblClickEvent');	//ダブルクリックした時に経緯度が表示されるようにイベントを取得（Ver3ではダブルクリックは拡大なので削除）
	mapClickEvent("start",cxThis,cyThis);			//初期状態の図葉名の表示を実施
	
	var NND = Math.floor(cyThis);
	var NNM = Math.floor((cyThis%1)*60);
	var NNS = Math.floor(((cyThis*60)%1)*600)/10;
	var EED = Math.floor(cxThis);
	var EEM = Math.floor((cxThis%1)*60);
	var EES = Math.floor(((cxThis*60)%1)*600)/10;
	
	
	statusMessage = "中心の経緯度：北緯"+(Math.round(cyThis*100000)/100000)+"度("+NND+"度"+NNM+"分"+NNS+"秒"+")　東経"+(Math.round(cxThis*100000)/100000)+"度("+EED+"度"+EEM+"分"+EES+"秒"+")";
	window.status = statusMessage;
	
	document.getElementById("ND").innerHTML=NND;
	document.getElementById("NM").innerHTML=NNM;
	document.getElementById("NS").innerHTML=NNS;
	document.getElementById("ED").innerHTML=EED;
	document.getElementById("EM").innerHTML=EEM;
	document.getElementById("ES").innerHTML=EES;
	
	document.getElementById("NELink").innerHTML="http://watchizu.gsi.go.jp/watchizu.html?longitude=" + cxThis  + "&latitude=" + cyThis;
	//iframeの高さを調整してfitmapします。	20110201現在の」webtis_limited.jsでは不要なのでコメントアウト
//	var hei = kl_windowheight();
//	var hei_title = document.getElementById('td_title').clientHeight;
//	document.getElementById('map').height=(hei-hei_title-30);
//	top.map.fitMap();
}

//左クリックの時と、最初の起動時（app_mainが読み出されたとき）に実行する関数。
function mapClickEvent(stat,cx,cy) {
	//電子国土のevent関数で、自動的に経緯度値を取得できるようだが、app_mainを実行した直後では正常に読み取れないため、改めて経緯度値を取得する
	if (stat == "start"){
		//app_main実行時には、経緯度値に引数を使用
	} else {
		cx = top.map.getCx();	//表示している中心に経緯度を取得
		cy = top.map.getCy();
	}
	/*
	meshid = check_zuyou_change(cx, cy, CurrentZuyou);	//zuyou.jsファイルで経緯度に対応するメッシュコードを取得する。変化が無い時は-1。
	if(0 <= meshid) {
		CurrentZuyou = meshid;
		var zumei = zuyou_list[meshid].name;
		if (stat == "start"){
			document.getElementById('zuyomei').innerHTML = zumei;	//初期状態では図郭が表示されないため、textとしてzumeiを表示
		}
		if(0 < meshid) {		//図葉がある地域の処理
			//北方変則図郭のための処理（同じ色が隣に出てしまうため）
			if(meshid==523800157475){
				colorBegin = '<font color="#C9C92E">';
			}else if(meshid==523800157825){
				colorBegin = '<font color="#8080FF">';
			}else if(meshid==524850156130){
				colorBegin = '<font color="#FF0000">';
			}else{
			if(meshid % 2 < 1){
				if(meshid % 20 < 10){
					colorBegin = '<font color="#8080FF">';

				} else {
					colorBegin = '<font color="#C9C92E">';

				}
			} else {
				if(meshid % 20 < 10){
					colorBegin = '<font color="#00FF00">';

				} else {
					colorBegin = '<font color="#FF0000">';

				}
			}
		}
			if(zukakuVisible){		//図郭のチェックボックスがONの場合の処理
				zukakuURL = "http://watchizu.gsi.go.jp/mesh/" + meshid + ".xml";	//図郭ファイルのURLを作成。設置場所を変更したらここを変更すること。
				top.map.openJSGIXML(zukakuURL,1);							//図郭を表示する。そこへ移動(fit)はしない。
				document.getElementById('zuyomei').innerHTML = colorBegin + zumei + '</font>';	//図名をその色で表示する。
			} else {														//図郭のチェックボックスがOFFの場合の処理。単にtextとして図名を表示。
				document.getElementById('zuyomei').innerHTML = zumei;
			}
		} else {

			document.getElementById('zuyomei').innerHTML = zumei;
		}
	}
	*/
	//場所に合わせて、広域地図や電子国土へのリンク先を変更する
	document.getElementById('kouiki').innerHTML = '<a class="listitem" href="./index.aspx?mesh=' + Math.floor(cy * 1.5) + Math.floor(cx - 100) + '" target="_top">広域地図</a>';	//広域地図へ戻るリンク先をメッシュ番号に合わせて変更。
//	document.getElementById('cyberjapan').innerHTML = '<a class="listitem" href="http://portal.cyberjapan.jp/denshi/opencjapan.cgi?x=' + cx + '&y=' + cy + '&s=9000" target="_blank">電子国土ポータルでこの地図を見る</a>';
	document.getElementById('cyberjapan').innerHTML = '<a class="listitem" href="http://portal2.cyberjapan.jp/site/mapuse/index.html?longitude=' + cx + '&latitude=' + cy + '" target="_blank">電子国土ポータルでこの地図を見る</a>';	//20111118 Ver3を見せるように変更
	
	var NND = Math.floor(cy);
	var NNM = Math.floor((cy%1)*60);
	var NNS = Math.floor(((cy*60)%1)*600)/10;
	var EED = Math.floor(cx);
	var EEM = Math.floor((cx%1)*60);
	var EES = Math.floor(((cx*60)%1)*600)/10;
	
	
	statusMessage = "中心の経緯度：北緯"+(Math.round(cy*100000)/100000)+"度("+NND+"度"+NNM+"分"+NNS+"秒"+")　東経"+(Math.round(cx*100000)/100000)+"度("+EED+"度"+EEM+"分"+EES+"秒"+")";
	window.status = statusMessage;
	
	document.getElementById("ND").innerHTML=NND;
	document.getElementById("NM").innerHTML=NNM;
	document.getElementById("NS").innerHTML=NNS;
	document.getElementById("ED").innerHTML=EED;
	document.getElementById("EM").innerHTML=EEM;
	document.getElementById("ES").innerHTML=EES;
	
	document.getElementById("NELink").innerHTML="http://watchizu.gsi.go.jp/watchizu.html?longitude=" + cx  + "&latitude=" + cy;
}

//ダブルクリックした時に実行される関数。経緯度を別ウィンドウで表示する
function mapDblClickEvent(px,py) {	//event実行時に取得できる経緯度を利用する
	px1 = Math.floor(px);
	px2 = Math.floor((px-px1)*60);
	px3 = Math.round((px*60-px1*60-px2)*60);

	if(px3==60){px3=0,px2=px2+1};

	if(px2==60){px2=0,px1=px1+1};
	py1 = Math.floor(py);
	py2 = Math.floor((py-py1)*60);
	py3 = Math.round((py*60-py1*60-py2)*60);

	if(py3==60){py3=0,py2=py2+1};

	if(py2==60){py2=0,py1=py1+1};

	pxdms = px1 * 10000 + px2 * 100 + px3;
	pydms = py1 * 10000 + py2 * 100 + py3;
	coordText = "北緯" + py1 +"度" + py2 +"分" + py3 + "秒、東経" + px1 +"度" + px2 +"分" + px3 + "秒";		//経緯度を計算

	//別ウィンドウに表示するメッセージを作成
	message = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">\n';
	message = message + '<html>\n';
	message = message + '<head>\n';
	message = message + '<meta http-equiv="Content-Type" content="text/html; CHARSET=Shift_JIS">\n';
	message = message + '<meta http-equiv="Content-Style-Type" content="text/css">\n';
	message = message + '<title>緯度経度表示</title>\n';
	message = message + '<style>\n';
	message = message + '\<\!\-\- p {text-indent:1em;}\-\-\>\n';
	message = message + '</style>\n';
	message = message + '</head>\n';
	message = message + '<body>';
	message = message + '<div id="coord" style="font-size:x-large;font-weight:bold;text-align:center;">' + coordText + '</div>\n';
	message = message + '<div id="coord" style="font-weight:bold;text-align:center;">北緯' + py +'度、東経' + px +'度</div>\n';
	message = message + '<p>上記の測定値は，平成14年4月1日施行の測量法改正による世界測地系に基づく値です。</p>\n';
	message = message + '<p>この計測では精度が保証できませんので、これらの測定値はあくまで参考の値として御利用ください。</p>\n';
	message = message + '<p>ダブルクリックした地点の地図を表示させるためには、以下のURLをご利用ください。</p>\n';
	if(navigator.product == 'Gecko') {
		message = message + '<p><a href="http://watchizu.gsi.go.jp/watchizu.aspx?b=' + pydms + '&l=' + pxdms + '" onclick="window.opener.open(' + "'http://watchizu.gsi.go.jp/watchizu.aspx?b=" + pydms + '&l=' + pxdms + "','_blank'" + ');return false;" target="_blank">http://watchizu.gsi.go.jp/watchizu.aspx?b=' + pydms + '&l=' + pxdms + '</a></p>\n';

	} else {

		message = message + '<p><a href="http://watchizu.gsi.go.jp/watchizu.aspx?b=' + pydms + '&l=' + pxdms + '" target="_blank">http://watchizu.gsi.go.jp/watchizu.aspx?b=' + pydms + '&l=' + pxdms + '</a></p>\n';
	}
	message = message + '<p></p>\n';
	message = message + '<div style="text-align:center">\n';
	message = message + '<input type="button" value="閉じる" onClick="window.close();"</div>\n';
	message = message + '</body>\n';
	message = message + '</html>\n';

	//新しいウィンドウを開く
	CoordWin = window.open('coordinate.html', "coordinate","width=500 height=400 directories=no location=no resizable=no scrollbars=yes status=no titlebar=no toolbar=no");
	CoordWin.document.open();
	CoordWin.document.write(message);	//そのウィンドウに、メッセージを表示する
	CoordWin.document.close();
}

//図郭チェックボックスを操作した時に実行する関数
function checkZukaku(){

	zukakuVisible = document.getElementById('zukakuOnOff').checked;
	if(zukakuVisible){		//図郭チェックボックスがチェックされている場合
		if(0 < CurrentZuyou){			//さらに図名が取得できていれば
			zukakuURL = "http://watchizu.gsi.go.jp/mesh/" + CurrentZuyou + ".xml";		//図郭のXMLファイル名。図郭ファイルの場所を変更したらここを変えること
			top.map.openJSGIXML(zukakuURL,1);								//そのXMLファイルを開く
		}
		top.map.displayLayer("国土地理院",1);	//図郭のファイルは「国土地理院」というレイヤ名なので、これを表示させる
		top.map.redrawMap();					//再描画すると正常に描画される
		document.getElementById('zuyomei').innerHTML = colorBegin + zuyou_list[CurrentZuyou].name + '</font>';	//図名表示の色を変更する
	} else {								//図郭チェックボックスがチェックされていない場合
		top.map.displayLayer("国土地理院",0);	//「国土地理院」レイヤを非表示にする
		top.map.redrawMap();					//再描画
		document.getElementById('zuyomei').innerHTML = zuyou_list[CurrentZuyou].name;	//図名を元の色に戻す
	}
}

function changeMap(mapid)	{		//20110125	電子国土基本図と、2万5千分1地形図間の移動
var cx1=top.map.getCx();
var cy1=top.map.getCy();
var url='?longitude=' + cx1 + '&latitude=' + cy1;
	
	url = './maphistory.html' + url;
	window.open(url, "_top");
/*	
	if(mapid=='25K')	{
		url = './watchizu25.html' + url;
		window.open(url, "_top");
	}else{
		url = './watchizu.html' + url;
		window.open(url, "_top");
	}
*/
};

function toV2()	{		//電子国土WebシステムVer2用のページに移動
	var htmlName = document.location.href;	//URLで指定されたファイル名を取得。「.html」以下の引数の取得のため。
	var hikisu_all = htmlName.split("?");	//引数を取得するために「?」で分割
	var url = "./watchizu2.html?" + hikisu_all[1];
	if(typeof hikisu_all[1] == 'undefined') {		//?以下がない場合の処理
		url = "./watchizu2.html"
	}
	window.open(url, "_top");
}
