/* 
	officewai google map Java Script
	2006/10/30 yokoi@officewai.com
*/
    //<![CDATA[
	var targetdatas = new Array();
	// 開始位置データ
	targetdatas[0] = { 
							latlng : new GLatLng(43.0686369649885, 141.35080575942993),
							name : "札幌",
							url : "http://www.officewai.com/atmarkworld/motive/index.html",
							country : "日本"
					};
	var target = 0;
	var wait = 30; // pixel
	var map = null;
	var bpan = false;
	
	var map_width = 500;
	var map_height = 500;
	
	// 動作ボタンのマーカー
	var marker_forward = null;
	var marker_backward = null;
	
	function load() {
		var dataFilePath = "/atmarkworld/data/latlang.xml";

		map = new GMap2(document.getElementById("map"), {
			size : new GSize(map_width, map_height),
			mapTypes : [G_HYBRID_MAP]
		});

		if (GBrowserIsCompatible()) {	
			GDownloadUrl(dataFilePath, 
				function (data){
					var xml = GXml.parse(data);
					var markers = xml.documentElement.getElementsByTagName("marker");
					var initdata_counts = targetdatas.length;
					for (var cnt = 0; cnt < markers.length; cnt++) {
						var targetdata = Array();
						targetdata["latlng"] = new GLatLng(parseFloat(markers[cnt].getAttribute("lat")),
									parseFloat(markers[cnt].getAttribute("lng")));
						targetdata["name"] = String(markers[cnt].getAttribute("name"));
						targetdata["url"] = String(markers[cnt].getAttribute("url"));
						targetdata["country"] = String(markers[cnt].getAttribute("country"));
						
						// マーカー表示
						var maker = new GMarker(targetdata["latlng"]);
						map.addOverlay(maker);
						targetdatas[cnt + initdata_counts] = targetdata;
					}											
				}
			);

			map.addControl(new GLargeMapControl());
//			map.addControl(new GMapTypeControl());

			// 最初の出発地を設定
			var start_latlng = 	targetdatas[0]["latlng"];
			var maker = new GMarker(start_latlng);
			map.setCenter(start_latlng, 13);
			map.addOverlay(maker);
			showInfoWindow(0);

			// Zoom
			map.setZoom(6);

			viewMoveButton();

			GEvent.addListener(map, "moveend", 
				function() {
					movestart();
				}
			);
			
		}
	}
	
	function viewMoveButton(){
		// 動作ボタンの表示
		if(marker_forward != null){
			map.removeOverlay(marker_forward);
			marker_forward = null;
		}
		var button_forward = new GIcon();
		button_forward.image = "http://officewai.com/atmarkworld/images/googlemap/button_r1_c2.gif";
		button_forward.iconSize = new GSize(25, 30);
		button_forward.iconAnchor = new GPoint(0, 0);
		button_forward.infoWindowAnchor = new GPoint(5, 1);

		var latlng = map.fromContainerPixelToLatLng(new GPoint(map_width - 50, map_height - 50));
		marker_forward = new GMarker(latlng,button_forward);

		map.addOverlay(marker_forward);		

		if(marker_backward != null){
			map.removeOverlay(marker_backward);
			marker_backward = null;
		}
		var button_backward = new GIcon();
		button_backward.image = "http://officewai.com/atmarkworld/images/googlemap/button_r1_c1.gif";
		button_backward.iconSize = new GSize(25, 30);
		button_backward.iconAnchor = new GPoint(0, 0);
		button_backward.infoWindowAnchor = new GPoint(5, 1);
				
		var latlng = map.fromContainerPixelToLatLng(new GPoint(map_width - 25 - 50, map_height - 50));
		marker_backward = new GMarker(latlng,button_backward);

		map.addOverlay(marker_backward);

		GEvent.addListener(marker_backward, "click",
			function(){
				// 情報ウィンドウの非表示
				map.closeInfoWindow();
				
				if(target == null || target <= 0){
					target = targetdatas.length - 1;
				}else{
					target--;
				}
				
				var current_latlng = map.getCenter();
				current_lat = current_latlng.lat();
				current_lng = current_latlng.lng();
				var data = targetdatas[target];
				to_lat = data["latlng"].lat();
				to_lng = data["latlng"].lng();

				drawData();
				
				map.removeOverlay(marker_forward);				
				map.removeOverlay(marker_backward);

				movestart();
			}
		)		

		GEvent.addListener(marker_forward, "click",
			function(){
				// 情報ウィンドウの非表示
				map.closeInfoWindow();

				if(target == null || target >= targetdatas.length - 1){
					target = 0;
				}else{
					target++;
				}
				
				var current_latlng = map.getCenter();
				current_lat = current_latlng.lat();
				current_lng = current_latlng.lng();
				var data = targetdatas[target];
				to_lat = data["latlng"].lat();
				to_lng = data["latlng"].lng();

				drawData();
				
				map.removeOverlay(marker_forward);
				map.removeOverlay(marker_backward);
				
				movestart();
			}
		)
	}
	
	function showInfoWindow(index){
		if(index == null){
			index = target;
		}
		targetdata = targetdatas[index];
		// 情報ウィンドウの表示
		var infoHtml = targetdata["country"] + "<BR>" + 
			"<a href=\"" + targetdata["url"] + "\" target=\"_blank\">" + 
			targetdata["name"] + 
			"</a>";
		map.openInfoWindowHtml(targetdata["latlng"], infoHtml);
	}
	

	function movestart(){
		var current_lat = 0;
		var current_lng = 0;
		var to_lat = 0;
		var to_lng = 0;

		var current_latlng = map.getCenter();
		current_lat = current_latlng.lat();
		current_lng = current_latlng.lng();
		var targetdata = targetdatas[target];
		if(targetdata == null){
			return;
		}
		to_lat = targetdata["latlng"].lat();
		to_lng = targetdata["latlng"].lng();
		var latlngbounds = map.getBounds();
		// 地図内に指定の緯度経度が入っているかのチェック
		// 移動範囲に指定の点が入っているかチェック
		var target_point = map.fromLatLngToDivPixel(targetdata["latlng"]);
		var current_point = map.fromLatLngToDivPixel(current_latlng);

		if(current_point.x <= target_point.x + wait && current_point.x >= target_point.x - wait &&
			current_point.y <= target_point.y + wait && current_point.y >= target_point.y - wait){
			// 指定ポイントに移動、ターゲットを移動
			if(bpan){
				viewMoveButton();
				bpan = false;
			}
			bpan = true;
			map.panTo(targetdata["latlng"]);

			showInfoWindow();
			return;
		}

		var lng_way = 0; // -1 0 1 x軸
		var lat_way = 0; // -1 0 1 y軸

		// 経度
		if(to_lng < current_lng ||
			((to_lng * current_lng) < 0 && (Math.abs(to_lng) + Math.abs(current_lng)) > 180)){
			lng_way = 1;
		}else if(to_lng > current_lng){
			lng_way = -1;
		}
		if(current_point.x <= target_point.x + wait && current_point.x >= target_point.x - wait){
			lng_way = 0;
		}

		// 緯度
		lat_way = -1;
		if(to_lat < current_lat){
			lat_way = -1;
		}else if(to_lat > current_lat){
			lat_way = 1;
		}
		if(current_point.y <= target_point.y + wait && current_point.y >= target_point.y - wait){
			lat_way = 0;
		}
		
		map.panBy(new GSize(wait*lng_way, wait*lat_way));

		drawData();
	}
	
	function drawData(){
		var current_latlng = map.getCenter();
		current_lat = current_latlng.lat();
		current_lng = current_latlng.lng();
		var targetdata = targetdatas[target];
		if(targetdata == null){
			return;
		}
		to_lat = targetdata["latlng"].lat();
		to_lng = targetdata["latlng"].lng();
		
		var target_point = map.fromLatLngToDivPixel(targetdata["latlng"]);
		var current_point = map.fromLatLngToDivPixel(current_latlng);

		var mess = window.document.getElementById("data");
		var info = "WAIT:" + wait + "<BR>" + 
					"TARGET:" + target + "<BR>"+ 
					"TARGET_LENGHT:" + targetdatas.length + "<BR>" +
					"Lat:" + to_lat + "<BR>" + 
					"Lng:" + to_lng + "<BR>" +
					"Lat:" + current_lat + "<BR>" + 
					"Lng:" + current_lng + "<BR>" + 
					"bpan:" + bpan + "<BR>" +
					target_point + "<BR>" + current_point;
//		mess.innerHTML = info
	}
	
    //]]>
