var map = null;
var msg = "現在ご利用の環境では地図を表示できません";
var MapRoot = "http://www.city.soka.saitama.jp/map/";

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.lon), 17 - 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 (initParam.data1 != 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);
}

function createMarkers() {
	var i;
	for (i in tableData) {
		if (tableData[i].data1 == undefined) break;
		if (tableData[i].data1.match("市役所$")) {
			initParam.data1 = tableData[i].data1;
			initParam.lon = tableData[i].lon;
			initParam.lat = tableData[i].lat;
			initParam.data2 = tableData[i].data2;
			initParam.data3 = tableData[i].data3;
			initParam.url = tableData[i].url;
		}
		tableData[i].marker = new GMarker(new GPoint(tableData[i].lon, tableData[i].lat), createIcon(tableData[i].kind));
	}
}

function createIcon(code){
    var icon = new GIcon();
   	icon.image = MapRoot + "/icon/" +code+".gif";
    //icon.shadow = MapRoot + "/icon/shadow.png";
    icon.iconSize = new GSize(20, 34);
    //icon.shadowSize = new GSize(37, 34);
    icon.iconAnchor = new GPoint(10,34); 
    icon.infoWindowAnchor = new GPoint(10,10);
    return icon;
}

function createInitInfoWindow(obj){
	var html = createInfoWindowHtml(obj);
	if (html != null) map.openInfoWindowHtml(new GLatLng(obj.lat, obj.lon), html);
}

function createInfoWindowHtml(obj){
	if (obj.data1 != undefined) {
		var html = "<div style='width:230px'><b>" + obj.data1 + "</b><br>";
		if (obj.data2 != undefined && obj.data2 != "") {
			if (isKoji(obj.kind))  html += "担当部署： " + obj.data2 + "<br>";
			else html += "住所： " + obj.data2 + "<br>";
		}
		if (obj.data3 != undefined && obj.data3 != "") {
			if (isKoji(obj.kind)) html += "連絡先： " + obj.data3 + "<br>";
			else html += "電話： " + obj.data3 + "<br>";
		}
		if (obj.url != undefined && obj.url != "") html += "<a href='" + obj.url + "'>[ 詳細... ]</a>";
		return html + "</div>";
	}
	return null;
}

function plotAll() {
	map.clearOverlays();
	var i;
	for (i in tableData) {
		if (tableData[i].data1 == undefined) break;
		plotCommon(i);
	}
}

function plotByKind(kind) {
	map.clearOverlays();
	var i;
	for (i in tableData) {
		if (tableData[i].data1 == undefined) break;
		if (tableData[i].kind == kind) plotCommon(i);
	}
}

function plotCommon(id) {
	map.addOverlay(tableData[id].marker);
	var html = createInfoWindowHtml(tableData[id]);
	GEvent.addListener(tableData[id].marker, "click", function() {
		this.openInfoWindowHtml(html);
	});
}

function pointById(id) {
	map.panTo(new GLatLng(tableData[id].lat, tableData[id].lon));
	tableData[id].marker.openInfoWindowHtml(createInfoWindowHtml(tableData[id]));
}

function clickIcon(id) {
	tableData[id].marker.openInfoWindowHtml(createInfoWindowHtml(tableData[id]));
}

function mouseWheelZoom(event) {
	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();
}
