var JsonData;
var map;
var geocoder;
var search_query;
var StorePageLat;
var StorePageLng;
var httpObj;

function initialize()
{
	map = new google.maps.Map2(document.getElementById("map"));
	geocoder = new GClientGeocoder();

	StartshowAddress();

	// Controller Set
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());

	GEvent.addListener(map, "dragend", MarkerReload);
	GEvent.addListener(map, 'zoomend', MarkerReload);
}

function StartshowAddress()
{
	if (geocoder) {
		geocoder.getLatLng(
			search_query,
			function(point) {
			if (!point) {
				alert('「'+search_query + "」に一致する情報は見つかりませんでした。\n別のキーワードで試してみてください。");
			} else {
				map.setCenter(point, 13);
				var Icon = new GIcon();
				Icon.image = "http://www.google.com/mapfiles/gadget/arrowSmall80.png";
				Icon.shadow="http://www.google.com/mapfiles/gadget/arrowshadowSmall80.png"
				Icon.iconSize = new GSize(31, 27);
				Icon.shadowSize = new GSize(31, 27);
				Icon.iconAnchor = new GPoint(8, 27);
				Icon.infoWindowAnchor = new GPoint(5, 1);
				var markerOptions = { icon:Icon };
				map.addOverlay(new GMarker(point, markerOptions));

				loadData();
			}
		}
	);
	}
}


function page_initialize()
{
	var _point = new google.maps.LatLng(StorePageLat, StorePageLng);
	map = new google.maps.Map2(document.getElementById("store_map"));
	map.setCenter(_point, 16);

	// Controller Set
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());

	var baseIcon = new GIcon();
	baseIcon.image = "./image/marker.png";
	baseIcon.shadow = "./image/marker_shadow.png";
	baseIcon.iconSize = new GSize(47, 40);
	baseIcon.shadowSize = new GSize(67, 47);
	baseIcon.iconAnchor = new GPoint(23, 40);
	baseIcon.infoWindowAnchor = new GPoint(0, 0);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);

	var markerOptions = { icon:baseIcon };
	map.addOverlay(new GMarker(_point, markerOptions));
}

function MarkerReload()
{
	map.clearOverlays();
	loadData();
}


function CreateMarker()
{
	var baseIcon = new GIcon();
	baseIcon.image = "./image/marker.png";
	baseIcon.shadow = "./image/marker_shadow.png";
	baseIcon.iconSize = new GSize(47, 40);
	baseIcon.shadowSize = new GSize(67, 47);
	baseIcon.iconAnchor = new GPoint(23, 40);
	baseIcon.infoWindowAnchor = new GPoint(0, 0);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	function newMarker(point, info)
	{
		markerOptions = { icon:baseIcon };
		var marker = new GMarker(point, markerOptions);

		GEvent.addListener(marker, "click", function()	{
			var result = '<div class="map_info clearfix">';
			result += '<p class="map_title">'+info.name+'</p>';

			if (info.photo==null){
				result += '<div class="map_photo"><img src="/image/no_200.gif" /></div>';
			}else{
				result += '<div class="map_photo"><img src="/upload/'+info.photo+'" /></div>';
			}

			result += '<div class="map_contents">';
			result += '<p class="map_link"><a href="/?store='+info.id+'">【詳細】</a></p>';
			result += '</div>';

			result += '</div>';
			marker.openInfoWindowHtml(result);
		});
		return marker;
	}

	for (var i = 0; i < JsonData.length; i++) {
		var latlng = new GLatLng(JsonData[i].lat,JsonData[i].lng);
		map.addOverlay(newMarker(latlng, JsonData[i]));
	}
}

function StoreList()
{
	var result = '<table>';
	result += '<tr><th id="StoreListName"><strong>店舗名</strong></th><th id="StoreListAddr"><strong>住所</strong></th><th id="StoreListTel"><strong>電話番号</strong></th></tr>'
	for (var i = 0; i < JsonData.length; i++) {
		result += '<tr>';
		result += '<td><a href="/?store='+JsonData[i].id+'">'+JsonData[i].name+'</a></td>';
		result += '<td>'+JsonData[i].address+'</td>';
		if (JsonData[i].tel==null){
			result += '<td> </td>';
		}else{
			result += '<td>'+JsonData[i].tel+'</td>';
		}
		result += '</tr>';
	}
	result += '</table>';
	document.getElementById("StoreList").innerHTML = result;
}

function loadData()
{
	var Bounds = map.getBounds();
	var w = Bounds.getSouthWest();
	var e = Bounds.getNorthEast();

	var url = '/Data.php?wLat='+w.lat()+'&wLng='+w.lng()+'&eLat='+e.lat()+'&eLng='+e.lng();

	httpObj = createXMLHttpRequest(handleResult);
	if (httpObj) {
		httpObj.open("GET", url, true);
		httpObj.send(null);
	}
}

function handleResult()
{
	if ((httpObj.readyState == 4) && (httpObj.status == 200)) {
		
		JsonData = eval(httpObj.responseText);
		CreateMarker();
		StoreList();
	}
}


function createXMLHttpRequest(cbFunc)
{
	var XMLhttpObject = null;
	try {
		XMLhttpObject = new XMLHttpRequest();
	} catch(e) {
		try {
			XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				return null;
			}
		}
	}
	if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
	return XMLhttpObject;
}

function getAjaxFilter()
{
	if (navigator.appVersion.indexOf("KHTML") > -1) {
		return function(t) {
			var esc = escape(t);
			return (esc.indexOf("%u") < 0 && esc.indexOf("%") > -1) ? decodeURIComponent(esc) : t
		}
	} else {
		return function(t) {
			return t
		}
	}
}