﻿/**
 * 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=2&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;
	}
	document.close();

