function showcalc(event) {
  $("#calculator").css({
    visibility:"visible"
  });
  $("#blur-overlay").css({
    opacity:1,
    left:0
  });
  $("#calculator").css({
    left: event.pageX,
    top: event.pageY - 280
  }).animate({
    opacity:1,
    left: '+=50'
  }, 750, "easeOutQuint", function(){
    $("#blur-overlay").click(killCalc);
  });
  $("#blur-overlay, #calculator").show("fade", 200);
  $("#kwh-slider").slider({
    min:.08,
    max:.16,
    value:.11,
    animate:true,
    step:.01,
    slide:function(event,ui){
      var kwhValue = ui.value.toFixed(2);

      $("#kwh-slider-labels .value").html(kwhValue);
    },
    change:function(event,ui){
      updateCalculator();
    }
  });
  $("#cpu-slider").slider({
    min:.75,
    max:.85,
    value:.80,
    step:.05,
    animate:true,
    slide:function(event,ui){
      var cpuString;
      if (ui.value == .75){
        cpuString = "Light Use";
      } else if (ui.value == .80){
        cpuString = "Moderate Use";
      } else if (ui.value == .85){
        cpuString = "Heavy Use";
      }
      $("#cpu-slider-labels .value").html(cpuString);
    },
    change:function(event,ui){
      updateCalculator();
    }      

  });
  $("#calculator input").keypress(function(event){
    if (String.fromCharCode(event.keyCode).match(/[^0-9]/g)) return false;
  });
  $("#calculator input").keyup(function(event){
    if (isNaN($(this).val()) || isNaN(parseInt($(this).val(), 10))) {
      $(this).val(0);
    }

    $(this).submit();
  });
  $("#calculator input").submit(function(){
    updateCalculator();
  });

  $("#calculator-shop-button").click(function(event){
    var totalLicenses = parseInt($("input[name='pc-number']").val(), 10) + parseInt($("input[name='server-number']").val(), 10);
    var hrefString = "http://grano.la/shop/?needed=" + totalLicenses;
    window.location.href=hrefString;
    return false;
  });

  $("#calculator-trial-button").click(function(event){
    window.location.href="/account/30day.php";
    return false;
  });

  $("#calculator .number-controls img").mousedown(function(event){
    var thisField = $(event.target).parentsUntil(".input-container").siblings("input")
    if (isNaN(thisField.val())) {
      thisField.val(0);
    }
    event.preventDefault();
    var tgt = $(event.target);
    startSpinning(tgt);
  });


  $("#calculator .number-controls img").click(function(event){
    fieldIncrement($(event.target), 1);
  });

  updateCalculator();
  event.stopPropagation();
};

function startSpinning(tgt){
  var timInt;
  var tim = window.setTimeout(function(){
    var i=0;
    timInt = window.setInterval(function(){
      i++;
      if (i > 49) {
        var j = 250;
      } 
      else if (i > 24){
        var j = 50;
      } 
      else if (i > 9){
        var j = 5;
      } 
      else var j=1;
      fieldIncrement(tgt, j);
    }, 50);
  }, 750);
  $("#calculator .number-controls img").mouseup(function(event){
    clearTimeout(tim);
    clearInterval(timInt);
  });
  $("#calculator .number-controls img").mouseleave(function(){
    clearTimeout(tim);
    clearInterval(timInt);
  });    
}

function fieldIncrement(tgt, incrementAmount){
  var parentField = tgt.parentsUntil(".input-container").siblings("input");
  var fieldVal = parentField.val();
  var tgtCls = tgt.attr("class");
  if (tgtCls == "number-up"){
    parentField.val(parseInt(fieldVal, 10) + incrementAmount);
  } else {
    if (fieldVal - incrementAmount > 0){
      parentField.val(parseInt(fieldVal, 10) - incrementAmount);
    } else {
      parentField.val(0);
    }
  }
  parentField.submit();  
}

function formatWeight(n, locality){
  var ton, localWeight;
  if (locality == "USA") {
    var ton = 2000;
    localWeight = "lbs"
  } 
  else {
    var ton = 1000;
    localWeight = "kgs"
  }
  if (n > ton) {
    var numTons = Math.floor(n/ton);
    var numUnits = Math.floor(n % ton);
    var tonsPlural = "";
    if (numTons > 1){
      tonsPlural = "s";
    }
    return (numTons + " ton" + tonsPlural + ", " + numUnits + localWeight + " ");
  } 
  else {
    return (Math.floor(n) + localWeight + " ");
  }

}

function updateCalculator(){
  var currencyUnit = "$";
  var carbonLocal = 1.31;
  var locality = "USA";
  var serverLicenses = parseInt($("input[name='server-number']").val(), 10);
  var desktopLicenses = parseInt($("input[name='pc-number']").val(), 10);
  var totalLicenses = serverLicenses + desktopLicenses;
  var energySavingsPercent = 1.0 - $("#cpu-slider").slider("value");
  var pricePerKWH = $("#kwh-slider").slider("value");
  var kWhPerPC = 0.1 * energySavingsPercent * 8760;
  var kWhPerServer = 0.2 * energySavingsPercent * 8760;
  var savingsPerPC = kWhPerPC * pricePerKWH;
  var savingsPerServer = kWhPerServer * pricePerKWH;
  var CO2PerPC = kWhPerPC * carbonLocal;
  var CO2PerServer = kWhPerServer * carbonLocal;
  var energySavingsCO2 = CO2PerPC * desktopLicenses + CO2PerServer * serverLicenses;
  var pricePer;
  if (totalLicenses > 5000){
    pricePer = 5.99;
  } 
  else if (totalLicenses > 999){
    pricePer = 6.99;
  } 
  else {
    pricePer = 7.99;      
  }
  var savingsEstimate = Math.round(desktopLicenses * savingsPerPC + serverLicenses * savingsPerServer);
  $(".currency-unit").html(currencyUnit);
  $("#licenses .value").html(totalLicenses);
  $("#savings-estimate .value").html(savingsEstimate);
  $("#carbon .value").html(formatWeight(energySavingsCO2, locality));
}

function killCalc(event){
  $("#blur-overlay, #calculator .number-controls img, #calculator-shop-button, #calculator input").unbind();
  $("#calculator, #blur-overlay").animate({
    opacity:0
  }, 250, "easeOutQuint", function(){
    $(this).hide("fade", 50);
    // $("#calculator, #blur-overlay").remove();
  });
};

