FilterPopupData.dialog.html = FilterPopupData.dialog.html.replace(/SELECT_COUNTRIES/g, function(promptText, countries) {
  var html = '<select name="country"><option value="">' + promptText + '</option>';
  for(var code in countries) {
    html += '<option value="' + code + '">' + countries[code] + '</option>';
  }
  html += '</select>';
  return html;
}(FilterPopupData.countryPrompt, FilterPopupData.countries));

function FilterPopup(url) {
  function wrap(html) {
    return '<div class="FilterPopup">' + html + '</div>';
  }
  var dialog = $(wrap(FilterPopupData.dialog.html));

  function fail() {
    var fail = $(wrap(FilterPopupData.fail.html));
    var buttons = {};
    buttons[FilterPopupData.closePrompt] = function() {fail.dialog("close");};
    fail.dialog({
      title: FilterPopupData.title
      ,modal: true
      ,dialogClass: 'FilterPopupDialog'
      ,buttons: buttons
    });
  }

  function disclaimer() {
    var disclaimer = $(wrap(FilterPopupData.disclaimer.html));
    var buttons = {};
    buttons[FilterPopupData.submitPrompt] = function() {
      var confirm = $('input[name="confirm"]:checked', disclaimer).val();
      if (confirm == "yes") {
        window.location = url;
      } else {
        disclaimer.dialog("close");
        fail();
      }
    };
    buttons[FilterPopupData.cancelPrompt] = function() {disclaimer.dialog("close");};
    disclaimer.dialog({
      title: FilterPopupData.title
      ,modal: true
      ,dialogClass: 'FilterPopupDialog'
      ,buttons: buttons
    });
  }

  var buttons = {};
  buttons[FilterPopupData.submitPrompt] = function() {
    var country = $(':input[name="country"]', dialog).val();
    var city = $('input[name="city"]', dialog).val();
    var postcode = $('input[name="postcode"]', dialog).val();
    var confirm = $('input[name="confirm"]:checked', dialog).val();
    var valid = FilterPopupData.dialog.validate(country, city, postcode, confirm);
    dialog.dialog("close");
    if (valid) {
      disclaimer();
    } else {
      fail();
    }
  };

  buttons[FilterPopupData.cancelPrompt] = function() {dialog.dialog("close");};
  dialog.dialog({
    title: FilterPopupData.title
    ,modal: true
    ,dialogClass: 'FilterPopupDialog'
    ,width: FilterPopupData.dialog.width
    ,buttons: buttons
  });
  return false;
}
