﻿/// <reference path="jquery-1.3.1-vsdoc.js" />
var _totalReviews = 0;
var _currentPage = 1;

function initStarRatings() {

    var requestBatch = new RequestBatch();
    requestBatch.AddToRequest(new ArticleKey(rawJSON.BusinessId));
    requestBatch.BeginRequest(serverUrl, ratingCallBack);
}

$(function() {
    //var reviewPageRequest = new RequestBatch();
    //reviewPageRequest.AddToRequest(new ReviewPage(new ArticleKey(rawJSON.BusinessId), 10, 1, "TimeStampDescending"));
    //reviewPageRequest.BeginRequest(serverUrl, reviewCallBack);

});

function ratingCallBack(responseBatch) {

    if (responseBatch.Responses.length == 0) {
        setupRatings($("#star-rating_1"));
        setupRatings($("#star-rating_2"));
    }
    
    for (var i = 0; i < responseBatch.Responses.length; i++) {
        var response = responseBatch.Responses[i];
        userCallBackFunctionProcessor(response);
    }
}

function reviewCallBack(responseBatch) {

    if (!IS_LOGGED_IN) {
        $("#reviewsContainer").find("textarea").attr("disabled", "disabled");
        $("#reviewsContainer").find("button").attr("disabled", "disabled");
        $(".promptLogin").html("&nbsp;You must be logged in to leave a review. <a href='/Account/Login?returnUrl=" + window.location + "'>Login</a> | <a href='/Account/Register?returnUrl=" + window.location + "'>Register</a> <br/><br/>");
    } else {
        $(".promptLogin").hide();
    }

    for (var i = 0; i < responseBatch.Responses.length; i++) {
        var response = responseBatch.Responses[i];
        userCallBackFunctionProcessor(response);
    }
}


function setupRatings(div) {
    var checkboxes = $(div).find("input[type=radio].ratingstar");
    if (!IS_LOGGED_IN) {
        checkboxes.attr("disabled", "disabled");
        $(div).click(function() {
            $(this).find("span").eq(2).html("&nbsp;<a href='/Account/Login?returnUrl=" + window.location + "'>Login</a> to rate.");
        });
    }

    checkboxes.rating({
        required: true,
        callback: sendRating
    });

    if (IS_LOGGED_IN) {
       
        $.each($(".star > a"), function(i, star) {
            var starText = $(star).parent().parent().find('span').eq(1);
            $(star).mouseenter(function() { starText.html($(star).attr('title')); });
            $(star).mouseleave(function() { starText.html(''); });
        });
    }

    $(div).show();
}


function userCallBackFunctionProcessor(response) {
    if (response.Article != null) {
        _totalReviews = response.Article.Reviews.NumberOfReviews;
        processArticle(response.Article);
    } else if (response.ReviewPage != null) {
        processReviewPage(response.ReviewPage);
    }
}

function processArticle(article) {
    if (article.Ratings != null) {
        var checkboxes1 = $("#star-rating_1 > input[type=radio].ratingstar");
        checkboxes1.eq(article.Ratings.AverageRating - 1).attr("checked", "checked");
        setupRatings($('#star-rating_1'));

        var checkboxes2 = $("#star-rating_2 > input[type=radio].ratingstar");
        checkboxes2.eq(article.Ratings.AverageRating - 1).attr("checked", "checked");
        setupRatings($('#star-rating_2'));
        
        if (article.Ratings.NumberOfRatings > 0) {
            $("#star-rating_1 > span").eq(0).html("&nbsp;(" + article.Ratings.NumberOfRatings + ")");
            $("#star-rating_2 > span").eq(0).html("&nbsp;(" + article.Ratings.NumberOfRatings + ")");
        }
    }
}

function sendRating(value, link) {
    var actionRequest = new RequestBatch();
    actionRequest.AddToRequest(new RateAction(new ArticleKey(rawJSON.BusinessId), value));
    actionRequest.BeginRequest(serverUrl, ratingCallback);
}

function ratingCallback(response) {
    $("#star-rating_1 > span").eq(1).html("&nbsp;Thanks for rating!")
    $("#star-rating_2 > span").eq(1).html("&nbsp;Thanks for rating!")
}


function processReviewPage(reviewPage) {
    var container = $("#reviewsContainer");
    container.find("h4 > span").html("(" + reviewPage.NumberOfReviews + ")")

    var avatar = "/content/images/icons/avatar.png";

    if (reviewPage.Reviews.length > 0) {
        container.find("div").eq(0).html("");
        $.each(reviewPage.Reviews, function(i, review) {

            if (review.Author.AvatarPhotoUrl.indexOf("no-user-image.gif") < 0) {
                avatar = review.Author.AvatarPhotoUrl;
            }

            recommendedNumber = review.NumberOfRecommendations != "0" ? "+" + review.NumberOfRecommendations : "";

            container.find("div").eq(0).append("<a href='javascript:recommendReview(\"" + review.ReviewKey.Key + "\")' class='reviewRecommends' title='Recommend Review'>" + recommendedNumber + "</a><a class='reportAbuse' href='javascript:reportReview(\"" + review.ReviewKey.Key + "\")'>Report Abuse</a><div class='reviewAuthor'><img src='" + avatar + "'/>" + review.Author.DisplayName + "</div><div class='reviewBody'>" + review.ReviewBody + "</div><div class='clear'></div>");
        });

        if (IS_LOGGED_IN) {
            $("a.reviewRecommends").addClass("withhover");
        }
        
    } else {
        container.find("div").eq(0).html("No customer reviews yet.");
    }

    //$(".r_next").hide();
    //$(".r_previous").hide();
    
    if (_totalReviews > (_currentPage * 10)) $(".r_next").show();
    if (_currentPage > 1) $(".r_previous").show();
}

function sendReview() {
    var textArea = $("#customerReview");
    if (textArea.val() != "") {
        var reviewActionRequest = new RequestBatch();
        reviewActionRequest.AddToRequest(new ReviewAction(new ArticleKey(rawJSON.BusinessId), window.location, document.title, rawJSON.Name + " Review", "0", textArea.val(), "", ""));
        reviewActionRequest.BeginRequest(serverUrl, sendReviewCallback);
    }
}

function sendReviewCallback(response) {
    $("#customerReview").val("");
    alert("Thanks for your review.");

    reloadReviews(1);
}

function recommendReview(key) {

    this.blur();
    
    if (IS_LOGGED_IN) {

        var recommendRequest = new RequestBatch();
        recommendRequest.AddToRequest(new RecommendAction(new ReviewKey(key)));
        recommendRequest.BeginRequest(serverUrl, recommendCallback);
            
    } else {
        alert("You must login to recommend a review.")
    }
}

function recommendCallback(response) {
    alert("Thank you for recommending this review.")
}

function reportReview(key) {
    
    var reportRequest = new RequestBatch();
    reportRequest.AddToRequest(new ReportAbuseAction(new ReviewKey(key), 'User Reported Abuse', ''));
    reportRequest.BeginRequest(serverUrl, reportCallback);

}

function reportCallback(response) {
    alert("Thank you for reporting this review.")
}

function reviewNext() {
    
    _currentPage++
    reloadReviews(_currentPage);
}

function reviewPrevious() {

    _currentPage--
    reloadReviews(_currentPage);
}

function reloadReviews(pageNumber) {

    $(".promptLogin").html("Loading Reviews...").show();
    
    var reviewPageRequest = new RequestBatch();
    reviewPageRequest.AddToRequest(new ReviewPage(new ArticleKey(rawJSON.BusinessId), 10, pageNumber, "TimeStampDescending"));
    reviewPageRequest.BeginRequest(serverUrl, reviewCallBack);

}