$(function() {
    $('a.image').fancybox({
        margin: 20,
        titlePosition: 'inside',
        titleFormat: function(titleStr, currentArray, currentIndex) {
            var title = $('<div id=fancybox-title-inside></div>')
            title.html(titleStr)

            load_image_info(
                title,
                currentArray[currentIndex].id.replace('imglink', '')
            )

            return title
        }
    })

    function load_image_info(label, image_id) {
        $.ajax({
            url: '/files/get_image_info/' + image_id + '/',
            context: label,
            ifModified: true,
            error: function() {
                this.html('Не получилось загрузить комментарии.')
            },
            success: function(data, textStatus) {
                var comments_list = $('<div class=lightbox_comments_list></div>')
                this.append(comments_list)

                if (!data.comments.length && window.user_is_authenticated) {
                    comments_list.html('Комментариев к этой картинке пока нету. Вы будете первым!')
                    comments_list.empty = true
                } else { 
                    $.each(data.comments, function(index, comment) {
                        add_comment(comments_list, comment)
                    })
                }

                var arrows = {}
                if (data.this_users_vote == 'up') {
                    arrows.up = 'arrow_up_clicked'
                    arrows.down = 'arrow_down'
                } else if (data.this_users_vote == 'down') {
                    arrows.up = 'arrow_up'
                    arrows.down = 'arrow_down_clicked'
                } else {
                    arrows.up = 'arrow_up'
                    arrows.down = 'arrow_down'
                }

                if (window.user_is_authenticated) {
                    var form = $('<div class=lightbox_comment_form></div>')
                    var voting = $('<div class=lightbox_voting>\
    <div class="arrow ' + arrows.up + '"></div>\
    <div class=arrow_score>' + data.rating + '</div>\
    <div class="arrow ' + arrows.down + '"></div>\
</div>')
                    var textarea = $('<textarea class=lightbox_textarea></textarea>')
                    var button = $('<button class=lightbox_add_comment>Отправить</button>')
                    form.append(voting)
                    form.append(textarea)
                    form.append(button)
                    this.append(form)
                    button = button.get(0)
                    button.textarea = textarea
                    button.comments_list = comments_list
                    button.image_id = image_id
                    voting.attr('image_id', image_id)
                    voting.get(0).can_vote = data.can_vote
                } else {
                    comments_list.append('Войдите на сайт, чтобы оставлять комментарии.')
                }
            },
            complete: function(xhr, textStatus) {
                $('#fancybox-overlay').css('height', $(document).height())
            }
        })
        return false
    }

    $('.lightbox_add_comment').live('click', function() {
        if (!window.user_is_authenticated) {
            alert('Произошла ошибка. Пожалуйста, сообщите о ней на форуме.')
            return
        }

        $.ajax({
            type: 'POST',
            url: '/comments/add/',
            data: {
                content_type: 'image',
                object_id: this.image_id,
                text: this.textarea.val()
            },
            context: this,
            error: function(jqXHR, textStatus, errorThrown) {
                if (jqXHR.responseText == 'пустой комментарий') {
                    alert('Нельзя отправлять пустые комментарии.')
                    return
                }

                alert('Не получилось отправить комментарий.')
            },
            success: function(data, textStatus) {
                if (this.comments_list.empty == true) {
                    this.comments_list.html('')
                    this.comments_list.empty = false
                }
                add_comment(this.comments_list, data)
            }
        })
    })

    function add_comment(comments_list, comment) {
        comments_list.append($('<hr><div id=c' + comment[0] + '>' + comment[1] + '</div>\n' +
                               '<div class=author_name>Автор: ' + comment[2] + '</div>'))
    }

    $('.arrow').live('click', function() {
        if (!window.user_is_authenticated) {
            alert('Гости не могут голосовать')
            return
        }
        var that = $(this)
        if (that.parent().get(0).can_vote == false) {
            alert('Нельзя голосовать за собственные скриншоты')
            return
        }

        var image_id = that.parent().attr('image_id')
        var direction = /arrow_([a-z]+)/.exec(that.attr('class'))[1]
        var arrow_up, arrow_down
        if (direction == 'up') {
            arrow_up = that
            arrow_down = that.siblings('.arrow_down, .arrow_down_clicked')
        } else if (direction == 'down') {
            arrow_down = that
            arrow_up = that.siblings('.arrow_up, .arrow_up_clicked')
        } else {
            alert('Произошла ошибка, обратитесь к разработчику на форум.')
            return
        }

        if (
            (direction == 'up' && that.hasClass('arrow_up_clicked')) ||
            (direction == 'down' && that.hasClass('arrow_down_clicked'))
        ) {
            direction = 'none'
        }

        $.ajax({
            type: 'POST',
            url: '/files/vote_for_image/' + image_id + '/' + direction + '/',
            context: this,
            error: function() {
                alert('Не получилось проголосовать за картинку. ' + 
                      'Обратитесь на форум к разработчикам.')
            },
            success: function(data, textStatus) {
                var that = $(this)
                that.siblings('.arrow_score').html(data)

                if (direction == 'up') {
                    arrow_up.addClass('arrow_up_clicked')
                    arrow_up.removeClass('arrow_up')
                    arrow_down.addClass('arrow_down')
                    arrow_down.removeClass('arrow_down_clicked')
                } else if (direction == 'down') {
                    arrow_down.addClass('arrow_down_clicked')
                    arrow_down.removeClass('arrow_down')
                    arrow_up.addClass('arrow_up')
                    arrow_up.removeClass('arrow_up_clicked')
                } else if (direction == 'none') {
                    arrow_up.addClass('arrow_up')
                    arrow_up.removeClass('arrow_up_clicked')
                    arrow_down.addClass('arrow_down')
                    arrow_down.removeClass('arrow_down_clicked')
                }
            }
        })
    })

    $('.arrow_score').live('dblclick', function() {
        if (!window.user_is_staff) {
            return
        }

        var that = $(this)
        var image_id = that.parent().attr('image_id')

        var input = $('<input class=arrow_score_input value="' + that.html() + '">')
        var div = that.replaceWith(input)

        input.select()
        input.keyup(function(event) {
            if (event.which != 13) {
                return
            }

            $.ajax({
                type: 'POST',
                url: '/files/adjust_image_rating/' + image_id + '/' + $(this).val() + '/',
                error: function() {
                    alert('Произошла ошибка, обратитесь к маленькой нэке.')
                },
                success: function(data, textStatus) {
                    div.html(data)
                    input.replaceWith(div)
                }
            })
        })
    })
})

