
function stopSubmit() {
	return false;
}

function ucFirst (s) {
	s = s.substr(0, 1).toUpperCase() + s.substr(1);
	return s;
}

function rolld6 (dice) {
	var rollTotal = 0
	for (var i=0; i < dice; i++) {
		var randRoll = Math.random();
		randRoll = randRoll * 6;
		randRoll = Math.ceil(randRoll);
		rollTotal += randRoll;
	}
	return rollTotal
}

function genRandLoot (mod) {

	mod = parseInt(mod);
	
// On a roll of
// 2 - artifact (double buff result)
// 3-6 - Magic item
// 7-9 - Mundane Armor
// 10-11 - sellable trinkets worth 1d x 100
// 12-13 - Coin worth 1d x 10
// 14-16 - Mundane Weapon
// 17-18
// 19 - Cursed Item (double curse result)

	var lootType = new Object;
	lootType[1] = "artifact";
	lootType[2] = "artifact";
	lootType[3] = "magic";
	lootType[4] = "coin100";
	lootType[5] = "magic";
	lootType[6] = "magic";
	lootType[7] = "misc";
	lootType[8] = "weapon";
	lootType[9] = "armor";
	lootType[10] = "weapon";
	lootType[11] = "coin10";
	lootType[12] = "misc";
	lootType[13] = "armor";
	lootType[14] = "weapon";
	lootType[15] = "misc";
	lootType[16] = "coin";
	lootType[17] = "cursed";
	lootType[18] = "cursed";
	lootType[19] = "cursed artifact";

	var type = lootType[rolld6(3)+mod];
	var buffMultiplier = 0;
	if ( type == 'artifact' ) {
		buffMultiplier = 2;
		itemBuff = genItemBuff(2, 'weapon');
	} else if ( type == 'magic' ) {
		buffMultiplier = 1;

		itemBuff = genItemBuff(1);
	} else if ( type == 'cursed' ) {
		buffMultiplier = -1;

		itemBuff = genItemBuff(-1);
	} else if ( type == 'cursed artifact' ) {
		buffMultiplier = -2;

		itemBuff = genItemBuff(-2);
	}

	var itemBuff = '';
	if (buffMultiplier != 0 ) {
		type = genItemType();
		itemBuff = ' of ' + genItemBuff(buffMultiplier, type);
	}

	var typeDesc = type;
	if ( type == 'armor' ) {
		typeDesc = genArmor(mod);
	} else if ( type == 'weapon' ) {
		typeDesc = genWeapon(mod);
	} else if ( type == 'misc' ) {
		typeDesc = genMisc(mod);
	} else if ( type == 'coin' ) {
		var value = Math.ceil(Math.random()*100);
		if ( copperCoins <= 0 ) copperCoins = 1;
		typeDesc = value + " copper coins";
	} else if ( type == 'coin10' ) {
		var silverCoins = Math.ceil(Math.random()*100);
		var copperCoins = Math.ceil(Math.random()*100);
		if ( silverCoins <= 0 ) silverCoins = 1;
		if ( copperCoins <= 0 ) copperCoins = 1;
		typeDesc = silverCoins + " silver and "+copperCoins+" copper coins";
	} else if ( type == 'coin100' ) {
		var goldCoins = Math.ceil(Math.random()*6) - mod;
		var silverCoins = Math.ceil(Math.random()*100);
		var copperCoins = Math.ceil(Math.random()*100);
		if ( goldCoins <= 0 ) goldCoins = 1;
		if ( silverCoins <= 0 ) silverCoins = 1;
		if ( copperCoins <= 0 ) copperCoins = 1;
		typeDesc = goldCoins + " gold and " + silverCoins + " silver coins";
	}

	return ucFirst(typeDesc) + itemBuff;
}


function genArmor (mod) {

// To determine the type of armor:
// 1-2 Chest
// 3 - Helm
// 4 - Leggings or Arms
// 5 - Boots
// 6 - Gloves

	var armorType = new Object;
	armorType[1] = "chest";
	armorType[2] = "chest";
	armorType[3] = "helm";
	armorType[4] = "limb armor";
	armorType[5] = "boots";
	armorType[6] = "gloves";
	
	var type = armorType[rolld6(1)];
	if ( type == 'limb armor' ) {
		var limbRoll = rolld6(1);
		if ( limbRoll % 2 )
			type = 'leggings';
		else
			type = 'sleeves';
	}
	
// To determine the DR of the armor:
// Roll 1d6, that's the DR

	var armorDesc = new Object;
	armorDesc[0] = "clothing";
	armorDesc[1] = "cloth";
	armorDesc[2] = "leather";
	armorDesc[3] = "light scale";
	armorDesc[4] = "scale";
	armorDesc[5] = "scale";
	armorDesc[6] = "plate";
	armorDesc[7] = "plate";
	armorDesc[8] = "heavy plate";

// No such thing in basic as DR 5 really
	var armorDr = rolld6(1) - mod;
	if (armorDr == 5) armorDr = 4;
	if (armorDr == 7) armorDr = 6;

	return genQuality(mod)+armorDesc[armorDr]+" "+type+" (DR "+armorDr+")";
}


function genQuality (mod) {
// To determine the quality of a weapon or armor: (modified by NPC type)
// 0 - Very Fine
// 1 - Fine
// 2-4 Good
// 5-6 Cheap
// 7 Broken

	var itemQuality = new Object;
	itemQuality[-1] = "Very Fine ";
	itemQuality[0] = "Fine ";
	itemQuality[1] = "Fine ";
	itemQuality[2] = "";
	itemQuality[3] = "";
	itemQuality[4] = "";
	itemQuality[5] = "Cheap ";
	itemQuality[6] = "Cheap ";
	itemQuality[7] = "Broken ";
	
	return itemQuality[rolld6(1)+mod];
}


function genWeapon(mod) {

// Type of Weapon:
// Roll 2d6
// 2 - Two-Handed Sword or Axe or Polearm
// 3 - Shield
// 4 - Broadsword
// 5 - Axe
// 6 - Short Sword
// 7 - Spear
// 8 - Staff
// 9 - Knife
// 10 - Bow
// 11 - Fist Weapon
// 12 - Club

	var weaponType = new Object;
	weaponType[0] = 'Rapier';
	weaponType[1] = 'Two-Handed Sword';
	weaponType[2] = 'Two-Handed Axe';
	weaponType[3] = 'Shield';
	weaponType[4] = 'Broadsword';
	weaponType[5] = 'Axe';
	weaponType[6] = 'Short Sword';
	weaponType[7] = 'Spear';
	weaponType[8] = 'Staff';
	weaponType[9] = 'Large Knife';
	weaponType[10] = 'Bow';
	weaponType[11] = 'Small Knife';
	weaponType[12] = 'Club';
	weaponType[13] = 'Net';

	var type = weaponType[rolld6(2)+mod];
	if ( type == 'Shield' ) {
		var shieldRoll = rolld6(1)+mod;
		if ( shieldRoll == 7 ) {
			type = 'Light Wooden Buckler';
		} else if ( shieldRoll == 6 ) {
			type = 'Small Wooden Buckler';
		} else if ( shieldRoll == 5 ) {
			type = 'Small Wooden Shield';
		} else if ( shieldRoll == 4 ) {
			type = 'Small Iron Shield';
		} else if ( shieldRoll == 3) {
			type = 'Medium Wooden Shield';
		} else if ( shieldRoll == 2 ) {
			type = 'Medium Iron Shield';
		} else if ( shieldRoll == 1 ) {
			type = 'Spiked Medium Iron Shield';
		} else if ( shieldRoll == 0 ) {
			type = 'Large Iron Shield';
		} else if ( shieldRoll == -1 ) {
			type = 'Spiked Large Iron Shield';
		}
	}

	return genQuality(mod)+type;
}


function genItemType() {
// To determine the type of magic item, roll 1d:
// 1 - Ring/Amulet
// 2-3 - Weapon
// 4-5 - Armor
// 6 - One use scroll or potion

	var magicItemType = new Object;
	magicItemType[1] = 'jewelry';
	magicItemType[2] = 'weapon';
	magicItemType[3] = 'weapon';
	magicItemType[4] = 'armor';
	magicItemType[5] = 'armor';
	magicItemType[6] = 'potion';

	return magicItemType[rolld6(1)];
}

function genItemBuff(multiplier, type) {
	var bonus = 1;
	var buff = genBuff();
	while ( buff == 'roll again' ) {
		bonus++;
		buff = genBuff();
	}
	var plus="+";
	if ( multiplier < 0 ) { plus = ""; }
	if ( buff == 'dr/dmg' ) {
		if ( type == 'weapon' ) 
			buff = 'damage';
		else
			buff = 'dr';
	}
	
	return buff + " " + plus + (bonus*multiplier);
}

function genBuff() {
// To determine the magic item's effect:
// (roll 2d6)
// 2 - Roll again, adding +1 to the result
// 3 - Speed +1
// 4 - DX +1
// 5 - IQ +1
// 6 - HT +1
// 7 - ST +1
// 8 - Armor DR +1 or Weapon Dmg +1
// 9 - Move +1
// 10 - Will +1
// 11 - Perc +1
// 12 - HP +1

	var itemBuff = new Object;
	itemBuff[2] = 'roll again';
	itemBuff[3] = 'Speed';
	itemBuff[4] = 'DX';
	itemBuff[5] = 'IQ';
	itemBuff[6] = 'HT';
	itemBuff[7] = 'ST';
	itemBuff[8] = 'dr/dmg';
	itemBuff[9] = 'Move';
	itemBuff[10] = 'Will';
	itemBuff[11] = 'Perc';
	itemBuff[12] = 'HP';
	
	return itemBuff[rolld6(2)];
}

function genMisc(mod) {
// -1 - jewelery worth 1d*1000
// 0 - gems worth 3d*100
// 1 - gems worth 1d*100
// 2 - trinkets worth 1d*10
// 3 - random quality rations
// 4 - 1d * 50 feet of rope
// 5 - 1d torches
// 6 - human skull
// 7 - assorted animal bones

	var miscRoll = rolld6(1) + mod;
	if ( miscRoll == -1 ) {
		return 'jewelery worth '+(rolld6(1)+1)*10+' gold';
	} else if ( miscRoll == 0 ) {
		return 'cut gems worth '+rolld6(3)+ ' gold';
	} else if ( miscRoll == 1 ) {
		return 'uncut gems worth '+rolld6(1)+' gold';
	} else if ( miscRoll == 2 ) {
		return 'trinkets worth '+Math.ceil(Math.random()*10)+' silver';
	} else if ( miscRoll == 3 ) {
		var rationQuality = genQuality(mod);
		if ( rationQuality == 'Broken ' ) rationQuality = 'Spoiled ';
		return rolld6(1) + ' ' + rationQuality + 'rations';
	} else if ( miscRoll == 4 ) {
		return rolld6(1)*50 + ' ft of rope';
	} else if ( miscRoll == 5 ) {
		return rolld6(1) + ' torches';
	} else if ( miscRoll == 6 ) {
		return ' small leather pouch';
	} else if ( miscRoll == 7 ) {
		return rolld6(2) + ' gnawed animal bones';
	}
}

function genDelverItem() {
	var delverItems = new Array;
	delverItems.push("Backpack, Frame");
	delverItems.push("Backpack, Small");
	delverItems.push("Blanket");
	delverItems.push("Canteen");
	delverItems.push("Fishhooks and Line");
	delverItems.push("Group Basics");
	delverItems.push("Personal Basics");
	delverItems.push("Pouch or Purse");
	delverItems.push("2d6 Rations");
	delverItems.push("Sleeping Fur");
	delverItems.push("Sundial, Miniature");
	delverItems.push("Tent, 1-Man");
	delverItems.push("Tent, 2-Man");
	delverItems.push("Tent, 4-Man");
	delverItems.push("Tent, 20-Man");
	delverItems.push("Wineskin");
	delverItems.push("Hip Quiver");
	delverItems.push("Hip Quiver, Large");
	delverItems.push("Lanyard, Chain");
	delverItems.push("Lanyard, Leather");
	delverItems.push("Shoulder Quiver");
	delverItems.push("Whetstone");
	delverItems.push("Barrel");
	delverItems.push("Bottle");
	delverItems.push("Bottle, Small");
	delverItems.push("Bucket");
	delverItems.push("Chest, Wooden");
	delverItems.push("Sack");
	delverItems.push("Strongbox, Iron");
	delverItems.push("Vial, Crystal");
	delverItems.push("1d6 Candles, Beeswax");
	delverItems.push("Candle, Tallow");
	delverItems.push("Lantern");
	delverItems.push("Lantern Oil");
	delverItems.push("1d6 Torches");
	delverItems.push("Medical Gear");
	delverItems.push("Bandages");
	delverItems.push("First Aid Kit");
	delverItems.push("Litter");
	delverItems.push("Surgical Instruments");
	delverItems.push("1d6 yds of Cord, 3/16 inch");
	delverItems.push("Iron Spike");
	delverItems.push("Ladder, 10 ft.");
	delverItems.push("Pole, 6ft");
	delverItems.push("Pole, 10ft");
	delverItems.push("1d6x10 ft of Rope, 3/8 inch thick");
	delverItems.push("2d6x10 ft of Rope, 3/4 inch thick");
	delverItems.push("Drum");
	delverItems.push("Harp");
	delverItems.push("Horn");
	delverItems.push("Whistle");
	delverItems.push("Woodwind");
	delverItems.push("Balance and Weights");
	delverItems.push("Crowbar");
	delverItems.push("File");
	delverItems.push("Hatchet");
	delverItems.push("Mallet");
	delverItems.push("Pickaxe");
	delverItems.push("Saw");
	delverItems.push("Shovel");
	delverItems.push("Tool Kit, Backpack (Skill Type)");
	delverItems.push("Wheelbarrow");
	delverItems.push("Writing Equipment");
	delverItems.push("Paper, 20 Sheets");
	delverItems.push("Scribe's Kit");
	delverItems.push("Anti-Garrote Collar");
	delverItems.push("Delver's Webbing");
	delverItems.push("Helmet Lamp");
	delverItems.push("Potion Belt");
	delverItems.push("Quick-Release Backpack");
	delverItems.push("Alchemist's Matches");
	delverItems.push("Compass");
	delverItems.push("Dwarven Rations");
	delverItems.push("1d6 Elven Rations");
	delverItems.push("Timed Candle");
	delverItems.push("Bandoleer");
	delverItems.push("Crossbow Rest");
	delverItems.push("Crossbow Sight");
	delverItems.push("Crossbow Sling");
	delverItems.push("Dwarven Whetstone");
	delverItems.push("Bit and Brace");
	delverItems.push("Caltrops");
	delverItems.push("Climbing Spikes");
	delverItems.push("Disguise Kit");
	delverItems.push("Giant Spider Silk Cord");
	delverItems.push("Grapnel");
	delverItems.push("Lockpicks");
	delverItems.push("Nageteppo, Flash");
	delverItems.push("Nageteppo, Smoke");
	delverItems.push("Portable Ladder, 30 ft.");
	delverItems.push("Portable Ram");
	delverItems.push("Shackles");
	delverItems.push("Snorkel");
	delverItems.push("Spy's Horn");
	delverItems.push("Traps");
	delverItems.push("Backpack Alchemy Lab");
	delverItems.push("Holy Symbol");
	delverItems.push("Holy Symbol, Blessed");
	delverItems.push("Holy Symbol, High");
	delverItems.push("Holy Water");
	delverItems.push("Manual (Lore Skill)");
	delverItems.push("Map");
	delverItems.push("Tome (Lore Skill)");
	delverItems.push("Bull's Eye Lantern");
	delverItems.push("Burning Glass");
	delverItems.push("Corrective Spectacles");
	delverItems.push("Mirror");
	delverItems.push("Telescope");
	delverItems.push("Tinted Goggles");
	delverItems.push("Alchemist's Fire (Grenade)");
	delverItems.push("Glow Vial (Utility)");
	delverItems.push("Anti-Toxin (Drinkable)");
	delverItems.push("Garlic (Bundle)");
	delverItems.push("Wolfsbane (Bundle)");
	delverItems.push("Bladeblack (Utility)");
	delverItems.push("Demon's Brew (Grenade)");
	delverItems.push("Monster Drool (Utility)");
	delverItems.push("Oozing Doom (Grenade)");
	delverItems.push("Agility Potion (Drinkable)");
	delverItems.push("Alchemical Antidote (Drinkable)");
	delverItems.push("Alkahest (Grenade)");
	delverItems.push("Balm of Regeneration (Drinkable)");
	delverItems.push("Death Potion (Grenade)");
	delverItems.push("Fire Resistance Potion (Drinkable)");
	delverItems.push("Flight Potion (Drinkable)");
	delverItems.push("Great Healing Potion (Drinkable)");
	delverItems.push("Invisibility Potion (Drinkable)");
	delverItems.push("Invulnerability Potion (Drinkable)");
	delverItems.push("Liquid Ice (Grenade)");
	delverItems.push("Magebane (Grenade)");
	delverItems.push("Magic Resistance Potion (Drinkable)");
	delverItems.push("Major Healing Potion (Drinkable)");
	delverItems.push("Minor Healing Potion (Drinkable)");
	delverItems.push("Paut (Drinkable)");
	delverItems.push("Perception Potion (Drinkable)");
	delverItems.push("Sleep Potion (Grenade)");
	delverItems.push("Speed Potion (Drinkable)");
	delverItems.push("Strength Potion (Drinkable)");
	delverItems.push("Thieves' Oil (Utility)");
	delverItems.push("True Water (Utility)");
	delverItems.push("Universal Antidote (Drinkable)");
	delverItems.push("Weakness Potion (Grenade)");
	delverItems.push("Wisdom Potion (Drinkable)");

	var itemInd = Math.floor(Math.random() * delverItems.length);
	return delverItems[itemInd];
}
