﻿/*<!-------------------------------------------------------------------------------------------------
JSクラス
-------------------------------------------------------------------------------------------------->*/
if(typeof(unit_doc_head_gmap) != "object"){
	var unit_doc_head_gmap = new Object();
}
if(typeof(unit_doc_head_gmap.conf) != "object"){
	unit_doc_head_gmap.conf = new Object();
}
if(typeof(unit_doc_head_gmap.local) != "object"){
	unit_doc_head_gmap.local = new Object();
}

/*<!-------------------------------------------------------------------------------------------------
Google Mapの初期化
	name="gmap_id" type="string" required="yes" displayname="Google MAPを表示する要素のID属性値" hint=""
-------------------------------------------------------------------------------------------------->*/
unit_doc_head_gmap.initialize = function(arguments){
	<!--- エラーチェック --->
	if(typeof(unit_doc_head_gmap.conf[arguments.gmap_id]) != "object"){
		alert("環境設定値を宣言して下さい。");
		return;
	}
	if(typeof(unit_doc_head_gmap.conf[arguments.gmap_id]["defaultDsp"]["address"]) != "string"){
		alert("環境設定値の「初期表示住所」を宣言して下さい。");
		return;
	}
	<!--- 初期設定 --->
	if(typeof(unit_doc_head_gmap.local[arguments.gmap_id]) != "object"){
		unit_doc_head_gmap.local[arguments.gmap_id] = new Object();
	}
	if(typeof(unit_doc_head_gmap.conf[arguments.gmap_id]["marker"]) != "object"){
		unit_doc_head_gmap.conf[arguments.gmap_id]["marker"] = new Array();
	}
	if(typeof(unit_doc_head_gmap.local[arguments.gmap_id]["marker"]) != "object"){
		unit_doc_head_gmap.local[arguments.gmap_id]["marker"] = new Object();
	}
	if(GBrowserIsCompatible()){
		<!--- glocal変数 --->
		var glocal = new Object();
		glocal.gmap_id = arguments.gmap_id;
		<!--- local変数 --->
		var local = new Object();
		/*<!---------------------------------------------
		ロード
		---------------------------------------------->*/
		unit_doc_head_gmap.local[glocal.gmap_id].map = new GMap2(document.getElementById(glocal.gmap_id));
		/*<!---------------------------------------------
		ジオコードクラス
		---------------------------------------------->*/
		glocal.geocoder = new GClientGeocoder();
		/*<!---------------------------------------------
		初期表示設定
		---------------------------------------------->*/
		unit_doc_head_gmap.chgDspMap({gmap_id:glocal.gmap_id, address:unit_doc_head_gmap.conf[glocal.gmap_id]["defaultDsp"]["address"]});
		/*<!---------------------------------------------
		コントローラー設定
		---------------------------------------------->*/
		unit_doc_head_gmap.local[glocal.gmap_id].map.addControl(new GLargeMapControl());
		/*<!---------------------------------------------
		マーカー設定
		---------------------------------------------->*/
		local.timer = new Array();
		for(local.i=0; local.i<unit_doc_head_gmap.conf[glocal.gmap_id]["marker"].length; local.i++){
			unit_doc_head_gmap.addMarker_latLng({gmap_id:glocal.gmap_id, type:"normal", marker:unit_doc_head_gmap.conf[glocal.gmap_id]["marker"][local.i]});
		}
	}
}

/*<!-------------------------------------------------------------------------------------------------
緯度, 経度からマーカーを生成
	name="gmap_id" type="string" required="yes" displayname="Google MAPを表示する要素のID属性値" hint=""
	name="type" type="string" required="no" displayname="アイコンタイプ" hint="normal=通常, chgDspMap=表示地域切替マーカー"
	name="marker" type="struct" required="yes" displayname="マーカーオブジェクト" hint=""
-------------------------------------------------------------------------------------------------->*/
unit_doc_head_gmap.addMarker_latLng = function(arguments){
	<!--- local変数 --->
	var local = new Object();
	/*<!---------------------------------------------
	生成
	---------------------------------------------->*/
	local.marker = arguments.marker;
	local.mOpt = new Object();
	if(typeof(local.marker.mOpt) == "object"){
		local.mOpt = local.marker.mOpt;
	}
	local.gm = new GMarker(new GLatLng(local.marker.addr.lat, local.marker.addr.lng), local.mOpt);
	<!--- マーカーをクリック時の情報表示 --->
	if(typeof(local.marker.src) == "string" && local.marker.src != ""){
		GEvent.addListener(local.gm, "click",
			function(){
				local.gm.openInfoWindowHtml(local.marker.src);
			}
		);
	}
	unit_doc_head_gmap.local[arguments.gmap_id].map.addOverlay(local.gm);
	if(arguments.type != "normal"){
		unit_doc_head_gmap.local[arguments.gmap_id]["marker"][arguments.type] = local.gm;
	}
}

/*<!-------------------------------------------------------------------------------------------------
住所からマーカーを生成
	name="gmap_id" type="string" required="yes" displayname="Google MAPを表示する要素のID属性値" hint=""
	name="type" type="string" required="no" displayname="アイコンタイプ" hint="normal=通常, chgDspMap=表示地域切替マーカー"
	name="marker" type="struct" required="yes" displayname="マーカーオブジェクト" hint=""
-------------------------------------------------------------------------------------------------->*/
unit_doc_head_gmap.addMarker_addr = function(arguments){
	<!--- local変数 --->
	var local = new Object();
	/*<!---------------------------------------------
	生成
	---------------------------------------------->*/
	local.arguments = arguments;
	local.gcd = new GClientGeocoder();
	local.gcd.getLatLng(local.arguments.marker["addr"]["text"],
		function(point){
			if(point){
				<!--- マーカーオブジェクトを再設定 --->
				local.arguments.marker["addr"]["lat"] = point.lat();
				local.arguments.marker["addr"]["lng"] = point.lng();
				<!--- 緯度, 経度からマーカーを生成 --->
				unit_doc_head_gmap.addMarker_latLng(local.arguments);
			}
		}
	)
}

/*<!-------------------------------------------------------------------------------------------------
表示地域切替
	name="gmap_id" type="string" required="yes" displayname="Google MAPを表示する要素のID属性値" hint=""
	name="address" type="string" required="yes" displayname="切り替え先の地域" hint=""
-------------------------------------------------------------------------------------------------->*/
unit_doc_head_gmap.chgDspMap = function(arguments){
	<!--- glocal変数 --->
	var glocal = new Object();
	glocal.gmap_id = arguments.gmap_id;
	glocal.address = arguments.address;
	<!--- local変数 --->
	var local = new Object();
	/*<!---------------------------------------------
	ジオコードクラス
	---------------------------------------------->*/
	glocal.geocoder = new GClientGeocoder();
	/*<!---------------------------------------------
	切替
	---------------------------------------------->*/
	if(typeof(unit_doc_head_gmap.local[glocal.gmap_id]["marker"].chgDspMap) == "object"){
		unit_doc_head_gmap.local[glocal.gmap_id].map.removeOverlay(unit_doc_head_gmap.local[glocal.gmap_id]["marker"].chgDspMap);
	}
	glocal.geocoder.getLatLng(glocal.address,
		function(point){
			<!--- local変数 --->
			var gglocal = new Object();
			gglocal.point = point;
			<!--- local変数 --->
			var local = new Object();
			<!--- 切替 --->
			if(gglocal.point){
				glocal.geocoder.getLocations(glocal.address,
					function(response){
						<!--- local変数 --->
						var local = new Object();
						<!--- 切替 --->
						if(response){
							local.zoom = 4;
							local.accuracy = response.Placemark[0].AddressDetails.Accuracy;
							if(local.accuracy == 2){
								local.zoom = 8;
							}
							else if(local.accuracy == 3){
								local.zoom = 11;
							}
							else if(local.accuracy >= 4){
								local.zoom = 13;
							}
							if(local.accuracy >= 4){
								local.marker = new Object();
								local.marker["addr"] = new Object();
								local.marker["addr"]["text"] = glocal.address;
								local.marker["mOpt"] = new Object();
								local.marker["mOpt"]["icon"] = new GIcon(G_DEFAULT_ICON);
								local.marker["mOpt"]["icon"]["image"] = "http://www.google.com/mapfiles/gadget/arrowSmall80.png";
								local.marker["mOpt"]["icon"]["shadow"] = "http://www.google.com/mapfiles/gadget/arrowshadowSmall80.png";
								local.marker["mOpt"]["icon"]["iconSize"] = new GSize(31, 27);
								local.marker["mOpt"]["icon"]["shadowSize"] = new GSize(31, 27);
								local.marker["mOpt"]["icon"]["iconAnchor"] = new GPoint(10, 27);
								local.marker["mOpt"]["icon"]["infoWindowAnchor"] = new GPoint(10, 0);
								local.marker["mOpt"]["clickable"] = false;
								local.marker["src"] = "";
								unit_doc_head_gmap.addMarker_addr({gmap_id:glocal.gmap_id, type:"chgDspMap", marker:local.marker});
							}
							<!--- 切替 --->
							unit_doc_head_gmap.local[glocal.gmap_id].map.setCenter(gglocal.point, local.zoom);
						}
						else {
							alert("検索する住所の精度を上げてください。");
						}
					}
				);
			}
			else {
				alert("検索する住所の精度を上げてください。");
			}
		}
	);
}

/*<!-------------------------------------------------------------------------------------------------
GoogleAPIから緯度,経度を取得して、指定先へのロケーション
	name="addr" type="string" required="yes" displayname="経度,緯度を取得する住所" hint=""
	name="fGLatName" type="string" required="yes" displayname="取得した経度を代入するフォーム要素名" hint=""
	name="gGLngName" type="string" required="yes" displayname="取得した緯度を代入するフォーム要素名" hint=""
	name="lObj" type="struct" required="yes" displayname="ロケーションオブジェクト" hint=""
		name="name" type="string" required="yes" displayname="フォームのNAME属性値" hint=""
		name="item" type="struct" required="yes" displayname="フォーム用要素代入値" hint=""
		name="event" type="string" required="false" displayname="イベント値" hint="action値が無い場合は必須( event, action値両方の指定も可能 )"
		name="action" type="string" required="false" displayname="サブミットアクション" hint="event値が無い場合は必須( event, action値両方の指定も可能 )"
		name="mc" type="any" required="false" displayname="メソッドコール要素のオブジェクト" hint=""
		name="target" type="string" required="false" displayname="サブミットターゲット" hint=""
-------------------------------------------------------------------------------------------------->*/
unit_doc_head_gmap.getGLatLngLocate = function (arguments){
	<!--- local変数 --->
	var local = new Object();
	/*<!---------------------------------------------
	ジオコードクラス
	---------------------------------------------->*/
	local.gCD = new GClientGeocoder();
	/*<!---------------------------------------------
	緯度,経度を問い合わせ
	---------------------------------------------->*/
	local.arguments = arguments;
	local.gCD.getLatLng(arguments.addr,
		function(point){
			/*<!---------------------------------------------
			緯度, 経度を指定のフォーム要素に代入
			---------------------------------------------->*/
			document[local.arguments.lObj.name][local.arguments.fGLatName].value = "";
			document[local.arguments.lObj.name][local.arguments.gGLngName].value = "";
			if(point){
				document[local.arguments.lObj.name][local.arguments.fGLatName].value = point.lat();
				document[local.arguments.lObj.name][local.arguments.gGLngName].value = point.lng();
			}
			/*<!---------------------------------------------
			ロケーション
			---------------------------------------------->*/
			unit_doc_head.setFValLocate(local.arguments.lObj);
		}
	);
}
