var a_levels = new Array(), blvl, cfak, ifak, ilvl, qlvl, rest;

function changeItem() {
  blvl = 0;
  switch (document.formular.klasse.value) {
    case "staf": blvl = 1;
                 break;
    case "wand": if (document.formular.qlvl.value < 50)
                   blvl = 1;
                 break;
  }
  qlvl = val(document.formular.qlvl.value);
  doCalc();
}

function changeKlasse() {
  var a = new Array(), i, o = document.formular.qlvl, value = o.value;
  a = getItems(document.formular.klasse.value);
  comboClear(o);
  for (i = 0; i < a.length; i++)
    comboAdd(o, a[i][0], a[i][1]);
  o.value = value;
  for (i = 0; i < o.length; i++)
    if (o.options[i].selected)
      break;
  if (i == o.length)
    o.selectedIndex = 0;
  changeItem();
}

function changeRezept(rezept) {
  qlvl = 0;
  switch (rezept) {
    case "igm":   ilvl = 0; cfak = 0; ifak = 100;
                  rest = "Affixlevel";
                  fillKlasse();
                  noRelevance("qlvlilvl");
                  break;
    case "a50":   ilvl = 50; cfak = 0; ifak = 0; qlvl = 1;
                  rest = "Affixlevel für eventuelles Suffix";
                  noRelevance("");
                  doCalc();
                  break;
    case "p50":   ilvl = 50; cfak = 0; ifak = 0; qlvlmin = 5; qlvlmax = 89;
                  rest = "Affixlevel für eventuelles Suffix";
                  noRelevance("");
                  doCalc();
                  break;
    case "a75":
    case "r75":   ilvl = 0; cfak = 75; ifak = 0; qlvl = 1;
                  rest = "Affixlevel";
                  noRelevance("clvl");
                  doCalc();
                  break;
    case "ring":  ilvl = 30; cfak = 0; ifak = 0; qlvl = 1;
                  rest = "Affixlevel für eventuelles Suffix";
                  noRelevance("");
                  doCalc();
                  break;
    case "schi":  ilvl = 30; cfak = 0; ifak = 0;
                  rest = "Affixlevel für eventuelles Präfix";
                  comboClear(document.formular.klasse);
                  comboAdd(document.formular.klasse, "Schild", "shie");
                  changeKlasse();
                  noRelevance("qlvl");
                  break;
    case "schw":  ilvl = 30; cfak = 0; ifak = 0;
                  rest = "Affixlevel für eventuelles Präfix";
                  comboClear(document.formular.klasse);
                  comboAdd(document.formular.klasse, "Schwert", "swor");
                  changeKlasse();
                  noRelevance("qlvl");
                  break;
    case "so25":
    case "so30":  ilvl = rezept == "so25" ? 25 : 30; cfak = 0; ifak = 0;
                  rest = "Affixlevel";
                  comboClear(document.formular.klasse);
                  comboAdd(document.formular.klasse, "Axt", "axe ");
                  comboAdd(document.formular.klasse, "Bogen", "bow ");
                  comboAdd(document.formular.klasse, "Dolch", "knif");
                  comboAdd(document.formular.klasse, "Hammer", "hamm");
                  comboAdd(document.formular.klasse, "Keule", "club");
                  comboAdd(document.formular.klasse, "Knüppel", "mace");
                  comboAdd(document.formular.klasse, "Schwert", "swor");
                  comboAdd(document.formular.klasse, "Speer", "spea");
                  comboAdd(document.formular.klasse, "Stangenwaffe", "pole");
                  comboAdd(document.formular.klasse, "Szepter", "scep");
                  comboAdd(document.formular.klasse, "Wurfaxt", "taxe");
                  comboAdd(document.formular.klasse, "Wurfmesser", "tkni");
                  comboAdd(document.formular.klasse, "Wurfspieß", "jave");
                  comboAdd(document.formular.klasse, "Zauberinnen-Stab", "staf");
                  comboAdd(document.formular.klasse, "Totenbeschwörer-Stab", "wand");
                  comboAdd(document.formular.klasse, "Armbrust", "xbow");
                  changeKlasse();
                  noRelevance("qlvl");
                  break;
    case "6PS":   ilvl = 0; cfak = 40; ifak = 40;
                  rest = "Affixlevel";
                  fillKlasse();
                  noRelevance("qlvlilvlclvl");
                  break;
    case "SoJ":   ilvl = 0; cfak = 66; ifak = 66;
                  rest = "Affixlevel";
                  fillKlasse();
                  noRelevance("qlvlilvlclvl");
                  break;
    default:      ilvl = 0; cfak = 0; ifak = 0;
                  rest = "Affixlevel";
                  noRelevance("");
                  doCalc();
  }
  document.formular.label.value = rest;
}

function doCalc() {
  if (document.formular.rezept.value == "non") {
    document.formular.ilvl.value = "";
    document.formular.alvl.value = "";
    return;
  }
  var al, al2, il, il2 = 0, q2;
  if (ilvl == 0) {
    if (document.formular.herkunft[0].checked)
      il = val(document.formular.cube_ilvl.value);
    else if (document.formular.herkunft[1].checked)
      il = a_levels[document.formular.chest.value][document.formular.chest_grad.value];
    else if (document.formular.herkunft[2].checked)
      il = val(document.formular.imbue_clvl.value) + 4;
    else if (document.formular.herkunft[3].checked) {
      il = val(document.formular.gamble_clvl.value) - 5;
      if (il < 5)
        il = 5;
      il2 = Math.floor(document.formular.clvl.value * cfak / 100) + Math.floor((val(document.formular.gamble_clvl.value) + 4) * ifak / 100);
      if (il2 < 5)
        il2 = 5;
      if (il2 > 99)
        il2 = 99;
    }
    else if (document.formular.herkunft[4].checked)
      il = Math.min(val(document.formular.shop_clvl.value) + 5, val(document.formular.shop_ilvl.value));
    else if (document.formular.herkunft[5].checked)
      il = val(document.formular.quest_ilvl.value);
    il = Math.floor(document.formular.clvl.value * cfak / 100) + Math.floor(il * ifak / 100);
    if (il < 1)
      il = 1;
    if (il > 99)
      il = 99;
  }
  else
    il = ilvl;
  if (il == il2)
    il2 = 0;
  if (il2) {
    document.formular.ilvl.value = il + " bis " + il2;
    if (qlvl > il2)
      il2 = qlvl;
    if (blvl == 0) {
      q2 = Math.floor(qlvl / 2);
      if (il2 <  99 - q2)
        al2 = il2 - q2;
      else
        al2 = 2 * il2 - 99;
    }
    else
      al2 = il2 + blvl;
    if (al2 < 1)
      al2 = 1;
    if (al2 > 99)
      al2 = 99;
  }
  else
    document.formular.ilvl.value = il;
  if (qlvl > il)
    il = qlvl;
  if (blvl == 0) {
    q2 = Math.floor(qlvl / 2);
    if (il <  99 - q2)
      al = il - q2;
    else
      al = 2 * il - 99;
  }
  else
    al = il + blvl;
  if (al < 1)
    al = 1;
  if (al > 99)
    al = 99;
  if (il2 && al != al2)
    document.formular.alvl.value = al + " bis " + al2;
  else
    document.formular.alvl.value = al;
}

function fillKlasse() {
  var i, o = document.formular.klasse, value = o.value;
  comboClear(o);
  comboAdd(o, "Amulett", "amul");
  comboAdd(o, "Armbrust", "xbow");
  comboAdd(o, "Axt", "axe ");
  comboAdd(o, "Bogen", "bow ");
  comboAdd(o, "Dolch", "knif");
  comboAdd(o, "Gürtel", "belt");
  comboAdd(o, "Hammer", "hamm");
  comboAdd(o, "Handschuhe", "glov");
  comboAdd(o, "Keule", "club");
  comboAdd(o, "Knüppel", "mace");
  comboAdd(o, "Kopfbedeckung", "helm");
  comboAdd(o, "Ring", "ring");
  comboAdd(o, "Rüstung", "tors");
  comboAdd(o, "Schild", "shie");
  comboAdd(o, "Schwert", "swor");
  comboAdd(o, "Speer", "spea");
  comboAdd(o, "Stangenwaffe", "pole");
  comboAdd(o, "Stiefel", "boot");
  comboAdd(o, "Szepter", "scep");
  comboAdd(o, "Totenbeschwörer-Stab", "wand");
  comboAdd(o, "Zauberinnen-Stab", "staf");
  o.value = value;
  for (i = 0; i < o.length; i++)
    if (o.options[i].selected)
      break;
  if (i == o.length)
    o.value = o.options[0].value;
  changeKlasse();
  doCalc();
}

function goTo() {
  var alvl, item, type = "mag";
  switch (document.formular.rezept.value) {
    case "non":  alert("Es wurde kein Rezept ausgewählt!"); return;
    case "a50":
    case "a75":  item = "amul"; break;
    case "r75":
    case "ring": item = "ring"; break;
    case "schw": item = "swor"; break;
    case "6PS" :
    case "SoJ" : type = "rar";
    case "igm":  if (document.formular.rezept.value == "igm")
                   if (document.formular.herkunft[2].checked)
                     type = "rar";
                   else
                     type = "all";
    default:     item = document.formular.klasse.value;
  }
  alvl = document.formular.alvl.value;
  pos = alvl.lastIndexOf(" ");
  if (pos != -1)
    alvl = alvl.substr(pos + 1);
  window.open("../../items/110/ps.html?item=" + item + "&alvl=" + alvl + "&prop=true&type=" + type, "ps", "menubar=no,toolbar=no,location=no,status=no,scrollbars=yes").focus();
}

function noRelevance(relevant) {
  if (relevant.indexOf("qlvl") == -1) {
    comboClear(document.formular.klasse);
    comboAdd(document.formular.klasse, "(egal)", 0);
    comboClear(document.formular.qlvl);
    comboAdd(document.formular.qlvl, "(egal)", 0);
    blvl = 0;
  }
  if (relevant.indexOf("ilvl") == -1)
    document.formular.egal.value = "(egal)";
  else
    document.formular.egal.value = "";
  if (relevant.indexOf("clvl") == -1) {
    comboClear(document.formular.clvl);
    comboAdd(document.formular.clvl, "(egal)", 0);
  }
  else {
    var i;
    comboClear(document.formular.clvl);
    for (i = 1; i <= 99; i++)
      if (i < 10)
        comboAdd(document.formular.clvl, "  " + i, i);
      else
        comboAdd(document.formular.clvl, i, i);
  }
}

function preCalc(herkunft) {
  var i;
  for (i = 0; i < 6; i++)
    if (document.formular.herkunft[i].value == herkunft) {
      if (document.formular.herkunft[i].checked)
        doCalc();
      break;
    }
}

function setStart() {
  var i;
  document.formular.rezept.value = "non";
  changeRezept("non");
  document.formular.herkunft[0].checked = true;
  a_levels = getLevels();
  comboClear(document.formular.chest);
  for (i = 0; i < a_levels.length; i++)
    switch (a_levels[i][0]) {
      case "Lager der Jägerinnen" :
      case "Friedhof"             :
      case "Vergessener Turm"     :
      case "Lut Gholein"          :
      case "Harem, Level 1"       :
      case "Tal Rashas Kammer"    :
      case "Docks von Kurast"     :
      case "Festung des Wahnsinns": break;
      default: comboAdd(document.formular.chest, a_levels[i][0], i);
    }
  document.formular.chest.value = 0;
  document.formular.chest_grad.value = 3;
  comboClear(document.formular.cube_ilvl);
  comboClear(document.formular.imbue_clvl);
  for (i = 1; i <= 99; i++)
    if (i < 10) {
      comboAdd(document.formular.cube_ilvl, "  " + i, i);
      if (i >= 8)
        comboAdd(document.formular.imbue_clvl, "  " + i, i);
      comboAdd(document.formular.gamble_clvl, "  " + i, i);
      comboAdd(document.formular.shop_clvl, "  " + i, i);
    }
    else {
      comboAdd(document.formular.cube_ilvl, i, i);
      comboAdd(document.formular.imbue_clvl, i, i);
      comboAdd(document.formular.gamble_clvl, i, i);
      comboAdd(document.formular.shop_clvl, i, i);
    }
}
