
// 特定IDのエレメントのjQueryオブジェクトを返す
function myGet(id){
	return jQuery('#' + id);
}

// AJAXのURL
var URL_AREA_AJAX = '/ajaxs/ajax_index/';
var URL_SHOP_AJAX = '/ajaxs/ajax_shop/';
var URL_MAPPING_ALL_AJAX = '/ajaxs/ajax_mapping_all/';

// ポインタアイコン
var ICON_ON  = '/resources_shared/images/gmap/shop_icon.png';
var ICON_OFF = '/resources_shared/images/gmap/shop_icon_off.png';


// 検索の初期値
var DEFAULT_LAT = 38.071434;
var DEFAULT_LON = 137.656709;
var DEFAULT_ZOOM = 5;

var DEFAULT_AREA = 0;
var DEFAULT_SEARCH = '';
var DEFAULT_SHOP = '';

// Mapの初期化
var MAP; // 地図領域
var AREA; // エリアの絞り込み領域
var SHOP; // 店舗の検索結果領域
var MAPPING; // マッピング用の非表示情報領域
function initMapSearch(map, area, shop, mapping){
	// 各Divの取得
	MAP = new GMap2(document.getElementById(map));
	AREA = myGet(area);
	SHOP = myGet(shop);
	MAPPING = myGet(mapping);
	
	// MAPのコントロール
	MAP.addControl(new GLargeMapControl());
	// MAP.addControl(new GMapTypeControl());
	MAP.addControl(new GScaleControl());
	
	// 全店舗のマッピングとデフォルト地図の表示
	mappingShop();
	
}

// 全店舗のマッピング
function mappingShop(){
	var mydate = new Date();
	var mytime = mydate.getTime();
	var params = '?t=' + mytime;
	MAPPING.load(URL_MAPPING_ALL_AJAX + params);
}

// 地図の移動用メソッド
// lat: 緯度
// lon: 経度
// zoom: ズームレベル
function moveMap(lat, lon, zoom, area_id, search, shop_id){
	if(lat == "-1" || lon == "-1" || zoom == "-1") return;
	MAP.setCenter(new GLatLng(lat, lon), zoom);
	
	// エリア更新
	if(area_id >= 0) {
		// エリア指定時に全店舗マッピング表示が未だの場合はOFF状態でアイコンをマッピング表示
		if(MARKER_COUNT == 0 && area_id > 0){
			showShopAll();
		}
		// 下階層のエリア検索
		searchArea(area_id);
		
		// Shop更新
		if(area_id > 0 || search != ""){
			searchShop(area_id, search);
		}else{
			SHOP.innerHTML = '';
		}
	};
}

function zoomMap(lat, lon, add_zoom){
	if(lat == "-1" || lon == "-1") return;
	var zoom = MAP.getZoom();
	zoom += add_zoom;
	moveMap(lat, lon, zoom, -1);
}


// エリア抽出
// area_id: エリアID
function searchArea(area_id){
	var params = area_id;
	var mydate = new Date();
	var mytime = mydate.getTime();
	params += '?t=' + mytime;
	AREA.load(URL_AREA_AJAX+params);

}

// 店舗検索
// area_id: エリアID
// search: 検索ワード
// page: ページ
function searchShop(area_id, search, page){
	var mydate = new Date();
	var mytime = mydate.getTime();
	var params = '?t='+mytime;
	
	if(search) {
		params += '&search=' + encodeURIComponent(search);
	}
	if(page) {
		SHOP.load(URL_SHOP_AJAX + area_id + '/page:' + page + params);
	}else{
		SHOP.load(URL_SHOP_AJAX + area_id + params);
	}
}

// 各店舗のマッピング
var MARKER = {};
var MARKER_COUNT = 0;
function drawShop(lat, lon, html_id, shop_id, onoff, show){

	// アイコン設定
	var icon= new GIcon();
	if(onoff){
		icon.image = ICON_ON;
	}else{
		icon.image = ICON_OFF;
	}
	icon.iconSize = new GSize(21, 35);
	icon.iconAnchor = new GPoint(10, 35);
	
	// マッピング
	var markeropts = new Object();
	markeropts.icon = icon;
	var point = new GLatLng(lat, lon);
	var marker = new GMarker(point, markeropts);
	var html = document.getElementById(html_id);
	marker.info_html = html.innerHTML;
	// マーカーをデフォルトで表示する場合
	if(show) {
		MAP.addOverlay(marker);
		
		// 吹き出し設定
		GEvent.addListener(marker, "click", function(){
			MAP.openInfoWindowHtml(this.getPoint(), this.info_html);
		});
		MARKER_COUNT++;
	}
	
	// マーカーと店舗の紐付け
	MARKER[shop_id] = marker;
}

// マッピングされた情報を表示状態にする
function showShopAll(){
	for (var key in MARKER) {
		var val = MARKER[key];
		
		if(key > 0) {
			var marker = val;
			MAP.addOverlay(marker);
			
			// 吹き出し設定
			GEvent.addListener(marker, "click", function(){
				MAP.openInfoWindowHtml(this.getPoint(), this.info_html);
			});
			MARKER_COUNT++;
		}
	}
}

// 店舗の吹き出しを表示
function popupShop(shop_id){
	var marker = MARKER[shop_id];
	if(marker){
		MAP.openInfoWindowHtml(marker.getPoint(), marker.info_html);
	}
}


// 店舗アイコンをOFF状態にする
function offIcon(shop_id){
	var marker = MARKER[shop_id];
	if(marker){
		marker.setImage(ICON_OFF);
	}
}
function offIconAll(){
	for (var key in MARKER) {
		var val = MARKER[key];
		if(key > 0) {
			offIcon(key);
		}
	}
}

// 店舗アイコンをON状態にする
function onIcon(shop_id){
	var marker = MARKER[shop_id];
	if(marker){
		marker.setImage(ICON_ON);
	}
}
function onIconAll(){
	for (var key in MARKER) {
		var val = MARKER[key];
		if(key > 0) {
			onIcon(key);
		}
	}
}



