window.quickpollBehavior = new function() {
	tilt.attachEvent(document, "contentreceived", function() {
		var oPoll = first(getElements(document, "div", "quickpoll"));
		if (oPoll) {
			/* get how many choices are allowed */
			var oNumChoices = first(getElements(oPoll, "div", "num-choices"));
			var bolNumChoices = false;
			if (oNumChoices) {
				bolOneChoice = (oNumChoices.innerHTML.indexOf("one") == 0);
			}
			/* get the status of the poll -- open or closed */
			var oStatus = first(getElements(oPoll, "div", "status"));
			var bolPollOpen = true;
			if (oStatus) {
				bolPollOpen = (oStatus.innerHTML.indexOf("open") == 0);
			}
			/* get the poll id */
			var strPollId = "UNKNOWN";
			var oManageLink = null;
			var oH3 = first(oPoll.getElementsByTagName("h3"));
			if (oH3) {
				var oPubLink = first(oH3.getElementsByTagName("a"));
				var oArticleLink = first(getElements(oPoll, "a", "title"));
				if (oPubLink && oArticleLink) {
					addManagementLinks(oPoll, oPubLink, oArticleLink, bolPollOpen);
					strPollId = oArticleLink.href;
				}
				oH3.innerHTML = oPubLink.innerHTML;
			}
			if (bolPollOpen) {
				var oList = first(oPoll.getElementsByTagName("ol"));
				if (oList) {
					var oChoices = document.createElement("div");
					oChoices.className = "l-poll-choices";
					var oForm = oChoices.appendChild(document.createElement("form"));
					oForm.id = "quickpoll";
					var oDiv, oLabel, oInput;
					var intX = 1;
					foreach(map(oList.getElementsByTagName("li")), function(oLi) {
						oDiv = oForm.appendChild(document.createElement("div"));
						oDiv.className = "l-choice";
						if (bolOneChoice) {
							oInput = oDiv.appendChild(createRadioButton("choice" + intX++, oLi.innerHTML, "choices"));
						} else {
							oInput = oDiv.appendChild(createCheckBox("choice" + intX++, oLi.innerHTML, "choices"));
						}
						oLabel = oDiv.appendChild(document.createElement("label"));
						oLabel.htmlFor = "choice" + intX;
						oLabel.innerHTML += oLi.innerHTML;
					});
					oList.parentNode.replaceChild(oChoices, oList);
					oBody = first(getElements(oPoll, "div", "body"));
					if (oBody) {
						oBody.className = "l-poll";
					}
					var oVote = oPoll.appendChild(document.createElement("button"));
					oVote.setAttribute("poll", strPollId);
					oVote.className = "l-vote";
					oVote.innerHTML = "VOTE";
					if (bolOneChoice) {
						tilt.attachEvent(oVote, "click", getRadioVote);
					} else {
						tilt.attachEvent(oVote, "click", getCheckVote);
					}
				}
			} else {
				quickpollBehavior.getResults(oPoll, strPollId);
			}
		}
		function getRadioVote(oElm) {
			var strPoll = oElm.getAttribute("poll");
			var strChoice = getCheckedValue(document.forms['quickpoll'].elements['choices']);
			if (strChoice && strChoice != "") {
				var arrChoices = [];
				arrChoices.push(strChoice);
				storeVote(oElm.parentNode, arrChoices, strPoll);
			}
			function getCheckedValue(oRadioSet) {
				var strReturn = "";
				if(oRadioSet) {
					var intRadioLength = oRadioSet.length;
					if(intRadioLength == undefined) {
						if(oRadioSet.checked) {
							strReturn = oRadioSet.value;
						}
					} else {
						for(var i = 0; i < intRadioLength && strReturn == ""; i++) {
							if(oRadioSet[i].checked) {
								strReturn = oRadioSet[i].value;
							}
						}
					}
				}
				return strReturn;
			}
		}
		function getCheckVote(oElm) {
			var strPoll = oElm.getAttribute("poll");
			var arrChoices = getCheckedValue(document.forms['quickpoll'].elements['choices']);
			if (arrChoices.length > 0) {
				storeVote(oElm.parentNode, arrChoices, strPoll);
			}
			function getCheckedValue(oCheckboxSet) {
				var arrReturn = [];
				if(oCheckboxSet) {
					var intRadioLength = oCheckboxSet.length;
					if(intRadioLength == undefined) {
						if(oCheckboxSet.checked) {
							arrReturn.push(oCheckboxSet.value);
						}
					} else {
						for(var i = 0; i < intRadioLength; i++) {
							if(oCheckboxSet[i].checked) {
								arrReturn.push(oCheckboxSet[i].value);
							}
						}
					}
				}
				return arrReturn;
			}
		}
		function addManagementLinks(oPoll, oA, oArticleLink, bolPollOpen) {
			var oParent = oA.parentNode;
			var oAuthenticated = first(getElements(document, "a", "admin"));
			if (oAuthenticated) {
				var oDiv = document.createElement("div");
				oDiv.className = "navigation";
				var oUl = oDiv.appendChild(document.createElement("ul"));
				var oLi = oUl.appendChild(document.createElement("li"));
				oLi.className = "l-first";
				var oManageLink = oLi.appendChild(oA.cloneNode(true));
				oManageLink.innerHTML = "Manage";
				oManageLink.className = "l-manage";
				if (bolPollOpen) {
					oLi = oUl.appendChild(document.createElement("li"));
					var oViewResults = oLi.appendChild(document.createElement("a"));
					oViewResults.className = "l-view-results";
					oViewResults.innerHTML = "View Results";
					oViewResults.href = oArticleLink.href;
				}
				//tilt.attachEvent(oViewResults, "click", goGetResults);
				var oArticles = first(getElements(oPoll, "ul", "articles"));
				if (oArticles) {
					oArticles.parentNode.insertBefore(oDiv, oArticles);
				}
			}
		}
		function goGetResults(oElm) {
			var oPoll = oElm.parentNode.parentNode.parentNode.parentNode;
			var strPoll = oElm.href;
			quickpollBehavior.getResults(oPoll, strPoll);
		}
		function createRadioButton(strId, strVal, strName) {
			var oButton;
			try {
				oButton = document.createElement('<input type="radio" name="' + strName + '"  value="'+ strVal + '">');
			} catch(err) {
				oButton = document.createElement("input");
			}
			oButton.id = strId;
			oButton.setAttribute("Type", "radio");
			oButton.setAttribute("Name", strName);
			oButton.setAttribute("Value", strVal);
			return oButton;
		}
		function createCheckBox(strId, strVal, strName) {
			var oButton;
			try {
				oButton = document.createElement('<input type="checkbox" name="' + strName + '"  value="'+ strVal + '">');
			} catch(err) {
				oButton = document.createElement("input");
			}
			oButton.id = strId;
			oButton.setAttribute("Type", "checkbox");
			oButton.setAttribute("Name", strName);
			oButton.setAttribute("Value", strVal);
			return oButton;
		}
		function storeVote(oPoll, arrChoices, strPoll) {
			var strChoices = "";
			var intLength = arrChoices.length;
			for(var intX=0;intX < intLength; intX++) {
				if (strChoices == "") {
					strChoices = arrChoices[intX];
				} else {
					strChoices = strChoices + "|" + arrChoices[intX];
				}
			}
			var strStoreVote = '/server/quickpoll.aspx?cmd=vote&poll=' + strPoll + '&choice=' + strChoices;
			var oXhr = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : null;
			if (oXhr) {
				oXhr.onreadystatechange = function() {
					if (oXhr.readyState == 4 && oXhr.status == 200) {
						quickpollBehavior.showResults(quickpollBehavior.getWrapper(oPoll), oXhr.responseText);
						quickpollBehavior.adjustPoll(oPoll);
					}
				}	
				oXhr.open("GET", strStoreVote, true);
				oXhr.send(null);
			}
		}
	});
		this.getWrapper	= function(oPoll) {
			var oWrapper = first(getElements(oPoll, "div", "l-poll-choices"));
			if (!oWrapper) {
				oWrapper = first(oPoll.getElementsByTagName("ol"));
				if (oWrapper) {
					var oChoices = document.createElement("div");
					oChoices.className = "l-poll-choices";
					oWrapper.parentNode.replaceChild(oChoices, oWrapper);
					oWrapper = oChoices;
				}
			}
			return oWrapper;
		}
		this.getResults = function(oPoll, strPoll) {
			var strGetResults = '/server/quickpoll.aspx?cmd=get&poll=' + strPoll;
			var oXhr = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : null;
			if (oXhr) {
				oXhr.onreadystatechange = function() {
					if (oXhr.readyState == 4 && oXhr.status == 200) {
						quickpollBehavior.showResults(quickpollBehavior.getWrapper(oPoll), oXhr.responseText);
						quickpollBehavior.adjustPoll(oPoll);
					}
				}	
				oXhr.open("GET", strGetResults, true);
				oXhr.send(null);
			}
		}
		this.showResults = function(oWrapper, strRawResults) {
			if (oWrapper) {
				oWrapper.innerHTML = "";
				var arrResults = strRawResults.split("|");
				var arrLength = arrResults.length;
				var intTotal = arrResults[arrLength-1];
				var oResult, oBar, oPercent, oChoice;
				var oTotal, oTotalLeft, oTotalRight, oTotalBottom;
				for (var intX = 0; intX < (arrLength-2); intX=intX+2) {
					strPercent = Math.round((arrResults[intX+1]/intTotal)*100) + "%";
					oResult = oWrapper.appendChild(document.createElement("div"));
					oResult.className = "l-result";
					oChoice = oResult.appendChild(document.createElement("div"));
					oChoice.className = "l-choice";
					oChoice.innerHTML = arrResults[intX]+ "  " + strPercent ;
					oBar = oResult.appendChild(document.createElement("div"));
					oBar.className = "l-bar";
					oPercent = oBar.appendChild(document.createElement("div"));
					oPercent.className = "l-percent";
					oPercent.style.width = strPercent;
					oBar.innerHTML += arrResults[intX+1];
				}
				oTotal = oWrapper.appendChild(document.createElement("div"));
				oTotal.className = "l-totals";
				oTotalLeft = oTotal.appendChild(document.createElement("div"));
				oTotalLeft.className = "l-total-left";
				oTotalLeft.innerHTML = "TOTAL VOTES";
				oTotalRight = oTotal.appendChild(document.createElement("div"));
				oTotalRight.className = "l-total-right";
				oTotalBottom = oTotal.appendChild(document.createElement("div"));
				oTotalBottom.className = "l-total-bottom";
				oTotalRight.innerHTML += intTotal;
			}
		}
		this.adjustPoll = function(oPoll) {
			oPoll.className += " l-results";
			oBody = first(getElements(oPoll, "div", "body"));
			if (oBody) {
				oBody.className = "l-poll";
			}
			var oVr = first(getElements(oPoll, "a", "l-view-results"));
			if (oVr) {
				oVr.parentNode.parentNode.removeChild(oVr.parentNode);
			}			
		}
	function getElements(oElm, strTagName, strClassName) {
		var oElement;
		var arrReturnElements = [ ];
		if (oElm) {
			var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : oElm.getElementsByTagName(strTagName);
			for(var i=0;i<arrElements.length;i++) {
				oElement = arrElements[i];
				var bolFound = false;
				if (oElement.className) {
					var oClasses = oElement.className.split(" ");
					var intXX = 0;
					while (!bolFound && (intXX < oClasses.length)) {
						if (oClasses[intXX] == strClassName) {
							bolFound = true;
						} else {
							++intXX;
						}
					}
					if (!bolFound) {
						if (strClassName == "*") {
							bolFound = true;
						}
					}
				} else {
					if (strClassName == "*") {
						bolFound = true;
					}
				}
				if (bolFound) {
					arrReturnElements.push(oElement);
				}
			}
		}
		return (arrReturnElements)
	}
}