/**
 * gmapper.js (ver. 0.2.3)
 * author: F.Ko-Ji(blog-master@fkoji.com)
 *
 */

/**
 * date 2008/05/29
 * modified by phonogram
 */

document.write('<script type="text/javascript" src="http://maps.google.co.jp/maps?file=api&v=2&key=' + key + '" charset="UTF-8"></script><script type="text/javascript" src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0&amp;key=' + key + '" charset="UTF-8"></script>');

var GMapper = function(map) {
 this.map = map;
}

GMapper.prototype.show = function(id, opts) {
 var self = this;
 var zoom = (opts.zoom) ? opts.zoom : 15;
 var options = {};
 if (opts.width && opts.height) {
  options.size = new GSize(opts.width, opts.height);
 }
 self.map = new GMap2(document.getElementById(id), options);
 self.putControls(opts.control);
 self.geocoding(opts, zoom);
}

GMapper.prototype.putControls = function(control) {
 var self = this;
 if (control == "n") {}
 else if (control == "s") {
  self.map.addControl(new GSmallMapControl());
 } else {
  self.map.addControl(new GLargeMapControl());
 }
 self.map.addControl(new GMapTypeControl());
}

GMapper.prototype.geocoding = function(opts, zoom) {
 var self = this;
 var glocal = new GlocalSearch();
 if (self.map.isLoaded()) {glocal.setCenterPoint(self.map);}
 glocal.setSearchCompleteCallback(null, function() {
  if (glocal.results.length > 0) {
   var qLat = parseFloat(glocal.results[0].lat);
   var qLng = parseFloat(glocal.results[0].lng);
   var latLng = self.getLatLngFromCenter(qLat, qLng, opts.dx, opts.dy);
   self.map.setCenter(new GLatLng(latLng.lat, latLng.lng), zoom);
   if (opts.marker) {
    var marker = new GMarker(new GPoint(latLng.lng, latLng.lat), opts.marker);
    self.map.addOverlay(marker);
    var text;
    if (opts.text) {
     text = opts.text;
    } else {
     text = opts.q;
    }
    GEvent.addListener(marker, "click", function() {
     marker.openInfoWindowHtml(text);
	});
	marker.openInfoWindowHtml(text);
   }
  }
 });
 if (opts.q) {
  glocal.execute(opts.q);
 }
}

GMapper.prototype.getLatLngFromCenter = function(cLat, cLng, dx, dy) {
 var self = this;
 var a = 6378137;
 var latLng = {};
 if (dx) {
  latLng.lng = (dx / (a * Math.cos(cLat * Math.PI / 180))) * (180 / Math.PI) + cLng;
 } else {
  latLng.lng = cLng;
 }
 if (dy) {
  latLng.lat = (dy / a)  * (180 / Math.PI) + cLat;
 } else {
  latLng.lat = cLat;
 }
 return latLng;
}
