
var Quote = {

  stDavidson: null,
  stTenn: null,
  stTennRefi: null,

  errorCheck:function() {

    var errors = false;

    $("input[type=text]").each(function(i, o)
    {

      if(!$(o).val().length) {
        errors = true;
        $("#" + $(o).attr('id') + "_label").addClass("error");
        $("#" + $(o).attr('id') + "_message").html("This is a required field.");
      } else {
        $("#" + $(o).attr('id') + "_label").removeClass("error");
        $("#" + $(o).attr('id') + "_message").html("");
      }

    });

    if(!$("#state").val().length) {
      errors = true;
      $("#state_label").addClass("error");
      $("#state_message").html("This is a required field.");
    } else {
      $("#state_label").removeClass("error");
      $("#state_message").html("");
    }

    var radio_checked = false;
    $("input[name=title_search]").each(function(i, o)
    {
      if($(o).attr('checked') == true) {
        radio_checked = true;
      }
    });

    if(!radio_checked) {
      errors = true;
      $("#title_search_label").addClass("error");
      $("#title_search_message").html("This is a required field.");
    } else {
      $("#title_search_label").removeClass("error");
      $("#title_search_message").html("");
    }

    if( !$("#lender_email_label").hasClass("error") &&
        !$("#lender_email").val().match(/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$/)) {
      errors = true;
      $("#lender_email_label").addClass("error");
      $("#lender_email_message").html("This is not a valid email address.");
    }

    var sales_price = parseFloat($("#price").val().replace(/[$,]/g, ''));
    if( (!$("#price_label").hasClass("error") &&
        isNaN(sales_price)) ||
        $("#price").val().match(/[a-zA-Z]/)) {
      errors = true;
      $("#price_label").addClass("error");
      $("#price_message").html("This must be a dollar value.");
    }

    var loan_amount = parseFloat($("#loan_amount").val().replace(/[$,]/g, ''));
    if( (!$("#loan_amount_label").hasClass("error") &&
        isNaN(loan_amount)) ||
        $("#loan_amount").val().match(/[a-zA-Z]/)) {
      errors = true;
      $("#loan_amount_label").addClass("error");
      $("#loan_amount_message").html("This must be a dollar value.");
    }

    if(errors == false) {
      Quote.recalculate();
    }

  },

  getMortgageRate:function() {

    switch($("#state").val()) {
    case "st_davidson":
      var data = Quote.stDavidson;
      break;
    case "st_tenn":
      var data = Quote.stTennRefi;
      break;
    }

    var tally = [];

    var target = parseFloat($("#loan_amount").val().replace(/[$,]/g, ''));
    var price = parseFloat($("#price").val().replace(/[$,]/g, ''));

    var total = target;
    var last = 0;
    var amt = -1;
    var flag = false;

    for(var i = 0; i < data.length; i++) {

      var x = data[i];

      if( target > x.amt &&
          x.amt > amt) {
        amt = x.amt;

        var y = data[i + 1] != null ? data[i + 1].amt - data[i].amt : total;
        var difference = y < total ? y : total;

        while(price > 0 && difference > 0) {
          price--;
          total--;
          difference--;
        }

        if(price == 0) {
          tally.push({'price':difference,'amount':x.val});
          total -= difference;
        }
      }

      last = y;

    }

    var ret = 0;
    for(i = 0; i < tally.length; i++) {
      ret += (Math.ceil(tally[i].price / 1000)) * tally[i].amount;
    }

    return(ret);

  },

  getRates:function(which) {

    switch($("#state").val()) {
    case "st_davidson":
      var tn = false;
      var data = Quote.stDavidson;
      break;
    case "st_tenn":
      var tn = true;
      var data = Quote.stTenn;
      break;
    }

    var ret = [];
    if($("#loan_type").val() == "refinance") {
      if($("#state").val() == "st_tenn") {
        data = Quote.stTennRefi;
      }
      var target = parseFloat($("#loan_amount").val().replace(/[$,]/g, ''));
    } else {
      var target = parseFloat($("#price").val().replace(/[$,]/g, ''));
    }

    var total = target;
    var last = 0;
    var amt = -1;

    for(var i = 0; i < data.length; i++) {

      var x = data[i];

      if( target > x.amt &&
          x.amt > amt) {
        amt = x.amt;

        var y = data[i + 1] != null ? data[i + 1].amt - data[i].amt : total;
        var difference = y < total ? y : total;

        ret[i] = {'price':difference,'amount':x.val};
        total -= difference;
      }

      last = y;

    }

    return(ret);

  },

  handleData:function(data) {

    eval(data);

    if( Quote.stDavidson != null &&
        Quote.stTenn != null &&
        Quote.stTennRefi != null) {
      Quote.showForm();
    }

  },

  init:function() {
    Quote.initializeData();

    $("#loan_type").change(Quote.updateLoanType);
    Quote.updateLoanType();

    $("#calculate").click(Quote.errorCheck);
  },

  initializeData:function() {
    $.get("ajax/get-data.php",
    {
      variable: 'stDavidson',
      file: 'st_davidson'
    }, Quote.handleData, 'text');

    $.get("ajax/get-data.php",
    {
      variable: 'stTenn',
      file: 'st_tenn'
    }, Quote.handleData, 'text');

    $.get("ajax/get-data.php",
    {
      variable: 'stTennRefi',
      file: 'st_tenn_refi'
    }, Quote.handleData, 'text');
  },

  recalculate:function() {

    var owner_insurance = Quote.getRates();

    if(owner_insurance != false) {
      var total = 0;
      for(var i = 0; i < owner_insurance.length; i++) {
        var x = owner_insurance[i];
        total += (Math.ceil(x.price / 1000)) * x.amount;
      }

      owner_insurance_total = total;
      if(owner_insurance_total < 52.5) {
        owner_insurance_total = 52.5;
      }

      if($("#loan_type").val() == "new") {
        $("#owner_insurance").val(owner_insurance_total.toFixed(2));
      } else {
        $("#owner_insurance").val("0.00");
      }

    } 

    var extra_on_loan = parseFloat($("#loan_amount").val().replace(/[$,]/g, '')) - 
                        parseFloat($("#price").val().replace(/[&,]/g, ''));
    extra_on_loan = extra_on_loan > 0 ? extra_on_loan : false;

    if(extra_on_loan && $("#loan_type").val() == "new") {

      var mortgage_rate = Quote.getMortgageRate();
      if($("#state").val() != "st_davidson") {
        var extra = mortgage_rate + 35;
        var title_search = $("#quote_form input:radio:checked").val() == "no" ? 0 : 300;
        extra += title_search;
        $("#title_insurance").val((mortgage_rate + 35).toFixed(2));
      } else {
        var extra = mortgage_rate + 50;
        var title_search = 0;
        $("#title_insurance").val((mortgage_rate + 50).toFixed(2));
      }
      $("#lender_insurance").val((375 + extra).toFixed(2));
      $("#title_services").val((375 + title_search).toFixed(2));

    } else {

      if($("#state").val() == "st_davidson") {
        var title_search = 0;
      } else {
        var title_search = $("#quote_form input:radio:checked").val() == "no" ? 0 : 300;
      }

      if($("#loan_type").val() == "new") {
        $("#title_services").val((375 + title_search).toFixed(2));
        if($("#state").val() != "st_davidson") {
          $("#lender_insurance").val((375 + 35 + title_search).toFixed(2));
          $("#title_insurance").val("35.00");
        } else {
          $("#lender_insurance").val((375 + 50 + title_search).toFixed(2));
          $("#title_insurance").val("50.00");
        }
      } else {
        $("#lender_insurance").val((375 + owner_insurance_total + title_search).toFixed(2));
        $("#title_services").val((375 + title_search).toFixed(2));
        $("#title_insurance").val(owner_insurance_total.toFixed(2));
      }

    }

    if($("#warranty_deed_pages").val() == 0) {
      var recording_charges_warranty_deed = 0;
    } else {
      var recording_charges_warranty_deed = 8 + (($("#warranty_deed_pages").val() - 1) * 5);
    }

    if($("#trust_deed_pages").val() == 0) {
      var recording_charges_trust_deed = 0;
    } else {
      var recording_charges_trust_deed = 8 + (($("#trust_deed_pages").val() - 1) * 5);
    }

    if($("#assignment_pages").val() == 0) {
      var recording_charges_assignment = 0;
    } else {
      var recording_charges_assignment = 12 + (($("#assignment_pages").val() - 1) * 5);
    }

    $("#recording_charges_warranty_deed").val(recording_charges_warranty_deed.toFixed(2));
    $("#recording_charges_trust_deed").val(recording_charges_trust_deed.toFixed(2));
    $("#recording_charges_assignment").val(recording_charges_assignment.toFixed(2));

    var recording_charges = recording_charges_warranty_deed + recording_charges_trust_deed + recording_charges_assignment;
    $("#recording_charges").val(recording_charges.toFixed(2));

    if($("#price").val().length && $("#loan_amount").val().length) {
      var sales_price = parseFloat($("#price").val().replace(/[$,]/g, ''));
      var loan_amount = parseFloat($("#loan_amount").val().replace(/[$,]/g, ''));

      var transfer_taxes_deed = ((sales_price / 100) * .37);
      var transfer_taxes_mortgage = (((loan_amount - 2000) / 100) * .115);
      var tax = transfer_taxes_deed + transfer_taxes_mortgage;

      $("#transfer_taxes_deed").val(transfer_taxes_deed.toFixed(2));
      $("#transfer_taxes_mortgage").val(transfer_taxes_mortgage.toFixed(2));

      if(!isNaN(tax)) {
        $("#transfer_taxes").val(tax.toFixed(2));
      }
    }

    if($("#price").attr('disabled') == true) {
      $("#price").attr('disabled', false).val('0');
    }

    $("#quote_form").submit();

  },

  showForm:function() {
    $("#please_wait").hide();
    $("#quote_form").show();
  },

  updateLoanType:function(e) {

    if($("#loan_type").val() == "new") {
      $("#price").val('').attr('disabled', false);
      $("#title_search_no").attr('disabled', false);
      $("#title_search_dunno").attr('disabled', false);
    } else {
      $("#price").val('0').attr('disabled', true);
      $("#title_search_yes").attr('checked', true);
      $("#title_search_no").attr('disabled', true);
      $("#title_search_dunno").attr('disabled', true);
    }

  }

}

