var voteLoadURL = "/vote-frontend/vote/loadvote";
var voteResultsURL = "/vote-frontend/vote/voteresults";
function voteXmlTrim(voteXml) {
   return voteXml.replace( /^\s+|\s+$/, "" );
}
function loadVote(sitePositionId) {
	sitePos = sitePositionId;
	voteUrl = voteResultsURL;							// used on the submit button for fetching results
	if (readCookie(sitePositionId) == null) {
		var voteRequestString = makeRequestString(sitePositionId);
		makeAjaxRequest(voteLoadURL, voteRequestString, successLoad, hideVoteForm);
	} else {
		var voteRequestString = makeVoteGetterString(sitePositionId);
		makeAjaxRequest(voteResultsURL, voteRequestString, successLoadResults, hideVoteForm);
	}

}
function hideVoteForm() {
	document.getElementById('vote-body').style.display='none';
}
function successLoad() {
	var responseXml = httpRequest.responseText;
	buildVoteForm(responseXml);
}
function makeRequestString(sitePositionId) {
	return encodeURI("?voterequest=<voterequest><siteposition>" + sitePositionId + "</siteposition></voterequest>");
}
function makeVoteGetterString(sitePositionId) {
	return encodeURI("?voterequest=<voteresultsrequest><siteposition>" + sitePositionId + "</siteposition></voteresultsrequest>");
}

function buildVoteForm(voteXml) {
	var container = document.getElementById('vote-body');
	
	var xmlHandler = new XmlDom();
	xmlHandler.loadXML(voteXmlTrim(voteXml));
	
	if (xmlHandler.documentElement.getAttribute("status") == 1) {
		var voteTitle = makeNewDiv(null,null,"vote-title",null);
		container.appendChild(voteTitle);
		buildTitle(voteTitle,xmlHandler);
		
		var voteQuestion = makeNewDiv(null,null,"vote-question",null);
		container.appendChild(voteQuestion);
		buildQuestion(voteQuestion,xmlHandler);
		buildOptions(container,xmlHandler);
		
		var voteSubmit = makeNewDiv(null,null,"vote-link",null);
		container.appendChild(voteSubmit);
		buildSubmit(voteSubmit,xmlHandler);
	} else {
		hideVoteForm();
	}
}

function buildTitle(container,xmlHandler) {
   var titleNode = document.createElement("span");
   titleNode.innerHTML = xmlHandler.documentElement.selectNodes("title")[0].childNodes[0].nodeValue;
	container.appendChild(titleNode);
}
function buildQuestion(container,xmlHandler) {
   var questionNode = document.createElement("span");
   questionNode.innerHTML = xmlHandler.documentElement.selectNodes("question")[0].childNodes[0].nodeValue;
   container.appendChild(questionNode);
}
function buildOptions(container,xmlHandler) {
	var optionText = xmlHandler.documentElement.selectNodes("options/option/text");	
	var optionNumbers = xmlHandler.documentElement.selectNodes("options/option/optionnumber");	
	for (i=0; i<optionNumbers.length; i++) {
		var optionsDiv = document.createElement("div");
		optionsDiv.className = "dni-vote-options-container";
		var optionLabel = createLabel('option_'+i,optionText[i].childNodes[0].nodeValue);
		var optionInput = createInput('option_'+i,optionNumbers[i].childNodes[0].nodeValue);

		optionsDiv.appendChild(optionInput);
		optionsDiv.appendChild(optionLabel);
		container.appendChild(optionsDiv);
	}
}
function buildSubmit(container,xmlHandler) {
   var submitButtonText = xmlHandler.documentElement.selectNodes("submitbuttontext")[0].childNodes[0].nodeValue;
	var voteId = xmlHandler.documentElement.selectNodes("voteid")[0].childNodes[0].nodeValue;
	var submitElement = document.createElement('a');
	submitElement.setAttribute('href','javascript:submitVote('+ voteId  +')');
	submitElement.appendChild(document.createTextNode(submitButtonText));
	container.appendChild(submitElement);
}
function createLabel(labelFor,appendText) {
	var label1=document.createElement('label');
	label1.setAttribute('for',labelFor);
	label1.innerHTML = appendText;
	return label1;
}
function createInput(id,value) {
	var input1=ce('input','option');
	input1.setAttribute('type','radio');
	input1.setAttribute('id',id);
	input1.setAttribute('value',value);
	return input1;
}
function ce(tag,name){
    if (name && window.ActiveXObject){
      element = document.createElement('<'+tag+' name="'+name+'">');
    } else{
      element = document.createElement(tag);
      element.setAttribute('name',name);
    }
    return element;
}
function makeNewDiv(setClass, setInnerHTML, setID, setWidth) {
	var returnedDiv = document.createElement("div");
	if (setClass != null) {
		returnedDiv.className = setClass;
	}
	if (setInnerHTML != null) {
		returnedDiv.innerHTML = setInnerHTML;
	}
	if (setID != null) {
		returnedDiv.id = setID;
	}
	if (setWidth != null) {
		returnedDiv.style.width = setWidth;
	}
	return returnedDiv;
}

function submitVote(vote) {
	var optionSelected = "";
	radioOptions = document.getElementsByName("option");
	for (var i=0; i<radioOptions.length; i++)  {
		if (radioOptions[i].checked)  {
			optionSelected = radioOptions[i].value;
		}
	}
	if (optionSelected.length!=0) {
		loadResults(vote,optionSelected,voteUrl);
	}
}

function successLoadResults() {
	var responseXml = httpRequest.responseText;
	buildResultsForm(responseXml);
}

function loadResults(voteID, optionNumber, url) {
	createCookie(sitePos, "Ahhh, what an awful dream. Ones and zeroes everywhere... and I thought I saw a two.", 120);
	createCookie((sitePos + "_TO"), optionNumber, 6);
	var voteRequestString = makeVoteCastString(voteID, optionNumber);
	makeAjaxRequest(url, voteRequestString, voteCastSuccess, hideVoteForm);
}
function voteCastSuccess() {
	var responseXml = httpRequest.responseText;
	buildResultsForm(responseXml);
}
function makeVoteCastString(voteID, optionNumber) {
	return encodeURI("?voterequest=<votecast><voteid>" + voteID + "</voteid><optionnumber>" + optionNumber + "</optionnumber></votecast>");
}
function buildResultsForm(voteXml) {
	var voteContainer = document.getElementById("vote-body");
	var xh = new XmlDom();
	xh.loadXML(voteXmlTrim(voteXml));
	if (xh.documentElement.getAttribute("status") == 1) {
		voteContainer.innerHTML="";
		voteContainer.appendChild(makeDiv2("vote-title" , xh.documentElement.selectNodes("title")[0].childNodes[0].nodeValue));
		var oTS = xh.documentElement.selectNodes("options/option/text");
		var oVC = xh.documentElement.selectNodes("options/option/votescast");
		if (readCookie(sitePos + "_TO") != null) {
			var idx = (parseInt(readCookie(sitePos + "_TO")) - 1);
			if (idx < oVC.length) {
				oVC[idx].childNodes[0].nodeValue = parseInt(oVC[idx].childNodes[0].nodeValue) + 1;
			}
		}
		var tVS = 0; for (i=0; i<oVC.length; i++) {tVS += parseInt(oVC[i].childNodes[0].nodeValue);}
		var lVV = 0; var lVI = 0;
		var perA = new Array();
		var count = 0;
		for (i=0; i<oVC.length; i++) {
			var cV = parseInt(oVC[i].childNodes[0].nodeValue);
			if (tVS == 0) {
				per = 0;
			} else {
				var per = Math.round(cV/tVS * 100);
			}
			//alert("Percenage: " + per + "\nCurrent Value: " + cV + "\nTotal Value: " + tVS);
			perA.push(per);
			count += per;
			if (cV > lVV) {lVV = cV; lVI = i;}
		}
		if (count != 100) {
			perA[lVI] = (perA[lVI] + (100-count));
		}
		for (i=0; i<oTS.length; i++) {
			voteContainer.appendChild(makeDiv2("vote-result-option-title", oTS[i].childNodes[0].nodeValue));
			var barC = makeDiv2("vote-result-option-bar-container", "");
			barC.appendChild(makeDiv2("vote-result-option-bar", "&nbsp;", perA[i]));
			voteContainer.appendChild(barC);
			if (perA[i] > 0) {
				voteContainer.appendChild(makeDiv2("vote-result-option-detail", (perA[i] + "%")));
			} else {
				voteContainer.appendChild(makeDiv2("vote-result-option-detail", "0%"));
			}
		}
		voteContainer.appendChild(makeDiv2("vote-results-text", xh.documentElement.selectNodes("text")[0].childNodes[0].nodeValue));
	} else {
		hideVoteForm();
	}
}

function makeDiv2(cn, ih, wd) {
	var newDiv = document.createElement("div");
	newDiv.className = cn;
	newDiv.innerHTML = ih;
	if (wd != null) {
		newDiv.style.width = wd + "px";
	}
	return newDiv;
}

function createCookie(name,value,mins) {
	if (mins) {
		var date = new Date();
		date.setTime(date.getTime()+(mins*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

