// 「地図で見る九州」をコントロールするためのJavascript

	// 必要な変数を初期化
	var spots = new Object(); // 検索結果を格納する
	var flag  = false;        // 検索中を判断するためのフラグ(検索中ならば true )
	var mode  = "";
	var N     = 25;           // 一回の検索で表示する拠点数
	var from  = 0;            // 現在表示している検索結果の開始オフセット
	var gid;                  // 検索対象としているジャンルID
	var kwd;
	var list = "";            // 検索結果の一覧

	var isSuggestsSearch = true;

	// 初期化のための関数
	function initMap() {
		t = new cgiLib();
		zoom = 14;
		// 初期地点を九州が一望できる座標とズーム率で指定
		initGmap('map', 'debugArea', '33.23997970754572', '131.60865783691406', zoom);

		if(t.args['gid']) {
			selectSpotsByGenre(t.args['gid']);
		}
		else {
			selectSpotsBySuggests();
		}
	}

	// 初回表示時におススメ拠点を表示する
	function selectSpotsBySuggests() {
		mode = "selectSpotsBySuggests";

		// 検索を行うためのPHPプログラムから結果を得るためのHTTPを発行
		xmlhttp = createHttpRequest();
		xmlhttp.onreadystatechange = getSpotsInfo;
		xmlhttp.open("GET", "/api/getSpotsOnSuggests.php" + "?from=" + from + "&n=" + N, true);
		xmlhttp.send(null);
	}

	// 初回表示時におススメ拠点を表示する
	function selectSpotsByKeyword(keyword) {
		if(flag)
			return(false);

		mode = "selectSpotsByKeyword";

		// 検索中であることを示すためメッセージを表示し、検索結果エリアをクリアする
		document.getElementById("loadingIcon").style.display = "block";
		document.getElementById("results").innerHTML = "";

		isSuggestsSearch = false;

		if(keyword) {
			from = 0;
			this.kwd = keyword;
		}

		// 検索を行うためのPHPプログラムから結果を得るためのHTTPを発行
		xmlhttp = createHttpRequest();
		xmlhttp.onreadystatechange = getSpotsInfo;
		xmlhttp.open("GET", "/api/getSpotsByKeyword.php?keyword=" + encodeURIComponent(kwd) + "&from=" + from + "&n=" + N, true);
		xmlhttp.send(null);
	}

	// ジャンルが指定された場合の処理
	//  ページ送りのみの場合には、引数 g は渡らない
	//  g はジャンルID
	function selectSpotsByGenre(g) {
		// もし、既に検索を実行中ならば、キャンセルする
		if(flag)
			return(false);

		mode = "selectSpotsByGenre";

		// 検索中であることを示すためメッセージを表示し、検索結果エリアをクリアする
		document.getElementById("loadingIcon").style.display = "block";
		document.getElementById("results").innerHTML = "";

		isSuggestsSearch = false;
		// もし、ジャンルを指定する初回の検索の場合は、from とgidを保存する
		if(g) {
			from = 0;
			this.gid = g;
//			var bbFrame1 = document.getElementById("stepController"); 
//			bbFrame1.src = "?" + this.gid;

			// 西大分の時だけ中心地点を操作する
			if(g == 124) {
				setCenter(33.244651, 131.583178);
			}

		}

		// 検索を行うためのPHPプログラムから結果を得るためのHTTPを発行
		xmlhttp = createHttpRequest();
		xmlhttp.onreadystatechange = getSpotsInfo;
		xmlhttp.open("GET", "/api/getSpotsByGenre.php?gid=" + gid + "&from=" + from + "&n=" + N, true);
		xmlhttp.send(null);
	}

	// 検索結果が返ってきた場合の処理
	function getSpotsInfo() {
		// 検索実行中を示すフラグを true に変更する
		flag = true;
	
		// 既に表示されていた地図上のマーカーをすべて削除する
		gMap.clearOverlays();
	

		// 呼び出された際のステータスによって振り分け

		// 読み込み完了時
		if (xmlhttp.readyState == 4) {
			// HTTPが正常に動作した場合
			if(xmlhttp.status == 200) {
				spots = new Object(); // 検索結果を格納する
				spots =  eval( "(" + xmlhttp.responseText + ")" );;
			}
			// HTTPが正常に取得できなかった場合の処理
			else {
				document.getElementById("loadingIcon").style.display = "none";
				flag = false;
				return(false);
			}
		}
		// 読み込み開始時の処理
		else if (xmlhttp.readyState == 1) {
			return(false);
		}
		// 読み込み中の処理
		else if (xmlhttp.readyState == 2) {
			return(false);
		}
		// 読み込み完了の処理
		else if (xmlhttp.readyState == 3) {
			return(false);
		}

		// 検索した結果が0件だった場合は、false を返して終了
		if(! spots) {
			flag = false;
			document.getElementById("loadingIcon").style.display = "none";
			
			if(! isSuggestsSearch) {
				document.getElementById("results").innerHTML = "<p>該当する拠点は見つかりませんでした</p>";
			}
			return(false);
		}

		tempList = "";
		n = false;
		count = 0;
		max = 0;
		// 検索結果として返ってきた拠点情報を地図にマッピング
		for(var n in spots) {
			// マーカーをクリックした際に表示されるテキストの準備
			// 拠点の座標系を変換し、地図にアイコンをマッピング
			if(spots[n].MAX)
				max = spots[n].MAX;

			var marker;
			var icon              = new GIcon();
			var text              = spots[n].TEXT;
			if(spots[n].ICON) {
				icon.image            = spots[n].ICON;
				icon.iconSize         = new GSize(25,34);
				icon.iconAnchor       = new GPoint(0,34);
				icon.infoWindowAnchor = new GPoint(13,12);
				marker = new GMarker(new GLatLng(spots[n].LTTD, spots[n].LGTD), icon);
				marker.text = spots[n].ITXT;
			}
			else {
				marker = new GMarker(new GLatLng(spots[n].LTTD, spots[n].LGTD));
			}
			setEventIcon(marker, spots[n].TEXT) 


			// 検索結果一覧を表示するために、変数を準備
			if(count < N) {
				// 短い拠点名を生成する
				if(spots[n].CPNM.length > 5) {
					tempCpnm = spots[n].CPNM.substring(0, 5) + " …";
				}
				else {
					tempCpnm = spots[n].CPNM ;
				}

				tempList += "<li style='display:inline;'>・<a href='javascript:openInfoWindowE(" + spots[n].LTTD + ", " + spots[n].LGTD + ", \"" + spots[n].TEXT + "\");'>" + tempCpnm + " </a></li><br>";
			}

			count++;
		}
	

		// 検索結果の数と表示範囲を表示
		to =  (from - 0)+ (count - 0);
		RRR = "検索結果数 :" + max +   "件<br> (" + (from - 0 + 1) +" 件目から " + to + "件目)<br><hr>";
	
		// 検索結果が多かった場合のページ割付の処理
		paging = '<div align="center">';

		// 前のページがある場合には、リンクを追加
		if(from != 0) {
			paging += "　　<a href=\"javascript:from -= N;" + mode + "()\">前へ</a>";
		}

		// 検索した結果が0件だった場合は、false を返して終了
		if(! count) {
			document.getElementById("loadingIcon").style.display = "none";
			if(! isSuggestsSearch) {
				document.getElementById("results").innerHTML = "検索に該当する拠点は見つかりませんでした<hr>";
			}
			flag = false;
			return(false);
		}

		// 次のページがある場合には、リンクを追加
		if(max !=  to) {
			paging += "　　<a href=\"javascript:from += N;" + mode + "();\">次へ</a>　";
		}

		paging += "</div>";

		// ページ上にページ割付関係を配置
		document.getElementById("results").innerHTML = RRR  + "<ul style='margin:0px;padding:0px;'>" + tempList + "</ul>" + paging;


		// 検索に関する処理が終了したので、フラグを false に変更
		flag = false;
		// 検索中を示すメッセージを非表示にする
		document.getElementById("loadingIcon").style.display = "none";
	}

	function setEventIcon(marker, text) {
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindow(marker.text);
		});
		gMap.addOverlay(marker);
	}


	function openInfoWindowE(lttd, lgtd, text) {
		gMap.setCenter(new GLatLng(lttd, lgtd));
		gMap.openInfoWindow(new GLatLng(lttd, lgtd), text);


	}

	// 検索した結果等をによる画面変換を出力する
	// この部分のみ、onClickで別途呼ばれる
	function showIcon(icon) {
		// パンくずリストに、検索中のカテゴリを付与
		document.getElementById("iconSpace").innerHTML = "&gt;&gt; " + icon;//icon.innerHTML;

		// タイトル系の画像を変える
		//titleImg = document.getElementById("titleImg");
		src      = "";
		if(this.gid > 0) {
			src = "/img/map/title_" + this.gid + ".gif";
		}
		else {
			src = "/img/map/title.gif";
		}

		document.getElementById("titleImg").setAttribute("src", src);
		document.getElementById("titleImg").src = src;
	}

