/**
 * 隠岐の島町ホームページ
 * 役場へのアクセスGoogleMaps表示用JavaScript
 * 
 * @author Akira Mishima
 * @since 2009/12/04
 */


var config = {
  "map_id": "office_map",
  "center_lat": 36.25,
  "center_lng": 133.27,
  "zoom": 12,
  "icon_min_zoom": 10,           // 指定以上の縮尺でアイコンを表示
  "offices": [
    { "name": "隠岐の島町役場（本庁）", "lat": 36.209018, "lng": 133.321962 },
    { "name": "布施支所", "lat": 36.293663, "lng": 133.357136 },
    { "name": "五箇支所", "lat": 36.290193, "lng": 133.227773 },
    { "name": "都万支所", "lat": 36.19698,  "lng": 133.235219 },
    { "name": "中出張所", "lat": 36.321691, "lng": 133.304903 }
  ]
};


var map = null;         // GMap2オブジェクト
var mgr = null;         // MarkerManagerオブジェクト
var icons = [];         // アイコン種別配列



/**
 * 事務所アイコン取得
 * 
 * 指定画像をセットしたアイコンを生成し、返す。
 */
function getOfficeIcon() {
  if (!icons[0]) {
    var icon = new GIcon();
    icon.image = "img/town_office.gif";
    icon.iconAnchor = new GPoint(13, 32);
    icon.infoWindowAnchor = new GPoint(13, 16);
    icon.iconSize = new GSize(26, 32);
    icon.shadow = "img/shadow.png";
    icon.shadowSize = new GSize(43, 32);
    
    icons[0] = icon;
  }
  return icons[0];
}


/**
 * 事務所マーカー生成
 * 
 * 指定地点のマーカーを生成し、返す。
 * ※クリック時のイベント等はここで指定する。
 */
function createOfficeMarker(office) {
  var marker = new GMarker(new GLatLng(office.lat, office.lng), { icon: getOfficeIcon() });
  
  GEvent.addListener(marker, "click", function() {
    if (map.getZoom < config.detail_zoom) map.setZoom(config.detail_zoom);
    map.setCenter(marker.getPoint());
    marker.openInfoWindowHtml(office.name);
  });
  
  return marker;
}


/**
 * 事務所マーカー取得
 * 
 * 設定された全地点のマーカーを生成し、配列で返す。
 * 
 */
function getOfficeMarkers() {
  var markers = [];
  for (var i in config.offices) {
    markers.push(createOfficeMarker(config.offices[i]));
  }
  return markers;
}


/**
 * 事務所マーカーセットアップ
 * 
 * 設定された全地点のマーカーをMarkerManagerに追加する。
 */
function setupOfficeMarkers() {
  mgr = new MarkerManager(map);
  mgr.addMarkers(getOfficeMarkers(), config.icon_min_zoom);
  mgr.refresh();
}


/**
 * GoogleMaps初期化
 * 
 * GoogleMapsを初期化し、設定された地点にマーカーをセットする。
 */
function initialize() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById(config.map_id));
    map.setCenter(new GLatLng(config.center_lat, config.center_lng), config.zoom);
    
    map.addControl(new GLargeMapControl());       // 大きいマップコントロール
    map.addControl(new GMapTypeControl());        // マップタイプコントロール
    map.addControl(new GScaleControl());          // スケールコントロール
    map.addControl(new GOverviewMapControl());    // オーバービューマップコントロール
//    map.enableScrollWheelZoom();                  // マウスホイールでのズーム有効化
    map.enableContinuousZoom();                   // 滑らかな連続ズーム有効化
    
    // マーカーセット
    // setupOfficeMarkers() ⇒ getOfficeMarkers() ⇒ createOfficeMarker() ⇒ getOfficeIcon()
    window.setTimeout(setupOfficeMarkers, 0);
  }
}



$(document).ready(function(){
  initialize();
});


window.onunload = function() {
  GUnload();
}


