var marker_comments = new Array();
var icons = new Array();
var markers = new Array();
var baloon_show = false;
var baloon_html = "";
var baloon_point = null;
var map = null;
var geocoder = null;
var center_y = 35.400244786795064;
var center_x = 139.37255859375;
var cur_zl = 9;

function onLoad() {
	initializeMap();
}

function showDetail(no, id){
	var url = "map_info.php?no=" + no + "&id=" + id;
	var win = top.open(url, 'win_parkdetail','width=550,height=570,resizable=yes,scrollbars=yes,dependent=yes');
	win.focus();
}

function initialize() {
	if (navigator.appName=="Microsoft Internet Explorer" && navigator.userAgent.match(/Mac|PPC/)
		&& navigator.userAgent.indexOf('Opera') < 0) {
		document.location = "dontsupport.html";
	} else {
		initializeMap();
	}
}

function getWindowHeight() {
	if (window.self && self.innerHeight) {
		return self.innerHeight;
	}
	if (document.body && document.body.clientHeight) {
		return document.body.clientHeight;
	}
	return 0;
}

function initializeMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		var inipoint = new GLatLng(center_y, center_x);
		map.setCenter(inipoint,cur_zl);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.enableContinuousZoom();
    	map.enableDoubleClickZoom();
		
		GEvent.addListener(map, "moveend", function(){
			if (baloon_show) {
				// バルーン表示によってイベントが発生した場合
				map.openInfoWindow(baloon_point, baloon_html);
				baloon_show = false;
			} else {
				// 通常のパン・ズームでのイベント
				searchCurrentRange();
			}
		});    	
    	
    	//ジオコーディング検索用
    	geocoder = new GClientGeocoder();
    	
    	// 初期表示
    	searchKanagawaArea("all");
		
	} else {
		alert("ご使用のブラウザが動作環境を満たしていない可能性があります。");
	}
}

function showAddress(add) {
	//アドレスなし
	if (!add){
		alert("検索できません");
	}
	//アドレスあり
	else if (geocoder) {
    	geocoder.getLatLng(
        	add,
    		function(point) {
            	if (!point) {
            		alert(add + " が見つかりませんでした。");
	            } else {
	              map.setCenter(point, 15);
	              searchCurrentRange();
	        	}
        	}
    	);
	}
}

function searchKanagawaArea(area){
	if (area == "all") {
		// 全体
		zoomMap(139.37255859375,35.400244786795064,1.0986328125);
	} else if (area == "n") {
		// 北部
		zoomMap(139.213256,35.526079,0.376968);
	} else if (area == "e") {
		// 東部
		zoomMap(139.549026,35.516019,0.376968);
	} else if (area == "w") {
		// 西部
		zoomMap(139.151458,35.257394,0.376968);
	} else if (area == "s") {
		// 南部
		zoomMap(139.640350,35.233281,0.376968);
	}
	searchCurrentRange();
}

//特定のマーカーにフォーカス
function focusPoint(t_x,t_y,m_num){
	// バルーンは mooveend イベントで表示させる
	baloon_show = true;
	baloon_html = marker_comments[m_num];
	baloon_point = new GLatLng(t_y, t_x);
	
	// バルーン表示によってパンされるのを防止する
	var bounds = map.getBounds();
	var cur_north = bounds.getNorthEast().y;
	var cur_south = bounds.getSouthWest().y;
	var offset = (cur_north - cur_south) / 4.0;
	var zoompoint = new GLatLng(t_y + offset, t_x);
	map.setCenter(zoompoint);
}

//現在の表示範囲から検索
function searchCurrentRange(){
	var bounds = map.getBounds();
	var cur_north = bounds.getNorthEast().y;
	var cur_east = bounds.getNorthEast().x;
	var cur_south = bounds.getSouthWest().y;
	var cur_west = bounds.getSouthWest().x;
	var cur_zoom = map.getZoom();
	
	map.clearOverlays();
	
	marker_comments = new Array();
	icons = new Array();
	markers = new Array();
	
	var baseIcon = new GIcon();
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new GSize(20, 34);
	baseIcon.shadowSize = new GSize(37, 34);
	baseIcon.iconAnchor = new GPoint(9, 34);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	
	// 座標で抽出
	var list_html = "<table style='border-width:0px;'>";
	var foundCount = 0;
	for (var i = 0; i < parksCount; i++) {
		if (foundCount >= 25) break;
		
		var lat = parks[i][3];
		var lon = parks[i][4];
		
		if (cur_south <= lat && lat <= cur_north &&
			cur_west <= lon && lon <= cur_east) {
			
			var id = parks[i][0];
			var name = parks[i][1];
			var buildingtype = parks[i][2];
			var photo1 = parks[i][6];
			var marker_comment = "";
			
			var iconfile = "";
			if(foundCount < 25){
				iconfile = "./mapicon/iconr" + (foundCount+1) + ".png";
			} else {
				iconfile = "./mapicon/iconr.png";
			}
			// リスト
			list_html += "<tr><td style='padding:3px;border-style:dotted;border-width:0px 0px 1px 0px;border-color:#EEEEEE;font-size:small;'>";
			list_html += "<a href=\"JavaScript:focusPoint(" + lon + "," + lat + "," + foundCount + ");\">";
			list_html += "<img src=\"" + iconfile + "\" border=\"0\" />";
			list_html += "&nbsp;";
			list_html += name;
			list_html += "</a>";
			list_html += "</td></tr>";
			// コメント
			marker_comment = "<div style=\"font-size:x-small;\">";
			marker_comment += (foundCount + 1) + ". ";
			marker_comment += name + "<br />";
			if(photo1 != ""){
				marker_comment += "<img src=\"" + photo1 + "\" width=\"70\" /><br />";
			}
			marker_comment += "<a href=\"JavaScript:showDetail(" + (foundCount+1) + "," + id + ");\">詳細</a>";
			marker_comment += "</div>";
			marker_comments.push(marker_comment);
			// マーカー
			icons[foundCount] = new GIcon(baseIcon);
			icons[foundCount].image = iconfile;
			markers[foundCount] = new GMarker(new GLatLng(lat,lon),icons[foundCount]);
			markers[foundCount].html = marker_comment;
			GEvent.addListener(markers[foundCount], "click", function(point) {
				// バルーンは mooveend イベントで表示させる
				baloon_show = true;
				baloon_html = this.html;
				baloon_point = point;
				
				// バルーン表示によってパンされるのを防止する
				var bounds = map.getBounds();
				var cur_north = bounds.getNorthEast().y;
				var cur_south = bounds.getSouthWest().y;
				var offset = (cur_north - cur_south) / 4.0;
				var zoompoint = new GLatLng(point.y + offset, point.x);
				map.setCenter(zoompoint);
			});
			map.addOverlay(markers[foundCount]);
			
			foundCount++;
		}
	}
	list_html += "</table>";
	
	list_html = parksCount + " 件中 " + foundCount + " 件の公園が表示されています。<br /><br />" + list_html;
	
	// リストを更新
	var elem = document.getElementById("resultList");
	elem.innerHTML = list_html;
}

//登録ページへ飛ぶ
function goRecodePage(pref,add){
	
	var center = map.getCenter();
	var cur_x = center.x;
	var cur_y = center.y;
	var cur_zoom = map.getZoom();
	
	var target = "map_recode.php?lat=" + cur_y + "&lon=" + cur_x + "&z=" + cur_zoom + "&pref=" + encodeURIComponent(pref) + "&add=" + encodeURIComponent(add);
	
	open(target,"_self");
}

//編集ページへ飛ぶ
function goEditPage(id,page){
	
	var target = "map_edit.php?id="+ id +"&p=" + page;
	
	open(target,"_self");
}

//削除ページへ飛ぶ
function goDeletePage(id,page){
	
	var center = map.getCenter();
	var cur_x = center.x;
	var cur_y = center.y;
	var cur_zoom = map.getZoom();
	if(cur_zoom > 16){
		cur_zoom = 16;
	}
	
	var target = "map_delete.php?id="+ id +"&lat=" + cur_y + "&lon=" + cur_x + "&z=" + cur_zoom + "&p=" + page;
	
	open(target,"_self");
}

//登録ページへ飛ぶ
function goRecodePage(page,parkid){
	
	var center = map.getCenter();
	var cur_x = center.x;
	var cur_y = center.y;
	var cur_zoom = map.getZoom();
	if(cur_zoom > 16){
		cur_zoom = 16;
	}
	
	var target = "map_recode.php?lat=" + cur_y + "&lon=" + cur_x + "&z=" + cur_zoom + "&p=" + page + "&parkid=" + parkid;
	
	open(target,"_self");
}

