var skillData = new Array(200);
var skillPrice = new Array(200);
var customSkillPrice = new Array(200);
var skillInf = new Array(200);
var professionID = 0;
var loggedIn = true;

function load()
{
  document.getElementById('profList').options[0].selected = true;
  document.getElementById("checkL").checked = true;
  document.getElementById("chipIn").checked = true;
  document.getElementById("userfile").value = "";
  document.getElementById("avaName").value = "";
  document.getElementById("targetLevel").value = "";
  document.getElementById("costLimit").value = "";
  document.getElementById("iniSkill").value = "";
  document.getElementById("iniChipSize").value = "";
  document.getElementById("iniSkillIn").value = "";
  document.getElementById("iniSkillOut").value = "";
  
  document.getElementById("prefsPanelButton").style.color = "#C0C0C0";
  document.getElementById("prefsPanelButton").disabled = true;

  document.getElementById("prESI").value = "";
  for (var i=0; i<200; i++)
  {
    skillData[i] = 0; skillPrice[i] = 0; customSkillPrice[i] = 0; skillInf[i] = 0;
    prSkillBox = document.getElementById("prSkill" + i);
    if (prSkillBox != undefined) prSkillBox.value = ''; 
  }
}

function newXMLHttpRequest() {
  var xmlreq = false;
  if (window.XMLHttpRequest) {
    // Create XMLHttpRequest object in non-Microsoft browsers
    xmlreq = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    // Create XMLHttpRequest via MS ActiveX
    try {
      // Try to create XMLHttpRequest in later versions
      // of Internet Explorer
      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e1) {
      // Failed to create required ActiveXObject
      try {
        // Try version supported by older versions
        // of Internet Explorer
        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
        // Unable to create an XMLHttpRequest with ActiveX
      }
    }
  }
  return xmlreq;
}

function getReadyStateHandler(req, responseXmlHandler) {
  return function () {
    if (req.readyState == 4) {
      if (req.status == 200) {
        responseXmlHandler(req.responseXML);
      } else {
        alert("HTTP error: "+req.status);
      }
    }
  }
}

function sendRequest(id) {
  var req = newXMLHttpRequest();
  var handlerFunction = getReadyStateHandler(req, processResponse);
  req.onreadystatechange = handlerFunction;
  req.open("POST", "./unlocker.php", true);
  req.setRequestHeader("Content-Type", 
    "application/x-www-form-urlencoded");
  var params = "";
  params += "prof="+id;
  req.send(params);
}

function sendRequestCalc(iniS, iniCS) {
  var req = newXMLHttpRequest();
  var handlerFunction = getReadyStateHandler(req, processResponse);
  req.onreadystatechange = handlerFunction;
  req.open("POST", "./unlocker.php", true);
  req.setRequestHeader("Content-Type", 
    "application/x-www-form-urlencoded");
  var params = "";
  params += "op=calc&iniS="+iniS+"&iniCS="+iniCS;
  req.send(params);
}

function sendRequestCalc2(iniSI, iniSO) {
  var req = newXMLHttpRequest();
  var handlerFunction = getReadyStateHandler(req, processResponse);
  req.onreadystatechange = handlerFunction;
  req.open("POST", "./unlocker.php", true);
  req.setRequestHeader("Content-Type", 
    "application/x-www-form-urlencoded");
  var params = "";
  params += "op=calc2&iniSI="+iniSI+"&iniSO="+iniSO;
  req.send(params);
}


function sendRequestSkills(level, cost, chipin) {
  var req = newXMLHttpRequest();
  var handlerFunction = getReadyStateHandler(req, processResponse);
  req.onreadystatechange = handlerFunction;
  req.open("POST", "./unlocker.php", true);
  req.setRequestHeader("Content-Type", 
    "application/x-www-form-urlencoded");
  var params = "";
  if (chipin) chip = 'in';
  else chip = 'out';
  params += "prof="+professionID+"&targetlevel="+level+"&targetcost="+cost+"&chip="+chip;
  for (var i=0; i<200; i++)
  {
    if (!isNaN(skillData[i]) && skillData[i] > 0)
      params += "&skill"+i+"="+skillData[i];
      
    check = document.getElementById("check"+i);
    if (check != undefined)
    {
      checked = check.checked;
      if (!checked) params += "&prSkill"+i+"=0";
      else
      {
        prSkillBox = document.getElementById("prSkill" + i);
        prSkill = '';
        if (prSkillBox != undefined) prSkill = prSkillBox.value; 
        if (!isNaN(prSkill) && prSkill > 0)
        {
          customSkillPrice[i] = prSkill;
          params += "&prSkill"+i+"="+prSkill;
        }
        else customSkillPrice[i] = 0;
      }
    }
  }
  var prESI = '';
  var prESIBox = document.getElementById("prESI");
  if (prESIBox != undefined) prESI = prESIBox.value;
  if (!isNaN(prESI) && prESI > 0)
    params += "&prESI=" + prESI;
  
  req.send(params);
}

function sendRequestUser(user, pwd, op) {
  var req = newXMLHttpRequest();
  var handlerFunction = getReadyStateHandler(req, processResponse);
  req.onreadystatechange = handlerFunction;
  req.open("POST", "./unlocker.php", true);
  req.setRequestHeader("Content-Type", 
    "application/x-www-form-urlencoded");

  var params = "user=" + user;
  if (op != "")
  {
    var base = "" + user + pwd + challenge;
    params += "&op=" + op;
    params += "&ch=" + challenge + "&resp=" + SHA256(base);
    
    if (op == "save")
    {
      for (var i=0; i<200; i++)
      {
        if (!isNaN(skillData[i]) && skillData[i] > 0)
          params += "&skill" + i + "=" + skillData[i];
      }
      for (var i=0; i<200; i++)
      {
        prSkillBox = document.getElementById("prSkill" + i);
        prSkill = '';
        if (prSkillBox != undefined) prSkill = prSkillBox.value; 
        if (!isNaN(prSkill) && prSkill > 0)
        {
          customSkillPrice[i] = prSkill;
          params += "&prSkill"+i+"="+prSkill;
        }
      }
      var prESI = '';
      var prESIBox = document.getElementById("prESI");
      if (prESIBox != undefined) prESI = prESIBox.value;
      if (!isNaN(prESI) && prESI > 0)
        params += "&prESI=" + prESI;
    }
  }
  req.send(params);
}

function sendRequestPrefs(user, pwd, fullName, sigStyle, displayProf) {
  var req = newXMLHttpRequest();
  var handlerFunction = getReadyStateHandler(req, processResponse);
  req.onreadystatechange = handlerFunction;
  req.open("POST", "./unlocker.php", true);
  req.setRequestHeader("Content-Type", 
    "application/x-www-form-urlencoded");

  var params = "user=" + user;
  var base = "" + user + pwd + challenge;
  params += "&op=saveprefs";
  params += "&ch=" + challenge + "&resp=" + SHA256(base);
  params += "&fullName=" + fullName;
  params += "&sigStyle=" + sigStyle;
  params += "&displayProf=" + displayProf;
   
  req.send(params);
}


function processResponse(xmlResp) {

  if ((root=xmlResp.getElementsByTagName("calc")[0]) != undefined)
  {
    document.getElementById("resCalc").innerHTML = 'Final Skill Level: ' +
      xmlResp.getElementsByTagName("result")[0].firstChild.nodeValue;
  }
  else if ((root=xmlResp.getElementsByTagName("calc2")[0]) != undefined)
  {
    document.getElementById("resCalc2").innerHTML = 'Final Skill Level: ' +
      xmlResp.getElementsByTagName("result")[0].firstChild.nodeValue;
  }
  else if ((root=xmlResp.getElementsByTagName("avatar")[0]) != undefined)
  {
    var source = root.getElementsByTagName("source")[0].firstChild.nodeValue;
    if (source == "login")
    {
      var err = root.getElementsByTagName("error")[0].firstChild.nodeValue;
      var progress = document.getElementById("progressLogin");
      if (err == "ok")
      {
        progress.innerHTML = "Ok";
        var u = root.getElementsByTagName("user")[0].firstChild.nodeValue;
        document.getElementById("loginForm").style.display = 'none';
        var loginResult = document.getElementById("loginResult");
        loginResult.innerHTML = "Logged in as: <b>" + u + "</b>";
        document.getElementById("SIP").style.display = 'block';
        document.getElementById("CP").style.display = 'block';
        document.getElementById("profHeadPanel").style.height = 65;
        document.getElementById("goButton").disabled = false;
        loggedIn = true;
      }
      else progress.innerHTML = err;
    }
    else if (source == "localsave")
    {
      var count = root.getElementsByTagName("numskills")[0].firstChild.nodeValue;
      var err = root.getElementsByTagName("error")[0].firstChild.nodeValue;
      var progress = document.getElementById("progress2");
      if (err == "ok") progress.innerHTML = "Ok (Saved " + count + " skills)";
      else progress.innerHTML = err;
    }
    else if (source == "saveprefs")
    {
      var err = root.getElementsByTagName("error")[0].firstChild.nodeValue;
      var progress = document.getElementById("progressPrefs");
      if (err == "ok") progress.innerHTML = "Ok!";
      else progress.innerHTML = err;
    }
    else
    {
      var skillList = root.getElementsByTagName("skill");
      for (var i = 0; i < skillList.length; i++)
      {
        var skill = root.getElementsByTagName("skill")[i];
        if (skill != undefined)
        {
          var skillID = skill.getElementsByTagName("id")[0].firstChild.nodeValue;
          var level = skill.getElementsByTagName("level")[0];
          if (level != undefined)
            skillData[skillID] = level.firstChild.nodeValue;
        }
      }
      var prSkillList = root.getElementsByTagName("prSkill");
      for (var i = 0; i < prSkillList.length; i++)
      {
        var skill = root.getElementsByTagName("prSkill")[i];
        if (skill != undefined)
        {
          var skillID = skill.getElementsByTagName("id")[0].firstChild.nodeValue;
          var level = skill.getElementsByTagName("pr")[0];
          if (level != undefined)
            customSkillPrice[skillID] = level.firstChild.nodeValue;
        }
      }
      document.getElementById("prESI").value = "";
      var esiTag = root.getElementsByTagName("esiPrice")[0];
      if (esiTag != undefined)
      {
        esi = esiTag.firstChild.nodeValue;
        if (!isNaN(esi) && esi > 0) document.getElementById("prESI").value = esi;
      }
      document.getElementById("fullName").value = "";
      var fullNameTagArray = root.getElementsByTagName("fullName");
      if (fullNameTagArray != undefined && fullNameTagArray.length > 0)
      {
        var fullNameTag = root.getElementsByTagName("fullName")[0];
        if (fullNameTag != undefined)
        {
          var fullNameChild = fullNameTag.firstChild;
          if (fullNameChild != null)
          {
            var fullName = fullNameChild.nodeValue;
            document.getElementById("fullName").value = fullName;
          }
        }
      }
      document.getElementById("sigStyle").checked = false;
      var sigStyleTag = root.getElementsByTagName("sigStyle")[0];
      if (sigStyleTag != undefined)
      {
        var sigStyle = sigStyleTag.firstChild.nodeValue;
        if (sigStyle == "1") document.getElementById("sigStyle").checked = true;
        if (sigStyle == "0") document.getElementById("sigStyle").checked = false;
      }
      var pls = document.getElementById("profListSig");
      pls.options[0].selected = true;
      var displayProfTag = root.getElementsByTagName("displayProf")[0];
      if (displayProfTag != undefined)
      {
        displayProfChild = displayProfTag.firstChild;
        if (displayProfChild != undefined)
        {
          var displayProf = displayProfChild.nodeValue;
          var index = 0;
          for (var i=0; i<pls.options.length; i++)
            if (pls.options[i].value == displayProf) index = i;
          pls.options[index].selected = true;
        }
      }
      
      initFields();
      if (source == "wiki")
      {
        var count = root.getElementsByTagName("numskills")[0].firstChild.nodeValue;;
        var progress = document.getElementById("progress");
        progress.innerHTML = "Ok (Imported " + count + " skills)";
        document.getElementById("progress2").innerHTML = "";
        document.getElementById("progress3").innerHTML = "";
        
      }
      if (source == "local")
      {
        var count = root.getElementsByTagName("numskills")[0].firstChild.nodeValue;
        var err = root.getElementsByTagName("error")[0].firstChild.nodeValue;
        var progress = document.getElementById("progress2");
        if (err == "ok")
        {
          progress.innerHTML = "Ok (Loaded " + count + " skills)";
          document.getElementById("avaName").value = "";
          document.getElementById("progress").innerHTML = "";
          document.getElementById("progress3").innerHTML = "";
          
          document.getElementById("prefsPanelButton").disabled = false;
          document.getElementById("prefsPanelButton").style.color = "#006000";

        }
        else progress.innerHTML = err;
      }
    }
  }
  else if ((root=xmlResp.getElementsByTagName("profession")[0]) != undefined)
  {
    var hint = root.getElementsByTagName("hint")[0].firstChild;
    id = "hint";
    var h = document.getElementById(id);
    if (hint != undefined) h.innerHTML = hint.nodeValue;
    else h.innerHTML = "";

    for (var i=0; i<200; i++) skillInf[i] = 0;
    id = "skills";
    var contents = document.getElementById(id);
    contents.innerHTML = "<p/>";
    var skillList = root.getElementsByTagName("skill");
    newtext = '';
    for (var i = 0; i < skillList.length; i++)
    {
      var skill = root.getElementsByTagName("skill")[i];
      if (skill != undefined)
      {
        var skillID = skill.getElementsByTagName("id")[0].firstChild.nodeValue;
        var name = skill.getElementsByTagName("name")[0].firstChild.nodeValue;
        var level = skill.getElementsByTagName("level")[0];
        if (level != undefined && skillData[skillID] == 0)
          skillData[skillID] = level.firstChild.nodeValue;
        var inf = skill.getElementsByTagName("influence")[0].firstChild.nodeValue;
        skillInf[skillID] = inf;
        var price = skill.getElementsByTagName("price")[0].firstChild.nodeValue;
        
        var row = '';
        
        if (i % 2 == 0) row = "<div style=\"background-color:transparent; padding: 2px\">";
        else row = "<div style=\"background-color:#EEEEEE; padding: 2px\">";
        
        row += "<div class=\"sname\" id=\"sname" + skillID + "\">" + name +
          "</div><div class=\"sinf\" id=\"sinf" + skillID + "\">";
        if (parseInt(inf) != -1) row += (inf + "%");  
        row += "</div>";
        
        if (price > 0 && loggedIn)
          row += "<input class=\"checkSk\" id=\"check" + skillID + "\" type=\"checkbox\"/ checked>";
        
        row += "<input type=\"text\" style=\"text-align:right;\" " +
          "class=\"inputText\" id=\"skill" + skillID +
          "\" onKeyUp=doChange();><div class=\"tskill\" id=\"tskill" + skillID + 
          "\"></div><div class=\"tPED\" id=\"tPED" + skillID + "\"></div>" +
          "<div class=\"tPrice\" id=\"tPrice" + skillID + "\"></div>" +
          "<div class=\"tChip\" id=\"tChip" + skillID + "\"></div>" +
          "<div class=\"tStock\" id=\"tStock" + skillID + "\"></div><br/>";
          
        row += "</div>";
        newtext += row;
        if (skill.getElementsByTagName("price")[0].firstChild != undefined)
        {
          var price = skill.getElementsByTagName("price")[0].firstChild.nodeValue;
          skillPrice[skillID] = price;
        }
      }
    }
    contents.innerHTML = newtext;
    initFieldsWithoutPriceReset();
  }
  else
  {
    clearResults();
    root = xmlResp.getElementsByTagName("target")[0];
    var cost = root.getElementsByTagName("cost")[0].firstChild.nodeValue;
    var formCost = root.getElementsByTagName("fcost")[0].firstChild.nodeValue;
    var pro = root.getElementsByTagName("prostd")[0].firstChild.nodeValue;

    tl = parseInt(document.getElementById("targetLevel").value);
    cl = parseInt(document.getElementById("costLimit").value);

    if (document.getElementById("chipIn").checked)
    {
      f = document.getElementById("flevel");
      if ((!isNaN(tl) && (parseInt(pro) < tl)) || ((isNaN(tl) && (parseInt(cost) < cl))))   
        f.innerHTML = "<span style=\"color: #800000;\">Final Level: " +
          Math.round(pro) + "</span>";
      else
        f.innerHTML = "<span style=\"color: #000080;\">Final Level: " + 
          Math.round(pro) + "</span>";

      tcost = document.getElementById("cost");
      if ((!isNaN(cl) && (parseInt(cost) < cl) && isNaN(tl)) || ((isNaN(cl) && (parseInt(pro) < tl))))
        tcost.innerHTML = "<span style=\"color: #800000;\">Total Cost: " +
          formCost + " PED</span>";
      else
        tcost.innerHTML = "<span style=\"color: #000080;\">Total Cost: " +
          formCost + " PED</span>";
    }
    else
    {
      f = document.getElementById("flevel");
        f.innerHTML = "<span style=\"color: #000080;\">Final Level: " + 
          Math.round(pro) + "</span>";
      tcost = document.getElementById("cost");
      if (!isNaN(cl) && (parseInt(cost) < cl))
        tcost.innerHTML = "<span style=\"color: #800000;\">Total PEDs: " +
          formCost + " PED</span>";
      else
        tcost.innerHTML = "<span style=\"color: #000080;\">Total PEDs: " +
          formCost + " PED</span>";
    }


        
    var skillList = root.getElementsByTagName("skill");
    for (var i = 0; i < skillList.length; i++)
    { 
      var skill = root.getElementsByTagName("skill")[i];
      if (skill != undefined)
      {
        var skillID = skill.getElementsByTagName("id")[0].firstChild.nodeValue;
        var level = skill.getElementsByTagName("level")[0].firstChild.nodeValue;
        var tt = skill.getElementsByTagName("tt")[0].firstChild.nodeValue;
        var chipCost = skill.getElementsByTagName("chip")[0].firstChild.nodeValue;
        tskill = document.getElementById("tskill" + skillID);
        tPED = document.getElementById("tPED" + skillID);
        tPrice = document.getElementById("tPrice" + skillID);
        tChip = document.getElementById("tChip" + skillID);

        var stockList = skill.getElementsByTagName("stock");
        var stockLocList = skill.getElementsByTagName("loc");
	tStock = document.getElementById("tStock" + skillID);

        check = document.getElementById("check" + skillID);
        if (level >= 0 && level != skillData[skillID])
        {
          tskill.innerHTML = level;
          var num = Math.round(tt*100)/100;
          var fnum = num.toFixed(2);
          tPED.innerHTML = "(" + fnum + " PED)";
          
          if (check != undefined && check.checked)
          {
            if (customSkillPrice[skillID] == 0)
              tPrice.innerHTML = "(" + Math.round(skillPrice[skillID]) + "%)";
            else tPrice.innerHTML = "<span style=\"color: #000080;\"><b>(" +
              Math.round(customSkillPrice[skillID]) + "%)</b></span>";
          }
            
          chip = Math.round(tt * skillPrice[skillID] / 100);
          tChip.innerHTML = "" + chipCost + " PED";
          sname = document.getElementById("sname" + skillID).firstChild.nodeValue;

          //
          // Include tooltip with chip stock
          //

          toolTipText = "Available at:<br/><b><i>Twin Peaks Mall SKILL SHOP</i></b><br/><b><i>(Floor 2 - Shop#10 L)</i></b><br/><br/><table>";
          if (stockList != undefined)
          {
            for (var j = 0; j < stockList.length; j++)
            { 
              var stockValue = stockList[j].firstChild.nodeValue;
              var stockLocValue = stockLocList[j].firstChild.nodeValue;

              // Chip in Shop

              if (stockLocValue == '0')   
                toolTipText += "<tr class=stockRow><td class=stock1>" + sname + " Skill Implant:</td><td class=stock2><b>" + stockValue + "</b> TT</td></tr>";

              // Chip in SK

              else if (stockLocValue == '1')   
                toolTipText += "<tr class=stockRow><td class=stockSK1>" + sname + " Skill Implant:</td><td class=stockSK2><b>" + stockValue + "</b> TT</td></tr>";

              // Chip in Storage or Inventory

              else   
                toolTipText += "<tr class=stockRow><td class=stockStorage1>" + sname + " Skill Implant:</td><td class=stockStorage2><b>" + stockValue + "</b> TT</td></tr>";
            }
            toolTipText += "</table>";
            if (stockList.length > 0)
              tStock.innerHTML = "<img src=\"./stock.gif\" onmouseover=\"MyTip('" + toolTipText + "')\" onmouseout=\"UnTip()\"></img>";
          }
        }
        else
        {
          tskill.innerHTML = "";
          tPED.innerHTML = "";
          if (check != undefined && check.checked)
          {
            if (customSkillPrice[skillID] == 0) tPrice.innerHTML = "";
            else tPrice.innerHTML = "<span style=\"color: #000080;\"><b>(" +
              Math.round(customSkillPrice[skillID]) + "%)</b></span>";
          }
          tChip.innerHTML = "";
          tStock.innerHTML = "";
        }
      }
    }
    id = "affProf";
    var contents = document.getElementById(id);
    var profIDList = root.getElementsByTagName("proID");
    var profNameList = root.getElementsByTagName("proName");
    var profStdBefList = root.getElementsByTagName("proStdBef");
    var profStdAftList = root.getElementsByTagName("proStdAft");
    row = '';
    numrows = Math.floor((profNameList.length+1)/2);
    for (var i=0; i<numrows; i+=1)
    { 
      row += "<div class=\"profName\">" + profNameList[i].firstChild.nodeValue +
        "</div><div class=\"oldProf\">" + profStdBefList[i].firstChild.nodeValue +
        "</div><div class=\"newProf\">" + profStdAftList[i].firstChild.nodeValue + "</div>";
      if (i+numrows < profNameList.length)
        row += "<div class=\"profName\" style=\"left:480\">" + profNameList[i+numrows].firstChild.nodeValue +
          "</div><div class=\"oldProf\" style=\"left:690\">" + profStdBefList[i+numrows].firstChild.nodeValue +
          "</div><div class=\"newProf\" style=\"left:760\">" + profStdAftList[i+numrows].firstChild.nodeValue + "</div>";
      row += "<br/>";
    }
    if (row != '' && loggedIn)
      contents.innerHTML = "<br/><br/><div class=\"affProf\">" + row + "</div><br/>";
    else
      contents.innerHTML = "";
      
    if (!loggedIn)
    {
      document.getElementById("goButton").disabled = true;
    }
  }
}

function initFields()
{
  var i = 0;
  while (i<200)
  {
    inputBox = document.getElementById("skill" + i);
    if (inputBox != undefined)
    {
      var value = skillData[i];
      if (!isNaN(value) && value > 0) inputBox.value = value;
      else inputBox.value = "";
    }
    prSkillBox = document.getElementById("prSkill" + i);
    if (prSkillBox != undefined)
    {
      var value = customSkillPrice[i];
      if (!isNaN(value) && value > 0) prSkillBox.value = value;
      else prSkillBox.value = "";
    }
    
    i++;
  }
  clearResults();
  doChange();
  document.getElementById("targetLevel").value = "";
  document.getElementById("costLimit").value = "";
  f = document.getElementById("flevel");
  f.innerHTML = "";
  tcost = document.getElementById("cost");
  tcost.innerHTML = "";
  aff = document.getElementById("affProf");
  aff.innerHTML = "";
}

function initFieldsWithoutPriceReset()
{
  var i = 0;
  while (i<200)
  {
    inputBox = document.getElementById("skill" + i);
    if (inputBox != undefined)
    {
      var value = skillData[i];
      if (!isNaN(value) && value > 0) inputBox.value = value;
      else inputBox.value = "";
    }
    i++;
  }
  clearResults();
  doChange();
  document.getElementById("targetLevel").value = "";
  document.getElementById("costLimit").value = "";
  f = document.getElementById("flevel");
  f.innerHTML = "";
  tcost = document.getElementById("cost");
  tcost.innerHTML = "";
  aff = document.getElementById("affProf");
  aff.innerHTML = "";
}


function clearResults()
{
  var i = 0;
  while (i<200)
  {
    tskill = document.getElementById("tskill" + i);
    if (tskill != undefined) tskill.innerHTML = "";
    tPED = document.getElementById("tPED" + i);
    if (tPED != undefined) tPED.innerHTML = "";
    tPrice = document.getElementById("tPrice" + i);
    if (tPrice != undefined) tPrice.innerHTML = "";
    tChip = document.getElementById("tChip" + i);
    if (tChip != undefined) tChip.innerHTML = "";
    tStock = document.getElementById("tStock" + i);
    if (tStock != undefined) tStock.innerHTML = "";
    i++;
  }	
}

function doChangeProf(prof)
{
   if (prof != 0) sendRequest(prof);
   professionID = prof;
}

function doChange()
{
  var i = 0;
  var sum = 0;
  while (i<200)
  {
    inputBox = document.getElementById("skill" + i);
    if (inputBox != undefined)
    {
      value = parseInt(inputBox.value);
      if (!isNaN(value))
      {
        skillData[i] = value;
        sinf = skillInf[i]; if (sinf == -1) sinf = 100;
        sum += (value*sinf/100);
      }
      else skillData[i] = 0;
    }
    i++;
  }
  p = document.getElementById('profList');
  if (p.options[p.selectedIndex].text == "Health") { sum += 88; setLevel(Math.round(sum*100)/100); }
  else setLevel(Math.round(sum));
}

function setLevel(sum)
{
  id = "level";
  var contents = document.getElementById(id);
  if (sum == 0)
    contents.innerHTML = "";
  else
    contents.innerHTML = "" + sum;
}

function doGo()
{
  if (!document.getElementById("calcButton").disabled)
  {
    l = document.getElementById("targetLevel").value;
    if (l.length == 0 || isNaN(l)) l = -1;
    c = document.getElementById("costLimit").value;
    if (c.length == 0 || isNaN(c)) c = -1;
    if (l != -1 || c != -1)
    {
      f = document.getElementById("flevel");
      f.innerHTML = "";
      tcost = document.getElementById("cost");
      tcost.innerHTML = "";
      chipin = document.getElementById("chipIn").checked;
      sendRequestSkills(l, c, chipin);
    }
  }
}

function doCalc()
{
  if (!document.getElementById("calcButton").disabled)
  {
    iniS = document.getElementById("iniSkill").value;
    if (iniS.length == 0 || isNaN(iniS)) l = -1;
    iniCS = document.getElementById("iniChipSize").value;
    if (iniCS.length == 0 || isNaN(iniCS)) c = -1;
    if (iniS != -1 || iniCS != -1)
    {
      rC = document.getElementById("resCalc");
      rC.innerHTML = "";
      sendRequestCalc(iniS, iniCS);
    }
  }
}

function doCalc2()
{
  if (!document.getElementById("calcButton").disabled)
  {
    iniSI = document.getElementById("iniSkillIn").value;
    if (iniSI.length == 0 || isNaN(iniSI)) l = -1;
    iniSO = document.getElementById("iniSkillOut").value;
    if (iniSO.length == 0 || isNaN(iniSO)) c = -1;
    if (iniSI != -1 || iniSO != -1)
    {
      rC = document.getElementById("resCalc2");
      rC.innerHTML = "";
      sendRequestCalc2(iniSI, iniSO);
    }
  }
}


function doImport()
{
  var ava = document.getElementById("avaName").value;
  if (ava.length > 0)
  {
    for (var i=0; i<200; i++) skillData[i] = 0;
    initFields();
    var progress = document.getElementById("progress");
    progress.innerHTML = "Loading...";
    sendRequestUser(ava, "", "");
  }
}

function doLogin()
{
  var u = document.getElementById("UName").value;
  var p = document.getElementById("Pwd").value;
  if (u.length > 0 && p.length > 0)
  {
    // for (var i=0; i<200; i++) { skillData[i] = 0; customSkillPrice[i] = 0; }
    // initFields();
    var progress = document.getElementById("progressLogin");
    progress.innerHTML = "Loging In...";
    sendRequestUser(u, p, "login");
  }
}

function doLoadUser()
{
  var u = document.getElementById("UName").value;
  var p = document.getElementById("Pwd").value;
  if (u.length > 0 && p.length > 0)
  {
    for (var i=0; i<200; i++) { skillData[i] = 0; customSkillPrice[i] = 0; }
    initFields();
    var progress = document.getElementById("progress2");
    progress.innerHTML = "Loading...";
    sendRequestUser(u, p, "load");
  }
}

function doSaveUser()
{
  var u = document.getElementById("UName").value;
  var p = document.getElementById("Pwd").value;
  if (u.length > 0 && p.length > 0)
  {
    var progress = document.getElementById("progress2");
    progress.innerHTML = "Saving...";
    sendRequestUser(u, p, "save");
  }
}

function doSavePrefs()
{
  var u = document.getElementById("UName").value;
  var p = document.getElementById("Pwd").value;
  var fn = document.getElementById("fullName").value;
  var ss = 0;
  if (document.getElementById("sigStyle").checked) ss = 1;
  var pls = document.getElementById("profListSig");
  var prof = pls.options[pls.selectedIndex].value;
  if (u.length > 0 && p.length > 0)
  {
    var progress = document.getElementById("progressPrefs");
    progress.innerHTML = "Saving...";
    sendRequestPrefs(u, p, fn, ss, prof);
  }
}

function doAva(e)
{
  if (window.event) { if (e.keyCode == 13) doImport(); }
  else if (e.which) { if (e.which == 13) doImport(); }
}

function doTarget(e)
{
  if (window.event) { if (e.keyCode == 13) doGo(); }
  else if (e.which) { if (e.which == 13) doGo(); }
}

function doCost(e)
{
  if (window.event) { if (e.keyCode == 13) doGo(); }
  else if (e.which) { if (e.which == 13) doGo(); }
}

function doToggle()
{
  document.getElementById("introButton").blur();
  if (document.getElementById("intro2").style.display != 'none')
  {
    document.getElementById("intro2").style.display = 'none';
    document.getElementById("introButton").value = 'Instructions: (click to show)';
  }
  else
  {
    document.getElementById("intro2").style.display = 'inline';
    document.getElementById("introButton").value = 'Instructions: (click to hide)';
  }
}

function doProfPanel()
{
  document.getElementById("profPanelButton").blur();
  document.getElementById("profPanelButton").className = 'profPanelButtonFront';
  document.getElementById("pricePanelButton").className = 'pricePanelButtonBack';
  document.getElementById("calculatorPanelButton").className = 'calculatorPanelButtonBack';
  document.getElementById("prefsPanelButton").className = 'prefsPanelButtonBack';
  document.getElementById("profPanel").style.display = 'block';
  document.getElementById("pricePanel").style.display = 'none';
  document.getElementById("calculatorPanel").style.display = 'none';
  document.getElementById("prefsPanel").style.display = 'none';
}

function doPricePanel()
{
  document.getElementById("pricePanelButton").blur();
  document.getElementById("profPanelButton").className = 'profPanelButtonBack';
  document.getElementById("pricePanelButton").className = 'pricePanelButtonFront';
  document.getElementById("calculatorPanelButton").className = 'calculatorPanelButtonBack';
  document.getElementById("prefsPanelButton").className = 'prefsPanelButtonBack';
  document.getElementById("profPanel").style.display = 'none';
  document.getElementById("pricePanel").style.display = 'block';
  document.getElementById("calculatorPanel").style.display = 'none';
  document.getElementById("prefsPanel").style.display = 'none';
}

function doCalculatorPanel()
{
  document.getElementById("calculatorPanelButton").blur();
  document.getElementById("profPanelButton").className = 'profPanelButtonBack';
  document.getElementById("pricePanelButton").className = 'pricePanelButtonBack';
  document.getElementById("calculatorPanelButton").className = 'calculatorPanelButtonFront';
  document.getElementById("prefsPanelButton").className = 'prefsPanelButtonBack';
  document.getElementById("profPanel").style.display = 'none';
  document.getElementById("pricePanel").style.display = 'none';
  document.getElementById("calculatorPanel").style.display = 'block';
  document.getElementById("prefsPanel").style.display = 'none';
}


function doPrefsPanel()
{
  document.getElementById("calculatorPanelButton").blur();
  document.getElementById("profPanelButton").className = 'profPanelButtonBack';
  document.getElementById("pricePanelButton").className = 'pricePanelButtonBack';
  document.getElementById("calculatorPanelButton").className = 'calculatorPanelButtonBack';
  document.getElementById("prefsPanelButton").className = 'prefsPanelButtonFront';
  document.getElementById("profPanel").style.display = 'none';
  document.getElementById("pricePanel").style.display = 'none';
  document.getElementById("calculatorPanel").style.display = 'none';
  document.getElementById("prefsPanel").style.display = 'block';
}


function doStockPanel()
{
  document.getElementById("stockPanelButton").blur();
  document.getElementById("profPanelButton").className = 'profPanelButtonBack';
  document.getElementById("pricePanelButton").className = 'pricePanelButtonBack';
  document.getElementById("calculatorPanelButton").className = 'calculatorPanelButtonBack';
  document.getElementById("stockPanelButton").className = 'prefsPanelButtonFront';
  document.getElementById("profPanel").style.display = 'none';
  document.getElementById("pricePanel").style.display = 'none';
  document.getElementById("calculatorPanel").style.display = 'none';
  document.getElementById("stockPanel").style.display = 'block';
}


function doRadio()
{
  checked = document.getElementById("checkW").checked;
  if (checked)
  {
  	document.getElementById("importPanel1").style.display = 'block';
  	document.getElementById("importPanel2").style.display = 'none';
  	document.getElementById("importPanel3").style.display = 'none';
    document.getElementById("checkW").blur();    
  }
  else
  {
    checked = document.getElementById("checkL").checked;
    if (checked)
    {
  	  document.getElementById("importPanel1").style.display = 'none';
  	  document.getElementById("importPanel2").style.display = 'block';
  	  document.getElementById("importPanel3").style.display = 'none';
      document.getElementById("checkL").blur();    
    }
    else
    {
  	  document.getElementById("importPanel1").style.display = 'none';
  	  document.getElementById("importPanel2").style.display = 'none';
  	  document.getElementById("importPanel3").style.display = 'block';
      document.getElementById("checkF").blur();    
    }
  }
}

function doChip()
{
  checked = document.getElementById("chipIn").checked;
  if (checked)
  {
    document.getElementById("climit").innerHTML = "Cost Limit:";
    document.getElementById("chipIn").blur();    
  }
  else
  {
    document.getElementById("climit").innerHTML = "PED Limit:";
    document.getElementById("chipOut").blur();
  }
}

function startCallback()
{
  var progress = document.getElementById("progress3");
  progress.innerHTML = "Loading...";
  return true;  
}  
     
function completeCallback(response)
{  
  while (response.indexOf("[", 0) != -1) response = response.replace("[", "<");
  while (response.indexOf("]", 0) != -1) response = response.replace("]", ">");

  if (window.ActiveXObject)
  {  
    var doc = new ActiveXObject("Microsoft.XMLDOM");
    doc.loadXML(response);
  }
  else
  {
    var parser = new DOMParser();
    var doc = parser.parseFromString(response, "text/xml");
  }
  var root = doc.getElementsByTagName("avatar")[0];
  if (root != undefined)
  {
  	for (var i=0; i<200; i++) skillData[i] = 0;
    initFields();
    var skillList = root.getElementsByTagName("skill");
    var numskills = root.getElementsByTagName("numskills")[0].firstChild.nodeValue;;
    for (var i = 0; i < skillList.length; i++)
    {
      var skill = root.getElementsByTagName("skill")[i];
      if (skill != undefined)
      {
        var sTag = skill.getElementsByTagName("id")[0];
        if (sTag != undefined)
        {
          skillID = sTag.firstChild.nodeValue;
          var lTag = skill.getElementsByTagName("level")[0];
          if (lTag != undefined) skillData[skillID] = lTag.firstChild.nodeValue;
        }
      }
    }
    initFields();
  }
  var progress = document.getElementById("progress3");
  progress.innerHTML = "Ok (Read " + numskills + " skills)";
  document.getElementById("avaName").value = "";
  document.getElementById("progress").innerHTML = "";
  document.getElementById("progress2").innerHTML = "";
}

function MyTip(arg)
{
  // return Tip(arg, SHADOW, true, ABOVE, true, JUMPHORZ, true, FADEIN, 400, FADEOUT, 400);
  return Tip(arg); 
}