﻿var map = null;
var msg = "現在ご利用の環境では地図を表示できません";

function initMap() {
	if (!GBrowserIsCompatible()) {
		document.getElementById("map").innerHTML = msg;
		return;
	}
	createMarkers();
	createMap();
}

function createMap() {
	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(initParam.lat, initParam.lng), initParam.zoom);
	if (initParam.control == "large") map.addControl(new GLargeMapControl());
	else if (initParam.control == "small") map.addControl(new GSmallMapControl());
	else if (initParam.control == "zoom") map.addControl(new GSmallZoomControl());
	if (initParam.type == "true") map.addControl(new GMapTypeControl());
	if (initParam.scale == "true") map.addControl(new GScaleControl());
	if (initParam.view == "true") map.addControl(new GOverviewMapControl());
    if (initParam.drag == "false") map.disableDragging();
	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);
}

function createMarkers() {
	var i;
	for (i in MapData) {
		MapData[i].marker = new GMarker(new GPoint(MapData[i].lng, MapData[i].lat), createIcon(MapData[i].value));
	}
}

function createIcon(code){
	var icon = new GIcon();
	icon.image = "./img/point-" +code+".gif";
	icon.iconSize = new GSize(24, 24);
	icon.iconAnchor = new GPoint(10,25); 
	icon.infoWindowAnchor = new GPoint(20,10);
	return icon;
}

function createInitInfoWindow(obj){
	var html = createInfoWindowHtml(obj);
	if (html != null) map.openInfoWindowHtml(new GLatLng(obj.lat, obj.lng), html);
}

function createInfoWindowHtml(obj){
	var infoZoom = map.getZoom();
	var html = "<div style='width:200px;'><strong>" + obj.pref + obj.city + "</strong><br /><hr />";
		html += obj.value + "軒<br />";
		if (infoZoom < initParam.zoom2) {
			html += "<div align='center'>(→<a href='javascript:pointById(" + obj.id +")'>周辺を拡大</a>)</div>";
		}
	return html + "</div>";
}

function plotAll() {
	map.clearOverlays();
	var i;
	for (i in MapData) {
		if (MapData[i].pref == undefined) break;
		plotCommon(i);
	}
}

function plotByRegion(region) {
	map.clearOverlays();
	var i;
	var j;
	for (i in RegionData[region].group) {
		if (RegionData[region].group[i] == undefined) break;
		plotByPref(RegionData[region].group[i],false);
	}
}

function plotByPref(pref,clear) {
	if(clear) map.clearOverlays();
	var i;
	for (i in MapData) {
		if (MapData[i].prefid == pref) plotCommon(i);
	}
}

function plotCommon(id) {
	map.addOverlay(MapData[id].marker);
//	var html = createInfoWindowHtml(MapData[id]);
	GEvent.addListener(MapData[id].marker, "click", function() {
		var html = createInfoWindowHtml(MapData[id]);
		this.openInfoWindowHtml(html);
	});
}

function pointById(id) {
	map.setCenter(new GLatLng(MapData[id].lat, MapData[id].lng),initParam.zoom2);
	MapData[id].marker.openInfoWindowHtml(createInfoWindowHtml(MapData[id]));
}

function clickIcon(id) {
	MapData[id].marker.openInfoWindowHtml(createInfoWindowHtml(MapData[id]));
}

function mouseWheelZoom(e) {
	var delta = event.wheelDelta;
	if (navigator.userAgent.match("MSIE") || navigator.userAgent.match("Safari")) {
		delta = event.wheelDelta;
		event.returnValue = false;
	} else {
		delta = event.detail * -1;
		event.preventDefault();
	}
	map.setZoom(map.getZoom() + (delta > 0 ? 1 : -1));
}

function termMap() {
	if (map != null) GUnload();
}
