//
// rrmap2.js
//
// SageCreek Software, Bend OR
// Aug 2009
//
// Code adapted from example code supplied by Google and jMaps
//


//load map and data
$(document).ready( function() {
	
	//define a blue icon - existing route
	var iconBlue = new GIcon();
	iconBlue.image = "./images/mm_20_med_blue.png";
	iconBlue.shadow = "./images/mm_20_shadow.png";
	iconBlue.iconSize = new GSize(12, 20);
	iconBlue.shadowSize = new GSize(22, 20);
	iconBlue.iconAnchor = new GPoint(6, 20);
	iconBlue.infoWindowAnchor = new GPoint(5, 1);

	//define a dark blue icon - existing route
	var iconDBlue = new GIcon();
	iconDBlue.image = "./images/mm_20_dark_blue.png";
	iconDBlue.shadow = "./images/mm_20_shadow.png";
	iconDBlue.iconSize = new GSize(12, 20);
	iconDBlue.shadowSize = new GSize(22, 20);
	iconDBlue.iconAnchor = new GPoint(6, 20);
	iconDBlue.infoWindowAnchor = new GPoint(5, 1);

	//define a light blue icon - existing route
	var iconLBlue = new GIcon();
	iconLBlue.image = "./images/mm_20_lt_blue.png";
	iconLBlue.shadow = "./images/mm_20_shadow.png";
	iconLBlue.iconSize = new GSize(12, 20);
	iconLBlue.shadowSize = new GSize(22, 20);
	iconLBlue.iconAnchor = new GPoint(6, 20);
	iconLBlue.infoWindowAnchor = new GPoint(5, 1);

	// define red icon - Alt A
	var iconRed = new GIcon();
	iconRed.image = "./images/mm_20_red.png";
	iconRed.shadow = "./images/mm_20_shadow.png";
	iconRed.iconSize = new GSize(12, 20);
	iconRed.shadowSize = new GSize(22, 20);
	iconRed.iconAnchor = new GPoint(6, 20);
	iconRed.infoWindowAnchor = new GPoint(5, 1);

	// define green icon - Alt B
	var iconGreen = new GIcon();
	iconGreen.image = "./images/mm_20_green.png";
	iconGreen.shadow = "./images/mm_20_shadow.png";
	iconGreen.iconSize = new GSize(12, 20);
	iconGreen.shadowSize = new GSize(22, 20);
	iconGreen.iconAnchor = new GPoint(6, 20);
	iconGreen.infoWindowAnchor = new GPoint(5, 1);

	//define orange icon - Phase 2
	var iconOrange = new GIcon();
	iconOrange.image = "./images/mm_20_orange.png";
	iconOrange.shadow = "./images/mm_20_shadow.png";
	iconOrange.iconSize = new GSize(12, 20);
	iconOrange.shadowSize = new GSize(22, 20);
	iconOrange.iconAnchor = new GPoint(6, 20);
	iconOrange.infoWindowAnchor = new GPoint(5, 1);

	//define a white icon - existing route
	var iconWhite = new GIcon();
	iconWhite.image = "./images/mm_20_white.png";
	iconWhite.shadow = "./images/mm_20_shadow.png";
	iconWhite.iconSize = new GSize(12, 20);
	iconWhite.shadowSize = new GSize(22, 20);
	iconWhite.iconAnchor = new GPoint(6, 20);
	iconWhite.infoWindowAnchor = new GPoint(5, 1);

	// array to store icons
	var icons = [];
	icons["M"] = iconBlue;
	icons["H"] = iconDBlue;
	icons["L"] = iconLBlue;
	icons["A"] = iconRed;
	icons["B"] = iconGreen;
	//icons["P"] = iconOrange;
	icons["N"] = iconWhite;

	// arrays to store data
	var routes = { "M" : [], "A" : [], "B" : [], "N" : [], "H" : [], "L" : [] };
	var existingroutes = ["H", "M", "L", "N"];

	// center point for map display and initial zoom level
	var mapCenter = new GLatLng(44.16575, -121.293535);
	var mapZoom = 9;
	
	
	if (GBrowserIsCompatible()) {
		//calculate height of display window
		var height = $(window).height() - 65 - 2 * $("h1").height();
		$(".columns .column").height(height);
		
		//set up map
		var map = new GMap2(document.getElementById("map"));
		map.setCenter(mapCenter, mapZoom);
		map.setUIToDefault();
		
		//load data from current-crossing.xml
		GDownloadUrl("./data/current-crossing.xml", function (data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("xing");
			//var route = "O";
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute("name");
				//var route = markers[i].getAttribute("route");
				var priority = markers[i].getAttribute("priority");
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var nr = markers[i].getAttribute("nr");
				var xtype = markers[i].getAttribute("xtype");
				var lanes = markers[i].getAttribute("lanes");
				var tc = markers[i].getAttribute("tc");
				var rwc = markers[i].getAttribute("rwc");
				var pic = markers[i].getAttribute("pic");
				var pic2 = markers[i].getAttribute("pic2");
				var marker = createMarker(priority, point, nr, name, xtype, lanes, tc, rwc, pic, pic2, icons);
				routes[priority].push(marker);
				map.addOverlay(marker);
			}
		});
		//set existing crossing checkbox to true
		$("#cbEX").attr("checked", true);
		$("#cbEXp").attr("checked", false);
		$("#cbEXh").attr("checked", true);
		$("#cbEXm").attr("checked", true);
		$("#cbEXl").attr("checked", true);
		$("#cbEXe").attr("checked", true);

		//load data from alt-a-crossing.xml
		GDownloadUrl("./data/alt-a-crossing.xml", function (data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("xing");
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute("name");
				var route = markers[i].getAttribute("route");
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var nr = markers[i].getAttribute("nr");
				var xtype = markers[i].getAttribute("xtype");
				var bc = markers[i].getAttribute("bc");
				var ac = markers[i].getAttribute("ac");
				var ec = markers[i].getAttribute("ec");
				var tc = markers[i].getAttribute("tc");
				var rwc = markers[i].getAttribute("rwc");
				var erw = markers[i].getAttribute("erw");
				var nrw = markers[i].getAttribute("nrw");
				var sd = markers[i].getAttribute("sd");
				var sl = markers[i].getAttribute("sl");
				var pic = markers[i].getAttribute("pic");
				var marker = createAltAMarker(point, nr, name, route, xtype, bc, ac, ec, tc, rwc, erw, nrw, sd, sl, pic, icons);
				routes[route].push(marker);
				map.addOverlay(marker);
				marker.hide();
			}
		});
		//set alt-a crossing checkbox to true
		$("#cbAX").attr("checked", false);

		//load data from alt-b-crossing.xml
		GDownloadUrl("./data/alt-b-crossing.xml", function (data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("xing");
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute("name");
				var route = markers[i].getAttribute("route");
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var nr = markers[i].getAttribute("nr");
				var xtype = markers[i].getAttribute("xtype");
				var bc = markers[i].getAttribute("bc");
				var ac = markers[i].getAttribute("ac");
				var ec = markers[i].getAttribute("ec");
				var tc = markers[i].getAttribute("tc");
				var rwc = markers[i].getAttribute("rwc");
				var erw = markers[i].getAttribute("erw");
				var nrw = markers[i].getAttribute("nrw");
				var sd = markers[i].getAttribute("sd");
				var sl = markers[i].getAttribute("sl");
				var pic = markers[i].getAttribute("pic");
				var marker = createAltAMarker(point, nr, name, route, xtype, bc, ac, ec, tc, rwc, erw, nrw, sd, sl, pic, icons);
				routes[route].push(marker);
				map.addOverlay(marker);
				marker.hide();
			}
		});
		//set alt-b crossing checkbox to true
		$("#cbBX").attr("checked", false);

		//load data from phase2-crossing.xml
		GDownloadUrl("./data/phase2-crossing.xml", function (data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("xing");
			//var route = "O";
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute("name");
				var priority = markers[i].getAttribute("priority");
				//var route = markers[i].getAttribute("route");
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var nr = markers[i].getAttribute("nr");
				var xtype = markers[i].getAttribute("xtype");
				var lanes = markers[i].getAttribute("lanes");
				var tc = markers[i].getAttribute("tc");
				var rwc = markers[i].getAttribute("rwc");
				var pic = markers[i].getAttribute("pic");
				var pic2 = markers[i].getAttribute("pic2");
				var marker = createMarker(priority, point, nr, name, xtype, lanes, tc, rwc, pic, pic2, icons);
				routes[priority].push(marker);
				map.addOverlay(marker);
			}
		});
		
		//add Prineville Marker
		var encoded = "kymmGx}obVcXwu@ixBu|Cym@q_B?_N|EwIdNuHb}@itDm^gsD`ByqHib@mxCbEqnBwVa]kJuWcSse@sBsyDyC{h@pwBohDp\\gXpyAk_DnJo\\tKef@z[oaAxEoUpGsG?wJ";
		var levels = "BBBBBBBBBBBBBBBBBBBBBBBBBB";
		map.addOverlay(createPVMarker(icons));
		map.addOverlay(new GPolyline.fromEncoded({
		    color: "#FF0000",
		    weight: 2,
		    points: encoded,
		    levels: levels,
		    zoomFactor: 32,
		    numLevels: 4
		}));
		
		//crossing check box functions
		//existing route function
		$("#cbEX").click( function() {
			//toggleGroup("#cbEX", "N");
			toggleAll();
		});

		//priority checkboxs
		$("#cbEXp").click( function() {
			//toggleGroup("#cbEX", "N");
			toggleDiv();
		});
		//no priority crossings
		$("#cbEXe").click( function() {
			toggleGroup("#cbEXe", "N");
		});
		//high priority crossings
		$("#cbEXh").click( function() {
			toggleGroup("#cbEXh", "H");
		});
		//med priority crossings
		$("#cbEXm").click( function() {
			toggleGroup("#cbEXm", "M");
		});
		//low priority crossings
		$("#cbEXl").click( function() {
			toggleGroup("#cbEXl", "L");
		});

		//alt-a function
		$("#cbAX").click( function() {
			toggleGroup("#cbAX", "A");
		});

		//alt-b function
		$("#cbBX").click( function() {
			toggleGroup("#cbBX", "B");
		});

		//toggle display of each route according to checkbox
		
		function toggleDiv() {
			if ($("#cbEXp").is(":checked")) {
			$("#cbEX").attr("checked", false);
			$("#prioritytoggle").show("fast"); 
			toggleGroup("#cbEXh", "H");
			toggleGroup("#cbEXm", "M");
			toggleGroup("#cbEXl", "L");
			toggleGroup("#cbEXe", "N");
			} else {
			$("#prioritytoggle").hide("slow");
			if (!$("#cbEX").is(":checked")) {
			hideAll();
			}

			}
		}

		function toggleAll() {
			if ($("#cbEX").is(":checked")) {
				$("#cbEXp").attr("checked", false);
				toggleDiv();
				for ( var j = 0; j < existingroutes.length; j++ ) {
				var route = existingroutes[j];
				for ( var i = 0; i < routes[route].length; i++) {
					var marker = routes[route][i];
					marker.show();
				}
				}
			} else {
				if (!$("#cbEXp").is(":checked")) {
				hideAll();
				}
			}
		}
		
		function hideAll() {
				for ( var j = 0; j < existingroutes.length; j++ ) {
				var route = existingroutes[j];
				for ( var i = 0; i < routes[route].length; i++) {
					var marker = routes[route][i];
					marker.hide();
				}

				}
		}

		//toggle display of each route according to checkbox
		function toggleGroup(cbox, route) {
			if ($(cbox).is(":checked")) {
				for ( var i = 0; i < routes[route].length; i++) {
					var marker = routes[route][i];
					marker.show();
				}
			} else {
				for ( var i = 0; i < routes[route].length; i++) {
					var marker = routes[route][i];
					marker.hide();
				}
			}
		}
		
		//handle resize events
		$(window).resize(function() {
			var height = $(window).height() - 65 - 2 * $("h1").height();
			$(".columns .column").height(height);
			map.checkResize();
		});
	}
	else {
		alert('Your browser is not compatible with the Google Maps API!');
	}
});

//create each marker based on route type
function createMarker(priority, point, nr, name, xtype, lanes, tc, rwc, pic, pic2, icons) {
	var marker = new GMarker(point, {icon:icons[priority], title:name});
	var html = "<h4>" + "Crossing - " + name + "</h4>" + "<p>" + "<table>" + "<tr><td>Crossing Number</td><td class='right'>" + nr + "</td></tr>" + "<tr><td>Proposed Crossing Type</td><td class='right'>" + xtype + "</td></tr>" + "<tr><td>Lanes</td><td class='right'>" + lanes + "</td></tr>" + "<tr><td>2008 Right of Way Cost ($)</td><td class='right'>" + rwc + "</td></tr><tr><td>2008 Est Const Cost ($M)</td><td class='right'>" + tc + "</td></tr></table>";
	var msg2 = "<p>Click the &nbsp;<img src='http://maps.google.com/intl/en_us/mapfiles/iw_plus.gif' /> &nbsp;sign above for a crossing picture.</p>";
	var image =  "<img class='detailimg' src='" + pic + "' />";
	var xpic = " Crossing Picture";
	if (pic2 != null) {
		image = image + "<img class='detailimg' src='" + pic2 + "' />";
		xpic = xpic + "s";
	}
	GEvent.addListener(marker, "click", function () {(pic != null) ?
		marker.openInfoWindowHtml(html + msg2, {maxContent: image, maxTitle: name + xpic}) :
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

//create each marker based on route type
function createAltAMarker(point, nr, name, route, xtype, bc, ac, ec, tc, rwc, erw, nrw, sd, sl, pic, icons) {
	var marker = new GMarker(point, {icon:icons[route], title:name});
	var html = "<h4>" + "Crossing " + nr + " - " + name + "</h4>" + "<p>" + "Crossing Type:&nbsp;&nbsp;&nbsp;&nbsp;" + xtype + "</p>" + "<table>" + "<thead><td>2008 Cost</td><td class='cost'>$M</td></thead>" + "<tr><td>Bridge Cost</td><td class='cost'>" + bc + "</td></tr>" + "<tr><td>Approach Cost</td><td class='cost'>" + ac + "</td></tr>" + "<tr><td>E &amp; C</td><td class='cost'>" + ec + "</td></tr>" + "<tr><td>2008 Total Const Cost</td><td class='cost'>" + tc + "</td></tr>" + "<tr><td>2008 Right of Way Cost</td><td class='cost'>" + rwc + "</td></tr>" + "</table>" + "<p>Click the &nbsp;<img src='http://maps.google.com/intl/en_us/mapfiles/iw_plus.gif' /> &nbsp;sign above for more data.</p>";
	var details = "<table class='detailstbl' cellspacing='0'>" + "<thead><th>Crossing No</th><th>Type</th><th>Existing Rdwy Width (ft)</th><th>New Rdwy Width (ft)</th><th>Skew Degrees</th><th>Span Length (ft)</th></thead><tbody><tr><td>" + nr + "</td><td>" + xtype + "</td><td class='cost'>" + erw + "</td><td class='cost'>" + nrw + "</td><td class='cost'>" + sd + "</td><td class='cost'>" + sl + "</td></tr></tbody></table>";
	var costs = "<table class='detailstbl' cellspacing='0'>" + "<thead><th>Bridge Crossing Cost ($M)</th><th>Approach Cost ($M)</th><th>Utility plus 60% E&amp;C ($M)</th><th>2008 Total Cost ($M)</th></thead><tbody><tr><td class='cost'>" + bc + "</td><td class='cost'>" + ac + "</td><td class='cost'>" + ec + "</td><td class='cost'>" + tc + "</td></tr></tbody></table>";
	var maxcontent = details + costs;
	if (pic != null) {
		maxcontent = maxcontent + "<img class='detailimg' src='" + pic + "' />";
	}
	GEvent.addListener(marker, "click", function () {
		marker.openInfoWindowHtml(html, {maxContent: maxcontent, maxTitle: name + " Crossing Details"});
	});
	return marker;
}

//create prineville marker
function createPVMarker(icons) {
	var point = new GLatLng(44.31353, -121.16487);
	var marker = new GMarker(point, {icon:icons["P"], title:"Prineville Junction"});
	var html = "<h4>" + "Prineville Junction" + "</h4>" + "<p>Junction of Central Oregon Prineville Railroad and</p><p>Burlington Northern Railroad</p>";
	GEvent.addListener(marker, "click", function () {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

//money check box functions
$(document).ready( function() {
	//set checkbox state
	$("#cbET").attr("checked", false);
	$("#cbAT").attr("checked", false);
	$("#cbBT").attr("checked", false);
	$("#cbPT").attr("checked", false);
	$("#cbRT").attr("checked", false);
	
	//existing function
	$("#cbET").click( function() {
		toggleMoney("#cbET", "#mET");
	});

	//alt-a function
	$("#cbAT").click( function() {
		toggleMoney("#cbAT", "#mAT");
	});

	//alt-b function
	$("#cbBT").click( function() {
		toggleMoney("#cbBT", "#mBT");
	});

	//redmond function
	$("#cbRT").click( function() {
		toggleMoney("#cbRT", "#mRT");
	});
	
	//existing function
	$("#cbPT").click( function() {
		toggleMoney("#cbPT", "#mPT");
	});

})

function toggleMoney(cbox, mbox) {
	if ($(cbox).is(":checked")) $(mbox).show("fast"); else $(mbox).hide("slow");
}

