/**
 * Car Search
 *
 */

var bFirstLoad = true;

function getCarModels(makeId, sel)
{
  $.get(
    "/carsearch/ajax",
    {
      req: 'models',
      make: makeId,
      'new': $("input#field-new").val()
    },
    function(sData){
      $("#field-model").html(sData);
      $("#field-model").val(sel);
      getBodyStyles(makeId, sel, $("#field-body_type").val());
    },
    'text'
  );
}

function getBodyStyles(makeId, modelId, sel)
{
  $.get(
    "/carsearch/ajax",
    {
      req: 'bodystyles',
      make: makeId,
      model: modelId,
      'new': $("#field-new").val()
    },
    function(sData){
      $("#field-body_type").html(sData);
      $("#field-body_type").val(sel);
      getFuelTypes(makeId, modelId, sel, $("#field-fuel_type").val());
    },
    'text'
  );
}

function getFuelTypes(makeId, modelId, bodyId, sel)
{
  $.get(
    "/carsearch/ajax",
    {
      req: 'fueltypes',
      make: makeId,
      model: modelId,
      body: bodyId,
      'new': $("#field-new").val()
    },
    function(sData){
      $("#field-fuel_type").html(sData);
      $("#field-fuel_type").val(sel);
      getColours(makeId, modelId, bodyId, sel, $("#field-colour").val());
    },
    'text'
  );
}

function getColours(makeId, modelId, bodyId, fuelId, sel)
{
  $.get(
    "/carsearch/ajax",
    {
      req: 'colours',
      make: makeId,
      model: modelId,
      body: bodyId,
      fuel: fuelId,
      'new': $("#field-new").val()
    },
    function(sData){
      try {
        $("#field-colour").html(sData);
        $("#field-colour").val(sel);
        getTransmissions(makeId, modelId, bodyId, fuelId, sel, $("#field-transmission").val());
      } catch (err) {}
    },
    'text'
  );
}

function getTransmissions(makeId, modelId, bodyId, fuelId, colourId, sel)
{
  $.get(
    "/carsearch/ajax",
    {
      req: 'transmissions',
      make: makeId,
      model: modelId,
      body: bodyId,
      fuel: fuelId,
      colour: colourId,
      'new': $("#field-new").val()
    },
    function(sData){
      $("#field-transmission").html(sData);
      $("#field-transmission").val(sel);
      getDoors(makeId, modelId, bodyId, fuelId, colourId, sel, $("#field-doors").val());
    },
    'text'
  );
}

function getDoors(makeId, modelId, bodyId, fuelId, colourId, transId, sel)
{
  $.get(
    "/carsearch/ajax",
    {
      req: 'doors',
      make: makeId,
      model: modelId,
      body: bodyId,
      fuel: fuelId,
      colour: colourId,
      transmission: transId,
      'new': $("#field-new").val()
    },
    function(sData){
      $("#field-doors").html(sData);
      $("#field-doors").val(sel);
      if(bFirstLoad) {
        updateMatches( $("#field-doors") );
        bFirstLoad = false;
      }
    },
    'text'
  );
}


// grab all fields and get a new number of matches from the server
function updateMatches() {
  var oFields = { req:"matches" };
  $("fieldset select, fieldset input.text, fieldset input:checkbox:checked, input#field-new").each(function(){
    if($(this).val() != '' && $(this).val() != 'Postcode' && $(this).val() != 'e.g. SE, Tdi') {
      oFields[this.name] = $(this).val();
    }
  })
  $("#running-total span").hide();
  $.get(
    "/carsearch/ajax",
    oFields,
    function(sData){
      $("#running-total span").text(sData);
      $("#running-total span").show('slide', {}, 750);
    },
    'text'
  )
}


$(function(){

  jQuery.ajaxSetup({ cache: false });

  updateMatches();

  $("#field-postcode").focus(function(){
    if($(this).val() == 'Postcode') {
      $(this).val('')
    }
  })
  $("#field-postcode").blur(function(){
    if($(this).val() == '') {
      $(this).val('Postcode')
    }
  })

  $("#field-keyword").focus(function(){
    if($(this).val() == 'e.g. SE, Tdi') {
      $(this).val('')
    }
  })
  $("#field-keyword").blur(function(){
    if($(this).val() == '') {
      $(this).val('e.g. SE, Tdi')
    }
  })

  $("#field-postcode").change(function(){
    if($(this).val() != 'Postcode' && $(this).val() != '') {
      $.get(
        "/carsearch/ajax",
        { req: 'postcode', pc: $("#field-postcode").val() },
        function(sData) {
          if(sData == 'ERR') {
            alert("ERROR: " + $("#field-postcode").val() + " is an invalid postcode, please try again")
            $("#field-postcode").val('')
            $("#field-postcode").focus();
          } else {
            $("#field-postcode").val(sData)
          }
        },
        'text'
      )
    }
  })

  $("div#left-column-cars fieldset select, div#left-column-cars fieldset input.text, div#hp-form fieldset select, div#hp-form fieldset input.text").change(function(){ updateMatches() })

  $("div#left-column-cars fieldset span.seller-types input:checkbox, div#hp-form fieldset span.seller-types input:checkbox").click(function(){ updateMatches() })


  $("select#field-make").change(function(){
    if($(this).val() != ''){
      getCarModels($(this).val(), $("#field-model").val());
    } else {
      $("div#left-column-cars fieldset #field-model, div#hp-form fieldset #field-model").html('<option value="">Select a make first</option>')
    }
  });


  $("div#left-column-cars fieldset #field-model, div#hp-form fieldset #field-model").change(function(){
    getBodyStyles($("#field-make").val(), $(this).val(), $("#field-body_type").val())
  });


  $('#field-year_from').change(function(){
    if( parseInt($(this).val()) > parseInt($('#field-year_to').val()) ){
      $('#field-year_to').val($(this).val());
    }
  });
  $('#field-year_to').change(function(){
    if( parseInt($(this).val()) < parseInt($('#field-year_from').val()) ){
      $('#field-year_from').val($(this).val());
    }
  });


  $('#field-min_price').change(function(){
    if( parseInt($(this).val()) > parseInt($('#field-max_price').val()) ){
      $('#field-max_price').val('');
    }
  });
  $('#field-max_price').change(function(){
    if( parseInt($(this).val()) < parseInt($('#field-min_price').val()) ){
      $('#field-min_price').val('');
    }
  });


  $('#field-mileage_from').change(function(){
    if( parseInt($(this).val()) > parseInt($('#field-mileage_to').val()) ){
      $('#field-mileage_to').val('');
    }
  });
  $('#field-mileage_to').change(function(){
    if( parseInt($(this).val()) < parseInt($('#field-mileage_from').val()) ){
      $('#field-mileage_from').val('');
    }
  });


});