var map;
var xml;

var icon_base = 'iphone/icon_';
var icon_extension = '.png';

var icon = new GIcon();
icon.iconSize = new GSize(30, 30);
icon.iconAnchor = new GPoint(15, 15);
icon.infoWindowAnchor = new GPoint(15, 10);

var geocoder = new GClientGeocoder();

function load (lat, lon, zm) {
  lat = parseFloat(myGetCookie('lat') || lat);
  lon = parseFloat(myGetCookie('lon') || lon);
  zm  = parseInt(myGetCookie('zm') || zm);

  if (GBrowserIsCompatible()) {
    var mapElem = document.getElementById('map');

    map = new GMap2(mapElem);
    map.setCenter(new GLatLng(lat, lon), zm);

    getPoint();

    GEvent.addListener(map, 'click', function(overlay, point) {
      if (! overlay){
        map.panTo(point);
      }
    });

    GEvent.addListener(map, 'moveend', function () {
      getPoint();
    });

    alert('地図をタッチするとその場所へ移動します');
  }
}

function getPoint () {
  var zm = map.getZoom();
  var bounds = map.getBounds();
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();

  var lat = map.getCenter().y;
  var lon = map.getCenter().x;
  var sWLat = southWest.lat();
  var sWLng = southWest.lng();
  var nELat = northEast.lat();
  var nELng = northEast.lng();

  mySetCookie('lat', lat, 30);
  mySetCookie('lon', lon, 30);
  mySetCookie('zm', zm, 30);

  var url = 'xml.cgi?simple=1&ap=1&lat=' + lat + '&lon=' + lon + '&sWLat=' + sWLat + '&sWLng=' + sWLng + '&nELat=' + nELat + '&nELng=' + nELng + '&zm=' + zm;

//  var url_maps = 'http://www.fon.ne.jp/iphone/?lat=' + lat + '&lon=' + lon + '&zm=' + zm;
//  document.getElementById('permalink').href = url_maps;

  if (zm < 10) {
    return;
  }

  GDownloadUrl(url, function(data, responseCode){
    xml = GXml.parse(data);

    if (xml.documentElement) {
      var markers = xml.documentElement.getElementsByTagName('m');

      writePoint();
    } else {
      alert('データの取得に失敗しました');
    }
  });
}

function writePoint () {
  clearPoint();

  var markers = xml.documentElement.getElementsByTagName('p');

  if (markers.length > 500) {
//    alert("発見した AP が 200 を超えました\nAP の探索制限により実態と異なる場合があります");
    if (! confirm("発見した AP が 500 を超えました\n全ての AP を描画しますか？")) {
      return;
    }
  }

  for (var i = 0; i < markers.length; i++) {
    if (markers[i]) {
      var type = markers[i].getAttribute('t');
      var lat  = parseFloat(markers[i].getAttribute('a'));
      var lon  = parseFloat(markers[i].getAttribute('b'));

      icon.image = icon_base + type + icon_extension;

      var marker = new GMarker(new GLatLng(lat, lon), icon);

      map.addOverlay(marker);
    }
  }

  setTimeout(scrollTo, 500, 0, 1);
}

function clearPoint () {
  map.clearOverlays();
}

function searchAddress () {
  var address = prompt('入力した住所や駅に移動します', '');

  if (address != '' && address != null) {
    geocoder.getLatLng(address, function (point) {
      if (! point) {
        alert(address + ' not Found');
      } else {
        map.setCenter(point);
        getPoint();
      }
    });
  } else {
    alert('住所や施設名から検索できます');
  }
}


function mySetCookie(myCookie,myValue,myDay){
   myExp = new Date();
   myExp.setTime(myExp.getTime()+(myDay*24*60*60*1000));
   myItem = "@" + myCookie + "=" + escape(myValue) + ";";
   myExpires = "expires="+myExp.toGMTString();
   document.cookie =  myItem + myExpires;
}

function myGetCookie(myCookie){
   myCookie = "@" + myCookie + "=";
   myValue = null;
   myStr = document.cookie + ";" ;
   myOfst = myStr.indexOf(myCookie);
   if (myOfst != -1){
      myStart = myOfst + myCookie.length;
      myEnd   = myStr.indexOf(";" , myStart);
      myValue = unescape(myStr.substring(myStart,myEnd));
   }
   return myValue;
}
