/*-------------------------------------------------*
 |Ore         | LV | Exp  | Bar        | Smith Exp |
 *-------------------------------------------------*
 |Essence/Clay| 1  | ---- | ---------- | --------- |
 *-------------------------------------------------*
 |Copper/Tin  | 1  | 6.5  | Bronze     | 12.5      |
 *-------------------------------------------------*
 |Iron        | 15 | 12.5 | Iron       | 25        |
 *-------------------------------------------------*
 |Silver      | 20 | 13.5 | Silver     | --------- |
 *-------------------------------------------------*
 |Coal/Iron   | 30 | 17.5 | Steel      | 37.5      |
 *-------------------------------------------------*
 |Gold        | 40 | 22.5 | Gold       | --------- |
 *-------------------------------------------------*
 |Mithril     | 55 | 30   | Mithril    | 50        |
 *-------------------------------------------------*
 |Adamantite  | 70 | 37.5 | Adamantite | 62.5      |
 *-------------------------------------------------*
 |Runite      | 85 | 50   | Runite     | 75        |
 *-------------------------------------------------*/

var exp = new Array(100);
  exp[0] = exp[1] = 0;
  exp[2] = 83;
  exp[3] = 174;
  exp[4] = 276;
  exp[5] = 388;
  exp[6] = 512;
  exp[7] = 650;
  exp[8] = 801;
  exp[9] = 969;
  exp[10] = 1154;
  exp[11] = 1358;
  exp[12] = 1584;
  exp[13] = 1833;
  exp[14] = 2107;
  exp[15] = 2411;
  exp[16] = 2746;
  exp[17] = 3115;
  exp[18] = 3523;
  exp[19] = 3973;
  exp[20] = 4470;
  exp[21] = 5018;
  exp[22] = 5624;
  exp[23] = 6291;
  exp[24] = 7028;
  exp[25] = 7842;
  exp[26] = 8740;
  exp[27] = 9730;
  exp[28] = 10824;
  exp[29] = 12031;
  exp[30] = 13363;
  exp[31] = 14833;
  exp[32] = 16456;
  exp[33] = 18247;
  exp[34] = 20224;
  exp[35] = 22406;
  exp[36] = 24815;
  exp[37] = 27473;
  exp[38] = 30408;
  exp[39] = 33648;
  exp[40] = 37224;
  exp[41] = 41171;
  exp[42] = 45529;
  exp[43] = 50339;
  exp[44] = 55649;
  exp[45] = 61512;
  exp[46] = 67983;
  exp[47] = 75127;
  exp[48] = 83014;
  exp[49] = 91721;
  exp[50] = 101333;
  exp[51] = 111945;
  exp[52] = 123660;
  exp[53] = 136594;
  exp[54] = 150872;
  exp[55] = 166636;
  exp[56] = 184040;
  exp[57] = 203254;
  exp[58] = 224466;
  exp[59] = 247886;
  exp[60] = 273742;
  exp[61] = 302288;
  exp[62] = 333804;
  exp[63] = 368599;
  exp[64] = 407015;
  exp[65] = 449428;
  exp[66] = 496254;
  exp[67] = 547953;
  exp[68] = 605032;
  exp[69] = 668051;
  exp[70] = 737627;
  exp[71] = 814445;
  exp[72] = 899257;
  exp[73] = 992895;
  exp[74] = 1096278;
  exp[75] = 1210421;
  exp[76] = 1336443;
  exp[77] = 1475581;
  exp[78] = 1629200;
  exp[79] = 1798808;
  exp[80] = 1986068;
  exp[81] = 2192818;
  exp[82] = 2421087;
  exp[83] = 2673114;
  exp[84] = 2951373;
  exp[85] = 3258594;
  exp[86] = 3597792;
  exp[87] = 3972294;
  exp[88] = 4385776;
  exp[89] = 4842295;
  exp[90] = 5346332;
  exp[91] = 5902831;
  exp[92] = 6517253;
  exp[93] = 7195629;
  exp[94] = 7944614;
  exp[95] = 8771558;
  exp[96] = 9684577;
  exp[97] = 10692629;
  exp[98] = 11805606;
  exp[99] = 13034431;

var log_exp = new Array(4);
  log_exp[0] = 25;   // Ordinary
  log_exp[1] = 37.5; // Oak
  log_exp[2] = 67.5; // Willow
  log_exp[3] = 175;  // Yew

var fish_exp = new Array(10);
  fish_exp[0] = 10;  // Shrimp
  fish_exp[1] = 20;  // Sardine
  fish_exp[2] = 30;  // Herring
  fish_exp[3] = 40;  // Anchovie
  fish_exp[4] = 50;  // Trout
  fish_exp[5] = 60;  // Pike
  fish_exp[6] = 70;  // Salmon
  fish_exp[7] = 80;  // Tuna
  fish_exp[8] = 90;  // Lobster
  fish_exp[9] = 100; // Swordfish

var cook_exp = new Array(19);
  cook_exp[0] = 30;   // Meat, Shrimp, Chicken, Anchovies
  cook_exp[1] = 40;   // Sardine, Bread
  cook_exp[2] = 50;   // Herring
  cook_exp[3] = 78;   // Redberry pie
  cook_exp[4] = 70;   // Trout
  cook_exp[5] = 80;   // Pike
  cook_exp[6] = 104;  // Meat pie
  cook_exp[7] = 90;   // Salmon
  cook_exp[8] = 117;  // Stew
  cook_exp[9] = 100;  // Tuna
  cook_exp[10] = 130; // Apple pie
  cook_exp[11] = 143; // Plain pizza
  cook_exp[12] = 110; // Wine
  cook_exp[13] = 120; // Lobster
  cook_exp[14] = 180; // Cake
  cook_exp[15] = 140; // Swordfish
  cook_exp[16] = 169; // Meat pizza
  cook_exp[17] = 210; // Chocolate cake
  cook_exp[18] = 182; // Anchovie pizza

var rc_rune_exp = new Array (6);
  rc_rune_exp[0] = 5;   // Air
  rc_rune_exp[1] = 5.5; // Mind
  rc_rune_exp[2] = 6;   // Water
  rc_rune_exp[3] = 6.5; // Earth
  rc_rune_exp[4] = 7;   // Fire
  rc_rune_exp[5] = 7.5; // Body

var rc_tiara_exp = new Array (6);
  rc_tiara_exp[0] = 25;   // Air
  rc_tiara_exp[1] = 27.5; // Mind
  rc_tiara_exp[2] = 30;   // Water
  rc_tiara_exp[3] = 32.5; // Earth
  rc_tiara_exp[4] = 35;   // Fire
  rc_tiara_exp[5] = 37.5; // Body

var fire_exp = new Array (4);
  fire_exp[0] = 40;    // Normal
  fire_exp[1] = 60;    // Oak
  fire_exp[2] = 90;    // Willow     
  fire_exp[3] = 202.5; // Yew

var craft_exp = new Array (32);
  craft_exp[0] =    2.5; //  1 Spin Ball of Wool
  craft_exp[1] =   12.6; //  1 Clay Pot
  craft_exp[2] =   13.8; //  1 Leather Gloves
  craft_exp[3] =     15; //  5 Gold Ring
  craft_exp[4] =     20; //  6 Gold Necklace
  craft_exp[5] =   16.3; //  7 Leather Boots
  craft_exp[6] =     25; //  7 Clay Pie Dish
  craft_exp[7] =     30; //  8 Gold Amulet
  craft_exp[8] =     33; //  8 Clay Bowl
  craft_exp[9] =   18.5; //  9 Leather Cowl
  craft_exp[10] =    22; // 11 Leather Vambraces
  craft_exp[11] =    25; // 14 Leather Body
  craft_exp[12] =    50; // 16 Holy Symbol
  craft_exp[13] =    27; // 18 Leather Chaps
  craft_exp[14] =    40; // 20 Sapphire Ring
  craft_exp[15] =    50; // 20 Cut Sapphire
  craft_exp[16] =    55; // 22 Sapphire Necklace
  craft_exp[17] =  52.5; // 23 Tiara
  craft_exp[18] =    65; // 24 Sapphire Amulet
  craft_exp[19] =    55; // 27 Emerald Ring
  craft_exp[20] =  67.5; // 27 Cut Emerald
  craft_exp[21] =    35; // 28 Hard Leather Body
  craft_exp[22] =    60; // 29 Emerald Necklace
  craft_exp[23] =    70; // 31 Emerald Amulet
  craft_exp[24] =    70; // 34 Ruby Ring
  craft_exp[25] =    85; // 34 Cut Ruby
  craft_exp[26] =    75; // 40 Ruby Necklace
  craft_exp[27] =    85; // 43 Diamond Ring
  craft_exp[28] = 107.5; // 43 Cut Diamond
  craft_exp[29] =    85; // 50 Ruby Amulet
  craft_exp[30] =    90; // 56 Diamond Necklace
  craft_exp[31] =   100; // 70 Diamond Amulet

/**********************************************************************************************
 **********************************************************************************************/

function smithlvlupn (exper, lvl, dlvl, op) {
  var results = new Array(0,0,0,0,0,0);
  var totalexp;

  switch (op) {
    case 1: totalexp = new Array(19,37.5,55,80,107.5,125); // both
            break;
    case 2: totalexp = new Array(12.5,25,37.5,50,62.5,75); // smith only
            break;
  }

  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 1;

  if (lvl >= 15) count++;
  if (lvl >= 30) count++;
  if (lvl >= 50) count++;
  if (lvl >= 70) count++;
  if (lvl >= 85) count++;

  for (i = 0; i < count; i++) {
    temp = needexp / totalexp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  return results;
}


function canmine (lvl) {
  var results = new Array(0,0,0,0,0,0,0);

  if (lvl >= 15) results[0] = true;
  if (lvl >= 20) results[1] = true;
  if (lvl >= 30) results[2] = true;
  if (lvl >= 40) results[3] = true;
  if (lvl >= 55) results[4] = true;
  if (lvl >= 70) results[5] = true;
  if (lvl >= 85) results[6] = true;

  return results;
}


function minelvlup (exper, lvl, dlvl) {
  var results = new Array(0,0,0,0,0,0,0,0);
  var totalexp = new Array(17.5,35,40,50,65,80,95,125);
  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 1;

  if (lvl >= 15) count++;
  if (lvl >= 20) count++;
  if (lvl >= 30) count++;
  if (lvl >= 40) count++;
  if (lvl >= 55) count++;
  if (lvl >= 70) count++;
  if (lvl >= 85) count++;

  for (i = 0; i < count; i++) {
    temp = needexp / totalexp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  return results;
}


function wclvlup (exper, lvl, dlvl) {
  var results = new Array(0,0,0,0);
  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 1;

  if (lvl >= 15) count++;
  if (lvl >= 30) count++;
  if (lvl >= 60) count++;

  for (i = 0; i < count; i++) {
    temp = needexp / log_exp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  return results;
}


function fishlvlup (exper, lvl, dlvl) {
  var results = new Array(0,0,0,0,0,0,0,0,0,0);
  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 1;

  if (lvl >= 5)  count++;
  if (lvl >= 10) count++;
  if (lvl >= 15) count++;
  if (lvl >= 20) count++;
  if (lvl >= 25) count++;
  if (lvl >= 30) count++;
  if (lvl >= 35) count++;
  if (lvl >= 40) count++;
  if (lvl >= 50) count++;

  for (i = 0; i < count; i++) {
    temp = needexp / fish_exp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  return results;
}


function cooklvlup (exper,lvl,dlvl) {
  var results = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 2;

  if (lvl >= 5)  count++;
  if (lvl >= 10) count++;
  if (lvl >= 15) count++;
  if (lvl >= 20) count += 2;
  if (lvl >= 25) count += 2;
  if (lvl >= 30) count += 2;
  if (lvl >= 35) count += 2;
  if (lvl >= 40) count += 2;
  if (lvl >= 45) count += 2;
  if (lvl >= 50) count++;
  if (lvl >= 55) count++;

  for (i = 0; i < count; i++) {
    temp = needexp / cook_exp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  return results;
}


function rclvlup (exper, lvl, dlvl) {
  var results = new Array(0,0,0,0,0,0,0,0,0,0,0,0);
  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 0;

  if (lvl >= 1)  count++;
  if (lvl >= 2)  count++;
  if (lvl >= 5)  count++;
  if (lvl >= 9)  count++;
  if (lvl >= 14) count++;
  if (lvl >= 20) count++;

  for (i = 0; i < count; i++) {
    temp = needexp / rc_rune_exp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  count = 6;

  for (i = 0; i < count; i++) {
    temp = needexp / rc_tiara_exp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i + 6] = temp;
  }

  return results;
}


function firelvlup (exper, lvl, dlvl) {
  var results = new Array(0,0,0,0);
  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 1;

  if (lvl >= 15)  count++;
  if (lvl >= 30)  count++;
  if (lvl >= 60)  count++;

  for (i = 0; i < count; i++) {
    temp = needexp / fire_exp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  return results;
}


function craftlvlup (exper, lvl, dlvl) {
  var results = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  var needexp = exp[dlvl] - exper;
  var temp = 0;
  var rem = 0;
  var count = 3;

  if (lvl >= 5)  count++;
  if (lvl >= 6)  count++;
  if (lvl >= 7)  count += 2;
  if (lvl >= 8)  count += 2;
  if (lvl >= 9)  count++;
  if (lvl >= 11) count++;
  if (lvl >= 14) count++;
  if (lvl >= 16) count++;
  if (lvl >= 18) count++;
  if (lvl >= 20) count += 2;
  if (lvl >= 22) count++;
  if (lvl >= 23) count++;
  if (lvl >= 24) count++;
  if (lvl >= 27) count += 2;
  if (lvl >= 28) count++;
  if (lvl >= 29) count++;
  if (lvl >= 31) count++;
  if (lvl >= 34) count += 2;
  if (lvl >= 40) count++;
  if (lvl >= 43) count += 2;
  if (lvl >= 50) count++;
  if (lvl >= 56) count++;
  if (lvl >= 57) count++;

  for (i = 0; i < count; i++) {
    temp = needexp / craft_exp[i];
    rem = (temp % 1);

    if (rem != 0) {
      temp -= rem;
      temp++;
    }

    results[i] = temp;
  }

  return results;
}


function level (value) {
  var min = 0;
  var max = 99;
  var mid = 0;
  var rem = 0;
  var result = new Array(2);

  while (max != min && min < max) {
    mid = (max + min) / 2;
    rem = (mid % 1);
    mid -= rem;

    if ((max - min == 1) && exp[max] > value)
      max = mid = min;
    else if (exp[mid] > value)
      max = mid;
    else if (exp[mid] < value)
      min = mid;
    else
     max = min = mid;
  }

  result[0] = mid;
  result[1] = exp[mid + 1] - value;

  return result;
}