
 var features = new Array();

features["MoveableBridge"]			= {description: "Bridges, moveable",				hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["OverheadBridge"]			= {description: "Bridges, overhead",				hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Bridge"]					= {description: "Bridges, other",					hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Subway"]					= {description: "Bridges, subway",					hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Building"]				= {description: "Buildings",						hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["RailwayCrossing"]			= {description: "Crossings, railway",				hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["RoadCrossing"]			= {description: "Crossings, road",					hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Crossover"]				= {description: "Crossovers",						hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["EndOfSteel"]				= {description: "End-of-Steel",						hide: false, inListing: false, neverHide: true,  meta: false, inTimeTable: true };
features["Junction"]				= {description: "Junctions, CNR",					hide: false, inListing: false, neverHide: true,  meta: false, inTimeTable: true };
features["ForeignJunction"]			= {description: "Junctions, foreign railway",		hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["NonTimetableJunction"]	= {description: "Junction, not in timetable",		hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["CityLimit"]				= {description: "Limits, city",						hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["RegionLimit"]				= {description: "Limits, operating regions",		hide: false, inListing: false, neverHide: true,  meta: false, inTimeTable: true };
features["MailCatch"]				= {description: "Mail catch",						hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Flag"]					= {description: "Flag stop",						hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["OtherTrack"]				= {description: "Other tracks",						hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["NonTimetableOtherTrack"]	= {description: "Other tracks, not in timetable",	hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Station"]					= {description: "Stations",							hide: false, inListing: false, neverHide: true,  meta: false, inTimeTable: true };
features["NonTimetableStation"]		= {description: "Stations, not in timetable",		hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Phone"]					= {description: "Telephone",						hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Tunnel"]					= {description: "Tunnel",							hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};
features["Water"]					= {description: "Water",							hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: true };
features["Wye"]						= {description: "Wye",								hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: true };
features["Other"]					= {description: "Other features",					hide: false, inListing: false, neverHide: false, meta: false, inTimeTable: false};

// meta features

features["NotOntario"]				= {description: "Not in Ontario",					hide: false, inListing: false, neverHide: false, meta: true , inTimeTable: false};
features["Removed"]					= {description: "Removed prior to 1954",			hide: false, inListing: false, neverHide: false, meta: true , inTimeTable: false};
features["Future"]					= {description: "Added after 1954",					hide: false, inListing: false, neverHide: false, meta: true , inTimeTable: false};

function FeaturesInListing()
//******************************************************************************
//	Description:
//		Determines all the features appearing in the station listing.
//	Parameters:
//		None.
//	Return Values:
//		The number of features appears in the station listing.
//	Function References
//		getElementsByTagName (document method)
//		split (string method)
//	Global References:
//		document
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//******************************************************************************
	{
	var object = document.getElementsByTagName("TR");
	var n = 0;
		
	for (var i = 0; i < object.length; i++)
		{
		var classNames = object[i].className.split("_");

		for (var j = 0; j < classNames.length; j++)
			if (features[classNames[j]] != undefined && !features[classNames[j]].inListing)
				{
				features[classNames[j]].inListing = true;
				n++;
				}
		}
	return n;
	}

function IsFiltered()
//******************************************************************************
//	Description:
//		Determines if the station listing has been filtered.
//	Parameters:
//		None.
//	Return Values:
//		True if one or more features is being filtered.
//	Function References
//		None.
//	Global References:
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//******************************************************************************
	{
	for (feature in features)
		if (features[feature].hide)
			return true;
	return false;	
	}

function FilterRows()
//******************************************************************************
//	Description:
//		Called when page is loaded; Hides rows in station listing according to
//	fitler.
//	Parameters:
//		None.
//	Return Values:
//		None.
//	Function References
//		getElementById (document method)
//		getElementsByTagName (document method)
//		GetFilter
//		split (string method)
//	Global References:
//		document
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//******************************************************************************
	{
	GetFilter();

	var object = document.getElementsByTagName("TR");
		
	for (var i = 0; i < object.length; i++)
		{
		var classNames = object[i].className.split("_");
		var future = false;
		var metaShow = true;
		var notOntario = false;
		var removed = false;
		var show = false;

		for (var j = 0; j < classNames.length; j++)
			{
			if (classNames[j] == "Removed")
				removed = true;
			else if (classNames[j] == "Future")
				future = true;
			else if (classNames[j] == "NotOntario")
				notOntario = true;
			if (features[classNames[j]] != undefined)
				{	
				if (features[classNames[j]].meta)
					metaShow = metaShow & !features[classNames[j]].hide;
				else
					show = show | !features[classNames[j]].hide;
				}
			else
				show = true;
			}
		object[i].style.display = (show & metaShow) ? '' : 'none';
		if (object[i].style.display != 'none')
			{
			if (notOntario || removed)
				object[i].style.color = 'gray';
			else if (future)
				object[i].style.color = 'green';
			if (removed)
				object[i].style.backgroundColor = '#FFC0C0';
			else if (future)
				object[i].style.backgroundColor = '#CCFFC0';
			}
		}

	var flag = document.getElementById("FilteredFlag");
	if (flag != null)
		flag.style.display = IsFiltered() ? '' : 'none';
	}

function ApplyFilter()
//******************************************************************************
//	Description:
//		Called when the "Apply" button is clicked. Saves filter setting cookie
//		then filters station listing.
//	Parameters:
//		None.
//	Return Values:
//		None.
//	Function References
//		SetFilter
//	Global References:
//		document
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//******************************************************************************
	{
	featuresToHide = new Array();

	for (var i = 0; i < document.filter.feature.length; i++)
		features[document.filter.feature[i].value].hide = !document.filter.feature[i].checked;
	SetFilter();
	FilterRows();
	}

function SetTimeTableFilter()
//******************************************************************************
//	Description:
//		Called when the "Per Time Table Stations" button is clicked. Saves filter setting cookie
//		then filters station listing.
//	Parameters:
//		None.
//	Return Values:
//		None.
//	Function References
//		FilterRows
//		SetFilter
//	Global References:
//		document
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//******************************************************************************
	{
	for (i = 0; i < document.filter.feature.length; i++)
		{
		features[document.filter.feature[i].value].hide = !features[document.filter.feature[i].value].inTimeTable;
		document.filter.feature[i].checked = !features[document.filter.feature[i].value].inTimeTable;
		}
	SetFilter();
//	FilterRows();
	}

function GetFilter()
//******************************************************************************
//	Description:
//		Sets filter according to cookie.
//	Parameters:
//		None.
//	Return Values:
//		None.
//	Function References
//		GetCookie (common.js)
//		split (string method)
//	Global References:
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//		1.01 2010-12-03 by Jeffrey P. Smith
//			a. Default is per time table.
//******************************************************************************
	{
	var stationFilter;

	if ((stationFilter = GetCookie("StationFilter")) == null)
		{
		for (var feature in features)
			features[feature].hide = !features[feature].inTimeTable;
		SetFilter();
		}
	else
		{
		var featuresToHide = GetCookie("StationFilter").split(" ");

		for (var i = 0; i < featuresToHide.length; i++)
			if (features[featuresToHide[i]] != undefined)
				features[featuresToHide[i]].hide = true;
		}
	}

function SetFilter()
//******************************************************************************
//	Description:
//		Creates filter cookie.
//	Parameters:
//		None.
//	Return Values:
//		None.
//	Function References
//		SetCookie (common.js)
//	Global References:
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//******************************************************************************
	{
	var value = "";
	var n = 0;

	for (var feature in features)
		{
		if (features[feature].hide)
			{
			if (n)
				value += " ";
			value += feature;
			n++;
			}
		}
	//alert("StationFilter: " + value);
	SetCookie("StationFilter", value, 30);
	}

function FilterForm(all)
//******************************************************************************
//	Description:
//		Generates the HTML for the filter form.
//	Parameters:
//		None.
//	Return Values:
//		None.
//	Function References
//		GetFilter
//		write (document method)
//	Global References:
//		document
//		features
//	Revision History:
//		1.00 2010-12-02 by Jeffrey P. Smith
//			a. Documented.
//******************************************************************************
	{
	if (typeof all == "undefined")
		all = false; 
	GetFilter();
		document.write("<div id=\"Filter\"\ align=\"center\"><form name=\"filter\"><table><caption>Location&nbsp;types&nbsp;to&nbsp;display</caption>");
	if (all || FeaturesInListing())
		{
		for (feature in features)
			if (all || features[feature].inListing)
				document.write("<tr>"
					     + "<td align=\"right\">" + features[feature].description + "</td>"
					     + "<td><input name=\"feature\" type=\"checkbox\" value=\"" + feature + "\"" + (features[feature].hide ? "" : " checked")+ (features[feature].neverHide ? " disabled" : "") + "></td>"
					     + "</tr>"
					      );
		document.write("<tr align=\"center\"><td colspan=\"2\">"
			     + "<input type=\"submit\" value=\"Per Time Table Stations\" onClick=\"SetTimeTableFilter();\">"
			     + " " 
			     + "<input type=\"submit\" value=\"Apply\" onClick=\"ApplyFilter();\">"
			     + "</td></tr>"
			      );
		}
	else
		document.write("<tr><td>Not available for this subdivision.</td></tr>");		
	document.write("</table></form></div>");
	}

