//********************************************************************************
//
// GoogleMAPs API用 共通ライブラリ for GoogleMaps API version 2
// 
// 2006/9/9 Created By Koji Kimura @ STARRYWORKS inc. kimura@starryworks.jp
// 
//********************************************************************************
// 
// ■主な機能
// 　・GoogleMapを表示する
// 　・イベントリスナーを設定してサーバーにクエリーを送信してXMLデータを受信する
// 　・
// 　・XMLをパースしてデータを表示する
// 　・XMLデータ中のXHTMLテキストをそのまま取得する
// 
// ■注意事項
// ※prototype.js（version 1.4.0）が必要
// ※GxMarkerを改良してマウスオーバーでTooltipを表示し、クリックでページ移動
// ※読み込むHTMLファイル側または外部JSファイルで以下の設定が必要
// 
// ■チェック済みブラウザ一覧（2006/9/12現在）
// 
//   【Browser】		【Version】			【OS】				【Status】
//
// ※Mac OSX
//
// ・Safari				2.0.4				MacOS X 10.4.7		OK
// ・FireFox			1.0.7				MacOS X 10.4.7		OK
// ・Netscape			7.1					MacOS X 10.4.7		OK
// ・InternetExplorer	5.2					MacOS X 10.4.7		未対応
// 
// ※Windows XP Pro
//
// ・FireFox			1.5.0.6				Windows XP Pro SP2	OK
// ・Netscape			7.1					Windows XP Pro SP2	OK
// ・Opera				9.01				Windows XP Pro SP2	setEventToObjectsでイベントを指定できない、ズームした時にmoveendイベントが発生しない
// ・InternetExplorer	6.0.2900.2180 SP2	Windows XP Pro SP2	OK
// ・InternetExplorer	7.0.5450.4 beta3	Windows XP Pro SP2	OK
// 
//********************************************************************************



//********************************************************************************
//GoogleMAPs API用 共通ファンクション
//********************************************************************************

//############################################################
//グローバル変数宣言
//############################################################
var gMapDebug = false;		//デバッグモード　trueにするとcatchしたエラーをalert()で表示
var mapObj;					//GMap2のインスタンス
var httpObj;				//HTTPRequest
var loadingStatus = false;	//XMLのロード中やXMLデータの解析中にイベントが発生した時のための変数
var gxMarkerArray = new Array();
var currentPrfCd = null;
var noUpdate = false;
var modMarker = null;
//############################################################
//マップを表示する
//############################################################

function loadMap(objID,mapX,mapY,zoom,controls) {
	mapObj = new GMap2($(objID));//GoogleMapsメイン version2
	mapObj.setCenter(new GLatLng(mapY,mapX), zoom); //version2
	mapObj.enableContinuousZoom();
	controls.each(function(control) { eval("mapObj.addControl(new "+control+"());"); } ); //マップコントローラ表示
	return (mapObj); //GoogleMapsデータを返す
}

function input2form(mapObj,mrk,loading_x,loading_y,icon){
	GEvent.addListener(mapObj, 'click', function(overlay, point){
		pointStr = point+"";
		arr = pointStr.split(',');
		xStr = arr[1];
		yStr = arr[0];
		x = xStr.replace(' ','').replace(')','');
		y = yStr.replace(' ','').replace('(','');
		xObj = document.getElementById('bt_map_x');
		yObj = document.getElementById('bt_map_y');
		xObj.value = x;
		yObj.value = y;
		modMarker = moveMarker(mapObj, modMarker,x, y, "<b>この場所にアイコンが表示されます。</b>",icon);
	});
	
	if(mrk){
		modMarker = addMarker(mapObj, loading_x, loading_y, "<b>この場所にアイコンが表示されます。</b>",icon);
	}
}

//############################################################
//############################################################

//登録画面 : マーカーを作成、表示するファンクション
function addMarker(map, lat, lng, html, icon) {
	var point = new GPoint(lat, lng);
	var loading_point = new GPoint(lat,lng);
	if ( icon != null ) {
		var myicon = new GIcon();//マーカアイコン
		icon.image = 
		myicon.image = "/images/bbs/icon/"+icon;
		myicon.iconSize = new GSize(50,40);
		myicon.iconAnchor = new GPoint(15,40);
		myicon.infoWindowAnchor = new GPoint(15,10);
		var marker = new GMarker(point,myicon);
	} else {
		var marker = new GMarker(point);
	}
	if ( html != null ) {
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
			//marker.showMapBlowup(loading_point,10,G_SATELLITE_TYPE);
		});
	}
	map.addOverlay(marker);
	return(marker);
	
}
//登録画面 : マーカーを非表示にするファンクション
function removeMarker(map,marker) {
	map.removeOverlay(marker);
}
//登録画面 : マーカーを移動するファンクション
function moveMarker(map,marker,lat,lng,html,icon) {
	if ( marker != null ) {
		removeMarker(map,marker);
	}
	return(addMarker(map,lat,lng,html,icon));
}


//############################################################
//############################################################


//############################################################
//現在の表示位置を取得してXMLファイルをロード
//############################################################
function getSpanAndLoadXML() {
	if ( gMapDebug ) alert("getSpanAndLoadXML");
	if ( loadingStatus ) {
		if ( gMapDebug ) alert("loadingStatus is true");
		return;
	}
	if ( noUpdate ) {
		if ( gMapDebug ) alert("noUpdate is true");
		noUpdate = false;
		return;
	}
	loadingStatus = true;
	if ( typeof(mapObj) != 'object' ) {
		if ( gMapDebug ) { alert("GoogleMapオブジェクト「mapObj」が見つかりません。"); }
		loadingStatus = false;
		return;
	}
	//表示範囲取得
	var wBounds = mapObj.getBounds();
	var sw = wBounds.getSouthWest();
	var ne = wBounds.getNorthEast();
	var bounds = {
		xmin: sw.lng(),
		ymin: sw.lat(),
		xmax: ne.lng(),
		ymax: ne.lat()
	};
	var hBounds = $H(bounds);
	var query = hBounds.toQueryString();
	//追加パラメータのある場合
	if ( typeof(xmlAdditionialParams) == 'object' ) {//xmlAdditionalParamsがオブジェクトの場合
		query = query+'&'+getAdditionialParams(xmlAdditionialParams);
	}
	if ( !getSpanAndLoadXMLExected ) {
		query = query+'&first=1';
	}
	loadXMLFile(getSpanAndLoadXMLURL+'?'+query);
	getSpanAndLoadXMLExected = true;
}

//############################################################
//マップを利用不可にする
//############################################################
function disableMap() {
	mapObj.disableDragging();
}

//############################################################
//マップを利用可能にする
//############################################################
function enableMap() {
	mapObj.enableDragging();
}

//############################################################
//現在表示されているマーカーをすべて消す
//############################################################
function removeAllMarkers() {
	try {
		gxMarkerArray.each( function(markerObj) {
			if ( markerObj ) {
				markerObj.hideTooltip();
				markerObj.removeTooltip();
				markerObj.remove();
			}
		});
		mapObj.clearOverlays();
	} catch(e) {
		if ( gMapDebug ) { alert("マーカーを削除する際にエラーが発生しました"+e); }
	}
}


//############################################################
//現在表示されているTooltipをすべてか隠す
//############################################################

function hideAllTooltips() {
	try {
		gxMarkerArray.each( function(markerObj) {
			markerObj.hideTooltip();
		});
	} catch(e) {
		if ( gMapDebug ) { alert("ツールティップを非表示にする際にエラーが発生しました"+e); }
	}
}


//############################################################
//複数のオブジェクトにイベントを設定する
//############################################################
function setEventToObjects(objectsArray,typeOfEvent,func) {
	objectsArray.each( function(objID) {
		try {
			eval("$(objID)."+typeOfEvent+"=func");
		} catch(e) {
			try {
				if ( typeof($(objID).captureEvents) == "function" )  {
					$(objID).captureEvents(Event.FOCUS | Event.BLUR | Event.CHANGE | Event.MOUSEOVER | Event.MOUSEOUT | Event.MOUSEMOVE);
				}
				if ( typeof($(objID).addEventListener) == "function" ) {
					$(objID).addEventListener(typeOfEvent,func,true);
				}
			} catch(e) {
				if ( gMapDebug ) {
					alert("オブジェクト（"+objID+"）またはイベント（"+typeOfEvent+"）またはファンクション（"+func+"）が見つかりません。");
				}
				return;
			}
		}
	} );
}

//############################################################
//検索フォームのパラメータ取得
//############################################################
function getAdditionialParams(params) {
	if ( ! params.length ) { return; }
	paramsArray = new Array();
	params.each(
		function(param) {
			try {
				paramsArray[param] = $F(param);
			} catch(e) {
				if ( gMapDebug ) { alert("指定されたID（"+param+"）のオブジェクトが見つかりません。"+e); }
			}
		}
	);
	paramsHash = $H(paramsArray);
	return(paramsHash.toQueryString());
}

//############################################################
//XMLファイルをロード
//############################################################
function loadXMLFile(fName){
	httpObj = createXMLHttpRequest(xmlOnLoad);
	if (httpObj){
		httpObj.open("GET",fName,true);
		httpObj.send(null);
	}else {
		alert("XMLhttpObjectを作成できません。");
	}
}


//############################################################
//ローディング中の画面表示
//############################################################
function dispOnLoadingText() {
	try {
		var obj = $(gMapResultContainerID);
		if ( obj == null ) {
			throw("取得したオブジェクトはnullです。");
		}
		try {
			obj.innerHTML = gMapOnLoadingText;
		} catch(e) {
			if ( gMapDebug ) { 
				alert("ローディング中に表示するテキスト（gMapOnLoadingText）が設定されていません。");
			}
			return;
		}
	} catch(e) {
		if ( gMapDebug ) { 
			alert("指定されたID（"+gMapResultContainerID+"）のオブジェクトが見つかりません。"+e);
		}
		return;
	}
	try {
		if ( gMapStatusContainerID != null ) {
			var obj = $(gMapStatusContainerID);
			if ( obj == null ) {
				throw("取得したオブジェクトはnullです。");
			}
		}
		try {
			obj.innerHTML = gMapStatusOnLoadingText;
		} catch(e) {
			if ( gMapDebug ) { 
				alert("ローディング中に表示するテキスト（gMapStatusOnLoadingText）が設定されていません。");
			}
			return;
		}
	} catch(e) {
		if ( gMapDebug ) { 
			alert("指定されたID（"+gMapStatusContainerID+"）のオブジェクトが見つかりません。"+e);
		}
		return;
	}
}

//############################################################
// HTTP通信用、共通関数
//############################################################
function createXMLHttpRequest(cbFunc){
	var XMLhttpObject = null;
	try{
		XMLhttpObject = new XMLHttpRequest();
	} catch(e) {
		try{
			XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				if ( gMapDebug ) { alert("XMLHttpRequestオブジェクトが生成できません"+e); }
				return null;
			}
		}
	}
	if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
	return XMLhttpObject;
}

//############################################################
//XMLノードの内容をそのままタグの文字列として返す
//############################################################
function getXMLInnerText(element) {
	if ( element.childNodes.length == 1 ) {
		if ( element.firstChild.tagName == undefined ) {
			return(element.firstChild.nodeValue);
		}
	}
	var rs = "";
	var i;
	var j;
	var len = element.childNodes.length;
	for ( i=0; i<len; i++ ) {
		var node = element.childNodes[i];
		if ( node.tagName != undefined ) {
			rs = rs+"<"+node.tagName;
			if (node.hasAttributes() ) {
				for ( j=0; j<node.attributes.length; j++ ) {
					rs = rs+' '+node.attributes[j].name+'="'+node.attributes[j].value+'"';
				}
			}
			if ( node.childNodes.length == 0 ) {
				rs = rs+" />";
			} else {
				rs = rs+">";
				rs = rs+getXMLInnerText(node);
				rs = rs+"</"+node.tagName+">";
			}
		} else {
			rs = rs+node.nodeValue;
		}
	}
	return(rs);
}

//********************************************************************************
// ビバタウン板宿　地図検索用　GoogleMAPsファンクション
// http://www.vivatown.jp/ （/bbs/）
//********************************************************************************

//############################################################
//XMLファイルをパースしてデータを表示
//############################################################
var ParseXMLAndDispData = function() {
	if ((httpObj.readyState == 4) && (httpObj.status == 200)){//HTTPレスポンスコードが200でロードが完了している場合
		//****************************************
		//XMLデータの取得
		//****************************************
		var xmlRoot = httpObj.responseXML.documentElement;
		try {
			var koukokuNodes = xmlRoot.childNodes;
			var resultNodes = xmlRoot.getElementsByTagName("result");
			var dataNodes = xmlRoot.getElementsByTagName("resultdata");
			var tooltipNodes = xmlRoot.getElementsByTagName("tooltip");
			var infoNodes = xmlRoot.getElementsByTagName("info");
			if ( ! resultNodes || ! resultNodes || ! tooltipNodes || ! infoNodes ) { throw("XMLデータがありません。"); }
			//ヘッダとフッタ
			var resultHeader = getXMLInnerText(xmlRoot.getElementsByTagName("resultheader")[0]);
			var resultFooter = getXMLInnerText(xmlRoot.getElementsByTagName("resultfooter")[0]);
			var statusNodes = xmlRoot.getElementsByTagName("status");
		} catch(e) {
			if ( gMapDebug ) { alert("XMLデータの解析中にエラーが発生しました。"+e); }
			removeAllMarkers();
			loadingStatus = false;
			return;
		}
		var maxBoundsLat;
		var maxBoundsLng;
		var minBoundsLat;
		var minBoundsLng;
		var i;
		//****************************************
		//<status>タグのデータを書き出し
		//****************************************
		//結果を表示する要素を取得
		if ( typeof(gMapStatusContainerID) != "undefined" && gMapStatusContainerID != null) {
			try {
				var stObj = $(gMapStatusContainerID);
				if ( stObj == null ) { throw("取得したオブジェクトはnullです。"); }
			} catch(e) {
				if ( gMapDebug ) { 
					alert("指定されたID（"+gMapStatusContainerID+"）のオブジェクトが見つかりません。"+e);
				}
				loadingStatus = false;
				return;
			}
		}
		//各データの読み出し
		var statusText = "";
		if ( stObj ) {
			statusText = getXMLInnerText(statusNodes[0])+'<br class="clear0" />';
			//検索結果一覧にテキストをセット
			stObj.innerHTML = statusText;
		}
		//****************************************
		//<result>タグのデータを書き出し
		//****************************************
		//結果を表示する要素を取得
		if ( typeof(gMapResultContainerID) != "undefined" ) {
			try {
				var rsObj = $(gMapResultContainerID);
				if ( rsObj == null ) { throw("取得したオブジェクトはnullです。"); }
			} catch(e) {
				if ( gMapDebug ) { 
					alert("指定されたID（"+gMapResultContainerID+"）のオブジェクトが見つかりません。"+e);
				}
				loadingStatus = false;
				return;
			}
		}
		//各データの読み出し
		var resultText = "";
		if ( rsObj ) {
			for ( i=0; i<resultNodes.length; i++ ) {
				//resultタグ内のデータをタグのまま書き出す
				resultText = resultText+getXMLInnerText(resultNodes[i]);
			}
			resultText = resultText+'<br class="clear0" />';
			//検索結果一覧にテキストをセット
			rsObj.innerHTML = resultHeader+resultText+resultFooter;
		}
		//****************************************
		//マーカーの配置
		//****************************************
		//ToolTipの位置指定のため、中心座標取得
		var wCenter = mapObj.getCenter();
		var xCenter = wCenter.lng();
		var yCenter = wCenter.lat();
		removeAllMarkers();
		//各データの読み出し
		for ( i=0; i<dataNodes.length; i++ ) {
			try {
				//座標取得
				var x = dataNodes[i].getAttribute("x");
				var y = dataNodes[i].getAttribute("y");
				//移動用
				if ( ! maxBoundsLat ) { maxBoundsLat = y; }
				else if ( maxBoundsLat < y ) { maxBoundsLat = y; }
				if ( ! minBoundsLat ) { minBoundsLat = y; }
				else if ( minBoundsLat > y ) { minBoundsLat = y; }
				if ( ! maxBoundsLng ) { maxBoundsLng = x; }
				else if ( maxBoundsLng < x ) { maxBoundsLng = x; }
				if ( ! minBoundsLng ) { minBoundsLng = x; }
				else if ( minBoundsLng > x ) { minBoundsLng = x; }
				//種別取得
				try {
					var dataType = dataNodes[i].getElementsByTagName("type")[0].getAttribute("value");
				} catch(e) {
					var dataType = null;
				}
				//リンク先
				try {
					var link = dataNodes[i].getElementsByTagName("link")[0].firstChild.nodeValue;
				} catch(e) {
					var link = null;
				}
			} catch(e) {
				if ( gMapDebug ) { alert("XMLデータの解析中にエラーが発生しました"+e); }
				continue;
			}
			//
			//マーカーの配置
			point = new GPoint(x,y); //座標指定
			var icon = new GIcon(); //アイコン指定
			//広告の種別によってアイコンを変更
			if ( dataType != "" ) {
				icon.image = "/images/bbs/icon/icon"+dataType+".png";
			}
			try {
				icon.iconSize = new GSize(50,40); //アイコンサイズ指定
				icon.iconAnchor = new GPoint(15,40); //アイコン位置指定
				icon.infoWindowAnchor = new GPoint(15,10); //インフォウィンドウの位置指定
				
				/***************************************************
				普通のGMapオブジェクトバージョン（tooltipなし）
				***************************************************/
				/*
				//マーカーオブジェクトの作成
				var marker = new GMarker(point,icon); //マーカー GMarker(座標,アイコン)
				//ToolTipの位置指定
				var xOffset = ( x > xCenter ) ? -184 : 0;
				var yOffset = ( y > yCenter ) ? -160 : 0;
				mapObj.addOverlay(marker);
				//イベントの設定
				GEvent.addListener(marker,"click",function() { document.location.href=link; });
				*/
				
				/***************************************************
				GxMarkerを使ったバージョン
				※GoogleMap APIライブラリ→GxMarkerライブラリ→このファイル
				の順番に読み込む
				***************************************************/
				//ToolTipの位置指定
				var xOffset = ( x >= xCenter ) ? -1 : 0;
				var yOffset = ( y >= yCenter ) ? 0 : -1;
				//tooltipタグ内のデータをタグのまま書き出す
				var infoText = getXMLInnerText(infoNodes[i]);
				//tooltipタグ内のデータをタグのまま書き出す
				var toolTipText = getXMLInnerText(tooltipNodes[i]);
				//マーカー GxMarker(座標,アイコン,表示HTMLテキスト,x座標補正値,y座標補正値,クリックした時のリンク先)
				//第４引数以降はGxMarkerを改良した独自拡張機能
				var marker = new GxMarker(point,icon,toolTipText,xOffset,yOffset,link,infoText);
				//var marker = new GxMarker(point,null,toolTipText,xOffset,yOffset,link,infoText);
				gxMarkerArray.push(marker);
				//var marker = new GMarker(point);
				mapObj.addOverlay(marker);
			} catch(e) {
				if ( gMapDebug ) { alert("マーカーとtooltipの配置処理中にエラーが発生しました"+e); }
			}
		}
		loadingStatus = false;
		//ビバタウン板宿専用
		fixHeight();
	}else{
		dispOnLoadingText();
	}
}


//********************************************************************************
//改良済みGxMarker
//********************************************************************************
/*
 GxMarker version 1.2

 SYNOPSIS
	This version is compatible with Google Maps API Version 2

	A more full-featured marker that supports tooltips and hover events.  The
	first iteration just supports triggering of mouse over events, and tooltips.
   
	To setup a tooltip, pass in a third parameter (after the icon) to the
	GxMarker class:
		var marker = new GxMarker( new GPoint(lat,lng), icon, "My Tooltip" );
		map.addOverlay(marker);

	Or:
		var marker = new GxMarker( new GPoint(lat,lng) );
		marker.setTooltip("My Tooltip");
		map.addOverlay(marker);

	As of 1.1, changes to setTooltip() should work after the initial invocation

	Please refer to http://code.toeat.com/package/gxmarker for additional
	documentation.
	
	TESTED PLATFORMS:
		Linux: Firefox
		Windows: Firefox, IE6
		Mac OS X (Panther): Safari

	There is no warranty of functionality of this code, if you wish to use it
	and it does not work for you, I recommend you submit a patch.  This software
	is licensed under the GNU Lesser General Public License (LGPL):
	the full text at: http://opensource.org/licenses/lgpl-license.php
	
	Update: 04/07/06 - modified to load with API v2.44+ of the Google Maps API
	Modified by Robert Aspinall - raspinall (AT) gmail (dot) com
*/

function GxMarkerNamespace() {
	
	var gxMarkerDebug = false;
	var n4=(document.layers);
	var n6=(document.getElementById&&!document.all);
	var ie=(document.all);
	var o6=(navigator.appName.indexOf("Opera") != -1);
	var safari=(navigator.userAgent.indexOf("Safari") != -1);
	var currentSpan = new GBounds();
	
	function setCursor( container, cursor ) {
		try {
			container.style.cursor = cursor;
		}
		catch ( c ) {
			if ( cursor == "pointer" )
				setCursor("hand");
		}
	};
	
	function GxMarker( a, b, tooltip,x,y,link,info ) {
		this.inheritFrom = GMarker;
		this.inheritFrom(a,b);
		this.xOffset = x;
		this.yOffset = y;
		this.link = link;
		this.info = info;
		if ( !currentSpan.minX || a.x < currentSpan.minX ) currentSpan.minX = a.x;
		if ( !currentSpan.maxX || a.x > currentSpan.maxX ) currentSpan.maxX = a.x;
		if ( !currentSpan.minY || a.y < currentSpan.minY ) currentSpan.minY = a.y;
		if ( !currentSpan.maxY || a.y > currentSpan.maxY ) currentSpan.maxY = a.y;
		if ( typeof tooltip != "undefined" ) {
			this.setTooltip( tooltip );
		}
	}
	
	GxMarker.prototype = new GMarker(new GLatLng(1, 1));
	
	GxMarker.prototype.setTooltip = function( string ) {
		this.removeTooltip();
		this.tooltip = new Object();
		this.tooltip.opacity  = 99;
		this.tooltip.contents = string;
	};
	
	GxMarker.prototype.initialize = function( a ) {
		try {
			GMarker.prototype.initialize.call(this, a);
			// Setup the mouse over/out events
			
			GEvent.bind(this, "click", this, this.onClick);
			
			GEvent.bind(this, "mouseover", this, this.onMouseOver);
			GEvent.bind(this, "mouseout", this, this.onMouseOut);
		} catch(e) {
			if ( gxMarkerDebug ) { alert("GxMarker.prototype.initialize "+e); }
		}
	}
	
	GxMarker.prototype.setCursor = function( cursor ) {
		var c = this.iconImage;
		// Use the image map for Firefox/Mozilla browsers
		if ( n6 && this.icon.imageMap && !safari) {
			c = this.imageMap;
		}
		// If we have a transparent icon, use that instead of the main image
		else if ( this.transparentIcon && typeof this.transparentIcon != "undefined" ) {
			c = this.transparentIcon;
		}
	}
	
	GxMarker.prototype.remove = function( a ) {
		try {
			GMarker.prototype.remove.call(this);
			this.removeTooltip();
		} catch(e) {
			if ( gxMarkerDebug ) { alert("error in remove()"+e); }
		}
	}
	
	GxMarker.prototype.removeTooltip = function() {
		try {
			if ( this.tooltipObject ) {
				if ( this.map ) {
					this.map.div.removeChild(this.tooltipObject);
				} else {
					mapObj.div.removeChild(this.tooltipObject);
				}
					this.tooltipObject = null;
			}
		} catch(e) {
			if ( gxMarkerDebug ) { alert("error in removeTooltip()"+e); }
		}
	}
	
	GxMarker.prototype.onInfoWindowOpen = function() {
		this.hideTooltip();
		GMarker.prototype.onInfoWindowOpen.call(this);
	}
	
	
	GxMarker.prototype.onMouseOver = function() {
		this.showTooltip();
		// IEの場合空の例外処理を施さないとStack Overflowエラーが発生する。
		try {
			GEvent.trigger(this, "mouseover");
		} catch(e) {
		
		}
	};
	
	GxMarker.prototype.onMouseOut = function() {
		this.hideTooltip();
		// IEの場合空の例外処理を施さないとStack Overflowエラーが発生する。
		try {
			GEvent.trigger(this, "mouseout");
		} catch(e) {
		
		}
	};
	
	GxMarker.prototype.onClick = function() {
		if ( this.link ) {
			document.location.href=this.link;
		} else if ( this.info ) {
			try {
				this.hideTooltip();
				noUpdate = true;
				this.openInfoWindowHtml(this.info);
				GEvent.addListener(this, "infowindowclose", function() {
					noUpdate = false;
				} );
				noUpdate = true;
			} catch(e) {
				alert(e);
			}
		}
	};
	
	GxMarker.prototype.showTooltip = function() {
		if ( this.tooltip ) {
			try {
				//hideAllTooltips();
				if ( !this.tooltipObject ) {
					var opacity = this.tooltip.opacity / 100;
					this.tooltipObject = document.createElement("div");
					this.tooltipObject.style.display = "none";
					this.tooltipObject.style.position = "absolute";
					this.tooltipObject.style.background = "#fffffe";
					this.tooltipObject.style.padding = "0";
					this.tooltipObject.style.margin = "0";
					this.tooltipObject.style.MozOpacity = opacity;
					this.tooltipObject.style.filter = "alpha(opacity=" + this.tooltip.opacity + ")";
					this.tooltipObject.style.opacity = opacity;
					this.tooltipObject.style.zIndex = 50000;
					this.tooltipObject.innerHTML = '<div class="markerTooltip">' + this.tooltip.contents + '</div>';
					mapObj.getPane(G_MAP_MARKER_PANE).appendChild(this.tooltipObject);
				}
				if ( this.tooltipObject.style.display != "block" ) {
					var c = mapObj.fromLatLngToDivPixel(new GLatLng(this.getPoint().y, this.getPoint().x));
					var y = c.y - ( this.getIcon().iconAnchor.y - 30 );
					var x = c.x + ( this.getIcon().iconSize.width - this.getIcon().iconAnchor.x - 10 );
					x = x + ( 250 * this.xOffset );
					y = y + ( 100 * this.yOffset );
					this.tooltipObject.style.top = y+"px"; //ロールオーバー・ポップアップウィンドウの縦位置
					this.tooltipObject.style.left = x+"px"; //ロールオーバー・ポップアップウィンドウの横位置
					this.tooltipObject.style.display = "block";
				}
				
			} catch(e) {
				if ( gxMarkerDebug ) { alert("GxMarker.prototype.showTooltip"+e); }
			}
		}
	}
	
	GxMarker.prototype.hideTooltip = function() {
		try {
			if ( this.tooltipObject ) {
				this.tooltipObject.style.display = "none";
			}
		} catch(e) {
			if ( gxMarkerDebug ) { alert("error in hideTooltip()"+e); }
		}
	}
	
	GMap.prototype.flushOverlays = function() {
		try {
			currentSpan = new GBounds();
			this.clearOverlays();
		} catch(e) {
			if ( gxMarkerDebug ) { alert("error in flushOverlays()"+e); }
		}
	}
	
	GMap.prototype.zoomToMarkers = function() {
		var span = new GSize( currentSpan.maxX - currentSpan.minX, currentSpan.maxY - currentSpan.minY );
		for ( var zoom = 0; zoom < this.spec.numZoomLevels; zoom++ ) {
			var ppd = this.spec.getPixelsPerDegree(zoom);
			var pixelSpan = new GSize(
				Math.round(span.width * ppd.x), Math.round(span.height * ppd.y));
			if ( pixelSpan.width  <= this.viewSize.width &&
				 pixelSpan.height <= this.viewSize.height )
			{ break; }
		}
		this.centerAndZoom( new GPoint( currentSpan.minX + (span.width/2), currentSpan.minY + (span.height/2) ), zoom);
	}
	
	function makeInterface(a) {
		var b = a || window;
		b.GxMarker = GxMarker;
	}
	makeInterface();
}

GxMarkerNamespace();

//*****************************************************************************************************************************



//詳細表示画面 : マップ表示
function dtail_map(x,y,ObjID) {

	if (GBrowserIsCompatible()) {
		var mapObj = new GMap2($(ObjID));
		var point = new GPoint(x,y);
		//mapObj.centerAndZoom(point,0);
		mapObj.addControl(new GSmallMapControl());
		var marker = new GMarker(point);
		GEvent.addListener(marker,"click",function() {
			marker.openInfoWindowHtml("テスト");
		});
		mapObj.addOverlay(marker);
		mapObj.setCenter(new GLatLng(y,x), 13);
	}
	return(mapObj);
}
