function show_reply_form(comment_id) {
    var comment = $('#c' + comment_id + 'form');
    var replyLink = $('#c' + comment_id + ' div.meta_actions a.reply');
    replyLink.replaceWith(_STOP_REPLY.replace("%comment_id%", comment_id));
    var poster = $('#c' + comment_id + ' .poster').text();
    var url = _FORM_URL.replace('json/', comment_id + '/json/');
    var form = $(_FORM.replace('%comment_id%', comment_id).replace('%url%', url).replace('%poster%', poster));
    form.css('display', 'none');
    comment.append(form);
    form.slideDown();
    apply_form_hijax(form);
}

function delete_comment(comment_id) {
	if(!confirm(_CONFIRM_DELETE))
		return;
	
	$.get("/ajaxcomments/delete/" + comment_id, {}, function(data, textStatus) {
		if(textStatus != "success") {
			alert(_DELETE_ERROR)
			return;
		}			
	
		c = $('#c' + comment_id)		    
		if(data) {
			c.find(".body").html("<i><p>" + data + "</i>")
			c.find(".ajax_action").remove()
	    } else {
	    	c.remove()
	    }
	})
}

function hide_reply_form(comment_id) {;
    var replyLink = $('#c' + comment_id + ' div.meta_actions a.reply');
    replyLink.replaceWith(_REPLY.replace('%comment_id%', comment_id));
    var form = $('#c' + comment_id + ' form');
    form.slideUp(function() {
        form.remove();
    });
}

function _get_depth(el) {
    var depth_re = new RegExp('depth\-(\\d+)');
	var classes = el.attr('class');
    return parseInt(depth_re.exec(classes)[1]);
}

function _highlightMessage(el) {
	el.Highlight(1000, '#FFFF99');
}

function apply_form_hijax(selector) {
    var beforeSubmit = function(formData, jqForm, options) {
        var button = jqForm.find('.send')
        button.hide()
        var loading = $('<img class="progress" src="/files/design/icons/loading.gif" width="35" height="35" alt="..."/>')
        button.after(loading);
    
    	var el = jqForm.find('.errorlist')
        el.html('')
        el.hide()
        
        var form = jqForm[0];
        if(!form.comment.value.replace(/^\s+|\s+$/g,"")) {
            el.append('<li>' + _NO_COMMENT + '</li>');
            el.show()
            button.show()
            loading.remove()
            return false;
        }
        else if(form.comment.value.length > 512) {
            el.append('<li>' + _COMMENT_TOO_BIG + '</li>');
            el.show()
            button.show()
            loading.remove()
            return false;
        }
    }
    var success = function(data) {
        data = data[0];
        $.get('/ajaxcomments/partial/'+data.pk+'/', function(to_append, textStatus) {
            // Add comment
            if(data.fields.parent) {
                var parent = $('#c' + data.fields.parent);
				var parent_depth = _get_depth(parent);
                var sibling = null;
                parent.nextAll('.comment').each(function(i) {
                	el = $(this)
                	depth = _get_depth(el);
                	if(depth <= parent_depth) {
                		sibling = el;
                		return false;
                	}
                	return true;
                });
                
                if(sibling != null) {
                    sibling.before(to_append);
                } else {
                    $('#comments').append(to_append);
                }
                hide_reply_form(parseInt(data.fields.parent));
            }
            else {
                $('#comments').append(to_append);
                $('#main_response_form #id_comment').val('');
                $('#main_response_form .send').show()
                $('#main_response_form .progress').remove()
            }
            
            // Highlight comment
            var id_re = new RegExp('id="(c\\d+)"');
            var div_id = id_re.exec(to_append)[1];
            var com_table = $('#' + div_id + 'comment')
            com_table.css('background-color', '#ffffb8')
            com_table.css('border', '3px solid #ffffb8')
            com_table.each(function() {
            	window.scrollTo(0, this.offsetTop)
            })

	        // Hide no comments
	        $('.no_comments').hide();
        });
    }
    var options = {
        beforeSubmit : beforeSubmit,
        success : success,
        dataType : 'json'
    };
    selector.ajaxForm(options);
}

$(document).ready(function() {
    apply_form_hijax($('.responseform'));
});


