﻿/* grobal */
var map;
var geocoder;
var markerData  = new Array();//array：ﾏｰｶｰ
var markerTitle = new Array();//array：ﾏｰｶｰﾀｲﾄﾙ
var count = 0;
/**
 * map
 * @param  int    center_lat:緯度
 *         int    center_lon:経度136.48782670497894
 *         int    default_zoom:ｽﾞｰﾑ
 *         string action:管理ｱｸｼｮﾝ
 *         array  defmarkers:既にあるﾏｰｶｰ
 */
function map(center_lat,center_lon,default_zoom,action,defmarkers) {
  if (GBrowserIsCompatible()) {
	//初期設定
	mapConfig();
	
	//ｾﾝﾀｰ 緯度:lat、経度:lon、zoom
    map.setCenter(new GLatLng(center_lat,center_lon), default_zoom);
	if (action == "add" || action == "edit") {
		document.getElementById("input_center_lat").innerHTML = center_lat + "<input type=\"hidden\" name=\"lat\" value=\"" + center_lat + "\" />";
		document.getElementById("input_center_lon").innerHTML = center_lon + "<input type=\"hidden\" name=\"lon\" value=\"" + center_lon + "\" />";
		document.getElementById("input_default_zoom").innerHTML = default_zoom + "<input type=\"hidden\" name=\"zoom\" value=\"" + default_zoom + "\" />";
		GEvent.addListener(map, "move", function() {
			var center = map.getCenter();
			var lat  = center.lat();
			var lon  = center.lng();
			var zoom = map.getZoom();
			document.getElementById("input_center_lat").innerHTML = lat + "<input type=\"hidden\" name=\"lat\" value=\"" + lat + "\" />";
			document.getElementById("input_center_lon").innerHTML = lon + "<input type=\"hidden\" name=\"lon\" value=\"" + lon + "\" />";
			document.getElementById("input_default_zoom").innerHTML = zoom + "<input type=\"hidden\" name=\"zoom\" value=\"" + zoom + "\" />";
		});
	}
	//ﾏｰｶｰ確認用
	if (action == "add_conf" || action == "edit_conf" || action == "del") {
		if(defmarkers != ""){
			var mkArray = defmarkers.split('=!=');
			for (var i = 0; i < mkArray.length; i++) {
				var mkArray_val = mkArray[i].split('%!%');
				confMarker(i,mkArray_val[0],mkArray_val[1],mkArray_val[2]);
			}
			hiddenMarker();
		}
	}
	//ﾏｰｶｰ編集用
	if (action == "add" || action == "edit") {

		if(defmarkers != ""){
			var mkArray = defmarkers.split('=!=');
			for (count = 0; count < mkArray.length; count++) {
				var mkArray_val = mkArray[count].split('%!%');
				editMarker(count,mkArray_val[0],mkArray_val[1],mkArray_val[2]);
			}
			hiddenMarker();
		}

		GEvent.addListener(map, 'click', function(marker, point) {
			if (point) {
				var mCount = count++;
				//ﾏｰｶｰ 作成
				markerData[mCount] = new GMarker(point, { draggable: true });
				map.addOverlay(markerData[mCount]);
				//infowondow
				var msg = msgTitle(mCount) + msgDel(mCount);
				//ﾏｰｶｰ map 初ｸﾘｯｸ
				markerData[mCount].openInfoWindowHtml(msg);
				//ﾏｰｶｰ ｸﾘｯｸ
				GEvent.addListener(markerData[mCount], "click", function() {
					var msg = msgTitle(mCount) + msgDel(mCount);
					markerData[mCount].openInfoWindowHtml(msg);
				});
				//ﾏｰｶｰ ﾄﾞﾗｯｸ
				GEvent.addListener(markerData[mCount], "dragstart", function(){
				    map.closeInfoWindow();
				});
				//ﾏｰｶｰ ﾄﾞﾗｯｸｴﾝﾄﾞ
				GEvent.addListener(markerData[mCount], "dragend", function(){
				    var msg = msgTitle(mCount) + msgDel(mCount);
					markerData[mCount].openInfoWindowHtml(msg );
					hiddenMarker();
				});
				hiddenMarker();
			}
		});
	}
  }
}

function getGeocoder(){
	var address = document.input.gaddress.value;
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert("緯度・経度の取得に失敗しました");
					return true
				}else{
					var mCount = count++;
					//ﾏｰｶｰ 作成
					markerData[mCount] = new GMarker(point, { draggable: true });
					map.addOverlay(markerData[mCount]);
					//infowondow
					var msg = msgTitle(mCount) + msgDel(mCount);
					//ﾏｰｶｰ map 初ｸﾘｯｸ
					markerData[mCount].openInfoWindowHtml(msg);
					//ﾏｰｶｰ ｸﾘｯｸ
					GEvent.addListener(markerData[mCount], "click", function() {
						var msg = msgTitle(mCount) + msgDel(mCount);
						markerData[mCount].openInfoWindowHtml(msg);
					});
					//ﾏｰｶｰ ﾄﾞﾗｯｸ
					GEvent.addListener(markerData[mCount], "dragstart", function(){
					    map.closeInfoWindow();
					});
					//ﾏｰｶｰ ﾄﾞﾗｯｸｴﾝﾄﾞ
					GEvent.addListener(markerData[mCount], "dragend", function(){
					    var msg = msgTitle(mCount) + msgDel(mCount);
						markerData[mCount].openInfoWindowHtml(msg );
						hiddenMarker();
					});
					hiddenMarker();
				}
			}
		);
	}
}
//ﾏｰｶｰ 編集用
function editMarker(i,lat,lon,title){
	markerData[i] = new GMarker(new GLatLng(lat, lon), { draggable: true });
	markerTitle[i] = title;
	map.addOverlay(markerData[i]);
	//ﾏｰｶｰ ｸﾘｯｸ
	GEvent.addListener(markerData[i], "click", function() {
		var msg_edit = msgTitle(i) + msgDel(i);
		markerData[i].openInfoWindowHtml(msg_edit);
	});
	//ﾏｰｶｰ ﾄﾞﾗｯｸ
	GEvent.addListener(markerData[i], "dragstart", function(){
	    map.closeInfoWindow();
	});
	//ﾏｰｶｰ ﾄﾞﾗｯｸｴﾝﾄﾞ
	GEvent.addListener(markerData[i], "dragend", function(){
	    var msg = msgTitle(i) + msgDel(i);
		markerData[i].openInfoWindowHtml(msg );
		hiddenMarker();
	});
}
//ﾏｰｶｰ 確認用
function confMarker(i,lat,lon,title){
	markerData[i] = new GMarker(new GLatLng(lat, lon));
	markerTitle[i] = title;
	map.addOverlay(markerData[i]);
	GEvent.addListener(markerData[i], 'click', function() {
		markerData[i].openInfoWindowHtml(markerTitle[i]);
	});
}
//ﾏｰｶｰ hidden
function hiddenMarker(){
	var view = "";
	for (var i = 0; i < markerData.length; i++) {
		if(markerData[i] &&  markerData[i] != ""){
			var p = markerData[i].getLatLng();
			//view += "No." + i + " , lat=" + p.lat() + " , lng=" + p.lng();
			view += "<input type=\"hidden\" name=\"marker[]\" value=\"" + p.lat() + "%!%" + p.lng() + "%!%";
			if(markerTitle[i] &&  markerTitle[i] != ""){
				//view +=  " , title=" + markerTitle[i];
				view +=  markerTitle[i];
			}
			//view += "<br />";
			view += "\" />";
		}
	}
	document.getElementById("hidden_maker").innerHTML = view;
}
//infowondow - ﾀｲﾄﾙinput
function msgTitle(mCount){
	
	if(markerTitle[mCount] &&  markerTitle[mCount] != ""){
		title = markerTitle[mCount];
	}else{
		title = "";
	}
	var msg = "<form onsubmit=\"titleAdd(this.title.value, " + mCount + "); return false;\">";
	msg += "■タイトルをご記入ください<br />";
	msg += "<input type=\"text\" name=\"title\" value=\"" + title + "\" size=\"20\" />";
	msg += "<input type=\"submit\" value=\"保存\" />";
	msg += "</form>";
	return msg;
}
//infowondow - 削除ﾒｯｾｰｼﾞ
function msgDel(mCount){
	var msg = "<br /><center><form method=\"post\" action=\"\">";
	msg += "<input type=\"button\" value=\"ﾏｰｶｰ削除\" onClick=\"markerDel(" + mCount + "); \" />";
	msg += "</form></center><br />";
	return msg;
}
//ﾀｲﾄﾙ追加
function titleAdd(title, mCount) {
	markerTitle[mCount] = title;
	hiddenMarker();
	alert("ﾀｲﾄﾙ「" + markerTitle[mCount] + "」を保存しました。");
	return true
}

//ﾏｰｶｰ削除
function markerDel(mCount) {
	map.removeOverlay(markerData[mCount]); //地図上削除
	markerData[mCount] = "";               //array削除
	hiddenMarker();
}

//初期設定
function mapConfig(){
    map = new GMap2(document.getElementById("map"));
	geocoder = new GClientGeocoder();
	map.addControl(new GLargeMapControl());
    //map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.addControl(new GLargeMapControl3D());
    //ﾐﾆ地図
	//var miniMap=new GOverviewMapControl(new GSize(200,150));
    //map.addControl(miniMap);
}

//ｱﾗｰﾄ
//alert(title);
//return true
