var map;
var polys = [];	
var labels = [];
var markers = [];
var isListener = 0;

function calculate(){
	var R_votes=0;
	var D_votes=0;
	var U_votes=0;
	var votes = [3, 9, 6, 10, 55, 9, 7, 3, 27, 15, 4, 7, 4, 21, 11, 6, 8, 9, 12, 10, 4, 17, 10, 11, 6, 3, 15, 3, 5, 4, 15, 5, 5, 31, 20, 7, 7, 21, 4, 8, 3, 11, 34, 5, 13, 3, 11, 10, 5, 3, 3];
	
	for (var i=0; i<polys.length; i++) {
		if(polys[i].color == "#ff0000") R_votes += votes[i];
		else if(polys[i].color == "#0000ff") D_votes += votes[i];		
		else if(polys[i].color == "#ff8888") R_votes += votes[i];
		else if(polys[i].color == "#8888ff") D_votes += votes[i];			
		else if(polys[i].color == "#999999") U_votes += votes[i];
	}
	document.getElementById("rvotes").innerHTML = R_votes;
	document.getElementById("dvotes").innerHTML = D_votes;
	document.getElementById("uvotes").innerHTML = U_votes;
	var rbar_width = document.getElementById("resultbar").offsetWidth;

	document.getElementById("resultbar").innerHTML = '<span style="background:#f00"><img id="bar_r" src="http://mapmashup.googlecode.com/svn/images/blank.gif" height="10"></span><span style="background:#999"><img id="bar_u" src="http://mapmashup.googlecode.com/svn/images/blank.gif" height="10"></span><span style="background:#00f"><img id="bar_d" src="http://mapmashup.googlecode.com/svn/images/blank.gif" height="10"></span><br>|';
	document.getElementById("bar_r").style.width = (R_votes*rbar_width)/538+'px';
	document.getElementById("bar_u").style.width = (U_votes*rbar_width)/538+'px';
	document.getElementById("bar_d").style.width = (D_votes*rbar_width)/538+'px';
	
	if (R_votes > 269) document.getElementById("rlogo").innerHTML = '<img src="http://mapmashup.googlecode.com/svn/images/uspresident.png" border="0">';
	else document.getElementById("rlogo").innerHTML = '<img src="http://mapmashup.googlecode.com/svn/images/rlogo.png" border="0">';
	if (D_votes > 269) document.getElementById("dlogo").innerHTML = '<img src="http://mapmashup.googlecode.com/svn/images/uspresident.png" border="0">';
	else document.getElementById("dlogo").innerHTML = '<img src="http://mapmashup.googlecode.com/svn/images/dlogo.png" border="0">';
}	

function loadStats(party,data) {
	var votes = data[0].votes;
	var html = '';
	for (var i = 0; i < 51; i++) {				
			 if(votes.charAt(i) == "r" ) {polys[i].color = "#ff0000";polys[i].setFillStyle({color:"#ff0000"});}
		else if(votes.charAt(i) == "d" ) {polys[i].color = "#0000ff";polys[i].setFillStyle({color:"#0000ff"});}
		else if(votes.charAt(i) == "R" ) {polys[i].color = "#ff8888";polys[i].setFillStyle({color:"#ff8888"});}
		else if(votes.charAt(i) == "D" ) {polys[i].color = "#8888ff";polys[i].setFillStyle({color:"#8888ff"});}
		else if(votes.charAt(i) == "i" ) {polys[i].color = "#ffffaa";polys[i].setFillStyle({color:"#ffffaa"});}					
		else {polys[i].color = "#999999";polys[i].setFillStyle({color:"#999999"});}
		map.addOverlay(polys[i]);
		html += '<div class="nolink" valign="bottom" style="clear:both;border-top:1px solid #aaa;"><div style="float:left"><img src="blank.gif" height="1" width="4"><img src="http://chart.apis.google.com/chart?cht=bhg&chd=t:' + party.d[i] + '|' + party.r[i] + '&chs=100x40&chbh=10&chco=0000ff,ff0000&chds=0,' + (party.d[i]+party.r[i]) + '" title="D = ' + party.d[i] + ', R = ' + party.r[i] + '"><img src="blank.gif" height="1" width="4"></div> <div style="float:left"><img src="blank.gif" height="8"><br>' + labels[i] + '<br>D = ' + party.d[i] + ', R = ' + party.r[i] + '</div></div>';
	}
	calculate();
	document.getElementById("sidebar").innerHTML = '<div style="width:240px;"><div style="height:36px;background:#002b55;" align="center" valign="middle" class="text3"><b>User Predication<b></div><div id="stats" style="height:497px;overflow:auto;"></div></div>';
	document.getElementById("stats").innerHTML = html;
}

function loadPrediction() {
	var script = document.createElement('script');
	script.setAttribute('src', 'http://rakf1.110mb.com/stat.php?callback=loadStats');
	script.setAttribute('type', 'text/javascript');
	document.documentElement.firstChild.appendChild(script);	
}

function savePanel() {
	document.getElementById("loading").innerHTML = ' Enter Email: <input id="email" type="text" size="20" /><input type="button" value="Send" onclick="saveMap()" /><div id="warning"></div>';
//	document.getElementById("warning").style.background = "#0d0";
//	document.getElementById("warning").innerHTML = "Click on states to set your prediction...";	
}

function saveMap () {
	var save = [];
	var isAssigned = 0;
	for (var i=0; i<polys.length; i++) {
			 if (polys[i].color == "#ff0000") save[i] = 'r';
		else if (polys[i].color == "#0000ff") save[i] = 'd';
		else if (polys[i].color == "#ff8888") save[i] = 'r';
		else if (polys[i].color == "#8888ff") save[i] = 'd';			
		else { save[i] = 'u'; isAssigned = 1;}
	}
	var checkEmail = document.getElementById('email').value;
	if(isAssigned == 1) {
		document.getElementById("warning").style.background = "#f00";
		document.getElementById("warning").innerHTML = "Error: Please assign all states and then Submit";
		grayStates();
	}
	else if ((checkEmail.indexOf('@') < 0) || ((checkEmail.charAt(checkEmail.length-4) != '.') && (checkEmail.charAt(checkEmail.length-3) != '.'))) {
		document.getElementById("warning").style.background = "#f00";
		document.getElementById("warning").innerHTML = "Error: Please enter valid email address";
	}
	else if (isAssigned == 0) {
		var output = '?email=' + document.getElementById('email').value + '&votes=';
		for(var i=0;i<51;i++) output += save[i];
		document.getElementById("loading").innerHTML = 'Thank You!<iframe id="php2" name="php2" style="overflow:hidden; width:0px; height:0px; border: 1px;background:#fff" src="http://mapmash.100webspace.net/vote.php' + output + '"></iframe><iframe id="php" name="php" style="overflow:hidden; width:0px; height:0px; border: 1px;background:#fff" src="http://rakf1.110mb.com/vote.php' + output + '"></iframe>';
	}
}

function grayStates() {
	var html = '<b>The following states are not predicted:</b><br>';
	for (var i = 0; i < 51; i++) {
		if (polys[i].color == "#999999") 
			html += labels[i] +', ';
	}
	map.openInfoWindowHtml(new GLatLng(33,-100), '<div class="text1" width="300" style="width:300px"><center>' + html + '<br>(Pan map to the right to see Alaska and Hawaii)<center></div>');	
}

function addPoly (i) {
	map.addOverlay(polys[i]);
	GEvent.addListener(polys[i], "click", function() {
		if(polys[i].color == "#999999") {polys[i].color = "#ff0000";polys[i].setFillStyle({color:"#ff0000"});}
		else if(polys[i].color == "#ff0000") {polys[i].color = "#0000ff";polys[i].setFillStyle({color:"#0000ff"});}
		else if(polys[i].color == "#0000ff") {polys[i].color = "#999999";polys[i].setFillStyle({color:"#999999"});}	
		else {polys[i].color = "#999999";polys[i].setFillStyle({color:"#999999"});}
		map.addOverlay(polys[i]);
		calculate();
	});
//	GEvent.addListener(polys[i], "mouseover", function() {
//		polys[i].setStrokeStyle({color:"#ffffff",weight:"5"});
//		map.addOverlay(polys[i]);
//	});
//	GEvent.addListener(polys[i], "mouseout", function() {
//		polys[i].setStrokeStyle({color:"#000000",weight:"0.5"});
//		map.addOverlay(polys[i]);
//	});	
}

function loadPollData (poll, load_col) {
	if (load_col == 0) {
		document.getElementById("loading").innerHTML = '&nbsp;2008 User Prediction&nbsp;';
		loadPrediction();
		calculate();
	}
	else {
		if (load_col == 2) 	document.getElementById("loading").innerHTML = '&nbsp;<b>2008</b> Election Results&nbsp;<br>&nbsp;<a class="link" href="http://mapmash.googlepages.com/election2008.html">View Detailed Results</a>&nbsp;';
		else document.getElementById("loading").innerHTML = '';
		var total = poll.feed["openSearch$totalResults"].$t;
		var j = 0;
		for (var i=0; i<total; i++) {
		
			if(poll.feed.entry[i]["gs$cell"].row == 1){
				isPoll=0;
			} else if(poll.feed.entry[i]["gs$cell"].row == 2){
				if(poll.feed.entry[i]["gs$cell"].col == load_col) 
					if(poll.feed.entry[i]["gs$cell"].$t == "poll") 
						isPoll = 1;
			} else {
				if(poll.feed.entry[i]["gs$cell"].col == load_col) {
						 if(poll.feed.entry[i]["gs$cell"].$t == "r" ) {polys[j].color = "#ff0000";polys[j].setFillStyle({color:"#ff0000"});}
					else if(poll.feed.entry[i]["gs$cell"].$t == "d" ) {polys[j].color = "#0000ff";polys[j].setFillStyle({color:"#0000ff"});}					
					else if(poll.feed.entry[i]["gs$cell"].$t == "ru") {polys[j].color = "#ff8888";polys[j].setFillStyle({color:"#ff8888"});}
					else if(poll.feed.entry[i]["gs$cell"].$t == "du") {polys[j].color = "#8888ff";polys[j].setFillStyle({color:"#8888ff"});}
					else if(poll.feed.entry[i]["gs$cell"].$t == "i" ) {polys[j].color = "#ffffaa";polys[j].setFillStyle({color:"#ffffaa"});}					
					else {polys[j].color = "#999999";polys[j].setFillStyle({color:"#999999"});}	
					map.addOverlay(polys[j]);
					++j;
				}
			}
		}	
		if (isPoll == 0) {
			document.getElementById("rvotes").innerHTML = '';
			document.getElementById("dvotes").innerHTML = '';
			document.getElementById("uvotes").innerHTML = '';
			document.getElementById("rlogo").innerHTML = '<img src="rlogo.png" border="0">';
			document.getElementById("dlogo").innerHTML = '<img src="dlogo.png" border="0">';
			document.getElementById("resultbar").innerHTML = '';
		}
		else calculate();
	}
}	

function initPollData (poll) {
	poll_global = poll;
	var html = '';
	var total = poll.feed["openSearch$totalResults"].$t;
	html += '<b class="text3">Electoral Votes</b><span id="toggle"><input type="checkbox" value="Votes" onchange="toggle_marker(this.checked)"></span><img src="blank.gif" height="1" width="20"><select style="color:#002b55;font:9pt Arial" onchange="loadPollData(poll_global,this.options[this.selectedIndex].value);">';
	for (var i=0; i<total; i++) {
		if (poll.feed.entry[i]["gs$cell"].row == 1) {
			if (poll.feed.entry[i]["gs$cell"].col > 1) {
				html += '<option value="'+poll.feed.entry[i]["gs$cell"].col+'" >'+poll.feed.entry[i]["gs$cell"].$t+'</option>';
			}
		}
		else i = total;
	}
	html +='<option value="0" >-----------</option><option value="0" >2008 User Prediction</option></select>';
	document.getElementById("control").innerHTML = html;		
	loadPollData (poll, 2);
//	document.getElementById("loading").style.background = '';
//	document.getElementById("loading").style.padding = '4px';
//	document.getElementById("loading").innerHTML = '<input type="button" value="Submit Your Prediction" onclick="savePanel()">';
//	document.getElementById("loading").innerHTML = '&nbsp;<b>2008</b> Election Results&nbsp;<br>&nbsp;<a class="link" href="http://mapmash.googlepages.com/election2008.html">View Detailed Results</a>&nbsp;';
	document.getElementById("loading").innerHTML = '';	
}

function createMarker (i,lat_,lng_,name_) {
	var votes = [3, 9, 6, 10, 55, 9, 7, 3, 27, 15, 4, 7, 4, 21, 11, 6, 8, 9, 12, 10, 4, 17, 10, 11, 6, 3, 15, 3, 5, 4, 15, 5, 5, 31, 20, 7, 7, 21, 4, 8, 3, 11, 34, 5, 13, 3, 11, 10, 5, 3, 3];		var R_votes=0;	
	var newIcon = MapIconMaker.createLabeledMarkerIcon({label: ''+votes[i]+'', primaryColor: "#eeeeee"});
	markers[i] = new GMarker(new GLatLng(lat_,lng_), {icon:newIcon,title: name_+": "+votes[i]+" votes"});
	GEvent.addListener(markers[i], "click", function(overlay,point) {
			 if(polys[i].color == "#999999") {polys[i].color = "#ff0000";polys[i].setFillStyle({color:"#ff0000"});}
		else if(polys[i].color == "#ff0000") {polys[i].color = "#0000ff";polys[i].setFillStyle({color:"#0000ff"});}		
		else if(polys[i].color == "#0000ff") {polys[i].color = "#999999";polys[i].setFillStyle({color:"#999999"});}		
		else {polys[i].color = "#999999";polys[i].setFillStyle({color:"#999999"});}
		map.addOverlay(polys[i]);
		calculate();
	});		
}

function toggle_marker (check) {
	for (var i=0; i<polys.length; i++)
		if (check == true) map.addOverlay(markers[i]);
		else if (check == false) map.removeOverlay(markers[i]);	
}
	
function load(){
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"),{draggableCursor: 'pointer'});
		map.addControl(new GSmallZoomControl(),new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(7,43)));
		map.disableDoubleClickZoom();

		if(document.getElementById("map").offsetWidth < 600)
			map.setCenter(new GLatLng(40,-96), 3); 
		else
			map.setCenter(new GLatLng(40,-96), 4);
		var start = new GPoint(39,-96);
//		map.openInfoWindowHtml(new GLatLng(33,-100), '<span class="text1"><center>Click each state to see how its electoral votes<br> could affect the 2008 election outcome...<br>Select <b>Reset</b> from drop down to start from scratch.<center></span>');
		map.openInfoWindowHtml(new GLatLng(33,-100), '<span class="text1"><br><center>Click on the states to see how its electoral votes<br> could have affected the 2008 election outcome...<br><center></span>');

		document.getElementById("loading").innerHTML = '&nbsp;Loading...&nbsp;';		  
		
	    var request = GXmlHttp.create();
	    request.open("GET", "states.xml", true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = GXml.parse(request.responseText);
				var states = xmlDoc.documentElement.getElementsByTagName("state");
				for (var a = 0; a < states.length; a++) {
					var label  = states[a].getAttribute("name");
					var colour = states[a].getAttribute("colour");
					var points = states[a].getElementsByTagName("point");
					var pts = [];
					for (var i = 0; i < points.length; i++) {
					    pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")), parseFloat(points[i].getAttribute("lng")));
					}
					var poly = new GPolygon(pts,"#000000",0.5,0.5,colour,0.5);
					polys.push(poly);
					labels.push(label);
					createMarker(a,states[a].getAttribute("lat"),states[a].getAttribute("lng"), states[a].getAttribute("name"));
					addPoly(a);
				}
				var script = document.createElement('script');
				script.setAttribute('src', 'http://spreadsheets.google.com/feeds/cells/o01541787132901408846.7334629153413278902/od6/public/values?alt=json-in-script&callback=initPollData');
				script.setAttribute('id', 'jsonScript');
				script.setAttribute('type', 'text/javascript');
				document.documentElement.firstChild.appendChild(script);	      
			}
		}
	    request.send(null);
	}
}