//
// 地図上の特定の地点への固定リンク
//
function Permalink() {
  this.initialize.apply(this, arguments);
}



//
// コンストラクタ
//
Permalink.prototype.initialize = function(id, map, base_url) {
  this.id = id;
  this.map = map;
  this.base_url = base_url || "";
  
  // DOMエレメントを取得する。
  this.elem = document.getElementById(id);
  if(this.elem == undefined){
    alert("id='"+id+"' の要素が見つかりませんでした。");
    return;
  }
  
  // DOMエレメントにマウスが重なったときのイベントを追加する。
  this.elem.permalink_ = this;
  GEvent.addDomListener(this.elem, "mouseover", function(){
    this.href = this.permalink_.getPermalinkQuery();
  });
  this.elem.href = this.getPermalinkQuery();
  
  // リクエストパラメーターを連想配列に格納する。
  if(window.location.search == ""){
    return;
  }
  var query = window.location.search.substring(1);
  var parms = query.split('&');
  var qsParm = new Array();
  for (var i=0; i<parms.length; i++) {
    var pos = parms[i].indexOf('=');
    if (pos > 0) {
      var key = parms[i].substring(0,pos);
      var val = parms[i].substring(pos+1);
      qsParm[key] = val;
    }
  }
  
  // リクエストパラメーターから取得した緯度経度と縮尺を地図に適用する。
  if(qsParm.ll && qsParm.z){
    var arr_latlng = qsParm.ll.split(",");
    var lat = parseFloat(arr_latlng[0]);
    var lng = parseFloat(arr_latlng[1]);
    var zoom = parseInt(qsParm.z);
    var latlng = new GLatLng(lat, lng);
    this.map.setCenter(latlng, zoom);
  }
  
}



//
// 現在の位置を示すURLのクエリー文字列を取得する。
//
Permalink.prototype.getPermalinkQuery = function(){
  var lat = this.map.getCenter().lat();
  var lng = this.map.getCenter().lng();
  var z = this.map.getZoom();
  var s = "?";

  var query = window.location.search.substring(1);
  var arr = query.split('&');
  var map = {};
  for (var i=0; i<arr.length; i++) {
    var pos = arr[i].indexOf('=');
    if (pos > 0) {
      var key = arr[i].substring(0,pos);
      var val = arr[i].substring(pos+1);
      map[key] = val;
    }
  }

  map.ll = lat+","+lng;
  map.z = z;
  arr = [];

  for (var key in map) {
    arr.push(key + "=" + map[key]);
  }

  var s = this.base_url + "?" + arr.join("&");
  return s;
}


