var icon;
function googleMap(params) {
  var coordX = params.coordX || $('coord_x');
  var coordY = params.coordY || $('coord_y');
  var map_div = params.map || $("map");
  var map;
  var svActive = params.streetView;
  var smallControlActive = params.smallControl
  var typeControlActive = params.typeControl;
  var svContainer;
  var marker;
  var svAvailable = false;

  function initMap(){
    if( coordX == null || coordY == null) {
      map_div.innerHTML = "座標が登録されていないため<br/>地図が表示できません。";
      return;
    }
    var x = coordX.value;
    var y = coordY.value;
    
    if( x <= 0 || y <= 0 ){
      map_div.innerHTML = "座標が登録されていないため<br/>地図が表示できません。";
      return;
    }
    
    if( svActive ){
      /* StreetView が on の場合、まずデータが存在するかどうかを調べてからマップを作る */
      var client = new GStreetviewClient();
      client.getNearestPanoramaLatLng(new GLatLng( y,x ), function(latlng){ 
        svAvailable = (latlng != null);
        createMap(x,y);
      });
    }else{
      createMap(x,y);
    }
    
  }
  function createMap(x,y){
    map = new GMap2( map_div );

    if( smallControlActive ){
      map.addControl(new GSmallMapControl());
    }else{
      map.addControl(new GLargeMapControl());
    }

    if( typeControlActive ){
      map.addControl(new GMapTypeControl());
    }
    map.setCenter(new GLatLng( y, x ), 16);
    map.addOverlay( createMarker() );

    if( svActive ){
      svContainer = document.createElement("div");
      svContainer.style.width="450px";
      svContainer.style.height="300px";
    }
  }

  function createMarker(){
    
    marker = new GMarker( map.getCenter(), {"icon":createIcon() } );
    /*marker = new GMarker( map.getCenter() );*/
    if( svActive && svAvailable ){
      GEvent.addListener(marker, "click", function() {
        if(window['pageTracker'] != null){
          var id = parseIdFromUrl();
          pageTracker._trackEvent( "Map", "StreetView", id );
        }
        showStreetView();
      });
    }
    return marker;
  }

  /*なんかよくわからないのだけど、baseIcon を作ってそれを拡張する形でアイコンを作らないとクリックできなくなる*/
  function newBaseIcon(){
    var icon = new GIcon();
    icon.iconSize = new GSize(58, 46);
    icon.iconAnchor = new GPoint(8, 46);
    icon.infoWindowAnchor = new GPoint(9, 2);
    return icon;
  }
  
  function createIcon(){
    icon = new GIcon(newBaseIcon());
    if( svActive && svAvailable ){
      icon.image = "/ikebukuro/img/maincolume/room_detail/map/IconHereWithView.png";
      icon.iconSize = new GSize(150, 77);
      icon.infoWindowAnchor = new GPoint(49, 74);
      icon.iconAnchor = new GPoint(49, 74);
    }else{
      icon.image = "/ikebukuro/img/maincolume/room_detail/map/IconHere.png";
      icon.iconSize = new GSize(91, 68);
      icon.iconAnchor = new GPoint(28, 66);
      icon.infoWindowAnchor = new GPoint(28, 66);
    }
    return icon;
  }
                    
  function parseIdFromUrl(){
    var parts = document.location.href.split("?")[0].split("/");
    return parts[parts.length - 1 ];
  }

  function showStreetView(){
    var markerPos = marker.getPoint();
    marker.openInfoWindow(svContainer);
    /* timeout で wait を掛けないと地図が表示されないことがある模様 */
    setTimeout(function(){
      var svObj = new GStreetviewPanorama(svContainer,{latlng:markerPos});
    }, 300);
  }
  
  Event.observe( window, 'load', initMap);

};
