// Enchant simulator Version1
// By Majoruka


// アイテム定義
var ITEM_WEAPON = 0;
var ITEM_ARMOR = 1;
var ITEM_SCROLL = 2;
var ITEM_OTHER = 3;

// 強化スク定義
var SELECT_NONE = -1;
var SELECT_ZEL = 1;
var SELECT_DAI = 2;
var SELECT_bZEL = 3;
var SELECT_bDAI = 4;
var SELECT_cZEL = 5;
var SELECT_cDAI = 6;

// 画像,Mediaパス
var IMG_DIR = "image/";
var MEDIA_DIR = "media/";

var MAX_ITEM = 100;

var DefaultItem = new Array(0,1,2,3,4,5);

// ItemTbl Itemフラグ,名前,Img,OE安全値,蒸発(使用)回数
var arItemTbl = new Array(
//***** スクロール *****
ITEM_SCROLL, "武器強化スクロール", "DAI.gif", SELECT_DAI, 0,
ITEM_SCROLL, "防具強化スクロール", "ZEL.gif", SELECT_ZEL, 0,
ITEM_SCROLL, "武器強化スクロール", "bDAI.gif", SELECT_bDAI, 0,
ITEM_SCROLL, "防具強化スクロール", "bZEL.gif", SELECT_bZEL, 0,
ITEM_SCROLL, "武器強化スクロール", "cDAI.gif", SELECT_cDAI, 0,
ITEM_SCROLL, "防具強化スクロール", "cZEL.gif", SELECT_cZEL, 0,
//***** 防具 *****
// ヘルム
ITEM_ARMOR, "ボーン ヘルム", "SkullHelmet.gif", 0, 0,
ITEM_ARMOR, "ブレス オブ エルム", "BOE.gif", 6, 0,
ITEM_ARMOR, "デーモン ヘルム", "DemonHelm.gif", 4, 0,
ITEM_ARMOR, "レッド ナイト フード", "RKH.gif", 6, 0,
ITEM_ARMOR, "マジック ヘルム", "HOMR.gif", 4, 0,
ITEM_ARMOR, "カーツ ヘルム", "KartzHelm.gif", 4, 0,
ITEM_ARMOR, "デスナイト ヘルム", "DKHelm.gif", 4, 0,
ITEM_ARMOR, "シャドウ マスク", "ShadowMask.gif", 6, 0,
ITEM_ARMOR, "パンプキン マスク", "PMask.gif", 4, 0,
ITEM_ARMOR, "ダークヘッドバンド", "DHB.gif", 4, 0,
ITEM_ARMOR, "セマの帽子", "SemaHat.gif", 4, 0,
ITEM_ARMOR, "メルキオールの帽子", "MerkyoHat.gif", 4, 0,
ITEM_ARMOR, "バルタザールの帽子", "BaltuzarHat.gif", 4, 0,
ITEM_ARMOR, "カスパーの帽子", "CaspaHat.gif", 4, 0,
// アーマー
ITEM_ARMOR, "ボーン アーマー", "BoneArmor.gif", 0, 0,
ITEM_ARMOR, "エルブン プレート メイル", "EPM.gif", 6, 0,
ITEM_ARMOR, "クリスタル プレート メイル", "CPM.gif", 4, 0,
ITEM_ARMOR, "レッド ドラゴン スケイル メイル", "RDSM.gif", 4, 0,
ITEM_ARMOR, "ブルー ドラゴン スケイル メイル", "BDSM.gif", 4, 0,
ITEM_ARMOR, "ホワイト ドラゴン スケイル メイル", "WDSM.gif", 4, 0,
ITEM_ARMOR, "グリーン ドラゴン スケイル メイル", "GDSM.gif", 4, 0,
ITEM_ARMOR, "デーモン アーマー", "DemonArmor.gif", 4, 0,
ITEM_ARMOR, "カーツ アーマー", "KartzArmor.gif", 4, 0,
ITEM_ARMOR, "デスナイト アーマー", "DKArmor.gif", 4, 0,
ITEM_ARMOR, "マジック チェーン メイル", "MCM.gif", 4, 0,
ITEM_ARMOR, "エルブン チェーン メイル", "ECM.gif", 6, 0,
ITEM_ARMOR, "ダーク ローブ", "DarkRobe.gif", 6, 0,
ITEM_ARMOR, "バフォメットアーマー", "BaphometArmor.gif", 4, 0,
ITEM_ARMOR, "リッチ ローブ", "LichRobe.gif", 4, 0,
// シャツ
ITEM_ARMOR, "Ｔシャツ", "T-shirt.gif", 4, 0,
ITEM_ARMOR, "エルブン Ｔシャツ", "ET-shirt.gif", 6, 0,
// シールド
ITEM_ARMOR, "ボーン シールド", "BoneShield.gif", 0, 0,
ITEM_ARMOR, "エルブン シールド", "ES.gif", 6, 0,
ITEM_ARMOR, "レッド ナイト シールド", "RKS.gif", 6, 0,
ITEM_ARMOR, "マジック ブック", "IntBook.gif", 4, 0,
ITEM_ARMOR, "リフレクション シールド", "SoR.gif", 4, 0,
ITEM_ARMOR, "エヴァのシールド", "EvaShield.gif", 4, 0,
// マント
ITEM_ARMOR, "インビジビリティ クローク", "COI.gif", 4, 0,
ITEM_ARMOR, "マジック クローク", "COMR.gif", 4, 0,
ITEM_ARMOR, "プロテクションクローク", "COP.gif", 4, 0,
ITEM_ARMOR, "エルブン クローク", "EC.gif", 6, 0,
ITEM_ARMOR, "シルバー マント", "SilverMant.gif", 4, 0,
ITEM_ARMOR, "マナ マント", "ManaMant.gif", 4, 0,
ITEM_ARMOR, "ダーク マント", "DarkMant.gif", 4, 0,
ITEM_ARMOR, "アント クイーン シルバー ウィング", "SWOAQ.gif", 4, 0,
ITEM_ARMOR, "アント クイーン ゴールデン ウィング", "GWOAQ.gif", 4, 0,
// グローブ
ITEM_ARMOR, "グローブ", "Gloves.gif", 4, 0,
ITEM_ARMOR, "アイアン グローブ", "IronGloves.gif", 4, 0,
ITEM_ARMOR, "パワー グローブ", "PowerGloves.gif", 4, 0,
ITEM_ARMOR, "クリスタル グローブ", "CGloves.gif", 4, 0,
ITEM_ARMOR, "デーモン グローブ", "DemonGloves.gif", 4, 0,
ITEM_ARMOR, "デスナイト グローブ", "DKGloves.gif", 4, 0,
ITEM_ARMOR, "カーツ グローブ", "KartzGloves.gif", 4, 0,
ITEM_ARMOR, "ダーク グローブ", "DGloves.gif", 4, 0,
// ブーツ
ITEM_ARMOR, "アイアン ブーツ", "IronBoots.gif", 4, 0,
ITEM_ARMOR, "デーモン ブーツ", "DemonBoots.gif", 4, 0,
ITEM_ARMOR, "デスナイト ブーツ", "DKBoots.gif", 4, 0,
ITEM_ARMOR, "カーツ ブーツ", "KartzBoots.gif", 4, 0,
ITEM_ARMOR, "シャドウ ブーツ", "ShadowBoots.gif", 4, 0,

// ***** 武器 *****
ITEM_WEAPON, "レイピア", "Rapier.gif", 6, 0,
ITEM_WEAPON, "ベレス スタッフ", "BelethStaff.gif", 0, 0,
ITEM_WEAPON, "バフォメット スタッフ", "BaphometStaff.gif", 0, 0,
ITEM_WEAPON, "デーモン スタッフ", "DemonStaff.gif", 0, 0,
ITEM_WEAPON, "メイルブレイカー", "MailBreaker.gif", 6, 0,
ITEM_WEAPON, "シルバー ロング ソード", "SLS.gif", 6, 0,
ITEM_WEAPON, "刀", "Katana.gif", 6, 0,
ITEM_WEAPON, "ツルギ", "Tsurugi.gif", 6, 0,
ITEM_WEAPON, "マナ スタッフ", "Staff.gif", 6, 0,
ITEM_WEAPON, "フォース スタッフ", "Staff.gif", 6, 0,
ITEM_WEAPON, "ダークネス デュアル ブレード", "DarkDB.gif", 6, 0,
ITEM_WEAPON, "ブラインド デュアル ブレード", "BlindDB.gif", 6, 0,
ITEM_WEAPON, "エルブン スピアー", "ESP.gif", 6, 0,
ITEM_WEAPON, "ベクド コルバン", "Bec.gif", 6, 0,
ITEM_WEAPON, "ダークネス クロウ", "DClaw.gif", 6, 0,
ITEM_WEAPON, "ハンターボウ", "HunterBow.gif", 6, 0,
ITEM_WEAPON, "クロスボウ", "Crossbow.gif", 6, 0,
ITEM_WEAPON, "ロングボウ", "LongBow.gif", 6, 0,
ITEM_WEAPON, "エンシェントボーガン", "AncientBowgun.gif", 6, 0,
ITEM_WEAPON, "サイハの弓", "SayhaBow.gif", 6, 0,

// ***** ゴミ *****
ITEM_OTHER, "武器強化: スクロール", "mail.gif", 0, 0,
ITEM_OTHER, "古代の: スクロール", "mail.gif", 0, 0,
ITEM_OTHER, "防具強化: スクロール", "mail.gif", 0, 0,
ITEM_OTHER, "オペイク ポーション", "BlindPot.gif", 0, 0
);

// Msg群
var MSG001 = "を選択しました。対象アイテムを選択してください。";
var MSG002W = "が一瞬蒼く光りました。";
var MSG002A = "が一瞬 銀色に光ります。";
var MSG003W = "がチラッと 蒼色に 光ります。";
var MSG003A = "がチラッと 銀色に 光ります。";
var MSG004W = "がしばらく強烈に蒼く光り、蒸発してなくなりました。";
var MSG004A = "が強烈に 銀色に光ったあと、蒸発してなくなりました。";
var MSG005 = "がしばらく強烈に光ったが、幸い無事にすみました。";
var MSG006 = "何も起きませんでした。";
var MSG007 = "が一瞬 黒く 光ります。";
var MSG099 = "をゴミ箱へ捨てました。";

var SelectItem;	// 選択アイテムのIndex
// アイテムデータ - ItemID, ItemCount
var arItems = new Array(0);

// Blessed enchant table
var bEnchantTbl = new Array(
1, 1, 2, 2, 3, 3,	// 0
1, 1, 2, 2, 3, 3,	// 1
1, 1, 2, 2, 3, 3,	// 2
1, 1, 1, 2, 2, 2,	// 3
1, 1, 1, 2, 2, 2,	// 4
1, 1, 1, 2, 2, 2,	// 5
1, 1, 1, 1, 1, 1	// 6-
);

function GetItemName(Value, Name)
{
	var Num = ((Value >= 0) ? '+': '') + Value;
	var Ret = Num + " " + Name;
	return Ret;
}

// 更新
function Update()
{
	for (I = 0; I < MAX_ITEM; I++) {
		UpdateAlt(I);
	}
}
function UpdateAlt(Index)
{
	var TblIndex = arItems[Index*2];
	var objTgt = document.getElementById('ItemBox' + (Index+1));
	if (TblIndex != -1) {
		TblIndex *= 5;
		objTgt.src = IMG_DIR + arItemTbl[TblIndex+2];
		if (arItemTbl[TblIndex] == ITEM_SCROLL) {
			objTgt.alt = arItemTbl[TblIndex+1] + '\n使用回数: ' + arItemTbl[TblIndex+4];
		}
		else if (arItemTbl[TblIndex] == ITEM_OTHER) {
			objTgt.alt = arItemTbl[TblIndex+1] + '\nクリックでゴミ箱へ...';
		}
		else {
			objTgt.alt = GetItemName(arItems[Index*2+1], arItemTbl[TblIndex+1]) + '\n蒸発回数: ' + arItemTbl[TblIndex+4];
		}
	}
	else {
		objTgt.src = IMG_DIR + 'blank.gif';
		objTgt.alt = '';
	}
}

// エンチャント判定
function Enchant(Src, Dest)
{
	var SrcIndex = arItems[Src * 2] * 5;
	var DestIndex = arItems[Dest * 2] * 5;
	var MaxSafeEnchant = arItemTbl[DestIndex + 3];
	var CurrentEnchant = arItems[Dest * 2 + 1];
	switch(arItemTbl[SrcIndex + 3]) {
	case SELECT_ZEL:
		if (arItemTbl[DestIndex] != ITEM_ARMOR) {ItemNone();return;}
		if (MaxSafeEnchant <= CurrentEnchant) {
			// OE
			var OEVal = CurrentEnchant;
			if (MaxSafeEnchant == 0) OEVal += 2;
			if (Math.floor(Math.random() * OEVal)) {
				// ENE
				ItemEnd(Dest);
				break;
			}
			// +9over check
			if (CurrentEnchant >= 9) {
				if (Math.floor(Math.random() * 2)) {
					ItemUnchange(Dest);
					break;
				}
			}
		}
		ItemChange(Dest, 1);
		break;
	case SELECT_DAI:
		if (arItemTbl[DestIndex] != ITEM_WEAPON) {ItemNone();return;}
		if (MaxSafeEnchant <= CurrentEnchant) {
			// OE
			if (Math.floor(Math.random() * 3)) {
				// ENE
				ItemEnd(Dest);
				break;
			}
			// +9over check
			if (CurrentEnchant >= 9) {
				if (Math.floor(Math.random() * 2)) {
					ItemUnchange(Dest);
					break;
				}
			}
		}
		ItemChange(Dest, 1);
		break;
	case SELECT_bZEL:
		if (arItemTbl[DestIndex] != ITEM_ARMOR) {ItemNone();return;}
		if (MaxSafeEnchant <= CurrentEnchant) {
			// OE
			var OEVal = CurrentEnchant;
			if (MaxSafeEnchant == 0) OEVal += 2;
			if (Math.floor(Math.random() * OEVal)) {
				// ENE
				ItemEnd(Dest);
				break;
			}
			// +9over check
			if (CurrentEnchant >= 9) {
				if (Math.floor(Math.random() * 2)) {
					ItemUnchange(Dest);
					break;
				}
			}
		}
		var TblRef = CurrentEnchant < 0 ? 0: CurrentEnchant;
		var AddCount = bEnchantTbl[((TblRef > 6) ? 6: TblRef) * 6 + Math.floor(Math.random() * 6)];
		ItemChange(Dest, AddCount);
		break;
	case SELECT_bDAI:
		if (arItemTbl[DestIndex] != ITEM_WEAPON) {ItemNone();return;}
		if (MaxSafeEnchant <= CurrentEnchant) {
			// OE
			if (Math.floor(Math.random() * 3)) {
				// ENE
				ItemEnd(Dest);
				break;
			}
			// +9over check
			if (CurrentEnchant >= 9) {
				if (Math.floor(Math.random() * 2)) {
					ItemUnchange(Dest);
					break;
				}
			}
		}
		var TblRef = CurrentEnchant < 0 ? 0: CurrentEnchant;
		var AddCount = bEnchantTbl[((TblRef > 6) ? 6: TblRef) * 6 + Math.floor(Math.random() * 6)];
		ItemChange(Dest, AddCount);
		break;
	case SELECT_cZEL:
		if (arItemTbl[DestIndex] != ITEM_ARMOR) {ItemNone();return;}
		if (-6 >= CurrentEnchant) {
			// OE
			var OEVal = Math.abs(CurrentEnchant);
			if (Math.floor(Math.random() * OEVal)) {
				// ENE
				ItemEnd(Dest);
				break;
			}
		}
		ItemChange(Dest, -1);
		break;
	case SELECT_cDAI:
		if (arItemTbl[DestIndex] != ITEM_WEAPON) {ItemNone();return;}
		if (-6 >= CurrentEnchant) {
			// OE
			if (Math.floor(Math.random() * 3)) {
				// ENE
				ItemEnd(Dest);
				break;
			}
			// -9over check
			if (CurrentEnchant <= -9) {
				if (Math.floor(Math.random() * 2)) {
					ItemUnchange(Dest);
					break;
				}
			}
		}
		ItemChange(Dest, -1);
		break;
	}
	arItemTbl[SrcIndex + 4]++;
	//いちいち選択しなおすの面倒なのでコメントアウト
	// SelectItem = SELECT_NONE;
}

function ItemEnd(Index)
{
	var ItemName = GetItemName(arItems[Index*2+1], arItemTbl[arItems[Index*2]*5+1]);
	if (arItemTbl[arItems[Index*2]*5] == ITEM_ARMOR) {
		OutputMsg(ItemName + MSG004A);
	}
	else {
		OutputMsg(ItemName + MSG004W);
	}
	arItemTbl[arItems[Index*2]*5+4]++;
	DeleteItem(Index);
}
// 変化なし
function ItemUnchange(Index)
{
	OutputMsg(GetItemName(arItems[Index*2+1], arItemTbl[arItems[Index*2]*5+1]) + MSG005);
}

function ItemChange(Index, Add)
{
	var ItemName = GetItemName(arItems[Index*2+1], arItemTbl[arItems[Index*2]*5+1]);
	switch (Add) {
	case 1:
		OutputMsg(ItemName + ((arItemTbl[arItems[Index*2]*5] == ITEM_ARMOR) ? MSG002A: MSG002W));
		break;
	case -1:
		OutputMsg(ItemName + MSG007);
		break;
	case 2:
	case 3:
		OutputMsg(ItemName + ((arItemTbl[arItems[Index*2]*5] == ITEM_ARMOR) ? MSG003A: MSG003W));
	}
	arItems[Index*2+1]+= Add;
}

function ItemNone()
{
	OutputMsg(MSG006);
}

function OutputMsg(Msg)
{
	var Output = document.getElementById('OutMsg').innerHTML;
	if (Output.length > 280) {
		Output = Output.substring(Output.length-280, Output.length);
	}
	document.getElementById('OutMsg').innerHTML = Output + '<br>' + Msg;
	window.status = Msg;
}

function Click(Index)
{
	if (arItemTbl[arItems[Index*2]*5] == ITEM_SCROLL) {
		// Selected enchant scroll
		SelectItem = Index;
		OutputMsg(arItemTbl[arItems[Index*2]*5+1] + MSG001);
	}
	else if (arItemTbl[arItems[Index*2]*5] == ITEM_OTHER) {
		OutputMsg(arItemTbl[arItems[Index*2]*5+1] + MSG099);
		DeleteItem(Index);
	}
	else if (SelectItem != SELECT_NONE) {
		// Enchant!
		Enchant(SelectItem, Index);
		UpdateAlt(SelectItem);
		UpdateAlt(Index);
	}
}

// あぁ無常･･･
function DeleteItem(Index)
{
	if (SelectItem > Index) {
		SelectItem--;
	}
	for (I = Index; I < (MAX_ITEM-1); I++) {
		arItems[I*2] = arItems[(I+1)*2];
		arItems[I*2+1] = arItems[(I+1)*2+1];
	}
	arItems[I*2] = -1;
	arItems[I*2+1] = 0;
	Update();
}

function AddItem(ItemIndex)
{
	for (I = 0; I < MAX_ITEM; I++) {
		if (arItems[I*2] == -1) {
			arItems[I*2] = ItemIndex;
			break;
		}
	}
}


// 初期化
function Reset()
{
	SelectItem = SELECT_NONE;
	// アイテム欄初期化
	for (I = 0; I < MAX_ITEM; I++) {
		arItems[I*2] = -1;
		arItems[I*2+1] = 0;
	}
	// 蒸発回数、使用枚数初期化
	for (I = 0; I < arItemTbl.length; I += 5) {
		arItemTbl[I + 4] = 0;
	}
	for (I = 0; I < DefaultItem.length; I++) {
		arItems[I*2] = DefaultItem[I];	
	}
	Update();
}

// 初期表示時
function init()
{
	Reset();
}


function ScrollChg()
{
	Ypos = event.y+document.body.scrollTop - 154;
	var Pos = Math.floor(Ypos/13);
	ScrollPos.style.top = 154+Pos*13;
	ItemList.style.top = 130 - Pos*34;
	ItemList.style.clip = "rect("+  Pos * 34 +",auto,"+ (272 + Pos * 34) +",auto)";
}

function ItemDrop()
{
	if (Math.floor(Math.random() * 5)) {
		BGSound.src = MEDIA_DIR + '88.wav';
	}
	else {
		BGSound.src = MEDIA_DIR + '89.wav';
		DropItem("デス ナイト");
		DropItem("デス ナイト");
		DropItem("デス ナイト");
		Update();
	}
}

function DropItem(Name)
{
	var ItemCount = arItemTbl.length / 5;
	var Item = Math.floor(Math.random() * ItemCount);
	if (arItemTbl[Item*5] != ITEM_SCROLL) {
		OutputMsg(Name + "が" + arItemTbl[Item*5+1] + "をくれました。");
		AddItem(Item);
	}
}
