//
//  (C) 2010 株式会社ジャストシステム
//
/*
■ イベントで呼び出す関数

HpbELQInit()	- BODY の onload で呼び出す
HpbELQCheck()	- 送信ボタンで呼び出す
HpbELQReset()	- リセットボタンで呼び出す

*/

//
// GLOBAL DEFINITIONS
//
var HpbELQObj = null; // アンケート処理オブジェクトのインスタンス
var HpbELQ_FormName  = "HPB_ELQ_QUESTION"; // アンケートFORMの名前
var HpbELQ_SubmitBtn = "HPB_ELQ_SUBMIT";   // 「送信」INPUTボタン名
var HpbELQMsg_NoData = "アンケート用のデータが定義されていません。\n回答は送信できません。";
var HpbELQMsg_OK            = "";
var HpbELQMsg_AnsNotDefined = "回答が定義されていません。";
var HpbELQMsg_AnsMissing    = "必須設問に回答してください。";

//
// EXPORT FUNCTIONS
//
function HpbELQInit()
{
	if(typeof HpbELQData == "object"){
		HpbELQObj = new ELQuestionnaire(HpbELQData);
	} else {
		alert(HpbELQMsg_NoData);	// No Data
	}
}

function HpbELQCheck()
{
	if(HpbELQObj != null){
		return HpbELQObj.doCheck();
	} else {
		alert(HpbELQMsg_NoData);	// No Data
		return false;
	}
}

function HpbELQReset()
{
	if(HpbELQObj != null){
		return HpbELQObj.doReset();
	}
}

//
// OBJECT
//
function ELQuestionnaire(data)
{
	var missingElm;
	// Attributes
	this.data = data;

	this.doCheck = function()
	{
		var err_msg = HpbELQMsg_OK;
		var nQ = this.data.questions.length;
		missingElm = null;
		for(var i=0; i<nQ; i++){
			var objQ = this.data.questions[i];
			if (objQ.mandatory == true) {
				var id = this.data.idPrefix + (i+1).toString();
				var func = eval("this.checkEach" + objQ.type);
				if(typeof func == "function"){
					var msg_each = func(this, objQ, id);
					if (msg_each != HpbELQMsg_OK) {
						var item = this.getQ(id + "_head");
						if (item != null && typeof item.innerHTML != "undefined")
							item = item.innerHTML;
						else
							item = id;
						err_msg += (msg_each + ": " + item + "\n");
					}
				} else {
					alert("回答を検査する関数がありません：checkEach" + objQ.type);
					return false;
				}
			}
		}
		if (err_msg == HpbELQMsg_OK) {
			// 送信ボタンを無効に
			this.enableFormItem(HpbELQ_SubmitBtn, false);
			return true;
		} else {
			alert(err_msg);
			// 最初の未回答項目にフォーカスをあてる
			if (missingElm != null) missingElm.focus();
			return false;
		}
	}

	this.doReset = function()
	{
		this.enableFormItem(HpbELQ_SubmitBtn, true);
	}

	this.getQ = function(id)
	{
		if( eval("typeof "+id) == "undefined" )
			return null;
		return eval(id);
	}

	this.getFormItem = function(id)
	{
		return this.getQ(HpbELQ_FormName + "." + id);
	}

	this.enableFormItem = function(name, f)
	{
		var item = this.getFormItem(name);
		if (item != null)
			item.disabled = !f;
	}

	//-------------------
	// check mandatories
	this.checkEachSelection = function(doc, obj, id)
	{
		if(obj.single){
			// Single Selection
			var ansObj = doc.getFormItem(id);
			if (ansObj != null) {
				var count = 0;
				for(var i=0; i<ansObj.length; i++) {
					if(ansObj[i].checked)
						count++;
				}
				if (count == 1)
					return HpbELQMsg_OK;	//ok
				else {
					if (missingElm == null) missingElm = ansObj[0];
					return HpbELQMsg_AnsMissing;
				}
			} else
				return HpbELQMsg_AnsMissing;
		} else {
			// Multiple Selection
			var count = 0;
			for(var i=1; i<=obj.n_selection; i++){
				var ans = doc.getFormItem(id + "_" + i);
				if (ans != null) {
					if (ans.checked)
						count++;
				} else
					return HpbELQMsg_AnsNotDefined;
			}
			if (count > 0)
				return HpbELQMsg_OK;	//ok
			else {
				if (missingElm == null) missingElm = doc.getFormItem(id + "_1");
				return HpbELQMsg_AnsMissing;
			}
		}
	}

	this.checkEachDescription = function(doc, obj, id)
	{
		var ans = doc.getFormItem(id);
		if (ans != null) {
			if (ans.value != "")
				return HpbELQMsg_OK;	//ok
			else {
				if (missingElm == null) missingElm = ans;
				return HpbELQMsg_AnsMissing;
			}
		} else
			return HpbELQMsg_AnsNotDefined;
	}

}

