
var RankingManager = Class.create();

RankingManager.prototype = {

	initialize: function() {
		this.rankedObjectId = null;
		this.rankedStarClassName = null;
		this.sucessMessage = "Obrigado pela sua avaliação!";
		this.previousRating = 0;
		this.rankedStarsId = "ranking";
	},

	/*
	 * seta id do objeto a ser rankeado
	 */
	setRankedObjectId: function(id) {
		this.rankedObjectId = id;
	},
	
	setRankedStarsId: function(str) {
		this.rankedStarsId = str;
	},
	
	/*
	 * seta classe CSS das estrelas selecionadas/rankeadas
	 */
	setRankedStarClassName: function(className) {
		this.rankedStarClassName = className;
	},
	
	/*
	 * faz a votação/rankeia
	 */
	rankIt: function(index) {
		var id = this.rankedObjectId;
		var x = eval(index)+1;
		for(var i=1; i<=index; i++){
			if(id)
				$(this.rankedStarsId + "_" + i).className = this.rankedStarClassName;
		}
		for(var k=x; k<=5; k++) {
			$(this.rankedStarsId + "_" + k).className = "";
		}
		thisRM = this;
		coreService.ratingPublishingObject(id, index, {
			callback:function(dataFromServer) {
		   		alert(thisRM.sucessMessage);
				thisRM.disableRank();
		  	}
		});
	},
	
	/*
	 * desabilita clique nas estrelas
	 */
	disableRank: function() {
		for(i=1; i<=5; i++) {
	    		$(this.rankedStarsId + "_" + i).onclick = function() {return false;};
	    		$(this.rankedStarsId + "_" + i).onmouseover = function() {return false;};
	    		$(this.rankedStarsId + "_" + i).onmouseout = function() {return false;};
				$(this.rankedStarsId + "_" + i).style.cursor = "default";
	   		}
	},
	
	/*
	 * seta mensagem de sucesso;
	 */
	setSucessMessage: function(msg) {
		this.sucessMessage = msg;
	},
	
	/*
	 * guarda o rating atual
	 */
	setPreviousRating: function(rating) {
		this.previousRating = rating;
	},
	
	/*
	 * carrega as estrelas
	 */
	showStars: function(rank) {
		for(var i=0; i<=4; i++){
			if(i + 0.5 <= rank)
				$(this.rankedStarsId + "_" + eval(i + 1)).className = this.rankedStarClassName;
		}
		for(var k=eval(rank)+1; k<=5; k++) {
			$(this.rankedStarsId + "_" + k).className = "";
		}
	},
	
	/*
	 * cria listeners
	 */
	listenStars: function() {
		var thisRM = this;
		for(var i=1; i<=5; i++) {
			$(this.rankedStarsId + "_" + i).onclick = function() {
				thisRM.rankIt(this.id.split("_")[1]);
				return false;
			}
			$(this.rankedStarsId + "_" + i).onmouseover = function() {
				thisRM.showStars(this.id.split("_")[1]);
				return false;
			}
			$(this.rankedStarsId + "_" + i).onmouseout = function() {
				thisRM.showStars(thisRM.previousRating);
				return false;
			}
		}
	}

}