var MSG_UNKNOWN_ERROR = 'Unbekannter Fehler - bitte versuchen Sie es später erneut.';
var pollVotes;
var totalVotes;
var txt_totalVotes = 'Stimmen: ';
var pollScrollSpeed = 5;	// Lower = faster
var has_results = false;
var has_voted = false

function submitVoting(url, voteId, voteObj) {
	if (Poller_Get_Cookie('vote' + voteId) == '1'){
		has_voted = true
		getVotingResult(url, voteId);
		return null;
	}
	var elements = ele(voteObj).elements['vote'];
	var optionId = false;
	for(var no=0;no<elements.length;no++){
		if(elements[no].checked)
			optionId = elements[no].value;
	}
	Poller_Set_Cookie('vote'+ voteId, 1 ,0.5);
	if(optionId){
		var doc = getXmlDocument();
		var root = appendElement(doc, doc, "vote");
		appendElement(doc, root, "voteid", voteId);
		appendElement(doc, root, "user_voting", optionId);
		prepareForPollResults();
		sendAjaxRequest(url + "?frame=vote", handleVotingResponse, doc, 'text/xml; charset="utf-8"');
	}
}

function showVoting() {
	ele('poller_results').style.display='none';
	ele('poller_question').style.display='block';
}

function showResult() {
	ele('poller_question').style.display='none';
	ele('poller_results').style.display='block';
	slideVotes(0);
}

function getVotingResult(url, voteId) {
	if (has_results){
		showResult();
		return null;
	}
	var doc = getXmlDocument();
	var root = appendElement(doc, doc, "vote");
	appendElement(doc, root, "voteid", voteId);
	appendElement(doc, root, "user_voting", "0");
	prepareForPollResults();
	has_results = true;
	sendAjaxRequest(url + "?frame=vote", handleVotingResponse, doc, 'text/xml; charset="utf-8"');
}

function prepareForPollResults()
{
	ele('poller_waitMessage').style.display='block';
	ele('poller_question').style.display='none';
}

function handleVotingResponse(req, success, url, odata)
{
	ele('poller_waitMessage').style.display='none';

	var errObj;
	errObj = ele('voting_error');
	
	if (!success || !req.responseXML) {
		errObj.innerHTML = MSG_UNKNOWN_ERROR;
		errObj.style.display = 'inline';
		resultDiv.style.display = 'block';
	} else {
		var root = req.responseXML.documentElement; 
		// error reply
		if (root.tagName == 'error') {
			var msg = getElementValue(root, 'errormessage');
			errObj.innerHTML = msg;
			errObj.style.display = 'inline';
			ele('poller_results').style.display = 'block';
		} else {
			var userVoting = getElementValue(root, 'user_voting');
			var resultDiv = ele('poller_results');
			
			//Elemente löschen
			var cntNodes = resultDiv.childNodes.length;
			for(var i=0;i<cntNodes-1;i++){
				resultDiv.removeChild(resultDiv.lastChild);
			}
			
			//Titel
			var pollerTitle = getElementValue(root, 'vote_title');
				
			var titleP = document.createElement('P');
			titleP.className='result_pollerTitle';
			titleP.innerHTML = '<strong>' + pollerTitle + '</strong>';
			resultDiv.appendChild(titleP);
			
			//Antworten
			var pollercnt = getElementValue(root, 'cnt');
			pollVotes = new Array();
			totalVotes = 0;
			
			for(var no=1;no<=pollercnt;no++){
				var pOption = document.createElement('P');
				pOption.innerHTML = getElementValue(root, 'answer'+no); //Nimmt IE so nicht + '<div class="poller_ResultBar"><div id="poller_ResultInnerBar'+no+'" class="poller_ResultInnerBar" style="width:0%;">0%</div></div>';

				var childRB = document.createElement('DIV');
				childRB.className='poller_ResultBar';

				var childRIB = document.createElement('DIV');
				childRIB.className = 'poller_ResultInnerBar';
				childRIB.id = 'poller_ResultInnerBar'+no;
				childRIB.style.width = '0%';
				childRIB.innerHTML='0%';

				childRB.appendChild(childRIB);
				pOption.appendChild(childRB);
				resultDiv.appendChild(pOption);
				
				pollVotes[no] = getElementValue(root, 'stimmen' + no);
				totalVotes = totalVotes/1 + pollVotes[no]/1;
			}
			ele('poller_waitMessage').innerHTML=totalVotes;
			//AnzahlVotes
			var totalVoteP = document.createElement('P');
			totalVoteP.className = 'result_totalVotes';
			totalVoteP.innerHTML = txt_totalVotes + totalVotes +'&nbsp;<a href="#" onclick="showVoting();return false;">Umfrage</a>'
			resultDiv.appendChild(totalVoteP);
			
			//Schon gevoted
			/*if (has_voted){
				var hasVoteP = document.createElement('P');
				hasVoteP.className = 'result_totalVotes';
				hasVoteP.innerHTML = 'Nur eine Stimme pro Tag.'
				resultDiv.appendChild(hasVoteP);
			}*/
	
			resultDiv.style.display = 'block';
			setPercentageVotes();
			if (navigator.appName == 'Microsoft Internet Explorer') {
				/*var fuckIE = document.createElement('P');
				fuckIE.innerHTML = 'Verwenden Sie lieber einen <em>richtigen</em> Browser, der Internet Explorer steckt voller Fehler!';
				resultDiv.appendChild(fuckIE);*/
				iefixVotes(100);
			} else {
				slideVotes(0);
			}
		}
	}
}

function setPercentageVotes()
{
	var prop;
	for(prop in pollVotes){
		pollVotes[prop] =  Math.round( (pollVotes[prop] / totalVotes) * 100);
	}	
	
	/*var currentSum = 0;
	for(prop in pollVotes){
		currentSum = currentSum + pollVotes[prop]/1;
	}
	pollVotes[prop] = pollVotes[prop] + (100-currentSum); //Auf 100% in Summe
	*/
}

function slideVotes(currentPercent)
{
	currentPercent = currentPercent/1 + 1;
	
	for(var prop in pollVotes){
		
		if(pollVotes[prop]>=currentPercent){
			var obj = ele('poller_ResultInnerBar' + prop);
			obj.innerHTML = currentPercent + '%';
			obj.style.width = Math.round(currentPercent) + '%';
		}
	}
	
	if(currentPercent<100)setTimeout('slideVotes("' + currentPercent + '")',pollScrollSpeed);
}

function iefixVotes(currentPercent)
{
	for(var prop in pollVotes) {
		var obj = ele('poller_ResultInnerBar' + prop);
		obj.innerText = pollVotes[prop] + '%';
		obj.style.width = Math.round(pollVotes[prop]) + '%';
	}
}

/*
These cookie functions are downloaded from
http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
*/
function Poller_Get_Cookie(name) {
   var start = document.cookie.indexOf(name+"=");
   var len = start+name.length+1;
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
   if (start == -1) return null;
   var end = document.cookie.indexOf(";",len);
   if (end == -1) end = document.cookie.length;
   return unescape(document.cookie.substring(len,end));
}

//expires - in Tagen
function Poller_Set_Cookie(name,value,expires) {
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
    var cookieString = name + "=" +escape(value) +
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "");
    document.cookie = cookieString;
}
