var map;
var gmarkers = [];
var geocoder;
var cross_marker = null;
var s3folder = 'http://api.knecht.jp.s3.amazonaws.com/static';

function gmapLoad() {
	if (GBrowserIsCompatible()) {
		// defoult point
		var x = 35.68177088485512;
		var y = 139.7672939300537;
		var z = 15;

		map = new GMap2(document.getElementById("gmap"));
		map.setCenter(new GLatLng(x, y), z);
		map.addControl(new GMapTypeControl(), new GControlPosition(
				G_ANCHOR_TOP_RIGHT, new GSize(17, 9)));
		map.addControl(new GSmallMapControl(), new GControlPosition(
				G_ANCHOR_TOP_RIGHT, new GSize(17, 46)));
		map.enableDoubleClickZoom();
		map.enableContinuousZoom();

		// geocoding
		geocoder = new GClientGeocoder();

		// center cursor
		var cross_icon = new GIcon();
		cross_icon.image = s3folder + "/images/gmarker/center.png";
		cross_icon.shadow = s3folder + "/images/gmarker/center_shadow.png";
		cross_icon.iconSize = new GSize(23, 23);
		cross_icon.shadowSize = new GSize(29, 29);
		cross_icon.iconAnchor = new GPoint(11, 11);
		var option = {
			icon : cross_icon,
			clickable : false
		};
		cross_marker = new GMarker(new GLatLng(x, y), cross_icon);
		map.addOverlay(cross_marker);
		drawCrossScope(map);

		// event listener
		GEvent.addListener(map, "move", function() {
			drawCrossScope(map);
			displayLatLng();
		});

		GEvent.addListener(map, "moveend", function() {
			reveseGeoDatafeed();
		});

		displayLatLng();
	}
}

// center cursor func
function drawCrossScope(map) {
	var mapCenter = map.getCenter();
	cross_marker.setPoint(mapCenter);
}

// latlng display func
function displayLatLng() {
	var mapCenter = map.getCenter();
	$("#lat").val(mapCenter.y);
	$("#lng").val(mapCenter.x);
	var tky = latlngTky();
	$("#latTky").val(tky.y);
	$("#lngTky").val(tky.x);
}

function showAddress(address) {
	if (geocoder) {
		geocoder.getLatLng(address, gotoAddre);
	}
}

// geocoding
function gotoAddre(point) {
	if (!point) {
		var alertStr = "ジオコーディングに失敗しました。下記の点を見直してください。<br />"
				+ "<br />"
				+ "1.送信された住所文字列が正しくありません。キーワードを修正してください。<br />"
				+ "<span class='red'>[ヒント]住所と建物名は同時に検索できません。たとえば「東京都港区六本木６丁目１０−１六本木ヒルズ」はエラーになります。「東京都港区六本木６丁目１０−１」または「六本木ヒルズ」と分割してください。</span><br />"
				+ "<br />"
				+ "2.あなたのリクエストが短時間に大量に処理されました。混雑を解消するために、しばらくしてから再度アクセスしてみてください。";
		jAlert(alertStr, 'エラー');
	} else {
		map.setCenter(point, 15);
		var marker = new GMarker(point);
		map.addOverlay(marker);
	}
}

// reverse
function reverseAddre(response) {
	if (!response || response.Status.code != 200) {
		alert("あなたのリクエストが短時間に大量に処理されました。混雑を解消するために、しばらくしてから再度アクセスしてみてください。");
	} else {
		place = response.Placemark[0];
		place.address = place.address.replace(/^日本/, "")
		var res = "<li>" + place.address + "</li>";
		$("#reverseGeoBox").html("<ul>" + res + "</ul>");
	}
}

// tokyo latlng converter
function latlngTky() {
	var point = map.getCenter()
	var a = point.x
	var b = point.y
	var wk_x = +a - (a - b * 0.000046038 - a * 0.000083043 + 0.010040);
	var wk_y = +b - (b - b * 0.00010695 + a * 0.000017464 + 0.0046017);
	this.x = +a + wk_x
	this.y = +b + wk_y
	return {
		x : this.x,
		y : this.y
	}
}

