var map;
var default_lat;
var default_lng;
var default_msg;

// 初期設定
function initGmap () {
	map = new GMap2(document.getElementById("map"));
	// オーバービュー
	map.addControl(new GOverviewMapControl(new GSize(120,120))); 
	// 拡大縮小（大）
	map.addControl(new GLargeMapControl());
	// 拡大縮小（小）
	//map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl(true));
	// 距離スケール
	map.addControl(new GScaleControl());
	// マウスホイールのイベントを追加
	map.enableContinuousZoom();
	map.enableScrollWheelZoom();
	return map;
}

// 地図情報のマーカー削除処理
function clearAllMm () {
	map.clearOverlays();
	var sidebar = document.getElementById('sidebar');
	sidebar.innerHTML = '';
}

// 普通のマーカー作成処理1
function addMarker1 (lon, lat, msg) {
	var point = new GLatLng(lon, lat);
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(msg);
	});
	map.addOverlay(marker);// 地図へ表示
	return marker;
}

//  青小のマーカー作成処理
function addMarker2 (mlat, mlon, mmsg) {
	var icon = new GIcon();
	icon.image  = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize   = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);
	var point = new GLatLng(mlat, mlon);
	var marker_m = new GMarker(point, icon)
	GEvent.addListener(marker_m, "click", function() {
		marker_m.openInfoWindowHtml(mmsg);
	});
	return marker_m;
}

// API用のマーカー作成処理
function addMarker3 (blat, blon, bmsg) {
	var icon = new GIcon();
	icon.image  = "http://maps.google.co.jp/mapfiles/ms/icons/yellow-dot.png";
	icon.shadow = "http://maps.google.co.jp/mapfiles/ms/icons/msmarker.shadow.png";
	icon.iconSize   = new GSize(32, 32);
	icon.shadowSize = new GSize(59, 32);
	icon.iconAnchor = new GPoint(16, 32);
	icon.infoWindowAnchor = new GPoint(14, 2);
	var point = new GLatLng(blat, blon);
	map.openInfoWindowHtml(point, bmsg);
	var marker_b = new GMarker(point, icon)
	GEvent.addListener(marker_b, "click", function() {
		marker_b.openInfoWindowHtml(bmsg);
	});
	map.addOverlay(marker_b);// 地図へ表示
	return marker_b;
}

// 四角形作成処理
// 四角の範囲一辺約1km ※微妙に誤差あり
//2009/08/11 2kmに変更
function retLatarray (ido) {
	var ido_array = new Array(5);
	ido_array[0] = ido + 0.008992;//0.004496;
	ido_array[1] = ido_array[0];
	ido_array[2] = ido_array[0] - 0.017984;//0.008992;
	ido_array[3] = ido_array[2];
	ido_array[4] = ido_array[0];
	return ido_array;
}
function retLngarray (keido) {
	var keido_array = new Array(5);
	keido_array[0] = keido + 0.01134;//0.005667;
	keido_array[1] = keido_array[0] - 0.02268;//0.01134;
	keido_array[2] = keido_array[1];
	keido_array[3] = keido_array[0];
	keido_array[4] = keido_array[0];
	return keido_array;
}

// ライン処理
function polyLineSquare (ido_array, keido_array) {
	var points = [5];
	points[0] = new GLatLng(ido_array[0], keido_array[0]);
	points[1] = new GLatLng(ido_array[1], keido_array[1]);
	points[2] = new GLatLng(ido_array[2], keido_array[2]);
	points[3] = new GLatLng(ido_array[3], keido_array[3]);
	points[4] = new GLatLng(ido_array[4], keido_array[4]);
	var line = new GPolyline(points, "#ff0000", 2);
	return line;
}

// サイドバーにマーカーの内容表示処理
function createSidebarEntry(marker_m, mttitle) {
	var div = document.createElement('div');
	div.setAttribute('class','list');
	var html = '　├' + mttitle;
	div.innerHTML = html;
	div.style.cursor = 'pointer';
	div.style.color = '#369';
	//div.style.marginBottom = '5px';
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker_m, 'click');
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		div.style.backgroundColor = '#369';
		div.style.color = '#FFF';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		div.style.backgroundColor = '#FFF';
		div.style.color = '#369';
	});
	return div;
}

// 地図情報取得処理
function getMapdata (eid, cat, ido1, ido2, keido1, keido3) {
	var request = GXmlHttp.create();
	var gmaplist = "/lib/neighborlist.php"; // 地図データの一覧取得用php
	getgmaplist = gmaplist + "?eid=" + eid + "&cat=" + cat + "&ido1=" + ido1 + "&ido2=" + ido2 + "&keido1=" + keido1 + "&keido3=" + keido3;
	request.open("GET", getgmaplist, true);
	request.onreadystatechange = function() { 
		if (request.readyState == 4) {
			var res = GXml.parse(request.responseText);
			// 2009/02/17:IE対策
			if (res.documentElement.getElementsByTagName("marker") != null) {
				var markers = res.documentElement.getElementsByTagName("marker");
			} else {
				var markers;
			}
			// サイドバー初期設定
			var sidebar = document.getElementById('sidebar');
			sidebar.innerHTML = '';
			if (markers.length == 0) {
				sidebar.innerHTML += '<div class="list">周辺情報はありません</div>';
				return;
			} else {
				for (var i=0; i<markers.length; i++) {
					var mlat = parseFloat(markers[i].getAttribute("lat"));
					var mlon = parseFloat(markers[i].getAttribute("lng"));
					var mttitle = markers[i].getAttribute("mttitle");
					var mturl = markers[i].getAttribute("mturl");
					if (mturl != "0") {
						if (bapiid != 0) {
							var mmsg = '<div style="white-space: nowrap"><p class="ajgmp"><a href="'+mturl+'" target="_top">'+mttitle+'</a></p><br /><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+mlat+'%2C'+mlon+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?saddr='+blon+'%2C'+blat+'&daddr='+mlat+'%2C'+mlon+'&ie=UTF8&hl=ja&ct=clnk&cd=1&f=d&dirflg=d" target="_blank">到着地点</a></p></div>';
						} else {
							var mmsg = '<div style="white-space: nowrap"><p class="ajgmp"><a href="'+mturl+'" target="_top">'+mttitle+'</a></p><br /><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+mlat+'%2C'+mlon+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?daddr='+mlat+'%2C'+mlon+'" target="_blank">到着地点</a></p></div>';
						}
					} else {
						if (bapiid != 0) {
							var mmsg = '<div style="white-space: nowrap"><p class="ajgmp">'+mttitle+'</p><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+mlat+'%2C'+mlon+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?saddr='+blon+'%2C'+blat+'&daddr='+mlat+'%2C'+mlon+'&ie=UTF8&hl=ja&ct=clnk&cd=1&f=d&dirflg=d" target="_blank">到着地点</a></p></div>';
						} else {
							var mmsg = '<div style="white-space: nowrap"><p class="ajgmp">'+mttitle+'</p><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+mlat+'%2C'+mlon+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?daddr='+mlat+'%2C'+mlon+'" target="_blank">到着地点</a></p></div>';
						}
					}
					var marker_m = addMarker2(mlat, mlon, mmsg);//地図へ表示
					map.addOverlay(marker_m);
					// サイドバーに表示
					var sidebarEntry = createSidebarEntry(marker_m, mttitle);
					sidebar.appendChild(sidebarEntry);
				}
			}
		}
	}
	request.send(''); //この引数をnullにするとOpera8.02/8.5/9bが動作しなくなります
	getgmaplist = gmaplist; // phpに渡す値を初期化
}

// セレクトイベント
function selectchanged(eid) {
	var c_menu = document.getElementById("c_menu");
	var n = c_menu.selectedIndex;
	var value = c_menu.options[n].value;
	if (value == 0) {
	//	clearAllMm();
	} else {
		clearAllMm();
		var marker = addMarker1(default_lat, default_lng, default_msg);
		// 座標配列
		var ido_array = retLatarray(default_lat);
		var keido_array = retLngarray(default_lng);
		// ライン表示
		var line = polyLineSquare(ido_array, keido_array);
		map.addOverlay(line);
		// DBから情報取得
		getMapdata(eid, value, ido_array[1], ido_array[2], keido_array[1], keido_array[3]);
		// API
		if (bapiid != 0) {
			if (bmt_id != 0 && bapiid == bmt_id) {
				var bmarker = addMarker3(blon, blat, bmsg);
			}
		}
	}
}

// デフォルト情報
function defaultMapdata (mtid) {
	var mtid = parseInt(mtid);
	var gmapdata = "http://www.bandaisan.tv/lib/getdata3.php";// 地図データ
	gmapdata = gmapdata + "?mtid=" + mtid;
	if (bapiid != 0) {gmapdata = gmapdata + "&bapiid=" + bapiid;}
	var ml = 0;
	var request = GXmlHttp.create();
	request.open("GET", gmapdata, true);
	request.onreadystatechange = function() { 
		if (request.readyState == 4) {
			var res = GXml.parse(request.responseText);
			var markers = res.documentElement.getElementsByTagName("marker");
			ml = markers.length;
			if (ml == 1) {
				map = initGmap();
				var mt_id = parseInt(markers[0].getAttribute("mtid"));
				// API
				if (bapiid != 0) {
					bapi = res.documentElement.getElementsByTagName("bapi");
					bmt_id = parseInt(bapi[0].getAttribute("bmtid"));
					if (bmt_id != 0 && bapiid == bmt_id) {
						bmttitle = bapi[0].getAttribute("bmttitle");
						bmturl = bapi[0].getAttribute("bmturl");
						blat = parseFloat(bapi[0].getAttribute("blat"));
						blon = parseFloat(bapi[0].getAttribute("blng"));
						if (bmturl != "0") {
							bmsg = '<div style="white-space: nowrap"><p class="ajgmp"><a href="'+bmturl+'" target="_top">'+bmttitle+'</a></p></div>';
						} else {
							bmsg = '<div style="white-space: nowrap"><p class="ajgmp">'+bmttitle+'</p></div>';
						}
						var bmarker = addMarker3(blon, blat, bmsg);
						List[0] = bmarker;
					}
				}
				if (mtid == mt_id) {
					var lat = parseFloat(markers[0].getAttribute("lat"));
					var lon = parseFloat(markers[0].getAttribute("lng"));
					var mttitle = markers[0].getAttribute("mttitle");
					var mturl = markers[0].getAttribute("mturl");
					if (mturl != "0") {
						if (bapiid != 0) {
							var msg = '<div style="white-space: nowrap"><p class="ajgmp"><a href="'+mturl+'" target="_top">'+mttitle+'</a></p><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+lon+'%2C'+lat+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?saddr='+blon+'%2C'+blat+'&daddr='+lon+'%2C'+lat+'&ie=UTF8&hl=ja&ct=clnk&cd=1&f=d&dirflg=d" target="_blank">到着地点</a></p></div>';
						} else {
							var msg = '<div style="white-space: nowrap"><p class="ajgmp"><a href="'+mturl+'" target="_top">'+mttitle+'</a></p><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+lon+'%2C'+lat+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?daddr='+lon+'%2C'+lat+'" target="_blank">到着地点</a></p></div>';
						}
					} else {
						if (bapiid != 0) {
							var msg = '<div style="white-space: nowrap"><p class="ajgmp">'+mttitle+'</p><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+lon+'%2C'+lat+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?saddr='+blon+'%2C'+blat+'&daddr='+lon+'%2C'+lat+'&ie=UTF8&hl=ja&ct=clnk&cd=1&f=d&dirflg=d" target="_blank">到着地点</a></p></div>';
						} else {
							var msg = '<div style="white-space: nowrap"><p class="ajgmp">'+mttitle+'</p><p class="root">経路を表示:<a href="http://www.google.co.jp/maps?saddr='+lon+'%2C'+lat+'" target="_blank">出発地点</a> － <a href="http://www.google.co.jp/maps?daddr='+lon+'%2C'+lat+'" target="_blank">到着地点</a></p></div>';
						}
					}
					var marker = addMarker1(lon, lat, msg);
					List[1] = marker;
					if (bapiid != 0) {
						initZoom(lon, lat);
						//map.setCenter(new GLatLng(lon, lat), 11);
					} else {
						map.setCenter(new GLatLng(lon, lat), 14);
					}
					// デフォルト確定
					default_lat = lon;
					default_lng = lat;
					default_msg = msg;
				}
			} else {
				// 2009/03/25修正
				var gmap = document.getElementById("gmap");
				gmap.innerHTML = '';
				return;
			}
		}
	}
	request.send(''); //この引数をnullにするとOpera8.02/8.5/9bが動作しなくなります
}
function initZoom (lon, lat) {
	var gb;
	var first = 1;
	var gbzm;
	// 二点間の距離(2009/04/17追加)
	var m = new GLatLng(lon, lat);
	var b = new GLatLng(blon, blat);
	var bdistance = Math.floor(b.distanceFrom(m));
	if (bdistance < 200) {
		gbzm = 17;
	} else if (bdistance >= 200 && bdistance < 500) {
		gbzm = 16;
	} else if (bdistance >= 500 && bdistance < 1200) {
		gbzm = 15;
	} else if (bdistance >= 1200 && bdistance < 2000) {
		gbzm = 14;
	} else if (bdistance >= 2000 && bdistance < 3300) {
		gbzm = 13;
	} else if (bdistance >= 3300 && bdistance < 8500) {
		gbzm = 12;
	} else if (bdistance >= 8500 && bdistance < 15000) {
		gbzm = 11;
	} else {
		gbzm = 10;
	}
	for (var index in List) {
		var marker = List[index];
		if (first){
			gb = new GLatLngBounds(marker.getPoint(), marker.getPoint());
			first = 0;
		} else {
			var point = marker.getPoint();
			gb.extend(point);
		}
	}
	map.setCenter(gb.getCenter(), gbzm);
	//map.setCenter(gb.getCenter(), map.getBoundsZoomLevel(gb));
}

// ロード関数
var bapiid;
var bapi;
var bmt_id;
var blat;
var blon;
var bmttitle;
var bmturl;
var bmsg;
var List = {};

function onLoad(mtid) {
	bapiid = parseInt(arguments[1]);
	if (GBrowserIsCompatible()) {
		defaultMapdata(mtid);
	}
}
