/*
 *google maps api
*/



var marker;
var pano;
var map;

function load() {
	if (GBrowserIsCompatible()) {
		var latlng = new GLatLng(35.695576, 139.754108);

		/* map */
		map = new GMap2(document.getElementById("map"));
		
		var point = new GLatLng(35.695542,139.754151);
		map.setCenter(point, 17);
		
		map.addControl(new GSmallMapControl());
		
		var icon=new GIcon();
		icon.image="../js/img/map-icon.png";
		icon.shadow = "../js/img/shadow-map-icon.png";
		icon.iconSize=new GSize(71, 22);
		icon.shadowSize = new GSize(83, 22.0);
		icon.iconAnchor = new GPoint(90, 8);
		var markeropts = new Object();
		markeropts.icon = icon;
		var companyMarker = new GMarker(point, markeropts);
		map.addOverlay(companyMarker);
		marker = new GMarker(latlng, {icon: getArrowIcon(0.0), clickable: false});
		map.addOverlay(marker);


		/* map subwayIcon */
		var kudanIcon = new GIcon(G_DEFAULT_ICON, "../js/img/blue.png");
		var jinboIcon = new GIcon(G_DEFAULT_ICON, "../js/img/yellow.png");

		var kudan = new GMarker(new GLatLng(35.695386,139.751901), kudanIcon, {clickable: false});
		map.addOverlay(kudan);
		var jinbo = new GMarker(new GLatLng(35.695794,139.755836), jinboIcon, {clickable: false});
		map.addOverlay(jinbo);

		/* pano */
		pano = new GStreetviewPanorama(document.getElementById("pano"));
		pano.setLocationAndPOV(latlng, {yaw:243, pitch:-15, zoom:0});

		GEvent.addListener(pano, "error", handleNoFlash);  
		GEvent.addListener(pano, "initialized", moveStreet);
		GEvent.addListener(pano, "yawchanged", yawStreet);

		pano.setLocationAndPOV(latlng);
		GEvent.addListener(map, "click", function(overlay, latlng) {
			pano.setLocationAndPOV(latlng);
		});
	}
}

function setNewLatLng(data){
  if (data.code != 200) { return; }

  var new_latlng = data.location.latlng;
  pano.setLocationAndPOV(new_latlng);
  map.panTo(new_latlng);
//	map.setCenter(new_latlng);
  marker.setLatLng(new_latlng);
}

function getArrowIcon(bearing) {
  var icon = new GIcon();
  icon.image = getArrowUrl(bearing);
  icon.iconSize = new GSize(49, 52);
  icon.iconAnchor = new GPoint(25, 35);
  return icon;
}

function getArrowUrl(bearing) {
//	var id = (3 * Math.round(bearing / 3)) % 120;
//	return "http://www.google.co.jp/intl/ja_jp/mapfiles/cb/man_arrow-" + id + ".png";
//	return "http://maps.google.com/mapfiles/dir_" + id + ".png";
//	var id = 3 * Math.round(bearing / 3);
//	return "http://nox.appspot.com/images/marker/view_marker_" + id + ".png";
	var GUY_NUM_ICONS = 16;
	var GUY_ANGULAR_RES = 360 / GUY_NUM_ICONS;
	if (bearing < 0) {
		bearing += 360;
	}
	var guyImageNum = Math.round(bearing / GUY_ANGULAR_RES) % GUY_NUM_ICONS;
	return "../js/img/man_arrow-" + guyImageNum + ".png";
}

function moveStreet(location_) {
//	map.panTo(location_.latlng);
  map.setCenter(location_.latlng);
  marker.setLatLng(location_.latlng);
}

function yawStreet(yaw_) {
  marker.setImage(getArrowUrl(yaw_));
}

function moveWalker(overlay_, latlng_) {
  var client = new GStreetviewClient();
  client.getNearestPanorama(latlng_, setNewLatLng)
}

function keyDown(){
  var key_code = 0;
  if (document.all)
	key_code = event.keyCode;
  else if (document.getElementById)
	key_code = (event.keyCode)? event.keyCode: event.charCode;
  else if (document.layers)
	key_code = event.which;
  if (key_code == 38) forwardStreet();
  else if (key_code == 40) backwardStreet();
  else if (key_code == 39) turnRight();
  else if (key_code == 37) turnLeft();
}

function forwardStreet() {
  pov_ = pano.getPOV();
  pano.followLink(pov_.yaw);
}

function backwardStreet() {
  pov_ = pano.getPOV();
  pov_back_yaw = pov_.yaw + 180
  if (pov_back_yaw > 360) { pov_back_yaw -= 360; }
  pano.followLink(pov_back_yaw);
}

function turnRight() {
  pov_ = pano.getPOV();
  pov_.yaw += 3;
  if (pov_.yaw > 360) { pov_.yaw -= 360; }
  pano.setPOV(pov_);
}

function turnLeft() {
  pov_ = pano.getPOV();
  pov_.yaw -= 3;
  if (pov_.yaw < 0) { pov_.yaw += 360; }
  pano.setPOV(pov_);
}

function handleNoFlash(errorCode) {
  if (errorCode == FLASH_UNAVAILABLE) {
	alert("Error: Flash doesn't appear to be supported by your browser");
	return;
  }
}