/**
 * kinbun_search.js
 * JK select series「web版日本近代文学館」サイト
 * 検索関連のjavascript処理
 * 
 * [更新履歴]
 * 
 * 履歴NO	|更新日		|更新者			|更新内容
 * ---------+-----------+---------------+------------------------------------------
 * 00000	|2008/05/14	|ArataHayami	|新規作成
 * 00000	|2008/05/16	|kodama     	|ログイン/パスワードチェック追加
 * 
 * Copyright 2008 S.Ten Nines Kyoto CO., LTD.. All rights reserved.
 */

// ボタン二度押しの防止フラグとしてグローバル宣言
var submitFlag = false;

/** ログイン・パスワード文字長のチェック
    onclick="javascript:return chk(this.form);
 **/
function chk(inForm) {
	// ボタン二度押しの防止
	if (submitFlag) {
		// alert('ただいま、ログイン中です');
		return false;
	}
	// フォーム、またはその中にinputタグが存在しなければ、抜ける。
	if (inForm == null || inForm.getElementsByTagName("input") == null)
	{
		return(true);
	}
	// formからinputタグを抽出
	var tInputElements = inForm.getElementsByTagName("input");
	var tInputElementsNum = tInputElements.length;

	var tChkbuf;
	// 全（入力<Form>）内にある input タグの中から、チェック対象を選択
	for (var i=0; i<tInputElementsNum; i++)
	{
		// ログイン 入力値チェック（文字長）
		if ( tInputElements[i].name=="userId" && tInputElements[i].type == "text" )
		{
			tChkbuf = tInputElements[i].value.length;
			if(tChkbuf < 5 || tChkbuf > 15) {
				alert("会員IDは5～10文字で入力してください。");
				return(false);
			}
		}
		// パスワード 入力チェック（文字長）
		if ( tInputElements[i].name=="passWd" && tInputElements[i].type == "password" )
		{
			tChkbuf = tInputElements[i].value.length;
			if(tChkbuf < 4 || tChkbuf > 15) {
				alert("パスワードは4～10文字で入力してください。");
			return(false);
			}
		}
	}
	submitFlag = true;
	return(true);
}


/** ▼▼▼検索ボタンが押された場合の入力値検証処理▼▼▼ */

/** キーワード検索時の検索開始是非の検証処理
 * キーワード検索：検索開始時に呼ばれ、次の検証処理を行う。
 * ・3検索処理共通：コンテンツ選択確認検証
 * ・キーワード検索：キーワード入力欄の入力値検証
 * 検証に失敗した場合は、直ちに処理を抜け、falseを返す。
 * @param {Object} inForm
 */
function checkKeywordSearch(inForm)
{
	// ボタン二度押しの防止
	if (submitFlag) {
		// alert('ただいま、検索中です');
		return false;
	}
	// 3検索処理共通：コンテンツ選択確認検証
	if ( !checkComponentSelectContents(inForm) )
	{
		return false;
	}
	// キーワード検索：キーワード入力欄の入力値検証
	if ( !checkComponentMultiKeyword(inForm) )
	{
		return false;
	}
	submitFlag = true;
	return true;
}
/** 項目検索時の検索開始是非の検証処理
 * 項目検索：検索開始時に呼ばれ、次の検証処理を行う。
 * ・3検索処理共通：コンテンツ選択確認検証
 * ・項目検索/巻号検索共通：範囲指定検証
 * ・項目検索：７つのテキスト入力欄の入力値検証
 * 検証に失敗した場合は、直ちに処理を抜け、falseを返す。
 * @param {Object} inForm
 */
function checkDetailSearch(inForm)
{
	// ボタン二度押しの防止
	if (submitFlag) {
		// alert('ただいま、検索中です');
		return false;
	}
	// 3検索処理共通：コンテンツ選択確認検証
	if ( !checkComponentSelectContents(inForm) )
	{
		return false;
	}
	
	// 項目検索/巻号検索共通：範囲指定検証
	if ( !checkComponentSelectRange(inForm) )
	{
		return false;
	}
	
	// 項目検索：７つのテキスト入力欄の入力値検証
	if ( !checkComponentDetailKeyword(inForm) )
	{
		return false;
	}
	submitFlag = true;
	return true;
}

/** 巻号検索時の検索開始是非の検証処理
 * 巻号検索：検索開始時に呼ばれ、次の検証処理を行う。
 * ・3検索処理共通：コンテンツ選択確認検証
 * ・項目検索/巻号検索共通：範囲指定検証
 * 検証に失敗した場合は、直ちに処理を抜け、falseを返す。
 * @param {Object} inForm
 */
function checkBookSearch(inForm)
{
	// ボタン二度押しの防止
	if (submitFlag) {
		// alert('ただいま、検索中です');
		return false;
	}
	// 3検索処理共通：コンテンツ選択確認検証
	if ( !checkComponentSelectContents(inForm) )
	{
		return false;
	}
	// 項目検索/巻号検索共通：範囲指定検証
	if ( !checkComponentSelectRange(inForm) )
	{
		return false;
	}
	submitFlag = true;
	return true;
}


/** 3検索処理共通：コンテンツ選択確認検証
 * コンテンツ選択部分：3検索処理共通では、次の検証を行う。
 * コンテンツの指定がひとつもない場合、警告を表示し、falseを返す。
 * @param {Object} inForm
 */
function checkComponentSelectContents(inForm)
{
	// フォーム、またはその中にsearchContentsが存在しなければ、抜ける。
	if (inForm == null || inForm.searchContents == null)
	{
		return true;
	}
	var tChkBox = inForm.searchContents;
	var tChkNum = tChkBox.length;
	
	// チェックボックスにチェックが入っているかどうかのフラグ
	var isChkBoxSelected = false;
	
	for ( var i=0; i<tChkNum; i++)
	{
		// チェックボックスにチェックが入っていたら、isChkBoxSelectedをtrueにする。
		if ( tChkBox[i].type == "checkbox"
			&& tChkBox[i].checked == true)
		{
			isChkBoxSelected = true;
		}
	}
	
	// isChkBoxSelectedがfalseなら警告を出してfalseを返す。trueならtrueを返す。
	if (isChkBoxSelected == false)
	{
		alert("検索対象の書目を指定してください");
		return false;
	}
	return true;
}

/** 項目検索/巻号検索共通：範囲指定検証
 * @param {Object} inForm
 */
function checkComponentSelectRange(inForm)
{
	// フォームが存在しなければ、抜ける。
	if ( inForm == null )
	{
		return true;
	}
	// フォームにmonthStartという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.monthStart !=null
		&&	inForm.monthStart.type == "text"
		&&	inForm.monthStart.disabled == false )
	{
		if ( !checkMonthNumber(inForm.monthStart.value) )
		{
			return false;
		}
	}
	// フォームにmonthEndという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.monthEnd !=null
		&&	inForm.monthEnd.type == "text"
		&&	inForm.monthEnd.disabled == false )
	{
		if ( !checkMonthNumber(inForm.monthEnd.value) )
		{
			return false;
		}
	}
	// フォームにdayStartという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.dayStart !=null
		&&	inForm.dayStart.type == "text"
		&&	inForm.dayStart.disabled == false )
	{
		if ( !checkDayNumber(inForm.dayStart.value) )
		{
			return false;
		}
	}
	// フォームにdayEndという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.dayEnd !=null
		&&	inForm.dayEnd.type == "text"
		&&	inForm.dayEnd.disabled == false )
	{
		if ( !checkDayNumber(inForm.dayEnd.value) )
		{
			return false;
		}
	}
	// フォームにkanStartという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.kanStart !=null
		&&	inForm.kanStart.type == "text"
		&&	inForm.kanStart.disabled == false )
	{
		if ( !checkKanNumber(inForm.kanStart.value) )
		{
			return false;
		}
	}
	// フォームにkanEndという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.kanEnd !=null
		&&	inForm.kanEnd.type == "text"
		&&	inForm.kanEnd.disabled == false )
	{
		if ( !checkKanNumber(inForm.kanEnd.value) )
		{
			return false;
		}
	}
	// フォームにgouStartという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.gouStart !=null
		&&	inForm.gouStart.type == "text"
		&&	inForm.gouStart.disabled == false )
	{
		if ( !checkGouNumber(inForm.gouStart.value) )
		{
			return false;
		}
	}
	// フォームにgouEndという名前のテキストボックスがあれば、内容をチェックする。
	if	(	inForm.gouEnd !=null
		&&	inForm.gouEnd.type == "text"
		&&	inForm.gouEnd.disabled == false )
	{
		if ( !checkGouNumber(inForm.gouEnd.value) )
		{
			return false;
		}
	}
	return true;
}

/** キーワード検索：キーワード入力欄の入力値検証
 * キーワード検索：キーワード入力欄では、次の検証を順に行う。
 * ・検索文字列：文字数制限チェック
 * ・検索文字列：存在チェック
 * 検証に失敗した場合は、直ちに処理を抜け、falseを返す。
 * @param {Object} inForm
 */
function checkComponentMultiKeyword(inForm)
{
	// フォーム、またはその中にinputタグが存在しなければ、抜ける。
	if (inForm == null || inForm.getElementsByTagName("input") == null)
	{
		return true;
	}
	// formからinputタグを抽出
	var tInputElements = inForm.getElementsByTagName("input");
	var tInputElementsNum = tInputElements.length;
	 
	// inputタグのうちキーワード検索のテキストボックスに入力値が入っているかどうかをチェック
	for (var i=0; i<tInputElementsNum; i++)
	{
		// キーワード検索のテキストボックスが存在する場合だけ、エラーを表示してfalseを返す。
		if ( tInputElements[i].name=="searchKeywords" && tInputElements[i].type == "text" )
		{
			// 検索文字列：文字数制限チェック
			var isOkKeywordLength = checkKeywordLength(tInputElements[i].value);
			if ( isOkKeywordLength == false)
			{
				return false;
			}
			// 検索文字列：存在チェック
			var isOkKeywordNotNull = checkKeywordNotNull(tInputElements[i].value);
			if ( isOkKeywordNotNull == false)
			{
				return false;
			}
		}
	}
	return true;
}

/** 項目検索：７つのテキスト入力欄の入力値検証
 * 項目検索：７つのテキスト入力欄では、次の検証を行う。
 * ・検索文字列：文字数制限チェック
 * 検証に失敗した場合は、直ちに処理を抜け、falseを返す。
 * テキストボックスの上から順に検証を行う。
 * @param {Object} inForm
 */
function checkComponentDetailKeyword(inForm)
{
	// フォーム、またはその中にinputタグが存在しなければ、抜ける。
	if (inForm == null || inForm.getElementsByTagName("input") == null)
	{
		return true;
	}
	// formからinputタグを抽出
	var tInputElements = inForm.getElementsByTagName("input");
	var tInputElementsNum = tInputElements.length;
	 
	// inputタグのうち項目検索のテキストボックスに入力値が入っているかどうかをチェック
	for (var i=0; i<tInputElementsNum; i++)
	{
		// 項目検索のテキストボックスが存在する場合だけ、エラーを表示してfalseを返す。
		if ( tInputElements[i].type == "text" )
		{
			// 項目検索のテキストボックスの名前は以下に示すとおり、searchKeywords1～7。
			if (	tInputElements[i].name == "searchKeywords1"
				||	tInputElements[i].name == "searchKeywords2"
				||	tInputElements[i].name == "searchKeywords3"
				||	tInputElements[i].name == "searchKeywords4"
				||	tInputElements[i].name == "searchKeywords5"
				||	tInputElements[i].name == "searchKeywords6"
				||	tInputElements[i].name == "searchKeywords7" )
			{
				// 検索文字列：文字数制限チェック
				var isOkKeywordLength = checkKeywordLength(tInputElements[i].value);
				if (isOkKeywordLength == false) {
					return false;
				}
			}
		}
	}
	return true;
}


/** ▲▲▲検索ボタンが押された場合の入力値検証処理▲▲▲ */
/** ▼▼▼クリアボタンが押された場合の入力値検証処理▼▼▼ */
/** キーワード検索時のクリアボタン処理
 * キーワード検索：クリアボタン押下時に呼ばれ、次の処理を行う。
 * ・キーワード検索：キーワード入力欄のクリア
 * 返り値なし
 */
function clearKeywordSearch()
{
	// キーワード検索：キーワード入力欄のクリア
	clearComponentMultiKeyword();
}
/** 項目検索時のクリアボタン処理
 * 項目検索：クリアボタン押下時に呼ばれ、次の処理を行う。
 * ・項目検索/巻号検索共通：範囲指定クリア
 * ・項目検索：７つのテキスト入力欄のクリア
 * 返り値なし
 */
function clearDetailSearch()
{
	// 項目検索/巻号検索共通：範囲指定クリア
	clearComponentSelectRange();
	// 項目検索：７つのテキスト入力欄のクリア
	clearComponentDetailKeyword();
}

/** 巻号検索時のクリアボタン処理
 * 巻号検索：クリアボタン押下時に呼ばれ、次の処理を行う。
 * ・項目検索/巻号検索共通：範囲指定クリア
 * 返り値なし
 */
function clearBookSearch()
{
	// 項目検索/巻号検索共通：範囲指定クリア
	clearComponentSelectRange();
}

/** 項目検索/巻号検索共通：範囲指定クリア
 * 返り値なし
 */
function clearComponentSelectRange()
{
	/* 上から5番目のformのsearchModeを変更する
	 * TODO:ターゲットフォームまでに出てくるフォームの数が変わると
	 * この数字を変える必要が出てくる。
	 */
	var tForm = document.forms[4];
	// フォームが存在しなければ、抜ける。
	if ( tForm == null )
	{
		return;
	}
	// 刊行年の初期化用html記述を書き換える。
	document.getElementById('eraStartValue').innerHTML = "meiji";
	document.getElementById('eraEndValue').innerHTML = "shouwa";
	document.getElementById('yearStartValue').innerHTML = "1890";
	document.getElementById('yearEndValue').innerHTML = "1944";
	
	// 検索範囲を"全てを指定"に初期化する
	tForm.searchMode[0].checked = true;
	changeSearchMode(tForm);
	
	// 刊行年の初期化は初期化関数に任せる。
	initKankounenData(tForm);
	
	// フォームにmonthStartという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.monthStart !=null
		&&	tForm.monthStart.type == "text")
	{
		tForm.monthStart.value = "1";
	}
	// フォームにmonthEndという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.monthEnd !=null
		&&	tForm.monthEnd.type == "text")
	{
		tForm.monthEnd.value = "12";
	}
	// フォームにdayStartという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.dayStart !=null
		&&	tForm.dayStart.type == "text")
	{
		tForm.dayStart.value = "1";
	}
	// フォームにdayEndという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.dayEnd !=null
		&&	tForm.dayEnd.type == "text")
	{
		tForm.dayEnd.value = "31";
	}
	// フォームにkanStartという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.kanStart !=null
		&&	tForm.kanStart.type == "text")
	{
		tForm.kanStart.value = "1";
	}
	// フォームにkanEndという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.kanEnd !=null
		&&	tForm.kanEnd.type == "text")
	{
		tForm.kanEnd.value = "";
	}
	// フォームにgouStartという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.gouStart !=null
		&&	tForm.gouStart.type == "text")
	{
		tForm.gouStart.value = "1";
	}
	// フォームにgouEndという名前のテキストボックスがあれば、内容を初期化する。
	if	(	tForm.gouEnd !=null
		&&	tForm.gouEnd.type == "text")
	{
		tForm.gouEnd.value = "";
	}
}

/** キーワード検索：キーワード入力欄の入力値のクリア
 * キーワード検索：キーワード入力欄では、次の処理を行う。
 * ・キーワード検索：キーワード入力欄のクリア
 * 返り値なし
 */
function clearComponentMultiKeyword()
{
	/* 上から5番目のformのsearchModeを変更する
	 * TODO:ターゲットフォームまでに出てくるフォームの数が変わると
	 * この数字を変える必要が出てくる。
	 */
	var tForm = document.forms[4];
	// フォームが存在しなければ、抜ける。
	if ( tForm == null )
	{
		return;
	}
	// フォームにsearchKeywordsという名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords !=null
		&&	tForm.searchKeywords.type == "text")
	{
		tForm.searchKeywords.value = "";
	}
}

/** 項目検索：７つのテキスト入力欄の入力値のクリア
 * 項目検索：７つのテキスト入力欄では、次の検証を行う。
 * ・検索文字列：文字数制限チェック
 * 検証に失敗した場合は、直ちに処理を抜け、falseを返す。
 * テキストボックスの上から順に検証を行う。
 * 返り値なし
 */
function clearComponentDetailKeyword()
{
	/* 上から5番目のformのsearchModeを変更する
	 * TODO:ターゲットフォームまでに出てくるフォームの数が変わると
	 * この数字を変える必要が出てくる。
	 */
	var tForm = document.forms[4];
	// フォームが存在しなければ、抜ける。
	if ( tForm == null )
	{
		return;
	}
	// フォームにsearchKeywords1という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords1 !=null
		&&	tForm.searchKeywords1.type == "text")
	{
		tForm.searchKeywords1.value = "";
	}
	// フォームにsearchKeywords2という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords2 !=null
		&&	tForm.searchKeywords2.type == "text")
	{
		tForm.searchKeywords2.value = "";
	}
	// フォームにsearchKeywords3という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords3 !=null
		&&	tForm.searchKeywords3.type == "text")
	{
		tForm.searchKeywords3.value = "";
	}
	// フォームにsearchKeywords4という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords4 !=null
		&&	tForm.searchKeywords4.type == "text")
	{
		tForm.searchKeywords4.value = "";
	}
	// フォームにsearchKeywords5という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords5 !=null
		&&	tForm.searchKeywords5.type == "text")
	{
		tForm.searchKeywords5.value = "";
	}
	// フォームにsearchKeywords6という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords6 !=null
		&&	tForm.searchKeywords6.type == "text")
	{
		tForm.searchKeywords6.value = "";
	}
	// フォームにsearchKeywords7という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords7 !=null
		&&	tForm.searchKeywords7.type == "text")
	{
		tForm.searchKeywords7.value = "";
	}
	// フォームにsearchKeywords8という名前のテキストボックスがあれば、内容をクリアする。
	if	(	tForm.searchKeywords8 !=null
		&&	tForm.searchKeywords8.type == "text")
	{
		tForm.searchKeywords8.value = "";
	}
}

/** ▲▲▲クリアボタンが押された場合の入力値検証処理▲▲▲ */
/** ▼▼▼onelook_search.js参照スクリプト群▼▼▼ **/
/** キーワードの文字数制限チェック
 * 入力文字列の長さが制限値100を超えていないことを確認する。
 * @param {Object} inString
 */
function checkKeywordLength(inString)
{
	// 入力値nullチェックを行う。nullの場合は処理を抜け、trueを返す。
	if( !inString )
	{
		return true;
	}
	// 入力値の文字数制限チェックを行う。制限値外の場合は、警告を出し、falseを返す。
	if( inString.length>=101 )
	{
		alert("キーワードの文字数が上限をオーバーしています。\n文字数（※スペースを含む）は100文字までとしてください。");
		return false;
	}
}
/** キーワードの存在チェック
 * 入力文字列の中に半角スペースと全角スペース以外の文字が存在することを確認する。
 * @param {Object} inString
 */
function checkKeywordNotNull(inString)
{
	// 入力値nullチェックを行う。nullの場合は警告を出し、falseを返す。
	if( !inString )
	{
		alert("キーワードを入力してください。");
		return false;
	}

	// 文字存在フラグ：有効文字が存在しなければ0,有効文字が存在すれば1で管理する。
	var isOkString = 0;
	// 文字列の全文字を調査し、有効文字が存在するかどうかのチェックを行う。
	for( var i=0; i<inString.length; i++)
	{
		if( inString.charAt(i)!=" " && inString.charAt(i)!="　" )
		{
			isOkString=1;
			break;
		}
	}
	// 有効文字が存在しなかった場合、警告を出し、falseを返す。
	if( !isOkString )
	{
		alert("キーワードを入力してください。");
		return false;
	}
}
/** ▲▲▲onelook_search.js参照スクリプト群▲▲▲ **/


/** 「年月日を指定」の月指定のテキストチェック */
function checkMonthNumber(inString)
{
	// 入力値nullチェックを行う。nullの場合は処理を抜け、trueを返す。
	if( !inString )
	{
		return true;
	}
	// 入力値の文字数制限チェックを行う。制限値外の場合は、警告を出し、falseを返す。
	if( inString.length>=3 )
	{
		alert("「年月日を指定」の月指定が上限をオーバーしています。\n2桁までの数字にしてください。");
		return false;
	}
	return true;
}
/** 「年月日を指定」の日指定のテキストチェック */
function checkDayNumber(inString)
{
	// 入力値nullチェックを行う。nullの場合は処理を抜け、trueを返す。
	if( !inString )
	{
		return true;
	}
	// 入力値の文字数制限チェックを行う。制限値外の場合は、警告を出し、falseを返す。
	if( inString.length>=3 )
	{
		alert("「年月日を指定」の日指定が上限をオーバーしています。\n2桁までの数字にしてください。");
		return false;
	}
	return true;
}
/** 「巻号を指定」の巻指定のテキストチェック */
function checkKanNumber(inString)
{
	// 入力値nullチェックを行う。nullの場合は処理を抜け、trueを返す。
	if( !inString )
	{
		return true;
	}
	// 入力値の文字数制限チェックを行う。制限値外の場合は、警告を出し、falseを返す。
	if( inString.length>=3 )
	{
		alert("「巻号を指定」の巻指定が上限をオーバーしています。\n2桁までの数字にしてください。");
		return false;
	}
	return true;
}
/** 「巻号を指定」の号指定のテキストチェック */
function checkGouNumber(inString)
{
	// 入力値nullチェックを行う。nullの場合は処理を抜け、trueを返す。
	if( !inString )
	{
		return true;
	}
	// 入力値の文字数制限チェックを行う。制限値外の場合は、警告を出し、falseを返す。
	if( inString.length>=4 )
	{
		alert("「巻号を指定」の号指定が上限をオーバーしています。\n3桁までの数字にしてください。");
		return false;
	}
	return true;
}
// EOF...
