﻿/**
 * Отображает статью 
 * @class Отображает статью
 * генерирует события 
 * article show - статья открылась
 * article hide - статья скрылась
 */
;function Article() {
    /**
    * блок, в котором отображается статья
    */
    this._module = $('#m-article');
    
    /**
    * id открытой статьи
    */
    this._id = null;
    
    /**
     * состояние модуля
     * @type Boolean
     */
    this.on = false;
    
    /**
     * css-класс блокирования выставления рейтинга статьи
     * @constant
     */
    this._DISABLED_RATING = 'star-rating_false';
    
    // прикрепить обработчики событий
    this._bind();
}

Article.prototype = {
    _bind: function() {
        var that = this;

        // клик на звёздочки
        $('#show_rating_block a').live('click', function() {
        
            // только зарегистрированные пользователи могут выставлять рейтинг
            if (account.isLogin) {
                var dl = $('#show_rating_block dl.star-rating');
                
                // установка рейтинга может быть заблокирована, если пользователь уже голосовал
                if (!dl.hasClass(that._DISABLED_RATING)) {
                    $.ajax({
                        type: 'post',
                        url: 'ajax/object_rate',
                        data: {
                            user_id: account.id,
                            object_id: that._id,
                            rate: $(this).data('rate')
                        }, 
                        success: function(data) {
                            if (data == 0) {
                                alert('Необходим выполнить вход или зарегистрироваться');
                            } else {
                               
                                // Деактивировать звёзды
                                dl.addClass(that._DISABLED_RATING);
                                
                                // указать новый средний рейтинг
                                dl.find('li').eq(3).css('width', +data * 28 + 'px');                               
                            }                           
                        }
                    });
                }
            } else {
                alert('Необходим выполнить вход или зарегистрироваться');
            }           
        });
        
        // скрыть статью по клику на стрелку назад
        $('#back_a').live('click', function() {
            that.hide();
            coreNotice('article hide');
        });
        
        // закрыть статью по клику на крестик 
        $('#m-comments-close').live('click', function() {
            that.hide();
        });
    },
    

    /**
     * запретить пользователю ставить рейтинг
     */ 
    ratingDisable: function() {
        $('#show_rating_block dl').addClass(this._DISABLED_RATING);
    },
    
    /**
     * разрешить пользователю ставить рейтинг
     */
    ratingEnable: function() {
        $('#show_rating_block dl').removeClass(this._DISABLED_RATING);
    },
    
    /**
     * показать статью
     * @param {String} id id статьи
     * @param {Function} callback функция, которая будет вызвана после отображения статьи
     */
    show: function(id, callback) {
        // включить модуль
        this.on = true;
        var that = this;

        $.ajax({
            url: "/ajax/object_with_comments", 
            data: { id: id },
            type: 'get',
            success: function(html) {
                that._module.html(html);
                that._module.show();                                            
                coreNotice('article show');
                
                callback && callback();               
            }
        });
        this._id = id;
    },
    
    /**
     * Скрыть статью
     */
    hide: function() {
        // выключить модуль
        this.on = false;        
        this._module.hide().empty();
        $('#m-article').removeClass('hide_artile_com');

    }
}
