// xp.js

// Handles changes of XP.

// Dependencies:
//    general.js

// Event handler for changing the XP Change.
// The function reads the change in XP, then applies it to the current
// XP slot, also verifing if the next level XP should change.
function ApplyXPChange()
{
  if (disable_autocalc())
    return;

  // Ensure we have a value to change.
  if (!sheet().XPChange.value.length)
    return;

  // Parse the proper values from the sheet.
  var change = parseInt(sheet().XPChange.value);
  if (isNaN(change))
    return;

  var current = parseInt(sheet().XPCurrent.value);
  if (isNaN(current))
    current = 0;

  var updated = current + change;

  // Set the sheet.
  sheet().XPCurrent.value = updated;
  sheet().XPNext.value = _XPForNextLevel(updated);

  debug.trace("Calculated total XP.");
  debug.trace("Calculated next level XP.");
}

// Sets the next level XP if the current XP is edited directly.
function ApplyXPNext()
{
  if (disable_autocalc())
    return;

  // Parse the proper values from the sheet.
  if (!sheet().XPCurrent.value.length)
    return;

  var updated = parseInt(sheet().XPCurrent.value);
  if (isNaN(updated))
    return;

  // Update the sheet.
  sheet().XPNext.value = _XPForNextLevel(updated);
}

// Calculates the XP for the next level, based on the current XP.
function _XPForNextLevel(currentXP)
{
  // Sanity check.
  if (typeof currentXP != "number")
    return "?";


  if (currentXP < 1000)
    return 1000
  else if (currentXP < 2250)
    return 2250
  else if (currentXP < 3750)
    return 3750
  else if (currentXP < 5500)
    return 5500
  else if (currentXP < 7500)
    return 7500
  else if (currentXP < 10000)
    return 10000
  else if (currentXP < 13000)
    return 13000
  else if (currentXP < 16500)
    return 16500
  else if (currentXP < 20500)
    return 20500
  else if (currentXP < 26000)
    return 26000
  else if (currentXP < 32000)
    return 32000
  else if (currentXP < 39000)
    return 39000
  else if (currentXP < 47000)
    return 47000
  else if (currentXP < 57000)
    return 57000
  else if (currentXP < 69000)
    return 69000
  else if (currentXP < 83000)
    return 83000
  else if (currentXP < 99000)
    return 99000
  else if (currentXP < 119000)
    return 119000
  else if (currentXP < 143000)
    return 143000
  else if (currentXP < 175000)
    return 175000
  else if (currentXP < 210000)
    return 210000
  else if (currentXP < 255000)
    return 255000
  else if (currentXP < 310000)
    return 310000
  else if (currentXP < 375000)
    return 375000
  else if (currentXP < 450000)
    return 450000
  else if (currentXP < 550000)
    return 550000
  else if (currentXP < 675000)
    return 675000
  else if (currentXP < 825000)
    return 825000
  else if (currentXP < 1000000)
    return 1000000;
}