//
//
//

// ========================================================================
// Google MAP関連の関数
var GMap=null;
var GeoCoder=null;
var GMrk=null;
var GmfSW=false;
var GBnds=new Array(4);
var csMrkAry=new Array();

// ---
var ym=new GIcon();
ym.image="http://labs.google.com/ridefinder/images/mm_20_yellow.png";
ym.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
ym.iconSize = new GSize(12, 20);
ym.shadowSize = new GSize(22, 20);
ym.iconAnchor = new GPoint(6, 20);
ym.infoWindowAnchor = new GPoint(5, 1);

// ---
// 現在の地図の緯度経度の最小値を，大域変数GBndsに設定する
// 設定値は 経度最小値，経度最大値，緯度最証値，緯度最大値の順
function filterByMapBounds() {
	GBnds[0]=0.0;
	GBnds[1]=0.0;
	GBnds[2]=0.0;
	GBnds[3]=0.0;

	var bd=GMap.getBounds();
	var sw=bd.getSouthWest();
	var ne=bd.getNorthEast();

	GBnds[0]=sw.lng(); // 経度最小値
	GBnds[1]=ne.lng(); // 経度最大値
	GBnds[2]=sw.lat(); // 緯度最小値
	GBnds[3]=ne.lat(); // 緯度最大値

	if ( !GmfSW ) { return; }

	// フィルタ処理実行
	doFilter();	
}

// ---
// Google MAPの初期化
function ovvwGmap(target, ux, uy, uz, ishide) {
	var dx=152.0000;
	var dy=35.6813;
	var dz=6;

	var x=dx;
	var y=dy;
	var z=dz;

	if (ux) { x=ux-0; }
	if (uy) { y=uy-0; }
	if (uz) { z=uz-0; }

	// 地図の初期化
	if (GBrowserIsCompatible()) {
		GMap=new GMap2(document.getElementById(target));

		GMap.addControl(new GSmallMapControl());
		GMap.addControl(new GMapTypeControl());
		GMap.addControl(new filterByMap());
		// ovc=new GOverviewMapControl();
		// GMap.addControl(ovc);
		// if (ishide) { ovc.hide(); }

		GMap.setCenter(new GLatLng(y, x), z);

		GEvent.addListener(GMap, "dragend", function(){
			filterByMapBounds();
		});
		GEvent.addListener(GMap, "zoomend", function(){
			filterByMapBounds();
		});
	}
}

// ---
// Google MAPの初期化
function loadGmap(target, ux, uy, uz, ishide) {
	var dx=139.7657;
	var dy=35.6813;
	var dz=6;

	var x=dx;
	var y=dy;
	var z=dz;

	if (ux) { x=ux-0; }
	if (uy) { y=uy-0; }
	if (uz) { z=uz-0; }

	// 地図の初期化
	if (GBrowserIsCompatible()) {
		GMap=new GMap2(document.getElementById(target));

		GMap.addControl(new GSmallMapControl());
		GMap.addControl(new GMapTypeControl());
		ovc=new GOverviewMapControl();
		GMap.addControl(ovc);
		// if (ishide) { ovc.hide(); }

		GMap.setCenter(new GLatLng(y, x), z);
		GeoCoder=new GClientGeocoder();

		// defaultの位置でなければ，markerを置く
		if (x!=dx || y!=dy) { putMarker(x, y); }

		// set event handler for mouse click
		GEvent.addListener(GMap, "click", function(marker, point){
			if (point) {
				putMarker(point.x, point.y);
			}
		});
	}
}

// ----
function putMarker(x, y) {
	if (GMrk) {
		GMap.removeOverlay(GMrk);
		GMrk=null;
	}

	GMrk=new GMarker(new GPoint(x, y));
	GMap.addOverlay(GMrk);
	GMap.panTo(new GLatLng(y, x));

	var tf=document.getElementById('ido');
	if (tf) { tf.value=y; }
	tf=document.getElementById('kdo');
	if (tf) { tf.value=x; }
}

// ----
function clearAllMarkers() {
	GMap.clearOverlays();
	delete csMrkAry;
	csMrkAry=null;
	csMrkAry=new Array();
}

// ----
// リスト表示の上にある地図に，会議開催地のmarkingを置くための関数
function putSmallMarker(obj) {
	var x=obj["kdo"];
	var y=obj["ido"];
	if (x.length<1 || y.length<1) { 
		// alert('location data not found for '+obj["title"]);
		return; 
	}

	var ll=new GLatLng(y, x);

	GMrk=new GMarker(ll, { icon:ym, title:obj["title"] });
	if (!GMrk) { 
		alert('Error: failed to make a marker'); return; 
	}
	obj.marker=GMrk;
	GMrk=null;
	GEvent.addListener(obj.marker, "click", function(){
		obj.marker.openInfoWindowHtml(genInfoHTML(obj));
	});
	GMap.addOverlay(obj.marker);
}

function putSmallMarker2(ido,kdo,html) {
	if (kdo.length<1 || ido.length<1) { 
		// alert('location data not found for '+obj["title"]);
		return; 
	}

	var ll=new GLatLng(ido, kdo);

	GMrk=new GMarker(ll, { icon:ym });
	if (!GMrk) { 
		alert('Error: failed to make a marker'); return; 
	}

	var marker=GMrk;
	GMrk=null;
	GEvent.addListener(marker, "click", function(){
		marker.openInfoWindowHtml(html);
	});
	GMap.addOverlay(marker);

	csMrkAry.push(marker);
}

// ---
function makeItCenter(rowid) {
	return false;

	var rw=dsEvts.getRowByID(rowid);
	if (!rw) {
		alert('failed to get a data entry.'); return;
	}

	if (rw.marker) {
		rw.marker.openInfoWindow(genInfoHTML(rw));
	}
}

// ----
// 吹き出し用のHTMLを生成する関数
function genInfoHTML(obj) {
	var cont='';

	cont+='<div align="center">';
	cont+='<a href="'+obj["url"]+'" target="_blank">'+obj["title"]+'</a>';
	cont+='<br />';
	cont+='<input type="button" value="Show detail" onclick="goToDetail('+obj["id"]+');" />';
	cont+='</div>';

	return cont;
}

// ----
// マーカーを削除し，緯度/経度の値をクリアする
function undefLatLng() {
	if (GMrk) {
		GMap.removeOverlay(GMrk);
		GMrk=null;
	}

	var tf=document.getElementById('ido');
	if (tf) { tf.value='' }
	tf=document.getElementById('kdo');
	if (tf) { tf.value=''; }
}

// ----
// geocoderの結果を地図に表示する
function showAddress() {
	var addr;

	var tg=document.getElementById('jyusho');
	if (tg && tg.value) { addr=tg.value; }
	if (!addr || addr.length < 1) { return; }

	GeoCoder.getLatLng(
		addr,
		function(point) {
			if (!point) {
				alert(addr+' not found!');
			} else {
				GMap.setCenter(point, 6);
				putMarker(point.x, point.y);
			}
		}
	);

}

// ---
// 表示のみのGoogle MAP初期化
function showPos(target, ux, uy, uz) {
	// 地図の初期化
	if (GBrowserIsCompatible()) {
		GMap=new GMap2(document.getElementById(target));
		GMap.addControl(new GSmallMapControl());

		GMap.setCenter(new GLatLng(uy, ux), uz);

		GMrk=new GMarker(new GPoint(ux, uy));
		GMap.addOverlay(GMrk);

		GEvent.addListener(GMap, "dragend", function(){
			setTimeout(function(){ GMap.panTo(new GLatLng(uy, ux)); }, 3000);
		});
	}
}

// ---
// custom control for Filter by Map button
//
function filterByMap() {
}
filterByMap.prototype=new GControl();

filterByMap.prototype.initialize = function (map){
	var filterDiv = document.createElement("div");

	this.setButtonStyle_(filterDiv);
	filterDiv.appendChild(document.createTextNode("Map filter"));
	GEvent.addDomListener(filterDiv, "click", function (){
		if ("white"==filterDiv.style.backgroundColor) { 
			filterDiv.style.backgroundColor="yellow";
			setLocFilter(); // 位置フィルタ
			GmfSW=true;
			filterByMapBounds();
		} else {
			filterDiv.style.backgroundColor="white";
			unsetLocFilter();
			filterByMapBounds();
			GmfSW=false;
		}
	});

	map.getContainer().appendChild(filterDiv);
	return filterDiv;
}

filterByMap.prototype.getDefaultPosition = function () {
	var rightPos=190; // for Firefox
	//rightPos=205; // for Safari 
	return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(rightPos, 7));
}

filterByMap.prototype.setButtonStyle_ = function (button) {
	// button.style.textDecoration="underline";
	button.style.color="#0000cc";
	button.style.backgroundColor="white";
	button.style.font="small Arial";
	button.style.fontSize="9pt";
	button.style.fontWeight="bold";
	button.style.border="1px solid black";
	button.style.padding="1px";
	// button.style.marginBottom="3px";
	button.style.textAlign="center";
	button.style.width="6em";
	button.style.cursor="pointer";
}

// --- end of definition of custom control 

//
// ends here
//
