// JavaScript Document

var gtclient;
var map;
var marker;
var gsv;
var mymarker;
var lng;
var lastMarkerLocation;
var overlayInstance = null;

function load() {
	if (GBrowserIsCompatible()) {

		map = new GMap2(document.getElementById("google_map"));
		var build = new GLatLng( lat, lon);
		var point = new GPoint( lon, lat);
		map.setCenter(build, 15);
		var marker = new GMarker(point);
		map.addOverlay(marker);
		map.addControl(new GSmallZoomControl());
		map.addControl(new GScaleControl());
		map.disableDoubleClickZoom();

		gtclient = new GStreetviewClient();
		var guyIcon = new GIcon(G_DEFAULT_ICON);
		guyIcon.image = "http://maps.google.co.jp/intl/ja_jp/mapfiles/cb/man-0.png";
		guyIcon.transparent = "http://maps.google.co.jp/intl/ja_jp/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);
		guyIcon.shadow = null;
		mymarker = new GMarker(build, {icon: guyIcon, draggable: true});
		map.addOverlay(mymarker);
		lastMarkerLocation = build;
		startStreetview();
//	bluelineOverlay();
//	GEvent.addListener(mymarker, "click", refreshStreetview);
		GEvent.addListener(mymarker, "drag", onDragStart);
		GEvent.addListener(mymarker, "dragend", onDragEnd);
//		GEvent.addListener(map, 'click', onTeleport)
	}


//---------------------------------------------------------
// STREETVIEW AREA - BLUE LINE
	function bluelineOverlay() {
	  if (!overlayInstance) {
	    overlayInstance = new GStreetviewOverlay();
	    map.addOverlay(overlayInstance);
	  } else {
	    map.removeOverlay(overlayInstance);
	    overlayInstance = null;
	  }
	}
//---------------------------------------------------------
	function startStreetview(lat, lng) {
		gsv = new GStreetviewPanorama(document.getElementById('google_map_sv'));
		GEvent.addListener(gsv, "error", onError);
		gsv.setLocationAndPOV(build, {yaw:0, pitch:10});
	  var latlng = new GLatLng(lat, lng);
	  mymarker.setLatLng(build);
		GEvent.addListener(gsv, "yawchanged", onYawChange);
		GEvent.addListener(gsv, "initialized", onMove);
		GEvent.addListener(marker, 'click', function(){	map.setCenter(build)})
		GEvent.addListener(map, 'dblclick', onTeleport)
	}
	function refreshStreetview(lat, lng) {
		gsv = new GStreetviewPanorama(document.getElementById('google_map_sv'));
		GEvent.addListener(gsv, "error", onError);
		gsv.setLocationAndPOV(mymarker.getLatLng(), {yaw:0, pitch:10});
		GEvent.addListener(gsv, "yawchanged", onYawChange);
		GEvent.addListener(gsv, "initialized", onMove);
		GEvent.addListener(mymarker, 'click', function(){	map.setCenter(mymarker.getLatLng())})
	}
//---------------------------------------------------------
	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.google.co.jp/intl/ja_jp/mapfiles/cb/man_arrow-" + guyImageNum + ".png";
		mymarker.setImage(guyImageUrl);
	}
//---------------------------------------------------------
	function onMove(location) {
		var newPoint = location.latlng;
		map.setCenter(newPoint)
		mymarker.setLatLng(newPoint);
	}
//---------------------------------------------------------
	function onDragStart() {
		if (!lng || lng < mymarker.getLatLng().lng()) {
			mymarker.setImage("http://www.google.co.jp/intl/ja_jp/mapfiles/cb/man_fly_right.png");
		} else if (lng > mymarker.getLatLng().lng()) {
			mymarker.setImage("http://www.google.co.jp/intl/ja_jp/mapfiles/cb/man_fly_left.png");
		}
		lng = mymarker.getLatLng().lng();
		if(gsv){	gsv.remove();	}
	}
	function onDragEnd() {
		mymarker.setImage(mymarker.getIcon().image);
		var latlng = mymarker.getLatLng();
		gtclient.getNearestPanorama(latlng, onResponse);
	}
	function onTeleport(overlay,point) {
			var newPoint = point;
			mymarker.setLatLng(newPoint);
			onDragEnd();
	}
//---------------------------------------------------------
	function onResponse(response) {
	  if (response.code != 200) {
	    mymarker.setLatLng(lastMarkerLocation);
	  } else {
	    var latlng = new GLatLng(response.Location.lat, response.Location.lng);
	    mymarker.setLatLng(latlng);
	    lastMarkerLocation = latlng;
	    refreshStreetview();
	  }
	}

	function onError(errorCode) {
		if (errorCode == 600) {
			document.getElementById("google_map_sv").innerHTML = 'ストリートビュー未対応エリアです。';
			return;
		}else if (errorCode == 603) {
			document.getElementById("google_map_sv").innerHTML = 'ブラウザがFlash未対応です。';
			return;
		}
	}

	//google.setOnLoadCallback(initialize);






}
