var yourRating = 0;

/**
 * volá se při loadu stránky, zjistí, zda uživatel může hlasovat a podle toho připraví hlasovací odkazy
 **/
function onRatingStatusResult(ratingStatus) {
	if (typeof(ratingStatus) != "object") return;

	var canVote = ratingStatus.allowed;
	var postRating;
	for (var i = 1; i < ratingStatus.ratingResults.length; i++) {
		var result = ratingStatus.ratingResults[i];
		postRating = result.rating;
	}

	writeRatingStars(canVote, postRating);
}

/**
 * zavolá se po odhlasování (poté, co proběhne funkce rate(). Zpracování výsledků, zákaz dalšího hlasování
 **/
function onRatingResult(ratings){
	if (typeof(ratings) != "object") return;
	var canVote = false;
	var postRating;

	for (var i = 0; i < ratings.length; i++) {
		var rating = ratings[i];
		var postRating = rating.rating;
	}
	writeRatingStars(canVote, postRating);
	obj("rateResult").innerHTML = "Děkujeme za hlas. Tvé hodnocení je "+yourRating+", celkový průměr je "+Math.round(postRating)+".";
	obj("rateResult").style.display = "block";
}

/**
 * samotné zahlasování
 **/
function rate(rating, idBlog, idPost) {
	// započtení hlasu k článku
	yourRating = rating;
	obj(ratingContainer).innerHTML = "";
	obj(ratingContainer).style.backgroundPosition = "0px -90px";
	var contents = [{name:'blog', identifier:idBlog}, {name:'blogPost', identifier:idPost}];
	RatingService.rate(contents, rating, onRatingResult);
}


function onHitResult(ratings) {
	// not used - nepoužíváme zobrazení jakéhokoliv stavu po hitu na stránku (čtenost)
}

/**
 * hit čtenosti článku - provádí se při naloadování stránky
 **/
function hit(idBlog, idPost) {
	//započítání dalšího bodu k čtenosti článku
	var contents = [{name:'blog', identifier:idBlog}, {name:'blogPost', identifier:idPost}];
	RatingService.hit(contents, onHitResult);
}

function hitArticle(articleType, articleId) {
	//započítání dalšího bodu k čtenosti článku
	var contents = [{name:articleType, identifier:articleId}];
	RatingService.hit(contents, onHitResult);
}

/**
 * dej bod příspěvku diskuse
 **/
function givePointToPost(idTopic, idPost) {
	//započítání dalšího bodu k čtenosti článku
	var contents = [{name:'forumTopic', identifier:idTopic}, {name:'forumPost', identifier:idPost}];
	RatingService.hit(contents, onGivePointToPost);
}

/**
 * aktualizuje počet bodu příspěvku a tématu
 * @param ratings
 */
function onGivePointToPost(ratings) {
	if (typeof(ratings) != "object") return;

    for (var i = 0; i < ratings.length; i++) {
		var rating = ratings[i];
		if (rating.ratedType.name == "forumPost") {
            obj("points_" + rating.ratedType.identifier).innerHTML = "Počet bodů: " + rating.totalVotes;
        }
        if (rating.ratedType.name == "forumTopic") {
            obj("totalPoints").innerHTML = rating.totalVotes;
        }
	}
}

/**
 * zobrazí / skryje dej bod odkaz
 */
function onGivePointStatusResult(ratingStatus, idTopic, idPost) {
    if (typeof(ratingStatus) != "object") return;

	if (ratingStatus.allowed) {
        obj("points_" + idPost).innerHTML="<a href=\"javascript: givePointToPost(" + idTopic + ", " + idPost + ")\" class=\"givePoint\">Dej bod</a>";
    }
}

/**
 * zobrazí / skryje dej bod odkazy
 */
function onGivePointStatusesResult(ratingStatuses) {
  if (typeof(ratingStatuses) != "object") {
    return;
  }
  for (var i = 0; i < ratingStatuses.length; i++) {
    var ratingStatus = ratingStatuses[i];
    var result = getRatingResult(ratingStatus.ratingResults);
    if (result) {
      var innerHtml = 'Počet bodů: ' + result.votes;
      if (ratingStatus.allowed) {
        innerHtml = innerHtml + '</span><span class="sep"> | </span><a href="javascript: givePointToPost(' + result.topic + ', ' + result.post + ')" class="givePoint">Dej bod</a>';
      }
      obj("points_" + result.post).innerHTML = innerHtml;
    }
  }
}

/* custom functions */

function writeRatingStars(boolCanVote, intPostRating) {
	if (!boolCanVote) {
		// nastaveni bgr hvezdicek na aktualni stav
		var tmp = -15*Math.round(intPostRating*1);
		//alert(tmp);
		obj(ratingContainer).style.backgroundPosition = "0px "+tmp+"px";
		// nastavení popisku hvezdickam
		obj(ratingContainer).title = "Aktuální stav hodnocení: " + Math.round(intPostRating*1) + "/5";
		obj(ratingContainer).innerHTML = "";
	}
	obj(ratingContainer).style.display = "block";
}

function getRatingResult(ratingResults) {
  var topicId = '';
  var postId = '';
  var totalVotes;
  for (var i = 0; i < ratingResults.length; i++) {
    var ratedType = ratingResults[i].ratedType;
    if (ratedType.name == 'forumTopic') {
      topicId = ratedType.identifier;
    }
    if (ratedType.name == 'forumPost') {
      postId = ratedType.identifier;
      totalVotes = ratingResults[i].totalVotes;
    }
  }
  if ((topicId != '') && (postId != '')) {
    return {topic: topicId, post: postId, votes: totalVotes};
  } else {
    return false;
  }
}