//------------------------------
// 定数定義
//------------------------------
//油脂入力欄の行数(HTMLと合致していること)
OIL_ELEMENT_NUM = 15;

//------------------------------
// データ定義
//
//	設定値は変更可能です。
//	最後の行の行末にカンマを付けない
//	ことに注意してください。
//------------------------------
//油脂リスト
var oilname_list = new Array(
	{ name:"---",						val:0		},	//油脂未選択
	{ name:"(手入力)",					val:-1		},
	{ name:"ココナッツオイル",			val:0.184	},
	{ name:"パーム核油",				val:0.178	},
	{ name:"パームオイル",				val:0.145	},
	{ name:"ココアバター",				val:0.143	},
	{ name:"シアバター",				val:0.133	},
	{ name:"オリーブオイル",			val:0.136	},
	{ name:"つばき油",					val:0.138	},
	{ name:"スイートアーモンドオイル",	val:0.138	},
	{ name:"アプリコット核油",			val:0.138	},
	{ name:"マカデミアナッツオイル",	val:0.139	},
	{ name:"ヘーゼルナッツオイル",		val:0.134	},
	{ name:"アボカドオイル",			val:0.137	},
	{ name:"ひまし油（キャスターオイル）",val:0.13	},
	{ name:"ピーナッツオイル",			val:0.138	},
	{ name:"なたね油",					val:0.124	},
	{ name:"キャノーラ油",				val:0.133	},
	{ name:"サンフワラーオイル",		val:0.135	},
	{ name:"サフラワーオイル",			val:0.135	},
	{ name:"ごま油",					val:0.136	},
	{ name:"米油",						val:0.134	},
	{ name:"小麦胚芽油",				val:0.132	},
	{ name:"綿実油",					val:0.138	},
	{ name:"大豆油",					val:0.137	},
	{ name:"グレープシードオイル",		val:0.134	},
	{ name:"くるみ油（ウォルナッツオイル）",val:0.138	},
	{ name:"ククイナッツオイル",		val:0.135	},
	{ name:"月見草油",					val:0.134	},
	{ name:"ローズヒップオイル",		val:0.135	},
	{ name:"ホホバオイル",				val:0.066	},
	{ name:"みつろう",					val:0.065	},
	{ name:"ラノリン",					val:0.074	},
	{ name:"ミンク油",					val:0.143	},
	{ name:"馬油",						val:0.143	},
	{ name:"牛脂",						val:0.14	},
	{ name:"豚脂（ラード）",			val:0.141	},
	{ name:"乳油（バター）",			val:0.14	}
	);

//鹸化価リスト
var oilrate_list = new Array(
	{ name:"---",		val:0		},	//油脂未選択
	{ name:"0.120",		val:0.120	},
	{ name:"0.121",		val:0.121	},
	{ name:"0.122",		val:0.122	},
	{ name:"0.123",		val:0.123	},
	{ name:"0.124",		val:0.124	},
	{ name:"0.125",		val:0.125	},
	{ name:"0.126",		val:0.126	},
	{ name:"0.127",		val:0.127	},
	{ name:"0.128",		val:0.128	},
	{ name:"0.129",		val:0.129	},
	{ name:"0.130",		val:0.130	},
	{ name:"0.131",		val:0.131	},
	{ name:"0.132",		val:0.132	},
	{ name:"0.133",		val:0.133	},
	{ name:"0.134",		val:0.134	},
	{ name:"0.135",		val:0.135	},
	{ name:"0.136",		val:0.136	},
	{ name:"0.137",		val:0.137	},
	{ name:"0.138",		val:0.138	},
	{ name:"0.139",		val:0.139	},
	{ name:"0.140",		val:0.140	},
	{ name:"0.141",		val:0.141	},
	{ name:"0.142",		val:0.142	},
	{ name:"0.143",		val:0.143	},
	{ name:"0.144",		val:0.144	},
	{ name:"0.145",		val:0.145	},
	{ name:"0.146",		val:0.146	},
	{ name:"0.147",		val:0.147	},
	{ name:"0.148",		val:0.148	},
	{ name:"0.149",		val:0.149	},
	{ name:"0.150",		val:0.150	},
	{ name:"0.151",		val:0.151	},
	{ name:"0.152",		val:0.152	},
	{ name:"0.153",		val:0.153	},
	{ name:"0.154",		val:0.154	},
	{ name:"0.155",		val:0.155	},
	{ name:"0.156",		val:0.156	},
	{ name:"0.157",		val:0.157	},
	{ name:"0.158",		val:0.158	},
	{ name:"0.159",		val:0.159	},
	{ name:"0.160",		val:0.160	},
	{ name:"0.161",		val:0.161	},
	{ name:"0.162",		val:0.162	},
	{ name:"0.163",		val:0.163	},
	{ name:"0.164",		val:0.164	},
	{ name:"0.165",		val:0.165	},
	{ name:"0.166",		val:0.166	},
	{ name:"0.167",		val:0.167	},
	{ name:"0.168",		val:0.168	},
	{ name:"0.169",		val:0.169	},
	{ name:"0.170",		val:0.170	},
	{ name:"0.171",		val:0.171	},
	{ name:"0.172",		val:0.172	},
	{ name:"0.173",		val:0.173	},
	{ name:"0.174",		val:0.174	},
	{ name:"0.175",		val:0.175	},
	{ name:"0.176",		val:0.176	},
	{ name:"0.177",		val:0.177	},
	{ name:"0.178",		val:0.178	},
	{ name:"0.179",		val:0.179	},
	{ name:"0.180",		val:0.180	},
	{ name:"0.181",		val:0.181	},
	{ name:"0.182",		val:0.182	},
	{ name:"0.183",		val:0.183	},
	{ name:"0.184",		val:0.184	},
	{ name:"0.185",		val:0.185	},
	{ name:"0.186",		val:0.186	},
	{ name:"0.187",		val:0.187	},
	{ name:"0.188",		val:0.188	},
	{ name:"0.189",		val:0.189	},
	{ name:"0.190",		val:0.190	}
);

//Discountリスト
var dis_list = new Array(
	{ name:"0",			val:0	},
	{ name:"1",			val:1	},
	{ name:"2",			val:2	},
	{ name:"3",			val:3	},
	{ name:"4",			val:4	},
	{ name:"5",			val:5	},
	{ name:"6",			val:6	},
	{ name:"7",			val:7	},
	{ name:"8",			val:8	},
	{ name:"9",			val:9	},
	{ name:"10",		val:10	},
	{ name:"11",		val:11	},
	{ name:"12",		val:12	},
	{ name:"13",		val:13	},
	{ name:"14",		val:14	},
	{ name:"15",		val:15	}
);

//Waterリスト
var wat_list = new Array(
	{ name:"30",		val:30	},
	{ name:"31",		val:31	},
	{ name:"32",		val:32	},
	{ name:"33",		val:33	},
	{ name:"34",		val:34	},
	{ name:"35",		val:35	},
	{ name:"36",		val:36	},
	{ name:"37",		val:37	},
	{ name:"38",		val:38	},
	{ name:"39",		val:39	},
	{ name:"40",		val:40	}
);

//純度リスト
var pur_list = new Array(
	{ name:"100",		val:100 },
	{ name:"99",		val:99  },
	{ name:"98",		val:98  },
	{ name:"97",		val:97  },
	{ name:"96",		val:96  },
	{ name:"95",		val:95  },
	{ name:"94",		val:94  },
	{ name:"93",		val:93  },
	{ name:"92",		val:92  },
	{ name:"91",		val:91  },
	{ name:"90",		val:90  },
	{ name:"89",		val:89  },
	{ name:"88",		val:88  },
	{ name:"87",		val:87  },
	{ name:"86",		val:86  },
	{ name:"85",		val:85  }
);

//モールド種類（z軸が可変軸であること）単位はmm
// x:底面短辺 y:底面長辺 z:可変軸長最大値
var mold_list = new Array(
	{ name:"アクリルモールド カフェタイプ",	 		x:65, y:250, z:60	},
	{ name:"アクリルモールド カフェタイプ ハーフ",	x:65, y:125, z:60	},
	{ name:"アクリルモールド ミルクタイプ",	 		x:70, y:180, z:80	},
	{ name:"アクリルモールド ミルクタイプ ハーフ",	x:70, y:90, z:80	},
	{ name:"アクリルモールド スクエアタイプ",		x:55, y:55, z:170	}
);

//添加精油割合いリスト
var addoil_list = new Array(
	{ name:"0",		val:0 },
	{ name:"0.5",		val:0.5 },
	{ name:"1.0",		val:1.0 },
	{ name:"1.5",		val:1.5 },
	{ name:"2.0",		val:2.0 }
);

//比重(g/cm3)
var specific_oil		= 0.92;	//油脂の平均比重値
var specific_alkaline	= 2.13;	//苛性ソーダの比重値
var specific_water		= 1.0;	//精製水の比重値

//------------------------------
// イベント
//------------------------------
//初期ロードイベント
Event.observe(window, 'load', function() {init();}, false);

//------------------------------
// 関数
//------------------------------
//画面表示項目準備およびイベント登録
function init() {
	//作成日付にシステム日付を設定
//	var objDate = new Date;
//	$("make_date").value=objDate.toLocaleString();
	//油脂リスト初期設定
	for ( var i = 0; i < OIL_ELEMENT_NUM; i++ ) {
		var selname_id = "oil_selnm_" + (i+1);
		var inpname_id = "oil_nm_" + (i+1);
		var sel_id = "oil_sel_" + (i+1);
		var text_id = "f_txt_" + (i+1);
		//オイル名選択リスト
		this.setSelectList($(selname_id), oilname_list, 0);
		//オイル名入力欄
		this.setSelectList($(sel_id), oilrate_list, 0);
		//イベント登録
		Event.observe($(selname_id), "change", function() {changeStatus();checkInput();});
		Event.observe($(sel_id), "change", function() {checkInput();});
		Event.observe($(inpname_id), "change", function() {checkInput();});
		Event.observe($(text_id), "change", function() {checkInput();});
	}
	//Discountの初期値設定
	setSelectList($("dis_sel"), dis_list, 10);
	//Waterの初期値設定
	setSelectList($("water_sel"), wat_list, 5);
	//純度の初期値設定
	setSelectList($("pur_sel"), pur_list, 0);
	//添加精油割合いの初期値設定
	setSelectList($("addoil_sel"), addoil_list, 0);
	//計算ボタン押下イベント登録
	$("f_calc").observe("click", function() { calc();});
	//クリアボタン押下イベント登録
	$("f_clear").observe("click", function() { fclear();});
	//モールド情報出力
	for ( var i = 0; i < mold_list.length; i++ ) {
		var lab_id1 = "mold_lab_" + (i+1);
		var lab_id2 = "lab_mold_z_" + (i+1);
		$(lab_id1).innerHTML = mold_list[i].name;
		$(lab_id2).innerHTML =0;
	}
	
	init_output();
	changeStatus();
}

//オイル使用量入力変更イベント
function checkInput() {
	var ret = true;
	for ( var i = 0; i < OIL_ELEMENT_NUM; i++ ) {
		var selname_id = "oil_selnm_" + (i+1);
		var inpname_id = "oil_nm_" + (i+1);
		var sel_id = "oil_sel_" + (i+1);
		var text_id = "f_txt_" + (i+1);

		//手入力オイル名、手入力鹸化価チェック
		if ($(selname_id).value == -1) {
			if ($(inpname_id).value == "") {
				ret=false;
				$(inpname_id).className = "warning";
			} else {
				$(inpname_id).className = "normal";
			}
			if ($(sel_id).value == 0) {
				ret=false;
				$(sel_id).className = "warning";
			} else {
				$(sel_id).className = "normal";
			}
		}

		//使用量チェック
		if ($(selname_id).value != 0) {
			if ($(text_id).value.match(/[^0-9]/g)) {
				ret=false;
				$(text_id).className = "warning";
			} else {
				$(text_id).className = "normal";
			}
		}
	}

	return ret;
}

//オイル選択リスト変更イベント
function changeStatus() {
	for ( var i = 0; i < OIL_ELEMENT_NUM; i++ ) {
		var selname_id = "oil_selnm_" + (i+1);
		var inpname_id = "oil_nm_" + (i+1);
		var sel_id = "oil_sel_" + (i+1);
		var text_id = "f_txt_" + (i+1);

		//未選択
		if ($(selname_id).value == 0) {
			$(selname_id).className = "disabled2";
			$(inpname_id).value="";
			$(inpname_id).className = "disabled";
			$(inpname_id).disabled = true;
			$(sel_id).value = 0;
			$(sel_id).className = "disabled";
			$(sel_id).disabled = true;
			$(text_id).value = 0;
			$(text_id).className = "disabled";
			$(text_id).disabled = true;
		//手入力
		} else if ($(selname_id).value == -1) {
			$(selname_id).className = "disabled2";
			$(inpname_id).className = "normal";
			$(inpname_id).disabled = false;
			$(sel_id).className = "normal";
			$(sel_id).disabled = false;
			$(text_id).className = "normal";
			$(text_id).disabled = false;
		} else {
			$(selname_id).className = "normal";
			$(inpname_id).value="";
			$(inpname_id).className = "disabled";
			$(inpname_id).disabled = true;
			$(sel_id).value = 0;
			$(sel_id).className = "disabled";
			$(sel_id).disabled = true;
			$(text_id).className = "normal";
			$(text_id).disabled = false;
		}
	}
}

//SelectオブジェクトにOption要素を追加
function setSelectList(obj, array, selectedindex) {
	for (i=0; i<array.length; i++) {
		obj.options[i] = new Option(array[i].name, array[i].val); 
	}
	obj.selectedIndex=selectedindex;
}

//計算処理
function calc() {
	
	var base_oil = 0;			//油脂質量
	var base_alkaline = 0;		//苛性ソーダ質量
	var base_water = 0;			//精製水質量
	
	var capacity_oil = 0;		//油脂容積
	var capacity_alkaline = 0;	//苛性ソーダ容積
	var capacity_water = 0;		//精製水容積
	var capacity_all = 0;		//全容積

	//石鹸種別取得
	var caustic = Form.serialize($(form)).toQueryParams()['caustic']

	//計算結果初期化
	init_output();

	//入力内容チェック
	if (!checkInput()) {
		alert("入力内容に誤りがあります。");
		retrn;
	}

	//油脂鹸化価と油脂量から苛性ソーダの質量を算出
	for ( var i = 0; i < OIL_ELEMENT_NUM; i++ ) {
		var oilnm_id = "oil_selnm_" + (i+1);
		var sel_id = "oil_sel_" + (i+1);
		var name_id = "oil_nm_" + (i+1);
		var text_id = "f_txt_" + (i+1);
		var oil_name;

		//油脂未選択
		if ($(oilnm_id).value == 0) {
			continue;
		}

		//油脂名取得
		//$("oil_selnm_1").options[$("oil_selnm_1").selectedIndex].text
		if ($(name_id).value != "") {
			oil_name = (i+1) + "行目（" + $(name_id).value + "）";
		} else {
			oil_name = (i+1) + "行目";
		}

		//油脂量取得
		var oil_weight = Number($(text_id).value);

		//油脂量が0の場合は無視
		if (oil_weight == 0) {
			continue;
		}
		
		//苛性カリ鹸化価取得
		var oil_rate   = 0;
		if ($(oilnm_id).value == -1) {	//手入力
			oil_rate   = Number($(sel_id).value);
		} else {
			oil_rate   = $(oilnm_id).options[$(oilnm_id).selectedIndex].value;
		}
		if (caustic == "potash") {
			//苛性カリ鹸化価算出（苛性カリの鹸化価=苛性ソーダの鹸化価ｘ56.1÷40）
			oil_rate = oil_rate * 56.1 / 40;
		}

		base_alkaline += oil_weight * oil_rate;
		base_oil += oil_weight;
	}
	
	//油脂合計使用量が0の場合は処理終了
	if (base_oil == 0) {
		alert("計算に有効な油脂がありません。油脂選択後に使用量を入力してください。")
		return;
	}

	//純度から苛性ソーダの質量を調整
	base_alkaline *= 100 / $("pur_sel").value;

	//Discoutから苛性ソーダの質量を調整
	base_alkaline *= (100 - $("dis_sel").value) / 100;

	//Waterから精製水質量を算出
	base_water += base_oil * $("water_sel").value / 100;

	//比重から体積を算出(cm3)
	capacity_oil = base_oil / specific_oil;
	capacity_alkaline = base_alkaline / specific_alkaline;
	capacity_water = base_water / specific_water;
	capacity_all = capacity_oil + capacity_alkaline + capacity_water;
	
	//体積からz軸の高さを算出
	for ( var i = 0; i < mold_list.length; i++ ) {
		var lab_id  = "lab_mold_z_" + (i+1);
		var lab_err = "lab_mold_err_" + (i+1);
		
		var x = mold_list[i].x;
		var y = mold_list[i].y;
		var z = mold_list[i].z;
		
		//高さ(cm) = 容量(cm3) * 100 / ( 縦(mm) * 横(mm) )
		var tall = capacity_all * 100 / (x * y);
		$(lab_id).innerHTML = round_output(tall,1);
		if (tall*10 > z) {
			$(lab_err).innerHTML = "&nbsp;<font color='red'>（容量オーバーです！）</font>";
		}
	}

	//添加精油の容量を算出
	var addoil = capacity_all * $("addoil_sel").value / 100;

	//計算結果を画面に出力
	$("r_lab_oil").innerHTML = round_output(base_oil,1);
	$("r_lab_alkaline").innerHTML = round_output(base_alkaline,1);
	$("r_lab_water").innerHTML = round_output(base_water,1);
	$("r_lab_all").innerHTML = round_output((base_oil + base_alkaline + base_water),1);
	$("r_lab_cap_all").innerHTML = round_output(capacity_all,1);
	$("r_lab_addoil").innerHTML = round_output(addoil,1);
	$("r_lab_addoil2").innerHTML = Math.floor(addoil/0.05);

//	alert("計算終了！");
}

//計算結果クリア
function init_output() {
	$("r_lab_oil").innerHTML = round_output(0,1);
	$("r_lab_alkaline").innerHTML = round_output(0,1);
	$("r_lab_water").innerHTML = round_output(0,1);
	$("r_lab_all").innerHTML = round_output(0,1);
	$("r_lab_cap_all").innerHTML = round_output(0,1);
	$("r_lab_addoil").innerHTML = round_output(0,1);
	$("r_lab_addoil2").innerHTML = 0;
	for ( var i = 0; i < mold_list.length; i++ ) {
		var lab_id = "lab_mold_z_" + (i+1);
		var lab_err = "lab_mold_err_" + (i+1);
		$(lab_id).innerHTML = round_output(0,1);
		$(lab_err).innerHTML = "";
	}
}

//クリアボタン押下処理
function fclear() {
	$("name").value="";
	$("make_date").value="";
	$("make_temp1").value="";
	$("make_temp2").value="";
	$("make_temp3").value="";
	
	formid.caustic[0].checked=true;
	formid.caustic[1].checked=false;

	for ( var i = 0; i < OIL_ELEMENT_NUM; i++ ) {
		var oilnm_id = "oil_selnm_" + (i+1);
		var sel_id = "oil_sel_" + (i+1);
		var name_id = "oil_nm_" + (i+1);
		var text_id = "f_txt_" + (i+1);
		
		$(oilnm_id).selectedIndex=0;
		$(sel_id).selectedIndex=0;
		$(name_id).value="";
		$(text_id).value="";
	}
	changeStatus();
	
	//Discountの初期値設定
	setSelectList($("dis_sel"), dis_list, 10);
	//Waterの初期値設定
	setSelectList($("water_sel"), wat_list, 5);
	//純度の初期値設定
	setSelectList($("pur_sel"), pur_list, 0);
	//添加精油割合いの初期値設定
	setSelectList($("addoil_sel"), addoil_list, 0);
	$("addoil_name").value="";

	//計算結果クリア
	init_output();
}

//数値の四捨五入
function round_output(val, n)
{
  return val.toFixed(n);
}


//計算エラー発生時処理
function cancel_calc() {
}
