

//「検索」ボタンを押したときの挙動
function entry_google_maps_search( entry_id, block_id ) {
	// 引数チェック
	if( ! entry_id || ! block_id ) return;

	// 表示中の地図の情報
	var target = 'entry_google_maps_maps_' + entry_id + '_' + block_id;
	var map		= $('#' + target).data('map');
	$('#' + target).data('marker', new Array());

	// 検索ワード
	var keyword = $('#entry_google_maps_input').val();
	if( ! keyword ) return;

	// ジオコーディング！
	var gcg = new GClientGeocoder();
	gcg.getLatLng( keyword, function( new_pos ){
		if( ! new_pos ) {
			alert('指定された場所はみつかりませんでした');
			return;
		}
		map.clearOverlays();
		var new_marker = addMarker(entry_id, block_id, new_pos, "");

		$('#' + target).data('marker', new Array(new_marker));
		map.setCenter( new_pos );
	});
}

// 新しいマーカーを追加します。
function addMarker(entry_id, block_id, point, text) {

	var target = 'entry_google_maps_maps_' + entry_id + '_' + block_id;
	var map		= $('#' + target).data('map');
	var markers	= $('#' + target).data('marker');
	var marker = new GMarker( point, {
		draggable: true
	});
	marker.infoText = text;
	marker.deleted = false;
	var index = markers.length;
	GEvent.addListener(marker, 'click', function(overlay, point) {
		marker.openInfoWindowHtml(getInfoWindowEditHTML(entry_id, block_id, index, marker.infoText));
	});
	
	map.addOverlay(marker);
	
	GEvent.trigger(marker, "click");
	return marker;
}

function infoWindowEditOK(entry_id, block_id, index, e) {
	var target = 'entry_google_maps_maps_' + entry_id + '_' + block_id;
	var map		= $('#' + target).data('map');
	var markers	= $('#' + target).data('marker');
	
	var text = $(e).parent().find("textarea").val();
	markers[index].infoText = text;
	map.getInfoWindow().hide();
	$('#' + target).data('marker', markers);
}

function removeMarker(entry_id, block_id, index) {
	var target = 'entry_google_maps_maps_' + entry_id + '_' + block_id;
	var map		= $('#' + target).data('map');
	var markers	= $('#' + target).data('marker');
	
	map.removeOverlay(markers[index]);
	markers[index].deleted = true;
	$('#' + target).data('marker', markers);
}

function getInfoWindowEditHTML(entry_id, block_id, index, text) {
	return "<textarea>"+text+"</textarea><br/>" +
			"<input type='button' onclick='infoWindowEditOK("+entry_id+", "+block_id+","+index+", this);' value='　OK　'/>&nbsp;" +
			"<input type='button' onclick='removeMarker("+entry_id+", "+block_id+","+index+");' value='マーカーを削除'/>";
}

// アンサニタイズ
function unsanitize(text) {
	text = text.replace(/&lt;/g, "<");
	text = text.replace(/&gt;/g, ">");
	text = text.replace(/&quot;/g, "\"");
	return text;
}

//「保存する」ボタンを押したときの挙動
function entry_google_maps_save( entry_id, block_id ) {
	// 引数チェック
	if( ! entry_id || ! block_id ) return;

	// 表示中の地図の情報
	var target = 'entry_google_maps_maps_' + entry_id + '_' + block_id;
	var map		= $('#' + target).data('map');
	var markers	= $('#' + target).data('marker');


	// 保存する値
	var lat  = new Array();
	var lng  = new Array();
	var text = new Array();
	var zoom = map.getZoom();
	var center_lat = map.getCenter().y;
	var center_lng = map.getCenter().x;
	var map_type = map.getCurrentMapType().getName();
	
	for (var i = 0; i < markers.length; i++) {
		if (markers[i].deleted) continue;
		lat.push(markers[i].getLatLng().lat());
		lng.push(markers[i].getLatLng().lng());
		text.push(unsanitize(markers[i].infoText));
	}
	
	// バリデート
	if( lat.length == 0 ) {
		alert('マーカーが１つもない状態では保存できません');
		return;
	}

	// ステータス表示
	$('#E_plugin_' + block_id).showStatus('保存しています');

	// 保存用のAPIをたたく
	$.ajax({
		type: 'POST',
		url: '/entry/' + entry_id + '/' + block_id + '/appli/plugin/EntryGoogleMaps/save/',
		data: {
			lat: lat,
			lng: lng,
			zoom: zoom,
			text: text,
			center_lat: center_lat,
			center_lng: center_lng,
			map_type: map_type
		},
		dataType: 'json',
		success: function( res ) {
			if( res.success ) {
				$('#E_plugin_' + block_id).showStatus('保存しました');
			} else {
				alert( '保存に失敗しました' );
			}
			$('#E_plugin_' + block_id ).closeEditor();
		}
	});
}

//「キャンセル」ボタンを押したときの挙動
function entry_google_maps_cancel( entry_id, block_id ) {
	$('#E_plugin_' + block_id ).closeEditor();
}

//「削除する」ボタンを押したときの挙動
function entry_google_maps_delete( entry_id, block_id, mode ) {
	// 引数チェック
	if( ! entry_id || ! block_id ) return;

	// 確認
	if( mode != 'noconfirm' ) {
		if( ! confirm('本当に削除しますか？') ) return;
	}

	// ステータス表示
	$('#E_plugin_' + block_id).showStatus('削除しています');

	// 削除用のAPIをたたく
	$.ajax({
		type: 'POST',
		url: '/entry/' + entry_id + '/' + block_id + '/appli/plugin/EntryGoogleMaps/delete/',
		data: {},
		dataType: 'json',
		success: function( res ) {
			if( res.success ) {
				$('#E_plugin_' + block_id).showStatus('削除しました');
			} else {
				alert( '削除に失敗しました' );
			}
			$('#E_plugin_' + block_id ).deleteBlock();
		}
	});
}

function replaceMapTypes(map, defaultMap) {
	var normal = new GMapType(G_NORMAL_MAP.getTileLayers(), G_NORMAL_MAP.getProjection(),"地図");
	var satellite = new GMapType(G_SATELLITE_MAP.getTileLayers(), G_SATELLITE_MAP.getProjection(),"航空写真");
	var hybrid = new GMapType(G_HYBRID_MAP.getTileLayers(), G_HYBRID_MAP.getProjection(),"合成");
  	
  	map.getMapTypes().length = 0;
	map.addMapType(normal);
	map.addMapType(satellite);
	map.addMapType(hybrid);
	
	if (defaultMap == "地図") {
		map.setMapType(normal);
	} else if (defaultMap == "航空写真") {
		map.setMapType(satellite);
	} else if (defaultMap == "合成") {
		map.setMapType(hybrid);
	}
}
