/*###############################################################################*/
/*
/*電車バス（のりかえ運賃検索）・市内ルート検索共通　カテゴリ設定汎用js
/*
/*###############################################################################*/

/*カテゴリの初期設定
*******************************************************************************/
var categoryLArr = new Array();
var categoryMArr = new Array();

var aroundProtSerial = new Array();//周辺情報アイコンのID
var aroundProtIcons = new Array();//周辺情報アイコンの種別
var aroundProtNames = new Array();//周辺情報アイコンの施設名
var aroundProtKana = new Array();//周辺アイコンのかな配列
var aroundProtCategory = new Array();//周辺アイコンのカテゴリ番号配列
var aroundProtCategoryName = new Array();//周辺アイコンのカテゴリ名配列
var aroundProtSubCategory = new Array();//周辺アイコンのサブカテゴリ番号配列
var aroundProtSubCategoryName = new Array();//周辺アイコンのサブカテゴリ名配列
var aroundLat = new Array();//周辺情報緯度
var aroundLng = new Array();//周辺情報経度





function initCategory(){
////////console.log(">>>>>>>>>>>>>>>>>initCategory>>>>>>>>>>>>>>>>>>>");
	var MyURL = "./ListPortalCategory";
	new Ajax.Request(MyURL, {method:"get", onSuccess:getCategoryArr, onFailure:alertLoadingErr});
}
function getCategoryArr(httpObj){
////////console.log("--1--");
	var xmlData = httpObj.responseXML;
////////console.log("--2--");
	var DataObj = new CategoryList();
////////console.log("--3--");
	DataObj.init(xmlData);
////////console.log("--4--");
	for (i = 0; i < DataObj.getLcount(); i++){
		//大カテゴリ取得
		categoryLArr.push([DataObj.getLname()[i], DataObj.getLcode()[i], DataObj.getLdataNum()[i]]);
		categoryMArr[i] = new Array();
		for (j = 0; j < DataObj.getMcount()[i]; j++){
			//中カテゴリ取得
			categoryMArr[i].push([DataObj.getMname()[i][j], DataObj.getMcode()[i][j], DataObj.getMdataNum()[i][j]]);
		}
	}
////////console.log("categoryLArr:"+categoryLArr);
////////console.log("categoryMArr:"+categoryMArr);
	if(page == PAGE_KANKO){
		//カテゴリデータが読み込み完了した場合、画面の表示を開始する
		startUp2();
	}
}
/*
function getCategoryArrErr(httpObj){
	alert("カテゴリデータが取得できませんでした。\n（コード：" + httpObj.status + "");
}
*/
/********マップのカテゴリボタンを設定********/
function setCategoryButton(){
	getCategoryLCount();//大カテゴリの周辺件数取得
	setCategoryMName();//サブメニューの項目を設定
}
/********中カテゴリリストに項目名を設定********/
function setCategoryMName(){
	var len = categoryMArr.length;
	for(var i = 0; i < len; i++){
		var lenChild = categoryMArr[i].length;
		var buff = "";
		buff += "<ul class=\"cbSubList tS\">"
		for(var j = 0; j < lenChild; j++){
			buff += "<li><a id=\"cbsl_" + categoryMArr[i][j][1] + "\" href=\"javascript:void(0);\" onclick=\"showAroundM('" + categoryMArr[i][j][1] + "')\">" + categoryMArr[i][j][0] + "</a></li>";
			//buff += "<li><a href=\"javascript:void(0);\" onclick=\"showAroundM('" + categoryMArr[i][j][1] + "')\">" + categoryMArr[i][j][0] + "</a></li>";
		}//END for j
		buff += "</ul>"
		$('cbSubList' + (i+1)).innerHTML = buff;
	}//END for i
}
/********大カテゴリ周辺件数の取得********/
function getCategoryLCount(){
////////console.log(">>>>>>>>>>>>>>>>>>>getCategoryLCount>>>>>>>>>>>>>>>>>>>>");
	var len = categoryLArr.length;
////////console.log("categoryLArr.length:"+categoryLArr.length);
	for (var i = 0; i < len; i++){
		requestCategoryAroundCount(categoryLArr[i][1]);
	}
}
/********中カテゴリリスト周辺件数の取得(大カテゴリボタンオンマウス時)********/
function getCategoryMCount(e){
	var t = e.target ? e.target: window.event.srcElement;//ブラウザで分岐
	if(t.gotMenu)return;//中カテゴリ取得済みなら返す
	t.gotMenu = true;//中カテゴリ取得済みフラグ立てる
	var tcate = convertIndexToCode(t.no);//カテゴリコード取得
	var len = categoryMArr[t.no - 1].length;//サブカテゴリの数取得
	for (var i = 0; i < len; i++){
		requestCategoryAroundCount(tcate, categoryMArr[t.no - 1][i][1]);
	}
}
/********周辺件数取得のXMLリクエスト********/
//cNum:大カテゴリコード　subNum:中カテゴリコード(省略すれば大カテゴリを処理)
function requestCategoryAroundCount(cNum, subNum){
//////console.log("requestCategoryAroundCount>>>>>>>>>>>>>>>>>>>> cNum:" + cNum + ", subNum:" + subNum);
	var requestLat = (page == PAGE_KANKO) ? detailLat : toLat;
	var requestLng = (page == PAGE_KANKO) ? detailLng : toLng;
	var requestAroundArea = (page == PAGE_KANKO) ? aroundArea : 1000;
	var url = KANKO_AROUND_URL
				+ stringUtils.getUrlParam(KANKO_X, Math.floor(requestLng * 3600000))
				+ stringUtils.getUrlParam(KANKO_Y, Math.floor(requestLat * 3600000))
				+ stringUtils.getUrlParam(KANKO_AROUND_CATEGORY, subNum ? subNum : cNum)
				+ stringUtils.getUrlParam(KANKO_AROUND_AREA, requestAroundArea)
				+ stringUtils.getUrlParam(KANKO_NEXT, 1000)
				+ stringUtils.getUrlParam(KANKO_LIMIT, 1);
	var ajax = new Ajax.Request(
		url, 
		{
			method: 'get', 
			parameters: '',
			onFailure: alertLoadingErr,
			onSuccess: function(req) {
				//==============周辺件数取得完了================
				var countDoc = req.responseXML;
				var countData = new KankoKeywordData();
				countData.init(countDoc);
				var kekka = countData.getTotalCount();
				if(subNum){
					//中カテゴリを書き込み
//////console.log("中カテゴリ件数書き込み  subNum:" + subNum + ", cNum:"+ cNum + ", kekka:" + kekka);
					if(!Number(kekka)){
						//件数なし
						$("cbsl_" + subNum).style.color = "#ccc";
					}
					$("cbsl_" + subNum).innerHTML += "　（" + kekka + "件）";
				}else{
					//大カテゴリを書き込み
//////console.log("大カテゴリ件数書き込み  cNum:"+ cNum + ", kekka:" + kekka);
					$("categoryCount" + convertCodeToIndex(cNum)).innerHTML = Number(kekka) ? kekka + "件" : "<span class=\"tGrC\">0件</span>";
					setCondtionButtonEnabled(cNum, Number(kekka) ? true : false);
				}
			}
		});
}
/********周辺件数の有無によってイベントを付加・削除********/
function setCondtionButtonEnabled(cNum, type){
////////console.log(">>>>>>>>>>>>>>>>>>>setCondtionButtonEnabled>>>>>>>>>>>>>>>>>>>:cNum:"+cNum);
//////console.log("setCondtionButtonEnabled>>>>>>>>>>>>>>>>>>>>>>> cNum:" + cNum + ", type:" + type);
	for(var i = 0; i < categoryLArr.length; i++){
		if(cNum == categoryLArr[i][1]){
			var vc = "cb" + (i + 1);
			var t = $(vc);
			if(type){
				Event.observe(vc, "click", showAroundL);
				Event.observe(vc, "mouseover", getCategoryMCount);
				t.style.backgroundPosition = t.on ? '0 0' : t.subOn ? '0 -34px' : '0 -68px';
				t.style.cursor = 'pointer';
				t.enabled = true;
			}else{
				Event.stopObserving(vc, "mouseover", onMouseCButton);//common.jsで設定されているものを削除
				Event.stopObserving(vc, "mouseout", onMouseOutCButton);//common.jsで設定されているものを削除
				Event.stopObserving(vc, "click", onClickCButton);//common.jsで設定されているものを削除
				t.style.backgroundPosition = '0 -102px';
				t.style.cursor = 'default';
				t.enabled = false;
			}
		}
	}
}
//周辺アイコンを表示(大カテゴリボタンクリック時)
function showAroundL(e){
	var t = e.target ? e.target: window.event.srcElement;//ブラウザで分岐
	var cNum = convertIndexToCode(t.no);
////console.log("common_category > showAroundL >>>>>>> cNum:"+cNum);
	if(page == PAGE_KANKO){
		if (contentsData.getFlagGis() != 0) {
			conditionAround(contentsData.getProvider(), contentsData.getSerial(), cNum, aroundArea ? aroundArea : 1000, 0);
////console.log("common_category > showAroundL >>>>>>> conditionAround:getProvider():"+contentsData.getProvider()+", getSerial():"+contentsData.getSerial()+", cNum:"+cNum+", aroundArea:"+aroundArea);
		}
	}else{
		requestAround(cNum);
	}
}
//周辺アイコンを表示(中カテゴリメニュークリック時)
function showAroundM(cNum){
	if(page == PAGE_KANKO){
		if (contentsData.getFlagGis() != 0) {
			conditionAround(contentsData.getProvider(), contentsData.getSerial(), cNum, aroundArea ? aroundArea : 1000, 0);
		}
	}else{
		requestAround(cNum);
	}
}
//周辺アイコンを表示処理
function requestAround(cnum) {
//console.log(">>>>>>>>>>>>>>>>requestAround");
	//==============loading start================

	if(page == PAGE_KANKO){
		showLoading('aroundListArea',true);
		hideElem('panelKeywordList');hideElem('panelRankingList');showElem('panelAroundList');
	}
	//リクエストパラメータの整理
	var requestLat = (page == PAGE_KANKO) ? detailLat : toLat;
	var requestLng = (page == PAGE_KANKO) ? detailLng : toLng;
	var requestCategory = (page == PAGE_KANKO) ? aroundCategory : cnum;
	var requestAroundArea = (page == PAGE_KANKO) ? aroundArea : 1000;
	var requestNext = (page == PAGE_KANKO) ? dataNext : 0;
	var requestLimit = (page == PAGE_KANKO) ? "" : 100;
//console.log("common_category > requestAround >>>>>> requestLat:"+requestLat+", requestLng:"+requestLng+", requestCategory:"+ requestCategory+", requestAroundArea:"+requestAroundArea+", requestNext:"+requestNext+", requestLimit:"+requestLimit);
	var url = KANKO_AROUND_URL
				+ stringUtils.getUrlParam(KANKO_X, Math.floor(requestLng * 3600000))
				+ stringUtils.getUrlParam(KANKO_Y, Math.floor(requestLat * 3600000))
				+ stringUtils.getUrlParam(KANKO_AROUND_CATEGORY, requestCategory)
				+ stringUtils.getUrlParam(KANKO_AROUND_AREA, requestAroundArea)
				+ stringUtils.getUrlParam(KANKO_NEXT, requestNext)
				+ stringUtils.getUrlParam(KANKO_LIMIT, requestLimit);
	var ajax = new Ajax.Request(
		url, 
		{
			method: 'get', 
			parameters: '',
			onFailure: function() {
				//==============loading end with error================
				if(page == PAGE_KANKO)showLoading('aroundListArea',false);
				},
			onSuccess: function(req) {
				//==============loading end================
				if(page == PAGE_KANKO)showLoading('aroundListArea',false);

				kankoDoc = req.responseXML;
				aroundData = new KankoKeywordData();
				aroundData.init(kankoDoc);

				if(page == PAGE_KANKO){
					var dataTable = $("aroundListTable");
					var count = dataTable.rows.length;
				}


				//格納用配列を初期化
				aroundProtSerial = [];
				aroundProtIcons = [];
				aroundProtNames = [];
				aroundProtKana = [];//周辺アイコンのかな配列
				aroundProtCategory = [];//周辺アイコンのカテゴリ番号配列
				aroundProtCategoryName = [];//周辺アイコンのカテゴリ名配列
				aroundProtSubCategory = [];//周辺アイコンのサブカテゴリ番号配列
				aroundProtSubCategoryName = [];//周辺アイコンのサブカテゴリ名配列
				aroundLat = [];//周辺緯度配列を初期化
				aroundLng = [];//周辺経度配列を初期化

				var buff;
				var listCount = aroundData.getListCount();
				var totalCount = aroundData.getTotalCount();
//console.log("common_category > requestAround >>>>>> listCount:"+listCount);

				if(page == PAGE_KANKO){
					for (var i = 0; i < count; i ++) {
						dataTable.deleteRow(0);
					}
					
					$("aroundConditionArea").innerHTML = "<div class=\"tM tB\" style=\"margin-bottom:4px;\">" + contentsData.getName() + "の周辺施設</div>" 
								+ $("aroundConditionForm").innerHTML
								+ " 以内には、 "
								+ "<span class=\"tB\">" + totalCount + "件</span> の施設情報があります。";
					for (var i = 0; i < $("aroundMeter").options.length; i++) {
						if ($("aroundMeter").options[i].value == aroundArea) {
							$("aroundMeter").selectedIndex = i;
							break;
						}
					}
				}


				if(listCount){
					for (var i = 0; i < listCount; i++) {
						if(page == PAGE_KANKO){
							var row = dataTable.insertRow(i);
							var cell = row.insertCell(0);
						}
						//値を取得
						var thisSerial = aroundData.getSerial()[i];//ID
////////////////console.log("getSerial:"+aroundData.getSerial()[i]);
						var thisName = aroundData.getName()[i];//施設名
						var thisKana = aroundData.getKana()[i];//施設かな
						var thisCityName = aroundData.getCityName()[i];//地区名
						var thisCategory = aroundData.getCategory()[i];//カテゴリ番号
						var thisCategoryName = aroundData.getCategoryName()[i];//カテゴリ名
						var thisSubCategory = aroundData.getSubCategory()[i];//サブカテゴリ番号
						var thisSubCategoryName = aroundData.getSubCategoryName()[i];//サブカテゴリ名

						var thisLat = aroundData.getPointY()[i] / 3600000;//緯度
						var thisLng = aroundData.getPointX()[i] / 3600000;//経度
						//格納用配列に格納
						aroundProtSerial.push(thisSerial);//周辺アイコンのID配列
						aroundProtIcons.push(thisCategory);//周辺アイコンの種別配列
						aroundProtNames.push(thisName);//周辺アイコンの施設名配列
						aroundProtKana.push(thisKana);//周辺アイコンのかな配列
						aroundProtCategory.push(thisCategory);//周辺アイコンのカテゴリ番号配列
						aroundProtCategoryName.push(thisCategoryName);//周辺アイコンのカテゴリ名配列
						aroundProtSubCategory.push(thisSubCategory);//周辺アイコンのサブカテゴリ番号配列
						aroundProtSubCategoryName.push(thisSubCategoryName);//周辺アイコンのサブカテゴリ名配列
						aroundLat.push(thisLat);//周辺緯度配列
						aroundLng.push(thisLng);//周辺経度配列

						if(page == PAGE_KANKO){
							cell.setAttribute('id', 'aroundListTable.r' + i + '.c0');
							buff = "<div id=\"keywordListName\" class=\"t12 hS\">"
									+ "<a href=\"javascript:void(0);\" onclick=\"centerAround(" + (100+i) + ");return false;\">"
									+ thisName
									+ "</a>"
									+ "</div>"
									+ "<div class=\"hS tGr\">"
									+ "<div id=\"keywordListYomi\" class=\"t10\">" + (thisKana ? thisKana : "　") + "</div>"
									+ "<div id=\"keywordListCategory\" class=\"t10\">" + thisCategoryName + "</div>"
									+ "<div id=\"keywordListCities\" class=\"t10\">" + thisCityName + "</div>"
									+ "</div>";
							var cellName = $("aroundListTable.r" + i + ".c0");
							cellName.innerHTML = buff;
							cellName.style.background = i%2 ? STYLE_COLOR_CELL1 : STYLE_COLOR_CELL2;
						}

					}//end for i

					if(page == PAGE_KANKO){
						var linkPrev, linkNext;
						if (dataNext > 0) {
							linkPrev = "｜<a href=\"javascript:void(0);\""
									+ " onclick=\"conditionAround("
									+ "'" + contentsData.getProvider() + "'"
									+ ", '" + contentsData.getSerial() + "'"
									+ ", ''"
									+ ", " + $('aroundMeter').value
									+ ", " + (dataNext - 10)
									+ "); return false;"
									+ "\">前の10件</a>";
						} else {
							linkPrev = "｜前の10件";
						}
						if ((dataNext + 10) < totalCount) {
							linkNext = "<a href=\"javascript:void(0);\""
									+ " onclick=\"conditionAround("
									+ "'" + contentsData.getProvider() + "'"
									+ ", '" + contentsData.getSerial() + "'"
									+ ", ''"
									+ ", " + $('aroundMeter').value
									+ ", " + (dataNext + 10)
									+ "); return false;"
									+ "\">次の10件</a>｜";
						} else {
							linkNext = "次の10件｜";
						}
						$("aroundListPage").innerHTML = linkPrev + "｜" + linkNext;
					}


					//*****************マップ展開**********************
					if(page == PAGE_KANKO){
						//*****マップ展開:施設タウン検索*****
						clearAllIcon();//アイコン全消去
						clearAllBalloon();//バルーンを消去
						var len = aroundProtIcons.length;
						var params = new iconData(len);
						params.setParams(0, detailLng, detailLat, convertPlotUrl(detailCategory), SIZE_PLOT_WIDTH, SIZE_PLOT_HEIGHT,
								"<div class=\"tB\">"
								+ detailName
								+ "</div>");//基準のアイコンをプロット
						for (var i = 0; i < len; i++){
							params.setParams(i+100, aroundLng[i], aroundLat[i], convertPlotUrl(aroundProtCategory[i]), SIZE_PLOT_WIDTH, SIZE_PLOT_HEIGHT,
								"<div class=\"hM\" style=\"width:200px;\">"
									+ "<p class=\"tB tM\"><a href=\"./KankoSearch?&act=rank&bhvr=dtl&prov=0&srl=" + aroundProtSerial[i] + "\" target=\"_blank\">" + aroundProtNames[i] + "</a></p>"
									+ "<p class=\"tS tGr\">" + aroundProtKana[i] + "</p>"
									+ "<p class=\"tS tGr\">" + aroundProtCategoryName[i] + " ＞ " + aroundProtSubCategoryName[i] + "</p>"
									+ "</div>"
							);//周辺のアイコンをプロット
////////////////console.log("params.setParams:"+i+", "+aroundLng[i]+", "+aroundLat[i]+", ");
						}
						initIcon(params);
						openMap(600, 390, 50000, detailLng, detailLat, 0);
					}else{

						//*****マップ展開:のりかえ運賃検索・市内ルート検索*****
						setIconParamData(true, true);//アイコンをparamにセット(ルートアイコンと周辺アイコン)
						openMap(600, 390, (scale ? scale : dfltScale), requestLng, requestLat);
					}
				}else{
					alert("該当するカテゴリの施設がありません。");
				}
			}
		});
}



/*###############################################################################*/
/*
/*周辺情報のリクエスト状態チェック
/*    KankoDataList.jspのみ
/*###############################################################################*/
function conditionAround(provider, serial, category, area, next) {
////console.log("conditionAround>>>>>>>>>>>>>>>>>>>provider:"+provider+", serial:"+serial+", category:"+category+", area:"+area+", next:"+next);
	detailProvider = provider;
	detailSerial = serial;
	aroundCategory = category;
	aroundArea = area;
	if (aroundArea <= 0) {
		aroundArea  = 1000;
	}
	dataNext = next;
	if(next == 0){
		//next=0のとき(周辺施設初回読込時)のみ大カテゴリの周辺件数を取得
		getCategoryLCount();
	}
	requestAround();
}


/*###############################################################################*/
/*
/*ツール
/*
/*###############################################################################*/
//大カテゴリコードを大カテゴリ順序に変換
function convertCodeToIndex(c){
	for (var i = 0; i < categoryLArr.length; i++){
		if(c == categoryLArr[i][1]){
			return i + 1;
		}
	}
}
//大カテゴリコードを大カテゴリ名称に変換
function convertCodeToName(c){
	for (var i = 0; i < categoryLArr.length; i++){
		if(c == categoryLArr[i][1]){
			return categoryLArr[i][0];
		}
	}
}
//大カテゴリ順序を大カテゴリコードに変換
function convertIndexToCode(c){
	return categoryLArr[c - 1][1];
}

//中カテゴリコードを中カテゴリ名称に変換
function convertMCodeToMName(c){
	var v = "";
	for (var i = 0; i < categoryMArr.length; i++){
		for (var j = 0; j < categoryMArr[i].length; j++){
			if(c == categoryMArr[i][j][1]) v = categoryMArr[i][j][0];
		}
	}
	return v;
}

