function PollResults(thisname,uri,getpoll_obj,box_id,bars_img_id_prefix)
{
	this.thisname=thisname;
	this.uri=uri;
	this.getpoll_obj=getpoll_obj;
	this.box_id=box_id;
	this.bars_img_id_prefix=bars_img_id_prefix;
	
	this.bar_length=250;
	this.colors={0:'#FF4E4E',1:'#6CB1E1',2:'#FF7238',3:'#8D8D8D',4:'#6EE16C',5:'#FFD800'}
	this.percent=0;
}

PollResults.prototype.DoRequest = function()
{
	SimpleResponse(this.box_id,'<div>'+MessageLoading('Loading poll results...')+'</div>');
	LoadDoc(this,this.uri,this.ParseResponse,true);
}

PollResults.prototype.GrowBars = function()
{
	if (this.percent <= 100)
	{
		for (var i=0;i<this.bars.length;++i)
		{
			document.getElementById(this.bars_img_id_prefix+this.bars[i][0]).style.width = this.percent/100*this.bars[i][1]+'px';
		}
		
		this.percent += 5;
	}
	else
	{
		this.percent = 0;
		clearInterval(this.grower);
	}
}

PollResults.prototype.ParseResponse = function(parentObj,resultText)
{
	clearInterval(this.grower);
	
	var ar = resultText.split(DELIMITER_3);
	if (parentObj.getpoll_obj.ParseResponse(ar[0],parentObj.box_id))
	{
		var contents = '<div><b>Q.</b> '+parentObj.getpoll_obj.question+'</div>';

		var raw_votes = ar[1].split(DELIMITER_2);
		
		var total = 0;
		var votes = new Array();
		for (var i=0;i<parentObj.getpoll_obj.num_options;++i)
		{
			if (raw_votes[i] != undefined)
			{
				var vote = raw_votes[i].split(DELIMITER_1);
				votes[vote[0]-1] = parseInt(vote[1]);
				total += votes[vote[0]-1];
			}
		}
		
		parentObj.bars = new Array();
		
		var color_i = 0;
		for (var i=0;i<parentObj.getpoll_obj.num_options;++i)
		{
			if (votes[i] == undefined || isNaN(votes[i]))
			{
				contents += '<div style="padding:7px 0px 0px 18px" class="grey">'+parentObj.getpoll_obj.options[i]+' (<b>0</b>)</div>';
			}
			else
			{
				if (color_i > 5) color_i = 0;
				
				parentObj.bars.push(new Array(i,parentObj.bar_length*votes[i]/total));
				
				contents += '<div style="padding:7px 0px 0px 18px" class="grey">'+parentObj.getpoll_obj.options[i]+' (<b>'+(votes[i]==undefined||isNaN(votes[i])?'0':votes[i])+'</b>):</div>';
				contents += '<div '+(parentObj.getpoll_obj.is_public=='true'?'title=\"Click to show voters\" onclick=\"votersObj.DoRequest(\''+parentObj.getpoll_obj.pollid+':'+(i+1)+'\',\'vtrs_'+i+'\')\" ':'')+'style="'+(parentObj.getpoll_obj.is_public=='true'?'cursor:help;':'')+'width:'+parentObj.bar_length*votes[i]/total+'px;padding:0px 0px 0px 18px"><img id="'+parentObj.bars_img_id_prefix+i+'" style="width:0px;margin-top:3px;background:'+parentObj.colors[color_i]+'" src="'+IMAGE_DOMAIN+'/ico/blank.gif" height="15"></div>';
				if (parentObj.getpoll_obj.is_public=='true') contents += '<div id="vtrs_'+i+'" style="padding:2px 0px 0px 25px;display:none"></div>';
				++color_i;
			}
		}
		
		parentObj.grower = setInterval(parentObj.thisname+'.GrowBars()',40)
		
		contents += '<div style="padding:7px 0px 0px 18px">'+(isNaN(total)?0:total)+' vote'+(total!=1?'s':'')+' - <a href="'+DOMAIN+'/polls/'+parentObj.getpoll_obj.pollid+'">'+parentObj.getpoll_obj.postcount+' comment'+(parentObj.getpoll_obj.postcount!=1?'s':'')+'</a></div><br>';

		SimpleResponse(parentObj.box_id,contents);
	}
}

function GetPoll() { }

GetPoll.prototype.ParseResponse = function(resultText,box_id)
{
	if (resultText == '0')
	{
		SimpleResponse(box_id,'<div>'+MessageError('Failed to load poll - please contact an admin')+'</div>');
		return false;
	}
	else
	{
		var ar = resultText.split(DELIMITER_2);
		
		var header = ar.shift();
		header = header.split(DELIMITER_1);
		
		this.pollid = header[0];
		this.question = header[1];
		this.is_public = header[2];
		this.postcount = header[3];
		
		this.num_options = ar.length;
		
		this.choices = new Array();
		this.options = new Array();
		for (var i=0;i<this.num_options;++i)
		{
			var opt = ar[i].split(DELIMITER_1);
			this.choices.push(opt[0]);
			this.options.push(opt[1]);
		}

		return true;
	}
}

function PollShow(uri,pollresults_obj,getpoll_obj,placevote_objname,box_id)
{
	this.uri=uri;
	this.pollresults_obj=pollresults_obj;
	this.getpoll_obj=getpoll_obj;
	this.placevote_objname=placevote_objname;
	this.box_id=box_id;
}

PollShow.prototype.DoRequest = function(msg)
{
	SimpleResponse(this.box_id,'<div>'+MessageLoading(msg)+'</div>');
	LoadDoc(this,this.uri,this.ParseResponse,false);
}

PollShow.prototype.ParseResponse = function(parentObj,resultText)
{
	var ar = resultText.split(DELIMITER_3);
	
	if (ar[0] > 0)
	{
		parentObj.pollresults_obj.ParseResponse(parentObj.pollresults_obj,ar[1]+DELIMITER_3+ar[2]);
	}
	
	if (parentObj.getpoll_obj.ParseResponse(ar[1],parentObj.box_id))
	{
		if (ar[0] > 0) var contents = '<div><b>Change your vote?</b></div>';
		else var contents = '<div><b>Q.</b> '+parentObj.getpoll_obj.question+'</div>';
		
		for (var i=0;i<parentObj.getpoll_obj.num_options;++i)
		{
			contents += '<div><input onclick="'+parentObj.placevote_objname+'.DoRequest('+parentObj.getpoll_obj.pollid+','+parentObj.getpoll_obj.choices[i]+')" name="pollvote" type="radio"> '+parentObj.getpoll_obj.options[i]+'</div>';
		}
		
		if (ar[0] > 0) document.getElementById(parentObj.box_id).innerHTML += contents;
		else  document.getElementById(parentObj.box_id).innerHTML = contents;
	}
}

function PlaceVote(uri,showpoll_obj,box_id)
{
	this.uri=uri;
	this.showpoll_obj=showpoll_obj;
	this.box_id=box_id;
}

PlaceVote.prototype.DoRequest = function(pollid,choice)
{
	SimpleResponse(this.box_id,'<div>'+MessageLoading('Voting...')+'</div>');
	LoadDoc(this,this.uri+'/'+pollid+'?choice='+choice,this.ParseResponse,true);
}

PlaceVote.prototype.ParseResponse = function(parentObj,resultText)
{
	if (resultText == 1)
	{
		parentObj.showpoll_obj.DoRequest('Reloading poll...');
	}
	else
	{
		SimpleResponse(parentObj.box_id,'<div>'+MessageError('Failed to place vote - please contact an admin')+'</div>');
	}
}