/* Beware! This code is the result of 4 days of hacking. */
/* It is not very good, but it does it's job. */

function ShowHide (id) {
	var i = null;

	if (document.getElementById) {
		i = document.getElementById(id);
	} else if (document.all) {
		i = document.all[id];
	} else if (document.layers) {
		i = document.layers[id];
	}

	if (!i) {
		// do nothing
	} else if (i.style) {
		if (i.style.display == "none") {
			i.style.display = "";
		} else {
			i.style.display = "none";
		}
	} else {
		i.visibility = "show";
	}
}

function round (x, s) {
	if (s < 1 || s > 14) return false;

	var e = Math.pow(10, s);
	var k = (Math.round(x * e) / e).toString();

	if (k.indexOf('.') == -1) k += '.';
	k += e.toString().substring(1);
	return k.substring(0, k.indexOf('.') + s + 1);
}

function bsort (factor) {
	for (var i = 0; i <= factor.length; i++) {
		for (var j = i + 1; j <= factor.length + 1; j++) {
			if (factor[j] < factor[i]) {
				var z = factor[j];
				factor[j] = factor[i];
				factor[i] = z;
			}
		}
	}
	
	return factor;
}

function die_modifiers (d1, d2) {
	if (d1 == "0" || d2 == "0") return 0;

	else if (d1 == "d4"  && d2 == "d4" ) return 1.5;
	else if (d1 == "d4"  && d2 == "d6" ) return 2;
	else if (d1 == "d4"  && d2 == "d8" ) return 2.5;
	else if (d1 == "d4"  && d2 == "d10") return 3;
	else if (d1 == "d4"  && d2 == "d12") return 3.5;

	else if (d1 == "d6"  && d2 == "d4" ) return 2.5;
	else if (d1 == "d6"  && d2 == "d6" ) return 3;
	else if (d1 == "d6"  && d2 == "d8" ) return 3.5;
	else if (d1 == "d6"  && d2 == "d10") return 4;
	else if (d1 == "d6"  && d2 == "d12") return 4.5;
	
	else if (d1 == "d8"  && d2 == "d4" ) return 3.5;
	else if (d1 == "d8"  && d2 == "d6" ) return 4;
	else if (d1 == "d8"  && d2 == "d8" ) return 4.5;
	else if (d1 == "d8"  && d2 == "d10") return 5;
	else if (d1 == "d8"  && d2 == "d12") return 5.5;
	
	else if (d1 == "d10" && d2 == "d4" ) return 4.5;
	else if (d1 == "d10" && d2 == "d6" ) return 5;
	else if (d1 == "d10" && d2 == "d8" ) return 5.5;
	else if (d1 == "d10" && d2 == "d10") return 6;
	else if (d1 == "d10" && d2 == "d12") return 6.5;
	
	else if (d1 == "d12" && d2 == "d4" ) return 5.5;
	else if (d1 == "d12" && d2 == "d6" ) return 6;
	else if (d1 == "d12" && d2 == "d8" ) return 6.5;
	else if (d1 == "d12" && d2 == "d10") return 7;
	else if (d1 == "d12" && d2 == "d12") return 7.5;
	
	else return 0;
}

function magic_modifiers (d1) {
	if (d1 == "d1") return 0;

	else if (d1 == "d4" ) return 0.67;
	else if (d1 == "d6" ) return 1;
	else if (d1 == "d8" ) return 1.33;
	else if (d1 == "d10") return 1.67;
	else if (d1 == "d12") return 2;
	
	else return 0;
}

function secondary_weapon () {
	var second_weapon__ = document.ares.second_weapon_.checked;
	var secondary_attack__ = document.ares.secondary_attack_.checked;

	if (second_weapon__ == true && secondary_attack__ == false ) {
		document.ares.secondary_attack_.checked = true;
		alert("Secondary Attack x1.5 is needed for this option and was enabled.");
	}
	else if (second_weapon__ == false && secondary_attack__ == true ) {
		alert("Note: Secondary Attack x1.5 is not disabled.");
	}
}

function calculate () {
	/* note: */
	/* instead of "document.ares.name_.value" "document.getElementById('name_').value" */
	/* can be used too, but that command is only implemented on browsers released */
	/* in 2005 or later, so i'll better stick with that old implementation */
	/* note: use .checked instead of .value on checkboxes to get state */

	/* main values */
	var name = document.ares.name_.value;
	var wounds = parseInt(document.ares.wounds_.value);
	var movement = parseInt(document.ares.movement_.value);
	var moral = parseInt(document.ares.moral_.value);
	var armor = document.ares.armor_.value;
	var close_combat = document.ares.close_combat_.value;
	var range_combat = document.ares.range_combat_.value;
	var weapon1 = document.ares.weapon_1.value;
	var range_weapon1 = parseInt(document.ares.range_weapon_1.value);
	var range_weapon2 = document.ares.range_weapon_2.value;
	var magic = document.ares.magic_.value;
	
	/* armor modifiers */
	var shield = document.ares.shield_.checked;
	var magic_resistance = document.ares.magic_resistance_.checked;
	
	if (shield == true) shield = 1; else shield = 0;
	if (magic_resistance == true) magic_resistance = 0.25; else magic_resistance = 0;
	
	/* weapon modifiers */
	var second_weapon = document.ares.second_weapon_.checked;
	var weapon2 = document.ares.weapon_2.value;
	
	/* 1st weapon modifiers */
	var magical1 = document.ares.magical_1.checked;
	var polearm1 = document.ares.polearm_1.checked;
	var cumbersome1 = document.ares.cumbersome_1.checked;
	var persistent1 = document.ares.persistent_1.checked;
	var powerful1 = document.ares.powerful_1.checked;
	var tremendous1 = document.ares.tremendous_1.checked;
	var weak1 = document.ares.weak_1.checked;
	
	if (magical1 == true) magical1 = 1.5; else magical1 = 0;
	if (polearm1 == true) polearm1 = 1; else polearm1 = 0;
	if (cumbersome1 == true) cumbersome1 = 0.5; else cumbersome1 = 1;
	if (persistent1 == true) persistent1 = 2; else persistent1 = 1;
	if (powerful1 == true) powerful1 = 2; else powerful1 = 1;
	if (tremendous1 == true) tremendous1 = 3; else tremendous1 = 1;
	if (weak1 == true) weak1 = 0.5; else weak1 = 1;
	
	var weapon_modifiers1 = (cumbersome1 * persistent1 * powerful1 * tremendous1 * weak1);

	/* 2nd weapon modifiers */
	var magical2 = document.ares.magical_2.checked;
	var polearm2 = document.ares.polearm_2.checked;
	var cumbersome2 = document.ares.cumbersome_2.checked;
	var persistent2 = document.ares.persistent_2.checked;
	var powerful2 = document.ares.powerful_2.checked;
	var tremendous2 = document.ares.tremendous_2.checked;
	var weak2 = document.ares.weak_2.checked;
	
	if (magical2 == true) magical2 = 1.5; else magical2 = 0;
	if (polearm2 == true) polearm2 = 1; else polearm2 = 0;
	if (cumbersome2 == true) cumbersome2 = 0.5; else cumbersome2 = 1;
	if (persistent2 == true) persistent2 = 2; else persistent2 = 1;
	if (powerful2 == true) powerful2 = 2; else powerful2 = 1;
	if (tremendous2 == true) tremendous2 = 3; else tremendous2 = 1;
	if (weak2 == true) weak2 = 0.5; else weak2 = 1;
	
	var weapon_modifiers2 = (cumbersome2 * persistent2 * powerful2 * tremendous2 * weak2);

	/* ranged weapon modifiers */
	var magical3 = document.ares.magical_3.checked;
	var polearm3 = document.ares.polearm_3.checked;
	var cumbersome3 = document.ares.cumbersome_3.checked;
	var persistent3 = document.ares.persistent_3.checked;
	var powerful3 = document.ares.powerful_3.checked;
	var tremendous3 = document.ares.tremendous_3.checked;
	var weak3 = document.ares.weak_3.checked;
	
	if (magical3 == true) magical3 = 1.5; else magical3 = 0;
	if (polearm3 == true) polearm3 = 1; else polearm3 = 0;
	if (cumbersome3 == true) cumbersome3 = 0.5; else cumbersome3 = 1;
	if (persistent3 == true) persistent3 = 2; else persistent3 = 1;
	if (powerful3 == true) powerful3 = 2; else powerful3 = 1;
	if (tremendous3 == true) tremendous3 = 3; else tremendous3 = 1;
	if (weak3 == true) weak3 = 0.5; else weak3 = 1;
	
	var weapon_modifiers3 = (cumbersome3 * persistent3 * powerful3 * tremendous3 * weak3);
	
	/* unit modifiers */
	var backstab = document.ares.backstab_.checked;
	var cause_fear = document.ares.cause_fear_.checked;
	var cavalry = document.ares.cavalry_.checked;
	var ethereal = document.ares.ethereal_.checked;
	var fanatic = document.ares.fanatic_.checked;
	var fearless = document.ares.fearless_.checked;
	var ferocious = document.ares.ferocious_.checked;
	var first_strike = document.ares.first_strike_.checked;
	var flyer = document.ares.flyer_.checked;
	var glass_jaw = document.ares.glass_jaw_.checked;
	var group_attack = document.ares.group_attack_.checked;
	var heroic = document.ares.heroic_.checked;
	var hide = document.ares.hide_.checked;
	var individual = document.ares.individual_.checked;
	var keen_senses = document.ares.keen_senses_.checked;
	var leader = document.ares.leader_.checked;
	var leap = document.ares.leap_.checked;
	var missile_resistant = document.ares.missile_resistant_.checked;
	var quick = document.ares.quick_.checked;
	var regenerate = document.ares.regenerate_.checked;
	var scale_m2 = document.ares.scale_m2_.checked;
	var scale_m1 = document.ares.scale_m1_.checked;
	var scale_0 = document.ares.scale_0_.checked;
	var scale_p1 = document.ares.scale_p1_.checked;
	var scale_p2 = document.ares.scale_p2_.checked;
	var scale_p3 = document.ares.scale_p3_.checked;
	var secondary_attack = document.ares.secondary_attack_.checked;
	var slow = document.ares.slow_.checked;
	var snapfire = document.ares.snapfire_.checked;
	var thick_skull = document.ares.thick_skull_.checked;
	var taunt = document.ares.taunt_.checked;
	var terrain_specialist = document.ares.terrain_specialist_.checked;
	var thrust = document.ares.thrust_.checked;
	var war_machine = document.ares.war_machine_.checked;
	
	if (backstab == true) backstab = 1.5; else backstab = 1;
	if (cause_fear == true) cause_fear = 1.5; else cause_fear = 1;
	if (cavalry == true) cavalry = 2; else cavalry = 1;
	if (ethereal == true) ethereal = 1.5; else ethereal = 1;
	if (fanatic == true) fanatic = 1; else fanatic = 1;
	if (fearless == true) fearless = 1.25; else fearless = 1;
	if (ferocious == true) ferocious = 1.25; else ferocious = 1;
	if (first_strike == true) first_strike = 2; else first_strike = 1;
	if (flyer == true) flyer = 2; else flyer = 1;
	if (glass_jaw == true) glass_jaw = 0.75; else glass_jaw = 1;
	if (group_attack == true) group_attack = 1.5; else group_attack = 1;
	if (heroic == true) heroic = 2; else heroic = 1;
	if (hide == true) hide = 1.5; else hide = 1;
	if (individual == true) individual = 1.5; else individual = 1;
	if (keen_senses == true) keen_senses = 1.25; else keen_senses = 1;
	if (leader == true) leader = 1.5; else leader = 1;
	if (leap == true) leap = 1.25; else leap = 1;
	if (missile_resistant == true) missile_resistant = 1.25; else missile_resistant = 1;
	if (quick == true) quick = 2; else quick = 1;
	if (regenerate == true) regenerate = 2; else regenerate = 1;
	if (scale_m2 == true) scale_m2 = 0.5; else scale_m2 = 1;
	if (scale_m1 == true) scale_m1 = 0.75; else scale_m1 = 1;
	if (scale_0 == true) scale_0 = 1; else scale_0 = 1;
	if (scale_p1 == true) scale_p1 = 1.5; else scale_p1 = 1;
	if (scale_p2 == true) scale_p2 = 2; else scale_p2 = 1;
	if (scale_p3 == true) scale_p3 = 3; else scale_p3 = 1;
	if (secondary_attack == true) secondary_attack = 1.5; else secondary_attack = 1;
	if (slow == true) slow = 0.75; else slow = 1;
	if (snapfire == true) snapfire = 1.5; else snapfire = 1;
	if (thick_skull == true) thick_skull = 1.25; else thick_skull = 1;
	if (taunt == true) taunt = 1.5; else taunt = 1;
	if (terrain_specialist == true) terrain_specialist = 1.25; else terrain_specialist = 1;
	if (thrust == true) thrust = 1.25; else thrust = 1;
	if (war_machine == true) war_machine = 0.67; else war_machine = 1;
	
	var unit_modifiers = (backstab * cause_fear * cavalry * ethereal * fanatic * fearless * ferocious * first_strike * flyer * glass_jaw * group_attack * heroic * hide * individual * keen_senses * leader * leap * missile_resistant * quick * regenerate * scale_m2 * scale_m1 * scale_0 * scale_p1 * scale_p2 * scale_p3 * secondary_attack * slow * snapfire * thick_skull * taunt * terrain_specialist * thrust * war_machine);

	/* spellcasting 1 */
	var spellname1 = document.ares.spellname_1.value;
	var spellrange1 = parseInt(document.ares.spellrange_1.value);
	var spelldie1 = document.ares.spelldie_1.value;
	var spellradius1 = parseInt(document.ares.spellradius_1.value);
	var spelleffect11 = parseInt(document.ares.spelleffect_11.value);
	var spelleffect12 = parseInt(document.ares.spelleffect_12.value);
	var spelleffect13 = parseInt(document.ares.spelleffect_13.value);
	var area_effect1 = document.ares.area_effect_1.checked;
	var cone1 = document.ares.cone_1.checked;
	var difficult1 = document.ares.difficult_1.checked;

	if (area_effect1 == true) area_effect1 = spellradius1; else area_effect1 = 1;
	if (cone1 == true) cone1 = spellrange1; else cone1 = 1;
	if (difficult1 == true) difficult1 = 0.5; else difficult1 = 1;

	var spell_points1 = (((spelleffect11) + (spelleffect12) + (spelleffect13)) * spellrange1 * spellradius1);
	var spell_modifiers1 = (area_effect1 * cone1 * difficult1);

	var spell_factor1 = ((spell_points1) * die_modifiers(magic, spelldie1) * (spell_modifiers1));
	
	/* spellcasting 2 */
	var spellname2 = document.ares.spellname_2.value;
	var spellrange2 = parseInt(document.ares.spellrange_2.value);
	var spelldie2 = document.ares.spelldie_2.value;
	var spellradius2 = parseInt(document.ares.spellradius_2.value);
	var spelleffect21 = parseInt(document.ares.spelleffect_21.value);
	var spelleffect22 = parseInt(document.ares.spelleffect_22.value);
	var spelleffect23 = parseInt(document.ares.spelleffect_23.value);
	var area_effect2 = document.ares.area_effect_2.checked;
	var cone2 = document.ares.cone_2.checked;
	var difficult2 = document.ares.difficult_2.checked;

	if (area_effect2 == true) area_effect2 = spellradius2; else area_effect2 = 1;
	if (cone2 == true) cone2 = spellrange2; else cone2 = 1;
	if (difficult2 == true) difficult2 = 0.5; else difficult2 = 1;
	
	var spell_points2 = (((spelleffect21) + (spelleffect22) + (spelleffect23)) * spellrange2 * spellradius2);
	var spell_modifiers2 = (area_effect2 * cone2 * difficult2);

	var spell_factor2 = ((spell_points2) * die_modifiers(magic, spelldie2) * (spell_modifiers2));
	
	/* spellcasting 3 */
	var spellname3 = document.ares.spellname_3.value;
	var spellrange3 = parseInt(document.ares.spellrange_3.value);
	var spelldie3 = document.ares.spelldie_3.value;
	var spellradius3 = parseInt(document.ares.spellradius_3.value);
	var spelleffect31 = parseInt(document.ares.spelleffect_31.value);
	var spelleffect32 = parseInt(document.ares.spelleffect_32.value);
	var spelleffect33 = parseInt(document.ares.spelleffect_33.value);
	var area_effect3 = document.ares.area_effect_3.checked;
	var cone3 = document.ares.cone_3.checked;
	var difficult3 = document.ares.difficult_3.checked;

	if (area_effect3 == true) area_effect3 = spellradius3; else area_effect3 = 1;
	if (cone3 == true) cone3 = spellrange3; else cone3 = 1;
	if (difficult3 == true) difficult3 = 0.5; else difficult3 = 1;
	
	var spell_points3 = (((spelleffect31) + (spelleffect32) + (spelleffect33)) * spellrange3 * spellradius3);
	var spell_modifiers3 = (area_effect3 * cone3 * difficult3);

	var spell_factor3 = ((spell_points3) * die_modifiers(magic, spelldie3) * (spell_modifiers3));
	
	/* spellcasting 4 */
	var spellname4 = document.ares.spellname_4.value;
	var spellrange4 = parseInt(document.ares.spellrange_4.value);
	var spelldie4 = document.ares.spelldie_4.value;
	var spellradius4 = parseInt(document.ares.spellradius_4.value);
	var spelleffect41 = parseInt(document.ares.spelleffect_41.value);
	var spelleffect42 = parseInt(document.ares.spelleffect_42.value);
	var spelleffect43 = parseInt(document.ares.spelleffect_43.value);
	var area_effect4 = document.ares.area_effect_4.checked;
	var cone4 = document.ares.cone_4.checked;
	var difficult4 = document.ares.difficult_4.checked;

	if (area_effect4 == true) area_effect4 = spellradius4; else area_effect4 = 1;
	if (cone4 == true) cone4 = spellrange4; else cone4 = 1;
	if (difficult4 == true) difficult4 = 0.5; else difficult4 = 1;
	
	var spell_points4 = (((spelleffect41) + (spelleffect42) + (spelleffect43)) * spellrange4 * spellradius4);
	var spell_modifiers4 = (area_effect4 * cone4 * difficult4);

	var spell_factor4 = ((spell_points4) * die_modifiers(magic, spelldie4) * (spell_modifiers4));
	
	/* calculate */
	var armor_factor = ((die_modifiers(close_combat, armor) + (shield)) * (magic_modifiers(magic))) + (magic_resistance);
	var melee_factor = ((die_modifiers(close_combat, weapon1) + ((magical1) + (polearm1))) * (movement) * (weapon_modifiers1));
	var second_factor = ((movement * die_modifiers(close_combat, weapon2)) + (magical2 + polearm2)) * (weapon_modifiers2);
	var missile_factor = ((5 * range_weapon1 * die_modifiers(range_combat, range_weapon2)) + (magical3 + polearm3)) * (weapon_modifiers3);
	var spell_factor = (spell_factor1 + spell_factor2 + spell_factor3 + spell_factor4);

	if (second_weapon != true) second_factor = 0;
	
	/* sort the weapon factors */	
	var factors = new Array(melee_factor, second_factor, missile_factor, spell_factor1, spell_factor2, spell_factor3, spell_factor4);
	bsort(factors);
//	alert("Sortier-Reihenfolge:" + factors);
	factors.reverse();

//	alert("Sortier-Reihenfolge:" + factors);
	
	/* calculate the weapon factor */
	var weapon_factor = 0;
	var c;
	for (c = 0; c < factors.length; c++) {
		weapon_factor += ((factors[c] / (c + 1)));
	}

	var rating = Math.round(Math.sqrt(wounds * moral * armor_factor * weapon_factor * unit_modifiers));
	
	/* write calculated values to fields in html-code */
	with (document.ares) af_.value = armor_factor;
	with (document.ares) ef_.value = melee_factor;
	with (document.ares) mf_.value = missile_factor;
	with (document.ares) xf_.value = second_factor;
	with (document.ares) wf_.value = weapon_factor;
	with (document.ares) sf_.value = spell_factor;
	with (document.ares) rating_.value = rating;
}

