var sp_poll = function(objRef, maxDisplayWidth, pollFormDivID, pollResultsDivID, pollID) {
	this.pollID = pollID;
	this.title = '';
	this.question = '';
	this.questionID = '';
	this.answers = new Array();
	this.optionID = '';
	this.totalVotes = 0;
	this.results = new Array();
	this.maxDisplayWidth = maxDisplayWidth;
	this.objRef = objRef;
	this.pollFormDivID = pollFormDivID;
	this.pollResultsDivID = pollResultsDivID;
	
	this.loadPollForm();
}

/*
var sp_poll_result = function(answer, votes, objPoll) {
	this.answer = answer;
	this.votes = votes;
	this.percentage = objPoll.calculatePercentage(objPoll.totalVotes, votes);
}
*/

sp_poll.prototype.loadPollForm = function() {
	// use REST API to get poll info
	// send this.pollID to an ajax command
	$.ajax({
        type: "POST",
    	url: "/polls/listPoll",
    	data: "pollID=" + this.pollID + "&pollRef=" + this.objRef,
		success: function(msg){
			var msgParts = msg.split('&');
			var successParts = msgParts[0].splitFirst('=');
			var pollRefParts = msgParts[1].splitFirst('=');
			var objRef = eval(pollRefParts[1]);
			
			if (successParts[0] == 'success' && successParts[1] == '1')
			{
	    		pollTitle = msgParts[2].splitFirst('=')[1];
				objRef.setTitle(unescape(pollTitle));

	    		pollQuestionID = msgParts[3].splitFirst('=')[1];
				objRef.setQuestionID(unescape(pollQuestionID));
				
	    		pollQuestion = msgParts[4].splitFirst('=')[1];
				objRef.setQuestion(unescape(pollQuestion));
				
	    		var i,j;
		    	for(i=5,j=6;i<msgParts.length-1;i++,j++)
	    		{
	        		optionID = msgParts[i].splitFirst('=');
	        		optionAnswer = msgParts[j].splitFirst('=');
	        		objRef.setAnswer(unescape(optionID[1]),unescape(optionAnswer[1]));
	        		i++;j++;
	    		}
			}
			else
			{
				objRef.setTitle('Error');
				objRef.setQuestion('Error');
			}
			objRef.displayPoll('FORM');
		}
	});
}

sp_poll.prototype.setTitle = function(title) 
{
	this.title = title; 
}

sp_poll.prototype.setQuestion = function(question) 
{
	this.question = question; 
}

sp_poll.prototype.setQuestionID = function(questionID)
{
	this.questionID = questionID; 
}

sp_poll.prototype.setAnswer = function(id,answer) 
{
	this.answers.push({id:id,answer:answer});
}

sp_poll.prototype.setOptionID = function(optionID)
{
	this.optionID = optionID;
}

sp_poll.prototype.setResult = function(answer, votes)
{  
	var percentage = 0;
	percentage = this.calculatePercentage(this.totalVotes, votes);
	this.results.push({answer:answer,votes:votes,percentage:percentage});
}  

sp_poll.prototype.setTotalVotes = function(totalVotes) 
{  
	this.totalVotes = totalVotes; 
}

sp_poll.prototype.savePollResponse = function() {
	// use REST API to get poll info

	$.ajax({
        type: "POST",
    	url: "/polls/savePollResponse",
    	data: "pollID=" + this.pollID + "&pollRef=" + this.objRef + "&pollQuestionID=" + this.questionID + "&pollOptionID=" + this.optionID,
		success: function(msg){
			var msgParts = msg.split('&');
			var successParts = msgParts[0].splitFirst('=');
			var pollRefParts = msgParts[1].splitFirst('=');
			var objRef = eval(pollRefParts[1]);
			//var result; 
			if (successParts[0] == 'success' && successParts[1] == '1')
			{
	    		//get the results data and parse it
	    		
	    		var totalVotes = 0;
	    		
	    		totalVotes = msgParts[2].splitFirst('=')[1];
				objRef.setTotalVotes(unescape(totalVotes));
	    		
	    		var i,j;
		    	for(i=3,j=4;i<msgParts.length-1;i++,j++)
	    		{
	        		optionName = msgParts[i].splitFirst('=');
	        		voteCount = msgParts[j].splitFirst('=');
					objRef.setResult(unescape(optionName[1]), unescape(voteCount[1]), objRef);
					totalVotes += parseInt(unescape(voteCount[1]));
	        		i++;j++;
	    		}
				$('div#' + objRef.pollFormDivID + ' div.sp_body').fadeOut("slow", function() {
					$('div#' + objRef.pollFormDivID + ' div.progress').html('<p><img src="' + sn_img_base_url + '/ajax_busy.gif" /> please wait...</p>');
					$('div#' + objRef.pollFormDivID + ' div.progress').fadeOut("slow", function() {
						objRef.displayPoll('RESULTS');
						$('div#' + objRef.pollResultsDivID).fadeIn("slow");
					});
				});
			}
			else
			{
				var messageParts = msgParts[2].splitFirst('=');
				sendAlert(unescape(messageParts[1]), 'bad', 300000);
				sn_ajax_callback_login_form(msgParts);
			}
		}
	});
}

sp_poll.prototype.loadPollResults = function() {
	// use REST API to get poll info

	$.ajax({
        type: "POST",
    	url: "/polls/listPollResults",
    	data: "pollID=" + this.pollID + "&pollRef=" + this.objRef,
		success: function(msg){
			var msgParts = msg.split('&');
			var successParts = msgParts[0].splitFirst('=');
			var pollRefParts = msgParts[1].splitFirst('=');
			var objRef = eval(pollRefParts[1]);
			//var result; 
			if (successParts[0] == 'success' && successParts[1] == '1')
			{
	    		//get the results data and parse it
	    		
	    		var totalVotes = 0;
	    		
	    		totalVotes = msgParts[2].splitFirst('=')[1];
				objRef.setTotalVotes(unescape(totalVotes));
	    		
	    		var i,j;
		    	for(i=3,j=4;i<msgParts.length-1;i++,j++)
	    		{
	        		optionName = msgParts[i].splitFirst('=');
	        		voteCount = msgParts[j].splitFirst('=');
					objRef.setResult(unescape(optionName[1]), unescape(voteCount[1]), objRef);
					totalVotes += parseInt(unescape(voteCount[1]));
	        		i++;j++;
	    		}
				$('div#' + objRef.pollFormDivID + ' div.sp_body').fadeOut("slow", function() {
					$('div#' + objRef.pollFormDivID + ' div.progress').html('<p><img src="' + sn_img_base_url + '/ajax_busy.gif" /> please wait...</p>');
					$('div#' + objRef.pollFormDivID + ' div.progress').fadeOut("slow", function() {
						objRef.displayPoll('RESULTS');
						$('div#' + objRef.pollResultsDivID).fadeIn("slow");
					});
				});
			}
			else
			{
				var messageParts = msgParts[2].splitFirst('=');
				sendAlert(unescape(messageParts[1]), 'bad', 300000);
				sn_ajax_callback_login_form(msgParts);
			}
		}
	});
}

sp_poll.prototype.calculatePercentage = function(totalVotes, answerVotes) {
	return Math.round((answerVotes / totalVotes) * 100);
}

sp_poll.prototype.calculateWidth = function(percentage) {
	return (this.maxDisplayWidth / 100) * percentage;
}

sp_poll.prototype.displayPoll = function(displayType) {
	if (displayType == 'FORM')
	{
		var c = document.getElementById(this.pollFormDivID);
		
		// poll title
		/*var divHead = document.createElement("div");
		divHead.className = "sp_head";
		var titleText = document.createTextNode(this.title);
		divHead.appendChild(titleText);
		c.appendChild(divHead);
		
		var divBody = document.createElement("div");
		divBody.className = "sp_body";
		
		// poll question
		var p = document.createElement("p");
		p.className = "sp_question";
		var questionText = document.createTextNode(this.question);
		p.appendChild(questionText);
		divBody.appendChild(p);
		
		var ul = document.createElement("ul");
		ul.className = "sp_answers";
		
		for (var i=0 ; i<this.answers.length ; i++)
		{
			var li = document.createElement("li");
			
			var input = document.createElement("input");
			input.value = this.answers[i];
			input.type = "radio";
			input.name = "sp_pollAnswer";
			li.appendChild(input);
			
			var answerText = document.createTextNode(this.answers[i]);
			li.appendChild(answerText);
			ul.appendChild(li);
		}
		
		divBody.appendChild(ul);
		
		var input = document.createElement("input");
		input.value = "Vote";
		input.type = "button";
		input.id = "btnVote";
		divBody.appendChild(input);
		
		c.appendChild(divBody);
		
		var divFoot = document.createElement("div");
		divFoot.className = "sp_foot";
		c.appendChild(divFoot);*/
		
		var htmlOutput = '';
		htmlOutput += '<div class="pollHolder">';
		htmlOutput += '<div class="sp_head"><p>' + this.question + '</p>';
		htmlOutput += '<div class="progress"></div>';
		htmlOutput += '</div>';
		htmlOutput += '<div class="sp_body">';
		htmlOutput += '<form name="form_' + this.objRef + '">';
		htmlOutput += '<ul class="sp_answers">';
		
		for (var i=0 ; i<this.answers.length ; i++)
		{
			htmlOutput += '<li><input type="radio" value="' + this.answers[i].id + '" name="sp_pollAnswer_' + this.objRef + '" /> ' + this.answers[i].answer + ' </li>';
		}
		
		htmlOutput += '</ul>';
		htmlOutput += '<input id="btnVote_' + this.objRef + '" type="button" value="Vote" onclick="return pollVote(\'' + this.objRef + '\')" />';
		htmlOutput += '  <input id="btnResults_' + this.objRef + '" type="button" value="Results" onclick="return pollResults(\'' + this.objRef + '\')" />';
		htmlOutput += '</form>';
		htmlOutput += '</div>';
		htmlOutput += '<div class="sp_foot"/>';
		htmlOutput += '</div>';
		
		c.innerHTML = htmlOutput;
		
		this.displayed = true;
	}
	else if (displayType == 'RESULTS')
	{
		var c = document.getElementById(this.pollResultsDivID);
		
		var votesWord = 'votes';
		if (this.totalVotes == 1)
		{
			votesWord = 'vote';
		}
		
		var divTotalVotes = document.createElement("div");
		divTotalVotes.className = "totalVotes";
		var pTotalVotes = document.createElement("p");
		
		var totalVotesText = document.createTextNode(this.totalVotes + " total " + votesWord);
		pTotalVotes.appendChild(totalVotesText);
		divTotalVotes.appendChild(pTotalVotes);
		c.appendChild(divTotalVotes);
		
		var divUlWrapper = document.createElement("div");
		divUlWrapper.className = "ulWrapper";
		divUlWrapper.style.width = this.maxDisplayWidth + "px";
		
		var ulResults = document.createElement("ul");
		ulResults.className = "results";
			
			for (var i=0 ; i<this.results.length ; i++)
			{
				votesWord = 'votes';
				if (this.results[i].votes == 1)
				{
					votesWord = 'vote';
				}
				
				var liResults = document.createElement("li");
				liResults.className = "answer";
				liResults.title = "test";
				
					var divBarAnswer = document.createElement("div");
					divBarAnswer.className = "barAnswer";
					var barAnswerText = document.createTextNode(this.results[i].answer);
					divBarAnswer.appendChild(barAnswerText);
					
					var divBar = document.createElement("div");
					divBar.className = "bar one";
					var imgBar = document.createElement("img");
					imgBar.src = "/themes/mamma-mia/images/blank.gif";
					imgBar.width = this.calculateWidth(this.results[i].percentage);
					imgBar.height = "5";
					imgBar.alt = "answer bar";
					divBar.appendChild(imgBar);
					
					var divBarVotes = document.createElement("div");
					divBarVotes.className = "barVotes";
					var barVotesText = document.createTextNode(this.results[i].votes + " " + votesWord);
					divBarVotes.appendChild(barVotesText);
					
					var divBarPercent = document.createElement("div");
					divBarPercent.className = "barPercent";
					var spanBarPercent = document.createElement("span");
					spanBarPercent.className = "separator";
					var spanSeparatorText = document.createTextNode("/");
					spanBarPercent.appendChild(spanSeparatorText);
					divBarPercent.appendChild(spanBarPercent);
					var barPercentText = document.createTextNode(this.results[i].percentage + "%");
					divBarPercent.appendChild(barPercentText);
					
					liResults.appendChild(divBarAnswer);
					liResults.appendChild(divBar);
					liResults.appendChild(divBarVotes);
					liResults.appendChild(divBarPercent);
					
				ulResults.appendChild(liResults);
			}
		
		divUlWrapper.appendChild(ulResults);
		var divClear = document.createElement("div");
		divClear.className = "clear";
		divUlWrapper.appendChild(divClear);
		
		c.appendChild(divUlWrapper);
		
		var divClear = document.createElement("div");
		divClear.className = "clear";
		c.appendChild(divClear);
	}
}

function pollVote(objRef) {
	// use REST API to vote
	
	var objPoll = eval(objRef);
	var objForm = eval("document.form_" + objRef);
	var radioButtons = eval("objForm.sp_pollAnswer_" + objRef);
	
	var answerChosen = false;
	
	for (var i=0 ; i<radioButtons.length ; i++) {
		if (radioButtons[i].checked)
		{
			answerChosen = true;
			objPoll.setOptionID(radioButtons[i].value);
		}
	}
	
	if (!answerChosen)
	{
		alert('Please make your selection before you vote.');
		return;
	}
	
	objPoll.savePollResponse();
}

function pollResults(objRef) {
	// use REST API to vote
	
	var objPoll = eval(objRef);
	//var objForm = eval("document.form_" + objRef);
	
	objPoll.loadPollResults();
}