﻿/*
 * smap.js
 * 2007/01/18
 */

var sGMap;
var selectSchoolBackColor = '#efefff';
var Count;
var tId;
var rId;
var mFrom;

function sMapLoad() {
/*
 * Google Mapの表示
 */

	if (map != 'true') return;
	
	Try.these( function() { sGMap.checkResize(); } );
	sGMap = new GMap2($('sMap'));
	Try.these(
		function() {
			sMLatLng = new GLatLng(parseFloat(jLink.data[0].lat), parseFloat(jLink.data[0].lon));
		},
		function() { sMLatLng = new GLatLng(34.976494, 138.383188); }	// 県庁
	);
	sGMap.setCenter(sMLatLng, 13);
	
	// マーカをクリックしたときに情報ウィンドウを表示
	GEvent.addListener(sGMap, "click", function(marker, point) {
		if (marker) sMapOpenInfo(marker.schoolNo);
		if (debug) {	// 東経・北緯を表示
			if (point) {
				sMLatLng = new GLatLng(point.y, point.x);
				sGMap.openInfoWindowHtml(sMLatLng, '<div>Lng: ' + Math.round(point.x * 100000)/100000 + '<br />Lat: ' + Math.round(point.y * 100000)/100000 + '</div>');
			}
		}
	});
	
	sGMap.addControl(new GLargeMapControl());		// 縮尺コントロール
	sGMap.addControl(new GScaleControl());			// 縮尺
	sGMap.addControl(new GMapTypeControl());		// 地図・衛星写真切り換え
	sGMap.addControl(new GOverviewMapControl());	// 拡大図を右下に表示

	// マウスホイールのイベントを追加
	if (fBrowserCheck() == 'IE') {
		$('sMap').attachEvent('onmousewheel', mouseWheelZoomingIE);
	}
	if (fBrowserCheck() == 'GE') {
		$('sMap').addEventListener('DOMMouseScroll', mouseWheelZoomingGE, false);
	}
}

function sMapMarker(_from) {
/*
 * マーカの表示（非同期処理）
 */

	if (! sGMap) return;
	
	mFrom = _from;
	sGMap.clearOverlays();
	Count = 0;
	tId = window.setInterval("sMarkerSet()", 100);
}

function sMarkerSet() {
/*
 * マーカの表示
 */
	
	_end = mFrom + 10;
	_end = (_end < dataCount) ? _end : dataCount;
	
	// ラベルなし
	if ((cCategory || cArea || cCity || csName) && (csName != encodeURIComponent(sNameValueDefault)) && (Count < dataCount)) {
		i = Count; Count += 100;
		for ( ; i < dataCount; i++) {
			if (i > Count) return;
			sMLatLng = new GLatLng(parseFloat(jLink.data[i].lat), parseFloat(jLink.data[i].lon));
			// マーカ画像
			if ((mFrom <= i) && (i < _end)) continue;
			_sMarker(i, 'O', sMLatLng);
		}
		return;
	}
	
	// A～Jラベル付き
	for (i = mFrom; i < _end; i++) {
		sMLatLng = new GLatLng(parseFloat(jLink.data[i].lat), parseFloat(jLink.data[i].lon));
		_sMarker(i, aMark[i - mFrom], sMLatLng);
	}
	
	window.clearInterval(tId);
}

function _sMarker(i, _aMark, _latlng) {
/*
 * マーカ画像の表示
 */

	sMarkerObj = new GIcon();
	sMarkerObj.image = './mark/mark_' + _aMark + '.png';
	sMarkerObj.iconSize = new GSize(24, 34);
	sMarkerObj.iconAnchor = new GPoint(12, 36);
	// マーカ表示
	sMarker = new GMarker(_latlng, sMarkerObj);
	/* -- for debug --
	sMarker = new GMarker(_latlng, { draggable:true });
	GEvent.addListener(sMarker, 'dragend', function() {
		//マーカーの座標を取得します
		var point = this.getPoint();
		jLink.data[this.schoolNo].lat = Math.round(point.y * 100000) / 100000;
		jLink.data[this.schoolNo].lon = Math.round(point.x * 100000) / 100000;
		$('info' + this.schoolNo).innerHTML +=
			'<br />' + jLink.data[this.schoolNo].lon + ','
			+ jLink.data[this.schoolNo].lat;
    });
	*/
	
	sMarker.schoolNo = i;
	sGMap.addOverlay(sMarker);
}

function sMapResizeInterval() {
/*
 * Google Mapのリサイズ
 */

	if (map != 'true') return;
	
	rId = window.setTimeout("sMapResize()", 100);
}

function sMapResize() {
/*
 * Google Mapのリサイズ（実行部）
 */

	hw = getHeightWidth();
	$('sMap').style.height = hw.h + 'px';
	$('infoOpen').style.top = hw.t + 'px';
	$('infoOpen').style.left = $('sMap').offsetLeft + 'px';
	Try.these( function() { sGMap.checkResize(); } );
}

function sMapOpenInfo(i) {
/*
 * 情報ウィンドウ表示
 */

	if (('' + i) == 'undefined') return;
	sGMap.closeInfoWindow();

	sMLatLng = new GLatLng(parseFloat(jLink.data[i].lat), parseFloat(jLink.data[i].lon));
	str = jLink.data[i].name
		+ '<span class="subInfo">' + jLink.data[i].info + '<br />' + jLink.data[i].more + '<br /><br /></span>'
//		+ '<p class="subInfo alignRight" style="margin-top: 1em;"><a href="" onClick="return sMapBlowup(' + i + ')">付近を表示</a></p>'
		;
	$('mapInfoWindow').innerHTML = str;
	sGMap.openInfoWindowHtml(sMLatLng, $('mapInfoWindow').innerHTML);
	
	k = Math.floor(i / 10) * 10;
	Try.these( function() {
		for (j = k; j < (k + 10); j++) {
//				_a = '<a href="" onClick="return sMapOpenInfo(' + j + ')">';
				cl = (j == i) ? selectSchoolBackColor : 'white';
				$('data' + j).style.background = cl;
//				mr = (j == i) ? '<br />' + jLink.data[i].more : '';
//				$('info' + j).innerHTML = jLink.data[j].info + mr;
		}
	} );
	return false;
}

function sMapBlowup(i) {
/*
 * 付近の拡大図を表示
 */

	sGMap.closeInfoWindow();
	sMLatLng = new GLatLng(parseFloat(jLink.data[i].lat), parseFloat(jLink.data[i].lon));
	sZoomLevel = sGMap.getZoom();
	_zoomLevel = (sZoomLevel < 0) ?  13 : sZoomLevel;
	_zoomLevel = (sZoomLevel > 17) ? 19 : sZoomLevel + 2;
	sGMap.showMapBlowup(sMLatLng, { zoomLevel:_zoomLevel });
	return false;
}

function sMapSetCenter(i) {
/*
 * 地図の中心を移動
 */

	sMLatLng = new GLatLng(parseFloat(jLink.data[i].lat), parseFloat(jLink.data[i].lon));
	sGMap.panTo(sMLatLng, sGMap.getZoom());
	return false;
}

function mouseWheelZoomingIE(event) {
/*
 * マウスホイールによるズーム処理(MSIE)
 */

	var delta = event.wheelDelta;
	event.returnValue = false;
	sGMap.setZoom(sGMap.getZoom() + (delta > 0 ? 1 : -1));
}

function mouseWheelZoomingGE(event) {
/*
 * マウスホイールによるズーム処理(Gecko)
 */

	var delta = event.detail * (-1);
	event.preventDefault();
	sGMap.setZoom(sGMap.getZoom() + (delta > 0 ? 1 : -1));
}

