// お気に入り関係javascript群

// 定数
var d_favorWindowName = "FAVORWIN";				// お気に入りWINDOW名
var d_favorParentWindowName = "FAVORPARENTWIN";	// お気に入り親WINDOW名
var d_favorCookieName = "favor";				// お気に入り情報Cookie名
var d_cookieDiv = ",";							// お気に入り情報Cookie区切り文字
var d_cookieMax = 20;							// お気に入り情報Cookie最大物件数
var d_overFlowCookieName = "overFlowFLg";		// 追加時最大数OverフラグCookie名
var d_cookieDetailDiv = "_";					// お気に入り情報Cookie1物件内詳細情報区切り文字
var d_rateMin = 0;								// お気に入りレートの最小値
var d_rateMax = 5;								// お気に入りレートの最大値
var d_userid_index = 0;							// お気に入り情報1物件内詳細情報格納INDEX(ユーザーID)
var d_bkno_index = 1;							// お気に入り情報1物件内詳細情報格納INDEX(物件番号)
var d_rate_index = 2;							// お気に入り情報1物件内詳細情報格納INDEX(レート)
var d_date_index = 3;							// お気に入り情報1物件内詳細情報格納INDEX(日付)

// お気に入りを開くボタンを押下したときの処理
function openFavor(formObj){
	favorWin = window.open("", d_favorWindowName, "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=490,height=510");

// 20050307 sshimoya for bug fix start
	fixWCookie();
// 20050307 sshimoya for bug fix end
		
	var cnt = 1;
	while(1){
		var idName = "submitButtons" + cnt;
		if(favorWin.document.getElementById(idName)){
			favorWin.document.getElementById(idName).style.display = "none";
		}else{
			break;
		}
		cnt++;
	}
	cnt = 1;
	while(1){
		var idName = "onloadMsg" + cnt;
		if(favorWin.document.getElementById(idName)){
			favorWin.document.getElementById(idName).innerHTML = "現在表示処理中です。しばらくお待ちください...";
			favorWin.document.getElementById(idName).style.display = "block";
		}else{
			break;
		}
		cnt++;
	}
		
	if(favorWin.bkns){
		var btnCnt = favorWin.bkns.length;
		for (var i = 0; i < btnCnt; i++){
			var btnName = "bknDel" + i;
			if(favorWin.document.getElementById(btnName)){
			// 20041026 sshimoya change 削除ボタン -> イメージ
//				favorWin.document.getElementById(btnName).disabled = true;
				favorWin.document.getElementById(btnName).style.display = "none";
			}
		}
	}
	
	formObj.submit();
	// 追加フラグおよび追加上限超過フラグを初期化する
	formObj.addFlg.value = "";
	formObj.overFlowFlg.value = "";

	favorWin.focus();
}


// 20050307 sshimoya for bug fix start
function fixWCookie(){
//alert("enter fixWCookie");
		// お気に入りCookieが重複して登録されていないか(異なるPATHに)をチェックする
		var chkCnt = chkWCookie(d_favorCookieName);
		// 重複していた場合は、最初のCookieは削除するが、
		// 最初に取得したCookieのpathが"/web_hplaza/servlet/"の場合
		// path="/" の値として上書きする必要がある。
		// そのため、URLを取得し"servlet"の文字列が含まれていたら
		// 
//alert("chkCnt: " + chkCnt);
		if(chkCnt > 1){
				var docUrl = document.URL;
				if(docUrl.indexOf("servlet") >= 0){
					var servCooData = getCookie(d_favorCookieName);
//alert("servCooData: " + servCooData);
					setCookie(d_favorCookieName, servCooData);
				}
				
				clearCookieWithPath(d_favorCookieName, "");
				
				return true;
		}else{
				return false;
		}
		
}
// 20050307 sshimoya for bug fix end

// お気に入り追加時のチェック関数
// 戻り値 0:正常 1:最大数エラー 2:重複エラー
function checkAddFavor(addVal, div, maxSize){
	var cooVal = getCookie(d_favorCookieName);
	if(cooVal != null && cooVal != ""){
		var cooValArray = cooVal.split(div);
		for(var i = 0; i < cooValArray.length; i++){
			// ユーザーIDと物件番号が同一だったらすでに登録済みとみなす
			if( addVal ){
				var addValList = addVal.split(d_cookieDetailDiv);
				var cooValArrayValList = cooValArray[i].split(d_cookieDetailDiv);
				if(addValList[0] && addValList[1] && cooValArrayValList[0] && cooValArrayValList[1]){
					if(addValList[0] == cooValArrayValList[0] && addValList[1] == cooValArrayValList[1]){
						return 2;
					}
				}
			}
		}
		if(cooValArray.length >= maxSize){
			return 1;
		}
	}
	return 0;
}

// お気に入りに追加(個別)ボタンを押下したときの処理
// 引数1:addVal = 追加する値
// 引数2:formObj = お気に入りFormのformオブジェクト
// 引数3:numDispId = お気に入り登録物件数を表示するフィールドのID
function addFavor(addVal, formObj, numDispId){
// 20050307 sshimoya for bug fix start
	fixWCookie();
// 20050307 sshimoya for bug fix end

	// お気に入り追加チェックの実行
	var checkVal = checkAddFavor(addVal, d_cookieDiv, d_cookieMax);
	// Cookie への登録を行う
	execAddFavor(checkVal, addVal, formObj);
	// お気に入り画面を開く
	openFavor(formObj);
	// お気に入り登録件数を表示する
	dispFavorBknNum(window, numDispId);
//	getDispFavorBknNum();
}

// お気に入りに追加(まとめて)ボタンを押下したときの処理
// 引数1:chkObj = お気に入り追加チェックボックスオブジェクト
// 引数2:formObj = お気に入りFormのformオブジェクト
// 引数3:valHiddenPre = 追加する値が格納されているHiddenオブジェクトのidのprefix
// 引数4:numDispId = お気に入り登録物件数を表示するフィールドのID
function addCheckedFavor(chkObj, formObj, valHiddenIdPre, numDispId){
	// チェックされている物件のindexの取得
	var checkedArray = getCheckedIndex(chkObj);
	
	for(var i = 0; i < checkedArray.length; i++){
		// チェックされている物件のvalueを取得
		var chkHid = valHiddenIdPre + checkedArray[i];
		var addVal = document.getElementById(chkHid).value;
		// お気に入り追加チェックの実行
		var checkVal = checkAddFavor(addVal, d_cookieDiv, d_cookieMax);
		// Cookie への登録を行う
		execAddFavor(checkVal, addVal, formObj);
	}

	// お気に入り画面を開く
	openFavor(window.document.formFavor);
	// お気に入り登録件数を表示する
	dispFavorBknNum(window, numDispId);
//	getDispFavorBknNum();
}

// お気に入り物件追加時処理
// 登録エラーチェックの結果により結果ごとの登録処理を行う関数
function execAddFavor(checkVal, addVal, formObj){
	if(checkVal == 2){
		// 重複エラーの場合物件を現在に日付に上書き(addValと置き換え)してからCookieの先頭にソートする
		var doubIndex = getFavorCookieIndex(addVal);
		if( doubIndex && doubIndex >= 0 ){
			// 追加される物件の主キー情報に付加情報をつける
			addVal = getCookieValue(d_favorCookieName, doubIndex, d_cookieDiv);
			addVal = makeCookieVal(addVal);
			replaceCookieValue(d_favorCookieName, addVal, d_cookieDiv, doubIndex);
			sortCookieValue(d_favorCookieName, doubIndex, 0, d_cookieDiv);
		}
	}else if(checkVal == 1){
		// 上限エラーの場合、servlet とCookieの追加上限超過フラグを設定する
		formObj.overFlowFlg.value = "1";
		setCookie(d_overFlowCookieName, "1");
	}else if(checkVal == 0){
		// エラーがない場合Cookieに物件情報を追加して追加フラグを設定する
			// 追加される物件の主キー情報に付加情報をつける
		addVal = makeCookieVal(addVal);
		insertCookieValue(d_favorCookieName, addVal, d_cookieDiv, 0);
		formObj.addFlg.value = "1";
	}
}

// 主キーの値などに、Cookie 登録に必要な付加情報を
// 付け足して、Cookie に登録する値を作成する関数
// 必要な付加情報が追加された場合はこの関数を修正する
function makeCookieVal(addVal){
	var valArray = addVal.split(d_cookieDetailDiv);
	
	// レート初期値
	if( valArray[d_rate_index] == null || valArray[d_rate_index] == "" ){
		valArray[d_rate_index] = d_rateMin;
	}
	// 日付情報
	valArray[d_date_index] = getNowTime();
	
	return valArray.join(d_cookieDetailDiv);
}

// お気に入りCookieに登録されているvalのindexを取得する
// common.js の getCookieIndex(key, val, div)が使えないのは、
// Cookie に登録されている値( ユーザーID_物件番号_レート_日付 )のうち
// ユーザーIDと物件番号のみが検索対象となるため
// valがCookieに存在しなかった場合-1を返却する
function getFavorCookieIndex(val){
	var retVal = -1;
	var cooValLength = getCookieValueNum(d_favorCookieName, d_cookieDiv);

	var valList = null;
	var curUserId = null;
	var curBkno = null;
	for(var i = 0; i < cooValLength; i++){
		// ユーザーIDと物件番号が同一だったらすでに登録済みとみなす
		valList = val.split(d_cookieDetailDiv);
		curUserId = getFavorBknUserId(i);
		curBkno = getFavorBknBkno(i);
		if(valList[d_userid_index] == curUserId && valList[d_bkno_index] == curBkno ){
			retVal = i;
		}
	}
/*
	var cooValArray = getCookie(d_favorCookieName).split(d_cookieDiv);
	if( val != null && cooValArray != null ){
		for(var i = 0; i < cooValArray.length; i++){
		// ユーザーIDと物件番号が同一だったらすでに登録済みとみなす
			var valList = val.split(d_cookieDetailDiv);
			var cooValArrayValList = cooValArray[i].split(d_cookieDetailDiv);
			if(valList[0] != null && valList[1] != null && 
			   cooValArrayValList[0] != null && cooValArrayValList[1] != null){
				if(valList[0] == cooValArrayValList[0] && valList[1] == cooValArrayValList[1]){
					retVal = i;
				}
			}
		}
	}
*/
	return retVal;
}

// お気に入りCookie登録物件数を表示する関数
function dispFavorBknNum(windowObj, numDispId){
	var favorBknNum = getCookieValueNum(d_favorCookieName, d_cookieDiv);
	if(windowObj.document.getElementById(numDispId)){
		windowObj.document.getElementById(numDispId).innerHTML = favorBknNum;
	}
}

// お気に入りCookieの指定したindexの物件の情報から、ユーザーIDを取得する関数
function getFavorBknUserId(index){
	return getFavorBknVal(index, d_userid_index);
}

// お気に入りCookieの指定したindexの物件の情報から、物件番号を取得する関数
function getFavorBknBkno(index){
	return getFavorBknVal(index, d_bkno_index);
}

// お気に入りCookieの指定したindexの物件の情報から、レートを取得する関数
function getFavorBknRate(index){
	return getFavorBknVal(index, d_rate_index);
}

// お気に入りCookieのレート配列を取得する関数
function getFavorBknRateArray(){
	var retArray = null;
	var bknNum = getCookieValueNum(d_favorCookieName, d_cookieDiv);
	if( bknNum != null ){
		retArray = new Array();
		for (var i = 0; i < bknNum; i++){
//			retArray.push( getFavorBknRate(i) - 0 );
			retArray = arrayPush(retArray, getFavorBknRate(i) - 0);
		}
	}
	return retArray;
}

// お気に入りCookie 1物件の情報を"_"区切りで配列にして取得する関数
function getFavorBknValArray(index){
	var retArray = null;
	var bknArray = getFavorBknArray();
	if( bknArray != null && bknArray[index] != null){
		retArray = bknArray[index].split(d_cookieDetailDiv);
	}
	return retArray;
}

// お気に入りCookieの物件情報を","区切りの配列にして取得する関数
function getFavorBknArray(){
	var retVal = null;
	var cooVal = getCookie(d_favorCookieName);
	if( cooVal != null ){
		retVal = cooVal.split(d_cookieDiv);
	}
	return retVal;
}

// お気に入りCookieの指定したindexの物件の情報から、指定した情報を取得する関数
function getFavorBknVal(index, valIndex){
	var retVal = null;
	var bknArray = getFavorBknValArray(index);
	if( bknArray != null && bknArray[valIndex] != null ){
		retVal = bknArray[valIndex];
	}
	return retVal;
}



