﻿/**
 * gmapper.js (ver. 0.2.3)
 * author: F.Ko-Ji(blog-master@fkoji.com)
 *
 */

	document.write('<script type="text/javascript" src="http://maps.google.co.jp/maps?file=api&v=v=2.s&key=' + key + '" charset="utf-8"></script><script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0&amp;key=' + key + '" type="text/javascript" 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 : 14;
	 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 == "on") {
	    var marker = new GMarker(new GPoint(latLng.lng, latLng.lat));
	    self.map.addOverlay(marker);
	    var text;
	    if (opts.text) {
	     text = opts.text;
	    } else {
	     text = opts.n;
	    }
	    GEvent.addListener(marker, 'mouseover', function() {
	    marker.openInfoWindow(document.createTextNode(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;
	}
