function calc(){
	//********** データ取得 ************************************************
	var int_cre	 = status_getparam( "creator int" );
	var dex_cre	 = status_getparam( "creator dex" );
	var mob_data = status_getparam( "mob" );
	var int_bard = status_getparam( "bard int" );
	var dex_bard = status_getparam( "bard dex" );

	var gvg	= status_getparam( "gvg" );

	var Suffra	= skill_db( "Suffragium" );
	var Bragi	= skill_db( "A Poem of Bragi" );
	var Lesson	= skill_db( "Musical Lesson" );
	var LA		= skill_db( "Lex Aeterna" );
	var Assum	= skill_db( "Assumptio" );
	var AciDemo	= skill_db( "Acid Demonstration" );

	/********** 詠唱時間計算 **********/
	if(Bragi > 0)
		casting = Math.floor( 1000 * ( 1 - ( dex_cre / 150 )) * Suffra * ( 1 - ( Bragi * 3 + Lesson + dex_bard / 10 ) / 100 ));
	else
		casting = Math.floor( 1000 * ( 1 - ( dex_cre / 150 )) * Suffra );
	
	if(casting <= 0)
		casting = "無詠唱";
	else
		casting += "ms";
	
	document.getElementById("Cast").innerHTML   = casting;

	/********** ディレイ計算 **********/
	if(Bragi==10)
		delay = Math.floor( 1000 * ( 1 - ( Bragi * 5 + Lesson * 2 + int_bard / 5 ) / 100 ));
	else if(Bragi > 0)
		delay = Math.floor( 1000 * ( 1 - ( Bragi * 3 + Lesson * 2 + int_bard / 5 ) / 100 ));
	else
		delay = 1000;

	if(delay <= 0)	delay = 0;
		delay += "ms";
	document.getElementById("Delay").innerHTML = delay;

	/********** ダメージ計算 **********/
	dmg = Math.floor((0.7 * (int_cre * int_cre) * mob_data[0] / (int_cre + mob_data[0]) * mob_data[4] * LA) * Assum * gvg) * AciDemo;
	if(dmg<=0)
		dmg = "Miss";
	document.getElementById("Damage").innerHTML = dmg;

	/********** 確殺計算 **********/
	var times = 0;
	if( dmg != "Miss" ){
		do{
			times++;
			mob_data[1] -= dmg;
		}while( mob_data[1] > 0 )
	}else{
		times = "_";
	}
	document.getElementById("Times").innerHTML = times;
	
	/********** EXP計算 **********/
	var mob_exp = new Array();
	mob_exp[0] = mob_data[2];
	mob_exp[1] = mob_data[3];
	
	var urdr_exp = [0,0];
	if(document.creator.URDR.checked){
		urdr_exp[0] = mob_exp[0];
		urdr_exp[1] = mob_exp[1];
	}
	if( eval(document.creator.PK_CRE.value) != 0 ){
		urdr_exp[0] *= 3;
		urdr_exp[1] *= 3;
	}
	
	var card_exp = [0,0];
	if(document.creator.SHOESCARD_CRE.value == "EXP_UP"){
		card_exp[0] = Math.floor(mob_exp[0] * 0.1);
		card_exp[1] = Math.floor(mob_exp[1] * 0.1);
	}
	
	var item_exp = [0,0];
	if(document.creator.EXPITEM.checked){
		item_exp[0] = Math.floor(mob_exp[0] * 0.5);
		item_exp[1] = Math.floor(mob_exp[1] * 0.5);
	}
	mob_exp[0] += urdr_exp[0] + item_exp[0] + card_exp[0];
	mob_exp[1] += urdr_exp[1] + item_exp[1] + card_exp[1];
	document.getElementById("BaseExp").innerHTML	= mob_exp[0];
	document.getElementById("JobExp").innerHTML	= mob_exp[1];
	if( times == "_" ){
		document.getElementById("BaseExpPer").innerHTML = 0;
		document.getElementById("JobExpPer").innerHTML = 0;
	}else{
		document.getElementById("BaseExpPer").innerHTML = Math.floor(mob_exp[0] / times);
		document.getElementById("JobExpPer").innerHTML = Math.floor(mob_exp[1] / times);
	}
}

//**************************************************
// ベースレベル、ステータスポイント計算
//**************************************************
function stpoint_calc(){
	var param = status_getparam( "creator" );

	/**********	ステータスポイント計算 **********/
	var stpoint = 100;
	for(var j=0; j<6; j++){
		for(var i=1; i<param[j]; i++)
			stpoint -= Math.ceil(i/10) + 1;
	}

	/**********	BaseLv計算 **********/
	var baselv = 1;
	while(stpoint < 0 && baselv < 99){
		baselv ++;
		stpoint += Math.ceil(baselv/5) + 2;
	}

	/********** 出力 **********/
	document.getElementById("BaseLv").innerHTML = baselv;
	document.getElementById("StPoint").innerHTML = stpoint;
	
	revise_calc();
}

//**************************************************
// ステータス計算
//**************************************************
function revise_calc(){
	var param		= status_getparam( "creator" );
	var pk			= status_getparam( "pk" );
	var job			= status_jobbonus( eval(document.creator.JOBLV.value) );
	var cook		= item_use( "cook" );
	var gloomybox	= item_use( "gloomybox" );
	var equip		= item_equip( "creator" );
	var card		= item_card( "creator" );
	var guild		= skill_db( "guild" );
	var breathing	= skill_db( "breathing" );
	var marionette	= skill_db( "marionette" );
	var gospel		= skill_db( "gospel" );
	var sn_wife		= skill_db( "sn_wife" );

	// マリオネット計算（素ステ+Job補正+MCで100超えは99に修正）
	// 面倒なので素状態にMC→装備・支援計算（素状態QM＋MC→装備・支援計算はなし）
	var re_marionette = [0,0,0,0,0,0];
	for(i=0; i<6; i++){
		re_marionette[i] = job[i] + pk + marionette[i];
		if((param[i] + re_marionette[i] > 99)&&(document.creator.MARIONETTE_CRE.checked))
			re_marionette[i] = 99 - param[i];
	}

	//憂鬱な箱計算
	//集中向上に乗る物、乗らないもの
	//乗る　　：素ステ、Jobボーナス、装備
	//乗らない：カード、補助スキル
	//不明　　：マーダラー(今は乗らない処理)
	var re_gloomybox = [0,0,0,0,0,0];
	re_gloomybox[1] += Math.floor((param[1] + job[1] + equip[1]) * gloomybox[1]);
	re_gloomybox[4] += Math.floor((param[4] + job[4] + equip[4]) * gloomybox[4]);

	//最終補正計算
	var param_r = [0,0,0,0,0,0];
	for(i=0; i<20; i++)
		param_r[i] = re_marionette[i] + re_gloomybox[i] + cook[i] + equip[i] + card[i] + guild[i] + breathing[i] + gospel + sn_wife;

	/********** 出力 **********/
	document.getElementById("bSTR").innerHTML = param_r[0];
	document.getElementById("bAGI").innerHTML = param_r[1];
	document.getElementById("bVIT").innerHTML = param_r[2];
	document.getElementById("bINT").innerHTML = param_r[3];
	document.getElementById("bDEX").innerHTML = param_r[4];
	document.getElementById("bLUK").innerHTML = param_r[5];
	
	calc();
}

