//------------------------------------------------------------------------------
//--                                                                          --
//--    FILE NAME :  item_validate.js
//--                                                                          --
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// メソッド定義
//------------------------------------------------------------------------------

// サーバから取得した validation 結果の処理
function process_validation_result (item_ident, result) {

	// validation 結果のフォーマット:
	//   1行目: <ステータス>
	//   2行目以降: エラーの場合のメッセージ

	// <ステータス> に関しては、"OK" であれば形式チェック等問題なし、
	// "NG" であれば問題あり、とする。

	// まずは result を 1 行目とそれ以外に分ける。
	var result_array = result.split('\n');
	if (result_array.length < 1) {
		return;
	}
	var status = result_array.shift().replace(/[\r\n]/, '');
	var message = result_array.join('\n');
		
	// エラーメッセージ表示部分の HTML Object を取得
	elem_error_td = document.getElementById('td_' + item_ident);
	elem_error_p = document.getElementById('note_' + item_ident);

	// 既にエラーメッセージが存在すれば、エラーメッセージを削除する
	if (elem_error_p) {
  		elem_error_td.removeChild(elem_error_p);
	}

	// NG の場合は、エラーメッセージの表示、エラーフラグの設定を行う
	if (status == 'NG') {
	     // メッセージを作成
	     elem_error = document.createElement('p');
	     elem_error.setAttribute("id", "note_" + item_ident);
	     elem_error.className = "note";
	     elem_error.innerHTML = '<strong>' + message + '</strong>';

	     // 追加
	     elem_error_td.appendChild(elem_error);
	}

	// 無事終了
	return;
}

// 連想配列から HTTP POST 用のデータへの変換
function array2postdata (data) {
	
	var postdata = '';

	for(var key in data) {
		if (postdata) {
			postdata += '&';
		}
		postdata += encodeURIComponent(key);
		postdata += '=';
		postdata += encodeURIComponent(data[key]);
	}

	return postdata;

	
}

// 基本的な validation (item_val がテキスト等であれば、このまま利用する)
function item_validate_text (url_root, form_ident, item_ident, item_val, p_id) {

	// リクエスト先の URL を生成する
	var url_to_validate = url_root + form_ident;
	
	// POST するデータを生成する (p_item_ident=<item_ident>&p_item_val=<item_val>)
	var data = { 'p_item_ident':item_ident, 'p_item_val':item_val, 'p_mode':'item_validate' };
	if (p_id) {
		data['p_id'] = p_id;
	}
	var postdata = array2postdata(data);

	// 生成した URL に対して 生成したデータを POST する
	xmlhttp = new XMLHttpRequest();
	if (!xmlhttp) {
		return;
	}

	// レスポンス取得時の処理の設定
	xmlhttp.onreadystatechange = function () {

		if (xmlhttp.readyState != 4 || xmlhttp.status != 200) {
			return; 
		}

		// 結果を取得
		result = xmlhttp.responseText;

		// 結果の処理をする
		process_validation_result (item_ident, result);

		return;
	}

	// 実際に POST
	xmlhttp.open('POST', url_to_validate, true);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlhttp.send(postdata);
}

// チェックボックスに対する validation
function item_validate_checkbox (url_root, form_ident, item_ident, p_id){

	// おなじ item_ident のチェックボックスを調べる
	var idx = 1;
	var val = '';
	while (1) {
		var elem = document.getElementById(item_ident + '_' + idx);
		if (!elem) {
			break;
		}
		if (elem.checked) {
			val = 1;
			break;
		}
		++idx;
	}

	return item_validate_text (url_root, form_ident, item_ident, val, p_id);
}

