//覚えているべき言語
var a_RemLang=[[0,0],[0,0],[0,0],[1,1],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]];

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

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

/*** 以下 関数定義 ***/
function onLoadPcMaking() {
	f=top.document.MAKING;  // onLoad時はこれが必要
	f=doc.MAKING;
	getIndexsSelect();
	var isr=f.is_readed;
	var sz=f.V_shuzoku_id.value-0,asz=Shuzoku[sz],j;
	if(isr==undefined){
	}else if(isr.value==0){
		//初期値・保存値設定
		var o,l,v,ov;
		//種族
		var sz=f.V_shuzoku_id.value-0;
		f.shuzoku_id.selectedIndex=a_idx['shuzoku'][sz];
		//生まれ
		f.elements['SL_umare'+sz].selectedIndex=f.umare_id.value-0;
		//A～F
		f.NC1.selectedIndex=f.V_NC1.value-0;
		f.NC2.selectedIndex=f.V_NC2.value-0;
		f.NC3.selectedIndex=f.V_NC3.value-0;
		f.NC4.selectedIndex=f.V_NC4.value-0;
		f.NC5.selectedIndex=f.V_NC5.value-0;
		f.NC6.selectedIndex=f.V_NC6.value-0;
		//技能
		for(var i=1;i<13;i++){
			f.elements['GLv'+i].selectedIndex=f.elements['V_GLv'+i].value-0;
		}
		//戦闘特技
		o=f.elements['ST_id[]'],l=o.length,ov=f.elements['V_ST_id[]'];
		o[1].selectedIndex=a_idx['sento_tokugi_lv1'][ov[1].value-0]; //index1はSELECTが違うので別処理
		for(var i=2;i<l;i++){
			o[i].selectedIndex=a_idx['sento_tokugi'][ov[i].value-0];
		}
		//武器
		o=f.elements['arms_id[]'],l=o.length,ov=f.elements['V_arms_id[]'];
		for(var i=2;i<l;i++){
			if(f.elements['arms_is_input[]'][i].value==0){
				// 武器id
				o[i].selectedIndex=a_idx['arms_id'][ov[i].value-0];
			}
			// 装備してるか
			f.elements['arms_is_equip_chk[]'][i].checked==(f.elements['arms_is_equip[]'][i].value==1)?true:false;
			// 使用特技
			f.elements['arms_hit_ginou[]'][i].selectedIndex=a_idx['arms_hit_ginou'][f.elements['V_arms_hit_ginou[]'][i].value-0];
		}
		//防具 回避に使う特技
		f.kaihi_ginou.selectedIndex=a_idx['kaihi_ginou'][f.V_kaihi_ginou.value-0];
		//言語 地方/種族
		o=f.elements['lang_type_id[]'],l=o.length,ov=f.elements['V_lang_type_id[]'];
		for(var i=2;i<l;i++){
			o[i].selectedIndex=a_idx['lang_type_id'][ov[i].value-0];
			f.elements['langS[]'][i].checked=(f.elements['V_langS[]'][i].value==1)?true:false;
			f.elements['langR[]'][i].checked=(f.elements['V_langR[]'][i].value==1)?true:false;
		}
		//成長履歴
		o=f.elements['SN_his[]'],l=o.length;
		for(var i=1;i<l;i++){
			o[i].selectedIndex=a_idx['SN_his'][f.elements['V_SN_his[]'][i].value-0];
		}
		//穢れ
		f.kegare.selectedIndex=f.V_kegare.value-0;

		isr.value=1;
	}
	
	for(var i=0;i<6;i++){
		j=i+1;
		doc.getElementById('rangeN'+j).innerHTML=a_rng[asz[i]]; //範囲表示
	}
	dispSelectUmare();
	isDblLanguage();
	isDblMaryokuTable();
	chkDisplay('ginou');
	chkDisplay('sentotokugi');
	chkDspSTGrappler();
	chkDisplay('equip');
	chkDspArmsInputRow();
	chkDisplay('accessory');
	chkDisplay('item');
	chkDisplay('maryoku');
	chkDisplay('language');
	chkDisplay('honor');
	chkDisplay('seicho_his');
	chkDisplay('personal');
	setPcMemoRows();
	cE();
}
function getIndexsSelect(){
	//レベルなど値とIndexが一致/計算できるものは不要
	var o,l,i,m,j,a_ar,sn;
	//下の配列にどんどん足せばいい
	var ao=[f.shuzoku_id, f.elements['SN_his[]'][0], f.elements['lang_type_id[]'][0]
		,f.elements['ST_id[]'][0], f.elements['ST_id[]'][1]
		,f.elements['arms_id[]'][0],f.elements['arms_hit_ginou[]'][0],f.kaihi_ginou];
	var ain=['shuzoku','SN_his','lang_type_id','sento_tokugi','sento_tokugi_lv1','arms_id','arms_hit_ginou','kaihi_ginou'];
	m=ao.length;
	for(j=0;j<m;j++){
		sn=ain[j];
		if(a_idx[sn]==undefined){
			o=ao[j].options;
			l=o.length;
			a_ar=a_idx[sn]=[];
			for(i=0;i<l;i++){
				if(a_ar[o[i].value]==undefined)a_ar[o[i].value]=i;
			}
		}
	}
}

/*** 能力値・種族・生まれ ***/
//種族
function chgShuzoku() {
	var sz=f.V_shuzoku_id.value=f.shuzoku_id.value-0,asz=Shuzoku[sz],j,o,l;
	for(var i=0;i<6;i++){
		j=i+1;
		doc.getElementById('rangeN'+j).innerHTML=a_rng[asz[i]]; //範囲表示
	}
	f.shuzoku_name.value=asz[6];
	f.shuzoku_tokucho.value=asz[7].replace('|','、');
	f.N_waza.value=f.N_karada.value=f.N_kokoro.value=f.umare_id.value=
	f.SL_umare1.value=f.SL_umare2.value=f.SL_umare3.value=f.SL_umare4.value=f.SL_umare5.value=f.SL_umare6.value=0;
	//A～Fクリア
	f.NC1.value=f.NC2.value=f.NC3.value=f.NC4.value=f.NC5.value=f.NC6.value=
	f.V_NC1.value=f.V_NC2.value=f.V_NC3.value=f.V_NC4.value=f.V_NC5.value=f.V_NC6.value=0;
	//技能クリア
	f.GLv1.value=f.GLv2.value=f.GLv3.value=f.GLv4.value=f.GLv5.value=f.GLv6.value=
	f.GLv7.value=f.GLv8.value=f.GLv9.value=f.GLv10.value=f.GLv11.value=f.GLv12.value=
	f.V_GLv1.value=f.V_GLv2.value=f.V_GLv3.value=f.V_GLv4.value=f.V_GLv5.value=f.V_GLv6.value=
	f.V_GLv7.value=f.V_GLv8.value=f.V_GLv9.value=f.V_GLv10.value=f.V_GLv11.value=f.V_GLv12.value=
	f.create_exp.value=f.create_ginou_exp.value=0;
	f.create_ginou_name.value=f.ginou_language.value='';
	//命中・追加ダメージ・回避欄クリア
	f.GLv1_dsp.value=f.G1_hit.value=f.G1_damage.value=f.G1_kaihi.value=
	f.GLv2_dsp.value=f.G2_hit.value=f.G2_damage.value=f.G2_kaihi.value=
	f.GLv3_dsp.value=f.G3_hit.value=f.G3_damage.value=f.G3_kaihi.value=
	f.GLv4_dsp.value=f.G4_hit.value=f.G4_damage.value='';
	//命中、回避に使う技能クリア
	o=f.elements['arms_hit_ginou[]'],l=o.length;
	for(var i=2;i<l;i++){
		o[i].value=f.elements['V_arms_hit_ginou[]'][i].value=0;
	}
	f.kaihi_ginou.value=f.V_kaihi_ginou.value=0;
	f.kaihi_ginou_name.value='';
	calcEquipHitDamage(0); //命中力、追加ダメージ、C値
	calcEquipKaihi(); //回避力計算
	//選択不可技能
	//タビットはプリースト
	//ルーンフォークはフェアリーテイマー、プリースト
	if(sz==4)f.not_sel_ginou.value='プリースト';
	else if(sz==5)f.not_sel_ginou.value='フェアリーテイマー、プリースト';
	else{f.not_sel_ginou.value='';}
	
	// ** 言語 **
	f.create_language.value=asz[8]==0?'':'交易交通語、'+(isNaN(asz[8])?asz[8]:Language[asz[8]][0]);
	f.can_lang_num.value=sz==0?2:(sz==4?3:4);
	//その他の言語 リセット
	f.lang2S.checked=f.lang2R.checked=f.lang6S.checked=f.lang6R.checked=
	f.lang7S.checked=f.lang7R.checked=f.lang9S.checked=f.lang9R.checked=
	f.lang10S.checked=f.lang10R.checked=f.lang12S.checked=f.lang12R.checked=
	f.lang13S.checked=f.lang13R.checked=f.lang14S.checked=f.lang14R.checked=false;
	//共通交易語
	f.lang3S.checked=f.lang3R.checked=true;
	//人間：地方語・任意
	var flg=(sz==1);
	f.elements['lang_type_id[]'][2].value=f.elements['V_lang_type_id[]'][2].value=flg?5:0;
	f.elements['lang_note[]'][2].value=flg?'(任意)':'';
	f.elements['langS[]'][2].checked=f.elements['langR[]'][2].checked=flg?true:false;
	f.elements['V_langS[]'][2].value=f.elements['V_langR[]'][2].value=flg?1:0;
	//エルフ：エルフ語
	f.lang1S.checked=f.lang1R.checked=(sz==2)?true:false;
	//ドワーフ：ドワーフ語
	f.lang8S.checked=f.lang8R.checked=(sz==3)?true:false;
	//タビット：神紀文明語(読文のみ)
	f.lang4S.checked=false;
	f.lang4R.checked=(sz==4)?true:false;
	//ルーンフォーク：魔動機文明語
	f.lang11S.checked=f.lang11R.checked=(sz==5)?true:false;
	//ナイトメア：親の種族の言語 特に処理しない
	
	//穢れ
	//ナイトメアは1、それ以外は0
	f.kegare.value=f.V_kegare.value=(sz==6)?1:0;

	dispSelectUmare();
	calcChgGinouLv();
	calcNouryokuAll();
	calcNowLangNum();
	chkDspSTGrappler();
	isDblMaryokuTable();
	isDblLanguage();
	cE();
}
//生まれ
function chgUmare(o) {
	var sz=f.shuzoku_id.value-0,u=f.umare_id.value=o.value-0,au=Umare[sz][u];
	//心技体
	f.N_waza.value=au[0];
	f.N_karada.value=au[1];
	f.N_kokoro.value=au[2];
	//初期経験点、名前
	f.create_exp.value=au[3];
	f.create_ginou_exp.value=(u==0)?0:3000-au[3];
	f.umare_name.value=au[4];
	//初期技能
	var a_gn=[],cg,l;
	if(!isNaN(au[5])){
//		a_gn.push(au[5]);
		cg=(u>0&&au[5]==0)?'--':Ginou[au[5]][2];
	}else if(au[5].indexOf('|')>=0){
		a_gn=au[5].split('|');
		cg=Ginou[a_gn[0]][2]+'or'+Ginou[a_gn[1]][2];
	}else if(au[5].indexOf('&')>=0){
		a_gn=au[5].split('&');
		cg=Ginou[a_gn[0]][2]+'&'+Ginou[a_gn[1]][2];
	}else{
		cg=au[5];
	}
	//初期取得技能
	f.create_ginou_name.value=cg;
	//その他の言語 リセット
	f.lang2S.checked=f.lang2R.checked=f.lang6S.checked=f.lang6R.checked=
	f.lang7S.checked=f.lang7R.checked=f.lang9S.checked=f.lang9R.checked=
	f.lang10S.checked=f.lang10R.checked=f.lang11S.checked=f.lang11R.checked=
	f.lang12S.checked=f.lang12R.checked=f.lang13S.checked=f.lang13R.checked=
	f.lang14S.checked=f.lang14R.checked=false;
	for(var i=1;i<13;i++){
		//技能Lv
		f.elements['GLv'+i].value=f.elements['V_GLv'+i].value=(('&'+au[5]+'&').indexOf('&'+i+'&')>=0)?1:0;
	}
	calcChgGinouLv();
	setLanguageByGinou();
	calcNouryokuAll();
	chkDspSTGrappler();
	isDblLanguage();
	isDblMaryokuTable();
	cE();
}
//生まれ選択リスト表示制御
function dispSelectUmare(){
	var v=f.V_shuzoku_id.value-0;
	for(var i=0;i<7;i++){
		doc.getElementById('SL_umare'+i).style.display=(v==i?'inline':'none');
	}
}
//技・体・心
function chgWaza(){
	calcNouryoku(1);
	calcNouryoku(2);
	cE();
}
function chgKarada(){
	calcNouryoku(3);
	calcNouryoku(4);
	cE();
}
function chgKokoro(){
	calcNouryoku(5);
	calcNouryoku(6);
	cE();
}
// 能力値A～Fの計算
//ランダム
function calcNouryokuAtoF(){
	var sz=f.shuzoku_id.value-0,asz=Shuzoku[sz],v;
	if(sz==0){
		alert("種族を選択して下さい。");
		f.NC1.value=f.NC2.value=f.NC3.value=f.NC4.value=f.NC5.value=f.NC6.value=
		f.V_NC1.value=f.V_NC2.value=f.V_NC3.value=f.V_NC4.value=f.V_NC5.value=f.V_NC6.value=0;
	}else{
		for(var i=0;i<6;i++){
			// 1:1D、2:2D、3:2D+6
			switch(Shuzoku[sz][i]){
			case 1:
				v=Math.floor(Math.random()*6)+1;
				break;
			case 2:
				v=Math.floor(Math.random()*6)+Math.floor(Math.random()*6)+2;
				break;
			case 3:
				v=Math.floor(Math.random()*6)+Math.floor(Math.random()*6)+8;
				break;
			}
			f.elements['V_NC'+(i+1)].value=f.elements['NC'+(i+1)].selectedIndex=v;
		}
	}
	calcNouryokuAll();
	cE();
}
//平均値
function setAvgNouryokuAtoF(){
	var sz=f.shuzoku_id.value-0,asz=Shuzoku[sz],v;
	if(sz==0){
		alert("種族を選択して下さい。");
		f.NC1.value=f.NC2.value=f.NC3.value=f.NC4.value=f.NC5.value=f.NC6.value=
		f.V_NC1.value=f.V_NC2.value=f.V_NC3.value=f.V_NC4.value=f.V_NC5.value=f.V_NC6.value=0;
	}else{
		for(var i=0;i<6;i++){
			// 1:1D、2:2D、3:2D+6
			switch(Shuzoku[sz][i]){
			case 1:
				v=4;
				break;
			case 2:
				v=7;
				break;
			case 3:
				v=13;
				break;
			}
			f.elements['V_NC'+(i+1)].value=f.elements['NC'+(i+1)].selectedIndex=v;
		}
	}
	calcNouryokuAll();
	cE();
}

function chgNC(id){
	f.elements['V_NC'+id].value=f.elements['NC'+id].value;
	calcNouryoku(id);
	cE();
}
//能力値成長
function chgNS(id){
	calcNouryoku(id);
	f.session_num.value=(f.NS1.value-0)+(f.NS2.value-0)+(f.NS3.value-0)+(f.NS4.value-0)+(f.NS5.value-0)+(f.NS6.value-0);
	cE();
}
//能力値 その他修正
function chgNM(id){
	calcNouryoku(id);
	cE();
}
//生命抵抗力 修正
function chgLifeResistMod(){
	f.life_resist.value=(f.life_resist_base.value-0)+(f.life_resist_mod.value-0);
	cE();
}
//精神抵抗力 修正
function chgMentalResistMod(){
	f.mental_resist.value=(f.mental_resist_base.value-0)+(f.mental_resist_mod.value-0);
	cE();
}
//HP 修正
function chgHPMod(){
	f.HP.value=(f.HP_base.value-0)+(f.HP_mod.value-0);
	cE();
}
//MP 修正
function chgMPMod(){
	f.MP.value=(f.MP_base.value-0)+(f.MP_mod.value-0);
	cE();
}
//魔物知識
function chgMamonoChishikiMod(){
	f.mamono_chishiki.value=(f.mamono_chishiki_base.value-0)+(f.mamono_chishiki_mod.value-0);
	cE();
}
//先制力
function chgSenseiMod(){
	f.sensei.value=(f.sensei_base.value-0)+(f.sensei_mod.value-0);
	cE();
}
//移動
function chgIdoMod(){
	f.zenryoku_ido_base.value=(f.ido.value=(f.ido_base.value-0)+(f.ido_mod.value-0))*3;
	chgZenryokuIdoMod();
//	cE();
}
//全力移動
function chgZenryokuIdoMod(){
	f.zenryoku_ido.value=(f.zenryoku_ido_base.value-0)+(f.zenryoku_ido_mod.value-0);
	cE();
}

//能力値計算
//項目別
function calcNouryoku(id){
	var np,nb;
	var a=['N_waza','N_karada','N_kokoro'];
	f.elements['NB'+id].value=nb=Math.floor(
		(f.elements['NP'+id].value=np=
		(f.elements[a[Math.floor((id-1)/2)]].value-0)+
		(f.elements['NC'+id].value-0)+
		(f.elements['NS'+id].value-0)+
		(f.elements['NM'+id].value-0))/6
	);
	var gl;
	switch(id){
	case 1:
	//器用
		//基本命中力
		f.G1_hit.value=((gl=f.GLv1.value-0)>0)?nb+gl:'';
		f.G2_hit.value=((gl=f.GLv2.value-0)>0)?nb+gl:'';
		f.G3_hit.value=((gl=f.GLv3.value-0)>0)?nb+gl:'';
		f.G4_hit.value=((gl=f.GLv4.value-0)>0)?nb+gl:'';
		//武器の命中力計算
		calcEquipHitDamage('hit');
		break;
	case 2:
	//敏捷
		//移動力・全力移動
		f.zenryoku_ido.value=
			(f.zenryoku_ido_base.value=(f.ido.value=(f.ido_base.value=np)+(f.ido_mod.value-0))*3)
			+(f.zenryoku_ido_mod.value-0);
		//先制力
		f.sensei.value=(f.sensei_base.value=nb+(f.GLv10.value-0))+(f.sensei_mod.value-0);
		//基本回避力
		f.G1_kaihi.value=((gl=f.GLv1.value-0)>0)?nb+gl:'';
		f.G2_kaihi.value=((gl=f.GLv2.value-0)>0)?nb+gl:'';
		f.G3_kaihi.value=((gl=f.GLv3.value-0)>0)?nb+gl:'';
		//回避力計算
		calcEquipKaihi();
		break;
	case 3:
	//筋力
		f.NP3_dsp.value=np;
		//追加ダメージ
		f.G1_damage.value=((gl=f.GLv1.value-0)>0)?nb+gl:'';
		f.G2_damage.value=((gl=f.GLv2.value-0)>0)?nb+gl:'';
		f.G3_damage.value=((gl=f.GLv3.value-0)>0)?nb+gl:'';
		f.G4_damage.value=((gl=f.GLv4.value-0)>0)?nb+gl:'';
		//武器追加ダメージ計算
		calcEquipHitDamage('damage');
		break;
	case 4:
	//生命力
		//生命抵抗力
		f.life_resist.value=(f.life_resist_base.value=nb+(f.lv.value-0))+(f.life_resist_mod.value-0);
		//HP
		f.HP.value=(f.HP_base.value=np+(f.lv.value-0)*3)+(f.HP_mod.value-0);
		break;
	case 5: 
	//知力
		f.NB5_dsp.value=nb;
		//魔物知識
		f.mamono_chishiki.value=(f.mamono_chishiki_base.value=nb+(f.GLv12.value-0))+(f.mamono_chishiki_mod.value-0);
		//魔力
		calcMaryoku();
		break;
	case 6:
	//精神力
		//精神抵抗力
		f.mental_resist.value=(f.mental_resist_base.value=nb+(f.lv.value-0))+(f.mental_resist_mod.value-0);
		//MP
		f.MP.value=(f.MP_base.value=np+(f.magic_lv_sum.value-0)*3)+(f.MP_mod.value-0);
		break;
	}
}
//全項目
function calcNouryokuAll(){
	var anp=[],anb=[];
	f.NB1.value=anb[1]=Math.floor((f.NP1.value=anp[1]=(f.N_waza.value-0)  +(f.NC1.value-0)+(f.NS1.value-0)+(f.NM1.value-0))/6);
	f.NB2.value=anb[2]=Math.floor((f.NP2.value=anp[2]=(f.N_waza.value-0)  +(f.NC2.value-0)+(f.NS2.value-0)+(f.NM2.value-0))/6);
	f.NB3.value=anb[3]=Math.floor((f.NP3.value=anp[3]=(f.N_karada.value-0)+(f.NC3.value-0)+(f.NS3.value-0)+(f.NM3.value-0))/6);
	f.NB4.value=anb[4]=Math.floor((f.NP4.value=anp[4]=(f.N_karada.value-0)+(f.NC4.value-0)+(f.NS4.value-0)+(f.NM4.value-0))/6);
	f.NB5.value=anb[5]=Math.floor((f.NP5.value=anp[5]=(f.N_kokoro.value-0)+(f.NC5.value-0)+(f.NS5.value-0)+(f.NM5.value-0))/6);
	f.NB6.value=anb[6]=Math.floor((f.NP6.value=anp[6]=(f.N_kokoro.value-0)+(f.NC6.value-0)+(f.NS6.value-0)+(f.NM6.value-0))/6);
	f.NP3_dsp.value=anp[3]; //筋力
	//生命抵抗力
	f.life_resist.value=(f.life_resist_base.value=anb[4]+(f.lv.value-0))+(f.life_resist_mod.value-0);
	//HP
	f.HP.value=(f.HP_base.value=anp[4]+(f.lv.value-0)*3)+(f.HP_mod.value-0);
	//精神抵抗力
	f.mental_resist.value=(f.mental_resist_base.value=anb[6]+(f.lv.value-0))+(f.mental_resist_mod.value-0);
	//MP
	f.MP.value=(f.MP_base.value=anp[6]+(f.magic_lv_sum.value-0)*3)+(f.MP_mod.value-0);
	//魔物知識
	f.mamono_chishiki.value=(f.mamono_chishiki_base.value=anb[5]+(f.GLv12.value-0))+(f.mamono_chishiki_mod.value-0);
	//魔力
	f.NB5_dsp.value=anb[5]; //知力ボーナス
	calcMaryoku();
	//先制力
	f.sensei.value=(f.sensei_base.value=anb[2]+(f.GLv10.value-0))+(f.sensei_mod.value-0);
	//移動力・全力移動
	f.zenryoku_ido.value=
		(f.zenryoku_ido_base.value=(f.ido.value=(f.ido_base.value=anp[2])+(f.ido_mod.value-0))*3)
		+(f.zenryoku_ido_mod.value-0);
	//基本命中力、追加ダメージ、基本回避力
	var glv,flg;
	for(var i=1;i<5;i++){
		glv=(f.elements['GLv'+i].value-0);
		flg=(glv==0);
		f.elements['GLv'+i+'_dsp'].value=(flg?'':glv);
		f.elements['G'+i+'_hit'].value=(flg?'':anb[1]+glv);
		f.elements['G'+i+'_damage'].value=(flg?'':anb[3]+glv);
		if(i!=4)f.elements['G'+i+'_kaihi'].value=(flg?'':anb[2]+glv);
	}
	calcEquipHitDamage(0); //装備欄の命中、追加ダメージ、C値計算
	calcEquipKaihi(); //回避計算
}

/*** 技能 ***/
//レベル
function chgGlv(id){
	//冒険者レベル計算、使用経験点計算は関数内で行う
	var lv=f.lv.value-0,mlv=f.magic_lv_sum.value-0;
	var v=f.elements['GLv'+id].value-0,ov=f.elements['V_GLv'+id],vv=ov.value-0;
	calcChgGinouLv();
	if(f.lv.value!=lv){
		lv=f.lv.value-0;
		//生命抵抗力
		f.life_resist.value=(f.life_resist_base.value=(f.NB4.value-0)+lv)+(f.life_resist_mod.value-0);
		//HP
		f.HP.value=(f.HP_base.value=(f.NP4.value-0)+lv*3)+(f.HP_mod.value-0);
		//精神抵抗力
		f.mental_resist.value=(f.mental_resist_base.value=(f.NB6.value-0)+lv)+(f.mental_resist_mod.value-0);
	}
	//魔法使い系技能Lv
	if(f.magic_lv_sum.value!=mlv){
		mlv=f.magic_lv_sum.value-0;
		//MP
		f.MP.value=(f.MP_base.value=(f.NP6.value-0)+mlv*3)+(f.MP_mod.value-0);
	}
	switch(id){
	case 2: //グラップラー
		//戦闘技能 自動習得欄
		if(v>0&&vv==0){
			//新規習得
			chkDspSTGrappler();
		}else if(v==0&&vv>0){
			//0に変更
			chkDspSTGrappler();
		}
//		break; 戦闘基本値計算のため引き続き計算
	case 1: //ファイター
	case 3: //フェンサー
	case 4: //シューター
//		calcBatlleBaseByGinou(id);
		var fgl='GLv'+id+'_dsp',fgh='G'+id+'_hit',fgd='G'+id+'_damage',fgk='G'+id+'_kaihi';
		if(v==0){
			f.elements[fgl].value=
			f.elements[fgh].value=
			f.elements[fgd].value='';
			if(id!=4)f.elements[fgk].value='';
		}else{
			f.elements[fgl].value=v;
			f.elements[fgh].value=v+(f.NB1.value-0); //基本命中力 +器用
			f.elements[fgd].value=v+(f.NB3.value-0); //追加ダメージ +筋力
			if(id!=4)f.elements[fgk].value=v+(f.NB2.value-0); //基本回避力 +敏捷
		}
		//回避に使用する技能
		f.kaihi_ginou_name.value=Ginou[(f.kaihi_ginou.value=f.V_kaihi_ginou.value=getKaihiGinou())][2]
		calcEquipHitDamage(0); //装備欄の命中、追加ダメージ、C値計算
		calcEquipKaihi(); //回避計算
		break;
	case 5: //ソーサラー
	case 6: //コンジャラー
	case 7: //プリースト
	case 8: //フェアリーテイマー
	case 9: //マギテック
		//魔力
		isDblMaryokuTable();
		var mrk=f.arms_maryoku_sum.value-0;
		f.elements['MM'+id].value=(v==0||mrk==0?'':mrk);
		calcMaryoku(id);
//		f.elements['maryoku'+id].value=(v>0?(f.NB5.value-0)+v:'');
		break;
	case 10: //スカウト
		//先制力
		f.sensei.value=(f.sensei_base.value=(f.NB2.value-0)+v)+(f.sensei_mod.value-0);
		break;
	case 12: //セージ
		//魔物知識
		f.mamono_chishiki.value=(f.mamono_chishiki_base.value=(f.NB5.value-0)+v)+(f.mamono_chishiki_mod.value-0);
		break;
	}
	ov.value=v;
	setLanguageByGinou(id);
	isDblLanguage();
	cE();
}
//技能レベル変更に伴う計算処理
// 冒険者レベル、魔法使い系技能Lv計、使用経験点の計算
function calcChgGinouLv(){
	var lv=0,mlv=0,v,exp=0,sz=f.shuzoku_id.value-0;
	var gl,alg,flg,al,sl;
	for(var i=1;i<13;i++){
		v=(f.elements['GLv'+i].value-0);
		if(v==0)continue;
		//冒険者レベル
		if(lv<v)lv=v;
		//魔法使い系技能Lv計
		if(i>4&&i<10)mlv+=v;
		//経験点
		for(var j=0;j<v;j++){
			exp+=ExpTable[Ginou[i][0]][j];
		}
	}
	f.lv.value=lv;
	//冒険者Lvに応じて戦闘特技欄を増やす
	var m;
	var o=f.elements['ST_lv[]'],l;
	if((m=Math.ceil(lv/2)-(f.elements['ST_id[]'].length-1))>0){
		for(var i=0;i<m;i++){
			o=f.elements['ST_lv[]'],l=o.length;
			addLineSentoTokugi();
			o[l].value=(l*2)-1;
		}
	}
	f.magic_lv_sum.value=mlv;
	f.used_exp.value=exp;
	calcNowExp();
}

/*** 経験点 ***/
//冒険による獲得経験点
function chgSessionExp(){
	calcNowExp();
	cE();
}
//使用獲得経験点
function chgUsedExp(){
	calcNowExp();
	cE();
}
//現在の経験点計算
function calcNowExp(){
	f.now_exp.value=(f.create_exp.value-0)+(f.create_ginou_exp.value-0)+(f.session_exp.value-0)-(f.used_exp.value-0);
}

/*** 戦闘特技 ***/
function chgSentoTokugi(){
	var o=f.elements['ST_id[]'],l=o.length,ov=f.elements['V_ST_id[]'],v,a;
	var m_kaihi=0,m_HP=0;
	for(var i=1;i<l;i++){
		if((v=o[i].value-0)!=ov[i].value){
			ov[i].value=v;
			a=SentoTokugi[v];
			f.elements['ST_name[]'][i].value=a[0];
			f.elements['ST_kouka[]'][i].value=a[1];
			f.elements['ST_zentei[]'][i].value=a[2];
			f.elements['ST_page[]'][i].value=a[3];
		}
		switch(v){
		case 1: //回避行動
			m_kaihi+=1;
			break;
		case 2: //頑強
			m_HP+=15;
			break;
		}
	}
	//HP
	f.HP_mod.value=(m_HP>0)?m_HP:'';
	f.HP.value=m_HP+(f.HP_base.value-0);
	//回避力
	f.bougu_kaihi_mod.value=(m_kaihi>0)?m_kaihi:'';
	calcEquipKaihi();
	cE();
}
//入力行増減
function addLineSentoTokugi(){
	var tbl=doc.getElementById('Table_sentotokugi');
	insertRowByTemplate(doc.getElementById('Table_sentotokugi_tpl').rows[0],tbl,tbl.rows.length);
}
function delLineSentoTokugi(){
	var tbl=doc.getElementById('Table_sentotokugi'),
	af=['ST_name[]','ST_kouka[]','ST_zentei[]','ST_page[]'];
	var min;
	if((min=Math.ceil(f.lv.value/2))<1)min=1;
	deleteRowByIndex(tbl,tbl.rows.length-1,af,min);
	cE();
}

/*** 武器・防具 ***/
//基本命中、追加ダメージ、基本回避
function calcBatlleBaseByGinou(id){
	var v=f.elements['GLv'+id].value-0,flg=(v==0);
	f.elements['GLv'+id+'_dsp'].value=flg?'':v;
	f.elements['G'+id+'_hit'].value=flg?'':v+(f.NB1.value-0); //基本命中力 +器用
	f.elements['G'+id+'_damage'].value=flg?'':v+(f.NB3.value-0); //追加ダメージ +筋力
	if(id!=4)f.elements['G'+id+'_kaihi'].value=flg?'':v+(f.NB2.value-0); //基本回避力 +敏捷
	calcEquipHitDamage(0); //装備欄の命中、追加ダメージ、C値計算
	calcEquipKaihi(); //回避計算
}
//武器 装備しているか
function chgArmsIsEquip(){
	var o=f.elements['arms_is_equip[]'],l=o.length,m,mrk=0
	,oc=f.elements['arms_is_equip_chk[]'];
	for(var i=2;i<l;i++){
		if(oc[i].checked){
			o[i].value=1;
			if((m=ArmsMaryokuMod[f.elements['arms_id[]'][i].value-0])!=undefined)mrk+=m;
		}else{
			o[i].value=0;
		}
	}
	//武器の魔力合計
	setArmsMaryokuSum(mrk);
	cE();
}
//武器
function chgArms(){
	var o=f.elements['arms_id[]'],l=o.length,v,aa,yhb_flg,psum=0,flg,val,mrk=0,gid,a_hd,is_input;
	for(var i=2;i<l;i++){
		aa=Arms[(v=o[i].value)];
		psum+=aa[7]-0; //価格
		//魔力 装備時のみ加算
		if(f.elements['arms_is_equip_chk[]'][i].checked&&ArmsMaryokuMod[v]!=undefined){
			mrk+=ArmsMaryokuMod[v];
		}
		if((is_input=f.elements['arms_is_input[]'][i].value-0)==1
			||f.elements['V_arms_id[]'][i].value==v)continue;
		f.elements['V_arms_id[]'][i].value=v;
		f.elements['arms_name[]'][i].value=aa[9];
		f.elements['arms_price[]'][i].value=aa[7];
		yhb_flg=('振突'.indexOf(aa[11],0)>=0);
		f.elements['arms_yoho[]'][i].value=aa[2]>0?(
			(yhb_flg?aa[11]:'')
			+aa[2]+'H'
			+(yhb_flg?'':aa[11])
			):'';
		flg=(v>0);
		f.elements['arms_hitsukin[]'][i].value=aa[3]; //必要筋力
		f.elements['arms_hit_mod[]'][i].value=aa[4]==0?'':aa[4]; //命中力修正
		//命中で使用する技能
		f.elements['arms_hit_ginou[]'][i].value=
		f.elements['V_arms_hit_ginou[]'][i].value=gid=getGinouByArms(v); 
		//命中力
		//追加ダメージ
		a_hd=getArmsHit_Damage(v,gid,is_input,aa[4],f.elements['arms_damage_mod[]'][i].value-0);
		f.elements['arms_hit[]'][i].value=a_hd[0];
		f.elements['arms_damage[]'][i].value=a_hd[1];
		
		f.elements['arms_iryoku[]'][i].value=flg?aa[5]:''; //威力
		f.elements['arms_critical[]'][i].value=aa[6]-(gid==3?1:0); //クリティカル値
		f.elements['arms_page[]'][i].value=aa[8]; //参照
		f.elements['arms_memo[]'][i].value=aa[10]; //備考
		f.elements['arms_cate[]'][i].value=EqCategory[aa[0]][0]; //カテゴリ
		f.elements['arms_rank[]'][i].value=aa[1]; //ランク
	}
	//武器価格合計
	f.arms_price_sum.value=psum;
	//価格総計計算
	calcEquipPriceSum();
	//武器の魔力合計
	setArmsMaryokuSum(mrk);
	cE();
}
//命中修正
function chgArmsHitMod(){
	calcEquipHitDamage('hit');
	cE();
}
//武器の命中に使用する技能
function chgArmsHitGinou(){
	var o=f.elements['arms_hit_ginou[]'],l=o.length,aa=[],gid,aid,is_input,a_hd=[];
	var ov=f.elements['V_arms_hit_ginou[]'],ovv;
	var a_ghit=[0,f.G1_hit.value-0,f.G2_hit.value-0,f.G3_hit.value-0,f.G4_hit.value-0];
	for(var i=2;i<l;i++){
		ovv=ov[i].value-0;
		if((gid=o[i].value-0)==ovv)continue;
		aa=Arms[(aid=f.elements['arms_id[]'][i].value-0)];
		is_input=f.elements['arms_is_input[]'][i].value-0;
		if(gid>0){
			//自由入力行は技能の有無のみチェック
			if(is_input!=0){
				if(a_ghit[gid]>0){
					ov[i].value=gid;
				}else if(a_ghit[ovv]>0){
					o[i].value=gid=ovv;
				}else{
					o[i].value=ov[i].value=gid=0;
				}
			//飛び道具はシューターのみ
			}else if(EqCategory[aa[0]][1]==2){
				o[i].value=ov[i].value=gid=(a_ghit[4]>0)?4:0;
			//シューターは飛び道具のみ
			//グラップラーは格闘武器のみ
			}else if(gid==4 || (gid==2&&aa[0]!=8)){
				if(a_ghit[ovv]>0){
					o[i].value=gid=ovv;
				}else{
					o[i].value=ov[i].value=gid=getGinouByArms(aid);
				}
			}else{
				if(a_ghit[gid]>0){
					ov[i].value=gid;
				}else if(a_ghit[ovv]>0){
					o[i].value=gid=ovv;
				}else{
					o[i].value=ov[i].value=gid=0;
				}
			}
		}else{
			ov[i].value=gid;
		}
		//命中力
		//追加ダメージ
		a_hd=getArmsHit_Damage(aid,gid,is_input,f.elements['arms_hit_mod[]'][i].value-0,f.elements['arms_damage_mod[]'][i].value-0);
		f.elements['arms_hit[]'][i].value=a_hd[0];
		f.elements['arms_damage[]'][i].value=a_hd[1];
		//C値 フェンサーは-1
		if(is_input==0){
			f.elements['arms_critical[]'][i].value=aa[6]-(gid==3?1:0);
		}
	}
	cE();
}
//追加ダメージ
function chgArmsDamageMod(){
	calcEquipHitDamage('damage');
	cE();
}
//命中力、追加ダメージ
function calcEquipHitDamage(k){
	var o=f.elements['arms_hit_ginou[]'],l=o.length,gid,aid,a_hd,is_input;
//	var a_ghit=[0,f.G1_hit.value-0,f.G2_hit.value-0,f.G3_hit.value-0,f.G4_hit.value-0];
	for(var i=2;i<l;i++){
		gid=o[i].value-0;
		aid=f.elements['arms_id[]'][i].value-0;
		a_hd=getArmsHit_Damage(aid,gid,(is_input=f.elements['arms_is_input[]'][i].value-0)
			,f.elements['arms_hit_mod[]'][i].value-0,f.elements['arms_damage_mod[]'][i].value-0);
		if(k!='damage')f.elements['arms_hit[]'][i].value=a_hd[0];
		if(k!='hit')f.elements['arms_damage[]'][i].value=a_hd[1];
		if(k!='damage'&&k!='hit'&&is_input==0){
			f.elements['arms_critical[]'][i].value=Arms[aid][6]-(gid==3?1:0);
		}
	}
}
//命中力、追加ダメージ
//引数 武器id、技能id、入力行か
function getArmsHit_Damage(aid,gid,is_input,hit_mod,dam_mod){
//	var a_ghit=[0,f.G1_hit.value-0,f.G2_hit.value-0,f.G3_hit.value-0,f.G4_hit.value-0];
	//選択行で武器が0のときのみ''とする
	//入力行は無条件に計算する
	var ret=[0,0]
	if(aid==0&&is_input==0){
		ret[0]=ret[1]=ret[2]='';
	}else{
		//命中力
		ret[0]=(gid>0?f.elements['G'+gid+'_hit'].value-0:0)+hit_mod;
		//追加ダメージ
		if(ArmsDamage[aid]==undefined){
			ret[1]=(gid>0?f.elements['G'+gid+'_damage'].value-0:0)+dam_mod;
		}else{
		//クロスボウは武器の値
			ret[1]=ArmsDamage[aid]+dam_mod;
		}
	}
	return ret;
}

//武器idから装備できる技能idを取得
//複数ある場合は一番Lvの高い技能
function getGinouByArms(id){
	var aa=Arms[id];
	if(id==0)return 0;
	if(EqCategory[aa[0]][1]!=2){
		var lv=0,v,gid=0;
		if((lv=f.GLv1.value-0)>0)gid=1;
		if(aa[0]==8&&(v=f.GLv2.value-0)>lv){
			lv=v;
			gid=2;
		}
		if((v=f.GLv3.value-0)>lv)gid=3;
		return gid;
	}else{
		//飛び道具はシューターのみ
		if(f.GLv4.value>0)return 4;
	}
	return 0;
}
//武器価格
function chgArmsPrice(){
	calcArmsPrice();
	cE();
}
function calcArmsPrice(){
	o=f.elements['arms_price[]'],l=o.length,sum=0;
	for(var i=2;i<l;i++){
		sum+=o[i].value-0;
	}
	f.arms_price_sum.value=sum;
	//価格総計計算
	calcEquipPriceSum();
}
//武器の魔力合計
function setArmsMaryokuSum(mrk){
	f.arms_maryoku_sum.value=mrk;
	mrk=(mrk>0?mrk:'');
	f.MM5.value=(f.GLv5.value>0)?mrk:'';
	f.MM6.value=(f.GLv6.value>0)?mrk:'';
	f.MM7.value=(f.GLv7.value>0)?mrk:'';
	f.MM8.value=(f.GLv8.value>0)?mrk:'';
	calcMaryoku(0);
}
//自由入力行 非表示・削除
function delArmsInputRow(){
	if(!confirm('武器の自由入力行の値は全て削除されます。よろしいですか？'))return;
	var o=f.elements['arms_is_input[]'],l=o.length,sel_num=0;
	for(var i=2;i<l;i++){
		if(o[i].value==0)sel_num++;
	}
	var tbl=doc.getElementById('Table_arms'),idx=tbl.rows.length-2,m=l-sel_num-2;
	for(var i=0;i<m;i++){
		tbl.deleteRow(idx-i);
	}
	var ins_idx=tbl.rows.length-1;
	insertRowByTemplate(doc.getElementById('Table_arms_tpl').rows[1],tbl,ins_idx);
	tbl.rows[ins_idx].id='arms_input_disp2';
	chgDspArmsInputRow(0);
	calcArmsPrice();
	cE();
}
//武器 選択行追加
function addLineArmsSelect(){
	var tbl=doc.getElementById('Table_arms'),o=f.elements['arms_is_input[]'],l=o.length,idx=2;
	for(var i=2;i<l;i++){
		if(o[i].value==0)idx++;
	}
	insertRowByTemplate(doc.getElementById('Table_arms_tpl').rows[0],tbl,idx);
}
//武器 選択行削除
function delLineArmsSelect(){
	var tbl=doc.getElementById('Table_arms')
	,af=['arms_id[]','arms_price[]','arms_yoho[]','arms_hitsukin[]','arms_hit_mod[]'
		,'arms_hit_ginou[]','arms_hit[]','arms_iryoku[]','arms_critical[]','arms_damage[]'
		,'arms_memo[]','arms_page[]','arms_cate[]','arms_rank[]']
	,o=f.elements['arms_is_input[]'],l=o.length,sel_idx,min=0,sel_num=0,s='',mrk=0,m;
	for(var i=2;i<l;i++){
		if(o[i].value==0){
			sel_idx=i; //選択行の最後のindex
			sel_num++; //選択行の数
			//魔力 装備時のみ加算
			if(f.elements['arms_is_equip_chk[]'][i].checked
				&&(m=ArmsMaryokuMod[f.elements['arms_id[]'][i].value-0])!=undefined){
				mrk+=m;
			}
		}
	}
	if(sel_num<3){ //2個以下なら削除不可
		alert(msgWarnCantDelLine);
		return;
	}else{
		for(var i=0;i<l;i++){s+=f.elements[af[i]][sel_idx].value;}
		if(s!=''&&s!=0)if(!confirm(msgCfrmDelLastLine))return;
	}
	tbl.deleteRow(sel_num+1);
	calcArmsPrice();
	setArmsMaryokuSum(mrk);
	cE();
}
//武器 自由入力行追加
function addLineArmsInput(){
	var tbl=doc.getElementById('Table_arms');
	insertRowByTemplate(doc.getElementById('Table_arms_tpl').rows[1],tbl,tbl.rows.length-1);
}
//武器 自由入力行削除
function delLineArmsInput(){
	var tbl=doc.getElementById('Table_arms')
	,af=['arms_name[]','arms_price[]','arms_yoho[]','arms_hitsukin[]','arms_hit_mod[]'
		,'arms_hit_ginou[]','arms_hit[]','arms_iryoku[]','arms_critical[]','arms_damage[]'
		,'arms_memo[]','arms_page[]','arms_cate[]','arms_rank[]']
	,o=f.elements['arms_is_input[]'],l=o.length,num=0,idx;
	for(var i=2;i<l;i++){
		if(o[i].value==0){
			num++;
		}else{
			idx=i; //入力行最後のindex
		}
	}
	if(num+4>l){ //選択行+自由入力行1行残す
		alert(msgWarnCantDelLine);
		return;
	}else{
		var s='';
		for(var i=0;i<l;i++){s+=f.elements[af[i]][idx].value;}
		if(s!=''&&s!=0)if(!confirm(msgCfrmDelLastLine))return;
	}
	tbl.deleteRow(tbl.rows.length-2);
	calcArmsPrice();
	cE();
}
//防具 回避に使う技能
function chgKaihiGinou(){
	var g=f.V_kaihi_ginou.value=f.kaihi_ginou.value-0;
	f.kaihi_ginou_name.value=Ginou[g][2];
	calcEquipKaihi()
	cE();
}
//回避に使う技能idを取得
function getKaihiGinou(){
	var gid=0;
	for(var i=1;i<4;i++){
		if(f.elements['GLv'+i].value-0>gid)gid=i;
	}
	return gid;
}
//防具 回避力
function chgBouguKaihi(){
	calcEquipKaihi()
	cE();
}
//回避力計算
function calcEquipKaihi(){
	var gid=f.kaihi_ginou.value;
	f.kaihi.value=(f.armor_kaihi.value-0)+(f.shield_kaihi.value-0)+(f.bougu_kaihi_mod.value-0)
		+(gid>0?(f.elements['G'+gid+'_kaihi'].value-0):0);
}
//防具 防護点
function chgBouguBougo(){
	f.bougo.value=(f.armor_bougo.value-0)+(f.shield_bougo.value-0)+(f.bougu_bougo_mod.value-0);
	cE();
}
//防具 価格
function chgBouguPrice(){
	var bp=f.bougu_price_sum.value=(f.armor_price.value-0)+(f.shield_price.value-0);
	//価格総計計算
	calcEquipPriceSum();
	cE();
}

/*** 装飾品 ***/
function chgAccessoryPrice(){
	var ap=f.acce_price_sum.value=(f.acce1_price.value-0)
		+(f.acce2_price.value-0)
		+(f.acce3_price.value-0)
		+(f.acce4_price.value-0)
		+(f.acce5_price.value-0)
		+(f.acce6_price.value-0)
		+(f.acce7_price.value-0)
		+(f.acce8_price.value-0)
		+(f.acce9_price.value-0)
		+(f.acce10_price.value-0);
	//価格総計計算
	calcEquipPriceSum();
	cE();
}

/*** 所持品・所持金 ***/
//単価・個数
function chgItemTankaKosu(){
	var op=f.elements['item_price[]'],l=op.length,p=0;
	for(var i=1;i<l;i++){
		p+=(op[i].value=(f.elements['item_tanka[]'][i].value-0)*(f.elements['item_num[]'][i].value-0));
	}
	f.price_all_sum.value=(f.price_item_sum.value=p)+(f.price_equip_sum.value-0);
	cE();
}
//価格
function chgItemPrice(){
	var op=f.elements['item_price[]'],l=op.length,p=0;
	for(var i=0;i<l;i++){
		p+=(op[i].value-0);
	}
	f.price_all_sum.value=(f.price_item_sum.value=p)+(f.price_equip_sum.value-0);
	cE();
}
//武器、防具、装飾品の価格合計
function calcEquipPriceSum(){
	f.price_all_sum.value=(f.price_item_sum.value-0)
		+(f.price_equip_sum.value=(f.arms_price_sum.value-0)+(f.bougu_price_sum.value-0)+(f.acce_price_sum.value-0));
}
//入力行増減
function addLineItem(){
	var tbl=doc.getElementById('Table_item');
	insertRowByTemplate(doc.getElementById('Table_item_tpl').rows[0],tbl,tbl.rows.length-3);
}
function delLineItem(){
	var tbl=doc.getElementById('Table_item'),
	af=['item_name[]','item_tanka[]','item_num[]','item_price[]','item_memo[]'];
	deleteRowByIndex(tbl,tbl.rows.length-4,af,3);
	cE();
}

/*** 魔力 ***/
//魔力修正
function chgMaryokuMod(id){
	calcMaryoku(id);
}
//魔力計算
function calcMaryoku(id){
	var v,mlv,mrk;
	if(id==undefined||id==0){
		//引数0なら全魔法計算
		var nb5=f.NB5.value-0;
		for(var i=5;i<10;i++){
			v=f.elements['GLv'+i].value-0;
			if(v==0){
				mlv=mrk='';
			}else{
				mlv=v;
				mrk=nb5+v+(f.elements['MM'+i].value-0);
			}
			f.elements['MLv'+i].value=mlv;
			f.elements['maryoku'+i].value=mrk;
		}
	}else{
		v=f.elements['GLv'+id].value-0;
		if(v==0){
			mlv=mrk='';
		}else{
			mlv=v;
			mrk=(f.NB5.value-0)+v+(f.elements['MM'+id].value-0);
		}
		f.elements['MLv'+id].value=mlv;
		f.elements['maryoku'+id].value=mrk;
	}
}

/*** 言語 ***/
function chgLang(o,id,rs){
	calcNowLangNum();
	calcCanLangNum_Name();
	cE();
}
//地方語、各種族語の変更
function chgLangType(){
	var o=f.elements['lang_type_id[]'],l=o.length,v;
	var a_lng_type=[];
	a_lng_type[0]='';
	a_lng_type[5]='地方';
	a_lng_type[15]='種族';
	for(var i=2;i<l;i++){
		v=o[i].value-0;
		f.elements['V_lang_type_id[]'][i].value=v;
		f.elements['lang_type_name[]'][i].value=a_lng_type[v];
	}
	isDblLanguage();
	cE();
}
function chgLangChkbox(rs){
	rs=rs.toUpperCase();
	var o=f.elements['lang'+rs+'[]'],l=o.length
	,ov=f.elements['V_lang'+rs+'[]'];
	for(var i=2;i<l;i++){
		ov[i].value=(o[i].checked)?1:0;
	}
	calcNowLangNum();
	calcCanLangNum_Name();
	cE();
}
//技能による言語の設定
function setLanguageByGinou(id){
	var st,ed;
	if(id==undefined){
		st=1;
		ed=13;
	}else{
		ed=(st=id)+1;
	}
	for(var i=st;i<ed;i++){
		v=(f.elements['GLv'+i].value-0);
		gl=Ginou[i][1];
		alg=[false,false];
		if(gl>0){
		//言語なしのときは処理しない
			if(gl==11){
				//魔動機文明語は種族(5ルーンフォーク)とかぶる
				if(f.shuzoku_id.value==5||v>0){
					alg[0]=alg[1]=true;
				}
			}else if(gl==12){
				//魔法文明語は5ソーサラーと6コンジャラー
				if((f.GLv5.value-0)+(f.GLv6.value-0)>0){
					alg[0]=alg[1]=true;
				}
			}else{
				al=Language[gl];
				flg=(v>0);
				alg[0]=(flg&&al[1]==1)?true:false;
				alg[1]=(flg&&al[2]==1)?true:false;
			}
			sl='lang'+gl;
			f.elements[sl+'S'].checked=alg[0];
			f.elements[sl+'R'].checked=alg[1];
		}
	}
	calcNowLangNum();
	calcCanLangNum_Name();
}
//現在の習得言語数
function calcNowLangNum(){
	var sum=0,l;
	for(var i=1;i<15;i++){
		if(i==5)continue; //地方語は飛ばす
		if(f.elements['lang'+i+'S'].checked)sum++;
		if(f.elements['lang'+i+'R'].checked)sum++;
	}
	//地方語、各種族語
	var o=f.elements['langS[]'],l=o.length;
	for(var i=2;i<l;i++){
		if(o[i].checked)sum++;
		if(f.elements['langR[]'][i].checked)sum++;
	}
	f.now_lang_num.value=sum;
}
//習得可能な言語数
function calcCanLangNum_Name(){
	var sum=2,gn_ln=[];
	a_RemLang=[[0,0],[0,0],[0,0],[1,1],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]];
	//種族
	var sz=f.shuzoku_id.value-0,zl=Shuzoku[sz][8];
	if(!isNaN(zl)&&zl>0){
		//会話
		if(Language[zl][1]==1){
			a_RemLang[zl][0]=1;
			sum++;
		}
		//読文
		if(Language[zl][2]==1){
			a_RemLang[zl][1]=1;
			sum++;
		}
	}
	//ナイトメアは親の種族(人間、エルフ、ドワーフ)分+2
	if(sz==6)sum+=2;
	//技能(セージ以外)
	var l=Ginou.length,gl,flg;
	for(var i=1;i<l;i++){
		gl=Ginou[i][1];
		flg=0;
		if(i==12||(f.elements['GLv'+i].value-0)==0||gl==0)continue;
		//会話
		if(Language[gl][1]==1&&a_RemLang[gl][0]!=1){
			flg=a_RemLang[gl][0]=1;
			sum++;
		}
		//読文
		if(Language[gl][2]==1&&a_RemLang[gl][1]!=1){
			flg=a_RemLang[gl][1]=1;
			sum++;
		}
		if(flg)gn_ln.push(Language[gl][0]);
	}
	//セージ
	var v=f.GLv12.value-0;
	if(v>0){
		sum+=v;
		gn_ln.push(v+'個の会話or読文');
	}
	f.ginou_language.value=gn_ln.join('、');
	f.can_lang_num.value=sum;
}
//入力行増減
function addLineLangage(){
	var tbl=doc.getElementById('Table_language');
	insertRowByTemplate(doc.getElementById('Table_language_tpl').rows[0],tbl,tbl.rows.length);
	isDblLanguage();
}
function delLineLangage(){
	//一行に二つ項目があるので関数では入力値チェックに漏れが出る
	var tbl=doc.getElementById('Table_language'),o=f.elements['lang_type_id[]'];
	var mn=6,m=o.length-1;
	if(m<mn){
		alert(msgWarnCantDelLine);
		return;
	}else{
		var flg=false,j;
		for(var i=0;i<2;i++){
			j=m-i;
			if(o[j].value>0
				||f.elements['lang_note[]'][j].value!=''
				||f.elements['langS[]'][j].checked
				||f.elements['langR[]'][j].checked
			){ flg=true; break; }
		}
		if(flg){
			if(!confirm(msgCfrmDelLastLine))return;
		}
	}
	tbl.deleteRow(tbl.rows.length-1);
}

/*** 名誉点 ***/
function chgHonorItemPoint(){
	calcHonorItemPoint();
	cE();
}
function chgUsedHonorPoint(){
	f.now_honor_point.value=(f.honor_point_sum.value-0)-(f.used_honor_point.value-0);
	cE();
}
function calcHonorItemPoint(){
	var o=f.elements['honor_item_point[]'],l=o.length,m=0;
	for(var i=1;i<l;i++){
		m+=(o[i].value-0);
	}
	f.now_honor_point.value=(f.honor_point_sum.value=m)-(f.used_honor_point.value-0);
}
//入力行増減
function addLineHonor(){
	var tbl=doc.getElementById('Table_honor'),l;
	insertRowByTemplate(doc.getElementById('Table_honor_tpl').rows[0],tbl,tbl.rows.length-3);
}
function delLineHonor(){
	var tbl=doc.getElementById('Table_honor'),
	af=['honor_item_name[]','honor_item_point[]','honor_item_memo[]'];
	deleteRowByIndex(tbl,tbl.rows.length-4,af,3);
	calcHonorItemPoint();
	cE();
}

/*** 成長履歴 ***/
//チェックボックス
function chgIsUseSeichoHis(o){
	if(o.checked){
		//成長能力値
		var oh=f.elements['SN_his[]'],l=oh.length,an=[0,0,0,0,0,0,0],v;
		for(var i=0;i<l;i++){
			f.elements['V_SN_his[]'][i].value=v=oh[i].value-0;
			an[v]++;
		}
		v=0;
		for(var i=1;i<7;i++){
			f.elements['NS'+i].value=(an[i]==0?'':an[i]);
			v+=an[i];
		}
		f.session_num.value=v;
		//経験点
		f.session_exp.value=f.exp_his_sum.value;

		calcNouryokuAll();
		calcNowExp();
		cE();
	}
}
//成長能力値
function chgSNHis(){
	var o=f.elements['SN_his[]'],l=o.length,an=[0,0,0,0,0,0,0],v
	,anm=['','器用度','敏捷度','筋力','生命力','知力','精神力'];
	for(var i=0;i<l;i++){
		f.elements['V_SN_his[]'][i].value=v=o[i].value-0;
		f.elements['SN_name_his[]'][i].value=anm[v];
		an[v]++;
	}
	//反映するか
	if(f.is_use_seicho_his.checked){
		v=0;
		for(var i=1;i<7;i++){
			f.elements['NS'+i].value=(an[i]==0?'':an[i]);
			v+=an[i];
		}
		f.session_num.value=v;
		calcNouryokuAll();
	}
	cE();
}
//経験点
function chgExpHis(){
	var o=f.elements['adv_exp_his[]'],l=o.length,sum=0;
	for(var i=0;i<l;i++){
		sum+=f.elements['get_exp_his[]'][i].value=(o[i].value-0)+((f.elements['1zoro_his[]'][i].value-0)*50)+(f.elements['bns_exp_his[]'][i].value-0);
	}
	f.exp_his_sum.value=sum;
	//反映するか
	if(f.is_use_seicho_his.checked){
		f.session_exp.value=sum;
		calcNowExp();
	}
	cE();
}
//入力行増減
function addLineSeichoHis(){
	var tbl=doc.getElementById('Table_seicho_his'),l;
	insertRowByTemplate(doc.getElementById('Table_seicho_his_tpl').rows[0],tbl,tbl.rows.length);
	var ao=doc.getElementsByName('seichoH_num');
	l=ao.length-1;
	ao[l].innerHTML=l;
}
function delLineSeichoHis(){
	var tbl=doc.getElementById('Table_seicho_his'),
	af=['SN_his[]','adv_exp_his[]','1zoro_his[]','bns_exp_his[]','seicho_memo_his[]'];
	deleteRowByIndex(tbl,tbl.rows.length-1,af,2);
	chgIsUseSeichoHis(f.is_use_seicho_his);
//	cE();
}

/*** パーソナルデータ ***/
//穢れ
function chgKegare(){
	f.V_kegare.value = f.kegare.value;
	cE();
}


/*** 入力・選択欄の使用可否の設定 ***/
//魔力
function isDblMaryokuTable(){
	f.MM5.disabled=(f.GLv5.value==0);
	f.MM6.disabled=(f.GLv6.value==0);
	f.MM7.disabled=(f.GLv7.value==0);
	f.MM8.disabled=(f.GLv8.value==0);
	f.MM9.disabled=(f.GLv9.value==0);
}
//言語
function isDblLanguage(){
	var o=f.elements['lang_type_id[]'],l=o.length,flg;
	var on=f.elements['lang_note[]'],os=f.elements['langS[]'],or=f.elements['langR[]'];
	for(var i=2;i<l;i++){
		flg=(o[i].value==0);
		on[i].disabled=os[i].disabled=or[i].disabled=flg;
	}
}

/*** 表示非表示制御 ***/
function chkDisplay(k){
	var flg=f.elements['is_disp_'+k].value-0;
	doc.getElementById(k+'_disp').style.display=(flg?'block':'none');
	doc.getElementById(k+'_nodisp').style.display=(flg?'none':'block');
}
function chgDisplay(flg,k){
	f.elements['is_disp_'+k].value=(flg==0)?0:1;
	chkDisplay(k);
}
//戦闘特技
//グラップラーの特技
function chkDspSTGrappler(){
	var flg=(f.GLv2.value>0)?'':'none';
	doc.getElementById('ST_grp1_tr').style.display=
	doc.getElementById('ST_grp2_tr').style.display=flg;
}
//武器の自由入力行
function chkDspArmsInputRow(){
	var flg=(f.is_disp_arms_input_row.value!=0);
	doc.getElementById('arms_input_disp').style.display=
	doc.getElementById('arms_input_disp2').style.display=
	doc.getElementById('arms_input_disp3').style.display=(flg?'':'none');
	doc.getElementById('arms_input_nodisp').style.display=(flg?'none':'');
}
function chgDspArmsInputRow(flg){
	f.is_disp_arms_input_row.value=(flg==0)?0:1;
	chkDspArmsInputRow();
}

/*** エラーメッセージ関連 ***/
function addErrorMsg(str) {
	if (str == '') { return; }
	if (f.message.value == '') {
		f.message.value=str;
	}
	else {
		f.message.value=f.message.value +"\n"+ str;
	}
}
function getErrorMsg() {
	return top.document.MAKING.message.value;
}

function cE() {
	f.message.value='';
	var v,a=[],sz=f.shuzoku_id.value-0,u=f.umare_id.value-0,o,l,n,m,flg;
	//種族未選択
	if(sz==0) {
		addErrorMsg('種族が設定されていません [設定間違い]');
	//生まれ未選択
	}else if(u==0){
		addErrorMsg('生まれが設定されていません [設定間違い]');
	}else{
		var asz=Shuzoku[sz],au=Umare[sz][u],max,min;
		//A～Fが範囲外
		var a2f=['A','B','C','D','E','F'];
		for(var i=0;i<6;i++){
			v=f.elements['NC'+(i+1)].value-0;
			if(v<((min=asz[i])==3?8:min)||v>asz[i]*6){
				a.push(a2f[i])
			}
		}
		if(a.length>0){
			addErrorMsg(a.join(',')+'の値が設定されていないか範囲外です [設定間違い]');
		}

		//冒険者Lvが0
		var lv=f.lv.value-0;
		if(lv==0)
			addErrorMsg('技能を全く取得していないため冒険者Lvが0です [確認]');
		else{
			//選択不可技能
			//タビットはプリースト
			//ルーンフォークはフェアリーテイマー、プリースト
			if(sz==4&&f.GLv7.value>0)
				addErrorMsg('タビットはプリーストを選択できません [設定間違い]');
			else if(sz==5&&((f.GLv7.value-0)+(f.GLv8.value-0)>0))
				addErrorMsg('ルーンフォークはフェアリーテイマー、プリーストを選択できません[設定間違い]');

			//初期取得技能がLv0
			
			
			
			
		}
		//戦闘特技
		var sST='|'; //戦闘特技id
		n=0; //戦闘特技数
		if(f.GLv2.value>0){
			sST+='7|56|';
		}
		//同じ戦闘特技が重複
		flg=true;
		o=f.elements['ST_id[]'],l=o.length;
		for(var i=1;i<l;i++){
			if((v=o[i].value-0)==0)continue;
			if(flg&&sST.indexOf('|'+v+'|',0)>=0){
				flg=false;
				addErrorMsg('重複して習得している戦闘特技があります [設定間違い]');
			}else{
				sST+=v+'|';
				n++;
			}
		}
		//必要な数の戦闘特技を取得していない(Lv1で1、Lv3で2･･･)
		if(lv>0&&o[1].value==0){
			addErrorMsg('Lv1で習得する戦闘特技が設定されていません [設定間違い]');
		}else if(n<Math.ceil(lv/2)){
			addErrorMsg('習得している戦闘特技が足りません [設定間違い]');
		}
		//前提
		
		
		//言語
		//共通交易語
		a=[];
		if(!f.lang3S.checked)a.push('会話');
		if(!f.lang3R.checked)a.push('読文');
		if(a.length>0)addErrorMsg('共通交易語('+a.join(',')+')が習得されていません [設定間違い]');
		a=[];

		//言語習得数が可能習得数に一致しない
		if(f.now_lang_num.value!=f.can_lang_num.value)
			addErrorMsg('現在の習得言語数が習得可能の数と一致しません[確認]');
		else{
			//初期習得言語が未選択
			
			//技能習得言語が未選択
			
			
		}
		
		//穢れが5
		if(f.kegare.value>4){
			addErrorMsg('穢れが5以上のためレブナント化しています[確認]');
		}
		
	}
}

