<!DOCTYPE html>
<html>
  <head>
    <title>Leaderboard with Local Storage with JavaScript & jQuery</title>
  </head>
  <link href="style.css" rel="stylesheet" type="text/css">
  <body>
    <h1>Leaderboard</h1>
      <div class="person" style="display: none;">
        <span class="name">...</span>
        <span class="points">...</span>
        <span class="input hidden">
          <input type="number">
        </span>
      </div>
    <div id="ppl">

    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="script.js"></script>
  </body>
</html>

var $$ = {
  storeData: function() {
    localStorage["karma.data"] = JSON.stringify(this.data);
  },
  readData: function() {
    this.data = JSON.parse(localStorage["karma.data"]);
  },
  leaderboard: function() {
    return this.data.sort(this.compare);
  },
  compare: function (a, b){
    return b.points - a.points;
  },
  // modifyPointsFor(0, 2);
  modifyPointsFor: function(indexInArray, newPoints) {
    this.data[indexInArray].points = newPoints;
    this.storeData();
    this.cloner();
  },
  cloner: function(){
  $("#ppl").empty();
  var sorted = $$.leaderboard();
  var $template = $(".person:first"), $clonedLi;
  var ppl = sorted.map(function(p, i) {
    $clonedLi = $template.clone().show();
    $clonedLi.data("order", i);
    $clonedLi.find(".name").text(p.name);
    $clonedLi.find(".points").text(p.points);
    $clonedLi.find("input").val(p.points);
    return $clonedLi;
  });

  $("#ppl").append(ppl);

  },
  eventHandler: function(){
      $("#ppl").on("dblclick", ".points", function(event) {
          $(this).hide();
          $(this).parent(".person").find(".input").show(); //problem
      }).on("keyup", "input", function(event) {
        if (event.which === 13) {
            var person = $(this).parents(".person");
            var personIndex = person.data("order"); //problem
            var newVal = $(this).val();
            $$.modifyPointsFor(personIndex, newVal); 
            $(this).parent().prev(".points").text(newVal); //problem
            $(this).parent().hide(); //problem
            $(".points").show();

        }
      });

  },

  data: []
}


$(document).ready(function() {
  $$.readData();
  $$.cloner();
  $$.eventHandler();


})


body {
  margin-left: 4em;
}

.person {
  margin: 0.5em;
  float: left;
  border: 1px solid #ddd;
  padding: 10px;
  width: 250px;
}

span.points {
  margin-left: 0.5em;
  border: 1px solid #939191;
  border-radius: 50%;
  width: 17px;
  display: inline-block;
  text-align: center;
  padding: 5px;
  background-color: #F4F1F1;
  float: right;
  cursor: pointer;
}

.points:hover {
  opacity: 0.6;
}

.name {
  font-size: 1.2em;
}

.input input {
  width: 30px;
  float: right;
}

.hidden{
  display: none;
}