var map;
    var myPano;   
    var panoClient;
    var houseMarker;

    function initialize() {
      panoClient = new GStreetviewClient();      
      map = new GMap2(document.getElementById("map_canvas"));
      map.setCenter(new GLatLng(64.814656,-147.755219), 14);
      map.addControl(new GSmallMapControl());
      map.addControl(new GMapTypeControl());

      houseMarker = new GMarker(new GLatLng(64.814656,-147.755219), {draggable: true});
      map.addOverlay(houseMarker); 

      GEvent.addListener(houseMarker, "dragend", function() {
        panoClient.getNearestPanorama(houseMarker.getLatLng(), showPanoData);
      });
      
      myPano = new GStreetviewPanorama(document.getElementById("pano"));
      panoClient.getNearestPanorama(houseMarker.getLatLng(), showPanoData);
    }
    
    function showPanoData(panoData) {
      if (panoData.code != 200) {
        GLog.write('showPanoData: Server rejected with code: ' + panoData.code);
        return;
      }
      var angle = computeAngle(houseMarker.getLatLng(), panoData.location.latlng);
      myPano.setLocationAndPOV(panoData.location.latlng, {yaw: angle});
    }

    function computeAngle(endLatLng, startLatLng) {
      var DEGREE_PER_RADIAN = 57.2957795;
      var RADIAN_PER_DEGREE = 0.017453;

      var dlat = endLatLng.lat() - startLatLng.lat();
      var dlng = endLatLng.lng() - startLatLng.lng();
      // We multiply dlng with cos(endLat), since the two points are very closeby,
      // so we assume their cos values are approximately equal.
      var yaw = Math.atan2(dlng * Math.cos(endLatLng.lat() * RADIAN_PER_DEGREE), dlat)
             * DEGREE_PER_RADIAN;
      return wrapAngle(yaw);
   }

   function wrapAngle(angle) {
    if (angle >= 360) {
      angle -= 360;
    } else if (angle < 0) {
     angle += 360;
    }
    return angle;
  };

