$(document).ready(function() {
    var zipChanged = function(event) {
        //        console.log(event);
        var target = $(event.currentTarget);
        var targetGroup = target.parents('fieldset').first();
        if (targetGroup.length == 0) {
            targetGroup = target.parents('form').first();
        }

        //        console.log(targetGroup);

        var country = targetGroup.find('.zipLookupCountry');
        var city = targetGroup.find('.zipLookupCity');
        var zip = targetGroup.find('.zipLookupZipCode');

        //        console.log(country, city, zip);

        var value = zip.val();
        //        console.log(value, zip.data('oldVal'));

        var countryCode = country.val();
        if (countryCode == '-' || countryCode == '') {
            countryCode = 'NOR';
        }
        if (value == zip.data('oldVal') || countryCode != 'NOR') {
            return;
        }

        zip.data('oldVal', value);

        if (value && value.length == 4) {
            $.ajax({
                type: 'GET',
                url: contextPath + '/municipality-for-zip-code.action',
                data: 'zipCode=' + value + "&countryCode=" + countryCode,
                dataType: 'json',
                success: function(data, status) {
                    //              console.log(data);

                    if (data.error) {
                        city.val('');
                    }
                    else {
                        city.val(data.postalLocation);
                    }
                }
            });
        }
        else {
            city.val('');
        }
    };

    var initialSync = true;
    var countryChanged = function(event) {
//        console.log(event);
        var target = $(event.currentTarget);
        var targetGroup = target.parents('fieldset').first();
        if (targetGroup.length == 0) {
            targetGroup = target.parents('form').first();
        }

//        console.log(targetGroup);

        var country = targetGroup.find('.zipLookupCountry');
        var city = targetGroup.find('.zipLookupCity');
        var zip = targetGroup.find('.zipLookupZipCode');

  //     console.log(country);
//        console.log("Country changed", country.val());

        var countryCode = country.val();
        if (countryCode == 'NOR' || countryCode == '-' || countryCode == '') {
            city.attr('disabled', 'true');

            // Reset city
            zip.data('oldVal', '');
            zip.keyup();
        }
        else {
            city.removeAttr('disabled');
            if (!initialSync) {
                city.val('');
            }
        }

        initialSync = false;
    };

    $('.zipLookupZipCode').keyup(zipChanged);
    $('.zipLookupZipCode').change(zipChanged);
    $('.zipLookupCountry').change(countryChanged);

    $('.zipLookupCountry').change(); // Trigger initial sync

    $('.zipLookupZipCode').parents('form').first().submit(function(event) {
//        console.log(event.currentTarget);
        var cities = $(event.currentTarget).find('.zipLookupCity');
//        console.log(cities);
        cities.removeAttr('disabled');
    })
});

