(function() {
	var obj = document.getElementById("special_vote");	  
	var button = document.getElementById("special_vote_submit");
	if (!obj || !button) {
		return;	
	}
	
	var selectedId = -1;
	
	function selectOpt() {
		var radioButton = this.getElementsByTagName("input")[0];
		radioButton.checked = "checked";
		selectedId = radioButton.value;
	}
	
	function getXHR() {
		var xmlHTTP = false;
		try {
			xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				xmlHTTP = false;
			}
		}		
		if (!xmlHTTP && typeof XMLHttpRequest != "undefined") {
			xmlHTTP = new XMLHttpRequest();
		}		
		return xmlHTTP;
	}
	
	var opts = obj.getElementsByTagName("div");
	for (var i = 0; i < opts.length; i++) {
		if (opts[i].className == "option") {
			opts[i].onclick = selectOpt;
		}
	}
	
	var inps = obj.getElementsByTagName("input");
	for (var i = 0; i < inps.length; i++) {
		inps[i].checked = "";	
	}	
	
	function easeInOutCubic(current, start, change, duration) {
		current /= duration / 2;
		if (current < 1) {
			return change / 2 * current * current * current + start;
		} else {
			current -= 2;
			return change / 2 * (current * current * current + 2) + start;
		}
	}		
	
	function setAlpha(element, alpha) {
		element.style.opacity = alpha / 100;
		element.style.MozOpacity = alpha / 100;
		element.style.filter = "alpha(opacity=" + alpha + ")";
	}
	
	function displayVotes(votes, total) {
		var colors = [
			["#95b66b"],		  
			["#81b0cd"],		  
			["#edcd59"],		  
			["#b63a37"],		  
			["#f69a50"]	  
		];
		
		var elements = [];
		
		var index = 0;
		for (var i = 0; i < opts.length; i++) {
			if (opts[i].className == "option") {
				var color = colors[index % (colors.length - 1)];
				
				var div = document.createElement("div");
				var barOuter = document.createElement("div");
				var barInner = document.createElement("div");
				var percent = document.createElement("div");
				barOuter.appendChild(barInner);
				div.appendChild(percent);
				div.appendChild(barOuter);
				opts[i].appendChild(div);
				div.style.position = "relative";
				div.style.padding = "0px";
				div.style.margin = "-12px 0px 0px 0px";
				
				barInner.style.borderLeft = "1px solid #FFF";
				barInner.style.borderTop = "1px solid #FFF";
				barInner.style.background = color;
				barInner.style.height = "7px";
				barInner.style.padding = "0px";
				barInner.style.fontSize = "1px";
				barInner.style.width = "100px";
				barInner.style.left = "-1px";
				barInner.style.top = "-1px";				
				barInner.style.position = "absolute";
				barInner.style.width = "1px";

				barOuter.style.position = "relative";
				barOuter.style.border = "1px solid " + color;
				barOuter.style.height = "6px";
				barOuter.style.width = "190px";
				barOuter.style.float = "left";
				
				percent.style.position = "absolute";
				percent.style.fontWeight = "bold";
				percent.style.fontSize = "11px";
				percent.style.width = "30px";
				percent.style.height = "10px";
				percent.style.padding = "0px";
				percent.style.right = "35px";
				percent.style.top = "-2px";
				percent.style.textAlign = "right";
				percent.innerHTML = "0%";

				div.style.visibility = "hidden";
				
				var percentage = 0;
				if (total > 0) {
					percentage = votes[index] / total;	
				}
				index++;
				
				elements.push([div, barOuter, barInner, percent, percentage]);
			}
		}			
		
		var frame = 0;
		var maxFrames = elements.length * 15;
		var timer = window.setInterval(function() {
			for (var i = 0; i < elements.length; i++) {
				if (++frame > i * 15) {
					elements[i][0].style.visibility = "visible";
				}
			}
			if (frame >= maxFrames) {
				window.clearInterval(timer);
				
				maxFrame = 30;
				frame = 0;
				timer = window.setInterval(function() {
					for (var i = 0; i < elements.length; i++) {
						var percent = easeInOutCubic(frame, 0, elements[i][4] * 100, maxFrame);
						var width = Math.max(2, 191 * (percent / 100));
						elements[i][3].innerHTML = Math.round(percent) + "%";
						elements[i][2].style.width = Math.round(width) + "px";
					}
					if (frame++ >= maxFrame) {
						window.clearInterval(timer);	
					}
				}, 10);
			}
		}, 100);
	}
	
	button.onclick = function() {
		if (selectedId == -1) {
			alert("Bitte treffen Sie eine Wahl.");
			return false;
		}
		button.style.display = "none";
		for (var i = 0; i < opts.length; i++) {
			if (opts[i].className == "option") {
				opts[i].onclick = null;	
				opts[i].style.cursor = "default";
			}
		}		
		
		var indicator = document.getElementById("indicator");
		indicator.style.display = "inline";

		for (var i = 0; i < inps.length; i++) {
			inps[i].style.display = "none";
		}															   

		var xhr = getXHR();
		xhr.open("POST", "modules/specialvote/ajax.php");
		xhr.onreadystatechange = function() {
			if (xhr.readyState == 4) {
				indicator.style.display = "none";
				var data = xhr.responseText.split(/;/g);
				displayVotes(data.slice(0, data.length - 1), data[data.length - 1]);
			}
		}
		xhr.send(selectedId);
		
		return false;	
	};
})();
