var map;

var ZOOM_MAX = 19;
var ZOOM_MIN = 0;
var ZOOM_DEF = 17;

function loadMap() {
	initMap();
	var zoom, type;
	var qs = parseQS();
	if (qs["zoom"] != undefined) zoom = parseInt(qs["zoom"]);
	else zoom = ZOOM_MAX;
	if (qs["type"] == "satellite") type = G_SATELLITE_MAP;
	switch (qs["mode"]) {
		case "1":
		case "id":
			map.setCenter(new GLatLng(pointData[qs["id"]].lat, pointData[qs["id"]].lon), zoom, type);
			plotById(qs["id"], true);
			break;
		case "2":
		case "coord":
			map.setCenter(new GLatLng(qs["lat"], qs["lon"]), zoom, type);
			plot(qs["lon"], qs["lat"], qs["info"]);
			break;
		default:
			map.setCenter(new GLatLng(initParam.lat, initParam.lon), initParam.zoom, initParam.map);
			var i;
			for (i in pointData) plotById(i, false);
			break;
	}
}

function initMap() {
	map = new GMap2(document.getElementById("map"));
	if (initParam.control == "large") map.addControl(new GLargeMapControl3D());
	else if (initParam.control == "small") map.addControl(new GSmallMapControl());
	else if (initParam.control == "zoom") map.addControl(new GSmallZoomControl());
	if (initParam.type) map.addControl(new GMapTypeControl());
	if (initParam.scale) map.addControl(new GScaleControl());
	if (initParam.view) map.addControl(new GOverviewMapControl());
	if (!initParam.drag) map.disableDragging();
	if (initParam.info != undefined) createInitInfoWindow(initParam);
		/* マウスのホイールによる縮尺変更が可能 */
	if (navigator.userAgent.match("Safari")) document.getElementById("map").onmousewheel = mouseWheelZoom;
	else if (navigator.userAgent.match("Gecko")) document.getElementById("map").addEventListener("DOMMouseScroll", mouseWheelZoom, false);
	else document.getElementById("map").attachEvent("onmousewheel", mouseWheelZoom);

		// 2010.05.12 から以下を追加
	var maptypes = map.getMapTypes();
	for (var i = 0; i < maptypes.length; i++) {
		maptypes[i].getMinimumResolution = function() {
			return ZOOM_MIN;
		};

		maptypes[i].getMaximumResolution = function() {
			return ZOOM_MAX;
		};
	}
		// ここまで
}

function parseQS() {
	var url = unescape(location.search).slice(1);
	if (navigator.userAgent.indexOf("Safari") > -1) url = unescape(url);
	var list = url.split("&");
	var res = new Object();
	var i;
	for (i in list) {
		var pair = list[i].split("=");
		res[pair[0]] = pair[1];
	}
	return res;
}

function plot(lon, lat, info) {
	var marker = new GMarker(new GPoint(lon, lat));
	map.addOverlay(marker);
	if (info != undefined) {
		var html = makeInfo(info, null, null, null);
		GEvent.addListener(marker, "click", function() {
			this.openInfoWindowHtml(html, {"maxWidth":300});
		});
		marker.openInfoWindowHtml(html, {"maxWidth":300});
	}
}

function plotById(id, flag) {
	pointData[id].marker = new GMarker(new GPoint(pointData[id].lon, pointData[id].lat));
	map.addOverlay(pointData[id].marker);
	if (pointData[id].info != undefined) {
		var html = makeInfo(pointData[id].info, pointData[id].note, pointData[id].img, pointData[id].url);
			GEvent.addListener(pointData[id].marker, "click", function() {
			this.openInfoWindowHtml(html, {"maxWidth":300});
		});
		if (flag) pointData[id].marker.openInfoWindowHtml(html, {"maxWidth":300});
	}
}

function makeInfo(info, note, img, url) {
	var html = "<center>";
	if (img != null) html += "<img src='" + IMG_DIR + img + "' ' Width='180' Height='135' /><br>";
	if (url != null && url != undefined) html += "<b><a href='" + url + "'>" + info + "</a></b>";
	else html += "<b>" + info + "</b>";
	if (note != null) html += "<br><small>" + note + "</small>";
	return html + "</center>";
}

function initList() {
	var str = "";
	var i;
	for (i in pointData) {
		if (pointData[i].info == undefined) break;
		str += "<a href='javascript:listSelected(" + i + ")'>" + pointData[i].info + "</a><br>";
	}
	document.getElementById("list").innerHTML = str;
}

function listSelected(id) {
	var sZoom = ZOOM_MAX - pointData[id].zoom;
			//alert(sZoom);
	map.setCenter(new GLatLng(pointData[id].lat, pointData[id].lon), sZoom, initParam.map);
	map.panTo(new GLatLng(pointData[id].lat, pointData[id].lon));
	pointData[id].marker.openInfoWindowHtml(makeInfo( pointData[id].info, pointData[id].note, pointData[id].img, pointData[id].url), {"maxWidth":300});
}

function mouseWheelZoom(event) {
	var delta;
	if (navigator.userAgent.match("Safari") || navigator.userAgent.match("MSIE")) {
		delta = event.wheelDelta;
		event.returnValue = false;
	} else {
		delta = event.detail * -1;
		event.preventDefault();
	}
	map.setZoom(map.getZoom() + (delta > 0 ? 1 : -1));
}

//---------------------------------------------------------------
//　情報Windowを閉じて、初期状態と同じZoom sizeならなにもしない。
//　変化していれば、初期状態で再表示
//---------------------------------------------------------------
function reSize() {
	map.closeInfoWindow();	//情報Windowを閉じる

	if (map.getZoom() == initParam.zoom)	return;

	map.setCenter(new GLatLng(initParam.lat, initParam.lon), initParam.zoom, initParam.map);
}
