	// GoogleMap API を利用してマップ処理を行います。
	// Googleから提供されるスクリプトをロードする必要があります。


	//------------------------------------------------------
	// 初期値設定

	// デフォルトの位置
	var default_point_home = new GLatLng("34.063068","134.571148");

	// デフォルトのズームレベル 1(最広域)〜19(最詳細)
	var default_zoom_level	= 12;

	// addMarkerQue()でマーカーを追加したとき、自動的に全てのマーカーが収まるズームレベルに設定する
	// （スタートアップ関数は無効になります）
	// var setting_auto_adjust_zoom_level = 0;
	var setting_auto_adjust_zoom_level = 0;

	// コントロール （0:なし / 1:小 / 2:大 / 3:大(オーバービュー付))
	var default_control = 0;

	// デフォルトの地図サイズ(ピクセル)
	var default_size_x = 700;
	var default_size_y = 500;

	//------------------------------------------------------
	// 初期処理
	
	var startup_id = '1';
	
	var setting_point_home , setting_zoom_level;

	getURLQuery();
	if(urlquery["initId"] != undefined){
		startup_id = urlquery["initId"];
	}

	//------------------------------------------------------
	// メイン処理

	var map;
	var cur_marker;

	function load(gs){
		// function load(init_size_x,init_size_y,init_lat,init_lng,init_zoom_level,init_adjust) {

		getURLQuery();
		loadSetting();

		//カレントポジションの設定
		var cur_point;
		if(gs.lat && gs.lng){
			// 優先順位１　load時に値指定
			cur_point = new GLatLng(init_lat,init_lng);
		} else if ((urlquery["posx"] != undefined) && (urlquery["posy"] != undefined)) {
			// 優先順位２　クエリーで値指定
			var posx = parseFloat(urlquery["posx"]);
			var posy = parseFloat(urlquery["posy"]);
			cur_point = new GLatLng(posy,posx);
		} else {
			// 優先順位最後　クッキーかデフォルト
			cur_point = setting_point_home;
		}
		
		//サイズの取得
		var setting_size_x , setting_size_y;
		if(gs.width && gs.height){
			setting_size_x = gs.width;
			setting_size_y = gs.height;
		} else {
			setting_size_x = default_size_x;
			setting_size_y = default_size_y;
		}
		
		if(gs.zoom){
			setting_zoom_level = gs.zoom;
		}
		if(gs.adjust){
			setting_auto_adjust_zoom_level = gs.adjust;
		}
		
		if(gs.control){
			setting_control = gs.control;
		} else {
			setting_control = default_control;
		}
		
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"), {size: new GSize(setting_size_x,setting_size_y)});

			if(setting_control == 1){
				map.addControl(new GMapTypeControl());
				map.addControl(new GSmallMapControl());
			} else if (setting_control == 2){
				map.addControl(new GMapTypeControl());
				map.addControl(new GLargeMapControl());
			} else if (setting_control == 3){
				map.addControl(new GMapTypeControl());
				map.addControl(new GLargeMapControl());
				// map.addControl(new GOverviewMapControl(new GSize(150,150)));
			}

			map.setCenter(cur_point,setting_zoom_level);
			
			map.enableDoubleClickZoom();
			map.enableContinuousZoom();
		}

		prosessMarkerQue();
    }

	function unload(){
		GUnload();
	}

	//------------------------------------------------------
	// マップ位置処理

	function setHomePoint(){
		setting_point_home = cur_marker.getPoint();

		var point = cur_marker.getPoint();
		var str = point.x + "," + point.y;
		setCookie("point_home",str);

		moveToHomePoint();
	}

	function openInfo(posy,posx,msg){
		var point = new GLatLng(posy,posx);
		map.openInfoWindowHtml(point,msg);
		map.panTo(point);
	}

	function moveTo(posy,posx){
		var point = new GLatLng(posy,posx);
		cur_marker.setPoint(point);
		map.panTo(point);
	}
	function moveToHomePoint(){
		cur_marker.setPoint(setting_point_home);
		map.panTo(setting_point_home);
	}
	function moveToDefaultPoint(){
		cur_marker.setPoint(default_point_home);
		map.panTo(default_point_home);
	}


	//------------------------------------------------------
	// ユーザーマーカー

	var markerque = new Array();
	var markerque_startup_func ;

	function addMarkerQue(posy,posx,image_tag,caption,func)
	{
		var tmp_val = new Array(posy,posx,image_tag,caption,func);
		
		markerque.push(tmp_val);
	}
	function setMarkerQueStartupFunction(func){
		markerque_startup_func = func;
	}

	function prosessMarkerQue(){
		var lat_max, lat_min, lng_max, lng_min //自動ズームレベル用

		for(var i=0 ; i < markerque.length; i++){
			var tmp = markerque[i];
			addMarkerTo(tmp[0],tmp[1],tmp[2],tmp[3],tmp[4]);
			
			var lat = tmp[0] , lng = tmp[1];
			if(lat_max==undefined){ lat_max=lat; } else if(lat_max<lat){ lat_max=lat; }
			if(lat_min==undefined){ lat_min=lat; } else if(lat_min>lat){ lat_min=lat; }
			if(lng_max==undefined){ lng_max=lng; } else if(lng_max<lng){ lng_max=lng; }
			if(lng_min==undefined){ lng_min=lng; } else if(lng_min>lng){ lng_min=lng; }
		}

		if(setting_auto_adjust_zoom_level == 1){
			var northeast = new GLatLng(lat_max,lng_max);
			var southwest = new GLatLng(lat_min,lng_min);
			var bounds = new GLatLngBounds(southwest,northeast);
			var center = new GLatLng( (northeast.lat() + southwest.lat())/2.0 , (northeast.lng() + southwest.lng())/2.0);
			var zoom   = map.getBoundsZoomLevel(bounds);

			map.setCenter(center,zoom);
		} else {
			if(typeof(markerque_startup_func) == "function"){ markerque_startup_func(); }
		}
	}

	function addMarkerTo(posy,posx,image_tag,caption,func)
	{
		// ユーザーアイコン使わない
		// var icon = getUserIcon(image_tag);
		//
		//var new_marker = new GMarker(new GLatLng(posy,posx),{
		//	icon: icon
		//	,title: caption
		//});

		var new_marker = new GMarker(new GLatLng(posy,posx),{
			title: caption
		});
		new_marker.title = caption;
		
		map.addOverlay(new_marker);
		
		// EventListener
		GEvent.addListener(new_marker,"click",function(){
			var point = new_marker.getPoint();
			map.panTo(point);
			if(typeof(func) == "function") { func(); }
		});
	}

	function getUserIcon(tag){
		// googleMap用 アイコン画像を返す。
		// 通常用と印刷用のアイコンとして、PNG形式(アルファch込み) GIF形式(透過GIF)をそれぞれ指定する

		var icon = new GIcon();

		if(!tag) {
			tag = "default";
		}
		
		icon.image		= "./images/marker_" + tag + ".gif";
		icon.shadow		= "./images/marker_shadow.gif";
		icon.iconSize 	= new GSize(41,60);
		//icon.shadowSize = new GSize(1,1);
		
		icon.printImage 	= "./images/marker_" + tag + ".gif";
		icon.mozPrintImage 	= "./images/marker_shadow.gif";
		icon.printShadow 	= "./images/marker_shadow.gif";
		
		icon.iconAnchor = new GPoint(24,57);

		return icon;
	}


	//------------------------------------------------------
	// レスポンス

    function sendPoint(){
		var point = cur_marker.getPoint();
		
		// window.opener.document.getElementById("pick_from_popup_x").innerHTML = point.x;
		// window.opener.document.getElementById("pick_from_popup_y").innerHTML = point.y;
		
		window.opener.document.forms[0].position_x.value = point.x;
		window.opener.document.forms[0].position_y.value = point.y;

		writeSetting();

		window.close();
    }
    
    function cancel(){
    	window.close();
    }

	//------------------------------------------------------
	// ユーティリティ関数
	
	function trim(str){
		return str.replace(/^\s*([^\s]*)\s*$/,"$1");
	}

	//------------------------------------------------------
    // URLクエリー取得

    var urlquery;

	function getURLQuery(){
		urlquery = new Array();
		if(location.search){
			var pair_str = location.search.substr(1).split("&");
			for (var i=0; i < pair_str.length; i++){
				var str = pair_str[i].split("=");
				urlquery[str[0]] = decodeURIComponent(str[1]);
			}
		}
	}
    
    
	//------------------------------------------------------
    // クッキー処理

    var cookies;
	var cookie_expire_days = 30;

	function loadSetting(){
		getCookie();

		//ホームポジションの設定
		if (cookies["point_home"] == undefined){
			setting_point_home = default_point_home;

			// alert("homepoint : default / " + setting_point_home.x + "/" + setting_point_home.y);
		} else {
			var setting_point_home_value = cookies["point_home"];

			var str = setting_point_home_value.split(",");
			var posx = parseFloat(str[0]);
			var posy = parseFloat(str[1]);
			setting_point_home = new GLatLng(posy,posx);

			// alert("homepoint : cookie / " +posx + "/" + posy);
		}
		
		//デフォルトズームレベルの設定
		if (cookies["zoom_level"] == undefined){
			setting_zoom_level = default_zoom_level;
		} else {
			setting_zoom_level = parseFloat(cookies["zoom_level"]);
		}
	}

	function writeSetting(){
		//ズームレベルの保存
		setCookie("zoom_level",map.getZoom());
	}

	function getCookie(){
 		cookies = new Array();
 		if (document.cookie) {
			var cookie_value = document.cookie.split("; ");
			for (var i=0; i < cookie_value.length; i++){
				var str = cookie_value[i].split("=");
				cookies[str[0]] = unescape(str[1]);
			}
		}
	}

	function setCookie(name,value){
		if (!name) return;
		var str = name + "= " + escape(value);
		document.cookie = str;
		
		setCookieExpire(cookie_expire_days);
	}
	function setCookieExpire(expires){
		if (expires) {
			var nowtime = new Date().getTime();
			expires = new Date(nowtime + ( 60 * 60 * 24 * 1000 * expires));
			expires = expires.toGMTString();

			document.cookie = "expires=" + expires;
		}
	}


