//--------------------------------------------------------------------
// 地図検索グローバル変数
//--------------------------------------------------------------------
var search_mapID = '';
var search_txtID = '';
var search_query = 0;
var search_page  = 1;
var search_map   = null;
var search_mark  = new Array;
var search_text  = '';
var search_flag  = true;
//var search_load  = null;

//--------------------------------------------------------------------
// 地図検索メイン関数
//--------------------------------------------------------------------
function MapSearch(mapID , txtID , qrySTR , lat , lng , zoom)
{
	var defaultLat  = 35.68124800099281;
	var defaultLng  = 139.76703643798828;
	var defaultZoom = 16;
	
	if(lat  != '') defaultLat  = parseFloat(lat);
	if(lng  != '') defaultLng  = parseFloat(lng);
	if(zoom != '') defaultZoom = parseInt(zoom);
	
	search_mapID  = mapID;
	search_txtID  = txtID;
	search_query  = qrySTR;
	search_map    = new GMap2(document.getElementById(search_mapID));
	
	search_map.addControl(new GLargeMapControl());
	if(search_map.getCenter() == null){
		search_map.setCenter(new GLatLng(defaultLat , defaultLng) , defaultZoom);
	}
	MapSearchEvent();
	GEvent.addListener(search_map , 'moveend' , MapSearchEvent);
}
//--------------------------------------------------------------------
// 地図検索イベント関数
//--------------------------------------------------------------------
function MapSearchEvent()
{
	if(search_flag === true){
		//if(search_load != null){
		//	search_map.removeOverlay(search_load);
		//}
		//var icon        = new GIcon();
		//icon.image      = 'http://www.min-hiru/img/map_search_refresh.gif';
		//icon.iconSize   = new GSize(140, 10);
		//icon.iconAnchor = new GPoint(70, 5);
		//var search_load = new GMarker(new GLatLng(search_map.getCenter().y , search_map.getCenter().x) , icon);
		//search_map.addOverlay(search_load);
		
		document.form.lat.value  = search_map.getCenter().y;
		document.form.lng.value  = search_map.getCenter().x;
		document.form.zoom.value = search_map.getZoom();
		
		var bounds = search_map.getBounds();
		
		if(bounds.getNorthEast().lat() > bounds.getSouthWest().lat()){
			var LatMin = 'latmin=' + bounds.getSouthWest().lat();
			var LatMax = 'latmax=' + bounds.getNorthEast().lat();
		}
		else{
			var LatMin = 'latmin=' + bounds.getNorthEast().lat();
			var LatMax = 'latmax=' + bounds.getSouthWest().lat();
		}
		if(bounds.getNorthEast().lng() > bounds.getSouthWest().lng()){
			var LngMin = 'lngmin=' + bounds.getSouthWest().lng();
			var LngMax = 'lngmax=' + bounds.getNorthEast().lng();
		}
		else{
			var LngMin = 'lngmin=' + bounds.getNorthEast().lng();
			var LngMax = 'lngmax=' + bounds.getSouthWest().lng();
		}
		var xmlurl  = '/search/map.xml' + '?' + LatMin + '&' + LatMax + '&' + LngMin + '&' + LngMax + '&' + search_query + '&page=' + search_page;
		var request = GXmlHttp.create();
		var xmlFlag = false;
		request.open("GET", xmlurl, true);
		request.onreadystatechange = function(){
			if (request.readyState == 4) {
				for(var i = 0; i < search_mark.length; i++){
					search_map.removeOverlay(search_mark[i]);
				}
				search_mark = new Array;
				document.getElementById(search_txtID).innerHTML = '';
				document.getElementById(search_txtID).scrollTop = 0;
				
				var xmlDoc = request.responseXML;
				var shops  = xmlDoc.documentElement.getElementsByTagName('shop');
				for(var i = 0; i < shops.length; i++){
					var id   = shops[i].getAttribute('id');
					var name = shops[i].getAttribute('name');
					var addr = shops[i].getAttribute('addr');
					var lat  = shops[i].getAttribute('lat');
					var lng  = shops[i].getAttribute('lng');
					var tel  = shops[i].getAttribute('tel');
					var time = shops[i].getAttribute('time');
					var cmnt = shops[i].getAttribute('comment');
					var star = shops[i].getAttribute('point');
					MapSearchTextPut(id , name , addr , lat , lng , tel , time , cmnt , star , i , shops.length);
					MapSearchMarkPut(id , name , addr , lat , lng , tel , time , cmnt , star , i , shops.length);
				}
				var pages = xmlDoc.documentElement.getElementsByTagName('page');
				var count    = pages[0].getAttribute('count');
				var start    = pages[0].getAttribute('start');
				var end      = pages[0].getAttribute('end');
				var limit    = pages[0].getAttribute('limit');
				var pageThis = pages[0].getAttribute('pages_current');
				var pageBack = pages[0].getAttribute('pages_back');
				var pageNext = pages[0].getAttribute('pages_next');
				var pageStr  = pages[0].getAttribute('pages_start');
				var pageEnd  = pages[0].getAttribute('pages_end');
				MapSearchPagePut(count , limit , start , end , pageThis , pageBack , pageNext , pageStr , pageEnd);
				
				//search_map.removeOverlay(search_load);
				//search_load = null;
			}
		}
		search_page = 1;
		request.send(null);
	}
	search_flag = true;
}
//--------------------------------------------------------------------
// 地図検索マーカーデータ登録関数
//--------------------------------------------------------------------
function MapSearchMarkPut(id , name , addr , lat , lng , tel , time , cmnt , star , markerID, length)
{
	for(var i = 0; i < search_mark.length; i++){
		if(search_mark[i].getLatLng().lat() == lat && search_mark[i].getLatLng().lng() == lng){
			lng = parseFloat(lng) + (0.00005 * (20 - search_map.getZoom()));
		}
	}
	var point = new GLatLng(lat , lng);
	var html  = '<div style="width:150px"><a href="/shop/' + id + '/">' + name + '</a></div>';
	
	var icon        = new GIcon();
	//icon.image      = 'http://www.min-hiru.jp/img/markers/numbered_marker.php?image=pushpins/webhues/007.png&text=' + (markerID + 1);
	icon.image      = 'http://www.min-hiru.jp/img/markers/' + (markerID + 1) + '.png';
	icon.iconSize   = new GSize(20 , 34);
	icon.iconAnchor = new GPoint(10 , 34);
	icon.shadow     = 'http://www.min-hiru.jp/img/markers/shadow.png';
	icon.shadowSize = new GSize( 37, 34 );			// 影画像の大きさ
	//icon.iconAnchor = new GPoint( 20, 40 );			// 画像の「基準点」
	//icon.infoWindowAnchor = new GPoint( 20, 5 );	// 情報ウィンドウの基準点
	
	search_mark[markerID] = new GMarker(point , icon);
//	search_mark[markerID] = new GMarker(point);
	GEvent.addListener(search_mark[markerID] , 'click' , function(){
		for(i = 0; i < length; i++){
			removeID = 'target_' + i;
			document.getElementById(removeID).style.background = '#ffffff';
		}
		search_flag = false;
		targetID    = 'target_' + markerID;
		targetTop   = document.getElementById(targetID).offsetTop;
		firstID     = 'target_0';
		firstTop    = document.getElementById(firstID).offsetTop;
		document.getElementById('shopdata').scrollTop = targetTop - firstTop;
		document.getElementById(targetID).style.background = '#eeeeee';
		search_mark[markerID].openInfoWindowHtml(html);
	});
	search_map.addOverlay(search_mark[markerID]);
}
//--------------------------------------------------------------------
// 地図検索テキストデータ登録関数
//--------------------------------------------------------------------
function MapSearchTextPut(id , name , addr , lat , lng , tel , time , cmnt , star , markerID , length)
{
	if(markerID == 0){
		search_text = '';
	}
	search_text += '<div id="target_' + markerID + '" style="width:178px">';
	search_text += '<table width="178" border="0" cellpadding="0" cellspacing="0">';
	search_text += '<tr><td colspan="3"><h3 class="r_block01_txt03"><a href="/shop/' + id + '/">' + (markerID + 1) + '.&nbsp;' + name + '</a></p></td></tr>';
	search_text += '<tr><td width="65">住所</td><td width="4">: </td><td width="110">' + addr + '</td></tr>';
	search_text += '<tr><td>電話番号</td><td>: </td><td>' + tel + '</td></tr>';
	search_text += '<tr><td>ランチタイム</td><td>: </td><td>' + time + '</td></tr>';
	search_text += '<tr><td>クチコミ</td><td>: </td><td>' + cmnt + '件</td></tr>';
	search_text += '<tr><td>平均評価</td><td>: </td><td class="star">' + star + '</td></tr>';
	search_text += '</table>';
	search_text += '</div>';
	search_text += '<table width="178" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="3" class="r_block01_line" height="15"></td></tr></table>';
	
	if(markerID == (length - 1)){
		document.getElementById(search_txtID).innerHTML = search_text;
	}
}
//--------------------------------------------------------------------
// 地図検索情報登録関数
//--------------------------------------------------------------------
function MapSearchPagePut(count , limit , start , end , pageThis , pageBack , pageNext , pageStr , pageEnd)
{
	pagesHtml = '';
	for(i = parseInt(pageStr); i <= parseInt(pageEnd); i++){
		if(i == pageThis){
			pagesHtml += '<b><u>' + i + '</u></b>&nbsp;';
		}
		else{
			pagesHtml += '<a href="javascript:MapSearchPageChange(' + i + ')">' + i + '</a>&nbsp;';
		}
	}
	if(pageBack != ""){
		pagesHtml = '<a href="javascript:MapSearchPageChange(' + pageBack + ')">← 前へ</a>&nbsp;' + pagesHtml;
	}
	if(pageNext != ""){
		pagesHtml = pagesHtml + '<a href="javascript:MapSearchPageChange(' + pageNext + ')">次へ →</a>&nbsp;&nbsp;';
	}
	document.getElementById('pagelink').innerHTML = pagesHtml;
	document.getElementById('hit_count').innerHTML = count + '件';
	document.getElementById('hit_scope').innerHTML = start + '～'  + end + '件';
}
//--------------------------------------------------------------------
// 地図検索ページ変更関数
//--------------------------------------------------------------------
function MapSearchPageChange(page)
{
	search_page = page;
	MapSearchEvent();
}

//--------------------------------------------------------------------
//--------------------------------------------------------------------
// 店舗地図ページグローバル変数
//--------------------------------------------------------------------
var shop_mapID = '';
var shop_map   = null;

//--------------------------------------------------------------------
// 店舗地図メイン関数
//--------------------------------------------------------------------
function SingleMap(mapID , lat , lng , zoom)
{
	var defaultLat  = 35.68124800099281;
	var defaultLng  = 139.76703643798828;
	var defaultZoom = 16;
	
	if(lat  != '') defaultLat  = parseFloat(lat);
	if(lng  != '') defaultLng  = parseFloat(lng);
	if(zoom != '') defaultZoom = parseInt(zoom);
	
	shop_mapID  = mapID;
	shop_map    = new GMap2(document.getElementById(shop_mapID));
	
	shop_map.addControl(new GLargeMapControl());
	if(shop_map.getCenter() == null){
		shop_map.setCenter(new GLatLng(defaultLat , defaultLng) , defaultZoom);
	}
	SingleMapEvent();
}
//--------------------------------------------------------------------
// 店舗地図イベント関数
//--------------------------------------------------------------------
function SingleMapEvent()
{
	var point  = shop_map.getCenter();
	var marker = new GMarker(point);
	
	shop_map.addOverlay(marker);
}




//--------------------------------------------------------------------
// 関数：onLoad
// 機能：
// 引数：
// 戻値：
//--------------------------------------------------------------------
function onLoadSummary(MAPID , shops_name , shops_addr , shops_time , shops_lat , shops_lng)
{
	var dfltLat  = 37;
	var dfltLng  = 139;
	var gb       = null;
	var Markers  = new Array;
	
	map = new GMap2(document.getElementById(MAPID));
	map.addControl(new GLargeMapControl());
	
	for(var i = 0; i < shops_lat.length; i++){
		if(map.getCenter() == null){
			map.setCenter(new GLatLng(shops_lat[i] , shops_lng[i]) , zoomlv);
		}
		html = '<p style="line-height:16px;"><strong>' + shops_name[i] + '</strong><br />' + shops_addr[i] + '<br /><img src="/img/public/icon_time.gif" width="30" height="17" border="0" alt="" style="vertical-align:middle;" />&nbsp;' + shops_time[i] + '</p>';
		Markers.push(addMarkerScroll(new GLatLng(shops_lat[i] , shops_lng[i]) , html , i));
	}
	initZoom(Markers);
}
//--------------------------------------------------------------------
// 関数：addMarker
// 機能：
// 引数：
// 戻値：
//--------------------------------------------------------------------
function addMarkerScroll(point , html , i)
{
	var marker = new GMarker(point);
	ScrollId = "store" + i;
	if(html != ""){
		GEvent.addListener(marker, "click", function(){
			document.getElementById("result-box").scrollTop = 80 * i;
			marker.openInfoWindowHtml(html);
			//pageScroll(ScrollId);
			//document.location.href="#store" + i;
		});
	}
	map.addOverlay(marker);
	
	return marker;
}
//--------------------------------------------------------------------
// 関数：addMarker
// 機能：// 引数：
// 戻値：
//--------------------------------------------------------------------
function addMarker(point , html)
{
	var marker = new GMarker(point);
	if(html != ""){
		GEvent.addListener(marker , "click" , function(){
			marker.openInfoWindowHtml(html);
		});
	}
	map.addOverlay(marker);
	
	return marker;
}
//--------------------------------------------------------------------
// 関数：initZoom
// 機能：
// 引数：
// 戻値：
//--------------------------------------------------------------------
function initZoom(Markers){
	var gb;
	var first = null;

	for(var i = 0; i < Markers.length; i++){
		var marker = Markers[i];
		if(first == null){
			gb = new GLatLngBounds(marker.getPoint(), marker.getPoint());
			first = 0;
		}
		else{
			var point = marker.getPoint();
			gb.extend(point);
		}
	}
	map.setCenter(gb.getCenter(), map.getBoundsZoomLevel(gb));
}
//--------------------------------------------------------------------
// 関数：SimpleMap
// 機能：
// 引数：
// 戻値：
//--------------------------------------------------------------------
function SimpleMap(MAPID , CenterLat , Centerlng , ZoomLV) {

	map = new GMap2(document.getElementById(MAPID));
	map.setCenter(new GLatLng(CenterLat , Centerlng) , ZoomLV);
	map.addControl(new GSmallMapControl());
	map.setMapType(G_NORMAL_MAP);
	
	addMarker(new GLatLng(CenterLat , Centerlng) , "");
}
//--------------------------------------------------------------------
// 関数：SimpleMap
// 機能：
// 引数：
// 戻値：
//--------------------------------------------------------------------
function SimpleMap2(MAPID , CAFELAT , CAFELNG) {
	if (GBrowserIsCompatible()){
		map = new GMap2(document.getElementById(MAPID));
		map.centerAndZoom(new GLatLng(Lat , longitude) , 17);
		map.addControl(new GLargeMapControl());
		map.setMapType(G_NORMAL_MAP);
		
		addMarker(new GPoint(longitude , latitude));
		
		GEvent.addListener(map, 'moveend', function(){
			var mapCenter = map.getCenter();
			document.getElementById("latitude").value  = mapCenter.lat();
			document.getElementById("longitude").value = mapCenter.lng();
	
			SimpleMap(MAPID , mapCenter.lat() , mapCenter.lng());
		});
	}
}

//--------------------------------------------------------------------
// 関数：geocoding
// 機能：
// 引数：
// 戻値：
//--------------------------------------------------------------------
function geocoding(MAPID , address)
{
	var geocoder = new GClientGeocoder();
	if(geocoder){
		geocoder.getLatLng(address , function(point) {
			if (!point) {
				alert(address + " \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002");
			}
			else{
				SimpleMap(MAPID , point.lat() , point.lng());
				document.getElementById("latitude").value  = point.lat();
				document.getElementById("longitude").value = point.lng();
			}
		});
	}
}

//--------------------------------------------------------------------
// 関数：geocodingMove
// 機能：
// 引数：
// 戻値：
//--------------------------------------------------------------------
function geocodingMove(address)
{
	var geocoder = new GClientGeocoder();
	
	if(geocoder){
		geocoder.getLatLng(address , function(point){
			if(!point){
				alert(address + " \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002");
			}
			else{
				map.centerAndZoom(point , zoomlv);
			}
		});
	}
}
