window.onload = initialize;

//地図オブジェクト
var emap = null;
//出発点オブジェクト
var start = null;
//到着点オブジェクト
var end = null;
//geocoder
var geocoder = null;
//画面初期化フラグ
var init_flg = false;

/* 画面初期化 */
function initialize() {
	init_flg = true;

	if(GBrowserIsCompatible()){
		emap = new GMap2(document.getElementById("map"));
		geocoder = new GClientGeocoder();
		
		emap.setCenter(new GLatLng(37.405073750176946, 136.93359375), 5);
		emap.addControl(new GLargeMapControl());
		
		// マーカ設定
		var point_start;
		if(document.getElementById("posStartX").value != "" && document.getElementById("posStartY").value != ""){
			point_start = new GLatLng(document.getElementById("posStartY").value, document.getElementById("posStartX").value);
		}else{
			// 東京駅
			point_start = new GLatLng(35.68042583, 139.83483389);
		}
		setStartPos(point_start);
		//最初の出発ICは空白に設定する
		document.frm.from_area.value="";

		var point_end;
		if(document.getElementById("posEndX").value != "" && document.getElementById("posEndY").value != ""){
			point_end = new GLatLng(document.getElementById("posEndY").value, document.getElementById("posEndX").value);
		}else{
			// PROTO本社
			point_end = new GLatLng(35.1701817, 136.9215968);
		}
		setEndPos(point_end);
		//最初の到着ICは空白に設定する
		document.frm.to_area.value="";
	}else{
		alert("ご利用のブラウザではGoogle Mapsはご利用出来ません");
	}
}

// 出発点の位置を設定する
function setStartPos(point){
	var startObj;
	
	// カスタムマーカーオブジェクト作成
	startObj = makeStartObj();
	startObj.draggable = true;
	start = new GMarker(point, startObj);
	emap.addOverlay(start);
	
	// マーカ位置取得
	getStartPos();
	
	GEvent.addListener(start, "dragstart", closeStartInfoWindow);
	GEvent.addListener(start, "dragend", getDragStartPos);
}

//到着点の位置を設定する
function setEndPos(point){
	var endObj;
	
	// カスタムマーカーオブジェクト作成
	endObj = makeEndObj();
	endObj.draggable = true;
	end = new GMarker(point, endObj);
	emap.addOverlay(end);
	
	// マーカ位置取得
	getEndPos();
	
	GEvent.addListener(end, "dragstart", closeEndInfoWindow);
	GEvent.addListener(end, "dragend", getDragEndPos);
}

// 出発点の情報ウィンドウを閉じる
function closeStartInfoWindow(){
	start.closeInfoWindow();
}

// 到着点の情報ウィンドウを閉じる
function closeEndInfoWindow(){
	end.closeInfoWindow();
}

//出発点の位置を取得する
function getStartPos(){
	var mPoint = start.getPoint();
	var x = mPoint.lng();
	var y = mPoint.lat();

	//初期化かどうかを判断する
	if (!init_flg) {
		//出発点に最近のICを取得する
		toSearchNearStartICName(x, y);
	}
	//init_flg = false;

	document.getElementById("posStartX").value = x;
	document.getElementById("posStartY").value = y;
	document.getElementById("address_start").value = "";
	document.getElementById("area_start").value = "";
	document.getElementById("jititai_start").value = "";
	
	// リバースジオコーディング
	//geocoder.getLocations(mPoint, dispStartResult);
}

//出発点画像を動く処理
function getDragStartPos(){
    var mPoint = start.getPoint();
    var x = mPoint.lng();
    var y = mPoint.lat();

    document.getElementById("posStartX").value = x;
    document.getElementById("posStartY").value = y;
    document.getElementById("address_start").value = "";
    document.getElementById("area_start").value = "";
    document.getElementById("jititai_start").value = "";

    // リバースジオコーディング
    //geocoder.getLocations(mPoint, dispStartResult);

    toSearchNearStartICName(x, y);
}

//到着点の位置を取得する
function getEndPos(){
	var mPoint = end.getPoint();
	var x = mPoint.lng();
	var y = mPoint.lat();

	//初期化かどうかを判断する
	if (!init_flg) {
		//到着点に最近のICを取得する
		toSearchNearEndICName(x, y);
	}
	init_flg = false;

	document.getElementById("posEndX").value = x;
	document.getElementById("posEndY").value = y;
	document.getElementById("address_end").value = "";
	document.getElementById("area_end").value = "";
	document.getElementById("jititai_end").value = "";
	
	// リバースジオコーディング
	//geocoder.getLocations(mPoint, dispEndResult);
}

//出発点画像を動く処理
function getDragEndPos(){
    var mPoint = end.getPoint();
    var x = mPoint.lng();
    var y = mPoint.lat();

    document.getElementById("posEndX").value = x;
    document.getElementById("posEndY").value = y;
    document.getElementById("address_end").value = "";
    document.getElementById("area_end").value = "";
    document.getElementById("jititai_end").value = "";

    // リバースジオコーディング
    //geocoder.getLocations(mPoint, dispEndResult);

    toSearchNearEndICName(x, y);
}

// 緯度経度から住所を取得
function dispStartResult(addresses){
	var address;
	var area = "";
	var jititai = "";
	
	if(addresses.Status.code == G_GEO_SUCCESS){
		var place = addresses.Placemark[0];
		var country = place.AddressDetails.Country;
		
		if(country != undefined){
			if(country.CountryName == "日本"){
				if(country.AdministrativeArea != undefined){
					// 都道府県
					if(country.AdministrativeArea.AdministrativeAreaName != undefined){
						area = country.AdministrativeArea.AdministrativeAreaName;
					}
					// 市区町村
					if(country.AdministrativeArea.Locality != undefined){
						// 市区
						if(country.AdministrativeArea.Locality.LocalityName != undefined){
							jititai = country.AdministrativeArea.Locality.LocalityName;
						}
					}else if(country.AdministrativeArea.SubAdministrativeArea != undefined){
						// 町村
						var sub = country.AdministrativeArea.SubAdministrativeArea;
						var jititaiArray = [];
						
						if(sub.SubAdministrativeAreaName != undefined){
							// 郡
							jititaiArray.push(sub.SubAdministrativeAreaName);
						}
						if(sub.Locality != undefined){
							// 町村
							if(sub.Locality.LocalityName != undefined){
								jititaiArray.push(sub.Locality.LocalityName);
							}
						}
						jititai = jititaiArray.join("");
					}
				}
			}else{
				$html  = "<font color='red'>日本以外は指定出来ません！！</font><br><br>";
				$html += "指定された場所では登録出来ませんので再指定願います<br>";
				$html += "現在地：<font color='red'>" + place.address + "</font>";
				
				// 情報ウィンドウ表示
				start.openInfoWindowHtml($html);
				return;
			}
		}
		
		if(place.address.substr(0, 2) == "日本"){
			address = place.address.substr(2);
		}else{
			address = place.address;
		}
		document.getElementById("address_start").value = address;
		document.getElementById("area_start").value = area;
		if(area == ""){
			$html  = "<font color='red'>住所が取得出来ません！！</font><br><br>";
			$html += "指定された場所では登録出来ませんので再指定願います<br>";
			$html += "現在地：<font color='red'>" + address + "</font>";
			
			// 情報ウィンドウ表示
			start.openInfoWindowHtml($html);
		}
		document.getElementById("jititai_start").value = jititai;
	}else{
		alert("住所の取得に失敗しました！！\n再指定して下さい");
	}
}

// 緯度経度から住所を取得
function dispEndResult(addresses){
	var address;
	var area = "";
	var jititai = "";
	
	if(addresses.Status.code == G_GEO_SUCCESS){
		var place = addresses.Placemark[0];
		var country = place.AddressDetails.Country;
		
		if(country != undefined){
			if(country.CountryName == "日本"){
				if(country.AdministrativeArea != undefined){
					// 都道府県
					if(country.AdministrativeArea.AdministrativeAreaName != undefined){
						area = country.AdministrativeArea.AdministrativeAreaName;
					}
					// 市区町村
					if(country.AdministrativeArea.Locality != undefined){
						// 市区
						if(country.AdministrativeArea.Locality.LocalityName != undefined){
							jititai = country.AdministrativeArea.Locality.LocalityName;
						}
					}else if(country.AdministrativeArea.SubAdministrativeArea != undefined){
						// 町村
						var sub = country.AdministrativeArea.SubAdministrativeArea;
						var jititaiArray = [];
						
						if(sub.SubAdministrativeAreaName != undefined){
							// 郡
							jititaiArray.push(sub.SubAdministrativeAreaName);
						}
						if(sub.Locality != undefined){
							// 町村
							if(sub.Locality.LocalityName != undefined){
								jititaiArray.push(sub.Locality.LocalityName);
							}
						}
						jititai = jititaiArray.join("");
					}
				}
			}else{
				$html  = "<font color='red'>日本以外は指定出来ません！！</font><br><br>";
				$html += "指定された場所では登録出来ませんので再指定願います<br>";
				$html += "現在地：<font color='red'>" + place.address + "</font>";
				
				// 情報ウィンドウ表示
				end.openInfoWindowHtml($html);
				return;
			}
		}
		
		if(place.address.substr(0, 2) == "日本"){
			address = place.address.substr(2);
		}else{
			address = place.address;
		}
		document.getElementById("address_end").value = address;
		document.getElementById("area_end").value = area;
		if(area == ""){
			$html  = "<font color='red'>住所が取得出来ません！！</font><br><br>";
			$html += "指定された場所では登録出来ませんので再指定願います<br>";
			$html += "現在地：<font color='red'>" + address + "</font>";
			
			// 情報ウィンドウ表示
			end.openInfoWindowHtml($html);
		}
		document.getElementById("jititai_end").value = jititai;
	}else{
		alert("住所の取得に失敗しました！！\n再指定して下さい");
	}
}

// 住所検索
function searchAddress(flag){
	if(geocoder){
		// ジオコーディング
		if (flag == "start") {
			geocoder.setBaseCountryCode("JP");
			var start_ic = document.getElementById("from_ic").value;
			geocoder.getLatLng(start_ic, moveStart);
		}else if (flag == "end") {
			geocoder.setBaseCountryCode("JP");
			var end_ic = document.getElementById("to_ic").value;
			geocoder.getLatLng(end_ic, moveEnd);
		}
	}
}

// 出発点を移動する処理
function moveStart(point){
	if(point){
		closeStartInfoWindow();
		
		emap.setCenter(point, 5);
		start.setPoint(point);
		getStartPos();
	}else{
		alert("住所の場所を特定出来ませんでした");
	}
}

// 到着点を移動する処理
function moveEnd(point){
	if(point){
		closeEndInfoWindow();
		
		emap.setCenter(point, 5);
		end.setPoint(point);
		getEndPos();
	}else{
		alert("住所の場所を特定出来ませんでした");
	}
}

// 出発点のオブジェクト作成
function makeStartObj(){
	var startObj = new Object();
	startObj.icon = new GIcon();
	startObj.icon.image = "/highway/img/flag_leave.gif";
	startObj.icon.iconSize = new GSize(52, 29);
	startObj.icon.iconAnchor = new GPoint(26, 32);
	startObj.icon.infoWindowAnchor = new GPoint(35, 24);

	return startObj;
}

// 到着点のオブジェクト作成
function makeEndObj(){
	var endObj = new Object();
	endObj.icon = new GIcon();
	endObj.icon.image = "/highway/img/flag_arrive.gif";
	endObj.icon.iconSize = new GSize(52, 29);
	endObj.icon.iconAnchor = new GPoint(26, 32);
	endObj.icon.infoWindowAnchor = new GPoint(35, 24);

	return endObj;
}

//「出発点を入力」ボタン処理
function toSearchNearStartICName(keido, ido) {
	var frm = document.map_frm;
	var rep = new AjaxAction();

	rep.url = "/highway/map_ajax.php";
	rep.params = {"pos_keido" : keido ,
					"pos_ido"   : ido
				};

	rep.doAction = function(res) {
		var ic_name = res.substring(38);
        var ic_name = res.substring(38);
        var ic_info = ic_name.split("__");
		if (ic_name != "") {
			frm.from_ic.value = ic_info[0];
			frm.from_area.value = ic_info[0];
			frm.from_area_keido.value = ic_info[1];
			frm.from_area_ido.value = ic_info[2];

			//取得したICに移動する
			var ic_point = new GLatLng(ic_info[1], ic_info[2]);
			emap.setCenter(ic_point, 13);
			start.setPoint(ic_point);
			//frm.from_area.value = ic_name;
			//document.getElementById("start_ic").value = ic_name;
			//frm.action = "/highway/index.php";
			//frm.target = "_self";
			//frm.submit();
		}
	};
	execAjaxMap(rep);
}

//「出発点を入力」ボタン処理
function toSearchNearEndICName(keido, ido) {
    var frm = document.map_frm;
    var rep = new AjaxAction();

    rep.url = "/highway/map_ajax.php";
    rep.params = {"pos_keido" : keido ,
                    "pos_ido"   : ido
                };

    rep.doAction = function(res) {
        var ic_name = res.substring(38);
		var ic_info = ic_name.split("__");
        if (ic_name != "") {
            frm.to_ic.value = ic_info[0];
            frm.to_area.value = ic_info[0];
            frm.to_area_keido.value = ic_info[1];
            frm.to_area_ido.value = ic_info[2];

            //取得したICに移動する
            var ic_point = new GLatLng(ic_info[1], ic_info[2]);
            emap.setCenter(ic_point, 13);
            end.setPoint(ic_point);
			//frm.to_area.value = ic_name;
            //document.getElementById("end_ic").value = ic_name;
            //frm.action = "/highway/index.php";
            //frm.target = "_self";
            //frm.submit();
        }
    };
    execAjaxMap(rep);
}
