// JavaScript Document

// 初期化
function createMarker(point, comment) {
	var marker = new GMarker(point);
	var html = comment;
	GEvent.addListener(marker, 'click', function() {marker.openInfoWindowHtml(html);} );
	return marker;
}

function createMap() {
	map = new GMap2(document.getElementById('gmap'));
	G_HYBRID_PHYSICAL_MAP = new GMapType([G_PHYSICAL_MAP.getTileLayers()[0],G_HYBRID_MAP.getTileLayers()[1]],G_NORMAL_MAP.getProjection(),'Hybrid Physical');
	map.addMapType(G_PHYSICAL_MAP);
	map.addMapType(G_HYBRID_PHYSICAL_MAP);
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	/*map.addControl(new GOverviewMapControl());*/

	var mapControl = new GHierarchicalMapTypeControl();
	mapControl.clearRelationships();
	mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, 'Labels', true);
	mapControl.addRelationship(G_PHYSICAL_MAP, G_HYBRID_PHYSICAL_MAP, 'Labels', true);
	map.addControl(mapControl);

	presetData = new Array();
	presetData['minami-alps'] = new Array(35.573836, 138.183106, 9);
	presetData['chuo-alps'] = new Array(35.719662, 137.817188, 10);
	presetData['yatsugatake'] = new Array(36.102897, 138.196582, 10);
	presetData['okuchichibu'] = new Array(35.885155, 138.722992, 10);
	presetData['daibosatsu'] = new Array(35.677378, 138.847961, 10);
	presetData['chichibu'] = new Array(35.999118, 139.031296, 10);
	presetData['okutama'] = new Array(35.796652, 139.113006, 10);
	presetData['takao'] = new Array(35.600927, 139.056702, 10);
	presetData['tanzawa'] = new Array(35.465703, 139.115753, 10);
	presetData['fuji'] = new Array(35.380092, 138.810882, 9);
	presetData['n100'] = new Array(35.774371, 138.419322, 8);
	presetData['y100'] = new Array(35.664121, 138.568443, 9);
	presetData['f12'] = new Array(35.657296, 138.942032, 11);
	presetData['all'] = new Array(35.664121, 138.568443, 9);

	gmapData = new Array();
	GDownloadUrl('gmapdata.xml', function(data) {
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('marker');
		for (var i = 0; i < markers.length; i++) {
			var area = markers[i].getAttribute('area');
			var label = markers[i].getAttribute('label');
			var name = markers[i].getAttribute('name');
			var yomi = markers[i].getAttribute('yomi');
			var sl = markers[i].getAttribute('sl');
			var lat = parseFloat(markers[i].getAttribute('lat'));
			var lng = parseFloat(markers[i].getAttribute('lng'));
			var comment = '<div id=infowindow><a href=panorama-' + area + '.html#' + label + '>' + name + ' - ' + sl + 'm<br>' + yomi + '<br>' + label.toUpperCase() + '</a></div>';
			var marker = createMarker(new GLatLng(lat, lng), comment);
			var checkbox = false;
			gmapData[i] = new Array(area, label, name, yomi, sl, lat, lng, comment, marker, checkbox);
		}
	});
}

// gmapDataに基づいてチェックボックスを設定する
function refleshCheckbox() {
	for (c = 0, s = true; c < document.marker.length; c++) {
		for (var i = 0; i < gmapData.length; i++) {
			if (document.marker.elements[c].name == gmapData[i][1]) {
				document.marker.elements[c].checked = gmapData[i][9];
				break;
			}
		}
	}
	return;
}

function refleshHeadder() {
	for (c = 0, s = true; (c < document.marker.length) && (s &= document.marker.elements[c].checked); c++)
		;
	document.marker_all.headder.checked = s;
	return;
}

function reflesh() {
	refleshCheckbox();
	refleshHeadder();
}

// 特定の山のマーカーを表示する
function addMarker(label, exclude) {
	for (var i = 0; i < gmapData.length; i++) {
		if (label == gmapData[i][1]) {
			if (gmapData[i][9] == false) {
				map.addOverlay(gmapData[i][8]);
				gmapData[i][9] = true;
			}
			map.setCenter(new GLatLng(gmapData[i][5], gmapData[i][6]));	
			if (!exclude)
				break;
		} else if (exclude) {
			if (gmapData[i][9] == true) {
				map.removeOverlay(gmapData[i][8]);
				gmapData[i][9] = false;
			}
		}
	}
	return;
}

// リスト中の全山のマーカーを表示する
function addListedMarkers(exclude) {
	for (var i = 0; i < gmapData.length; i++) {
		for (c = 0; c < document.marker.length; c++) {	// リストに存在するかどうかを調べる
			if (document.marker.elements[c].name == gmapData[i][1]) {	// 存在した
				if (gmapData[i][9] == false) {	// 	表示する 
					map.addOverlay(gmapData[i][8]);
					gmapData[i][9] = true;
				}
				break;
			}
		}
		if (c == document.marker.length && exclude) {	// リストされていない山は非表示にする
			map.removeOverlay(gmapData[i][8]);
			gmapData[i][9] = false;
		}
	}
	return;
}

// 全山のマーカーを表示する
function addAllMarkers() {
	for (var i = 0; i < gmapData.length; i++) {
		if (gmapData[i][9] == false) {
			map.addOverlay(gmapData[i][8]);
			gmapData[i][9] = true;
		}
	}
	return;
}

// 特定の山のマーカーを削除する
function clearMarker(label) {
	for (var i = 0; i < gmapData.length; i++) {
		if (label == gmapData[i][1]) {
			if (gmapData[i][9] == true) {
				map.removeOverlay(gmapData[i][8]);
				gmapData[i][9] = false;
			}
			break;
		}
	}
	return;
}

// リスト中の全山のマーカーを削除する
function clearListedMarkers() {
	for (var i = 0; i < gmapData.length; i++) {
		for (c = 0; c < document.marker.length; c++) {	// リストに存在するかどうかを調べる
			if (document.marker.elements[c].name == gmapData[i][1]) {	// 存在した
				if (gmapData[i][9] == true) {
					map.removeOverlay(gmapData[i][8]);
					gmapData[i][9] = false;
				}
				break;
			}
		}
	}
	return;
}

// 全山のマーカーを削除する
function clearAllMarkers() {
	for (var i = 0; i < gmapData.length; i++) {
		if (gmapData[i][9] == true) {
			map.removeOverlay(gmapData[i][8]);
			gmapData[i][9] = false;
		}
	}
	return;
}

// Utilities
function scrollToTop() {
	window.scrollTo(0,0);
}

