var MAXPT = 8;		// 最大PT数
var MAXLEVEL = 80;	// 最大LV
var MAXMONSTER = 5;	// 最大Monster数
var INVALID = '--';	// 無効値
var NOSELECTED = '未選択';// 未選択

// モンスターtbl - 名前, level
var arMonsters = new Array(
"ガンジオーク", 10,
"スケルトン", 10,
"アリゲーター", 10,
"オークゾンビ", 10,
"エンシェントサキュバスクイーン(BOSS)", 11,
"カーズドブルート(BOSS)", 11,
"オークウィザード", 12,
"スケルトンアーチャー", 12,
"ジャイアントアント", 12,
"バクーク", 12,
"ベアー", 12,
"ロバオーク", 13,
"スケルトンパイク", 13,
"スケルトンアックス", 13,
"ストーンゴーレム", 13,
"スノーマン", 14,
"オークスカウト", 14,
"ホブゴブリン", 14,
"ジャイアントスパイダー", 14,
"マーメイド", 15,
"トロッグ", 15,
"リザードマン", 15,
"ドゥダ-マラオーク", 15,
"アトゥバオーク", 15,
"ミミック", 15,
"オウルベアー", 15,
"マーマン", 16,
"ブラックナイト", 16,
"ブラックナイト-捜索隊-", 16,
"シルエット", 16,
"グール", 16,
"スパルトイ", 16,
"クラブマン", 16,
"シャーク", 16,
"ゴースト（緑）", 17,
"ライカンスロープ", 17,
"ネルガオーク", 17,
"オークガード", 18,
"ドレッドスパイダー", 18,
"アイスゴーレム", 18,
"ドッペルゲンガー", 19,
"ゴースト（赤）", 20,
"ジャイアントアントソルジャー", 20,
"ラットマン", 20,
"アステ", 20,
"エルモアゾンビソルジャー", 21,
"ガースト", 21,
"エルダー", 21,
"エルモアゾンビウィザード", 22,
"デス", 22,
"ラミア", 22,
"バグベアー", 22,
"ケルベロス", 24,
"タートルドラゴン(海)", 24,
"ファイヤーエッグ", 25,
"エルモアゾンビジェネラル", 25,
"ドラゴンフライ", 26,
"アイスマン", 26,
"スコーピオン", 26,
"ボムフラワー", 26,
"ハーピー", 26,
"タートルドラゴン(陸)", 26,
"スケルトンマークスマン", 27,
"サーベルタイガー", 27,
"スケルトンガード", 27,
"ダークエルフ", 27,
"バンディット（クラブ）", 28,
"トロール", 28,
"イレッカドム", 28,
"オーガ", 28,
"バーニングウォリアー", 29,
"スケルトンファイター", 29,
"クラスタシアン", 29,
"バンディット（弓）", 30,
"ジャイアント（黄色）", 30,
"バーニングアーチャー", 30,
"ゼラチンキューブ", 30,
"ムリアン", 30,
"キングバグベアー", 30,
"イエティ", 30,
"バンディット（斧）", 31,
"リビングアーマー", 31,
"グリフォン", 31,
"バンディット（剣）", 32,
"サラマンダー", 32,
"ジャイアント（黒色）", 32,
"クロコダイル（BOSS）", 32,
"ドッペルゲンガー(True)", 33,
"ジャイアント（白色）", 33,
"ガーストロード", 33,
"ゲイザー", 33,
"アシタジオ", 34,
"コカトリス", 34,
"バンディットボス", 35,
"ブルート", 35,
"ラヴァゴーレム", 35,
"アイアンゴーレム", 35,
"バシリスク", 36,
"サキュバス", 37,
"ホーンケルベロス", 39,
"セマ(BOSS)", 39,
"サイクロプス", 40,
"ネクロマンサー", 40,
"サキュバスクイーン", 41,
"バルタザール(BOSS)", 43,
"カスパー(BOSS)", 44,
"メルキオール(BOSS)", 45,
"イフリート(BOSS)", 46,
"ドレイク(BOSS)", 48,
"ブラックエルダー(BOSS)", 50,
"ドッペルゲンガー(BOSS)", 50,
"バフォメット(BOSS)", 51,
"ベレス(BOSS)", 53,
"カーツ(BOSS)", 55,
"デスナイト(BOSS)", 55,
"アイスクイーン(BOSS)", 56,
"エンシェントジャイアント(BOSS)", 56,
"ジャイアントアントクイーン(BOSS)", 57,
"フェニックス(BOSS)", 59,
"デーモン(BOSS)", 61,
"ケレニス(BOSS)", 72,
"ケンラウヘル(BOSS)", 75,
"(FI)アリゲーター", 30,
"(FI)ジャイアントスパイダー", 34,
"(FI)ウェアウルフ", 34,
"(FI)ダークエルフ", 35,
"(FI)リザードマン", 35,
"(FI)オウルベアー", 35,
"(FI)ガースト", 36,
"(FI)バグベアー ", 37,
"(FI)ライカンスロープ", 37,
"(FI)ミノタウルス(斧）", 37,
"(FI)ラミア", 37,
"(FI)ドレッドスパイダー", 38,
"(FI)グリフォン", 41,
"(FI)ミノタウルス（鉄球）", 41,
"(FI)ハーピー", 41,
"(FI)クロコダイル", 42,
"(FI)ドッペルゲンガー", 42,
"(FI)ガーストロード", 43,
"(FI)トロール", 43,
"(FI)ブルート", 45,
"(FI)キングバグベアー", 45,
"(FI)コカトリス", 47,
"(FI)バシリスク", 48,
"(FI)サイクロプス", 50,
"(FI)ドレイク", 53,
"(TOI)リーパー", 55,
"(TOI)ミュータントラミア", 32,
"(TOI)ミュータントドレッドスパイダー", 33,
"(TOI)メデューサ", 36,
"(TOI)キメラ", 39,
"(TOI)ゼニスクイーン(BOSS)", 45,
"(TOI)ダンシングソード", 37,
"(TOI)イビルミミック", 38,
"(TOI)イビルゲイザー", 39,
"(TOI)ディアウルフ", 40,
"(TOI)シアー(BOSS)", 50,
"(TOI)ホラーファイヤーエッグ", 37,
"(TOI)ナイトメア", 40,
"(TOI)ホラーケルベロス", 43,
"(TOI)レッサーデーモン", 44,
"(TOI)バンパイア(BOSS)", 56,
"(TOI)デッドリースケルトンパイク", 39,
"(TOI)デッドリースケルトンアックス", 39,
"(TOI)デッドリーグール", 42,
"(TOI)デッドリースパルトイ", 42,
"(TOI)デッドリースケルトンマークスマン", 45,
"(TOI)デッドリースケルトンファイター", 45,
"(TOI)ゾンビロード(BOSS)", 62,
"(TOI)インファーナルネクロマンサー", 44,
"(TOI)ホラーアイアンゴーレム", 44,
"(TOI)レッサードラゴン", 45,
"(TOI)インファーナルゴースト（赤）", 45,
"(TOI)インファーナルゴースト（緑）", 46,
"(TOI)ボーンドラゴン", 47,
"(TOI)クーガー(BOSS)", 63,
"(TOI)カオスエルモジェネラル", 50,
"(TOI)カオスエルモアウィザード", 45,
"(TOI)カオスオークゾンビ", 42,
"(TOI)カオスエルモアソルジャー", 47,
"(TOI)マミーロード(BOSS)", 63,
"(TOI)ダークライカンスロープ", 44,
"(TOI)炎の精霊ケルベロス", 46,
"(TOI)マーシレスサーベルタイガー", 48,
"(TOI)炎のアシタジオ", 51,
"(TOI)アイリス(BOSS)", 60,
"(TOI)ダークブラックナイト", 45,
"(TOI)ダークヴァーニングアーチャー", 48,
"(TOI)ダークヴァーニングウォリアー", 50,
"(TOI)ダークサキュバスクイーン", 53,
"(TOI)ナイトバルド(BOSS)", 65,
"(TOI)パートゼニスクイーン", 53,
"(TOI)シアージュニア", 54,
"(TOI)フィアゾンビロード", 55,
"(TOI)マーキスバンパイア", 56,
"(TOI)リッチ(BOSS)", 66,
"(TOI)火の大精霊", 60,
"(TOI)水の大精霊", 60,
"(TOI)地の大精霊", 60,
"(TOI)風の大精霊", 60
);
// 必要経験値tbl
var arNeedExps = new Array(
		 0,
	   125,   175,   200,   250,   546,   1105,   1695,   2465,    3439,  4641,
	  6095,  7825,  9855, 12209, 14911,  17985,  21455,  25345,   29679, 34481,
	 39775, 45585, 51935, 58849, 66351,  74465,  83215,  92625,  102719,113521,
	125055,137345,150415,164289,178991, 194545, 210975, 228305,  246559,265761,
	285936,307105,329295,352529,729360,1508416,3495263,9912189,36065092
);


// 更新
function Update()
{
	var arLevel = new Array();
	var TotalLevel = 0;
	var TotalPlayers = 0;
	var MonsterExp;
	var BonusExp;
	// Player計算１
	for (I = 1; I <= MAXPT; I++) {
		var targetObj = document.getElementById('player'+I+'level');
		if (targetObj.value != 0) {
			arLevel[I] = targetObj.value;
			TotalLevel += targetObj.value * targetObj.value;
			TotalPlayers++;
		}
	}
	// Bonus計算
	var ExpBonus;
	if (document.getElementById('IsLeaderPri').checked && TotalPlayers > 1) {
		ExpBonus =  0.04 * (TotalPlayers - 1) + 0.059;
	}
	else {
		ExpBonus =  0.04 * (TotalPlayers - 1);
	}
	
	
	// Monster計算１
	var MonsterTotalExp = 0;
	var MonsterTotalExp2 = 0;
	for (I = 1; I <= MAXMONSTER; I++) {
		var objMonsterList = document.getElementById('monster'+I);
		var objMonsterExp = document.getElementById('monster'+I+'exp');
		var objMonsterExp2 = document.getElementById('monster'+I+'exp2');
		if (objMonsterList.value != 0) {
			var Exp = objMonsterList.value * objMonsterList.value + 1;
			var Exp2 = Exp + Exp * ExpBonus;
			Exp2 = Math.floor(Exp2);
			objMonsterExp.innerHTML = Exp;
			objMonsterExp2.innerHTML = Exp2;
			MonsterTotalExp += Exp;
			MonsterTotalExp2 += Exp2;
		}
		else {
			objMonsterExp.innerHTML = INVALID;
			objMonsterExp2.innerHTML = INVALID;
		}
	}
	document.getElementById('monstertotalexp').innerHTML = MonsterTotalExp;
	document.getElementById('monstertotalexp2').innerHTML = MonsterTotalExp2 + '(' + Math.round(ExpBonus * 1000) / 10 + '%UP)';
	
	// PTへのEXP分配計算
	for (I = 1; I <= MAXPT; I++) {
		var objExp = document.getElementById('player'+I+'exp');
		var objRatio = document.getElementById('player'+I+'ratio');
		var objKills = document.getElementById('player'+I+'kills');
		if (arLevel[I]) {
			var Value = (arLevel[I]*arLevel[I]) / TotalLevel;
			var GetExp;
			if (arLevel[I] >= 65) {
				GetExp = Math.floor(Value * MonsterTotalExp2 / Math.pow(2, Math.ceil(((arLevel[I] - 64) / 5))));
			}
			else {
				GetExp = Math.floor(Value * MonsterTotalExp2);
			}
			var LVUPExp = arNeedExps[(arLevel[I] >= 50) ? 49: arLevel[I]];
			objExp.innerHTML = GetExp + '(' + Math.floor(GetExp / LVUPExp * 100000)/1000 + '%UP)';
			objRatio.innerHTML = Math.round(Value * 1000) / 10 + '%';
			if (GetExp) {
				var NeedExp = LVUPExp / GetExp;
				objKills.innerHTML = Math.ceil(NeedExp);
			}
			else {
				objKills.innerHTML = INVALID;
			}
		}
		else {
			objExp.innerHTML = INVALID;
			objRatio.innerHTML = INVALID;
			objKills.innerHTML = INVALID;
		}
	}
}


// 初期化
function init()
{
	for (I = 1; I <= MAXPT; I++) {
		var objTgt = document.getElementById('player'+I+'level');
		//  Level設定
		if (I != 1) {
			var objAdd = document.createElement("OPTION"); 
			objAdd.text = NOSELECTED; 
			objAdd.value = 0;
			objTgt.add(objAdd);
		}
		for (J = 1; J <= MAXLEVEL; J++) {
			var objAdd = document.createElement("OPTION"); 
			objAdd.text = "LEVEL " + J; 
			objAdd.value = J;
			objTgt.add(objAdd);
		}
	}
	// モンスターリスト入れる
	for (I = 1; I <= MAXMONSTER; I++) {
		var objTgt = document.getElementById('monster'+I);
		if (I != 1) {
			var objAdd = document.createElement("OPTION"); 
			objAdd.text = NOSELECTED; 
			objAdd.value = 0;
			objTgt.add(objAdd);
		}
		for (J = 0; J < arMonsters.length; J+=2) {
			var objAdd = document.createElement("OPTION"); 
			objAdd.text = arMonsters[J] +' (LEVEL' + arMonsters[J+1] + ')'; 
			objAdd.value = arMonsters[J+1];
			objTgt.add(objAdd);
		}
	}
	// 初期更新
	Update();
}
