/*
 * Class: Poll
 * @autor: Christian Benseler
 * @created: 31/05/2007
 * @requires: prototype.js, Cookie.js (if param isToCheckCookie=true)
 * 
 */

var Poll = Class.create();

Poll.prototype = {
	/*
	 * construtor; 
	 * @param pollId
	 * 		id da enquete
	 * @param objectId
	 * 		id do objeto pai da enquete
	 * @param optionsSize
	 * 		quantidade de opções que a enquete tem
	 * @param answerNameStart
	 * 		string com a qual cada id do checkbox em que uma alternativa da enquete começa
	 * 
	 */
	//
	initialize: function(pollId, objectId, optionsSize, answerNameStart) {
		this.pollId = pollId;
		this.objectId = objectId;
		this.optionsSize = optionsSize;
		this.answerNameStart = answerNameStart;
		this.isToCheckCookie = true;
		this.hasPopup = false;
		this.voteAction = "/poll.vote.action";
		this.viewResultsAction = "/poll.viewResults.action";
		this.folder = "";
	},
	
	/*
	 * seta o contexto de onde está sendo chamado
	 */
	setRootFolder: function(folder) {
		this.folder = folder;
	},
	
	/*
	 * seta action de visualização de resultados 
	 */
	setViewResultsAction: function(viewResultsAction) {
		this.viewResultsAction = viewResultsAction;
	},
	
	/*
	 * área onde será mostrado resultado da enquete 
	 */
	setMessageArea: function(messageArea) {
		this.messageArea = messageArea;
	},
	
	/*
	 * leva em consideração de usuário já votou na enquete?
	 */
	setIsToCheckCookie: function(status) {
		this.isToCheckCookie = status;
	},
	
	/*
	 * verifica se uma opção foi selecionada
	 */
	isAnswered: function() {
		//verifica se uma opção da enquete foi selecionada
		gselect=0;
		for(i=0; i<this.optionsSize; i++)
			gselect=($(this.answerNameStart+i).checked)?gselect+1:gselect;
		if (gselect==0) 
	 		return false;
		else
			return true;
	},
	
	/*
	 * seta popup
	 */
	setPopup: function(popup, popupClose, newMessageArea) {
		this.popup = popup;
		this.popupClose = popupClose;
		this.setMessageArea(newMessageArea);
		this.hasPopup = true;
	},
	
	setLoadingMessage: function(loadingMessage) {
		this.loadingMessage = loadingMessage;
	},
	
	setLoadingMessageId: function(loadingMessageId) {
		this.loadingMessageId = loadingMessageId;
	},
	
	/*
	 * prepara  parâmetros para submeter voto e
	 * chama método que submete action de voto
	 */
	prepareSubmitAnswers: function() {
		
		//verifica se já foi votado, pelo cookie e se deve ser levado em consideração esse fato
		var ck = new Cookie();

		if(ck.getCookie("vote") == this.pollId && this.isToCheckCookie==true) {
			var url = this.folder + this.viewResultsAction;
			var pars= "id=" + this.pollId + "&viewResults=true&conteudo=" + this.objectId + "&rnd=" + Math.random()*4;
		} else {
			if(this.isToCheckCookie)
				ck.setCookie("vote", this.pollId);

			var val = 0;

			for(i=0; i<this.optionsSize; i++) {
				if($(this.answerNameStart+i).checked)
					val = $(this.answerNameStart+i).value;
			}
			var url = this.folder +this.voteAction;
			var pars= "id=" + val + "&viewResults=false&rnd=" + Math.random()*4;
		}
		//verifica se tem popup
		if(this.hasPopup) {
			var divPopup = new Popup(this.popup);
			divPopup.createCloseButton(this.popupClose);
			divPopup.createMessageArea(this.messageArea, this.popup);
			var height = null;
			
		} else {
			var height = Element.getDimensions($(this.messageArea)).height;
			if(this.loadingMessageId)
				$(this.messageArea).innerHTML = this.loadingMessage;
			$(this.messageArea).style.height = height + "px";
			var divPopup = null;
		}
		var thisPoll = this;
		utils.submitAction(url, pars, this.messageArea, divPopup, height, thisPoll);

	},
	
	/*
	 * prepara  parâmetros para visualizar dados da enquete e
	 * chama método que submete action de visualização
	 */
	prepareViewAnswers: function() {
		var url = this.viewResultsAction;
		var pars= "id=" + this.pollId + "&rnd=" + Math.random()*4;
		
		//verifica se tem popup
		if(this.hasPopup) {
			var divPopup = new Popup(this.popup);
			divPopup.createCloseButton(this.popupClose);
			divPopup.createMessageArea(this.messageArea, this.popup);
			
		} else {
			var height = Element.getDimensions($(this.messageArea)).height;
			if(this.loadingMessageId)
				$(this.messageArea).innerHTML = this.loadingMessage;
			$(this.messageArea).style.height = height + "px";
			var divPopup = null;
		}
		
		utils.submitAction(url, pars, this.messageArea, divPopup, height);
		
	}
	
}