// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

// 地図表示(微調整用)
function google_maps_adjustment(id, index, marker_latitude, marker_longitude, zoom, center_latitude, center_longitude, shop_name, shop_address_access) {
  Event.observe(window, "load", function() {
    if (GBrowserIsCompatible()) {
      var map = new GMap2($(id));
      var latlon = new GLatLng(marker_latitude, marker_longitude);
      var center = new GLatLng(center_latitude, center_longitude);
      map.setCenter(center, zoom);

      marker = new GMarker(latlon, {title: shop_name, draggable: true});
      map.addOverlay(marker);

      GEvent.addListener(marker, "dragend", function(point) {
        $("user_map_" + index + "_marker_latitude").value = point.y;
        $("user_map_" + index + "_marker_longitude").value = point.x;
      });

      GEvent.addListener(map, "zoomend", function(zoom) {
        $("user_map_" + index + "_zoom").value = map.getZoom();
      });

      GEvent.addListener(map, "moveend", function() {
        point = map.getCenter();
        $("user_map_" + index + "_center_latitude").value = point.y;
        $("user_map_" + index + "_center_longitude").value = point.x;

        preview_elem = $("preview_" + id);
        if (preview_elem) {
          var map2 = new GMap2(preview_elem);
          map2.setCenter(map.getCenter(), map.getZoom());
        }

      });

      map.addControl(new GMapTypeControl());
      // map.enableContinuousZoom();
      map.enableScrollWheelZoom();
      map.addControl(new GSmallMapControl());

    }
  }, false);
}

// 地図表示
function google_maps_display(id, marker_latitude, marker_longitude, zoom, center_latitude, center_longitude, shop_name, shop_address_access) {
  Event.observe(window, "load", function() {
    if (GBrowserIsCompatible()) {
      var map = new GMap2($(id));
      var latlon = new GLatLng(marker_latitude, marker_longitude);
      var center = new GLatLng(center_latitude, center_longitude);
      map.setCenter(center, zoom);

      marker = new GMarker(latlon, {title: shop_name, draggable: false});
      GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(shop_name + "<br/>" + shop_address_access, {})});
      map.addOverlay(marker);

      map.addControl(new GMapTypeControl());
      map.enableContinuousZoom();
      map.enableScrollWheelZoom();
      map.addControl(new GSmallMapControl());
    }
  }, false);
}

// 一つのチェックボックスと連動して複数の要素の表示を切り替える汎用クラス
//
// 使用例1. c1_toggleのidがついたチェックボックスに連動して下のテーブルのc1の列を表示をon/offするには？
//
// <%= check_box_tag("c1_toggle", 1, true) -%>
//
// <table>
//   <tr>
//     <th class="c1">h1</th>
//     <th class="c2">h2</th>
//   </tr>
//   <tr>
//     <td class="c1">td1</td>
//     <td class="c2">td2</td>
//   </tr>
// </table>
//
// <%= javascript_tag("
//   Event.observe(window, "load", function() {
//     toggle_master = new ToggleMaster({check_box_id: "c1_toggle", selector: ".c1"});
//     toggle_master.run();
//   }, false);
//  ") %>
//

ToggleMaster = Class.create();

// 簡単に使うためのインターフェイス
// Window描画後に発動するのでいつ使ってもよい
ToggleMaster.start = function(check_box_id, selector) {
  Event.observe(window, "load", function() {
    toggle_master = new ToggleMaster({check_box_id: check_box_id, selector: selector});
    toggle_master.run();
  }, false);
}

ToggleMaster.prototype = {
  initialize: function() {
    this.options = Object.extend({
      check_box_id: "c1_toggle", // 親チェックボックス
      selector: ".c1",           // 子供たち。$$()で引ければなんでもOK
      debug: false,
      dummy: 0
    }, arguments[0] || {})
    this.targets = $$(this.options["selector"]);
    this.update();
    this.inspect();
  },

  // 親チェックボックスの状態を子供たちに反映
  update: function() {
    var checked = $(this.options["check_box_id"]).checked;
    this.targets.each(function(value, index) {
      if (checked) {
        value.show();
      } else {
        value.hide();
      }
    })
  },

  // 登録
  run: function() {
    new Form.Element.EventObserver(this.options["check_box_id"], (function(element, checked) {
      this.update();
    }).bindAsEventListener(this));
  },

  inspect: function() {
    if (this.debug) {
      alert($(this.options["check_box_id"]).inspect());
    }
  }
}
