ListController = Class.create(Controller, {
   prepareHTML: function() {
        new Clicker(this.params.name, this.selectItem.bind(this));

        if (this.params.sort_url) {
            this.sortable = j$('#' + this.params.container.id);
            
            this.sortable.sortable('destroy');
            
            this.sortable.sortable({
                items: '.sortable',
                handle: '.handle',
                axis: 'y',
                update: this.onSortUpdate.bind(this)
            });
        }

        if (this.settedItem || this.settedItem === 0) {
            this.selectItem(this.settedItem);
            this.settedItem = false;
        }
        
        if (this.selectedId) {
            this.addClass();
        }
        
        if (this.params.prepareForm) {
            this.params.prepareForm.bind(this)();
        };
   },
   
   onSortUpdate: function(event, ui) {
        var els = this.sortable.sortable('toArray');
        var new_els = [];
        for (var i=0; i<els.length; i++) {
           new_els[i] = els[i].substr((this.params.name + '_' + 'sort_').length);
            
        }
        request(this.params.sort_url, {'order': new_els.join(',')});
   },
   
   //Указание значения, которое должно быть установлено после апдейта контроллера
   setItem: function(id) {
       this.settedItem = id;
       return this;
   },
   
   selectItem: function(id) {
        var smth_changed = true;
                     
        if (this.selectedId || this.selectedId === 0) {
            this.hideClass();
            if (this.selectedId == id) {
                smth_changed = false;
            }         
        }
        
        this.selectedId = id;
        this.addClass();
        
        if (smth_changed) {
            notify(this, 'select');
        }
   },
   
   addClass: function() {
        var el = $(this.params.name + '__' + this.selectedId);
        if (el) {
           el.addClassName('selected');
        }
   },   
   
   hideClass: function() {
        var el = $(this.params.name + '__' + this.selectedId);
        if (el) {
           el.removeClassName('selected');
        }
   } 
});
