var impressions;
var cpm;
var click_through;
var conversion_rate;
var profit;

$(document).ready(function() {
    
    $("#impressions").keyup( function() {

       var val =  $("#impressions").val();
       
       if (val == "") {
            if (!$("#impressions_err").is(":hidden")) $("#impressions_err").hide("fast");
            return;        
       }

       var no  = parseInt(val, 10);

       if (!isNaN(no)) {            
            if (!$("#impressions_err").is(":hidden")) $("#impressions_err").hide("fast");
            impressions = no;
            calculate();            
       }
       else {
            $("#impressions_err").text("Error parsing number");
            if ($("#impressions_err").is(":hidden")) $("#impressions_err").show("fast");
       }
       
    });
    
    $("#cpm").keyup( function () {
        
       var val =  $("#cpm").val();
       
       if (val == "") {
            if (!$("#cpm_err").is(":hidden")) $("#cpm_err").hide("fast");
            return;        
       }

       var no  = parseFloat(val);

       if (!isNaN(no)) {            
            if (!$("#cpm_err").is(":hidden")) $("#cpm_err").hide("fast");
            cpm = no;
            calculate();            
       }
       else {
            $("#cpm_err").text("Error parsing number");
            if ($("#cpm_err").is(":hidden")) $("#cpm_err").show("fast");
       }
        
    });
    
    $("#click_through").keyup( function() {
       var val =  $("#click_through").val();
       
       if (val == "") {
            if (!$("#click_through_err").is(":hidden")) $("#click_through_err").hide("fast");
            return;        
       }

       var no  = parseFloat(val);

       if (!isNaN(no)) {            
            if (!$("#click_through_err").is(":hidden")) $("#click_through_err").hide("fast");
            click_through = no;
            calculate();            
       }
       else {
            $("#click_through_err").text("Error parsing number");
            if ($("#click_through_err").is(":hidden")) $("#click_through_err").show("fast");
       }
        
    });
    
    
    $("#conversion_rate").keyup( function() {
       var val =  $("#conversion_rate").val();
       
       if (val == "") {
            if (!$("#conversion_rate_err").is(":hidden")) $("#conversion_rate_err").hide("fast");
            return;        
       }

       var no  = parseFloat(val);

       if (!isNaN(no)) {            
            if (!$("#conversion_rate_err").is(":hidden")) $("#conversion_rate_err").hide("fast");
            conversion_rate = no;
            calculate();            
       }
       else {
            $("#conversion_rate_err").text("Error parsing number");
            if ($("#conversion_rate_err").is(":hidden")) $("#conversion_rate_err").show("fast");
       }
        
    });
    
    $("#profit").keyup( function() {

       var val =  $("#profit").val();
       
       if (val == "") {
            if (!$("#profit_err").is(":hidden")) $("#profit_err").hide("fast");
            return;        
       }

       var no  = parseFloat(val);

       if (!isNaN(no)) {            
            if (!$("#profit_err").is(":hidden")) $("#profit_err").hide("fast");
            profit = no;
            calculate();            
       }
       else {
            $("#profit_err").text("Error parsing number");
            if ($("#profit_err").is(":hidden")) $("#profit_err").show("fast");
       }
        
    });

    $("#go").click( function() {
        
        var val =  $("#impressions").val();
        var no  = parseInt(val, 10);
        if (!isNaN(no)) impressions = no;
        
        val =  $("#cpm").val();
        no  = parseFloat(val);
        if (!isNaN(no)) cpm = no;

        val =  $("#click_through").val();
        no  = parseFloat(val);
        if (!isNaN(no)) click_through = no;
        
        val =  $("#conversion_rate").val();
        no  = parseFloat(val);
        if (!isNaN(no)) conversion_rate = no;
        
        val =  $("#profit").val();
        no  = parseFloat(val);
        if (!isNaN(no)) profit = no;
        
        calculate();
    })
    
});

function calculate() {
    if (!impressions || !cpm || !click_through || !conversion_rate || !profit) return;
    
    if ((isNaN( eval(impressions*(cpm / 1000)) )==true))
        var monthlycpmcost=0;
    else
        var monthlycpmcost = eval(impressions*(cpm / 1000))

    if ((isNaN( eval((click_through / 100) * (conversion_rate / 100) * impressions) )==true))
        var numberofconversions=0;
    else
        var numberofconversions = eval((click_through / 100) * (conversion_rate / 100) * impressions)

    if ((isNaN( eval((numberofconversions * profit) - monthlycpmcost) )==true))
        var projectedprofit=0;
    else
        var projectedprofit = eval((numberofconversions * profit) - monthlycpmcost)

    if ((monthlycpmcost==0))
        var roi=0;
    else
        var roi = eval((projectedprofit / monthlycpmcost)*100);

    var result1 = Math.round(monthlycpmcost*100)/100;
    var result2 = Math.round(numberofconversions*100)/100;
    var result3 = Math.round(projectedprofit*100)/100;
    var result4 = Math.round(roi*100)/100;

    var html = '<p class="headline bold">Results</p>';

    html+='<p>Monthly CPM advertising cost = $'+ result1 +'</p>';
    html+='<p>Number of conversions from CPM traffic = ' + result2 +'</p>';
    html+='<p>Projected profit from CPM traffic (net of CPM advertising expense) = $' + result3 +'</p>';
    html+='<p>Your CPM advertising ROI = '+ result4 + "%</p>";

    $("#results").html(html);
    
}