new Image().src = "styles/default/ad_selected.png";

function toggle_map(update_id, small_bg_position, large_bg_position) {
	var map = document.getElementById("map_" + update_id);
	var clip = document.getElementById("clip_" + update_id);
	var geo = document.getElementById("geo_" + update_id);
	
	if (map.getAttribute("class") == "map") {
		map.setAttribute("class", "map map_selected");
		clip.setAttribute("class", "clip clip_selected");
		geo.setAttribute("class", "geo geo_selected");
		
		map.style.backgroundPosition = large_bg_position;
	} else {
		map.setAttribute("class", "map");
		clip.setAttribute("class", "clip");
		geo.setAttribute("class", "geo");
		
		map.style.backgroundPosition = small_bg_position;
	}
}

function makeRequest() {
	if (window.XMLHttpRequest && !(window.ActiveXObject)) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}
	} else if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				req = false;
			}
		}
	}
	
	return req;
}

function pad(num) {
	if (num < 10) {
		return "0" + "" + num;
	} else {
		return num;
	}
}

function nl2br(text){
	re_nlchar = "\n";
	return text.replace(re_nlchar,'<br />');
}

function check() {
	req = makeRequest();
	
	if (req) {
		req.onreadystatechange = status_downloaded;
		req.open("GET", "ajax.php?r=" + Math.random(), true);
		req.send("");
	}
}

function status_downloaded() {
	if (req.readyState == 4) {
		if (req.status == 200) {
			var new_updates = eval("(" + req.responseText + ")");
			
			for (var n_id in new_updates['updates']) {
				var found = false;
				for (var o_id in event_updates['updates']) {
					if (o_id == n_id) {
						if (new_updates['updates'][n_id]['edits'] > event_updates['updates'][o_id]['edits']) {
							var parent = document.getElementById("update_" + o_id);
							parent.innerHTML = "";
							
							create_update(parent, new_updates['updates'][n_id], n_id);
						} else if (new_updates['updates'][n_id]['media_type'] == 4) {
							update_poll(new_updates['updates'][n_id]['poll']);
						}
						
						found = true;
						
						continue;
					}
				}
				
				if (found == false) {
					var newElement = document.createElement("div");
					newElement.setAttribute("class", "update new_update");
					newElement.setAttribute("id", "update_" + n_id);
					
					create_update(newElement, new_updates['updates'][n_id], n_id);
					
					if (new_updates['updates'][n_id]['media_type'] == 1) {
						var img = new Image();
						img.src = "coverage/" + new_updates['updates'][n_id]['media'];
						img.onload = function () {
							document.getElementById("updates").insertBefore(newElement, document.getElementById("updates").firstChild);
						}
					} else {
						document.getElementById("updates").insertBefore(newElement, document.getElementById("updates").firstChild);
						
						if (new_updates['updates'][n_id]['media_type'] == 4) {
							update_poll(new_updates['updates'][n_id]['poll']);
						}
					}
				}
			}
			
			if (new_updates['stream'] == true && document.getElementById("stream").innerHTML == "" && new_updates['live'] == true) {
				document.getElementById("stream").innerHTML = "<div class=\"update new_update\"><div class=\"image\">" + new_updates['stream_embed'] + "</div></div>";
				document.getElementById("stream").style.display = "";
			} else if ((new_updates['stream'] == false || new_updates['live'] == false) && document.getElementById("stream") != null && document.getElementById("stream").innerHTML != "") {
				document.getElementById("stream").style.display = "none";
				document.getElementById("stream").innerHTML = "";
			}
			
			if (new_updates['live'] == false) {
				document.getElementById("status").innerText = "This event has ended.";
				return;
			}
			
			event_updates = new_updates;
		}
		
		setTimeout(function () {
			check();
		}, 5000);
	}
}

function update_poll(poll) {
	var max = 0;
	var total = 0;
	for (var i = 0; i < poll.length; i += 1) {
		if (poll[i]['votes'] > max) {
			max = poll[i]['votes'];
		}
		
		total += poll[i]['votes'];
	}
	
	for (var i = 0; i < poll.length; i += 1) {
		var bar = document.getElementById("poll_option_bar_" + poll[i]['id']);
		
		if (bar) {
			var p, t;
			
			if (total > 0) {
				p = poll[i]['votes'] / max;
				t = poll[i]['votes'] / total;
			} else {
				p = 0;
				t = 0;
			}
			
			bar.style.width = Math.round(p * 90) + "%";
			bar.innerHTML = Math.round(t * 100) + "%";
		}
	}
}

function create_update(parent, update, id) {
	var date = new Date(update['date'] * 1000);
	
	var media = "";
	if (update['media_type'] != 0) {
		media = "<div class=\"image\">";
		
		switch (update['media_type']) {
			case 1: // Image
				media += "<img src=\"coverage/" + escape(update['media']) + "\" alt=\"\" />";
				break;
				
			case 2: // YouTube
				media += "<object width=\"640\" height=\"385\"><param name=\"movie\" value=\"http://www.youtube.com/v/" + escape(update['media']) + "?fs=1&amp;hl=en_GB&amp;hd=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/" + escape(update['media']) + "?fs=1&amp;hl=en_GB&amp;hd=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"640\" height=\"385\"></embed></object>";
				break;
				
			case 3: // HTML 5 Video
				break;
			
			case 4: // Poll
				media += "<form action=\"poll_vote.php\" method=\"post\" accept-charset=\"utf-8\" enctype=\"multipart/form-data\" id=\"poll_form_" + id + "\" onsubmit=\"return poll_do_vote(" + id + ");\">";
				media += "<input type=\"hidden\" name=\"poll_update_id\" value=\"" + id + "\" />";
				
				for (var i = 0; i < update['poll'].length; i += 1) {
					var option = update['poll'][i];
					
					media += "<div class=\"poll_option\" id=\"poll_option_" + option['id'] + "\"><div class=\"poll_answer\"><div id=\"poll_option_answer_" + option['id'] + "\">" + option['answer'] + "</div></div><div class=\"poll_votes\"><div class=\"poll_bar\" style=\"display: none;\" id=\"poll_option_bar_" + option['id'] + "\" style=\"width: 0%;\">0%</div><input type=\"radio\" name=\"poll_answer\" value=\"" + option['id'] + "\" id=\"poll_answer_option_" + option['id'] + "\" /></div></div>";
				}
				
				media += "<div class=\"poll_commands\" id=\"poll_commands_" + id + "\"><input type=\"submit\" id=\"poll_submit_" + id + "\" value=\"Vote!\" /></div></form>";
				
				break;
			
			case 5: // Feedback Form
				media += "<form action=\"feedback.php\" method=\"post\" accept-charset=\"utf-8\" enctype=\"multipart/form-data\" id=\"feedback_form_" + id + "\" onsubmit=\"return leave_feedback(" + id + ");\"><textarea name=\"feedback_text\" id=\"feedback_text_" + id + "\"></textarea><br /><br /><input type=\"submit\" value=\"Leave Feedback\" id=\"feedback_submit_" + id + "\" /></form>";
				break;
		}
		
		if (update['media_type'] == 1 && update['latitude'] != null && update['longitude'] != null) {
			if (update['latitude'] != 0 || update['longitude'] != 0) {
				var pos = update['pos'];

				if (pos['x'] < 0 || pos['x'] > 1783 || pos['y'] < 0 || pos['y'] > 1031) { } else {
					media += "<div class=\"clip\" id=\"clip_" + update['update_id'] + "\" onclick=\"javascript:toggle_map(" + update['update_id'] + ", '" + (64 - pos['x']) + "px " + (64 - pos['y']) + "px', '" + (200 - pos['x']) + "px " + (200 - pos['y']) + "px');\"></div><div class=\"map\" id=\"map_" + update['update_id'] + "\" style=\"background-position: " + (64 - pos['x']) + "px " + (64 - pos['y']) + "px;\" onclick=\"javascript:toggle_map(" + update['update_id'] + ", '" + (64 - pos['x']) + "px " + (64 - pos['y']) + "px', '" + (200 - pos['x']) + "px " + (200 - pos['y']) + "px');\"><p>" + update['area'] + "</p><span class=\"geo\" id=\"geo_" + update['update_id'] + "\"><span class=\"latitude\">" + update['latitude'] + "</span><span class=\"longitude\">" + update['longitude'] + "</span></span></div>";
				}
			}
		}
		
		media += "</div>";
	}
	
	var before = true;
	if (update['media_type'] == 4 || update['media_type'] == 5) {
		before = false;
	}
	
	parent.innerHTML = "<div class=\"info\"><p>" + pad(date.getHours()) + ":" + pad(date.getMinutes()) + " <em>" + update['user'] + "</em></p></div>" + (before ? media : "") + "<div class=\"message\"><p>" + nl2br(update['message']) + "</p></div>" + (before ? "" : media);
}

function leave_feedback(feedback_id) {
	var textarea = document.getElementById("feedback_text_" + feedback_id);
	var submit = document.getElementById("feedback_submit_" + feedback_id);
	
	if (textarea.value.length == 0) {
		alert("Please enter a message to leave feedback!");
		
		return false;
	}
	
	var req = makeRequest();
	
	if (!req) {
		return true;
	}
	
	var params = "ajax&feedback_text=" + escape(textarea.value);
	
	textarea.disabled = true;
	submit.disabled = true;
	
	submit.value = "Please Wait…";
	
	req.onreadystatechange = function () {
		if (req.readyState == 4) {
			textarea.disabled = false;
			submit.disabled = false;
			
			textarea.value = "";
			submit.value = "Feedback Left!";
			
			setTimeout(function () {
				submit.value = "Leave Feedback";
			}, 1000);
		}
	}
	
	req.open("POST", "feedback.php", true);
	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	req.send(params);
	
	return false;
}

function allow_poll_vote(poll_id) {
	for (var i = 0; i < event_updates['updates'][poll_id]['poll'].length; i += 1) {
		var option = event_updates['updates'][poll_id]['poll'][i];
		
		document.getElementById("poll_answer_option_" + option['id']).style.display = "";
		document.getElementById("poll_option_bar_" + option['id']).style.display = "none";
	}
	
	document.getElementById("poll_submit_" + poll_id).value = "Vote!";
	document.getElementById("poll_form_" + poll_id).action = "poll_vote.php";
	document.getElementById("poll_form_" + poll_id).onsubmit = function () {
		return poll_do_vote(poll_id);
	};
	
	return false;
}

function poll_do_vote(poll_id) {
	var selected = null;
	
	for (var i = 0; i < event_updates['updates'][poll_id]['poll'].length; i += 1) {
		var option = event_updates['updates'][poll_id]['poll'][i];
		
		if (document.getElementById("poll_answer_option_" + option['id']).checked) {
			selected = option['id'];
		}
	}
	
	if (selected != null) {
		req = makeRequest();

		if (req) {
			var params = "ajax&poll_update_id=" + poll_id + "&poll_answer=" + selected;
			
			req.open("POST", "poll_vote.php", true);
			
			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		//	req.setRequestHeader("Content-length", params.length);
		//	req.setRequestHeader("Connection", "close");
			
			req.send(params);
			
			for (var i = 0; i < event_updates['updates'][poll_id]['poll'].length; i += 1) {
				var option = event_updates['updates'][poll_id]['poll'][i];
				
				if (option['id'] == selected) {
					event_updates['updates'][poll_id]['poll'][i]['votes'] += 1;
				}
			}
			
			update_poll(event_updates['updates'][poll_id]['poll']);
			
			for (var i = 0; i < event_updates['updates'][poll_id]['poll'].length; i += 1) {
				var option = event_updates['updates'][poll_id]['poll'][i];
				
				document.getElementById("poll_answer_option_" + option['id']).style.display = "none";
				document.getElementById("poll_option_bar_" + option['id']).style.display = "";
			}
			
			document.getElementById("poll_commands_" + poll_id).style.display = "none";
			
			document.getElementById("poll_form_" + poll_id).onsubmit = function () {
				return false;
			}
			
			return false;
		} else {
			return true;
		}
	} else {
		alert("Please select an option…");
		
		return false;
	}
}
