var Comments = new Singletone ({
    loading: function (message) {
        if (!ID('loading')) {
            var div = document.createElement('DIV');
            div.id = 'loading';
            Template.assign('message', message);
            div.innerHTML = Template.transform(LOADING);
            document.body.appendChild(div);
        }
    },
    
    done: function (message) {
        var loading = ID('loading');
        if (loading) {
            if (!message) {
                loading.remove(Effects.vanish);
            } else {
                loading.innerHTML = message;
                loading.onmouseover = function () {
                    this.remove(Effects.vanish);
                }
            }
        }
    },

    show: function () {
        if (ID('comments-window')) {
            ID('comments-window').className = 'windcom-a';
        } else {
            var div = document.createElement('DIV');
            div.id = 'comments-window';
            div.className='windcom-a';
            Template.assign('title', title);
            div.innerHTML = Template.transform(COMMENTS);
            document.body.appendChild(div);
            DOM.enchaseDocumentNodes(div);
            
            self.list();
        }
    },
    
    hide: function () {
        ID('comments-window').className = 'windcom';
        return false;
    },

    save: function (form) {
        var req = new Ajax(api + module + '/' + id + '/', Ajax.METHOD_POST);
        req.responseHandler = function (req) {
            if (req.data.item) {
                var div = self.item(req.data.item);
                ID('comment-list').insertBefore(div, ID('comment-list').firstChild);
                form['data[text]'].value = '';
                self.done('Ваш комменатрий сохранен');
            } else if (req.data.error) {
                var error = req.data.error;
                var message = 'Пожалуйста, исправьте ошибки:';
                error.forEach(function (key) {
                    message += ('<br />') + this;
                    /*if (key == 'captcha') {
                        form['captcha'].title = this;
                    } else {
                        form['data[' + key + ']'].title = this;
                    }*/
                });
                self.done(message);
            }
        }
        req.send(form.getData());
        self.loading('Ваш комментарий сохраняется');
        
        return false;
    },

    del: function (id) {
        var req = new Ajax(api + module + '/' + id + '/', Ajax.METHOD_DELETE);
        req.responseHandler = function (req) {
            if (req.data.id) {
                var div = ID('comment-' + req.data.id);
                div.remove(Effects.vanish);
                self.done('Комменатрий удален');
            } else if (req.data.error) {
                var error = req.data.error;
                var message = 'Ошибка:';
                error.forEach(function (key) {
                    message += ('<br />') + this;
                });
                self.done(message);
            }
        }
        req.send({});
        self.loading('Комментарий удаляется');
        
        return false;
    },
    
    item: function (data) {
        data.text = data.text.replace(new RegExp('\n|\r|\n\r', 'g'), '<br />');
        var div = document.createElement('DIV');
        Template.assign('comment', data);
        div.innerHTML = Template.transform(COMMENT);
        return div;    
    },
    
    list: function (page) {
        var req = new Ajax(api + module + '/' + id + '/');
        req.responseHandler = function (req) {
            var data = req.data.item;
            if (data.id) {
                data = [data];
            }
            
            ID('comment-list').removeChildren();
            
            // set comments 
            for (var i = 0; i < data.length; i ++) {
                var div = self.item(data[i]);
                ID('comment-list').appendChild(div);
            }
            
            ID('comment-pages').removeChildren();
            //set pages
            for (var i = 1; i <= req.data.pages; i ++) {
                if (i != Number(req.data.page)) {
                    var page = document.createElement('A');
                    page.href = '#' + i;
                    page.innerHTML = i;
                    page.onclick = function () {
                        return Comments.list(this.innerHTML);
                    }
                } else {
                    var page = document.createElement('B');
                    page.innerHTML = i;
                }
                ID('comment-pages').appendChild(page)
            }
            self.done();
        }
        self.loading('Комментарии загружаются');
        req.send({page: page || 1});
        
        return false;
    }
});
