var timeOut = null;
var baseRating = null;
var renderedRatings = new Object();
/* 
Builds the overall rating control, targetting a div with the id PluckOverallRating_[ArticleKey]
*/
function ShowOverallRating(articleKey, omnitureEVar24) {
    // get the articles for the individual attributes
    var requestBatch = new RequestBatch()
  , articleKeyOverall = new ArticleKey(articleKey)
  , articleKeyD = new ArticleKey(articleKey + '_d')
  , articleKeyF = new ArticleKey(articleKey + '_f')
  , articleKeyS = new ArticleKey(articleKey + '_s')
  , articleKeyP = new ArticleKey(articleKey + '_p')
  , articleKeyC = new ArticleKey(articleKey + '_c');

    requestBatch.AddToRequest(articleKeyOverall);
    requestBatch.AddToRequest(articleKeyD);
    requestBatch.AddToRequest(articleKeyF);
    requestBatch.AddToRequest(articleKeyS);
    requestBatch.AddToRequest(articleKeyP);
    requestBatch.AddToRequest(articleKeyC);

    requestBatch.BeginRequest(serverUrl, function(responseBatch) {
        if (responseBatch.Messages[0].Message == 'ok' && responseBatch.Responses.length == 6) {
            // get the ratings on each one      
            var numberRatings, buyRecommendationsRating, ratingD, ratingF, ratingS, ratingP, ratingC;
            var hasRatingOverview = ($("#rr-ibox-container")[0] != null);
            currentRating = new Object();
            var articleKey = "";
            for (var i = 0; i < responseBatch.Responses.length; i++) {
                var myArticle = responseBatch.Responses[i].Article
        , keyLength = myArticle.ArticleKey.Key.length;
                articleKey = articleKey == "" ? myArticle.ArticleKey.Key : articleKey;
                switch (myArticle.ArticleKey.Key.substring(keyLength - 2)) {
                    case '_d':
                        currentRating.NumberRatings = myArticle.Ratings.NumberOfRatings;
                        if (currentRating.NumberRatings == 0) {
                            $("#PluckOverallRating_" + articleKey)[0].style.visibility = "hidden";
                            return;
                        }
                        currentRating.RatingD = parseFloat(myArticle.Ratings.AverageRating);
                        break;
                    case '_f':
                        currentRating.RatingF = parseFloat(myArticle.Ratings.AverageRating);
                        break;
                    case '_s':
                        currentRating.RatingS = parseFloat(myArticle.Ratings.AverageRating);
                        break;
                    case '_p':
                        currentRating.RatingP = parseFloat(myArticle.Ratings.AverageRating);
                        break;
                    case '_c':
                        currentRating.RatingC = parseFloat(myArticle.Ratings.AverageRating);
                        break;
                    default:
                        // overall article stores a rating of 0 for no buy recommendation and 1 for buy
                        currentRating.BuyRecommendationsRating = myArticle.Ratings.AverageRating;
                        (!currentRating.BuyRecommendationsRating) ? currentRating.BuyRecommendationsRating = 0 : null;
                }
            }

            // calculate the average rating and total 
            currentRating.AverageRating = (currentRating.RatingD + currentRating.RatingF + currentRating.RatingS + currentRating.RatingP + currentRating.RatingC) / 5;
            currentRating.AverageRating = (Math.round(currentRating.AverageRating * 10) / 10);

            currentRating.BuyPercentage = Math.round(currentRating.BuyRecommendationsRating * 100)
            currentRating.ArticleKey = articleKey;
            if (baseRating == null) {
                baseRating = currentRating;
            }
            ShowRating(true, currentRating, omnitureEVar24);
        }
        else {
            var articleKey = responseBatch.Responses[0].Article.ArticleKey.Key;
            var hideElm = $("#PluckOverallRating_" + articleKey)[0];
            if(hideElm != null)
            {
            	$("#PluckOverallRating_" + articleKey)[0].style.visibility = "hidden";
            }
            return;
        }

    });
}

ShowRating = function(forPopUp, currentRating, omnitureEVar24) {
    if (!forPopUp) {
        currentRating = baseRating;
    }

    if (currentRating == null) {
        if (!forPopUp) {
            timeOut = window.setInterval('ShowRating(false, null, "' + omnitureEVar24 + '")', 500);
        }
        return;
    }
    else if (timeOut != null && !forPopUp) {
        window.clearInterval(timeOut);
    }


    var averageRating = currentRating.AverageRating;
    var articleKey = currentRating.ArticleKey;

    // work around - prevent multiple rendering
    if (forPopUp && renderedRatings[articleKey] == true) {
        return;
    }
    else {
        renderedRatings[articleKey] = true;
    }


    // work around due to double rating render
    var isMSIE = /*@cc_on!@*/false;
    var spaceTxt = isMSIE ? "&nbsp;" : "";
    if (forPopUp) {
        // fill in the div and the popup

        var overallContainer = document.getElementById('ratingStars_' + currentRating.ArticleKey);
        if(overallContainer != null)
        {
					overallContainerContents = '<div class="float-left">';

					for (var i = 1; i <= 5; i++) {
							var star = '';
							if (averageRating >= i)
									star = '/images/community/AS24_icon_starfull_16_ora1.gif';
							else if (averageRating > i - 1 && averageRating < i) {
									if (averageRating < (i - 0.75)) {
											star = '/images/community/AS24_icon_starempty_16_ora1.gif';
									}
									else if (averageRating > (i - 0.25)) {
											star = '/images/community/AS24_icon_starfull_16_ora1.gif';
									}
									else {
											star = '/images/community/AS24_icon_starhalf_16_ora1.gif';
									}
							}
							else
									star = '/images/community/AS24_icon_starempty_16_ora1.gif';
							overallContainerContents += '<img src="' + star + '" alt="' + i + '" />';
					}
					overallContainerContents += '</div><div class="rating-arrow"> <img src="/images/community/AS24_icon_down_11x12_blue1.gif"" /> (<span onclick=\'changeToReviewTab("' + omnitureEVar24 + '");\'>' + currentRating.NumberRatings + '</span>)</div>';
					overallContainer.innerHTML += overallContainerContents;
					$("#overall_" + articleKey)[0].innerHTML = averageRating.toString().replace(".", ",");
	        $("#rate-count_" + articleKey)[0].innerHTML = currentRating.NumberRatings + spaceTxt;
	        $("#recommendation-rate_" + articleKey)[0].innerHTML = currentRating.BuyPercentage + "%" + spaceTxt;					
				}
        var breakdownContainer = document.getElementById('ratingBreakdown_' + articleKey)
    }
    else {
        $("#rr-ibox-title-rating")[0].innerHTML = averageRating.toString().replace(".", ",");
        $("#rr-ibox-icon-rating")[0].innerHTML = averageRating.toString().replace(".", ",");
        $("#rr-ibox-rating-count")[0].innerHTML = currentRating.NumberRatings + spaceTxt;
        $("#rr-ibox-rec-rate")[0].innerHTML = currentRating.BuyPercentage + "%" + spaceTxt;
    }

    // build the breakdown
    for (var i = 0; i < 5; i++) {
        var myTitle, myRating, elm, overviewElm;

        switch (i) {
            case 0:
                myRating = currentRating.RatingD;
                if (!forPopUp)
                    elm = $("#rr-ibox-stars-d")[0];
                else
                    elm = $("#stars_d_" + articleKey)[0];
                break;
            case 1:
                myRating = currentRating.RatingF;
                if (!forPopUp)
                    elm = $("#rr-ibox-stars-f")[0];
                else
                    elm = $("#stars_f_" + articleKey)[0];
                break;
            case 2:
                myRating = currentRating.RatingS;
                if (!forPopUp)
                    elm = $("#rr-ibox-stars-s")[0];
                else
                    elm = $("#stars_s_" + articleKey)[0];
                break;
            case 3:
                myRating = currentRating.RatingP;
                if (!forPopUp)
                    elm = $("#rr-ibox-stars-p")[0];
                else
                    elm = $("#stars_p_" + articleKey)[0];
                break;
            case 4:
                myRating = currentRating.RatingC;
                if (!forPopUp)
                    elm = $("#rr-ibox-stars-c")[0];
                else
                    elm = $("#stars_c_" + articleKey)[0];
                break;
        }
        if(elm != null)
        {
					var starHTML = "<div class='float-left'>";
					for (var j = 1; j <= 5; j++) {
							var star = '';
							if (myRating >= j)
									star = '/images/community/AS24_icon_starfull_16_ora1.gif';
							else if (myRating > j - 1 && myRating < j)
									star = '/images/community/AS24_icon_starhalf_16_ora1.gif';
							else
									star = '/images/community/AS24_icon_starempty_16_ora1.gif';
							starHTML += '<img src="' + star + '" alt="' + j + '" />';
					}

					if (currentRating.NumberRatings > 1 || !forPopUp) {
							myRating = (Math.round(myRating * 10) / 10).toString();
							myRating = myRating.indexOf(".") > -1 ? myRating.replace(".", ",") : myRating += ",0";
							starHTML += ' </div><div class="sub-rating">' + myRating + '</div>';
					}
					else {
							var prevElm = elm.previousSibling;
							if (prevElm.nodeName.toLowerCase() != "div") {
									prevElm = prevElm.previousSibling;
							}
							prevElm.className += " long";
					}
					elm.innerHTML = starHTML;
       	}
    }
}

function changeToReviewTab(omnitureEVar24) {
    try {
        switchToTabById('review-tab');
        fireomniture("Com-TabReview-Mod", omnitureEVar24);
        event.cancelBubble = true;
    }
    catch (e) {
    }

    return false;
}

function ShowHideBreakdown(articleKey) {
    var popup = document.getElementById('ratingBreakdown_' + articleKey);
    var isDialogOpen = popup.style.display == "block";
    if (activePopUp != null) {
        activePopUp.style.display = "none";
        popuploaded = false;
    }

    if (!isDialogOpen) {
        popup.style.display = 'block';
        activePopUp = popup;
    }
}