//
// ROI Calculator
//

$(function () {
    var data = {
      Progress : {
        ".NET" : [ 250, 500,  700, 1000, 1200, 1400 ],
        "Java" : [ 400, 700, 1000, 1300, 1800, 2000 ]
      },
      Informix : {
        ".NET" : [ 300, 600,  800, 1200, 1500, 1800 ],
        "Java" : [ 400, 700, 1000, 1300, 1800, 2000 ]
      },
      "Power Builder" : {
        ".NET" : [ 350, 650,  900, 1250, 1600, 1850 ],
        "Java" : [ 400, 700, 1000, 1300, 1800, 2000 ]
      },
      Delphi : {
        ".NET" : [ 300, 600,  800, 1200, 1500, 1800 ],
        "Java" : [ 400, 700, 1000, 1300, 1800, 2000 ]
      },
      "Visual Basic" : {
        ".NET" : [ 300, 600,  800, 1200, 1500, 1800 ],
        "Java" : [ 400, 700, 1000, 1300, 1800, 2000 ]
      }
    };
    
    var n4 = 150;
    var n5 = 1;
    
    $("#calc input").keypress(ddraw);
    $("#calc input").click(ddraw);
    $("#calc select").keypress(ddraw);
    $("#calc select").click(ddraw);
    
    $("#calc input[type=button]").click(draw);

    function rn(n,c) {
      return Math.round(n*Math.pow(10,c))/Math.pow(10,c);
    }
    
    function ddraw() { 
      if ($("#calc #auto:checked").length > 0) 
        draw();
    }
    
    function draw() { 
      var from = $("#calc #from").val();
      var to = $("#calc #to").val();
      var ln = $("#calc #lines").val();
      var plex = $("#calc #plex").val();
      var test = $("#calc :radio[name=test]").filter(":checked").val();
      var team = $("#calc :radio[name=team]").filter(":checked").val();
      
      var error = 0;
      if(from == -1) error = 1;
      if(to == -1) error = 2;
      if(ln == -1) error = 3;
      if(test === undefined) error = 4;
      if(team === undefined) error = 5;
      
      var a = [100, 300, 500, 1000, 2000, 3000];
      
      
      var yticks = [];
      for (var i = 1; i < 8; i ++) {
          yticks.push([i*1000, ""+i+"k"]);
      }
      
      var settings = {
            lines: { show: true },
            points: { show: true },
            grid: { 
                hoverable: true, 
                markings : [], 
                markingsColor: "#ffd" 
            },
            colors: ["#4da74d", "#edc240", "#afd8f8"],
            xaxis: {
                ticks: [[a[0], "100k"], [a[1], "300k"], [a[2], 
                  "500k"], [a[3], "1mln"], [a[4], "2mln"]],
                 min : 0, max : 2100
            },
            yaxis: {
                min : 0, 
                max : 7300,
                ticks: yticks
            },
            legend: {
              position: "nw"
            }
      };

      if (error > 0) {
        $.plot($("#placeholder"), [
          { data: [[2100,7200]], points: { show: false } }
        ], settings);        
        
        var h = "&nbsp;";
        
        $("#calc #d4").html(h);
        $("#calc #f4").html(h);
        $("#calc #l4").html(h);
        
        return;
      }
      
      
      var d4 = data[from][to][ln] * plex * test;
      var f4 = a[ln] / 100 * n4 * plex * test;
      var l4 = d4 / 168 / team;
      
      $("#calc #d4").html(rn(d4,n5));
      $("#calc #f4").html(rn(f4,n5));
      $("#calc #l4").html(rn(l4,n5));
      
      var k = test * plex;


      var d0 = [[a[ln],0],[a[ln], 7300],null,[2100,7300]];
      settings.grid.markings.push({ yaxis: {
          from: k*data[from][to][ln], to: n4/100*k*a[ln] } });

      var d1 = [[0,0]];
      for (var i = 0; i < 6; i ++) {
          d1.push([a[i], k*data[from][to][i]]);
      }

      var d2 = [[0,0]];
      for (var i = 0; i < 6; i ++) {
          d2.push([a[i], n4/100*k*a[i]]);
      }
      
      
      $.plot($("#placeholder"), [
          { data: d0, points: { show: false } },
          { label: "automated",  data: d1 },
          { label: "manual",  data: d2 }
      ], settings);
        
      var previousPoint = null;
      function showTooltip(x, y, contents) {
          $('<div id="tooltip">' + contents + '</div>').css( {
              position: 'absolute',
              display: 'none',
              top: y + 5,
              left: x + 5,
              border: '1px solid #fdd',
              padding: '2px',
              'background-color': '#fee',
              opacity: 0.80
          }).appendTo("body").fadeIn(200);
      }
      $("#placeholder").bind("plothover", function (event, pos, item) {
          if (item) {
              if (previousPoint != item.datapoint) {
                  previousPoint = item.datapoint;
                  
                  $("#tooltip").remove();
                  var x = item.datapoint[0],
                      y = rn(item.datapoint[1], 2);
                  
                  if (x!=2100 && x!=0) {
                        pf = "k";
                        if (x >= 1000) {
                          x /= 1000;
                          pf = "mln";
                        }
                        showTooltip(item.pageX, item.pageY,
                              "Estimated "  + item.series.label + " migration of " 
                              + x + pf + " lines of code is aprox " 
                              + y + " man hours");
                  }
              }
          }
          else {
              $("#tooltip").remove();
              previousPoint = null;            
          }
      });      
    };

    draw();
});
