function fillInVariantData(param) {

  $.getJSON("/calculator/server.php", {'action':'variants-data','id':param}, function(resp){

    if(resp.length == 1) {
      prefillDataForm(resp[0]);
      return;
    }

    $("#cardata").html('<h2>' + aldDecode(document.trans.MULT_VARIANTS_FOUND) + ':</h2><table class="cars"></table>');

    $.each(resp, function(i, item) {
      var fuelName;
      switch(item.fueltype) {
      case 'E85':
      case 'BIO95':
	fuelName = item.fueltype;
	break;
      case 'D':
	fuelName = aldDecode(document.trans.DIESEL);
	break;
      case 'B':
      default:
	fuelName = aldDecode(document.trans.PETROL);
	break;
      }
      var li = '<tr><td class="left"><a class="car" id="c' + item.id + '">' + aldDecode(document.trans.USE_THIS) + '</a></td>'
             + '<td>' + fuelName + ', '
             + (1 == item.particle_filter ? aldDecode(document.trans.FILTER) : '') + ', '
             + aldDecode(document.trans.FUEL_NORM) + ': ' + item.eec_norm 
             + '<br />' + aldDecode(document.trans.MAX_TOTAL_WEIGHT) + ': ' + item.total_weight + 'kg, '
             + aldDecode(document.trans.EUNORM) + ': ' + item.eu_norm + ' '
             + '</td></tr>';

      $(".cars").append( li );

      $("#c" + item.id).click( function() {
        prefillDataForm(item);
      });

    });

  });

}

function prefillDataForm(data) {

  $("select[@name='fuelType']").val(data.fueltype);
  if(aldIsBioFuel(data.fueltype)) {
    $("select[@name='ethanolFuelingsPart']").val(50);
  }
  aldAdjustAppearance();

  $("input[@name='fuelNorm']").val(data.eec_norm);
  $("select[@name='euroNorm']").val(data.eu_norm);
  $("select[@name='particleFilter']").val(data.particle_filter);
  $("input[@name='totalWeight']").val(data.total_weight);

  callCalculator( $("form[@name='calculator']").formSerialize() );
}

function aldIsBioFuel(fuel) {
  switch(fuel) {
  case 'BIO95':
  case 'E85':
    return true;
    break;
  default:
    return false;
  }
}

function populateSelect(selectName, data) {
  var select = selectName;
    document.forms['myform'][ select ].options.length = 0;
    switch(select) {
      case 'brand':
        var optionText = document.trans.CHOOSE_BRAND;
        break;
      case 'model':
        var optionText = document.trans.CHOOSE_MODEL;
        break;
      case 'variant':
        var optionText = document.trans.CHOOSE_VARIANT;
        break;
    }
    var startOptionText = aldDecode(optionText);
    document.forms['myform'][ select ].options[0] = new Option(startOptionText, 'x');
    for(var i = 0 ; i < data.length ; i++) {
      document.forms['myform'][ select ].options[(i+1)] = new Option(aldDecode(data[i][1]), data[i][0]);
    }
}

function aldDecode(string) {
  s = new String(string);
  s = s.replace(/\+/g, " ");
  s = s.replace(/%F8/g, String.fromCharCode(248)); // oe
  s = s.replace(/%E6/g, String.fromCharCode(230)); // ae
  s = s.replace(/%E4/g, String.fromCharCode(228)); // ae, Swedish
  s = s.replace(/%F6/g, String.fromCharCode(246)); // oe, Swedish
  s = s.replace(/%8E/g, String.fromCharCode(233)); // e acute
  s = s.replace(/%2C/g, ',');
  s = s.replace(/%2F/g, '/');
  s = s.replace(/%26/g, '&');
  s = s.replace(/%28/g, '(');
  s = s.replace(/%29/g, ')');
  return s;
}

function callAndFillSelect(action, selectName, param) {
  $.getJSON("/calculator/server.php", {'action':action,'id':param}, function(data){
    populateSelect(selectName, data);
  });
}

function callCalculator(params) {
  $.getJSON("/calculator/server.php?action=do-calculation&" + params, null, function(data){
    $("span[@class='cost']").html( 'EUR ' + data.cost );
    $("span[@class='aldnumber']").html( data.number );
    $("span[@class='co2']").html( Math.round(data.emissions['CO2']/1000) + ' kg');
  });
  $("#results").css('background-color', '#ffffff');
  $("#results").Highlight(900, '#ff0000');
}

function aldSetDefaults() {
  $("form[@id='calculator']").clearForm();
  aldAdjustAppearance();

  $("input[@name='cityDriving']").val('50');
  $("input[@name='ethanolPart']").val('0');
  $("input[@name='yearlyMilage']").val('25000');
  $("span[@class='cost']").html('');
  $("span[@class='aldnumber']").html('');
  $("span[@class='co2']").html('');
  $("#cardata").html("");
}

function _adjustField(fieldName, show) {
  jQueryField = $("select[@name='" + fieldName + "']");

  if(show) {
    jQueryField.parent().parent().show();
  } else {
    jQueryField.parent().parent().hide();
  }
}

function aldAdjustAppearance() {
  var fuel = $("select[@name='fuelType']").fieldValue().toString();
  switch(fuel) {
  case "BIO95":
  case "E85":
    _adjustField('ethanolFuelingsPart', true);
    _adjustField('particleFilter', false);
    break;
  case 'B':
    _adjustField('particleFilter', false);
    _adjustField('ethanolFuelingsPart', false);
    break;
  case 'D':
    _adjustField('particleFilter', true);
    _adjustField('ethanolFuelingsPart', false);
    break;
  default:
    _adjustField('ethanolFuelingsPart', false);
    _adjustField('particleFilter', false);
  }
}

$(document).ready( function() {

  /* need to do this synchronously
  $.getJSON("/calculator/server.php", {'action':'get-translations'}, function(resp) {
    document.trans = resp;
  });  
  */

  $.ajax({
    type: "GET",
    async: false,
    datatype: "json",
    url: "/calculator/server.php",
    data: "action=get-translations",
    success: function(data) {
      // hmm, shouldn't the datatype parameter parse the json for me?
      document.trans = eval( '(' + data + ')');
    }
  });

  $("select[@name='model']").hide();
  $("select[@name='variant']").hide();
  aldSetDefaults();

  callAndFillSelect('car-brands', 'brand');
  $("select[@name='brand']").change( function() {
    callAndFillSelect('car-models', 'model', $("select[@name='brand'] option:selected").val());
    $("select[@name='variant']").children().remove();
    $("select[@name='variant']").hide();
    $("select[@name='model']").show();
    aldSetDefaults();
  });

  $("select[@name='model']").change( function() {
    callAndFillSelect('car-variants', 'variant', $("select[@name='model'] option:selected").val());
    $("select[@name='variant']").show();
    aldSetDefaults();
  });

  $("select[@name='variant']").change( function() {
    aldSetDefaults();
    fillInVariantData( $("select[@name='variant'] option:selected").val() );
  });

  $("form[@name='calculator']").submit( function() {
    callCalculator( $(this).formSerialize() );
    return false;
  });

  // only particle filters for diesel engines
  $("select[@name='fuelType']").change( function() {
    if( 'B' == $(this).fieldValue() ) {
      $("select[@name='particleFilter']").val('0');
    } 
    aldAdjustAppearance();
  });
  aldAdjustAppearance();


  // translations
  var trans = {'FUEL': 'Fuel', 'PETROL': 'Petrol', 'DIESEL': 'Diesel'};  

});

