(function($) {

	$.widget("ui.dmkOrgTreePicker", {
		options: { },
		_refreshTree: function() {
		    $tree.dmkTreeView('destroy');
            this._setupTree(getRefreshUrl('tree'));
        },
        $tree: null,
		_create: function() {
			var $self = $(this.element), self = this;

			$self.syncLoad('/template/widget-template/dmkOrgTreePicker.html');

			$tree = $self.find('#orgTree');
			var $acceptButtons = $self.find('button');
			var $districtSelect = $self.find('#federalDistricts');
            $.getJSON("/s/rest/district/federals", function(data) {
                $.each(data, function(index, child) {
                    var $content = $('<option lazy-children="true" value="' + child.id + '">' + child.name + '</option>');
                    $districtSelect.append($content);
                });

            });

            $('#federalDistrictsBlock').delegate('select','change',function(){
                var idVal = $(this).val();
                $('#districtId').val(idVal);
                self._refreshTree();
            });

            $('#organizationSearchButton').click(function(){
                $('#organizationSearchCheck').attr('checked', 'true');
                self._refreshTree();
            });

            $('#organizationSearchCheck').change(function(){
                self._refreshTree();
            });

			$self.dialog({ autoOpen: false, modal: true, minWidth: 536, height: $(window).height()/1.2 });

			$acceptButtons.click(function() {
				self._trigger('select', 0, $self.data('selected'));
			});

			setTimeout(function() {
                self._setupTree('/s/rest/org/tree?action=tree');
			}, 1);
		},
	    _districtSelected: function(id, name, parents) {
				$(this.element).data('selected', { id: id, name: name, parents: parents });
				$(this.element).find('button').removeAttr('disabled');
			},
		_setupTree: function(treeUrl) {
		        var selfTree = this;
				$tree.dmkTreeView({
					url: treeUrl,
					createContent: function(node) {
					    var $content = $('<span class="dmk-treeview-label">' + node.name + '</span>');
					    if (node.nodeType=='category') {

                        } else {
                            $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() {
                                    selfTree._districtSelected(node.id, node.name, $tree.dmkTreeView('getParentsOf', node.id));
                                    selfTree._trigger('select', 0, $(selfTree.element).data('selected'));
                                });
                                $content.append($choose);
                            });
                        }
						return $content;
					},
					getUrlForChildren: function(nodeId, $node) {
                        var url = getRefreshUrl('node');
                        if ($($node).attr("node-type")=='organization') {
                            url = url + '&parentOrgId=' + nodeId;
                        }   else {
                            url = url + '&categoryId='  + nodeId;
                        }
                        return url;
					}
				});
        },
		_destroy: function() { $.Widget.prototype.destroy.apply(this, arguments); },
		open: function() { $(this.element).dialog('open'); },
		close: function() { $(this.element).dialog('close'); },
		onSelect: function(func) {
			this.options.select = func;
		}
	});

})(jQuery);

getRefreshUrl = function(context)  {
    var url;
    if (context=='node') {
        url = '/s/rest/org/tree?action=node';
    } else {
        url = '/s/rest/org/tree?action=tree';
    }
    var districtId = jQuery('#districtId').val();
    if (districtId!=null && districtId!="") {
        url = url + '&districtId=' + districtId;
    }
    if ($('#organizationSearchCheck').attr('checked')==true) {
        url = url + '&search=' + $('#organizationSearchInput').val();
    }
    return url;
};

