// ogl/class.js

/*
  3EProfiler character sheet source file.
  Copyright (C) 2007 Myth-Weavers Games
  **
*/
// **

// Class information used by 3EProfiler that was released by WotC under
// the Open Gaming License (OGL). This file however, is not released under
// the OGL (see above).


function SaveCalc(save)
{
  sheet().ReflexAbility.value = Math.max(sheet().DexMod.value, sheet().IntMod.value) + parseInt(sheet().ShieldBonus.value);

  ZeroFill(
    sheet()[save + "TenPlusHalfLevel"],
    sheet()[save + "Ability"],
    sheet()[save + "Class"],
	sheet()[save + "Feat"],
	sheet()[save + "Enh"],
	sheet()[save + "Misc"],
	sheet()[save + "Temp"],
	sheet().ShieldBonus);

  sheet()[save].value = Clean(Add(
    sheet()[save + "TenPlusHalfLevel"].value,
    sheet()[save + "Ability"].value,
    sheet()[save + "Class"].value,
	sheet()[save + "Feat"].value,
	sheet()[save + "Enh"].value,
	sheet()[save + "Misc"].value,
	sheet()[save + "Temp"].value));
} 

// void ACCalc(void)
// Recalculates the ac table.
function ACCalc()
{
	ZeroFill(
	sheet().DexMod,
	sheet().IntMod,
	sheet().ArmorBonus,
	sheet().ShieldBonus,
    sheet().ACTenPlusHalfLevel,
    sheet().ACArmorPlusAbility,
    sheet().ACClass,
    sheet().ACFeat,
	sheet().ACEnh,
	sheet().ACMisc,
	sheet().ACTemp);
	
	var benefit = 0;
	
	if (sheet().IsHeavyArmorOn.checked == true) {
		benefit = 0;
	} else {
		benefit = Math.max(parseInt(sheet().DexMod.value), parseInt(sheet().IntMod.value));
	}
	
	sheet().ACArmorPlusAbility.value = parseInt(sheet().ArmorBonus.value) + parseInt(sheet().ShieldBonus.value) + benefit;


  sheet().AC.value = Clean(Add(
    sheet().ACTenPlusHalfLevel.value,
    sheet().ACArmorPlusAbility.value,
    sheet().ACClass.value,
    sheet().ACFeat.value,
	sheet().ACEnh.value,
	sheet().ACMisc.value,
	sheet().ACTemp.value));

}

// void InitCalc(void)
// Calculates the total initiative.
function InitCalc()
{
  ZeroFill(
	sheet().InitDexMod,
	sheet().InitHalfLevel,
	sheet().InitMisc,
	sheet().InitTemp);
  
  sheet().Init.value = Add(
	sheet().InitDexMod.value,
	sheet().InitHalfLevel.value,
	sheet().InitMisc.value,
	sheet().InitTemp.value);
}

// void SpeedCalc(void)
// Calculates the speed.
function SpeedCalc()
{
  ZeroFill(
	sheet().ArmorSpeedPenalty,
	sheet().SpeedBase,
	sheet().SpeedArmor,
	sheet().SpeedItem,
	sheet().SpeedMisc);
  
  sheet().SpeedArmor.value = sheet().ArmorSpeedPenalty.value;
  
  sheet().Speed.value = Clean(Add(
	sheet().SpeedBase.value,
	sheet().SpeedArmor.value,
	sheet().SpeedItem.value,
	sheet().SpeedMisc.value));
}

// function HPCalc
// Calculates HP stuff
function HPCalc() {
	var hp = 0;
	
	if ((sheet().HPMax.value % 2) == 1)
		hp = sheet().HPMax.value - 1;
	else
		hp = sheet().HPMax.value;
	
	var half = hp / 2;
	
		sheet().HPHalf.value = half;
	
	if ((sheet().HPMax.value % 4) == 1)
		hp = sheet().HPMax.value - 1;
	else if ((sheet().HPMax.value % 4) == 2)
		hp = sheet().HPMax.value - 2;
	else if ((sheet().HPMax.value % 4) ==3)
		hp = sheet().HPMax.value - 3;
	else
		hp = sheet().HPMax.value;
	
	var quarter = hp / 4;
	
	
	sheet().HPQuarter.value = quarter;
}