// JavaScript Document
// ストリートビュー対応
// (ref.) http://googlemaps.googlermania.com/

var pano;
var point;
var map;
var stm;

function load(address,roomname,link,size, lat, lng, marker) {
  if (GBrowserIsCompatible()) {
	var url = location.href;
	var r_url = url.replace("/mode/mapst","");
    var line1 = roomname;
    var line2 = address;
    var line3 = '<a href="' + r_url + '">元の画面に戻る</a>';
    var zoom = 18;
        pano = new GStreetviewPanorama(document.getElementById("mapst"));
	panoClient = new GStreetviewClient();
        map = new GMap2(document.getElementById("map"));
    if(size == "L"){
      map.addControl(new GLargeMapControl());
      map.addControl(new GScaleControl());
      map.addControl(new GMapTypeControl());
      map.addControl(new GOverviewMapControl());
      zoom = 18;
      line3 = "";
    }else if(size == "S"){
      map.addControl(new GSmallZoomControl());
      map.addControl(new GScaleControl());
    }else if(size == "P"){
      zoom = 18;
      line3 = "";
    }else{
      map.addControl(new GLargeMapControl());
      map.addControl(new GScaleControl());
      map.addControl(new GMapTypeControl());
      map.addControl(new GOverviewMapControl());
      zoom = 18;
      line3 = "";
    }
    
    if(lat != '' && lng != '' && lat != undefined) {
      point = new GLatLng(lat,lng);
      map.setCenter(point,zoom);

      panoClient.getNearestPanorama(point, showPanoData);
      map.addOverlay(new GStreetviewOverlay());

      var m = new GMarker(point);
      if(marker != false) {
       map.addOverlay(m);
      m.openInfoWindowHtml("<center><b>" + line1 + "</b><br><font size=2>" + line2 + "</font><br>" + line3 + "</center>");
      GEvent.addListener(map, 'click', function(m, point) {
        if (m) {
          m.openInfoWindowHtml("<center><b>" + line1 + "</b><br><font size=2>" + line2 + "</font><br>" + line3 + "</center>");
        }
      });
      }
    } else { //緯度経度が見つからない場合住所から検索
    var gGeo = new GClientGeocoder();
    gGeo.getLatLng(address,function(point) {
     if (point == null) {
       point = new GLatLng(34.640047, 133.890825);
       line1 = "住所がみつかりませんでした。";
     }
      map.setCenter(point,zoom);
      var m = new GMarker(point);
      map.addOverlay(m);
      m.openInfoWindowHtml("<center><b>" + line1 + "</b><br><font size=2>" + line2 + "付近</font><br>" + line3 + "</center>");
      GEvent.addListener(map, 'click', function(m, point) {
        if (m) {
          m.openInfoWindowHtml("<center><b>" + line1 + "</b><br><font size=2>" + line2 + "付近</font><br>" + line3 + "</center>");
        }
      });
    });
   }
  } //end of compatible
} //end of load()

function showPanoData(panoData) {
	x = point.lng();
	y = point.lat();
	u = panoData.location.latlng.lng();
	v = panoData.location.latlng.lat();
	myyaw =  (Math.atan2(x-u, y-v) / Math.PI*180 + 360)%360 ;

//	GLog.write("st_point=" + panoData.location.latlng);
//	GLog.write("ms_point=" + point);
//	GLog.write("(x,y)=(" + x + "," + y + ")");
//	GLog.write("(u,v)=(" + u + "," + v + ")");
//	GLog.write("(Math.atan2(x-u, y-v) / Math.PI*180+360)%360 = " + myyaw);

	mypov = {yaw:myyaw, pitch:-20};
	pano.setLocationAndPOV(panoData.location.latlng,mypov);

	var sticon = new GIcon();
	sticon.image = "/static/img/gmap/stIcon0.png";
	sticon.iconSize = new GSize(49,52);
	sticon.iconAnchor = new GPoint(24,34);
	var markerOpts = {
		draggable : true,
		icon : sticon
	};

	stm = new GMarker(panoData.location.latlng, markerOpts);
	GEvent.addListener(stm, "dragend", dragendMarker);
	map.addOverlay(stm);

	GEvent.addListener(pano, "initialized", initPano);
	GEvent.addListener(pano, "yawchanged", changePanoYaw);
}

function dragendMarker(latlng) {
	var pov = pano.getPOV();
	pano.setLocationAndPOV(latlng,pov);
}

function initPano(location) {
	stm.setLatLng(location.latlng);
	var angle = Math.floor(yaw / (360 / 16));
	stm.setImage("/static/img/gmap/stIcon" + angle + ".png");
}	

function changePanoYaw(yaw) {
	var angle = Math.floor(yaw / (360 / 16));
	stm.setImage("/static/img/gmap/stIcon" + angle + ".png");
}

