/* 
 * GoogleMAPS管理クラス
 */
function GMAPSManager() {
	this._initialize();
}

GMAPSManager.prototype = {

	/* GMAPS2クラス */
	  _map : null
	
	/* 地図のマーカーのリスト */
	, _markerList : null
	
	/* エラーメッセージ・GoobleMAPSが使用できないブラウザ */
	, ERR_MSG_BROWSER : '本サイトはGoogleMAPSが利用可能なブラウザでご覧ください'
	
	/* loadGMAPS()の戻り値:成功 */
	, LOAD_SUCCESS : 0
	
	/* loadGMAPS()の戻り値:失敗 */
	, LOAD_FAULT : 1
	
	/* loadGMAPS()の戻り値:GoogleMAPSの利用できないブラウザ */
	, NOT_AVAILABLE : 2
	
	/* 
	 * コンストラクタ
	 */
	, _initialize : function() {
		// none.
	}
	
	/* 
	 * 地図をロードする
	 * @param id			地図を表示するノードのid
	 * @param isSmallCtrl	地図のコントロールのタイプ。小/大…true/false
	 * @param 処理結果
	 */
	, loadGMAPS : function(id, isSmallCtrl) {
		
		var mapEle = document.getElementById(id)
		if (mapEle == undefined) {
			return this.LOAD_FAULT;
		}
		else if (!GBrowserIsCompatible()) {
			return this.NOT_AVAILABLE;
		}
		
		_map = new GMap2(mapEle);
		_map.addMapType(G_PHYSICAL_MAP);
		_map.addControl(new GMenuMapTypeControl(true, false));
		_map.addControl(isSmallCtrl ? new GSmallMapControl(): new GLargeMapControl());
		
		_markerList = new Array();
		
		return this.LOAD_SUCCESS;
	}
	
	/* 
	 * 地図の中心とズームレベルを設定する
	 * @param latLng	中心の座標(GLatLng)
	 * @param zoomLv	ズームレベル
	 */
	, setCenter : function(latLng, zoomLv) {
		_map.setCenter(latLng, zoomLv);
	}
	
	/*
	 * 表示領域を指定して、領域が全て表示できるズームレベルを取得する
	 * @param rect	表示領域
	 * @return		ズームレベル
	 */
	, getZoomLvFromRect : function(rect) {
		return _map.getBoundsZoomLevel(rect);
	}
	
	/*
	 * 地図にマーカーを追加する
	 * @param latLng	座標値
	 * @param src		バルーンに表示するHtml(クリックイベント設定する場合)
	 * @param opts		オプション
	 */
	, addMarker : function(latLng, src, opts) {
	
		var marker = new GMarker(latLng);
		_map.addOverlay(marker);
		
		if (src != null) {
			GEvent.addListener(marker, 'click', function(){
				marker.openInfoWindowHtml(src, opts);
			});
		}
		
		// なんか明確にマーカーを分けておかないと駄目らしい…
		_markerList.push(marker);
	}
}

////////// 共通パーツ用メソッド //////////

/* 
 * 検索フォーム・タブクリックイベントハンドラ
 * @param id	タブのID
 */
function tabclick(id) {

	var linkElem = document.getElementById(id);
	if (linkElem != undefined) {
		var tabList = document.getElementById('headerSeachTab').getElementsByTagName('a');
		for (var i=0; i<tabList.length; i++) {
			tabList[i].className = '';
		}
		linkElem.className = 'current';
		linkElem.previousSibling.checked = true;
	}
}

var ID_CONTAINER = 'jsCatContainer';	// カテゴリリストを格納しているdivID
var ID_DISPCAT = 'jsDispCat';			// [もっと見る]リンクID

/*
 * 下位カテゴリ一覧の[もっと見る]制御
 * @param idDisp	表示/非表示…true/false
 */
function switchDispCateList(isDisp) {

	var catLists = document.getElementById(ID_CONTAINER).getElementsByTagName('ul');
	for (var i=0; i<catLists.length; i++) {
		var listItems = catLists[i].getElementsByTagName('li');
		for (var j = 10; j<listItems.length; j++) {
			var listItem = listItems[j];
			listItem.className = (isDisp ? 'on' : 'off');
		}
	}
	
	var moreDispLink = document.getElementById(ID_DISPCAT);
	moreDispLink.innerHTML = '[' + (isDisp ? '非表示にする' : 'もっと見る') + ']';
	moreDispLink.setAttribute('href'
		, (isDisp ? 'javascript:switchDispCateList(false);' : 'javascript:switchDispCateList(true);'));
}

