

function ChangeColor(tableRow, highLight)
{
	if (tableRow.style.backgroundColor == '#25383c' || tableRow.style.backgroundColor == 'rgb(37, 56, 60)')
	{
		// Disabled. Don't do anything.
		return;
	}

	// See if this is the selected row.
	if (tableRow == currentRouteSelection)
	{
		tableRow.style.backgroundColor = '#addfff';
		return;
	}
		
	if (highLight)
	{
		var subRegion = GetSubRegion(tableRow);
		if ((subRegion <= 0) || (currentSubRegion <= 0) || 
			(currentSubRegion > 0) && (subRegion == currentSubRegion))
		{
			tableRow.style.backgroundColor = '#ffff00';
		}
	}
	else
	{
		tableRow.style.backgroundColor = '#ffffff';
	}
}

//=============================
// Route click
//=============================

var currentRouteSelection = null;

function RouteClick(tableRow, routeID, alpine, treeline, belowTreeline)
{
	if (tableRow.style.backgroundColor == '#25383c' || tableRow.style.backgroundColor == 'rgb(37, 56, 60)')
	{
		// Disabled. Don't do anything.
		return;
	}

	// Save the elevation zones for the avaluator calculation.
	alpineZone = alpine;
	treelineZone = treeline;
	belowTreelineZone = belowTreeline;

	var rating = tableRow.cells[1].innerHTML;
	var backgroundColor = TerrainColorLookup(rating);
	var textColor = '#000000';
	
	if (backgroundColor == '#000000')
	{
		textColor = '#ffffff';
	}

	TerrainRating.innerHTML = rating;
	TerrainRating.style.color = textColor;
	TerrainRating.style.backgroundColor = backgroundColor;
	
	RouteName.innerHTML = tableRow.cells[0].innerHTML;
	var terrain = rating;

	terrain = TrimString(terrain);
	terrainRating = terrain;
	
	var routeLink = document.getElementById("routeDetails");
	routeLink.href = "RouteDisplay.aspx?id=" + routeID;

	// Stash the current route selection row and highlight it.
	if (currentRouteSelection != null)
	{
		currentRouteSelection.style.backgroundColor = '#ffffff';
	}
	currentRouteSelection = tableRow;
	ChangeColor(tableRow, true)

	UpdateAvaluator();
}

//=============================
// Day/Danger cell click
//=============================

function DayClick(tableCell, subRegion)
{
	// See if the subregion changed.
	var subRegionChanged = true;
	if (currentSubRegion == subRegion)
	{
		subRegionChanged = false;
	}

	// Stash the current subregion.
	currentSubRegion = subRegion;
	
	// Get the cell name, or at least the 'dayxy' part.
	var cellName = tableCell.id;
	if (cellName.length > 4)
	{
		cellName = cellName.substring(0, 5);
	}
	$([lastDayCell1, lastDayCell2, lastDayCell3, lastDayCell4]).css({
		'borderWidth': 1,
		'borderColor': '#000000'
	});
	
	lastDayCell1 = $('#' + cellName).css({
		borderColor : '#ff0000',
		borderWidth : 3
	})[0];
	
	lastDayCell2 = $('#' + cellName + "Alpine").css({
		borderColor : '#000000',
		borderWidth : 3
	})[0];
	alpineDanger = lastDayCell2 ? lastDayCell2.innerHTML : 'Extreme';
	
	lastDayCell3 = $('#' + cellName + "Treeline").css({
		borderColor : '#000000',
		borderWidth : 3
	})[0];
	treelineDanger = lastDayCell3 ? lastDayCell3.innerHTML : 'Extreme';
	
	lastDayCell4 = $('#' + cellName + "BelowTreeline").css({
		borderColor : '#000000',
		borderWidth : 3
	})[0];
	
	belowTreelineDanger = lastDayCell4 ? lastDayCell4.innerHTML : 'Extreme';

	// Disable table rows based on current subregion selection, but only if
	// the sub-region changed.
	if (subRegionChanged == true)
	{
		DisableTableRows();
	}

	// Update the Avaluator.
	UpdateAvaluator();
}

function DisableTableRows()
{
	var routeTable = getElement("routeTable");
	for (var i=0; i<routeTable.rows.length; i++)
	{
		var tableRow = routeTable.rows[i];
		var subRegion = GetSubRegion(tableRow);
		if ((subRegion <= 0) || (currentSubRegion <= 0) || 
			(currentSubRegion > 0) && (subRegion == currentSubRegion))
		{
			tableRow.style.backgroundColor = '#ffffff';
		}
		else
		{
			tableRow.style.backgroundColor = '#25383c';
		}
	}
	
	// Clear the current selection.
	currentRouteSelection = null;

	// Clear the terrain rating and the route name
	terrainRating = "";
	TerrainRating.innerHTML = "";
	TerrainRating.style.color = '#ffffff';
	TerrainRating.style.backgroundColor = '#ffffff';
	RouteName.innerHTML = "";
}

//=============================
// Master Avaluator update
//=============================

function UpdateAvaluator()
{
	// Set the current danger based on the terrain complexity.
	dangerRating = "";
	if (terrainRating.length > 0)
	{
		if (terrainRating == "Simple")
		{
			// Map the danger rating text string to a numeric value.
			var alpineValue = MapDangerRating(alpineDanger);
			var treelineValue = MapDangerRating(treelineDanger);
			var belowTreelineValue = MapDangerRating(belowTreelineDanger);

			// Check each elevation zone to see if it exists.  Also set the
			// highest danger rating in increasing elevation.
			if (!belowTreelineZone)
			{
				belowTreelineValue = -1;
			}
			else
			{
				dangerRating = belowTreelineDanger;
			}
			if (!treelineZone)
			{
				treelineValue = -1;
			}
			else
			{
				dangerRating = treelineDanger;
			}
			if (!alpineZone)
			{
				alpineValue = -1;
			}
			else
			{
				dangerRating = alpineDanger;
			}
			
			// Pick the highest danger rating based on elevation zones.
			if ((alpineValue > treelineValue) && (alpineValue > belowTreelineValue))
			{
				dangerRating = alpineDanger;
			}
			else if ((treelineValue > alpineValue) && (treelineValue > belowTreelineValue))
			{
				dangerRating = treelineDanger;
			}
			else if ((belowTreelineValue > alpineValue) && (belowTreelineValue > treelineValue))
			{
				dangerRating = belowTreelineDanger;
			}
		}
		else
		{
			// Map the danger rating text string to a numeric value.
			var alpineValue = MapDangerRating(alpineDanger);
			var treelineValue = MapDangerRating(treelineDanger);
			var belowTreelineValue = MapDangerRating(belowTreelineDanger);

			// Pick the highest danger rating.
			dangerRating = alpineDanger;
			if ((alpineValue > treelineValue) && (alpineValue > belowTreelineValue))
			{
				dangerRating = alpineDanger;
			}
			else if ((treelineValue > alpineValue) && (treelineValue > belowTreelineValue))
			{
				dangerRating = treelineDanger;
			}
			else if ((belowTreelineValue > alpineValue) && (belowTreelineValue > treelineValue))
			{
				dangerRating = belowTreelineDanger;
			}
		}
	}

	if (dangerRating && dangerRating.length > 0)
	{
		document.getElementById("AvalancheDanger").innerHTML = dangerRating;
	}
	else
	{
//		document.getElementById("AvalancheDanger").innerHTML = "&nbsp;";
		document.getElementById("AvalancheDanger").innerHTML = "Not Rated";
	}

	// Set the background color.
	document.getElementById("AvalancheDanger").style.backgroundColor = DangerColorLookup(dangerRating);

	// Check for a null or expired danger rating.  Don't want to display the little star
	// if so.
	if (!dangerRating || dangerRating == "Expired" || dangerRating == "~")
	{
		flashAvaluator.moveStar(0, 0);
		return;
	}
	
	if (dangerRating.length > 0 && terrainRating.length > 0)
	{
		// Update the flash guy.
		var vert = 0;
		var horiz = 0;

		switch (dangerRating.toUpperCase())
		{
			case "LOW":
			case "BAS":
			case "1 - LOW":
			case "1 - BAS":
				vert = 139;
				break;
			case "MODERATE":
//			case "MODÉRÉ":
			case "2 - MODERATE":
//			case "2 - MODÉRÉ":
				vert = 106;
				break;
			case "CONSIDERABLE":
//			case "CONSIDÉRABLE":
			case "3 - CONSIDERABLE":
//			case "3 - CONSIDÉRABLE":
				vert = 73;
				break;
			case "HIGH":
//			case "ÉLEVÉ":
			case "4 - HIGH":
//			case "4 - ÉLEVÉ":
				vert = 41;
				break;
			case "EXTREME":
//			case "EXTRÈME":
			case "5 - EXTREME":
//			case "5 - EXTRÈME":
				vert = 8;
				break;
		}

		switch (terrainRating)
		{
			case "Simple":
				horiz = 97;
				break;
			case "Simple-Challenging":
				horiz = 134;
				break;
			case "Challenging":
				horiz = 169;
				break;
			case "Challenging-Complex":
				horiz = 206;
				break;
			case "Complex":
				horiz = 241;
				break;
		}

		flashAvaluator.moveStar(vert, horiz);
	}
}

//=============================
// Support functions.
//=============================

function GetSubRegion(tableRow)
{
	var subRegionID = "-1";
	if (tableRow != null)
	{
		var id = tableRow.id;
		var startIndex = id.indexOf("-", 0);
		if (startIndex > 0)
		{
			subRegionID = id.substring(startIndex+1);
		}
	}
	return subRegionID;
}

function DangerColorLookup(danger)
{
	var colorString = "#FFFFFF";
	if (danger)
	{
		switch (danger.toUpperCase())
		{
			case "~":
				colorString = "#FFFFFF";
				break;
			case "LOW":
			case "BAS":
			case "1 - LOW":
			case "1 - BAS":
				colorString = "yellowgreen";
				break;
			case "MODERATE":
//			case "MODÉRÉ":
			case "2 - MODERATE":
//			case "2 - MODÉRÉ":
				colorString = "yellow";
				break;
			case "CONSIDERABLE":
//			case "CONSIDÉRABLE":
			case "3 - CONSIDERABLE":
//			case "3 - CONSIDÉRABLE":
				colorString = "#FF9900";
				break;
			case "HIGH":
//			case "ÉLEVÉ":
			case "4 - HIGH":
//			case "4 - ÉLEVÉ":
				colorString = "red";
				break;
			case "EXTREME":
//			case "EXTRÈME":
			case "5 - EXTREME":
//			case "5 - EXTRÈME":
				colorString = "#CC0000";
				break;
		}
	}
	return colorString;
}

function TerrainColorLookup(terrain)
{
	var colorString = "#ffffff";
	switch (TrimString(terrain.toUpperCase()))
	{
		case "SIMPLE":
			colorString = "#52d017";
			break;
		case "CHALLENGING":
			colorString = "#82caff";
			break;
		case "COMPLEX":
			colorString = "#000000";
			break;
	}
	return colorString;
}

function MapDangerRating(dangerRating)
{
	// Danger rating may be null.
	var danger = 5;
	if (dangerRating)
	{
		switch (dangerRating.toUpperCase())
		{
			case "~":
				danger = 0;
				break;
			case "LOW":
			case "BAS":
			case "1 - LOW":
			case "1 - BAS":
				danger = 1;
				break;
			case "MODERATE":
//			case "MODÉRÉ":
			case "2 - MODERATE":
//			case "2 - MODÉRÉ":
				danger = 2;
				break;
			case "CONSIDERABLE":
//			case "CONSIDÉRABLE":
			case "3 - CONSIDERABLE":
//			case "3 - CONSIDÉRABLE":
				danger = 3;
				break;
			case "HIGH":
//			case "ÉLEVÉ":
			case "4 - HIGH":
//			case "4 - ÉLEVÉ":
				danger = 4;
				break;
			case "EXTREME":
//			case "EXTRÈME":
			case "5 - EXTREME":
//			case "5 - EXTRÈME":
				danger = 5;
				break;
		}
	}
	return danger;
}

function TrimString(sInString) 
{
	sInString = sInString.replace( /^\s+/g, "" );	// strip leading
	return sInString.replace( /\s+$/g, "" );		// strip trailing
}

function DisplayRoute(tableRow)
{
//	alert("Display Route" + tableRow);
	window.open("RouteDisplay.aspx?id=" + tableRow);
}
			
function getElement(elementName)
{
	// Get the element.
	var element = document.getElementById(elementName);
	return element;
}

