/* ---------------------------------------------
 * GoogleMap関連
 * --------------------------------------------- */

var map = null;			// GMap2インスタンス
var centerMarker;		// センターマーク
var geocoder = null;	// Geocorder
var defaultZoom = 13;	// 初期倍率

/*-----------------------------------------------
 * onload()で処理される
 * GoogleMapを初期位置を指定して表示
 * GEventのmoveendでドラッグ終了後に処理を実行(今はセンター座標を表示)
 * ＜引数＞
 * address	住所orランドマーク名
 * ---------------------------------------------*/
function load() {
	// ブラウザがGoogleMapを利用できるかをチェック
	if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));	// Mapの初期化
		// Mapを表示
        map.addControl(new GLargeMapControl());				// Mapの拡大縮小ツール表示
        map.addControl(new GScaleControl());				// Mapの縮尺を表示
        map.addControl(new GMapTypeControl());				// Mapのタイプ変更ツールを表示(地図、航空写真、地図+写真)
		map.addControl(new GOverviewMapControl());

        map.setCenter(new GLatLng(35.677933, 139.735272), defaultZoom);			// Mapのセンターの初期位置を設定
		map.setZoom(9);			// Mapの初期縮尺設定

		/* 
		 *	Geocoder用メソッドの初期化
		 *	住所&ランドマークから座標を求めるメソッド
		 */
        geocoder = new GClientGeocoder();

		// センターマーカー
		createCenterMarker();

		// マーカー
		createMarker();

		//マウスホイールでスクロールするように設定
//		var mapElem = document.getElementById("map");
//		if (mapElem.addEventListener) //Mozilla
//		  mapElem.addEventListener('DOMMouseScroll', zoomByWheel, false);
//		mapElem.onmousewheel = zoomByWheel;

		/* 
		 *	Mapをドラッグ時に動作
		 *	＜処理内容＞
		 *	センターアイコンの表示
		 */
		GEvent.addListener(map,"move",function(){
			centerMarker.setPoint(map.getCenter()); 
		});
 	}
}

//マウススクロールイベントに合わせてズームを変えるための関数
function zoomByWheel(event) {
  if (!event) event = window.event;
  var zoom = map.getZoomLevel(); //現在のズームレベル
  var delta = 0;
  if (event.wheelDelta) //IE
    delta = event.wheelDelta;
  else if (event.detail) //Mozilla
    delta = -event.detail;
  if (delta) { //ホイールイベントが認識できた場合
    delta = delta < 0 ? -1 : +1; //どちらの方向にスクロールしたか
    zoom += delta; //現在のズームレベルに差分を追加
    if (zoom >= 0) {
      map.zoomTo(zoom); //ズームレベルを変える
      //ホイールによる副作用（ページスクロール等）を抑止
      if (event.preventDefault) { //Mozilla
        event.preventDefault();
        event.stopPropagation();
      } else { //IE
        event.returnValue = false;
        event.cancelBubble = true;
      }
    }
  }
}


/*-----------------------------------------------
 * マーカーの作成
 * ファイルからお店データを取得
 * ＜引数＞
 * ---------------------------------------------*/
var request;
var infoData = [];
var html;
var xml_url;

function createMarker(){
	// マーカーの削除
	clearMarkers();

	// センターマーク
	createCenterMarker();

	request = GXmlHttp.create();													// 通信オブジェクトの作成
	var xml_url = "xml/fwdb.xml";	// xmlのURL

	request.open("GET",xml_url,true);			// URLを指定してファイルを読み込む
	request.onreadystatechange = function() {
		if(request.readyState == 4){												// ファイルが正常に読み込めていることをチェック

			var xmlDoc = request.responseXML;										// ドキュメントの格納
			var marker = xmlDoc.documentElement.getElementsByTagName("marker");		// マーカータグの抽出

			var center = map.getCenter();
			var markerArray = new Array();
			

			for(var i=0; i<marker.length; i++){

				infoData[0] = marker[i].getAttribute("id");
				infoData[1] = marker[i].getAttribute("parknm");
				infoData[2] = marker[i].getAttribute("fwnm");
				infoData[3] = marker[i].getAttribute("lat");
				infoData[4] = marker[i].getAttribute("lng");
				infoData[5] = marker[i].getAttribute("flg");
				infoData[6] = marker[i].getAttribute("address");
				infoData[7] = marker[i].getAttribute("review");
				infoData[8] = marker[i].getAttribute("img");

				html = createInfo(infoData);
				var markerObj = new GIcon();
//				markerObj.image = "../../fwgp.ico";		// アイコン用イメージを指定
				markerObj.iconSize = new GSize(31,31);			// アイコンの表示サイズを指定
				markerObj.iconAnchor = new GPoint(15,30);		// アンカーの位置を指定(アイコンのどの座標位置を中心にするか)
				markerObj.infoWindowAnchor = new GPoint(30,3);	// InfoWindowのアンカーの位置を指定

				//営業停止の場合マーカー色を変える
				if(infoData[5] == "1"){
					markerObj.image = "http://maps.google.com/mapfiles/kml/paddle/blu-circle.png";
				} else if(infoData[5] == "2"){
					markerObj.image = "http://maps.google.com/mapfiles/kml/paddle/wht-circle.png";
				} else {
					markerObj.image = "http://maps.google.com/mapfiles/kml/paddle/red-circle.png";
				}

				// 緯度、経度を取得
				addMarker(infoData[3],infoData[4],html,0,markerObj);

			}
		}
	}
	request.send(null);
}

/*-----------------------------------------------
 * マーカー追加
 * ＜引数＞
 * 住所
 * 表示情報
 * ---------------------------------------------*/
function addMarker(lat,lng,html,i,markerObj){
	// 座標をセット
	var point =new GLatLng(lat,lng);

	// Geocoder用メソッドが初期化できていることを確認
	var marker = new GMarker(point,markerObj);

	// マーカーにマウスオーバー時の動作設定 →　邪魔なので退避
//	GEvent.addListener(marker,"mouseover",function(){
//		marker.openInfoWindowHtml(html);	// 噴出しの表示
//	});
	// マーカークリック時の動作設定
	GEvent.addListener(marker,"click",function(){
		marker.openInfoWindowHtml(html);	// 噴出しの表示
		map.panTo(point);					// マーカーの位置にパンする
	});
	map.addOverlay(marker);					// マップにマーカーを作成
}

/*-----------------------------------------------
 * マーカー追加
 * ＜引数＞
 * 施設名
 * 住所
 * 表示情報
 * ---------------------------------------------*/
function addMarkerLatLng(parknm,detail_address,html,i,markerObj){
	var address = detail_address.split(" ");
	var parkname = parknm.split("（");
	var parkfound = 0;
	// Geocoder用メソッドが初期化できていることを確認
	if (geocoder) {
		// 施設名から座標を取得
        geocoder.getLatLng(
        	parkname[0],					  // 検索対象の施設名
        	function(point) {			  // callbackされた座標の処理
            	if (point) {
					var marker = new GMarker(point,markerObj);
              		
					// マーカーにマウスオーバー時の動作設定
					GEvent.addListener(marker,"mouseover",function(){
						marker.openInfoWindowHtml(html);	// 噴出しの表示
					});
					// マーカークリック時の動作設定
					GEvent.addListener(marker,"click",function(){
						map.panTo(point);					// マーカーの位置にパンする
					});
					map.addOverlay(marker);					// マップにマーカーを作成
					parkfound = 1;
            	}
			}
		);
	}
	if(parkfound == 0){
//		if (geocoder) {
//			// 見つからなければ、住所から座標を取得
//	        geocoder.getLatLng(
//	        	address[0],					  // 検索対象の住所
//	        	function(point) {			  // callbackされた座標の処理
//					// addressで指定された住所が存在しなかった場合にはalertをあげる
//	            	if (!point) {
//	            	//	alert(address[0] + " は見つかりませんでした");
//	            	} else {
//						var marker = new GMarker(point,markerObj);
//	              		
//						// マーカーにマウスオーバー時の動作設定
//						GEvent.addListener(marker,"mouseover",function(){
//							marker.openInfoWindowHtml(html);	// 噴出しの表示
//						});
//						// マーカークリック時の動作設定
//						GEvent.addListener(marker,"click",function(){
//							map.panTo(point);					// マーカーの位置にパンする
//						});
//						map.addOverlay(marker);					// マップにマーカーを作成
//	            	}
//				}
//			);
//		}
	}
}

/*-----------------------------------------------
 * マーカー追加
 * ＜引数＞
 * 住所
 * 表示情報
 * ---------------------------------------------*/
function geoCode(address){
	// Geocoder用メソッドが初期化できていることを確認
	if (geocoder) {
		// 座標を取得
        geocoder.getLatLng(
        	address,					  // 検索対象の住所
        	function(point) {			  // callbackされた座標の処理
				// addressで指定された住所が存在しなかった場合にはalertをあげる
            	if (!point) {
            		alert(address + " は見つかりませんでした",13);
            	} else {
					// 地図の中心を指定
					map.setCenter(point);
					// Mapの縮尺を詳細に設定
					map.setZoom(13);
            	}
			}
		);
	}
}

/*-----------------------------------------------
 * 噴出し情報の作成
 * ＜引数＞
 * お店情報配列
 * ---------------------------------------------*/
function createInfo(infoData){
		var parknm		= infoData[1];
		var fwnm		= infoData[2];
		var flg			= infoData[5];
		var address		= infoData[6];
		var data	= "http://www.fwgp.com/db/fwdb" + infoData[0] + ".html";
		var review		= infoData[7];
		var fullreview	= "http://www.fwgp.com/review/" + infoData[7];
		var img			= infoData[8];	//未使用
		var html = "<b>" + parknm + "</b><br />" + fwnm;

//		if(img == "1"){
//			html = html + "<img src='http://www.fwgp.com/img/" + infoData[0] + "_1.jpg' align=right />";
//		}
		html = html + "<br /><br />";
		if(flg == "1"){
			html = html + "※観覧車営業終了<br />";
		} else if(flg == "2") {
			html = html + "※施設営業終了<br />";
		}
		html = html + "データ：<br /><a href='" + data + "'>" + data + "</a><br />レビュー：";
		if(review != ""){
			html = html + "<br /><a href='" + fullreview + "'>" + fullreview + "</a><br />";
		} else {
			html = html + "無し";
		}
		return html;
}

/*-----------------------------------------------
 * 地図移動ボタン押下時に起動
 * 指定した住所をマップのセンターに表示
 * ＜引数＞
 * 住所
 * ---------------------------------------------*/
function setMapCenter(address){
	if (geocoder) {
		// 座標を取得
        geocoder.getLatLng(
        	address,					  		// 検索対象の住所
        	function(point) {			  		// callbackされた座標の処理
				// addressで指定された住所が存在しなかった場合にはalertをあげる
            	if (!point) {
            		alert(address + " は見つかりませんでした");
            	} else {
					map.setCenter(point,14);		// Mapのセンターの初期位置を設定
            	}
			}
		);
	}
}

/*-----------------------------------------------
 * センターマーカー作成
 * ---------------------------------------------*/
function createCenterMarker(){
		var customMarkerObj = new GIcon();
		customMarkerObj.image = "";			// アイコン用イメージを指定
		customMarkerObj.iconSize = new GSize(31,31);					// アイコンの表示サイズを指定
		customMarkerObj.iconAnchor = new GPoint(15,30);					// アンカーの位置を指定(アイコンのどの座標位置を中心にするか)
		centerMarker = new GMarker(map.getCenter(),customMarkerObj);	// センターマーカーの作成
		map.addOverlay(centerMarker);

}

/*-----------------------------------------------
 * マップ上の全マーカー削除
 * ---------------------------------------------*/
function clearMarkers(){
	map.clearOverlays();
}

/*-----------------------------------------------
 * 後処理
 * ---------------------------------------------*/
function unload() {
	GUnload();
}


