﻿// JavaScript functions for iFlightPlanner user controls

/* Aircrafts/AircraftWizard.aspx */
function aircraftWizard_emptyMoment_onChange(field)
{
	var value = 0;
	value = parseFloat(field.value);
	if (value < 1000)
	{
		alert("Your Empty Moment value seems a bit low.\n\nFor proper weight and balance calculations, please enter\nyour Empty Moment in lbs-in units, NOT divided by 1000.\n\nFor example, enter 65536.63, NOT 65.53.");
		field.select();
	}
}

/* Airports/AirportMiniSearchFields.ascx */
function airportMiniSearchFields_airport_onKeyDown(keyCode)
{
	if (keyCode == 13)
		return false;
	else
		return true;
}

function airportMiniSearchFields_airport_onKeyUp(keyCode, directoryUrl, prefix)
{
	if (keyCode == 13)
	{
		airportMiniSearchFields_search_onClick(directoryUrl, prefix);
		return false;
	}
	else
		return true;
}

function airportMiniSearchFields_search_onClick(directoryUrl, prefix)
{
	var q = document.getElementById(prefix + '_AirportSearchTerm').value;

	if (q.length > 0)
		document.location = directoryUrl + '?Q=' + q;
	else
		alert("Please enter an airport name or code (i.e. 'DTW' or 'Detroit') to search for.");
	
	return false;
}

/* Airports/AirportView.ascx */
function airportView_addRemoveFavorite_onClick(prefix,airportID,add)
{
	var addLink = document.getElementById(prefix + "_AddFavoriteLink");
	var removeLink = document.getElementById(prefix + "_RemoveFavoriteLink");
	
	if (addLink && removeLink)
	{
		if (add) 
			iFlightPlannerServices.AddAirportToFavorites(airportID);
		else
			iFlightPlannerServices.RemoveAirportFromFavorites(airportID);
	
		//show/hide links
		addLink.style.display = add ? "none" : "";
		removeLink.style.display = add ? "" : "none";
	}
}

/* Airports/Companies/AirportCompanyMessage */
function airportCompanyMessage_show(prefix,id,name)
{
	document.getElementById("AirportCompanyMessage_CompanyName").firstChild.nodeValue = name;
	document.getElementById(prefix + "_ID").value = id;
	modalDialog_toggle(prefix + "_Dialog",true);
	document.getElementById(prefix + "_YourName").focus();				
	
	//track page view
	name = name.replace(/ /g,"_").replace(/\"/g,"");
	pageTracker._trackPageview("/AirportCompanies/" + name + "/ShowMessageDialog");	
}

/* Airports/Companies/AirportCompanyComment */
function airportCompanyComment_addComment_onClick(prefix,id)
{
	//show dialog and focus on field
	modalDialog_toggle(prefix + "_Dialog",true,prefix + "_CommentText");
	document.getElementById(prefix + "_ACID").value = id;
}

/* Airports/Companies/AirportCompanyGeneralFields */
function airportCompanyGeneralFields_companyType_onValidate(sender,args)
{
	var prefix = sender.id.substring(0, sender.id.lastIndexOf("_"));
	var fboField = document.getElementById(prefix + "_FBO");
	var groundField = document.getElementById(prefix + "_GroundTransportation");
	var restaurantField = document.getElementById(prefix + "_Restaurant");
	var hotelField = document.getElementById(prefix + "_Hotel");
	var otherField = document.getElementById(prefix + "_Other");
	args.IsValid = (fboField.checked || groundField.checked || restaurantField.checked || hotelField.checked || otherField.checked);
}

/* AviationLocationAutoComplete.ascx */
function aviationLocationAutoComplete_formatItem(item)
{
	var li = document.createElement("li");
	li.setAttribute("matchindex",i);
	
	var a = document.createElement("a");
	a.className = "AviationLocationOption";
	a.href = "javascript:false;";
	
	//create HTML
	var html = "";
	html += "<span class=\"ID\">" + item.id + "</span>";
	html += "<span class=\"Type\">" + item.path + "</span>";
	html += "<span class=\"Name\">" + item.name;
	if (item.data && item.data.length)
		html += "&nbsp;&nbsp;<span class=\"CityState\">" + item.data + "</span>";
	html += "</span>";
	
	//set a properties	
	a.innerHTML = html;
	li.appendChild(a);
	
	return li;
}

function aviationLocationAutoComplete_getValue(prefix)
{
	var field = document.getElementById(prefix + "_Locations");
	if (field)
		return field.value;
	else
		return "";
}

function aviationLocationAutoComplete_onSelect(prefix, id, name)
{
	if (id != "0")
	{
		var field = document.getElementById(prefix + "_Locations");
		var value = field.value;
		if (value.length) 
		{
			var index = value.lastIndexOf(" ");
			if (index == -1)
				field.value = id;
			else
				field.value = value.substring(0,index) + " " + id;
		}
		else
			field.value = id;
	}
}

/* Flights/FlightDateSelector.ascx */
function flightDateSelector_dateMethod_onChange(prefix)
{
	var field = document.getElementById(prefix + "_DateFromNow");
	if (field)
	{
		var isFromNow = field.checked;
		document.getElementById(prefix + "_DateFromNowFields").style.display = (isFromNow ? "block" : "none");
		document.getElementById(prefix + "_DateSpecificFields").style.display = (isFromNow ? "none" : "block");
	}
}

/* Flights/FlightInfoFields.ascx */
function flightInfoFields_routeCustomized(prefix)
{
	routingFields_routeCustomized(prefix + "_RoutingFields");
}

function flightInfoFields_saveFavoriteRoute(prefix)
{
	var routeNameField = document.getElementById(prefix + "_SaveRouteName");
	var routeName;
	var fromAirport, toAirport, altAirport;
	var isDetailedNavLog, routingType, flightRoute, sid, star, altitude;
	
	//get values
	routeName = routeNameField.value;
	fromAirport = airportSelector_getFieldValue(prefix + "_FromAirport");
	toAirport = airportSelector_getFieldValue(prefix + "_ToAirport");
	altAirport = airportSelector_getFieldValue(prefix + "_AlternateAirport");
	isDetailedNavLog = document.getElementById(prefix + "_RoutingFields_DetailedNavLog").checked;
	routingType = document.getElementById(prefix + "_RoutingFields_RoutingType").value;
	flightRoute = aviationLocationSelector_getFieldValue(prefix + "_RoutingFields_FlightRoute");
	sid = document.getElementById(prefix + "_RoutingFields_RouteSID").value;
	star = document.getElementById(prefix + "_RoutingFields_RouteSTAR").value;
	altitude = parseInt(document.getElementById(prefix + "_Altitude").value);
	
	//save
	iFlightPlannerServices.SaveFavoriteRoute(routeName, fromAirport, toAirport, altAirport, isDetailedNavLog, routingType, flightRoute, sid, star, altitude);
	
	//clear fields, hide dialog
	routeNameField.value = "";
	modalDialog_toggle(prefix + "_RouteDialog",false);
}

function flightInfoFields_showSaveFavoriteRoute(prefix)
{
	var fromAirport, toAirport, altAirport;
	var name = "";
	
	//get values
	fromAirport = airportSelector_getFieldValue(prefix + "_FromAirport");
	toAirport = airportSelector_getFieldValue(prefix + "_ToAirport");
	altAirport = airportSelector_getFieldValue(prefix + "_AlternateAirport");

	//ensure something was entered
	if (fromAirport.length)
	{
		//create name
		name = fromAirport;
		if (toAirport.length)
		{
			if (name.length)
				name += "-" + toAirport;
			else
				name = toAirport;
		}
		if (altAirport.length)
		{
			if (name.length)
				name += " (" + altAirport + ")";
			else
				name = altAirport;
		}
		
		//set name value, show dialog
		document.getElementById(prefix + "_SaveRouteName").value = name;
		modalDialog_toggle(prefix + "_RouteDialog",true);
	}
	else
		alert("Please enter at least a from airport before saving a route.");
}

function flightInfoFields_updateRoute(prefix,reroute)
{
	//change routing type to custom
	//var field = document.getElementById(prefix + "_RoutingType");
	//if (field)
	//{
	//	field.value = "user";
	//	flightInfoFields_routingType_onChange(prefix);
	//}

	//if requested, get new route from server
	if (reroute)
	{
		field = document.getElementById(prefix + "_RouteUpdated");
		if (field)
		{
			field.value = "true";
			//hack for firefox (yes, FIREFOX needs a hack!)
			window.setTimeout("__doPostBack('" + field.name + "', '')",0);
		}
	}
}

/* Flights/FlightPlanFields.ascx */
function flightPlan_ack_onClick(prefix)
{
	var field = document.getElementById(prefix + "_Ack");
	if (field)
	{
		var enable = field.checked;
		document.getElementById(prefix + "_AckFields").style.display = enable ? "block" : "none";
	}
}

function flightPlan_file_onClick(prefix)
{
	var field = document.getElementById(prefix + "_FileFlightPlanI");
	if (field)
	{
		var enable = field.checked;
		document.getElementById(prefix + "_FlightPlanFields").style.display = enable ? "block" : "none";

		//enable/disable validators
		ValidatorEnable(document.getElementById(prefix + "_AirspeedReqVal"),enable);
		ValidatorEnable(document.getElementById(prefix + "_AirspeedVal"),enable);
		ValidatorEnable(document.getElementById(prefix + "_AltitudeReqVal"),enable);
		hoursMinutesFields_validatorsEnable(prefix + "_EstTimeEnRouteI",enable);
		hoursMinutesFields_validatorsEnable(prefix + "_FuelOnBoardTimeI",enable);
		ValidatorEnable(document.getElementById(prefix + "_NumberAboardReqVal"),enable);
		ValidatorEnable(document.getElementById(prefix + "_NumberAboardIntVal"),enable);
		ValidatorEnable(document.getElementById(prefix + "_NumberAboardZeroVal"),enable);
		ValidatorEnable(document.getElementById(prefix + "_PilotPhoneNumberVal"),enable);
		ValidatorEnable(document.getElementById(prefix + "_DestPhoneNumberVal"),enable);
	}
}

function flightPlan_flightType_onClick(prefix)
{
	var field = document.getElementById(prefix + "_VFR");
	if (field)
	{
		var fields = document.getElementById(prefix + "_FileFields");
		var ifrFields = document.getElementById(prefix + "_FileIFRFields");
		var fileField = document.getElementById(prefix + "_FileFlightPlanI");
		if (fields)
		{
			fields.style.display = (field.checked ? "" : "none");
			ifrFields.style.display = (field.checked ? "none" : "");
			if (!field.checked && !fileField.checked)
				fileField.checked = true;
			flightPlan_file_onClick(prefix);			
		}		
	}
}

function flightPlan_destPhoneNumber_onValidate(sender,args)
{	
	var prefix = sender.id.substring(0, sender.id.lastIndexOf("_"));
	var value = document.getElementById(prefix + "_DestinationPhoneNumber").value;
	args.IsValid = flightPlan_phoneNumber_isValid(value);
}

function flightPlan_pilotPhoneNumber_onValidate(sender,args)
{	
	var prefix = sender.id.substring(0, sender.id.lastIndexOf("_"));
	var value = document.getElementById(prefix + "_PilotPhoneNumber").value;
	args.IsValid = flightPlan_phoneNumber_isValid(value);
}

function flightPlan_phoneNumber_isValid(value)
{
	var re = /[^0-9]/g;
	value = value.replace(re,"");
	return (value.length == 0 || value.length == 10);
}

/* Flights/NavigationLogFields.ascx */
function navigationLogFields_updateRoute(prefix,reroute)
{
	//change routing type to custom
	var field = document.getElementById(prefix + "_RoutingType");
	if (field)
	{
		field.value = "user";
		navigationLogFields_routingType_onChange(prefix);
	}

	//if requested, get new route from server
	if (reroute)
	{
		field = document.getElementById(prefix + "_RouteUpdated");
		if (field)
		{
			field.value = "true";
			//hack for firefox (yes, FIREFOX needs a hack!)
			window.setTimeout("__doPostBack('" + field.name + "', '')",0);
		}
	}
}

function navigationLogFields_routingType_onChange(prefix)
{
	var field = document.getElementById(prefix + "_RoutingType");
	var fields = document.getElementById(prefix + "_CustomFields");
	if (field && fields)
		fields.style.display = (field.value == "user") ? "block" : "none";	
}

/* Flights/NavigationLogView */
function navLogView_invalidate(prefix)
{
	var el = document.getElementById(prefix + "_NavLog");
	var el2 = document.getElementById(prefix + "_NavLogNeedRefresh");
	if (el && el2)
	{
		el.style.display = "none";
		el2.style.display = "block";
	}
}

/* Flights/StoredRouteSelector */
function storedRouteSelector_go(prefix)
{
	var field = document.getElementById(prefix + "_Route");
	if (field && field.value.length)
		document.location = "/My/Flights/Wizard.aspx?RouteID=" + field.value;
	else
		alert("Please select a Favorite Route or click Manager Favorites to create Favorite Routes.");
}

/* Flights/RoutingFields.ascx */
function routingFields_navLogType_onChange(prefix)
{
	var field = document.getElementById(prefix + "_DetailedNavLog");
	if (field)
	{
		//show/hide Routing Type field
		document.getElementById(prefix + "_RoutingTypeFields").style.display = field.checked ? "block" : "none";
		
		//show/hide Route field
		if (field.checked)
			routingFields_routingType_onChange(prefix);
		else
		{
			document.getElementById(prefix + "_RouteFields").style.display = "block";
			document.getElementById(prefix + "_SIDSTARFields").style.display = "none";
			ValidatorEnable(document.getElementById(prefix + "_RouteSIDVal"),false);
			ValidatorEnable(document.getElementById(prefix + "_RouteSTARVal"),false);
		}
	}
}

function routingFields_routeCustomized(prefix)
{
	//change routing type to custom
	var field = document.getElementById(prefix + "_RoutingType");
	if (field)
	{
		field.value = "user";
		routingFields_routingType_onChange(prefix);
	}
}

function routingFields_routingType_onChange(prefix)
{
	var field = document.getElementById(prefix + "_RoutingType");
	var hasSIDSTAR;
	if (field)
	{
		document.getElementById(prefix + "_RouteFields").style.display = (field.value == "user" ? "block" : "none");
		
		//handle jet routing
		hasSIDSTAR = (field.value == "*j");
		document.getElementById(prefix + "_SIDSTARFields").style.display = (hasSIDSTAR ? "block" : "none");
		ValidatorEnable(document.getElementById(prefix + "_RouteSIDVal"),hasSIDSTAR);
		ValidatorEnable(document.getElementById(prefix + "_RouteSTARVal"),hasSIDSTAR);
	}
}

/* FlightWizard.aspx */
function flightWizard_summaryConfirmed_onValidate(sender,args)
{	
	var prefix = sender.id.substring(0, sender.id.lastIndexOf("_"));
	args.IsValid = document.getElementById(prefix + "_SummaryConfirmed").checked;
}

/* Weather/AirportMiniWeather.ascx */
function airportMiniWx_skyVector_initMap(p_chart,setid,protoid,scale,posx,posy,lat,lon)
{
	var chart=false;
	var tilesize=256;
	var tiledir='http://tiles.skyvector.com/sky/tiles';
	if(p_chart){
	  chart=document.getElementById(p_chart);
	  if (!chart){return false};
	  chart.style.position='relative';
	  chart.style.border='1px solid #808080';
	  chart.style.backgroundColor='#D5E6E6';
	  chart.style.padding='0px';
	  chart.style.overflow='hidden';
	}else{
	  if (!chart){return false};
	}
	if(!(posx && posy && scale && protoid && setid)){
	  return false;
	}
	var qs="?ll="+lat+","+lon+"&chart="+protoid+"&zoom="+scale;
	var vwidth=chart.clientWidth;
	var vheight=chart.clientHeight;
	if (!vwidth) vwidth=chart.style.pixelWidth;
	if (!vheight) vheight=chart.style.pixelHeight;
	if (!vwidth) vwidth=parseInt(chart.style.width);
	if (!vheight) vheight=parseInt(chart.style.height);
	if (!vwidth) vwidth=140;
	if (!vheight) vheight=140;

	var htiles=Math.ceil(vwidth/tilesize)+1;
	var vtiles=Math.ceil(vheight/tilesize)+1;
	if(isNaN(htiles) || htiles<2) htiles=2;
	if(isNaN(vtiles) || vtiles<2) vtiles=2;
	posx=Math.round(posx-(vwidth/2));
	posy=Math.round(posy-(vheight/2));

	var html = "<a href=\"http://skyvector.com/" + qs + "\" target=\"_blank\">";
	html +="<img style=\"margin: 0px; padding: 0px; border: none; position: absolute; z-index: 1; right: 0px; bottom: 0px; \" width=\"82\" height=\"13\" border=\"0\" src=\"http://tiles.skyvector.com/sky/images/chart/logotiny.png\" />";
	var otx=Math.floor(posx/tilesize);
	var oty=Math.floor(posy/tilesize);
	for (var i=0; i < vtiles; i++){
	  var i2=i+oty;
	  for (var j=0; j < htiles; j++){
		 var j2=j+otx;
		 var tilename=protoid +"/"+ setid +"/" +"tile_" + scale + "_" + j2 + "_" + i2 + ".jpg";
		 html += "<img style=\"padding: 0px; border: none; position: absolute; z-index: 0; top: "+(i2*tilesize - posy)+"px; left: "+(j2*tilesize -posx)+"px;\" border=\"0\" width=\"" + tilesize + "\" height=\"" + tilesize + "\" src=\""+tiledir + "/" + tilename + "\" />";
	  }
	}
	html += "</a>";
	chart.innerHTML=html;
}

/* Weather/AnimatedRadar.ascx */
var animatedRadar_zoomLevels = [1500,1000,750,500,400,300,200,100,50];

function animatedRadar_updateRadar(prefix)
{
	var img = document.getElementById(prefix + "_RadarImage");
	var url, zoomRadius;
	
	if (img)
	{
		//get zoom radius
		zoomRadius = document.getElementById(prefix + "_ZoomRadius").value;
	
		//get current url
		url = img.src;
	
		//radius, random number, severe, storms, rainsnow
		url = url.replace(/radius\=[0-9]+/,"radius=" + zoomRadius);
		url = url.replace(/showstorms=[0-9]+/,"showstorms=" + (document.getElementById(prefix + "_StormTracks").checked ? document.getElementById(prefix + "_StormCount").value : "0"));
		url = url.replace(/rainsnow=(rainsnow|0)/,"rainsnow=" + (document.getElementById(prefix + "_SnowIce").checked ? "rainsnow" : "0"));
		
		//severe
		if (document.getElementById(prefix + "_Severe").checked)
		{
			if (url.indexOf("&severe=") < 0)
				url += "&severe=1";
		}
		else
			url = url.replace(/severe=[0-1]/,"");	
		
		//set theme
		if (zoomRadius <= 400)
			url = url.replace(/theme\=[a-zA-Z_]+/,"theme=WUNIDS");
		else
			url = url.replace(/theme\=[a-zA-Z_]+/,"theme=WUNIDS_nocounties");
		
		//add random number to prevent caching
		url = url.replace(/r\=[0-9]+/,"r=" + Math.random());
		
		//set new img src
		img.src = url;
	}
}

function animatedRadar_zoom(prefix,zoomRadius)
{
	var zoomField = document.getElementById(prefix + "_ZoomRadius");
	if (zoomField)
	{
		//clear class on all notches
		document.getElementById(prefix + "_Zoom50").className = "";
		document.getElementById(prefix + "_Zoom100").className = "";
		document.getElementById(prefix + "_Zoom200").className = "";
		document.getElementById(prefix + "_Zoom300").className = "";
		document.getElementById(prefix + "_Zoom400").className = "";
		document.getElementById(prefix + "_Zoom500").className = "";
		document.getElementById(prefix + "_Zoom750").className = "";
		document.getElementById(prefix + "_Zoom1000").className = "";
		document.getElementById(prefix + "_Zoom1500").className = "";
	
		//set new zoom radius and selected notch
		zoomField.value = zoomRadius;
		document.getElementById(prefix + "_Zoom" +  zoomRadius).className = "Selected";
		
		//update RADAR
		animatedRadar_updateRadar(prefix)
	}
}

function animatedRadar_zoom_increment(prefix,increment)
{
	var zoomField = document.getElementById(prefix + "_ZoomRadius");
	if (zoomField)
	{
		var currentZoom = parseInt(zoomField.value);
		var index;
		
		//determine current zoom index
		for (var i=0;i<animatedRadar_zoomLevels.length;i++)
			if (animatedRadar_zoomLevels[i] == currentZoom)
				index = i;
		
		//make sure we can increment
		if ((increment == -1 && index > 0) || (increment == 1 && index < animatedRadar_zoomLevels.length - 1))
			animatedRadar_zoom(prefix,animatedRadar_zoomLevels[index+increment]);			
	}	
}

/* Weather/MetarView.ascx & TafView.ascx */
function metarTaf_toggle(prefix,wxType,showTranslated)
{
	var translated = document.getElementById(prefix + "_" + wxType + "Plain");
	var raw = document.getElementById(prefix + "_" + wxType + "Raw");
	
	if (translated && raw)
	{
		translated.style.display = (showTranslated ? "block" : "none");
		raw.style.display = (showTranslated ? "none" : "block");
	}
}

/* WeightBalanceFields.ascx */
function wbCalc_calcPerformed_onValidate(sender,args)
{
	var prefix = sender.id.substring(0,sender.id.lastIndexOf("_"));
	var calcPerformed = document.getElementById(prefix + "_CalcPerformed");
	if (calcPerformed && calcPerformed.value == "true")
		args.IsValid = true;
}

function wbCalc_fuel_onChange(prefix, field, setFuelTime)
{
	var fuelWeight = parseFloat(document.getElementById(prefix + "_FuelWeight").value);
	var rowPrefix = field.id.substring(0,field.id.lastIndexOf("_"));
	var fuel = parseFloat(field.value);
	var location = parseFloat(document.getElementById(rowPrefix + "_Location").value);
	
	//set fuel weight and fuel moment
	document.getElementById(rowPrefix + "_Weight").value = (fuel * fuelWeight).toFixed(2);
	document.getElementById(rowPrefix + "_Moment").value = number_format_value(fuel * fuelWeight * location);
	
	//if requested, set fuel time
	if (setFuelTime)
		wbCalc_fuelTime_set(prefix, rowPrefix, fuel);
}

function wbCalc_fuelTime_set(prefix, rowPrefix, fuel)
{
	var timeField = document.getElementById(rowPrefix + "_FuelTime");
	if (timeField)
	{
		var burnRate = parseFloat(document.getElementById(prefix + "_FuelBurnRate").value);
		var total = 0;
		
		//determine burn rate
		if (burnRate > 0)
			total = ((fuel/burnRate) * 60);
			
		//determine hours & minutes
		var hours = (total/60).toFixed(0);
		var minutes = (total % 60).toFixed(0);
		
		//set time field value
		timeField.value = hours + "h " + minutes + "m";
	}
}

function wbCalc_fuelWeight_onChange(prefix, field, setFuelTime)
{
	var fuelWeight = parseFloat(document.getElementById(prefix + "_FuelWeight").value);
	var rowPrefix = field.id.substring(0,field.id.lastIndexOf("_"));
	var weight = parseFloat(field.value);
	var location = parseFloat(document.getElementById(rowPrefix + "_Location").value);
	var fuelField = document.getElementById(rowPrefix + "_Fuel")
	var fuel;
	
	//determine fuel used
	if (fuelWeight != 0)
		fuel = weight/fuelWeight;
	else
		fuel = 0;
	
	//set fuel, fuel moment
	fuelField.value = fuel.toFixed(2);
	document.getElementById(rowPrefix + "_Moment").value = number_format_value(weight * location);
	
	//if requested, set fuel time
	if (setFuelTime)
		wbCalc_fuelTime_set(prefix, rowPrefix, fuel);
}

function wbCalc_toggleDetails(show)
{
	var div = document.getElementById("WBView");
	if (div)
	{
		if (show)
			div.className = "WBView";
		else
			div.className = "SimpleWBView";
	}
}

function wbCalc_weight_onChange(field)
{
	var rowPrefix = field.id.substring(0,field.id.lastIndexOf("_"));
	var location = parseFloat(document.getElementById(rowPrefix + "_Location").value);
	var momentField = document.getElementById(rowPrefix + "_Moment");

	if (!isNaN(field.value))
	{
		var value = parseFloat(field.value);
		momentField.value = number_format_value(value * location);
	}
	else
		momentField.value = "0.00";	
}

/* WxBriefs */
var wxBrief_None = 0;
var wxBrief_AdverseWeather = 1;
var wxBrief_Metars = 2;
var wxBrief_WeatherTrends = 4;
var wxBrief_RadarReports = 8;
var wxBrief_PilotReports = 16;
var wxBrief_AreaForecasts = 32;
var wxBrief_Tafs = 64;
var wxBrief_WindsTemps = 128;
var wxBrief_Sigmets = 256;
var wxBrief_Airmets = 512;
var wxBrief_CenterAdvisories = 1024;
var wxBrief_ConvectiveSigmets = 2048;
var wxBrief_SevereWeather = 4096;
var wxBrief_HurricaneAdvisories = 8192;
var wxBrief_ConvectiveOutlook = 16384;
var wxBrief_Notams = 32768;
var wxBrief_FdcNotams = 65536;
var wxBrief_NonAssociatedFdcNotams = 131072;
var wxBrief_AtcDelayAdvisories = 262144;

//default options for WxBriefTypes
var wxBrief_OutlookOptions = wxBrief_AreaForecasts | wxBrief_Tafs | wxBrief_Sigmets | wxBrief_Airmets | wxBrief_CenterAdvisories | wxBrief_ConvectiveSigmets | wxBrief_ConvectiveOutlook;
var wxBrief_AbbreviatedOptions = wxBrief_Metars | wxBrief_RadarReports | wxBrief_PilotReports | wxBrief_Tafs | wxBrief_WindsTemps | wxBrief_Notams;

function wxBrief_briefType_onChange(prefix,setOptions)
{
	var field = document.getElementById(prefix + "_WxBriefType");
	if (field)
	{
		var value = field.value;
		var routeFields = document.getElementById(prefix + "_RouteFields");
		var areaFields = document.getElementById(prefix + "_AreaFields");
		var durationFields = document.getElementById(prefix + "_DurationFields");
		var basicOptionFields = document.getElementById(prefix + "_BasicOptionFields");
		var optionFields = document.getElementById(prefix + "_OptionFields");
		var stateCollectiveFields = document.getElementById(prefix + "_StateCollectiveFields");
		
		var isRoute = (value.indexOf("Route") >= 0);
		var needsDuration = (value.indexOf("Route") == -1 && value.indexOf("Area") == -1);
		
		//show/hide fields
		routeFields.style.display = isRoute ? "block" : "none";
		areaFields.style.display = (value.indexOf("Area") >= 0 || value == "AbbreviatedDefinedRadius") ? "block" : "none"; 
		durationFields.style.display = needsDuration ? "block" : "none";
		basicOptionFields.style.display = (value.indexOf("Standard") >= 0) ? "block" : "none";
		optionFields.style.display = (value.indexOf("Standard") == -1) ? "block" : "none";
		stateCollectiveFields.style.display = (value.indexOf("StateCollective") >= 0) ? "block" : "none";
		
		//enable/disable validators
		hoursMinutesFields_validatorsEnable(prefix + "_EstTimeEnRoute1",isRoute);
		hoursMinutesFields_validatorsEnable(prefix + "_EstTimeEnRoute2",needsDuration);
		
		//set default options for selection, unless otherwise directed
		if (setOptions)
			wxBrief_setDefaultOptions(prefix, value);
	}
}

function wxBrief_resetDefaultOptions(prefix)
{
	var field = document.getElementById(prefix + "_WxBriefType");
	if (field)
	{
		var value = field.value;
		wxBrief_setDefaultOptions(prefix, value);
	}
}

function wxBrief_setDefaultOptions(prefix, briefType)
{
	var o;
	
	//set options to use
	if (briefType.indexOf("Outlook") >= 0)
		o = wxBrief_OutlookOptions;
	else if (briefType.indexOf("Abbreviated") >= 0)
		o = wxBrief_AbbreviatedOptions;
	else
		o = wxBrief_None;
		
	//set options
	document.getElementById(prefix + "_IncludeMetar").checked = ((o & wxBrief_Metars) > 0);
	document.getElementById(prefix + "_IncludeTrends").checked = ((o & wxBrief_WeatherTrends) > 0);
	document.getElementById(prefix + "_IncludeRadar").checked = ((o & wxBrief_RadarReports) > 0);
	document.getElementById(prefix + "_IncludePirep").checked = ((o & wxBrief_PilotReports) > 0);
	document.getElementById(prefix + "_IncludeAf").checked = ((o & wxBrief_AreaForecasts) > 0);
	document.getElementById(prefix + "_IncludeTaf").checked = ((o & wxBrief_Tafs) > 0);
	document.getElementById(prefix + "_IncludeWinds").checked = ((o & wxBrief_WindsTemps) > 0);
	document.getElementById(prefix + "_IncludeSigmet").checked = ((o & wxBrief_Sigmets) > 0);
	document.getElementById(prefix + "_IncludeAirmet").checked = ((o & wxBrief_Airmets) > 0);
	document.getElementById(prefix + "_IncludeCenter").checked = ((o & wxBrief_CenterAdvisories) > 0);
	document.getElementById(prefix + "_IncludeConvectiveSigmet").checked = ((o & wxBrief_ConvectiveSigmets) > 0);
	document.getElementById(prefix + "_IncludeSevere").checked = ((o & wxBrief_SevereWeather) > 0);
	document.getElementById(prefix + "_IncludeHurricane2").checked = ((o & wxBrief_HurricaneAdvisories) > 0);
	document.getElementById(prefix + "_IncludeConvectiveOutlook").checked = ((o & wxBrief_ConvectiveOutlook) > 0);
	document.getElementById(prefix + "_IncludeNotam").checked = ((o & wxBrief_Notams) > 0);
	document.getElementById(prefix + "_IncludeFdcNotam").checked = ((o & wxBrief_FdcNotams) > 0);
	document.getElementById(prefix + "_IncludeNaNotam").checked = ((o & wxBrief_NonAssociatedFdcNotams) > 0);
	document.getElementById(prefix + "_IncludeAtc").checked = ((o & wxBrief_AtcDelayAdvisories) > 0);
}

function wxBrief_setSection(prefix,index)
{
	var indexField = document.getElementById(prefix + "_SectionIndex");
	if (indexField)
	{
		var oldIndex = indexField.value;
		
		//hide old section
		var section = document.getElementById(prefix + "_Section" + oldIndex);
		if (section)
			section.className = "BriefSection";
		
		//show new section
		section = document.getElementById(prefix + "_Section" + index);
		if (section)
			section.className = "ActiveBriefSection";
			
		//set index
		wxMaps_list_setSelected(prefix,"SectionList","SectionName" + index);
		indexField.value = index;
	}
}

function wxBrief_toggleAll(prefix,showAll)
{
	var brief = document.getElementById(prefix + "_WxBrief");
	if (brief)
	{
		if (showAll)
			field_addClassName(brief, "ShowAllWxBrief");
		else
			field_removeClassName(brief, "ShowAllWxBrief");
	
		//set link classes
		var link = document.getElementById(prefix + "_ShowAllLink");
		if (link) {link.style.display = showAll ? "none" : "inline";}
		link = document.getElementById(prefix + "_ShowCurrentLink");
		if (link) {link.style.display = showAll ? "inline" : "none";}
		
		document.getElementById(prefix + "_ShowAll").value = showAll;
	}
}

/* Weather */
function wxMaps_list_setSelected(prefix,listName,selection)
{
	var list = document.getElementById(prefix + "_" + listName);
	if (list)
	{
		//clear class on options
		var links = list.getElementsByTagName("a");
		for (var i = 0; i < links.length; i++)
			{links[i].className = "";}
		
		//set Selected link
		var link = document.getElementById(prefix + "_" + selection);
		if (link)
			{link.className = "Selected";}
	}
}

/* Weather/AirSigments.ascx */
function wxMaps_sigmets_setMap(prefix,map)
{
	var selection = document.getElementById(prefix + "_Selection");
	var img = document.getElementById(prefix + "_Image");
	
	//if map is not provided, get it from hidden field
	if (!map)
		map = selection.value;
	
	//set map url, update list, save selection
	if (map != "CW")
	{
		img.src = "http://adds.aviationweather.gov/data/airmets/airmets_" + map + ".gif";
		img.width = 680;
		img.height = 680;
	}
	else
	{
		img.src = "http://www.spc.noaa.gov/products/watch/validww.png";
		img.width = 582;
		img.height = 408;
	}
	wxMaps_list_setSelected(prefix,"List",map);
	selection.value = map;
}

/* Weather/FreezingLevels.ascx */
function wxMaps_freezing_setMap(prefix,map)
{
	var selection = document.getElementById(prefix + "_Selection");
	var img = document.getElementById(prefix + "_Image");
	
	//if map is not provided, get it from hidden field
	if (!map)
		map = selection.value;
	
	//set map url, update list, save selection
	img.src = "http://adds.aviationweather.gov/data/icing/ruc" + map + "hr_lvl_frzg.gif";
	wxMaps_list_setSelected(prefix,"List",map);
	selection.value = map;
}

/* Weather/ProgCharts.ascx */
function wxMaps_prog_setMap(prefix,map)
{
	var selection = document.getElementById(prefix + "_Selection");
	var img = document.getElementById(prefix + "_Image");
	
	//if map is not provided, get it from hidden field
	if (!map)
		map = selection.value;
	
	//set map url, update list, save selection
	img.src = "http://adds.aviationweather.gov/data/progs/hpc_" + map + ".gif";
	wxMaps_list_setSelected(prefix,"List",map);
	selection.value = map;
}

/* Weather/Radar.aspx */
function wxMaps_radar_setMap(prefix,map,width,height)
{
	var selection = document.getElementById(prefix + "_Selection");
	var img = document.getElementById(prefix + "_Image");
	
	//if map is not provided, get it from hidden field
	if (!map)
		map = selection.value;
	
	//set map url, update list, save selection
	img.src = "http://radar.weather.gov/Conus/Loop/" + map + ".gif";
	if (width) img.width = width;
	if (height) img.height = height;
	wxMaps_list_setSelected(prefix,"NationalList",map);
	wxMaps_list_setSelected(prefix,"NorthernList",map);
	wxMaps_list_setSelected(prefix,"SouthernList",map);
	selection.value = map;
}

/* Weather/Pireps.ascx */
function wxMaps_pireps_setRegion(prefix,region)
{
	var selection = document.getElementById(prefix + "_RegionSelection");
	
	//save selection, set map
	selection.value = region;
	wxMaps_pireps_setMap(prefix);
}

function wxMaps_pireps_setMap(prefix)
{
	var typeSelection = document.getElementById(prefix + "_TypeSelection");
	var regionSelection = document.getElementById(prefix + "_RegionSelection");
	var img = document.getElementById(prefix + "_Image");	

	//set map url
	if (typeSelection && regionSelection && img)
	{
		img.src = "http://adds.aviationweather.gov/data/pireps/pireps_" + regionSelection.value + "_" + typeSelection.value + ".gif";
	
		//set selected list items	
		wxMaps_list_setSelected(prefix,"TypeList",typeSelection.value);
		wxMaps_list_setSelected(prefix,"RegionList",regionSelection.value);
	}
}

function wxMaps_pireps_setType(prefix,type)
{
	var selection = document.getElementById(prefix + "_TypeSelection");
	
	//save selection, set map
	selection.value = type;	
	wxMaps_pireps_setMap(prefix);
}

/* Weather/WindsAloft.ascx */
function wxMaps_winds_setAlt(prefix,alt)
{
	var selection = document.getElementById(prefix + "_AltSelection");
	
	//save selection, set map
	wxMaps_list_setSelected(prefix,"AltList",alt);
	selection.value = alt;
	wxMaps_winds_setMap(prefix);
}

function wxMaps_winds_setMap(prefix)
{
	var typeSelection = document.getElementById(prefix + "_TypeSelection");
	var altSelection = document.getElementById(prefix + "_AltSelection");
	var timeSelection = document.getElementById(prefix + "_TimeSelection");
	var img = document.getElementById(prefix + "_Image");	
	
	//set map url
	if (typeSelection && altSelection && timeSelection && img)
	{
		img.src = "http://adds.aviationweather.gov/data/winds/" + timeSelection.value + "hr_" + altSelection.value + "_" + typeSelection.value + ".gif";
		
		//set selected list items	
		wxMaps_list_setSelected(prefix,"TypeList",typeSelection.value);
		wxMaps_list_setSelected(prefix,"AltList",altSelection.value);
		wxMaps_list_setSelected(prefix,"TimeList",timeSelection.value);
	}
}

function wxMaps_winds_setTime(prefix,time)
{
	var selection = document.getElementById(prefix + "_TimeSelection");
	
	//save selection, set map
	selection.value = time;
	wxMaps_winds_setMap(prefix);
}

function wxMaps_winds_setType(prefix,type)
{
	var selection = document.getElementById(prefix + "_TypeSelection");
	
	//save selection, set map
	selection.value = type;	
	wxMaps_winds_setMap(prefix);
}
