jQuery.fn.auth_vote = function(comment_id, current_vote) {
    var container = jQuery(this);
    jQuery.extend(container, {
        comment_id: comment_id,
        current_vote: current_vote
    });
    
    container.yes_link = $('#yes_vote_'+comment_id);
    container.no_link = $('#no_vote_'+comment_id);
    $(container.yes_link).click(function(event) {
        event.preventDefault();
        var saveYesClass = $('#yes_count_'+container.comment_id).attr('class');
        var saveNoClass = $('#no_count_'+container.comment_id).attr('class');
        $('#no_count_'+container.comment_id).removeClass("down-vote-click");
        if ($('#yes_count_'+container.comment_id).attr('class').indexOf('up-vote-click')!=-1) {
            $('#yes_count_'+container.comment_id).addClass("up-vote");
            $('#yes_count_'+container.comment_id).removeClass("up-vote-click");
        }else{
            $('#yes_count_'+container.comment_id).removeClass("up-vote");
            $('#yes_count_'+container.comment_id).addClass("up-vote-click");
        }
        $.ajax({
            type: "GET",
            url: "/votes/vote_auth/"+container.comment_id+"/up/",
            success: function(msg){
                var data = JSON.parse(msg);
                container.current_vote = 1;
                container.yes_link.addClass('myvote').end();
                container.no_link.removeClass('myvote').end();
                $('#votes_'+container.comment_id+' p').html(data.net_votes);
            },
            error: function(request) {
                if(request.status && request.status > 0) {
                    if (request.responseText === 'auth_required') {
                        $(document).bind('authentication_complete', function() {
                            $(document).unbind('authentication_complete');
                            ajax_auth_successful();
                            container.yes_link.click();
                            return false;
                        });
                        
                        ajax_register('','','/accounts/choose-auth/');
                    } else if (request.responseText === 'cannot_vote') {
                        alert('You cannot rate your own contribution')
                    } else {
                        alert('having some technical difficulties, try back in a bit.');
                    }
                }
                $('#yes_count_'+container.comment_id).attr('class', saveYesClass);
                $('#no_count_'+container.comment_id).attr('class', saveNoClass);
            }
        });
    });
    $(container.no_link).click(function(event) {
        event.preventDefault();
        var saveYesClass = $('#yes_count_'+container.comment_id).attr('class');
        var saveNoClass = $('#no_count_'+container.comment_id).attr('class');
        $('#yes_count_'+container.comment_id).removeClass("up-vote-click");
        if ($('#no_count_'+container.comment_id).attr('class').indexOf('down-vote-click')!=-1) {
          $('#no_count_'+container.comment_id).addClass("down-vote");
          $('#no_count_'+container.comment_id).removeClass("down-vote-click");
          container.no_link.removeClass('myvote');
        } else {
          $('#no_count_'+container.comment_id).removeClass("down-vote");
          $('#no_count_'+container.comment_id).addClass("down-vote-click");
        }
        $.ajax({
            type: "GET",
            url: "/votes/vote_auth/"+container.comment_id+"/down/",
            success: function(msg){
                var data = JSON.parse(msg);
                container.current_vote = 1;
                container.yes_link.removeClass('myvote').end();
                container.no_link.addClass('myvote').end(); 
                $('#votes_'+container.comment_id+' p').html(data.net_votes);              
            },
            error: function(request) {    
              if(request.status && request.status > 0) {
                    if (request.responseText === 'auth_required') {
                        $(document).bind('authentication_complete', function() {
                            $(document).unbind('authentication_complete');
                            ajax_auth_successful();
                            container.no_link.click();
                            return false;
                        });
                        ajax_register('','','/accounts/choose-auth/');
                    } else if (request.responseText === 'cannot_vote') {
                        alert('You cannot rate your own contribution')
                    } else {
                        alert('having some technical difficulties, try back in a bit.');
                    }
              }
              $('#yes_count_'+container.comment_id).attr('class', saveYesClass);
              $('#no_count_'+container.comment_id).attr('class', saveNoClass);
            }
        });
    });
    return this;
}

function set_votes(votes) {
    for (vote in votes)
        $('#votes_'+votes[vote][0]).auth_vote(votes[vote][0], votes[vote][1]);
}
function ajax_authenticate(url, title, message) {

    title = (typeof(title) != 'undefined' && title) ? title : 'Please Log in to Continue';
    message = (typeof(message) != 'undefined' && message) ? message : '';
    url = (typeof(url) != 'undefined' && url) ? url : '/accounts/authenticate-login/';
    data = {
        message: message
    }
    $.ajax({
        type: "GET",
        url: url,
        data: data,
        success: function(responseText){
            if(responseText == "true") {
                $(document).trigger('authentication_complete', true);
            } else {
                $("#TB_ajaxContent").html("");
                $('#hiddenModalContent').html(responseText);
                $.facebox({div:'#hiddenModalContent'}, 'share-box-style');
            }
        },
        error: function (request, text, error){
            alert(request.status);
            if(request.status && request.status > 0 && request.status != 400) {
                alert('We are having technical difficulties, please try back later'); 
            }else{
                $('#facebox .content').html('');
                $.facebox.reveal(div=request.responseText,'share-box-style');
            }
        }
	});
}
function ajax_login(login_title, url) {
	var login_title = (typeof(login_title) != 'undefined' && login_title) ? login_title : 'Please Log in to Continue';
    var url = (typeof(url) != 'undefined' && url) ? url : "/accounts/login-ajax/";
    $.ajax({
        type: "GET",
        url: url,
        beforeSend: function(){
            $("#TB_ajaxContent").html('');
            $('#hiddenModalContent').html("<div id=\"modal_content\"><img src='"+window.site_data.settings['MEDIA_URL']+"global/images/throbber.gif' /> Loading...</div>");
        },
        success: function(responseText){
            $('#facebox .content').html('');
            $.facebox.reveal(div=responseText,'share-box-style');
        },
        error: function (request, text, error){
            alert(request.status);
            if(request.status && request.status > 0 && request.status != 400) {
                alert('We are having technical difficulties, please try back later'); 
            }else{
                $('#facebox .content').html('');
                $.facebox.reveal(div=request.responseText,'share-box-style');
            }
        }
	});
}
function ajax_register(registration_title, benefit_message, url, id) {
    registration_title = (typeof(registration_title) != 'undefined' && registration_title) ? registration_title : 'Create an account.';
    data = (typeof(benefit_message) != 'undefined' && benefit_message) ? "message=" + benefit_message : '';
    var url = (typeof(url) != 'undefined' && url) ? url : "/recognize-login-new/";
    $.ajax({
        type: "GET",
        url: url,
        data: data,
        success: function(responseText){
            $.facebox({div:'#hiddenModalContent'}, 'share-box-style', $(document).scrollTop()+200, 400);
            $('#facebox .content').html('');
            $.facebox.reveal(div=responseText,'share-box-style');
        },
        error: function (request, text, error){
            alert(request.status);
            if(request.status && request.status > 0 && request.status != 400) {
                alert('We are having technical difficulties, please try back later'); 
            }else{
                $('#facebox .content').html('');
                $.facebox.reveal(div=request.responseText,'share-box-style');
            }
        }
    });
}
