(function($) {

	$.widget("ui.dmkDistrictPicker", {
		options: { },
		_create: function() {
			var $self = $(this.element), self = this;

			$self.syncLoad('/template/widget-template/dmkDistrictPicker.html');

			var $tree = $self.find('#districtTree');
			var $acceptButtons = $self.find('button');
			var $districtSearches = $self.find('input');

			$self.dialog({ autoOpen: false, modal: true, minWidth: 536, height: $(window).height()/1.2 });

			function districtSelected(id, name, parents) {
				$self.data('selected', { id: id, name: name, parents: parents });
				$districtSearches.val(name);
				$acceptButtons.removeAttr('disabled');
			}

			$districtSearches.autocomplete({
				source: '/s/rest/interest/search?type=d&parents=1',
				select: function(event, ui) {
					districtSelected(ui.item.id.substring(1), ui.item.value, ui.item.parents);
					return false;
				}
			});
			$acceptButtons.click(function() {
				self._trigger('select', 0, $self.data('selected'));
			});

			setTimeout(function() {
				$tree.dmkTreeView({
					url: '/s/rest/district/roots',
					openTop: true,
					createContent: function(node) {
						var $content = $('<span class="dmk-treeview-label">' + node.name + '</span>');
						$content.click(function() {
							$tree.find('span.dmk-tree-choose').removeClass('dmk-tree-choose');
							$tree.find('button.dmk-districttree-choose').remove();
							$(this).addClass('dmk-tree-choose');
							var $choose = $('<button class="dmk-districttree-choose">Выбрать</button>');
							$choose.click(function() {
								districtSelected(node.id, node.name, $tree.dmkTreeView('getParentsOf', node.id));
								self._trigger('select', 0, $self.data('selected'));
							});
							$content.append($choose);
						});

						return $content;
					},
					getUrlForChildren: function(nodeId) {
						return '/s/rest/district/children?parentId=' + nodeId;
					}
				});
			}, 1);
		},
		_destroy: function() { $.Widget.prototype.destroy.apply(this, arguments); },
		open: function() { $(this.element).dialog('open'); },
		close: function() { $(this.element).dialog('close'); }
	});

})(jQuery);
