function reset() {
  queryReset();
  standingsReset();
}

function queryReset() {
  document.queryForm.type.selectedIndex = 0;
  document.queryForm.seasons.selectedIndex = 0;
  document.queryForm.drivers.selectedIndex = 0;
  document.queryForm.constructors.selectedIndex = 0;
  document.queryForm.grid.selectedIndex = 0;
  document.queryForm.position.selectedIndex = 0;
  document.queryForm.circuits.selectedIndex = 0;
  document.queryForm.status.selectedIndex = 0;
  document.queryForm.limit.value = "30";
  document.queryForm.page.value = "1";
  onChangeQuerySeason();
}

function standingsReset() {
  document.standingsForm.type.selectedIndex = 0;
  document.standingsForm.seasons.selectedIndex = 0;
  document.standingsForm.drivers.selectedIndex = 0;
  document.standingsForm.constructors.selectedIndex = 0;
  document.standingsForm.driverStandings.selectedIndex = 0;
  document.standingsForm.constructorStandings.selectedIndex = 0;
  document.standingsForm.limit.value = "30";
  document.standingsForm.page.value = "1";
  onChangeStandingsSeason();
  setStandingsDefaults();
}

function onChangeQuerySeason() {
  var maxRound = document.queryForm.seasons.value;
  if(maxRound == "current") maxRound = document.queryForm.seasons.options[document.queryForm.seasons.options.length - 1].value;
  var selected = document.queryForm.round.selectedIndex;
  document.queryForm.round.options.length = 3;
  if(maxRound == 0) {
    document.queryForm.round.disabled = true;
  } else {
    if(selected > maxRound) selected = maxRound;
    for(var i=1; i<=maxRound; i++) {
      option = new Option(i, i, false, false);
      document.queryForm.round.options[i+2] = option;
    }
    document.queryForm.round.selectedIndex = selected;
    document.queryForm.round.disabled = false;
  }
}

function onChangeStandingsSeason() {
  var maxRound = document.standingsForm.seasons.value;
  if(maxRound == "current") maxRound = document.standingsForm.seasons.options[document.standingsForm.seasons.options.length - 1].value;
  var selected = document.standingsForm.round.selectedIndex;
  document.standingsForm.round.options.length = 1;
  if(maxRound == 0) {
    document.standingsForm.round.disabled = true;
  } else {
    if(selected > maxRound) selected = maxRound;
    for(var i=1; i<=maxRound; i++) {
      option = new Option(i, i, false, false);
      document.standingsForm.round.options[i] = option;
    }
    document.standingsForm.round.selectedIndex = selected;
    document.standingsForm.round.disabled = false;
  }
}

function setStandingsDefaults() {
  var type = document.standingsForm.type.value;
  var driverStandings = document.standingsForm.driverStandings.value;
  var constructorStandings = document.standingsForm.constructorStandings.value;
  if(document.standingsForm.round.selectedIndex == 0) {
    var selected = true;
  } else {
    var selected = false;
  }
  if(type == "driverStandings" || type == "constructorStandings" || driverStandings != 0 || constructorStandings != 0) {
    var option = new Option("Last", 0, false, selected);
  } else {
    var option = new Option("All", 0, false, selected);
  }
  document.standingsForm.round.options[0] = option;
  if(type == "driverStandings" || type == "drivers") {
    document.standingsForm.drivers.disabled = false;
    document.standingsForm.driverStandings.disabled = false;
    document.standingsForm.constructors.selectedIndex = 0;
    document.standingsForm.constructors.disabled = true;
    document.standingsForm.constructorStandings.selectedIndex = 0;
    document.standingsForm.constructorStandings.disabled = true;
  }
  if(type == "constructorStandings" || type == "constructors") {
    document.standingsForm.drivers.selectedIndex = 0;
    document.standingsForm.drivers.disabled = true;
    document.standingsForm.driverStandings.selectedIndex = 0;
    document.standingsForm.driverStandings.disabled = true;
    document.standingsForm.constructors.disabled = false;
    document.standingsForm.constructorStandings.disabled = false;  
  }
  if(type == "seasons") {
    document.standingsForm.drivers.disabled = false;
    document.standingsForm.driverStandings.disabled = false;
    document.standingsForm.constructors.disabled = false;
    document.standingsForm.constructorStandings.disabled = false;  
  }
}

function querySubmit() {
  var type = document.queryForm.type.value;
  var seasonIndex = document.queryForm.seasons.selectedIndex;
  var round = document.queryForm.round.value;
  var drivers = document.queryForm.drivers.value;
  var constructors = document.queryForm.constructors.value;
  var grid = document.queryForm.grid.value;
  var results = document.queryForm.position.value;
  var circuits = document.queryForm.circuits.value;
  var status = document.queryForm.status.value;
  var limit = document.queryForm.limit.value;
  var page = document.queryForm.page.value;
  
  var url = "/api/f1";
  if(seasonIndex != 0) {
    season = document.queryForm.seasons.options[seasonIndex].text;
    if(season == "Current") season = "current"; 
    url += "/" + season;
  }
  if(round != 0) url += "/" + round;
  if(type != "drivers" && drivers != 0) url += "/drivers/" + drivers;
  if(type != "constructors" && constructors != 0) url += "/constructors/" + constructors;
  if(grid != 0) url += "/grid/" + grid;
  if(type != "results" && results != 0) url += "/results/" + results;
  if(type != "circuits" && circuits != 0) url += "/circuits/" + circuits;
  if(type != "status" && status != 0) url += "/status/" + status;
  
  switch(type) {
    case 'seasons':
      url += "/seasons";
      break;
    case 'drivers':
      url += "/drivers";
      if(drivers != 0) url += "/" + drivers;
      break;
    case 'constructors':
      url += "/constructors";
      if(constructors != 0) url += "/" + constructors;
      break;
    case 'qualifying':
      url += "/qualifying";
      break;
    case 'results':
      url += "/results";
      if(results != 0) url += "/" + results;
      break;
    case 'circuits':
      url += "/circuits";
      if(circuits != 0) url += "/" + circuits;
      break;
    case 'status':
      url += "/status";
      if(status != 0) url += "/" + status ;
      break;
    case 'races':
      if(drivers != 0 || constructors != 0 || grid != 0 || results != 0 || circuits != 0 || status != 0) url += "/races";
      break;
  }
  if(limit == "") limit = "30";
  if(page == "") page = "1";
  if(limit != "30" || page != "1") {
    url += "?";
    if(limit != "30") {
      url += "limit=" + limit;
    }
    if(limit != "30" && page != "1") url += "&";
    if(page != "1") {
      var offset = (parseInt(page) - 1) * parseInt(limit);
      url += "offset=" + offset;
    }
  }
  window.open(url, "Query Results");
}

function standingsSubmit() {
  var type = document.standingsForm.type.value;
  var seasonIndex = document.standingsForm.seasons.selectedIndex;
  var round = document.standingsForm.round.value;
  var drivers = document.standingsForm.drivers.value;
  var constructors = document.standingsForm.constructors.value;
  var driverStandings = document.standingsForm.driverStandings.value;
  var constructorStandings = document.standingsForm.constructorStandings.value;
  var limit = document.standingsForm.limit.value;
  var page = document.standingsForm.page.value;
  
  var url = "/api/f1";
  if(seasonIndex != 0) {
    season = document.standingsForm.seasons.options[seasonIndex].text;
    if(season == "Current") season = "current"; 
    url += "/" + season;
  }
  if(round != 0) {
    url += "/" + round;
  }
  if(type != "drivers" && drivers != 0) url += "/drivers/" + drivers;
  if(type != "constructors" && constructors != 0) url += "/constructors/" + constructors;
  if(type != "driverStandings" && driverStandings != 0) url += "/driverStandings/" + driverStandings;
  if(type != "constructorStandings" && constructorStandings != 0) url += "/constructorStandings/" + constructorStandings;
  
  switch(type) {
    case 'seasons':
      url += "/seasons";
      break;
    case 'drivers':
      url += "/drivers";
      if(drivers != 0) url += "/" + drivers;
      break;
    case 'constructors':
      url += "/constructors";
      if(constructors != 0) url += "/" + constructors;
      break;
    case 'driverStandings':
      url += "/driverStandings";
      if(driverStandings != 0) url += "/" + driverStandings;
      break;
    case 'constructorStandings':
      url += "/constructorStandings";
      if(constructorStandings != 0) url += "/" + constructorStandings;
      break;
  }
  if(limit == "") limit = "30";
  if(page == "") page = "1";
  if(limit != "30" || page != "1") {
    url += "?";
    if(limit != "30") {
      url += "limit=" + limit;
    }
    if(limit != "30" && page != "1") url += "&";
    if(page != "1") {
      var offset = (parseInt(page) - 1) * parseInt(limit);
      url += "offset=" + offset;
    }
  }
  window.open(url, "Query Results");
}
