/*

●v3 リファレンス
http://sites.google.com/site/gmapsapi3/Home/v3_reference

●v3 ジオコーディング
http://sites.google.com/site/gmapsapi3/Home/services

<br /><a href="javascript:void(0);" class="gmap">戻る</a>

*/

(function($){
	
	$.fn.gmap=function(options){
		
		var params=$.extend({
			addresses:[],
			anchor:'a[class="marker"]',
			back:'',
			backid:'back_to_element_from_gmap'
		},options || {});
		
		var self=$(this);
		var geo=new google.maps.Geocoder();
		
		var element=document.getElementById('gmap')
		var map=new google.maps.Map(element,{
			mapTypeId : google.maps.MapTypeId.ROADMAP,
			//center : new google.maps.LatLng(35.618315118641306,139.42252707701874),
			zoom : 13,
			//disableDoubleClickZoom : true,
			scaleControl : true,
			scrollwheel : true
		});
		
		if(geo){
			var marker=[],current,xmin=ymin=999,xmax=ymax=0;
			$.each(params.addresses,function(key,value){
				//var marker=[];
				if(value.address){
					geo.geocode({language:'ja',country:'jp',address:value.address},function(results,status){
						if(status==google.maps.GeocoderStatus.OK){
							xmin=Math.min(xmin,results[0].geometry.location.b);
							ymin=Math.min(ymin,results[0].geometry.location.c);
							xmax=Math.max(xmax,results[0].geometry.location.b);
							ymax=Math.max(ymax,results[0].geometry.location.c);
							
							//map.setCenter(new google.maps.LatLng((xmin+xmax)/2,(ymin+ymax)/2));
							map.fitBounds(new google.maps.LatLngBounds(new google.maps.LatLng(xmin,ymin),new google.maps.LatLng(xmax,ymax)));
							
							marker[key]=new google.maps.Marker({
								position : results[0].geometry.location,
								//position : new google.maps.LatLng(value.lat,value.lng),//緯度・経度指定の暫定処置
								title : 'marker'+key,
								draggable : false,
								map : map,
								zoom : value.zoom//独自に追加
							});
							
							if(params.addresses.length<2) map.setZoom(value.zoom);
							
							var back='';//var back=(params.back) ? '<br /><a href="javascript:void(0);" class="'+params.backid+'">戻る</a>' : '';
							var info=new google.maps.InfoWindow({
								//size : new google.maps.Size(300,300),
								content : value.info+back
							});
							
							google.maps.event.addListener(marker[key],'click',function(){
								if(current) current.close();
								map.setCenter(marker[key].getPosition());
								map.setZoom(marker[key].zoom);
								info.open(map,marker[key]);
								current=info;
								if(params.back){
									$('.'+params.backid).click(function(){
										$.scrollTo($('#'+params.backid+key));
									});
								}
							});
							
							/*
							google.maps.event.addListener(map,'dblclick',function(event){
								marker[key].setPosition(event.latLng);
							});
							*/
							
						}else{
							
							//alert('位置情報を取得できません');
							
						}
					});
					
				}else if(value.lat && value.lng){
					
					//console.log('ok');
					
					marker[key]=new google.maps.Marker({
						position : new google.maps.LatLng(value.lat,value.lng),
						title : 'marker'+key,
						draggable : false,
						map : map,
						zoom : value.zoom//独自に追加
					});
					
					map.setCenter(new google.maps.LatLng(value.lat,value.lng));
					map.setZoom(value.zoom);
					
					var back='';//var back=(params.back) ? '<br /><a href="javascript:void(0);" class="'+params.backid+'">戻る</a>' : '';
					var info=new google.maps.InfoWindow({
						//size : new google.maps.Size(300,300),
						content : value.info+back
					});
					
					google.maps.event.addListener(marker[key],'click',function(){
						if(current) current.close();
						map.setCenter(marker[key].getPosition());
						map.setZoom(marker[key].zoom);
						info.open(map,marker[key]);
						current=info;
						if(params.back){
							$('.'+params.backid).click(function(){
								$.scrollTo($('#'+params.backid+key));
							});
						}
					});
					
				}
			});
		}
		
		if(params.back){
			$(params.back).each(function(n){
				$(this).attr('id',params.backid+n);
			});
		}
		
		//機能しない
		if(params.anchor){
			//console.log('ok 1');
			$('div#aboutUs a').each(function(n){
				//console.log('ok 2');
				$(this).attr('id','marker['+n+']')
					.click(function(){
						var m=eval($(this).attr('id'));
						map.setCenter(m.getPosition());
						map.setZoom(m.zoom);
						google.maps.event.trigger(m,'click');
						$.scrollTo(self);
					});
			});
		}
		
		return this;
		
	}
	
})(jQuery);

		
