//<![CDATA[
var map, marker;

var svmarker;
var client;
var lastMarkerLocation;
var panorama;
var lng;

var photos = null;
var markers = [];
var points = [];
var markercnt = 0;
var dicon = null;
var svOverlay = new GStreetviewOverlay();

window.onunload = GUnload;
window.onload = function() {
	var opts = {
		googleBarOptions : {
			style : 'new',
			adsOptions : {
				client : 'pub-5785963538165105'
			}
		}
	};

	map = new GMap2(document.getElementById("map"), opts);
	map.setCenter(new GLatLng(34.7516248298043, 135.39310455322266), 16, G_HYBRID_MAP);

	map.setUIToDefault();
	map.addMapType(G_SATELLITE_3D_MAP);

	map.enableGoogleBar();

	map.addOverlay(new GLayer("com.panoramio.all"));
	map.addOverlay(new GLayer("org.wikipedia.ja"));
	map.addOverlay(new GLayer("com.youtube.all"));

	new GKeyboardHandler(map);
	gGeo = new GClientGeocoder();
	map.addControl(new GOverviewMapControl(new GSize(150, 150)));
	var markObj = document.createElement("div");
	var mapW = parseInt(map.getContainer().style.width);
	var mapH = parseInt(map.getContainer().style.height);
	var markW = 18; // センターマークの横幅（ピクセル数）
	var markH = 18; // センターマークの縦幅（ピクセル数）
	var x = (mapW - markW) / 2; // センターマークの中心位置（X座標）
	var y = (mapH - markH) / 2; // センターマークの中心位置（Y座標）
	markObj.style.position = "absolute";
	markObj.style.top = y + "px";
	markObj.style.left = x + "px";
	markObj.style.backgroundImage = "url(img/center.gif)";
	markObj.style.backgroundRepeat = "no-repeat";
	markObj.style.width = markW + "px";
	markObj.style.height = markH + "px";
	markObj.style.opacity = 0.5;
	map.getContainer().appendChild(markObj);
	GEvent.addListener(map, "move", function() {
		var center = map.getBounds();
		var gtcent = center.getCenter();
		var latLng = gtcent.x + ',' + gtcent.y;
		document.getElementById("message").innerHTML = latLng;
	});

	// Street View
	client = new GStreetviewClient();
	var guyIcon = new GIcon();
	guyIcon.image = "http://maps.gstatic.com/mapfiles/cb/man-0.png";
	guyIcon.transparent = "http://maps.gstatic.com/mapfiles/cb/man-pick.png";
	guyIcon.imageMap = [26, 13, 30, 14, 32, 28, 27, 28, 28, 36, 18, 35, 18, 27,
			16, 26, 16, 20, 16, 14, 19, 13, 22, 8];
	guyIcon.iconSize = new GSize(49, 52);
	guyIcon.iconAnchor = new GPoint(25, 35); // near base of guy's feet
	guyIcon.infoWindowAnchor = new GPoint(25, 5); // top of guy's head
	guyIcon.shadow = null;
	svmarker = new GMarker(map.getCenter(), {
		draggable : true,
		icon : guyIcon
	});
	svmarker
			.bindInfoWindowHtml('<div name="pano" id="pano" style="width: 500px; height: 300px"></div>');
	map.addOverlay(svmarker);
	lastMarkerLocation = map.getCenter();
	GEvent.addListener(svmarker, 'infowindowopen', openPanoramaBubble);
	GEvent.addListener(svmarker, "infowindowclose", function() {
    	svmarker.setImage(guyIcon.image);
    	if (panorama) {
    		panorama.remove();
    	}
    });
	GEvent.addListener(svmarker, 'dragstart', function() {
		svmarker.closeInfoWindow();
	});
	GEvent.addListener(svmarker, "dragstart", function() {
		map.addOverlay(svOverlay);
	});
	GEvent.addListener(svmarker, "drag", onDrag);
	GEvent.addListener(svmarker, "dragend", onDragEnd);
	GEvent.addListener(map, 'click', function(overlay, point) {
		if (!overlay) {
			svmarker.setLatLng(point);
			onDragEnd();
		}
	});
}

function seeAt(lat, lng, title, body, size, url, img) {
	var point = new GPoint(lat, lng);
	map.setZoom(15);
	var marker = new GMarker(point);
	map.panTo(new GLatLng(lng, lat));
	map.addOverlay(marker);
	GEvent.addListener(marker, "click", function() {
		var point = new GLatLng(lng, lat);
		tabList = [
				new GInfoWindowTab("情報", "<b>" + title
						+ "</b><p><div style='width:350px'>" + body
						+ "</div></p>"),
				new GInfoWindowTab("画像", img),
				new GInfoWindowTab("関連ＨＰ", url),
				new GInfoWindowTab("周辺画像",
						'<div name="pano" id="pano" style="width:350px; height:200px"></div>')]
		marker.openInfoWindowTabsHtml(tabList);
		GEvent.addListener(marker, 'infowindowopen', newPanorama);
	});
}

function openPanoramaBubble() {
	panorama = new GStreetviewPanorama(document.getElementById('pano'), {
		latlng : svmarker.getPoint()
	});
	GEvent.addListener(panorama, "initialized", onNewLocation);
	GEvent.addListener(panorama, "yawchanged", onYawChange);
}

function newPanorama() {
	panorama = new GStreetviewPanorama(document.getElementById('pano'), {
		latlng : this.getPoint()
	});
	GEvent.addListener(panorama, 'error', function(errorCode) {
		if (errorCode == 600) {
			document.getElementById('pano').innerHTML = 'ストリートビューがありません。';
			return;
		} else if (errorCode == 603) {
			document.getElementById('pano').innerHTML = 'FLASHを有効にしてください。';
			return;
		}
	});
}

function onYawChange(newYaw) {
	var GUY_NUM_ICONS = 16;
	var GUY_ANGULAR_RES = 360 / GUY_NUM_ICONS;
	if (newYaw < 0) {
		newYaw += 360;
	}
	guyImageNum = Math.round(newYaw / GUY_ANGULAR_RES) % GUY_NUM_ICONS;
	guyImageUrl = "http://maps.gstatic.com/mapfiles/cb/man_arrow-"
			+ guyImageNum + ".png";
	svmarker.setImage(guyImageUrl);
}

function onNewLocation(location) {
	var oldCenter = map.getCenter();
	var oldLatLng = svmarker.getLatLng();
	map.setCenter(new GLatLng(oldCenter.lat() - (oldLatLng.lat() - location.latlng.lat()), oldCenter.lng() - (oldLatLng.lng() - location.latlng.lng())));
	svmarker.setLatLng(location.latlng);
	map.getInfoWindow().reset(location.latlng);
	lastMarkerLocation = location.latlng;
}

function onDrag() {
	if (!lng || lng < svmarker.getLatLng().lng()) {
		svmarker
				.setImage("http://maps.gstatic.com/mapfiles/cb/man_fly_right.png");
	} else if (lng > svmarker.getLatLng().lng()) {
		svmarker
				.setImage("http://maps.gstatic.com/mapfiles/cb/man_fly_left.png");
	}
	lng = svmarker.getLatLng().lng();
}

function onDragEnd() {
	map.removeOverlay(svOverlay);
	svmarker.setImage(svmarker.getIcon().image);
	var latlng = svmarker.getLatLng();
	client.getNearestPanorama(latlng, onResponse);
}

function onResponse(response) {
	if (response.code != 200) {
		svmarker.setLatLng(lastMarkerLocation);
	} else {
		var latlng = new GLatLng(response.Location.lat, response.Location.lng);
		svmarker.setLatLng(latlng);
		lastMarkerLocation = latlng;
		if (panorama) {
			//openPanoramaBubble();
		}
	}
}

function searchPoint() {
	document.getElementById("result").innerHTML = "検索中です...";
	var address = document.getElementById("geoName").value;
	gGeo.getLatLng(address, checkGeo);
}
function checkGeo(point) {
	if (point) {
		map.setCenter(point, 14);
		document.getElementById("result").innerHTML = "中央が該当地点です";
	} else {
		document.getElementById("result").innerHTML = "見つかりませんでした";
	}
}

function searchEditPoint() {
	var address = document.getElementById("adr").value;
	gGeo.getLatLng(address, function(point){map.setCenter(point, 16);});
}

//]]>

