/*
■ イベントで呼び出す関数

NskELQInit()	- BODY の onload で呼び出す
NskELQCheck()	- 送信ボタンで呼び出す
NskELQReset()	- リセットボタンで呼び出す

*/

//
// GLOBAL DEFINITIONS
//
var NskELQObj = null; // アンケート処理オブジェクトのインスタンス
var NskELQ_FormName  = "Nsk_ELQ_QUESTION"; // メールFORMの名前
var NskELQ_SubmitBtn = "Nsk_ELQ_SUBMIT";   // 「送信」INPUTボタン名
var NskELQMsg_NoData = "フォームメール用のデータが定義されていません。\nメールは送信できません。";
var NskELQMsg_OK            = "";
var NskELQMsg_AnsNotDefined = "項目が定義されていません。";
var NskELQMsg_AnsMissing    = "必須項目に入力してください。";
var NskELQMsg_AnsNotCompare = "比較入力で間違いがありました。";

//
//	HTMLファイルの先頭で、以下のように入力項目の条件をオブジェクト定義する
//
//	type:	"Selection"選択項目|"Description"記述項目|"Generalize"総括項目|"Compare"比較
//	single:	true|false	選択項目の場合、単独選択、複数選択
//	n_selection:4,	選択項目の数
//	mandatory:	true|false	必須項目
//
//
//	<SCRIPT language="JavaScript">
//	<!--
//	var NskELQData = {idPrefix:"Q",
//	questions:[
//		{name:"社名",	type:"Description",									mandatory:true	},
//		{name:"郵便",	type:"Description",									mandatory:false	},
//		{name:"住所",	type:"Generalize",	entirely:false,	n_selection:3,	mandatory:true	},
//		{name:"Email",	type:"Compare",						n_selection:2,	mandatory:true	},
//		{name:"職種",	type:"Selection",	single:true,	n_selection:4,	mandatory:false	},
//		{name:"希望",	type:"Selection",	single:false,	n_selection:8,	mandatory:false	},
//		{name:"その他",	type:"Selection",	single:true,	n_selection:4,	mandatory:false	}
//	]};
//	//-->
//	</SCRIPT>
//

//
//	HTMLロード時に初期化するように<BODY>定義を以下のように記入しておく
//	<BODY onload="NskELQInit();">
//	


//
// EXPORT FUNCTIONS
//
function NskELQInit()				// フォームロード時に入力フィールドの数に対応し条件を取得
{
	if(typeof NskELQData == "object"){
		NskELQObj = new ELQuestionnaire(NskELQData);	// オブジェクトを宣言
	} else {
		alert(NskELQMsg_NoData);	// No Data
	}
}

function NskELQCheck()				// 送信ボタンを押されたら各フィールドの条件を確認する
{
	if(NskELQObj != null){
		return NskELQObj.doCheck();
	} else {
		alert(NskELQMsg_NoData);	// No Data
		return false;
	}
}

function NskELQReset()				// リセットボタンが押されたら各フィールドを条件にそって初期化
{
	if(NskELQObj != null){
		return NskELQObj.doReset();
	}
}

// ----------------------------------------------------------------------------------------------
// OBJECT
//
function ELQuestionnaire(data)
{
	var missingElm;
	// Attributes
	this.data = data;

	this.doCheck = function()
	{
		var err_msg = NskELQMsg_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) {			// 必須入力指定

				if ( i < 9 ) {			// プレフィックス＋前ゼロ編集をする
					var id = this.data.idPrefix + "0" + (i+1).toString();
				} else {
					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 != NskELQMsg_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;
				}
			} else {		// 必須ではないのだが・・・
				if ( objQ.type == "Compare" ) {		// 例外的に比較入力の場合はチェックする
					var func = eval("this.checkEachCompare");
					if(typeof func == "function"){
						if ( i < 9 ) {			// プレフィックス＋前ゼロ編集をする
							var id = this.data.idPrefix + "0" + (i+1).toString();
						} else {
							var id = this.data.idPrefix + (i+1).toString();
						}
						var msg_each = func(this, objQ, id);
						if (msg_each != NskELQMsg_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("比較チェックする関数がありません：checkEachCompare");
						return false;
					}
				}
			}
		}

		if (err_msg == NskELQMsg_OK) {
			// 送信ボタンを無効に
			this.enableFormItem(NskELQ_SubmitBtn, false);
			return true;
		} else {
			alert(err_msg);
			// 最初の未回答項目にフォーカスをあてる
			if (missingElm != null) missingElm.focus();
			return false;
		}
	}

	this.doReset = function()
	{
		this.enableFormItem(NskELQ_SubmitBtn, true);
	}

	this.getQ = function(id)
	{
		if( eval("typeof "+id) == "undefined" )
			return null;
		return eval(id);
	}

	this.getFormItem = function(id)
	{
		return this.getQ(NskELQ_FormName + "." + id);
	}

	this.enableFormItem = function(name, f)
	{
		var item = this.getFormItem(name);
		if (item != null)
			item.disabled = !f;
	}

	//-------------------
	// check mandatories(Selection|Description|Generalize)


	//	選択形式(checkEachSelection )の項目による必須入力チェック
	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 NskELQMsg_OK;	//ok
				else {
					if (missingElm == null) missingElm = ansObj[0];
					return NskELQMsg_AnsMissing;
				}
			} else
				return NskELQMsg_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 NskELQMsg_AnsNotDefined;
			}
			if (count > 0)
				return NskELQMsg_OK;	//ok
			else {
				if (missingElm == null) missingElm = doc.getFormItem(id + "_1");
				return NskELQMsg_AnsMissing;
			}
		}
	}


	// 通常項目(checkEachDescription)の必須入力チェック
	this.checkEachDescription = function(doc, obj, id)
	{
		var ans = doc.getFormItem(id);
		if (ans != null) {
			if (ans.value != "")
				return NskELQMsg_OK;	//ok
			else {
				if (missingElm == null) missingElm = ans;
				return NskELQMsg_AnsMissing;
			}
		} else
			return NskELQMsg_AnsNotDefined;
	}


	// 複数の記述項目(checkEachGeneralize)を総括して必須入力チェック
	// 年月日などを別フィールドにしている場合等
	// ラジオボタンや、チェックボックスは、Selectionタイプで宣言
	this.checkEachGeneralize = function(doc, obj, id)
	{
		var count = 0;
		for(var i=1; i<=obj.n_selection; i++){
			var ans = doc.getFormItem(id + "_" + i);
			if (ans != null) {
				if (ans.type == "text" || ans.type == "textarea" || ans.type == "select-one") {
					if (ans.value != "" )
						count++;
				}

			} else
				return NskELQMsg_AnsNotDefined;
		}

		if (count > 0) {
			if (obj.entirely) {		//総ての項目に対して必須入力
				if ( count < obj.n_selection ) {
					if (missingElm == null) missingElm = doc.getFormItem(id );
					return NskELQMsg_AnsMissing;
				} else
				 	return NskELQMsg_OK;	//ok
			} else
				 return NskELQMsg_OK;	//ok どれか一つでも入ってればOK
		} else {
			if (missingElm == null) missingElm = doc.getFormItem(id );
			return NskELQMsg_AnsMissing;
		}
	}

	// 記述項目(checkEachCompare)を比較チェック
	this.checkEachCompare = function(doc, obj, id)
	{
		var ansA = doc.getFormItem(id + "_1");
		if (ansA == null) {
			return NskELQMsg_AnsNotDefined;
		}

		var ansB = doc.getFormItem(id + "_2");
		if (ansB == null) {
			return NskELQMsg_AnsNotDefined;
		}

		if (ansA.value == ansB.value ) {
			return NskELQMsg_OK;	//ok
		} else {
			return NskELQMsg_AnsNotCompare;
		}

	}
}



function 	put_yearoption() {
	today = new Date();
	y = today.getFullYear();
	document.write("<OPTION value=",y," selected>",y);
	for ( i = y + 1 ; i < y + 3 ; i++) {
		document.write("<OPTION value=",i," >",i);
		document.write("</OPTION>");
	}
}

function	put_monthoption() {
	today = new Date();
	m = today.getMonth()+1;
	for ( i = 1 ; i <= 12 ; i++) {
		document.write("<OPTION value=",i);
		if ( m == i ) {
			document.write(" selected");
		}
		document.write(" >",i);
		document.write("</OPTION>");
	}

}

function	put_dateoption() {
	today = new Date();
	d = today.getDate()+1;
	for ( i = 1 ; i <= 31 ; i++) {
		document.write("<OPTION value=",i);
		if ( d == i ) {
			document.write(" selected");
		}
		document.write(" >",i);
		document.write("</OPTION>");
	}
}

function	put_kenmeioption() {
	kenmei = new Array(	"北海道",	"青森県","岩手県",	"宮城県","秋田県",	"山形県","福島県","茨城県","栃木県",
						"群馬県",	"埼玉県","千葉県",	"東京都","神奈川県","新潟県","富山県","石川県","福井県",
						"山梨県",	"長野県","岐阜県",	"静岡県","愛知県",	"三重県","滋賀県","京都府","大阪府",
						"兵庫県",	"奈良県","和歌山県","鳥取県","島根県",	"岡山県","広島県","山口県","徳島県",
						"香川県",	"愛媛県","高知県",	"福岡県","佐賀県",	"長崎県","熊本県","大分県","宮崎県",
						"鹿児島県",	"沖縄県");

	for ( i = 0; i < kenmei.length ; i++) {
		document.write("<OPTION value=", kenmei[i]);
		document.write(">",kenmei[i]);
		document.write("</OPTION>");
	}
}

function	put_worktimeoption( a ) {
	for ( i = 0; i < 24 ; i++ ) {
		document.write("<OPTION value=",i);
		if ( a == i ) {
			document.write(" selected");
		}
		document.write(" >",i);
		document.write("</OPTION>");
	}
}
