var AJAX_LOADING = '<div class="ajax_loading"></div>';

function comment_form_send() {
    $('.comment_form').each(function() {
        this.parentNode.parent_id = $(this).find('input[name=parent]').val();
        $(this).find('p button').click(function() {
            if ($(this.parentNode.parentNode.parentNode.parentNode).prev().find('a.comment-reply-to').length > 0)
                $(this.parentNode.parentNode.parentNode.parentNode).prev().find('a.comment-reply-to').show();
            else
                $('a.reply').show();
                if (!($('.comments').html() || '').replace(/(^\s+|\s+$)/g, '')){ $('.reply:last').hide();}
            $(this.parentNode.parentNode.parentNode).remove();
        });
        $(this).ajaxForm({
            obj:this,
            'target':this.parentNode,
            'beforeSubmit': function(form_data) {
                    $(this.obj).hide();
                    $(this.obj).parent().append('<div class="ajax_loading"></div>');
                },
            'success': function(data) {
                    if (!$(data).find('.comment_form').length){
                        $('#c' + this.parent_id).find('a.comment-reply-to').show();
                        if (!this.parent_id) {
                            $('.reply').show();
                        };
                    };
                    comment_form_send();
                },
            'error': function(data) {
                $(this.obj.parentNode).find(':last').remove();
                $(this.obj).replaceWith('<p class="error">Извините, произошла ошибка</p>');
            }
        });
    });
}
function get_comment_form(obj) {
    var div = $('<div></div>');
    div.html(AJAX_LOADING);
    var c = '';
    if ($(obj).hasClass('reply')){
        $(obj).before(div);
        $('.reply').hide();
    }else{
        if ($(obj.parentNode.parentNode.parentNode).next().hasClass('comments-thread')) {
            $(obj.parentNode.parentNode.parentNode).next().append(div);
        }else{
            $(obj.parentNode.parentNode.parentNode).after('<div class="comments-thread"></div>');
            $(obj.parentNode.parentNode.parentNode).next().html(div);
        }
        c = $(obj.parentNode.parentNode.parentNode).attr('id');
    };
    $(obj).hide();
    var comment_parent_id = c.substring(1, c.length);
    $.ajax({
        obj: div,
        url:'/comment/form/?ct_id=' + content_type_id + '&obj_id=' + generic_object_id + '&parent_id=' + comment_parent_id,
        success: function(data) {
            $.scrollTo($(this.obj), 600, {margin:true, offset:-50});
            $(this.obj).replaceWith(data);
            comment_form_send();
        }
    });
    return false;
}
function comment_more(obj) {
    var container = $(obj.parentNode.parentNode.parentNode)
    $(obj).hide();
    $(obj).after(AJAX_LOADING);
    $.ajax({
        obj: $(obj.parentNode.parentNode.parentNode),
        url:'/comment/ajax/'+container.attr('id').substring(1, container.attr('id').length)+'/',
        success: function(data) {
            this.obj.replaceWith(data);
        },
        error: function() {
            this.obj.find('.ajax_loading').remove();
            this.obj.find('.comment_more_link').html('Извините, произошла ошибка. Попробуйте ещё раз.');
            this.obj.find('.comment_more_link').show();
        }
    });
    return false;
}
function get_comments(obj) {
    var div = $('<div></div>');
    div.html(AJAX_LOADING);
    $(obj).after(div);
    $.ajax({
        obj: obj,
        url:'/comment/ajax/'+content_type_id+'/'+generic_object_id+'/',
        success: function(data) {
            $(this.obj).next('div').html(data);
            $(obj).remove();
        },
        error: function() {
            $(this.obj).next('div').html('Извините, произошла ошибка. Попробуйте ещё раз.');
            $(obj).remove();
        }
    });
    $('.reply').show();
    return false;
}
function get_thread(obj) {
    var c = $(obj).prev().attr('id');
    var comment_id = c.substring(1, c.length);
    var div = $('<div class="ajax_loading"></div>');
    $(obj).after(div);
    
    $.ajax({
        obj: obj,
        div:div,
        url:'/comment/ajax/thread/'+comment_id+'/',
        success: function(data) {
            $(this.obj).after('<div class="comments-thread">' + data + '</div>');
            $(div).remove();
            $(obj).remove();
        },
        error: function() {
            $(this.obj).html('Извините, произошла ошибка. Попробуйте ещё раз.');
            $(div).remove();
        }
    });
    return false;
}
function comment_del_revert(obj) {
    var comment_id = $(obj.parentNode.parentNode.parentNode).attr('id');
    comment_id = comment_id.substring(1, comment_id.length);
    $.ajax({
        obj: obj,
        div:$(obj.parentNode.parentNode.parentNode),
        url:'/comment/'+comment_id+'/del/',
        success: function(data) {
            if ($(data).hasClass('comment-revert')) {
                $(this.obj).replaceWith(data);
                $(this.div).addClass('deleted');
                
            }else{
                $(this.obj).replaceWith(data);
                if (data) {
                    $(this.div).removeClass('deleted');
                }
            }
        }
    });
    return false;
}
function comment_approve(obj) {
    var comment_id = $(obj.parentNode.parentNode.parentNode).attr('id');
    comment_id = comment_id.substring(1, comment_id.length);
    $.ajax({
        obj: obj,
        div: $(obj.parentNode.parentNode.parentNode),
        url: '/comment/approve/'+comment_id+'/',
        success: function(data) {
            $(this.obj).remove();
            $(this.div).removeClass('not-approved');
        }
    });
    return false;
}
$(document).ready(function() {
    $('.get_comments').click(function() {return get_comments(this)});
    $('.comment_form_ajax').submit(function() {
            return false;
        });
    if (!$('.get_comments').length){ $('.reply').show();}
    if (!($('.comments').html() || '').replace(/(^\s+|\s+$)/g, '')){ $('.reply:last').hide();}
});

