﻿var postcodeField;
var postcodeForm;
var postcodeContainer;
var postcodeError;
var premisesField;
var hnField;

function setPostcodeFields() {
	$("form div.field.postcode").each(function() {

		var completeButton = $(this).children("a.completeAddress");
		postcodeField = $(this).children("input");
		postcodeForm = postcodeField.parents("form");
		postcodeContainer = $(this);

		$(completeButton).click(function(e) {
			e.preventDefault();

			var querystring = window.location.search;
			if (querystring.length > 0) {
				querystring = querystring + '&';
			}
			else {
				querystring = '?';
			}
			var url = window.location.pathname + querystring;
			url = url + 'SxFormsAjax_FormID=' + postcodeForm.attr("id");
			url = url + '&SxFormsAjax_FieldID=' + postcodeField.attr("id");
			url = url + '&SxFormsAjax_Action=Search';
			url = url + '&SxFormsAjax_Postcode=' + postcodeField.val();

			postcodeError = postcodeContainer.children("div.error");
			postcodeError.remove();
			completeButton.hide();

			postcodeContainer.prepend("<div class=\"alertInfo message\"><p>Searching...</p></div>");

			$.ajax({
				url: url,
				dataType: "json",
				type: "GET",
				cache: true,
				timeout: 11000,
				error: function() {
					postcodeContainer.prepend("<div class=\"alertInfo error\"><p>There was a problem looking up your post code, please enter your address manually.</p></div>");
					completeButton.show();
					postcodeSearch = postcodeContainer.children("div.message");
					postcodeSearch.hide();
					postcodeSearch.remove();
				},
				success: function(data) {
					if (data.Status == "Success") {
						var result = data.Result;
						var mapping = data.Mappings;

						$("#" + (mapping.AddressLine1 || "AddressLine1")).val(result.StreetLine1);
						$("#" + (mapping.AddressLine2 || "AddressLine2")).val(result.StreetLine2);
						$("#" + (mapping.TownCity || "TownCity")).val(result.Town);
						$("#" + (mapping.County || "County")).val(result.County);
						premisesField = $("#" + (mapping.Premises || "HouseNumber"))

						hnField = (mapping.Selection || "Selection")
						list = $("#" + hnField).parent().children("select");

						list.children("option[value!='']").remove();
						for (var place in result.Premises) {
							list.append('<option value="' + result.Premises[place].Name + '">' + result.Premises[place].Name + '</option>');
						}
						list.parent().show();

						list.selectmenu('destroy');
						list.selectmenu({ style: 'dropdown', width: '298px', maxHeight: 200, wrapperElement: '<div class="ui-selectmenu-container"/>' })

						list.change(function() {
							premisesField.val($(this).val());
							$(this).parent().hide();
						});

					} else {
						var message;
						if (data.Status == "InvalidPostcode") {
							message = "There was a problem looking up your post code, please enter your address manually.";
						} else {
							message = "There was a problem looking up your post code, please enter your address manually.";
						}

						var html = "<div class=\"alertInfo error\"><p>" + message + "</p></div>";
						postcodeContainer.prepend(html);

					}
					postcodeSearch = postcodeContainer.children("div.message");
					postcodeSearch.hide();
					postcodeSearch.remove();
					completeButton.show();
				}
			});

		});
	});
}

$(document).ready(function() {
    if ($("form").size() > 0) {
        setPostcodeFields();

        $("form div.field.hidden").hide();
    }
});
