anchor.diff:  
     lvl.text((l.current-1) + "/" + l.max);
   
  -  var change = 0, levels = skills[skill.data('id')].levels;
  +  var change = 0, levels = jobs[skill.data('job')].skills[skill.data('id')].levels;
     for (var i = l.current - 1; i < start; i++) {
       change -= levels[i].spcost;
     }
  
positive.code:       <li data-job="${loop.index}"<c:if test="${loop.first}"> class="active"</c:if>>${job.name}<div class="sp">0/${job.maxSP}</div></li></c:forEach>
        <li>Total SP<div class="sp">0/${max_sp}</div></li>
      </ul>
    </aside>
    <section><c:forEach items="${jobs}" var="job" varStatus="jobLoop">
      <table class="skill-tree" id="skill-tree-${jobLoop.index}"><c:forEach items="${job.skillTree}" var="skillRow" varStatus="skillRowLoop">
  
negative.code: </main>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <script type="text/javascript">
  function setDescription($skill) { // also sets warnings!
    var job = jobs[$skill.data('job')], skills=job.skills, skill = skills[$skill.data('id')];
  }
  
  function setActive(skill, perm) {
    if (perm) {
      skill.data('permanent', 1);
  