Umnitsa.Interface.CitySelect = function() {

    var $form = $('#city-select-form'),
        $region = $form.find('select[name="region"]'),
        $city = $form.find('select[name="city"]');

    var ajaxCache = {};

    function _init_() {
        $region.change(regionChangeHandler);
        if ($region.val() !== '') {
            $region.trigger('change');
        }
        $form.find('.submit>span').click(submitHandler);
    }

    function regionChangeHandler() {
        var region = this.value;
        $city.attr('disabled', 'disabled');
        if ((region === '') || (region === 'FOREIGN')) {
            $city.html('');
            return;
        }
        if (ajaxCache[region]) {
            updateCities(data);
        } else {
            Umnitsa.getJSON({
                '_do' : 'get_geo_cities',
                'region' : region
            }, function(data) {
                ajaxCache[region] = data;
                updateCities(data);
            });
        }
    }

    function updateCities(data) {
        $city.empty();
        if ((data) && (data.length)) {
            $city.removeAttr('disabled');
            for (var i = 0; i < data.length; i++) {
                $(document.createElement('option'))
                    .attr('value', data[i])
                    .html(data[i])
                    .appendTo($city);
            }
        }
    }

    function submitHandler() {
        var flag = true;

        $form.find('.field').removeClass('error');
        var region = $region.val()
        if (!region) {
            $region.parent().addClass('error');
            flag = false;
        }
        if ((!$city.val()) && (region !== 'FOREIGN')) {
            $city.parent().addClass('error');
            flag = false;
        }
        if (flag) {
            $form.get(0).submit();
        }
    }

    _init_();
};
