/* !!NOTOKENS!!
   $Id: ratings.js,v 1.4 2009/05/30 00:28:13 mleite Exp $
   $Source: /home/np/shared/filmcom/static/js/pluck/ratings.js,v $
*/
/*** For pluck star ratings ***/
var imgStarLit = staticBaseURL + '/images/stars/rating/star_lit.gif';
var imgStarUnlit = staticBaseURL + '/images/stars/rating/star_unlit.gif'

function lightUp(id) {
  for (imgArrayCnt = 1; imgArrayCnt <= id; imgArrayCnt++){
    document.getElementById("userstar_" +imgArrayCnt).src = imgStarLit;
  }
  for (imgArrayCnt = id + 1; imgArrayCnt < 6; imgArrayCnt++){
    document.getElementById("userstar_" + imgArrayCnt).src = imgStarUnlit;
  }
}

function lightOff() {
    for (i = 1; i < 6; i++){
      document.getElementById("userstar_" + i).src = imgStarUnlit;
    }
}

function submitRating(rating) {
  // get form elements and page info

  var section = "movie";
  var pageUrl = document.location.href;
  var pageTitle = document.title;

  var articleKey = new ArticleKey(key);

  // create and send request
  var requestBatch = new RequestBatch();
  var rateAction = new RateAction(articleKey, rating);
  section = new Section(section);
  var updateAction = new UpdateArticleAction(articleKey, pageUrl, pageTitle, section, null);
  requestBatch.AddToRequest(updateAction);
  requestBatch.AddToRequest(rateAction);
  requestBatch.BeginRequest(serverUrl, ratingSubmitted);
}

function ratingSubmitted(responseBatch) {
  if (responseBatch.Messages[0].Message == 'ok') {
    location.href = document.location.href;
  }
}


function submitRequest() {
  var articleKey = new ArticleKey(key);
  var requestBatch = new RequestBatch();
  requestBatch.AddToRequest(articleKey);
  requestBatch.BeginRequest(serverUrl, renderRating);
}

function roundToHalf(value) {
  var converted = parseFloat(value);
  var decimal = (converted - parseInt(converted, 10));
  decimal = Math.round(decimal * 10);
  if (decimal == 5) { return (parseInt(converted, 10)+0.5); }
  if ( (decimal < 3) || (decimal > 7) ) {
    return Math.round(converted);
  } else {
    return (parseInt(converted, 10)+0.5);
  }
}

function renderRating(responseBatch) {
  var hasRatings = false;
  var article;
  var divAllRatings = document.getElementById("allRatings");
  var divUserRating = document.getElementById("userRating");

  if (responseBatch.Responses.length == 0) {
    divAllRatings.innerHTML =  "<div class=\"first_rate\">Be the first to rate this " + contentType + "!</div>";
  }
  else
  {
    article = responseBatch.Responses[0].Article;

    var strRating = "" + roundToHalf(article.Ratings.AverageRating);
    strRating = strRating.indexOf(".5") > 0 ? strRating : strRating + ".0";
    divAllRatings.innerHTML =  "<div class=\"star_averages\">" +
                               "<div class=\"rating_header\">User Average</div>" +
                               "<div class=\"user-rating-img\">" +
                               "<img src=\"" + staticBaseURL + "/images/stars/rating/average/orange_" + strRating + ".gif\"/>" +
                               "</div></div>";
    hasRatings = true;

  }

  if (hasRatings && article.Ratings.CurrentUserRating > 0)
  {
    divUserRating.innerHTML = "<div class=\"rating_header\">You gave this</div>";
    divUserRating.innerHTML += "<div class=\"user-rated-img\">";
    for (i = 1;i<6;i++)
    {
      if (i <= article.Ratings.CurrentUserRating)
        divUserRating.innerHTML += "<div class=\"star\"><img src=\"" + imgStarLit + "\" id=\"userstar_" + i + "\"/></div>";
      else
        divUserRating.innerHTML += "<div class=\"star\"><img src=\"" + imgStarUnlit + "\" id=\"userstar_" + i + "\"/></div>";
    }
    divUserRating.innerHTML += "</div>";
  }
  else
  {
    divUserRating.innerHTML = "<div class=\"user-rating\">";
    divUserRating.innerHTML += "<div class=\"rating_header\">Rate this " + contentType + "</div>";
    divUserRating.innerHTML += "<div class=\"user-rating-img\">";
    for (i = 1;i<6; i++)
    {
      divUserRating.innerHTML += "<div class=\"star\"><img src=\"" + imgStarUnlit + "\" id=\"userstar_" + i + "\" onmouseover=\"lightUp(" + i + ")\" onclick=\"submitRating(" + i + ")\"/></div>";
    }
    divUserRating.innerHTML += "</div></div>";
    divUserRating.onmouseout = function() {lightOff();};
  }
}
