var arr_shoki_class_id=[0,0,0]; // クラスID
var arr_shoki_class_index=[0,0,0]; // 選択クラスのインデックス
var arr_shoki_class_lv=[0,0,0]; // 下限レベル

// データ用変数初期化
var ClassData=[];
//var Class=[];
var Kago=[];
var Item=[];
var Lifestyle=[];
var House=[];

//デフォルト値用配列
var a_def=[];
a_def['s_cls']=[0,0,0]; //初期クラス
a_def['class']=[0,0,0,0,0,0,0,0]; //クラス
//a_def['clslv']=[0,0,0,0,0,0,0,0,0]; //クラスレベル リストがそう変わるとは思えないものはSmartyに任せた方が楽
a_def['item']=[0,0,0,0]; //アイテム
a_def['lifestyle']=0; //ライフスタイル
a_def['house']=[]; //住宅
a_def['house_option']=[]; //住宅オプション

//select Index格納用配列
var a_idx=[];

var doc=document;
var f=document.MAKING;

/*** 以下 関数定義 ***/
function onLoadPcMaking() {
	doc=document;
	f=document.MAKING;  // onLoad時はこれが必要
	getIndexsSelect();
	var game=f.game.value;
	var isr=f.is_readed;
	if(isr==undefined){
	}else if(isr.value==0){
		var o,i,j,l,ix,df;
		//初期クラス
		o=f.elements['shoki_class[]'];
		ix=a_idx['class'];
		df=a_def['s_cls'];
		o[0].selectedIndex=ix[df[0]];
		o[1].selectedIndex=ix[df[1]];
		o[2].selectedIndex=ix[df[2]];
		//クラス
		o=f.elements['SL_class[]'];
		df=a_def['class'];
		l=o.length;
		for(i=0;i<l;i++){
			if(df[i]==undefined)break;
			o[i].selectedIndex=ix[df[i]];
		}
		if(game!='alshardff'){
		//アイテム
			o=f.elements['SL_item[]'];
			df=a_def['item'];
			o[0].selectedIndex=a_idx['item_hand'][df[0]];
			o[1].selectedIndex=a_idx['item_hand'][df[1]];
			o[2].selectedIndex=a_idx['item_bougu'][df[2]];
			o[3].selectedIndex=a_idx['item_acery'][df[3]];
		//ライフスタイル
			df='lifestyle';
			f.elements['SL_lifestyle'].selectedIndex=a_idx[df][a_def[df]];
		//住宅
			o=f.elements['house[]'];
			ix=a_idx['house'];
			df=a_def['house'];
			l=df.length;
			for(i=0;i<l;i++){
				j=ix[df[i]];
				o[j].checked=true;
			}
		//住宅オプション
			o=f.elements['house_option[]'];
			ix=a_idx['house_option'];
			df=a_def['house_option'];
			l=df.length;
			for(i=0;i<l;i++){
				j=ix[df[i]];
				o[j].checked=true;
			}
		}
		isr.value=1;
	}
	chkDispKago();
	chkDispBougyo();
	chkDispTokugi();
	chkDispPersonal();
	if (game!='alshardff'){
		chkDispJoubika();
		isDisableCheck();
	}
	setPcMemoRows();
	cE();
	
}
function getIndexsSelect(){
	//レベルなど値とIndexが一致するものは不要
	var o,l,i,a_ar;
	//クラス
	if(a_idx['class']==undefined){
		var o=f.elements['SL_class[]'][0].options;
		l=o.length;
		a_ar=a_idx['class']=[];
		for(i=0;i<l;i++){
			a_ar[o[i].value]=i;
		}
	}
	if(f.game.value!='alshardff'){
	//アイテム
		if(a_idx['item_hand']==undefined){
			var o=f.elements['SL_item[]'][0].options;
			l=o.length;
			a_ar=a_idx['item_hand']=[];
			for(i=0;i<l;i++){
				a_ar[o[i].value]=i;
			}
		}
		if(a_idx['item_bougu']==undefined){
			var o=f.elements['SL_item[]'][2].options;
			l=o.length;
			a_ar=a_idx['item_bougu']=[];
			for(i=0;i<l;i++){
				a_ar[o[i].value]=i;
			}
		}
		if(a_idx['item_acery']==undefined){
			o=f.elements['SL_item[]'][3].options;
			l=o.length;
			a_ar=a_idx['item_acery']=[];
			for(i=0;i<l;i++){
				a_ar[o[i].value]=i;
			}
		}
	//ライフスタイル
		if(a_idx['lifestyle']==undefined){
			o=f.SL_lifestyle.options;
			l=o.length;
			a_ar=a_idx['lifestyle']=[];
			for(i=0;i<l;i++){
				a_ar[o[i].value]=i;
			}
		}
	//住宅
		if(a_idx['house']==undefined){
			o=f.elements['house[]'];
			l=o.length;
			a_ar=a_idx['house']=[];
			for(i=0;i<l;i++){
				a_ar[o[i].value]=i;
			}
		}
	//住宅オプション
		if(a_idx['house_option']==undefined){
			o=f.elements['house_option[]'];
			l=o.length;
			a_ar=a_idx['house_option']=[];
			for(i=0;i<l;i++){
				a_ar[o[i].value]=i;
			}
		}
	}
//	i=0;
//	o=f.elements['house[]'];
//	var tmp=a_idx['house'];
//	for(k in tmp){
//		idx=tmp[k];
//		alert(k+' : '+idx+' : '+o[idx].value);
//		if(i++>20 || i>=o.length)break;
//	}
}


function changeShokiClass(id) {
	var idx=f.elements['shoki_class[]'][id].value;
	var cd=ClassData[idx]['data'];
//	var cd=Class[idx];
	f.elements['NP1[]'][id].value=cd[0];
	f.elements['NP2[]'][id].value=cd[1];
	f.elements['NP3[]'][id].value=cd[2];
	f.elements['NP4[]'][id].value=cd[3];
	f.elements['NP5[]'][id].value=cd[4];
	f.elements['NP6[]'][id].value=cd[5];

	//初期クラスの配列 値セット
	obj_cls=f.elements['shoki_class[]'];
	obj_itm=f.elements['class_item[]'];
	var v0=obj_cls[0].value;
	var v1=obj_cls[1].value;
	var v2=obj_cls[2].value;
	if(v0==v1&&v0==v2){
		obj_itm[0].value=cd[8];
		obj_itm[1].value=cd[9];
		obj_itm[2].value=cd[10];
		arr_shoki_class_id=[v0,0,0]; // クラスID
		arr_shoki_class_index=[obj_cls[0].selectedIndex,0,0]; // 選択クラスのインデックス
		arr_shoki_class_lv=[3,0,0]; // 下限レベル

	}else if(v0==v1){
		obj_itm[0].value=ClassData[v0]['data'][8];
		obj_itm[1].value=ClassData[v0]['data'][9];
		obj_itm[2].value=ClassData[v2]['data'][8];
//		obj_itm[0].value=Class[v0][8];
//		obj_itm[1].value=Class[v0][9];
//		obj_itm[2].value=Class[v2][8];
		arr_shoki_class_id=[v0,v2,0];
		arr_shoki_class_index=[obj_cls[0].selectedIndex,obj_cls[2].selectedIndex,0]; // 選択クラスのインデックス
		arr_shoki_class_lv=[2,1,0];

	}else if(v0==v2) {
		obj_itm[0].value=ClassData[v0]['data'][8];
		obj_itm[2].value=ClassData[v0]['data'][9];
		obj_itm[1].value=ClassData[v1]['data'][8];
//		obj_itm[0].value=Class[v0][8];
//		obj_itm[2].value=Class[v0][9];
//		obj_itm[1].value=Class[v1][8];
		arr_shoki_class_id=[v0,v1,0];
		arr_shoki_class_index=[obj_cls[0].selectedIndex,obj_cls[1].selectedIndex,0]; // 選択クラスのインデックス
		arr_shoki_class_lv=[2,1,0];

	} else if (v1==v2) {
		obj_itm[1].value=ClassData[v1]['data'][8];
		obj_itm[2].value=ClassData[v1]['data'][9];
		obj_itm[0].value=ClassData[v0]['data'][8];
//		obj_itm[1].value=Class[v1][8];
//		obj_itm[2].value=Class[v1][9];
//		obj_itm[0].value=Class[v0][8];
		arr_shoki_class_id=[v0,v1,0];
		arr_shoki_class_index=[obj_cls[0].selectedIndex,obj_cls[1].selectedIndex,0]; // 選択クラスのインデックス
		arr_shoki_class_lv=[1,2,0];

	} else {
		obj_itm[0].value=ClassData[v0]['data'][8];
		obj_itm[1].value=ClassData[v1]['data'][8];
		obj_itm[2].value=ClassData[v2]['data'][8];
//		obj_itm[0].value=Class[v0][8];
//		obj_itm[1].value=Class[v1][8];
//		obj_itm[2].value=Class[v2][8];
		arr_shoki_class_id=[v0,v1,v2];
		arr_shoki_class_index=[obj_cls[0].selectedIndex,obj_cls[1].selectedIndex,obj_cls[2].selectedIndex]; // 選択クラスのインデックス
		arr_shoki_class_lv=[1,1,1];
	}

	//加護
	var kd=Kago[cd[7]];
	f.elements['shard[]'][id].value=kd[0];
	f.elements['shard[]'][id+3].value=kd[0];
	f.elements['shard_kouka[]'][id].value=kd[1];
	f.elements['kago_taishou[]'][id].value=kd[2];
	f.elements['kago_timing[]'][id].value=kd[3];
	
	//クラス種別
	f.elements['shoki_class_type[]'][id].value=cd[11];
	
	//クラス名
	f.elements['shoki_class_name[]'][id].value=cd[6];

	// ff・ガイア表示欄
	// ff+ガイアのみ処理
	if(f.game.value=='alshardff-gaia'){
		var s=f.elements['shoki_class_system[]'][id];
		if(idx==0){
			s.value='';
		}else if(idx<=4){
			s.value='共';
		}else if(idx<100){
			s.value='ff';
		}else{
			s.value='Gaia';
		}
	}
	
	setBattleChartClass(); //戦闘値表クラス自動選択
	calcNoryokuKihonchi();
	calcQuesterLv();
	calcKeikentenNoryoku();
	calcKeikentenLv();
	setShuzoku();
	cE();
}

function changeBonusAtCreate() {
	calcNoryokuKihonchi();
	calcKeikentenNoryoku();
	cE();
}

function changeNouryokuchiShusei() {
	calcNoryokuKihonchi();
	calcKeikentenNoryoku();
}

function changeBaseMod() {
//	calcNoryokuKihonchi();
	calcBattleChart();
}

function changeClass(id) {
// 上級クラスレベルチェック(11以上は強制的に10にする）
//	if (ClassData[f.elements['SL_class[]'][id].value]['data'][0]==0&&f.elements['SL_class_lv[]'][id].value > 10) {
//		f.elements['SL_class_lv[]'][id].selectedIndex=10;
//	}
	var ob=f.elements['SL_class[]'][id];
	var idx=ob.value;
	var cd=ClassData[idx]['data'];

	if (id < 3) {
		if (arr_shoki_class_lv[id]!=0) {
			ob.selectedIndex=arr_shoki_class_index[id];
		}
	}

	setBattleClassPoint(id);
	calcQuesterLv();
	calcKeikentenLv();
	calcBattleChart();
//	calcSumMisoubi();
	setShuzoku();
	cE();
}
function focusClass(id) {
	if(id<3&&arr_shoki_class_lv[id]>0){
		f.elements['SL_class[]'][id].selectedIndex=arr_shoki_class_index[id];
		f.elements['SL_class_lv[]'][id].focus();
	}
}
function blurClass(id) {
	if (id < 3) {
		if (arr_shoki_class_lv[id]!=0) {
			f.elements['SL_class[]'][id].selectedIndex=arr_shoki_class_index[id];
			setBattleClassPoint(id);
			calcBattleChart();
//			calcSumMisoubi();
			cE();
		}
	}
}

function changeClassLevel(id) {
	if (id < 3) {
		if (f.elements['SL_class_lv[]'][id].value < arr_shoki_class_lv[id]) {
			f.elements['SL_class_lv[]'][id].selectedIndex=arr_shoki_class_lv[id];
		}
	}
//	changeClass(id);
// 上級クラスレベルチェック(11以上は強制的に10にする）
//	if (ClassData[f.elements['SL_class[]'][id].value]['data'][0]==0&&f.elements['SL_class_lv[]'][id].value > 10) {
//		f.elements['SL_class_lv[]'][id].selectedIndex=10;
//	}
	setBattleClassPoint(id);
	calcQuesterLv();
	calcKeikentenLv();
	calcBattleChart();
//	calcSumMisoubi();
	cE();
}

// アイテム変更
function changeItem(id) {
//	alert(id+' : '+f.elements['SL_item[]'][id].value);
	var o_item=f.elements['SL_item[]'];
	var item_id=o_item[id].value;
	var g=f.game.value;
	f.elements['item_name[]'][id].value=Item[item_id][19];
	if (id==0 || id==1) {
	// 武器の場合
		if (Item[item_id][22]=='両手') {
		// 両手の場合は右手にデータを写して、左手はクリア
			o_item[0].value=item_id;
			o_item[1].value=0;
		}
		var Rid=o_item[0].value;
		var Lid=o_item[1].value;

		f.elements['BM1[]'][0].value=Item[Rid][0];
		f.elements['BM2[]'][0].value=Item[Rid][1];
		f.elements['BM3[]'][0].value=Item[Rid][2];
		f.elements['BM4[]'][0].value=Item[Rid][3];
		f.elements['BM5[]'][0].value=Item[Rid][4];
		f.elements['BM6[]'][0].value=Item[Rid][5];
		f.elements['BM7[]'][0].value=Item[Rid][6];
		f.elements['BM8[]'][0].value=Item[Rid][16];
		f.bukiR_zokusei.value=Item[Rid][15];
		f.bukiR_shatei.value=Item[Rid][21];
		f.elements['item_name[]'][0].value=Item[Rid][19];

		f.elements['BM1[]'][1].value=Item[Lid][0];
		f.elements['BM2[]'][1].value=Item[Lid][1];
		f.elements['BM3[]'][1].value=Item[Lid][2];
		f.elements['BM4[]'][1].value=Item[Lid][3];
		f.elements['BM5[]'][1].value=Item[Lid][4];
		f.elements['BM6[]'][1].value=Item[Lid][5];
		f.elements['BM7[]'][1].value=Item[Lid][6];
		f.elements['BM9[]'][1].value=Item[Lid][16];
		f.bukiL_zokusei.value=Item[Lid][15];
		f.bukiL_shatei.value=Item[Lid][21];
		f.elements['item_name[]'][1].value=Item[Lid][19];

		// 防御修正の処理
		f.elements['DF1[]'][0].value=Item[Rid][7];
		f.elements['DF2[]'][0].value=Item[Rid][8];
		f.elements['DF3[]'][0].value=Item[Rid][9];
		f.elements['DF4[]'][0].value=Item[Rid][10];
		f.elements['DF5[]'][0].value=Item[Rid][11];
		f.elements['DF6[]'][0].value=Item[Rid][12];
		f.elements['DF7[]'][0].value=Item[Rid][13];
		f.elements['DF8[]'][0].value=Item[Rid][14];

		f.elements['DF1[]'][1].value=Item[Lid][7];
		f.elements['DF2[]'][1].value=Item[Lid][8];
		f.elements['DF3[]'][1].value=Item[Lid][9];
		f.elements['DF4[]'][1].value=Item[Lid][10];
		f.elements['DF5[]'][1].value=Item[Lid][11];
		f.elements['DF6[]'][1].value=Item[Lid][12];
		f.elements['DF7[]'][1].value=Item[Lid][13];
		f.elements['DF8[]'][1].value=Item[Lid][14];
		
		// 備考の処理
		f.elements['item_memo[]'][0].value=Item[Rid][23];
		f.elements['item_memo[]'][1].value=Item[Lid][23];

		// 常備化ポイント
		if (g!='alshardff') {
			f.elements['item_joubika_point[]'][0].value=Item[Rid][18];
			f.elements['item_joubika_point[]'][1].value=Item[Lid][18];
		}
		// 価格
		if (g!='alshardgaia') {
		}

	} else {
		// 武器以外
		// 戦闘値
		f.elements['BM1[]'][id].value=Item[item_id][0];
		f.elements['BM2[]'][id].value=Item[item_id][1];
		f.elements['BM3[]'][id].value=Item[item_id][2];
		f.elements['BM4[]'][id].value=Item[item_id][3];
		f.elements['BM5[]'][id].value=Item[item_id][4];
		f.elements['BM6[]'][id].value=Item[item_id][5];
		f.elements['BM7[]'][id].value=Item[item_id][6];
		f.elements['BM8[]'][id].value=Item[item_id][16];
		// 防御修正の処理
		f.elements['DF1[]'][id].value=Item[item_id][7];
		f.elements['DF2[]'][id].value=Item[item_id][8];
		f.elements['DF3[]'][id].value=Item[item_id][9];
		f.elements['DF4[]'][id].value=Item[item_id][10];
		f.elements['DF5[]'][id].value=Item[item_id][11];
		f.elements['DF6[]'][id].value=Item[item_id][12];
		f.elements['DF7[]'][id].value=Item[item_id][13];
		f.elements['DF8[]'][id].value=Item[item_id][14];
		// 備考の処理
		f.elements['item_memo[]'][id].value=Item[item_id][23];
		// 常備化ポイント
		if (g!='alshardff') {
			f.elements['item_joubika_point[]'][id].value=Item[item_id][18];
		}
		// 価格
		if (g!='alshardgaia') {
		}
	}

	// 必要体力の処理
	if (id==0 || id==1 || id==2) {
	// 武器か防具の場合
		var Rid=o_item[0].value;
		var Lid=o_item[1].value;
		// パワーアシストアーマーの場合は必要体力-1
		if (o_item[2].value!=1509) {
			f.bukiR_HT.value=Item[Rid][20];
			f.bukiL_HT.value=Item[Lid][20];
		} else {
			if (Rid==0) {
				f.bukiR_HT.value='';
			} else if (Item[Rid][20] > 1){
				f.bukiR_HT.value=Item[Rid][20]-1;
			} else {
				f.bukiR_HT.value=0
			}
			if (Lid==0) {
				f.bukiL_HT.value='';
			} else if (Item[Lid][20] > 1){
				f.bukiL_HT.value=Item[Lid][20]-1;
			} else {
				f.bukiL_HT.value=0
			}
		}
	}

	calcSumGenzaichi();
	calcSumBougyoGenzaichi();
	if (g!='alshardff') calcSumSoubiJoubikaPoint();
	if (g!='alshardgaia') calcSumSoubiKakaku();
	isDisableCheck();
	cE();
}

function chgItemName(){
	var o1=f.elements['item_name1[]'];
	var oi=f.elements['item_name[]'];
	var l=o1.length;
	for (var i=0;i<l;i++){
		o1[i].value=oi[i].value;
	}
}
function chgItemName1(){
	var o1=f.elements['item_name1[]'];
	var oi=f.elements['item_name[]'];
	var l=o1.length;
	for (var i=0;i<l;i++){
		oi[i].value=o1[i].value;
	}
}

// 戦闘値修正欄 変更時
function changeBattleMod(){
	calcSumGenzaichi();
	cE();
}

// 防御修正欄 変更時
function changeDefenseMod(){
	calcSumBougyoGenzaichi();
	cE();
}

// 装備の常備化ﾎﾟｲﾝﾄ変更時
function changeSoubiJoubikaPoint() {
	calcSumSoubiJoubikaPoint();
	cE();
}
// 装備の価格変更時
function changeSoubiKakaku(){
	calcSumSoubiKakaku();
}

/*** 特技 ***/
//入力行の増減
function addLineTokugi(){
	var tbl=doc.getElementById('Table_tokugi');
	insertRowByTemplate(doc.getElementById('Table_tokugi_tpl').rows[0],tbl,tbl.rows.length);
}
function delLineTokugi(){
	var tbl=doc.getElementById('Table_tokugi'),
	af=['tokugi_name[]','tokugi_lv[]','tokugi_type[]','tokugi_timing[]','tokugi_hantei[]',
	'tokugi_nanido[]','tokugi_taisho[]','tokugi_range[]','tokugi_daisho[]','tokugi_memo[]','tokugi_page[]'];
	deleteRowByIndex(tbl,tbl.rows.length-1,af,4);
}
/*** 常備化ポイント ***/
// ライフスタイル 変更時
function changeLifestyle() {
	var l=Lifestyle[f.SL_lifestyle.value-0];
	f.elements['JP[]'][1].value=l[0];
	f.lifestyle_name.value=l[2];
	calcJoubikaPointTable();
	calcZaisanPoint();
	cE();
}
// 臨時収入個数 変更時
function changeRinjishunyuNo() {
	f.elements['JP[]'][2].value=(f.rinjishunyu_no.value-0) * 2;
	calcJoubikaPointTable();
	calcZaisanPoint();
	cE();
}
// 住宅チェックボックス 変更時
function changeHouseChkbox() {
	var sumJP=h=0,names=[],oh=f.elements['house[]'],i,l=oh.length;
	for (i=0; i<l; i++) {
		if (oh[i].checked==true) {
			h=House[oh[i].value-0];
			sumJP += h[0] ;
			names.push((h[1]+'('+h[2]+')'));
		}
	}
	f.elements['JP[]'][3].value=sumJP;
	f.house_names.value=names.join('、');

	calcJoubikaPointTable();
	cE();
}
// 住宅チェックボックス 変更時
function changeHouseOptChkbox() {
	var sumJP=0;
	var names=[];
	for (i=0; i<f.elements['house_option[]'].length; i++) {
		if (f.elements['house_option[]'][i].checked==true) {
			sumJP += House[(f.elements['house_option[]'][i].value-0)][0] ;
			names.push((House[(f.elements['house[]'][i].value-0)][1]+'('+House[(f.elements['house_option[]'][i].value-0)][2]+')'));
		}
	}
	f.elements['JP[]'][4].value=sumJP;
	f.houseopt_names.value=names.join('、');
	calcJoubikaPointTable();
	cE();
}
// 常備化ポイント自由入力欄 変更時
function changeJoubikaPointInput() {
	calcJoubikaPointTable();
	cE();
}


/***** ここより計算系処理 *****/

// クエスターレベル計算
function calcQuesterLv() {
	var sum_lv=0,s=f.elements['SL_class_lv[]'],i,l=s.length;
	for (i=0;i<l;i++) {
		sum_lv+=(s[i].value-0);
	}
	if (sum_lv >= 3) {
		f.quester_lv.value=sum_lv;
	} else {
		f.quester_lv.value='-';
	}
}

// 能力基本値計算
function calcNoryokuKihonchi() {
	var o1=f.elements['NP1[]'];
	var o2=f.elements['NP2[]'];
	var o3=f.elements['NP3[]'];
	var o4=f.elements['NP4[]'];
	var o5=f.elements['NP5[]'];
	var o6=f.elements['NP6[]'];
	var os=f.STK;
	f.NK1.value=f.v_tairyoku.value=f.break_point.value=(o1[0].value-0)+(o1[1].value-0)+(o1[2].value-0)+(f.NS1.value-0)+(f.STK[0].checked?1:0);
	f.NK2.value=(o2[0].value-0)+(o2[1].value-0)+(o2[2].value-0)+(f.NS2.value-0)+(f.STK[1].checked?1:0);
	f.NK3.value=(o3[0].value-0)+(o3[1].value-0)+(o3[2].value-0)+(f.NS3.value-0)+(f.STK[2].checked?1:0);
	f.NK4.value=(o4[0].value-0)+(o4[1].value-0)+(o4[2].value-0)+(f.NS4.value-0)+(f.STK[3].checked?1:0);
	f.NK5.value=(o5[0].value-0)+(o5[1].value-0)+(o5[2].value-0)+(f.NS5.value-0)+(f.STK[4].checked?1:0);
	f.NK6.value=(o6[0].value-0)+(o6[1].value-0)+(o6[2].value-0)+(f.NS6.value-0)+(f.STK[5].checked?1:0);
	
	calcNouryokuBonus();
	calcBattleChart();
}

// 能力ボーナス（能力基本値/3）計算
function calcNouryokuBonus() {
	f.NB1.value=Math.floor((f.NK1.value-0) / 3);
	f.NB2.value=Math.floor((f.NK2.value-0) / 3);
	f.NB3.value=Math.floor((f.NK3.value-0) / 3);
	f.NB4.value=Math.floor((f.NK4.value-0) / 3);
	f.NB5.value=Math.floor((f.NK5.value-0) / 3);
	f.NB6.value=Math.floor((f.NK6.value-0) / 3);
	calcTojoHantei();
}

/*** 経験点計算 ***/
function calcKeikenten() {
	f.keikenten_sum.value=(f.keikenten_noryoku.value-0)+(f.keikenten_level.value-0);
}

function calcKeikentenNoryoku() {
	var arr_exp=[30,50,60,60,60,90,90,90,120,120,120,150];
	var exp_sum=obj=j=0;
	for (var i=1; i<=6; i++) {
		obj=f.elements['NS'+i];
		if ((obj.value-0) > 0) {
			after_np=f.elements[('NK'+i)].value-0;
			before_np=after_np - (obj.value-0);
			for (j=(before_np+1); j <= after_np; j++) {
				if (j < 19) {
					exp_sum += arr_exp[0];
				} else if (j <= 30) {
					exp_sum += arr_exp[(j-19)];
				} else {
					exp_sum += (after_np-30) * arr_exp[11];
					j=after_np;
//					exp_sum += arr_exp[11];
				}
			}
		}
		
	}
	f.keikenten_noryoku.value=exp_sum;
	calcKeikenten();
}
function calcKeikentenLv() {
	if (f.quester_lv.value >= 4) {
		var arr_exp=[0,0,0,0,10,10,20,40,80,160,320,360,400];
		var exp_sum=0;
		for (i=4; i <=(f.quester_lv.value-0); i++) {
			if (i <= 12) {
				exp_sum += arr_exp[i];
			} else {
				exp_sum += ((f.quester_lv.value-0)-12) * arr_exp[12];
				i=(f.quester_lv.value-0);
			}
		}
		f.keikenten_level.value=exp_sum;
	} else {
		f.keikenten_level.value=0;
	}
	calcKeikenten();
}

// 登場判定計算
function calcTojoHantei() {
	f.tojo.value=f.NB6.value;
	f.tojo_cone.value=(f.NB6.value-0)+2;
}

/*** 戦闘値計算 ***/
function calcBattleChart() {
	calcBattleBase();
	calcSumMisoubi();
	calcSumGenzaichi();
}
//ベース
function calcBattleBase() {
	f.BASE1.value=Math.floor(((f.NB2.value-0)+(f.NB3.value-0)) / 2);
	f.BASE2.value=Math.floor(((f.NB2.value-0)+(f.NB6.value-0)) / 2);
	f.BASE3.value=Math.floor(((f.NB3.value-0)+(f.NB4.value-0)) / 2);
	f.BASE4.value=Math.floor(((f.NB4.value-0)+(f.NB6.value-0)) / 2);
	f.BASE5.value=(f.NB2.value-0)+(f.NB4.value-0);
	f.BASE6.value=f.NK1.value;
	f.BASE7.value=f.NK5.value;
}

// クラスの戦闘値を代入
function setBattleClassPoint(id) {
	var idx=f.elements['SL_class[]'][id].value;
	var lv=f.elements['SL_class_lv[]'][id].value;
	var max_lv=ClassData[idx].length-1; //最高レベルを配列要素数から計算
	
	if (idx==0) {
		if (lv) {
			f.elements['SL_class_lv[]'][id].value=0;
			lv=0;
		}
	} else if (lv>max_lv) {
		f.elements['SL_class_lv[]'][id].value=max_lv;
		lv=max_lv;
//	} else {
//		if (lv==0) {
//			f.elements['SL_class_lv[]'][id].value=1;
//			lv=1;
//		}
	}

	var cd=ClassData[idx][lv];
	f.elements['CB1[]'][id].value=cd[0];
	f.elements['CB2[]'][id].value=cd[1];
	f.elements['CB3[]'][id].value=cd[2];
	f.elements['CB4[]'][id].value=cd[3];
	f.elements['CB5[]'][id].value=cd[4];
	f.elements['CB6[]'][id].value=cd[5];
	f.elements['CB7[]'][id].value=cd[6];
	f.elements['CB8[]'][id].value=cd[7];
	
	//非表示フィールドにクラス名などセット
	cd=ClassData[idx]['data'];
	f.elements['class_name[]'][id].value=cd[6];
	f.elements['class_type[]'][id].value=cd[11];
	if(f.game.value=='alshardff-gaia'){
		if(idx==0){
			f.elements['class_system[]'][id].value='';
		}else if(idx<=4||idx==39||(idx>=43&&idx<=46)){
			f.elements['class_system[]'][id].value='共通';
		}else if(idx<100){
			f.elements['class_system[]'][id].value='ff';
		}else{
			f.elements['class_system[]'][id].value='Gaia';
		}
	}
}

// 未装備小計計算
function calcSumMisoubi() {
	var bp=[0,0,0,0,0,0,0,0];
	var l=f.elements['CB1[]'].length,i;
	for (i=0;i<l;i++) {
		bp[0]+=(f.elements['CB1[]'][i].value-0);
		bp[1]+=(f.elements['CB2[]'][i].value-0);
		bp[2]+=(f.elements['CB3[]'][i].value-0);
		bp[3]+=(f.elements['CB4[]'][i].value-0);
		bp[4]+=(f.elements['CB5[]'][i].value-0);
		bp[5]+=(f.elements['CB6[]'][i].value-0);
		bp[6]+=(f.elements['CB7[]'][i].value-0);
		bp[7]+=(f.elements['CB8[]'][i].value-0);
	}
	f.SumMishoubi1.value=(f.BSM1.value-0)+(f.BASE1.value-0)+bp[0];
	f.SumMishoubi2.value=(f.BSM2.value-0)+(f.BASE2.value-0)+bp[1];
	f.SumMishoubi3.value=(f.BSM3.value-0)+(f.BASE3.value-0)+bp[2];
	f.SumMishoubi4.value=(f.BSM4.value-0)+(f.BASE4.value-0)+bp[3];
	f.SumMishoubi5.value=(f.BSM5.value-0)+(f.BASE5.value-0)+bp[4];
	f.SumMishoubi6.value=(f.BSM6.value-0)+(f.BASE6.value-0)+bp[5];
	f.SumMishoubi7.value=(f.BSM7.value-0)+(f.BASE7.value-0)+bp[6];
	f.SumMishoubi8.value=bp[7];
	
}
// 現在値合計 計算
function calcSumGenzaichi() {
	if(f.elements['BM1[]'].length==undefined){
		f.SumBP1.value=(f.SumMishoubi1.value-0)+(f.elements['BM1[]'].value-0);
		f.SumBP2.value=(f.SumMishoubi2.value-0)+(f.elements['BM2[]'].value-0);
		f.SumBP3.value=(f.SumMishoubi3.value-0)+(f.elements['BM3[]'].value-0);
		f.SumBP4.value=(f.SumMishoubi4.value-0)+(f.elements['BM4[]'].value-0);
		f.SumBP5.value=(f.SumMishoubi5.value-0)+(f.elements['BM5[]'].value-0);
		f.SumBP6.value=(f.SumMishoubi6.value-0)+(f.elements['BM6[]'].value-0);
		f.SumBP7.value=(f.SumMishoubi7.value-0)+(f.elements['BM7[]'].value-0);
		f.SumBP8.value=(f.SumMishoubi8.value-0)+(f.elements['BM8[]'].value-0);
		f.SumBP9.value=(f.SumMishoubi8.value-0)+(f.elements['BM9[]'].value-0);
	}else{
		var bp=[0,0,0,0,0,0,0,0,0];
		
		for(i=0;i<f.elements['BM1[]'].length;i++){
			bp[0]+=f.elements['BM1[]'][i].value-0;
			bp[1]+=f.elements['BM2[]'][i].value-0;
			bp[2]+=f.elements['BM3[]'][i].value-0;
			bp[3]+=f.elements['BM4[]'][i].value-0;
			bp[4]+=f.elements['BM5[]'][i].value-0;
			bp[5]+=f.elements['BM6[]'][i].value-0;
			bp[6]+=f.elements['BM7[]'][i].value-0;

			if (i==0) {
				bp[7]+=f.elements['BM8[]'][i].value-0; //右手
			}else if(i==1){
				bp[8]+=f.elements['BM9[]'][i].value-0; //左手
			}else if(i==3&&f.elements['SL_item[]'][3].value=='1715'){
			// 黒帯は素手のみ攻撃力＋２
				if(f.elements['SL_item[]'][0].value=='1001'){
					bp[7]+=f.elements['BM8[]'][i].value-0
				}
				if(f.elements['SL_item[]'][1].value=='1001'){
					bp[8]+=f.elements['BM8[]'][i].value-0
				}
			}else{
				bp[7]+=f.elements['BM8[]'][i].value-0;
				bp[8]+=f.elements['BM8[]'][i].value-0;
			}
		}
		
		f.SumBP1.value=(f.SumMishoubi1.value-0)+bp[0];
		f.SumBP2.value=(f.SumMishoubi2.value-0)+bp[1];
		f.SumBP3.value=(f.SumMishoubi3.value-0)+bp[2];
		f.SumBP4.value=(f.SumMishoubi4.value-0)+bp[3];
		f.SumBP5.value=(f.SumMishoubi5.value-0)+bp[4];
		f.SumBP6.value=(f.SumMishoubi6.value-0)+bp[5];
		f.SumBP7.value=(f.SumMishoubi7.value-0)+bp[6];
		f.SumBP8.value=(f.bukiR_zokusei.value+'+')+((f.SumMishoubi8.value-0)+bp[7]);
		f.SumBP9.value=(f.bukiL_zokusei.value+'+')+((f.SumMishoubi8.value-0)+bp[8]);
	}
	f.HP.value=f.SumBP6.value;
	f.MP.value=f.SumBP7.value;
	f.move_battle.value=(f.SumBP5.value-0)+5;  // 戦闘移動
	f.move_full.value=(f.move_battle.value-0) * 2;  // 全力移動
}
// 防御修正 現在値合計 計算
function calcSumBougyoGenzaichi() {
	var o1=f.elements['DF1[]'];
	var o2=f.elements['DF2[]'];
	var o3=f.elements['DF3[]'];
	var o4=f.elements['DF4[]'];
	var o5=f.elements['DF5[]'];
	var o6=f.elements['DF6[]'];
	var o7=f.elements['DF7[]'];
	var o8=f.elements['DF8[]'];
	if (o1.length==undefined) {
		f.SumDP1.value=(o1.value-0);
		f.SumDP2.value=(o2.value-0);
		f.SumDP3.value=(o3.value-0);
		f.SumDP4.value=(o4.value-0);
		f.SumDP5.value=(o5.value-0);
		f.SumDP6.value=(o6.value-0);
		f.SumDP7.value=(o7.value-0);
		f.SumDP8.value=(o8.value-0);
	} else {
		var dp=[0,0,0,0,0,0,0,0],l=o1.length;
		for(var i=0;i<l;i++) {
			dp[0]+=o1[i].value-0;
			dp[1]+=o2[i].value-0;
			dp[2]+=o3[i].value-0;
			dp[3]+=o4[i].value-0;
			dp[4]+=o5[i].value-0;
			dp[5]+=o6[i].value-0;
			dp[6]+=o7[i].value-0;
			dp[7]+=o8[i].value-0;
		}
		f.SumDP1.value=dp[0];
		f.SumDP2.value=dp[1];
		f.SumDP3.value=dp[2];
		f.SumDP4.value=dp[3];
		f.SumDP5.value=dp[4];
		f.SumDP6.value=dp[5];
		f.SumDP7.value=dp[6];
		f.SumDP8.value=dp[7];
	}
}

/*** 常備化ポイント計算処理 ***/

// 装備（武器など)の常備化ポイント合計計算
function calcSumSoubiJoubikaPoint() {
	var sum=i=v=0,oj=f.elements['item_joubika_point[]'],l=oj.length;
	for (i=0; i<l; i++) {
		v=oj[i].value;
		if (!isNaN(v)) sum += v-0;
	}
	f.SumSoubiJoubikaPoint.value=sum;
	f.elements['JP[]'][0].value=sum;

	calcJoubikaPointTable();
}
// 常備化欄の合計計算
function calcJoubikaPointTable() {
	var sum=i=0,oj=f.elements['JP[]'],l=oj.length;
	for (i=0; i<l; i++) {
		v=oj[i].value;
		if (!isNaN(v)) sum += v-0;
	}
	f.sumJoubikaP.value=sum;
}
// 価格の合計
function calcSumSoubiKakaku(){
	var sum=i=v=0,oj=f.elements['item_kakaku[]'],l=oj.length;
	for (i=0; i<l; i++) {
		v=oj[i].value;
		if (!isNaN(v)) sum += v-0;
	}
	f.SumSoubiKakaku.value=sum;
}

// 財産ポイントの計算
function calcZaisanPoint() {
	f.zaisan_point.value=Lifestyle[f.SL_lifestyle.value-0][1]+(f.rinjishunyu_no.value-0);
}

// 初期クラス→戦闘値表クラスへ代入
function setBattleChartClass() {
//	alert(join(arr_shoki_class_lv, ' : '));
	// クラスが設定していない要素を詰める
	var arr_tmp_cls_id=[0,0,0];
	var arr_tmp_cls_index=[0,0,0];
	var arr_tmp_cls_lv=[0,0,0];
	var j=i=0;
	for (i=0;i<3;i++) {
		if (arr_shoki_class_id[i]!=0) {
			arr_tmp_cls_id[j]=arr_shoki_class_id[i];
			arr_tmp_cls_index[j]=arr_shoki_class_index[i];
			arr_tmp_cls_lv[j]=arr_shoki_class_lv[i];
			j++;
		}
	}
	arr_shoki_class_id=arr_tmp_cls_id;
	arr_shoki_class_index=arr_tmp_cls_index;
	arr_shoki_class_lv=arr_tmp_cls_lv;

	// 戦闘値表のクラス欄にセット
	for (i=0;i<3;i++) {
		if (arr_shoki_class_lv[i]!=0) {
			f.elements['SL_class[]'][i].selectedIndex=arr_shoki_class_index[i];
			f.elements['SL_class_lv[]'][i].selectedIndex=arr_shoki_class_lv[i];
		} else {
//			f.elements['SL_class[]'][i].selectedIndex='0';
//			f.elements['SL_class_lv[]'][i].selectedIndex='0';
		}
	}
	setBattleClassPoint(0);
	setBattleClassPoint(1);
	setBattleClassPoint(2);
	
//	calcSumMisoubi();
}

// 種族
function setShuzoku() {
	var arr_shuzoku=[],cd=[];
	var cls=i=0;
	var ob=f.elements['SL_class[]'],l=ob.length;
	for (i=0; i<l; i++) {
		cd=ClassData[ob[i].value-0]['data'];
		if (cd[11]=='種族') {
			arr_shuzoku.push(cd[6]);
		}
	}
	if (arr_shuzoku.length==0) {
		f.shuzoku.value='人間';
	} else {
		f.shuzoku.value=arr_shuzoku.join('、');
	}
}

// 入力可／不可チェック
function isDisableCheck() {
	// 武器 両手持ちなら左手選択不可
	if (Item[f.elements['SL_item[]'][0].value][22]!='両手') {
		f.elements['SL_item[]'][1].disabled=false;
	} else {
		f.elements['SL_item[]'][1].disabled=true;
	}
	
}

/*** 表示非表示制御 ***/

//加護詳細
function chkDispKago(){
	var flg=f.is_disp_kago.value-0;
	doc.getElementById('kago_disp').style.display=(flg?'block':'none');
	doc.getElementById('kago_nodisp').style.display=(!flg?'block':'none');
}
function chgDispKago(flg){
	f.is_disp_kago.value=(flg==0)?0:1;
	chkDispKago();
}
//防御修正
function chkDispBougyo(){
	var flg=f.is_disp_bougyo.value-0;
	doc.getElementById('bougyoshuusei_disp').style.display=(flg?'block':'none');
	doc.getElementById('bougyoshuusei_nodisp').style.display=(!flg?'block':'none');
}
function chgDispBougyo(flg){
	f.is_disp_bougyo.value=(flg==0)?0:1;
	chkDispBougyo();
}
//特技
function chkDispTokugi(){
	var flg=f.is_disp_tokugi.value-0;
	doc.getElementById('tokugi_disp').style.display=(flg?'block':'none');
	doc.getElementById('tokugi_nodisp').style.display=(flg?'none':'block');
}
function chgDispTokugi(flg){
	f.is_disp_tokugi.value=(flg==0)?0:1;
	chkDispTokugi();
}
//常備化ポイント
function chkDispJoubika(){
	var flg=f.is_disp_joubika.value-0;
	doc.getElementById('joubikapoint_disp').style.display=(flg?'block':'none');
	doc.getElementById('joubikapoint_nodisp').style.display=(!flg?'block':'none');
}
function chgDispJoubika(flg){
	f.is_disp_joubika.value=(flg==0)?0:1;
	chkDispJoubika();
}
//パーソナルデータ
function chkDispPersonal(){
	var flg=f.is_disp_personal.value-0;
	doc.getElementById('personal_disp').style.display=(flg?'block':'none');
	doc.getElementById('personal_nodisp').style.display=(flg?'none':'block');
}
function chgDispPersonal(flg){
	f.is_disp_personal.value=(flg==0)?0:1;
	chkDispPersonal();
}

/*** エラーチェック関連 ***/

// エラーメッセージ関連
// addErrorMessage
function aE(str) {
	var om=f.message;
	if (str=='') { return; }
	if (om.value=='') {
		om.value=str;
	}
	else {
		om.value += '\n'+ str;
	}
}

// エラーチェック
function cE() {
f.message.value='';
var i=j=l=0;

// 初期クラスの設定忘れ
var obj_cls=f.elements['shoki_class[]'];
if (obj_cls[0].value==0 || obj_cls[1].value==0 || obj_cls[2].value==0 ) {
	aE('初期クラスを全て設定していません [設定間違い]');
} else {
	// 作成時ボーナス
	var bp=0,ost=f.STK;
	for (i=0 ;i<=5 ;i++) {
		if (ost[i].checked) {bp=1;break;}
	}
	if (bp==0) aE('作成時ボーナスを割り振っていません [設定間違い]');

	// 初期で種族クラスが複数
	var oty=f.elements['shoki_class_type[]'];
	var type0=oty[0].value,type1=oty[1].value,type2=oty[2].value;
	if (
	((type0=='種族')&&(type1=='種族')&&(obj_cls[0].value!=obj_cls[1].value)) ||
	((type0=='種族')&&(type2=='種族')&&(obj_cls[0].value!=obj_cls[2].value)) ||
	((type1=='種族')&&(type2=='種族')&&(obj_cls[1].value!=obj_cls[2].value))
	) {
		aE('初期クラスに複数の種族クラスが選択されてます [設定間違い]');
	}

	// 同じクラスが複数設定されている
	// レベルが０のクラスがある
	var flg=flg_lv0=0,cl=f.elements['SL_class[]'],clv=f.elements['SL_class_lv[]'];
	l=cl.length;
	for(i=0;i<l;i++){
		if (cl[i].value!=0) {
			if (flg_lv0==0&&clv[i].value==0) {
				aE('戦闘値表でレベルが０に設定されているクラスがあります [設定間違い]');
				flg_lv0=1;
			}
			if(flg==0){
				for (j=i+1;j<l;j++) {
					if (cl[i].value==cl[j].value) {
						aE('戦闘値表で重複して設定されているクラスがあります [設定間違い]');
						flg=1;
						break;
					}
				}
			}
		}
		if (flg&&flg_lv0) break;
//		if (flg) break;
	}

	// 行動力現在値0以下は不可
	if (f.SumBP5.value <= 0) {
		aE('行動値が0以下になるような防具を選択しています [設定間違い]');
	}

	// 基本クラスなし（ただしルール違反ではない）
	var o=f.elements['class_type[]'];
	l=o.length;
	flg=0;
	for(i=0;i<l;i++){
		if(o[i].value=='基本'){
			flg=1;
			break;
		}
	}
//	if (type0!='基本'&&type1!='基本'&&type2!='基本') {
	if (flg==0) {
		aE('基本クラスを一つも選択していません [確認]');
	}

	// 体力が装備武器の必要体力未満
	var oi=f.elements['SL_item[]'],vt=f.v_tairyoku.value-0;
	if (((oi[0].value-0)!=0&&vt < (f.bukiR_HT.value-0)) || 
	 ((oi[1].value-0)!=0&&vt < (f.bukiL_HT.value-0))) {
		aE('装備している武器の必要体力が体力基本値を超えています [設定間違い]');
	}

	// 防具装備不可のアクセサリを付けているのに防具を選択している
	switch (oi[3].value) {
	case '1714':  // マジックバリアリング
	case '1723':  // スクリーンリング
		if (oi[2].value!='0') {
			aE('防具装備不可のアクセサリと防具が同時に選択されています [設定間違い]');
		}
		break;
	default:
	    break;
	}
}
// エラーチェック関数ここまで
}

