var s_b = 0, s_d, set_b, set_i, sock_waff = 0, started;

function changeBelt(dmg) {
  dmgBelt(dmg);
}

function changeHelm(dmg) {
  dmgHelm(dmg);
}

function changeSkill(skill) {
  var syn = "";
  switch (skill) {
    case "dol": s_b = 20; syn = "Gift-Explosion + Gift-Nova"; break;
    case "gws": s_b = 12; syn = "Pest-Wurfspieß"; break;
    case "pws": s_b = 10; syn = "Gift-Wurfspieß"; break;
    default   : s_b = 0;
  }
  formular.syn_name.value = syn;
  dmgSkill();
}

function changeWeap(dmg) {
  dmgWeap(dmg);
  var combo, i, old = sock_waff;
  switch (document.formular.waff_form.value) {
    case "non": sock_waff = 6; break;
    case "mag": sock_waff = 4; break;
    default   : sock_waff = 1;
  }
  for (i = sock_waff + 1; i <= old; i++) {
    combo = eval("document.formular.waff_sock" + i)
    comboClear(combo);
    comboAdd(combo, "-------------------------------", "0,0,0");
  }
  for (i = 1; i <= sock_waff; i++) {
    combo = eval("document.formular.waff_sock" + i)
    old = combo.value;
    comboClear(combo);
    comboAdd(combo, "unbesetzt", "0,0,0");
    comboAdd(combo, "lädierter Smaragd", "34,34,75");
    comboAdd(combo, "fehlerhafter Smaragd", "51,51,100");
    comboAdd(combo, "Smaragd", "82,82,125");
    comboAdd(combo, "makelloser Smaragd", "101,101,152");
    comboAdd(combo, "perfekter Smaragd", "143,143,179");
    if (old)
      combo.value = old;
  }
  for (i = 1; i <= 6; i++)
    dmgWeapSock(i, eval("document.formular.waff_sock" + i + ".value"));
  dmgWeapGesamt();
}

function changeWeapSock(sock, dmg) {
  dmgWeapSock(sock, dmg);
  dmgWeapGesamt();
}

function checkSets() {
  set_b = 0;
  set_i = 0;
  if (document.formular.waff_form.value == "set" && document.formular.waff_gift.options[1].selected) set_b++;
  if (document.formular.rues_form.checked) set_b++;
  if (document.formular.helm_form.value == "set" && document.formular.helm_gift.options[1].selected) set_b++;
  if (document.formular.waff_form.value == "set" && document.formular.waff_gift.options[2].selected) set_i++;
  if (document.formular.helm_form.value == "set" && document.formular.helm_gift.options[2].selected) set_i++;
  if (document.formular.guer_form.value == "set" && document.formular.guer_gift.options[1].selected) set_i++;
  document.formular.set_berserker.value = "Berserker-Arsenal: " + set_b + " von 3 erforderlichen Gegenständen";
  document.formular.set_inferno.value = "Infernos Werkzeuge: " + set_i + " von 2 erforderlichen Gegenständen";
}

function dmgBelt(dmg) {
  var dmg_min = parseInt(getString(dmg, 1));
  var dmg_max = parseInt(getString(dmg, 2));
  var dmg_len = parseInt(getString(dmg, 3));
  dmgPrint(dmg_min, dmg_max, dmg_len, true, false, document.formular.guer_out);
  dmgGesamt();
}

function dmgGesamt() {
  if (!started)
    return;
  checkSets();
  dmgSets();
  var dmg = document.formular.waff_gift.value;
  var dmg_min = parseInt(getString(dmg, 1));
  var dmg_max = parseInt(getString(dmg, 2));
  var dmg_len = parseInt(getString(dmg, 3));
  var count = 0, i, items = 0;
  if (dmg_len > 0)
    items++;
  for (i = 1; i <= 6; i++) {
    dmg = eval("document.formular.waff_sock" + i + ".value");
    if (dmg != "0,0,0") {
      dmg_min += parseInt(getString(dmg, 1));
      dmg_max += parseInt(getString(dmg, 2));
      dmg_len += parseInt(getString(dmg, 3));
      items++;
    }
  }
  if (items > 0)
    count++;
  dmg = document.formular.helm_gift.value
  if (dmg != "0,0,0") {
    dmg_min += parseInt(getString(dmg, 1));
    dmg_max += parseInt(getString(dmg, 2));
    dmg_len += parseInt(getString(dmg, 3));
    items++;
    count++;
  }
  dmg = document.formular.guer_gift.value
  if (dmg != "0,0,0") {
    dmg_min += parseInt(getString(dmg, 1));
    dmg_max += parseInt(getString(dmg, 2));
    dmg_len += parseInt(getString(dmg, 3));
    items++;
    count++;
  }
  if (set_b >= 3) {
    dmg_min += 16;
    dmg_max += 32;
    dmg_len += 75;
    items++;
    count++;
  }
  if (set_i >= 2) {
    dmg_min += 25;
    dmg_max += 25;
    dmg_len += 80;
    items++;
    count++;
  }
  if (items)
    dmgPrint(dmg_min, dmg_max, Math.floor(dmg_len / items), count == 1, false, document.formular.gesamt1, document.formular.gesamt2);
  else {
    document.formular.gesamt1.value = "";
    document.formular.gesamt2.value = "";
  }
  if (s_d[2] > 0) {
    dmg_min += s_d[0];
    dmg_max += s_d[1];
    dmg_len += s_d[2];
    dmgPrint(dmg_min, dmg_max, Math.floor(dmg_len / Math.max(1, items)), false, document.formular.skill.value == "dol", document.formular.total1, document.formular.total2);
  }
  else {
    document.formular.total1.value = document.formular.gesamt1.value;
    document.formular.total2.value = document.formular.gesamt2.value;
  }
}

function dmgHelm(dmg) {
  var dmg_min = parseInt(getString(dmg, 1));
  var dmg_max = parseInt(getString(dmg, 2));
  var dmg_len = parseInt(getString(dmg, 3));
  dmgPrint(dmg_min, dmg_max, dmg_len, true, false, document.formular.helm_out);
  dmgGesamt();
}

function dmgPrint(dmg_min, dmg_max, dmg_len, runden, dezi, o1, o2) {
  var dmax, dmin, schaden = "", smax, smin;
  if (!o1)
    return false;
  if (dmg_max != 0) {
    if (runden) {
      dmin = Math.round(dmg_min * dmg_len / 256);
      dmax = Math.round(dmg_max * dmg_len / 256);
    }
    else {
      dmin = Math.floor(dmg_min * dmg_len / 256);
      dmax = Math.floor(dmg_max * dmg_len / 256);
    }
    schaden += dmin;
    if (dmin != dmax)
      schaden += "-" + dmax;
    if (dezi) {
      dmg_len = Math.floor(10 * dmg_len / 25) / 10;
      schaden += " über " + Math.floor(dmg_len) + "," + Math.round(10 * (dmg_len - Math.floor(dmg_len))) + " Sek.";
    }
    else
      schaden += " über " + Math.floor(dmg_len / 25) + " Sek.";

    if (o2) {
      o1.value = schaden
      schaden = "";
    }
    else {
      schaden += " "
      o2 = o1;
    }
    smin = dmgPrint_PerSek(dmg_min);
    smax = dmgPrint_PerSek(dmg_max);
    schaden += "(" + smin;
    if (smin != smax)
      schaden += "-" + smax;
    schaden += " / Sek.)";
    o2.value = schaden;
  }
  else {
    o1.value = "";
    if (o2)
      o2.value = "";
  }
  return true;
}

function dmgPrint_PerSek(dmg) {
  var persek;
  dmg = Math.round(dmg * 2500 / 256);
  persek = "0" + dmg % 100;
  persek = Math.floor(dmg / 100) + "," + persek.substr(persek.length - 2, 2);
  return persek;
}

function dmgSets() {
  if (set_b >= 3)
    dmgPrint(16, 32, 75, true, false, document.formular.berserker_out);
  else
    document.formular.berserker_out.value = "";
  if (set_i >= 2)
    dmgPrint(25, 25, 80, true, false, document.formular.inferno_out);
  else
    document.formular.inferno_out.value = "";
}

function dmgSkill() {
  var skill = document.formular.skill.value, level = parseInt(document.formular.skill_level.value);
  var dmg_min, dmg_minadd, dmg_max, dmg_maxadd, dmg_len, dmg_lenadd;
  s_d = new Array(0, 0, 0);
  if (skill != "non" && level > 0) {
    switch (skill) {
      case "dol": dmg_min = 36;
                  dmg_max = 80;
                  dmg_len = 50;
                  dmg_minadd = new Array(20, 30, 40, 46, 52);
                  dmg_maxadd = dmg_minadd;
                  dmg_lenadd = 10;
                  break;
      case "gws": dmg_min = 32;
                  dmg_max = 48;
                  dmg_len = 200;
                  dmg_minadd = new Array(16, 32, 48, 64, 96);
                  dmg_maxadd = new Array(16, 36, 52, 68, 84);
                  dmg_lenadd = 50;
                  break;
      case "pws": dmg_min = 80;
                  dmg_max = 128;
                  dmg_len = 75;
                  dmg_minadd = new Array(48, 96, 160, 320, 480);
                  dmg_maxadd = dmg_minadd;
                  dmg_lenadd = 10;
                  break;
    }
    var i = 1;
    for (; i < level && i < 8; i++) {
      dmg_min += dmg_minadd[0];
      dmg_max += dmg_maxadd[0];
      dmg_len += dmg_lenadd;
    }
    for (; i < level && i < 16; i++) {
      dmg_min += dmg_minadd[1];
      dmg_max += dmg_maxadd[1];
      dmg_len += dmg_lenadd;
    }
    for (; i < level && i < 22; i++) {
      dmg_min += dmg_minadd[2];
      dmg_max += dmg_maxadd[2];
      dmg_len += dmg_lenadd;
    }
    for (; i < level && i < 28; i++) {
      dmg_min += dmg_minadd[3];
      dmg_max += dmg_maxadd[3];
      dmg_len += dmg_lenadd;
    }
    for (; i < level; i++) {
      dmg_min += dmg_minadd[4];
      dmg_max += dmg_maxadd[4];
      dmg_len += dmg_lenadd;
    }
    if (s_b) {
      var syn_fakt = parseInt(document.formular.syn_level.value);
      if (syn_fakt > 0) {
        var syn_fakt = (1 + syn_fakt * s_b / 100);
        dmg_min = Math.floor(dmg_min * syn_fakt);
        dmg_max = Math.floor(dmg_max * syn_fakt);
      }
    }
    s_d[0] = dmg_min;
    if (dmg_min < dmg_max)
      s_d[1] = dmg_max;
    else
      s_d[1] = dmg_min;
    s_d[2] = dmg_len;
  }
  if (s_d[2] > 0)
    dmgPrint(s_d[0], s_d[1], s_d[2], false, skill == "dol", document.formular.skill_out1, document.formular.skill_out2);
  else {
    document.formular.skill_out1.value = "";
    document.formular.skill_out2.value = "";
  }
  dmgGesamt();
}

function dmgWeap(dmg) {
  var dmg_min = parseInt(getString(dmg, 1));
  var dmg_max = parseInt(getString(dmg, 2));
  var dmg_len = parseInt(getString(dmg, 3));
  dmgPrint(dmg_min, dmg_max, dmg_len, true, false, document.formular.waff_out);
}

function dmgWeapGesamt() {
  var dmg = document.formular.waff_gift.value;
  var dmg_min = parseInt(getString(dmg, 1));
  var dmg_max = parseInt(getString(dmg, 2));
  var dmg_len = parseInt(getString(dmg, 3));
  var i, items = 0;
  if (dmg_len > 0)
    items++;
  for (i = 1; i <= 6; i++) {
    dmg = eval("document.formular.waff_sock" + i + ".value");
    if (dmg != "0,0,0") {
      dmg_min += parseInt(getString(dmg, 1));
      dmg_max += parseInt(getString(dmg, 2));
      dmg_len += parseInt(getString(dmg, 3));
      items++;
    }
  }
  dmgPrint(dmg_min, dmg_max, Math.floor(dmg_len / items), true, false, document.formular.waff_gesamt);
  dmgGesamt();
}

function dmgWeapSock(sock, dmg) {
  var dmg_min = parseInt(getString(dmg, 1));
  var dmg_max = parseInt(getString(dmg, 2));
  var dmg_len = parseInt(getString(dmg, 3));
  var out = eval("document.formular.waff_sock" + sock + "_out");
  dmgPrint(dmg_min, dmg_max, dmg_len, true, false, out);
}

function fillBeltBox(wform) {
  var neu;
  comboClear(document.formular.guer_gift);
  switch(wform) {
    case "uni":  comboAdd(document.formular.guer_gift, "kein Gift", "0,0,0");
                 comboAdd(document.formular.guer_gift, "Schlangenband (leichter Gürtel)", "40,40,75");
                 break;
    case "set":  comboAdd(document.formular.guer_gift, "kein Gift", "0,0,0");
                 comboAdd(document.formular.guer_gift, "Infernos Zeichen (schwerer Gürtel)", "0,0,0");
                 break;
    default:     comboAdd(document.formular.guer_gift, "-------------------------------------------------", "0,0,0");
  }
  changeBelt(document.formular.guer_gift.value);
}

function fillHelmBox(wform) {
  var neu;
  comboClear(document.formular.helm_gift);
  switch(wform) {
    case "uni":  comboAdd(document.formular.helm_gift, "kein Gift", "0,0,0");
                 comboAdd(document.formular.helm_gift, "Wurmschädel (Knochenhelm)", "102,102,200");
                 break;
    case "set":  comboAdd(document.formular.helm_gift, "kein Gift", "0,0,0");
                 comboAdd(document.formular.helm_gift, "Berserkers Kopfschmuck (Helm)", "0,0,0");
                 comboAdd(document.formular.helm_gift, "Infernos Schädel (Kappe)", "0,0,0");
                 break;
    default:     comboAdd(document.formular.helm_gift, "-----------------------------------------------", "0,0,0");
  }
  changeHelm(document.formular.helm_gift.value);
}

function fillWeapBox(wform) {
  var neu;
  comboClear(document.formular.waff_gift);
  switch(wform) {
    case "non": comboAdd(document.formular.waff_gift, "-------------------------------------------------------------", "0,0,0");
                break;
    case "mag": comboAdd(document.formular.waff_gift, "kein Gift", "0,0,0");
                comboAdd(document.formular.waff_gift, "Suffix 'der Fäulnis' (2 über 2 Sekunden)", "8,8,50");
                comboAdd(document.formular.waff_gift, "Suffix 'der Fäulnis' (7 über 3 Sekunden)", "24,24,75");
                comboAdd(document.formular.waff_gift, "Suffix 'des Gifts' (21 über 4 Sekunden)", "54,54,100");
                comboAdd(document.formular.waff_gift, "Suffix 'der Pestilenz' (50 über 5 Sekunden)", "103,103,125");
                break;
    case "rar": comboAdd(document.formular.waff_gift, "kein Gift", "0,0,0");
                comboAdd(document.formular.waff_gift, "2 über 2 Sekunden", "8,8,50");
                comboAdd(document.formular.waff_gift, "7 über 3 Sekunden", "24,24,75");
                comboAdd(document.formular.waff_gift, "21 über 4 Sekunden", "54,54,100");
                comboAdd(document.formular.waff_gift, "50 über 5 Sekunden", "103,103,125");
                break;
    case "uni": comboAdd(document.formular.waff_gift, "kein Gift", "0,0,0");
                comboAdd(document.formular.waff_gift, "Höllenpest (Langschwert)", "48,96,150");
                comboAdd(document.formular.waff_gift, "Jade-Tan-Do (Kris)", "460,460,100");
                comboAdd(document.formular.waff_gift, "Natternfürst (Langstab)", "40,40,75");
                comboAdd(document.formular.waff_gift, "Säurebrand (Armbrust)", "102,102,75");
                comboAdd(document.formular.waff_gift, "Schwarzzunge (Bastardschwert)", "192,192,150");
                comboAdd(document.formular.waff_gift, "Teufelsnarbe (Kriegsaxt)", "128,128,75");
                break;
    case "set": comboAdd(document.formular.waff_gift, "kein Gift", "0,0,0");
                comboAdd(document.formular.waff_gift, "Berserkers Kriegsbeil (Kriegsaxt)", "0,0,0");
                comboAdd(document.formular.waff_gift, "Infernos Fackel (Schlagstab)", "0,0,0");
                break;
  }
  changeWeap(document.formular.waff_gift.value);
}

function gemFill(){
  var combo, i;
  var value = document.formular.waff_sock1.value;
  for (i = 2; i <= sock_waff; i++) {
    combo = eval("document.formular.waff_sock" + i);
    combo.value = value
    dmgWeapSock(i, value);
  }
  dmgWeapGesamt();
}

function getString(text, position) {
  var i, start, end = -1;
  for (i = 1; i <= position; i++) {
    start = end + 1;
    end = text.indexOf(",", start);
    if (end == -1)
      if (i == position)
        end = text.length;
      else
        return "";
  }
  return text.substring(start, end);
}

function setStart() {
  started = false;
  s_d = new Array(0, 0, 0, 0);
  document.formular.waff_form.value = "non";
  fillWeapBox("non");
  document.formular.helm_form.value = "non";
  fillHelmBox("non");
  document.formular.guer_form.value = "non";
  fillBeltBox("non");
  checkSets();
  started = true;
}
