
/* -------------------------------------------------------------------------- **
**  jQuery Google Map
** -------------------------------------------------------------------------- */

;(function ($) {
	if (typeof google == "undefined") {
		$.fn.gmap = function () {};
		return;
	}
	
	$.gmap	= {
		settings			: {},
		maps				: {},
		directionsDisplay	: new google.maps.DirectionsRenderer(),
		infowindows			: [],
		markers				: [],
		latlngBounds		: {},
		count				: 0,
		build				: function (options) {
			
			var elements	= this;
			//var id			= $(this).attr("id");
			
			settings		= $.extend({}, $.gmap.defaults, options || {});
			
			$.gmap.init(elements, settings, function () {
				return elements.each(function (index, elem) {
					$.gmap.setup(elem, settings);
				});
			});
			
		},
		defaults			: {
			zoom					: 4,
			center					: new google.maps.LatLng(36.204824,138.252924),
			mapTypeControlOptions	: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU },
			mapTypeId				: google.maps.MapTypeId.ROADMAP,
			navigationControl		: true,
			navigationControlOptions: { style: google.maps.NavigationControlStyle.SMALL },
			scaleControl			: true
		},
		init				: function (target, settings, callback) {
			callback();
		},
		setup				: function (target, settings) {
			$.gmap.maps	= new google.maps.Map($(target).get(0), settings);
			$.gmap.setMaker(settings.markers);
			$.gmap.directionsDisplay.setMap($.gmap.maps);
		},
		setMaker			: function (markers) {
			
			if (typeof markers == "undefined") { return; }
			
			if (!$.isArray(markers)) { markers = [markers]; }
			
			var maps = $.gmap.maps;
			var marker, m, latlng;
			for (var i = 0; i < markers.length; i++) {
				m		= markers[i];
				latlng	= new google.maps.LatLng(m.lat, m.lng);
				marker	= new google.maps.Marker({
					map		: maps,
					position: latlng,
				});
				$.gmap.markers.push(marker);
				$.gmap.geocode({latLng:latlng});
				$.gmap.attachSecretMessage(marker, m.content);
			}
			
		},
		addMaker			: function () {
			console.log("addMaker");
			console.log($.gmap);
		},
		geocode				: function (options) {
			var geocoder = new google.maps.Geocoder();
			geocoder.geocode(options, function(results, status) {
				if (status == google.maps.GeocoderStatus.OK) {
					var geometry	= results[0].geometry;
					var bounds		= $.gmap.getBounds(geometry.viewport);
					$.gmap.maps.fitBounds(bounds);
				}
			});
		},
		attachSecretMessage	: function (marker, content) {
			var infowindow = new google.maps.InfoWindow({
				content		: content,
				maxWidth	: 300
			});
			$.gmap.infowindows.push(infowindow);
			google.maps.event.addListener(marker, 'click', function() {
				for (var i in $.gmap.infowindows) { $.gmap.infowindows[i].close(); }
				infowindow.open($.gmap.maps, marker);
			});
		},
		openInfowindow		: function (latlng) {
			for (var i = 0; i < $.gmap.markers.length; i++) {
				if ($.gmap.markers[i].position.equals(latlng)) {
					for (var l in $.gmap.infowindows) { $.gmap.infowindows[l].close(); }
					$.gmap.infowindows[i].open($.gmap.maps, $.gmap.markers[i]);
					break;
				}
			}
		},
		getBounds			: function (viewport) {
			var bounds	= $.gmap.latlngBounds;
			//北東
			var NE		= viewport.getNorthEast();
			//南西
			var SW		= viewport.getSouthWest();
			
			var lat, lng;
			if (bounds['NE']) {
				lat				= Math.max(bounds['NE'].lat(), NE.lat());
				lng				= Math.max(bounds['NE'].lng(), NE.lng());
				bounds['NE']	= new google.maps.LatLng(lat,lng);
			} else {
				bounds['NE']	= NE;
			}
			if (bounds['SW']) {
				lat				= Math.min(bounds['SW'].lat(), SW.lat());
				lng				= Math.min(bounds['SW'].lng(), SW.lng());
				bounds['SW']	= new google.maps.LatLng(lat,lng);
			} else {
				bounds['SW']	= SW;
			}
			
			return new google.maps.LatLngBounds(bounds['SW'], bounds['NE']);
		}
	};
	
	$.fn.extend({
		gmap			: $.gmap.build,
		gmapAddMaker	: $.gmap.addMaker
	});
	
})(jQuery);


(function ($) {
	$(document).ready(function () {
		if (typeof google == "undefined") {
			$('.mapwrap').hide();
			return;
		}
		var markers = [];
		if ($("a.gmap").length) {
			$("a.gmap").each(function (index, element) {
				var latlng	= $(this).attr("title").replace(/^#/,'');
				$(this).attr("title", "");
				var m		= latlng.split(',');
				var content	= $(".exp", this).clone().removeClass("exp").get(0);
				
				$(this).hover(function () {
					$.gmap.openInfowindow(new google.maps.LatLng(m[0],m[1]));
					return false;
				},function () {});
				markers.push({
					lat:m[0],
					lng:m[1],
					content:content
				});
			});
		}
		
		if ($(".mapwrap").attr("title")) {
			var title	= $(".mapwrap").attr("title");
			$(".mapwrap").attr("title", "");
			var data	= title.split(",");
			markers.push({
				lat:data[0],
				lng:data[1],
				content:"<span><strong>"+data[2]+"</strong><br />"+data[3]+"</span>"
			});
		}
		
		$('.mapcanvas').gmap({ markers: markers });
		
		/*$('.mapcanvas').gmap({
			markers:[
				{ lat : 34.6862722, lng : 135.5260021, content : "<span><strong>大阪城</strong><br />大阪府大阪市中央区大阪城1</span>" },
				{ lat : 34.7069612, lng : 135.4990984, content : "<span><strong>NU茶屋町</strong><br />大阪府大阪市北区茶屋町10-12</span>" },
				{ lat : 34.6697626, lng : 135.5011603, content : "<span><strong>Ryugu亭</strong><br />大阪府大阪市中央区心斎橋筋2-5-2</span>" },
				{ lat : 34.6710013, lng : 135.4904251, content : "<span><strong>D&amp;DEPARTMENT PROJECT OSAKA</strong><br />大阪府大阪市西区南堀江2-9-14</span>" },
				{ lat : 34.6743481, lng : 135.4939386, content : "<span><strong>CHARKHA</strong><br />大阪府大阪市西区北堀江1-21-11</span>" },
				{ lat : 34.6688571, lng : 135.5023047, content : "<span><strong>づぼらや</strong><br />大阪府大阪市中央区道頓堀1-6-10</span>" }
			]
		});
		$('a[class=gmap]').click(function () {
			var href	= $(this).attr("href").replace(/^#/,'');
			var m		= href.split(',');
			$.gmap.openInfowindow(new google.maps.LatLng(m[0],m[1]));
			return false;
		});*/
	});
})(jQuery);

