/*************************************
        狩人計算機　あずさ２号
		Ver. 1.4
*************************************/

/*----------------------------------------------------------------------------------
	更新履歴

2003/06/23	1.4a
	パクり対策に、異常 URL で著作権表示を行うように。（英語版のみ）

2003/05/05	1.4
	各スキルに Lv.0 を設定可能に。未来のため。

2003/03/18	1.3
	SELECT タグをスクリプトで表示しファイルサイズ軽量化。処理時間は重量化。
	ついでなので「 Now Loading... 」を表示。

2003/01/01	1.2a
	英語版対応のため、出力に日本語を含めないように変更

2002/11/12	1.2
	Str と JobLv. から MaxWait の計算
	自動援護のダメージも算出
	スチールクロウ Lv.0 に対応
	おまけの加算専用計算機を設置

2002/11/08 	1.1
	拡張ステータス計算完成

2002/11/07 	1.01
	拡張ステータス計算に着手（未実装）

2002/11/06 	1.0
	作成
----------------------------------------------------------------------------------*/

/*
	ステータス取得簡略化
*/
function lv() {
	return lv_base.selectedIndex + 1;
}
function int() {
	return st_int.selectedIndex + 1;
}
function dex() {
	return st_dex.selectedIndex + 1;
}



/*
	拡張ステータス
*/
function setStt() {
	hp.value = Math.floor(
		( 1 + ( st_vit.selectedIndex +1 ) /100 )
			*
		( 35 + lv() * 5 + getHPCoefficient( lv() ) )
	);
	sp.value = Math.floor( lv() * ( 1 + int() / 100 ) * 4 );

	hit.value  = dex() + lv();
	flee.value = ( st_agi.selectedIndex +1 ) + lv();

	aspd.value = Math.floor(
		200 - ( ( 250 - ( st_agi.selectedIndex +1 ) - dex() /4) / 250 * ( 200 - 140 ) )
	);
	aps.value = 50 / ( 200 - aspd.value );
	aps.value = aps.value.substr( 0, 4 ) + "/s"

	cri.value  = 1 + Math.round( ( st_luk.selectedIndex +1 ) * 0.3 );
	lucky.value= 1 + Math.floor( ( st_luk.selectedIndex +1 )* 0.1 );

	// Str は素の値のみっぽいけど
	maxwait.value = 2000 + ( ( st_str.selectedIndex +1 ) - getNaturalStr() ) * 30 + 700;

	return true;
}

// 加算の計算（ HP 計算用 ）
function getHPCoefficient( max ) {
	coefficient = 0;
	// 1 〜 BaseLv. までを加算
	for( i = 2; i <= max; i++ ) {
		coefficient += Math.round( i * 0.85 );
	}
	return coefficient;
}

// JobLv. から素の Str を算出
function getNaturalStr() {
	point = 0;
	if( ( lv_job.selectedIndex + 1 ) >= 6 ) {
		point++;
	}
	if( ( lv_job.selectedIndex + 1 ) >= 10 ) {
		point++;
	}
	if( ( lv_job.selectedIndex + 1 ) >= 12 ) {
		point++;
	}
	if( ( lv_job.selectedIndex + 1 ) >= 44 ) {
		point++;
	}
	return point;
}



/*
	スキル
*/

// ブリッツビート
function blitzbeat() {
	dm_blitzbeat.value = lv_blitzbeat.selectedIndex
		? ( Math.floor( dex() / 10 ) + Math.floor( int() / 2 )
		 + ( lv_steelcrow.selectedIndex ) * 3 + 40 ) * 2 * lv_blitzbeat.selectedIndex
		: "-";
	sp_blitzbeat.value = lv_blitzbeat.selectedIndex
		? 7 + lv_blitzbeat.selectedIndex * 3
		: "-";

	// 自動援護ダメージ
	dm_blitzbeat_auto.value = ( Math.floor( dex() / 10 ) + Math.floor( int() / 2 )
	  + ( lv_steelcrow.selectedIndex ) * 3 + 40 ) * 2
	  * Math.min( lv_blitzbeat.selectedIndex,
	              Math.floor( ( ( lv_job.selectedIndex + 1 ) + 9 ) / 10 ) );
	dm_blitzbeat_auto.value = lv_blitzbeat.selectedIndex
		? dm_blitzbeat_auto.value
		: "-";

	// 自動援護率
	prob_blitzbeat_auto.value = 1 + Math.floor( ( st_luk.selectedIndex +1 ) * 0.3 );
	prob_blitzbeat_auto.value = lv_blitzbeat.selectedIndex
		? "( " + prob_blitzbeat_auto.value + "% )"
		: "( -% )";
	return true;
}



// ランドマイン
function landmine() {
	dm_landmine.value = lv_landmine.selectedIndex
		? Math.floor(
			( dex() + 75 ) * ( 1 + int() / 100 ) * lv_landmine.selectedIndex
		)
		: "-";
	wt_landmine.value = lv_landmine.selectedIndex
		? 1 + lv_landmine.selectedIndex * 0.5
		: "-";
	return true;
}

// ブラストマイン
function blastmine() {
	dm_blastmine.value = lv_blastmine.selectedIndex
		? Math.floor(
			( dex() / 2 + 50 ) * ( 1 + int() / 100 ) * lv_blastmine.selectedIndex
		)
		: "-";
	wt_blastmine.value = lv_blastmine.selectedIndex
		? 30 - lv_blastmine.selectedIndex * 5
		: "-";
	return true;
}

// クレイモアトラップ
function claymoretrap() {
	dm_claymoretrap.value = lv_claymoretrap.selectedIndex
		? Math.floor(
			( dex() / 2 + 75 ) * ( 1 + int() / 100 ) * lv_claymoretrap.selectedIndex
		)
		: "-";
	wt_claymoretrap.value = lv_claymoretrap.selectedIndex
		? lv_claymoretrap.selectedIndex * 5
		: "-";
	return true;
}

// フリージングトラップ
function freezingtrap() {
	dm_freezingtrap.value = "*";
	wt_freezingtrap.value = lv_freezingtrap.selectedIndex
		? lv_freezingtrap.selectedIndex * 3
		: "-";
	return true;
}

// ショックウェーブ
function shockwave() {
	// これでいいのか ... ??
	dm_shockwave.value = lv_shockwave.selectedIndex
		? "SP " + ( 10 + lv_shockwave.selectedIndex *15 ) + "%"
		: "SP --%";
	wt_shockwave.value = lv_shockwave.selectedIndex
		? 240 - lv_shockwave.selectedIndex * 40
		: "-";
	return true;
}



// スキッドトラップ
function skidtrap() {
	dm_skidtrap.value = lv_skidtrap.selectedIndex
		? lv_skidtrap.selectedIndex + " Cells"
		: "- Cells";
	wt_skidtrap.value = lv_skidtrap.selectedIndex
		? 360 - lv_skidtrap.selectedIndex * 60
		: "-";
	return true;
}

// アンクルスネア
function anklesnare() {
	dm_anklesnare.value = lv_anklesnare.selectedIndex
		? ( lv_anklesnare.selectedIndex * 5 ) + " sec."
		: "- sec.";
	wt_anklesnare.value = lv_anklesnare.selectedIndex
		? 300 - lv_anklesnare.selectedIndex * 50
		: "-";
	return true;
}

// フラッシャー
function flasher() {
	dm_flasher.value = lv_flasher.selectedIndex
		? "30 sec."
		: "- sec.";
	wt_flasher.value = lv_flasher.selectedIndex
		? 180 - lv_flasher.selectedIndex * 30
		: "-";
	return true;
}

// サンドマン
function sandman() {
	dm_sandman.value = lv_sandman.selectedIndex
		? "30 sec."
		: "- sec.";
	wt_sandman.value = lv_sandman.selectedIndex
		? 180 - lv_sandman.selectedIndex * 30
		: "-";
	return true;
}

// トーキーボックス
function talkiebox() {
	dm_talkiebox.value = lv_talkiebox.selectedIndex
		? "3 sec."
		: "- sec.";
	wt_talkiebox.value = lv_talkiebox.selectedIndex
		? "600"
		: "-";
	return true;
}



// ディクティング
function detecting() {
	dm_detecting.value = lv_detecting.selectedIndex
		? "+" + ( 1 + lv_detecting.selectedIndex *2 ) + " Cells"
		: "+0 Cells";
	return true;
}

// スプリングトラップ
function springtrap() {
	dm_springtrap.value = lv_springtrap.selectedIndex
		? ( 3 + lv_springtrap.selectedIndex ) + " Cells"
		: "0 Cells";
	return true;
}

// ファルコンマスタリ
function falcon() {
	return true;
}



// リムーブトラップ
function removetrap() {
	return true;
}

// ビーストベイン
function beastbane() {
	dm_beastbane.value = "Dm +" + ( lv_beastbane.selectedIndex * 3 );
	return true;
}



/*
	一括計算
*/
function doAll() {
	setStt();

	blitzbeat();
	landmine();
	blastmine();
	claymoretrap();
	freezingtrap();
	shockwave();

	skidtrap();
	anklesnare();
	flasher();
	sandman();
	talkiebox();

	detecting();
	springtrap();
	falcon();

	removetrap();
	beastbane();

	return true;
}



/*
	おまけ: 加算専用計算機
*/

function addAB( fm ) {
	if( isNaN( fm.addA.value ) || isNaN( fm.addB.value ) ) {
		return false;
	}
	fm.addC.value = ( eval( fm.addA.value ) + eval( fm.addB.value ) );
	return true;
}



/*
	SELECT タグ自動生成
*/
function writeSelectTag( name ) {
	if( name == "lv_base" ) {
		max = 99;
	}
	else if( name == "lv_job" ) {
		max = 50;
	}
	else {
		max = 150
	}

	document.writeln( "<SELECT Name=\"" + name
	 + "\" Class=\"calcStt\" onChange=\"setStt();\">" );
	document.writeln( "<OPTION Value=\"1\" Selected>1" );
	for( i=2; i<=max; i++ ) {
		document.writeln( "<OPTION Value=\"" + i + "\">" + i );
	}
	document.writeln( "</SELECT>" );
}



/*
	URL を確認し著作権表示
*/
function copyright() {
	if( location.href != "http://hp.vector.co.jp/authors/VA021310/ragnarok/db_archer_calc_en.html" ) {
		document.write( "<P Style=\"float: right;\"><A Href=\"http://rag-code.net/?800\">Created by Takanashi Ginpei (jp)</A></P>" );
	}
}





// [EoF]
