function initialize_supply_check() {
  // Form elements
  supply_check_region_element     = $("supply_check_address_region");
  supply_check_region_element.observe("change", load_supply_check_districts);

  supply_check_district_element   = $("supply_check_address_district");
  supply_check_district_element.observe("change", load_supply_check_suburbs);

  supply_check_suburb_element     = $("supply_check_address_suburb");
  supply_check_street_element     = $("supply_check_address_street");
  supply_check_house_element      = $("supply_check_address_house");
  supply_check_flat_element       = $("supply_check_address_flat");
  supply_check_icp_number_element = $("supply_check_icp_number");

  // Default options
  default_supply_check_region   = supply_check_region_element.innerHTML;
  default_supply_check_district = supply_check_district_element.innerHTML;
  default_supply_check_suburb   = supply_check_suburb_element.innerHTML;
}

function reset_supply_check_form() {
  load_supply_check_regions();
  
  $("supply_check_errors").hide();
  $("supply_check_form").reset();
  $$("#supply_check_responses > div").invoke("hide");
  $("supply_check_form_container").show();  
}

function load_supply_check_regions() {
  // remove the current options from districts and suburbs
  supply_check_district_element.innerHTML = "";
  supply_check_district_element.insert(default_supply_check_district);
  supply_check_district_element.value = "";
  
  supply_check_suburb_element.innerHTML = "";
  supply_check_suburb_element.insert(default_supply_check_suburb);
  supply_check_suburb_element.value = "";

  var options = default_supply_check_region;
  $A(regions).each(function(region) {
    options += "<option value='" + region + "'>" + region + "</option>";
  });
  supply_check_region_element.innerHTML = "";
  supply_check_region_element.insert(options);
  supply_check_region_element.value = "";
}

function load_supply_check_districts() {
  // remove the current options from suburbs
  supply_check_suburb_element.innerHTML = "";
  supply_check_suburb_element.insert(default_supply_check_suburb);
  supply_check_suburb_element.value = "";
  
  // load new districts
  var options = default_supply_check_district;
  $A(districts[supply_check_region_element.value]).each(function(district) {
    options += "<option value='" + district + "'>" + district + "</option>";
  });
  
  supply_check_district_element.innerHTML = "";
  supply_check_district_element.insert(options);
  supply_check_district_element.value = "";
}

function load_supply_check_suburbs() {
  var options = default_supply_check_suburb;
  $A(suburbs[supply_check_region_element.value][supply_check_district_element.value]).each(function(suburb) {
    options += "<option value='" + suburb + "'>" + suburb + "</option>";
  });

  supply_check_suburb_element.innerHTML = "";
  supply_check_suburb_element.insert(options);
  supply_check_suburb_element.value = "";
}

function submit_supply_check() {
  pageTracker._trackEvent("Supply Checker", "Submit");
  
  new Ajax.Request('/supply_check_v2/supply_check', {
    asynchronous:true,
    evalScripts:true,
    onSuccess:function(request){supply_check_callback(request)},
    parameters:Form.serialize($('supply_check_form'))
  });
  
  return false;  
}

function supply_check_callback(request) {
  results = request.responseText.evalJSON(true);

  var errors = $H(results.errors);
  if(errors.size() > 0) {
    var error_html = "";
    errors.each(function(error) {
      error_html += "<li><span>" + error[1] + "</span></li>";
    });
    $$("#supply_check_errors ul")[0].innerHTML = error_html;
    $("supply_check_errors").show();
  } else {
    $("supply_check_errors").hide();    

    if(results.status == "waiting_for_icp_details") {
      setTimeout(function() {
        new Ajax.Request('/supply_check_v2/waiting_for_icp_details', {
          asynchronous:true,
          evalScripts:true,
          onSuccess:function(request){supply_check_callback(request)},
          parameters: {
            id: results.supply_check_request_id,
            count: (results.count + 1)
          }
        })
      }, 3000);
    }

    $("supply_check_form_container").hide();
    $$("#supply_check_responses > div").invoke("hide");
    $(results.status).show();
  }
}

function launch_keep_me_posted(newsletter) {
  GetKeepMePostedRegions();

  $("keep_me_posted_address_region").value = supply_check_region_element.value;
  $("keep_me_posted_address_region").onchange();
  
  $("keep_me_posted_address_district").value = supply_check_district_element.value;
  $("keep_me_posted_address_district").onchange();

  $("keep_me_posted_address_suburb").value = supply_check_suburb_element.value;
  $("keep_me_posted_street").value = supply_check_street_element.value;
  $("keep_me_posted_house").value = supply_check_house_element.value;
  $("keep_me_posted_flat").value = supply_check_flat_element.value;
  $("keep_me_posted_icp_number").value = supply_check_icp_number_element.value;

  $("keep_me_posted_news").checked = newsletter;
  $("keep_me_posted_myarea").checked = !newsletter;
  
  HideSupplyCheck();
  pageTracker._trackEvent("Supply Checker", "Launch keep me posted");
  ShowKeepMePosted();
}


function ShowSupplyCheck() {
  reset_supply_check_form();  
  $("supply_check").show();
  
  pageTracker._trackEvent("Supply Checker", "Overlay open");
  
  sIFR.replace(omnesmedium, {
    selector: '#supply_check h1',
    wmode: 'transparent',
    css: '.sIFR-root { color: #EC0E64; letter-spacing: -1; }'
  });    
}

function HideSupplyCheck() {
  reset_supply_check_form();
  $("supply_check").hide();
  pageTracker._trackEvent("Supply Checker", "Overlay close");
}
