
/*
Create a TopicCategorySelector namespace.
*/
var TCS = new Object();

/*
Initialise the default selections.
*/
TCS.Initialise = function (prefix, topicId, categoryId, subCategoryId)
{
	// Update each topic list
	for(var i = 0; i < TCS.topicTypes.length; i++)
	{
		var ddlTopic = document.getElementById(prefix + 'ddlTopic' + TCS.topicTypes[i]);

		// Select the default value by default		
		ddlTopic.selectedIndex = 0;

		if(topicId != "")
		{
			// Search for the topic that should be selected
			for(var j = 0; j < ddlTopic.options.length; j++)
			{
				if(ddlTopic.options[j].value == topicId)
				{
					// Select it
					ddlTopic.options[j].selected = true;
					
					// Populate the categories
					TCS.TopicChanged(prefix, TCS.topicTypes[i]);
					break;
				}
			}
		}
	}

	// If no topic was selected populate the default categories	
	if(topicId == "")
		TCS.TopicChanged(prefix, 0);
		
	// Update each category list
	for(var i = 0; i < TCS.categoryTypes.length; i++)
	{
		var ddlCategory = document.getElementById(prefix + 'ddlCategory' + TCS.categoryTypes[i].id);
		
		// Select the default value by default
		ddlCategory.selectedIndex = 0;
		
		if(categoryId != "")
		{
			// Search for the category that should be selected
			for(var j = 0; j < ddlCategory.options.length; j++)
			{
				if(ddlCategory.options[j].value == categoryId)
				{
					// Select it
					ddlCategory.options[j].selected = true;
					
					// Populate the subcategories
					TCS.CategoryChanged(prefix, TCS.categoryTypes[i].id);
					break;
				}
			}
		}
	}
	
	// If no category was selected the subcategories can stay empty
	if(categoryId == "")
		return;
		
	// Select the appropriate subcategory
	if(subCategoryId != "")
	{
		for(var i = 0; i < TCS.categoryTypes.length; i++)
		{
			var ddlSubCategory = document.getElementById(prefix + 'ddlSubCategory' + TCS.categoryTypes[i].id);
			
			// Select the default value by default
			ddlSubCategory.selectedIndex = 0;
			
			// Search for the subcategory that should be selected
			for(var j = 0; j < ddlSubCategory.options.length; j++)
			{
				if(ddlSubCategory.options[j].value == subCategoryId)
				{
					// Select it
					ddlSubCategory.options[j].selected = true;
					break;
				}
			}
		}
	}
}

/*
Create a new map thats lists the valid sub-categories for a set of categories.
	categoryId		Unique ID used to identify this category.
	subCategoryIds	Unique IDs for each sub-category valid in this category.
*/
TCS.Map = function (categoryId, subCategoryIds)
{
	this.categoryId = categoryId;
	this.subCategoryIds = subCategoryIds;
}

// Maps for use when no topic is selected.
TCS.defaultMaps = [new TCS.Map(127,[762,914,915]),new TCS.Map(128,[768,769,770,776,771,772,773,774,775,777,778]),new TCS.Map(140,[916,853,854,917,855,856,857,858]),new TCS.Map(129,[779,781,780,783,782,784,918]),new TCS.Map(131,[793,794,922,795,796,797,798,799,800,801,802,803,804,805,912,807]),new TCS.Map(124,[740,742,927,745,746,748,929,749,751,750,752]),new TCS.Map(132,[808,923,809]),new TCS.Map(130,[785,919,920,786,787,790,788,789,921,791,792]),new TCS.Map(141,[859,860,861,862,863]),new TCS.Map(123,[739,733,734,735,736,737,738]),new TCS.Map(134,[813,814,815,816,903,817,819,818]),new TCS.Map(135,[823,824,826,827,820]),new TCS.Map(136,[828,830,829,831]),new TCS.Map(145,[892,893,897,926,898]),new TCS.Map(137,[832,833,834,835,836,930,837,838]),new TCS.Map(138,[839,840,841,842,843,844,845]),new TCS.Map(139,[846,847,848,849,850,851,852,928]),new TCS.Map(142,[864,865,866,867,868,869,870,871,872]),new TCS.Map(143,[873,874,875,931,876,877,878,879,880,881,882,884]),new TCS.Map(144,[885,886,887,888,889,890,891]),new TCS.Map(126,[759,761]),new TCS.Map(146,[899,900,901,902])];

// The available topic types	
TCS.topicTypes = [31];

/*
Create a new topic.
	id				Unique Id used to identify this topic.
	type			Unique Id of the topic type collection this topic belongs to.
	name			Regionalised name of this topic.
	map				A collection of Maps to valid categories and sub-categories.
*/
TCS.Topic = function (id, maps)
{
	this.id = id;
	this.maps = maps;
}

/*
Returns the topic with the given Id if it exists.
*/
TCS.GetTopicById = function (id)
{
	for(var i = 0; i < TCS.topics.length; i++)
		if(TCS.topics[i].id == id)
			return TCS.topics[i];

	return null;
}

// The available topics.
TCS.topics = [new TCS.Topic(9,[new TCS.Map(127,[762,914,915]),new TCS.Map(128,[776,772,773,774]),new TCS.Map(129,[779,781,780,783,782,784,918]),new TCS.Map(131,[797]),new TCS.Map(124,[740,742,745,749,752]),new TCS.Map(132,[808,809]),new TCS.Map(130,[785,920,786,788,791,792]),new TCS.Map(123,[739,733,734,735,736,737]),new TCS.Map(134,[816,817]),new TCS.Map(145,[892,926,898]),new TCS.Map(137,[835,836,930,838]),new TCS.Map(138,[839,840,842]),new TCS.Map(139,[846,847,848,849,850,851,852,928]),new TCS.Map(142,[864,865,871]),new TCS.Map(143,[877,881]),new TCS.Map(146,[900,901])]),new TCS.Topic(11,[new TCS.Map(140,[853,917]),new TCS.Map(135,[824])]),new TCS.Topic(12,[new TCS.Map(128,[768,769,770,771,772,773]),new TCS.Map(140,[853,917,855,857,858]),new TCS.Map(129,[779,781,780,782,784,918]),new TCS.Map(131,[793,795,796,797,803,804,805,912]),new TCS.Map(124,[740,927,748,929,749,750]),new TCS.Map(132,[808]),new TCS.Map(130,[785,786,787,921,791,792]),new TCS.Map(123,[739,733,734,735,736,737]),new TCS.Map(134,[813,814,816,817,818]),new TCS.Map(135,[823,824,827,820]),new TCS.Map(136,[828,830,829,831]),new TCS.Map(145,[897,926,898]),new TCS.Map(137,[832,835,836,838]),new TCS.Map(138,[839,840,841,842,843,844,845]),new TCS.Map(139,[850,851,852]),new TCS.Map(142,[864,865,870,871]),new TCS.Map(143,[874,875,876,877,878,881,882,884]),new TCS.Map(144,[885,886]),new TCS.Map(126,[759]),new TCS.Map(146,[900,901,902])]),new TCS.Topic(13,[new TCS.Map(127,[762,915]),new TCS.Map(128,[768,769,770,776,771,772,773,774,775,777,778]),new TCS.Map(140,[853,917,855,856,857]),new TCS.Map(129,[781,780,782,784,918]),new TCS.Map(131,[794,795,796,797,803,804,912,807]),new TCS.Map(124,[740,742,927,749]),new TCS.Map(132,[808,809]),new TCS.Map(130,[785,919,920,786,787,790,788,789,921,791,792]),new TCS.Map(141,[859,861,863]),new TCS.Map(123,[739,733,734,735,736]),new TCS.Map(134,[814,816,818]),new TCS.Map(145,[893,897,898]),new TCS.Map(137,[834,835,836,838]),new TCS.Map(138,[840,841,842,843,845]),new TCS.Map(139,[849,850,851,852]),new TCS.Map(142,[864,865]),new TCS.Map(143,[875,876,877]),new TCS.Map(144,[886,891]),new TCS.Map(126,[759]),new TCS.Map(146,[899,900,901])]),new TCS.Topic(14,[new TCS.Map(127,[762,914,915]),new TCS.Map(128,[768,769,770,776,771,772,773,774,775,778]),new TCS.Map(140,[916,853,854,917,855,856,857,858]),new TCS.Map(129,[779,781,780,783,782,784,918]),new TCS.Map(131,[793,794,795,796,797,798,799,800,801,802,803,804,805,912]),new TCS.Map(124,[740,742,927,745,748,929,749,751,752]),new TCS.Map(132,[808,809]),new TCS.Map(130,[786,787,788,921,791,792]),new TCS.Map(141,[859,861,863]),new TCS.Map(123,[739,733,735,736,737,738]),new TCS.Map(134,[813,814,815,816,903,817,819,818]),new TCS.Map(135,[823,824]),new TCS.Map(136,[830,829,831]),new TCS.Map(145,[897,926,898]),new TCS.Map(137,[832,834,835,836,838]),new TCS.Map(138,[839,840,841,842,843]),new TCS.Map(139,[846,847,848,849,850,851,852]),new TCS.Map(142,[864,865,866,867,868,869,870,871,872]),new TCS.Map(143,[873,874,875,931,876,877,878,879,881,882,884]),new TCS.Map(144,[885,886,887,888,889,890,891]),new TCS.Map(126,[759,761]),new TCS.Map(146,[899,900,901,902])]),new TCS.Topic(15,[new TCS.Map(128,[768,770,772]),new TCS.Map(123,[739,735,736,737]),new TCS.Map(143,[874,931,876,878,879,882])]),new TCS.Topic(16,[new TCS.Map(127,[762]),new TCS.Map(128,[768,769,770,771,772,773,774]),new TCS.Map(140,[917,857]),new TCS.Map(129,[779,781,780,783,782,784,918]),new TCS.Map(131,[922,795,796,797,803,804,805,912]),new TCS.Map(124,[740,742]),new TCS.Map(132,[808,923,809]),new TCS.Map(130,[785,919,920,786,787,790,788,789,921,791,792]),new TCS.Map(141,[859,861,863]),new TCS.Map(123,[739,733,735,736,737]),new TCS.Map(134,[814,816,817,819,818]),new TCS.Map(135,[823]),new TCS.Map(136,[828,830,829,831]),new TCS.Map(145,[897,926,898]),new TCS.Map(137,[832,833,834,835,836,838]),new TCS.Map(138,[839,840,841,842,843,844,845]),new TCS.Map(139,[849,850,851,852,928]),new TCS.Map(142,[864]),new TCS.Map(143,[874,875,931,877,878,879,880,882]),new TCS.Map(144,[885,886,887,888,889,890,891]),new TCS.Map(126,[759]),new TCS.Map(146,[899,900,901,902])]),new TCS.Topic(17,[new TCS.Map(127,[762]),new TCS.Map(141,[860,862]),new TCS.Map(123,[739,734,735,736,737]),new TCS.Map(135,[826]),new TCS.Map(137,[838]),new TCS.Map(138,[840,841,844,845]),new TCS.Map(143,[878]),new TCS.Map(144,[886]),new TCS.Map(126,[759])]),new TCS.Topic(18,[new TCS.Map(124,[740]),new TCS.Map(123,[739,734,735,737,738]),new TCS.Map(146,[899])]),new TCS.Topic(19,[]),new TCS.Topic(20,[new TCS.Map(127,[762]),new TCS.Map(124,[740,742,749]),new TCS.Map(141,[860,862]),new TCS.Map(123,[739,734,735,736,737,738]),new TCS.Map(135,[826]),new TCS.Map(137,[837,838]),new TCS.Map(138,[840,841,844,845]),new TCS.Map(143,[878]),new TCS.Map(144,[886])]),new TCS.Topic(21,[new TCS.Map(123,[739,734,735,736,737,738]),new TCS.Map(137,[837]),new TCS.Map(138,[839,840,841,842,843,844]),new TCS.Map(126,[759])]),new TCS.Topic(22,[new TCS.Map(127,[915]),new TCS.Map(140,[917]),new TCS.Map(124,[740,927,745,746,749]),new TCS.Map(123,[739,734,735,736,737]),new TCS.Map(134,[817,818]),new TCS.Map(135,[823,824]),new TCS.Map(136,[830]),new TCS.Map(138,[842]),new TCS.Map(143,[874,880,881,884]),new TCS.Map(146,[900])]),new TCS.Topic(23,[new TCS.Map(129,[779,780,783,784,918]),new TCS.Map(124,[742,749]),new TCS.Map(141,[860,862]),new TCS.Map(123,[739,733,734,735,736,738]),new TCS.Map(145,[897,898]),new TCS.Map(137,[837]),new TCS.Map(138,[842]),new TCS.Map(126,[759]),new TCS.Map(146,[900])])];

/*
Create a new category type.
	id				Unique Id of this category type.
	name			Regionalised name of this category type.
*/	
TCS.CategoryType = function (id, name)
{
	this.id = id;
	this.name = name;
}

// The available category types.
TCS.categoryTypes = [new TCS.CategoryType(21,"Select a category")];

/*
Create a new category.
	id				Unique Id used to identify this category.
	type			Unique Id of the category type collection this category belongs to.
	name			Regionalised name of this category.
*/
TCS.Category = function (id, type, name)
{
	this.id = id;
	this.type = type;
	this.name = name;
}

/*
Returns the category with the given Id if it exists.
*/
TCS.GetCategoryById = function (id)
{
	for(var i = 0; i < TCS.categories.length; i++)
		if(TCS.categories[i].id == id)
			return TCS.categories[i];

	return null;
}

// The available categories.
TCS.categories = [new TCS.Category(127,21,"Accessories"),new TCS.Category(128,21,"Appliances"),new TCS.Category(140,21,"Audio visual"),new TCS.Category(129,21,"Bathroomware"),new TCS.Category(131,21,"Building materials"),new TCS.Category(124,21,"Building services"),new TCS.Category(132,21,"Cabinetry & shelving"),new TCS.Category(130,21,"Countertop/surfaces"),new TCS.Category(141,21,"Culinary & dining"),new TCS.Category(123,21,"Design"),new TCS.Category(134,21,"Doors & windows"),new TCS.Category(135,21,"Electrical control"),new TCS.Category(136,21,"Fabrics"),new TCS.Category(145,21,"Faucets & hardware"),new TCS.Category(125,21,"Financial services"),new TCS.Category(137,21,"Flooring"),new TCS.Category(138,21,"Furniture"),new TCS.Category(139,21,"Heating & cooling"),new TCS.Category(142,21,"Lighting"),new TCS.Category(143,21,"Outdoors"),new TCS.Category(144,21,"Paints & varnishes"),new TCS.Category(126,21,"Property services"),new TCS.Category(146,21,"Wall coverings")];

/*
Create a new subcategory.
	id				Unique Id used to identify this subcategory.
	type			Unique Id of the subcategory type collection this subcategory belongs to.
	name			Regionalised name of this subcategory.
*/
TCS.SubCategory = function (id, name)
{
	this.id = id;
	this.name = name;
}

/*
Returns the sub-category with the given Id if it exists.
*/
TCS.GetSubCategoryById = function (id)
{
	for(var i = 0; i < TCS.subCategories.length; i++)
		if(TCS.subCategories[i].id == id)
			return TCS.subCategories[i];

	return null;
}

// The available subcategories
TCS.subCategories = [new TCS.SubCategory(740,"Building services"),new TCS.SubCategory(756,"Finance"),new TCS.SubCategory(759,"Property developers"),new TCS.SubCategory(768,"Cooktops"),new TCS.SubCategory(762,"Artworks"),new TCS.SubCategory(779,"Sinks"),new TCS.SubCategory(785,"Solid surfaces"),new TCS.SubCategory(793,"Adhesives & sealants"),new TCS.SubCategory(808,"Cabinetry & joinery"),new TCS.SubCategory(813,"Door closers"),new TCS.SubCategory(821,"Computers"),new TCS.SubCategory(828,"Bed linen"),new TCS.SubCategory(832,"Carpet & rugs"),new TCS.SubCategory(839,"Bedroom"),new TCS.SubCategory(846,"Air conditioning"),new TCS.SubCategory(859,"Cookware"),new TCS.SubCategory(860,"Crockery"),new TCS.SubCategory(861,"Cutlery"),new TCS.SubCategory(862,"Glassware"),new TCS.SubCategory(863,"Kitchen equipment"),new TCS.SubCategory(864,"Decorative"),new TCS.SubCategory(873,"Buildings"),new TCS.SubCategory(885,"Exterior paints"),new TCS.SubCategory(892,"Pulls & slides"),new TCS.SubCategory(899,"Moldings"),new TCS.SubCategory(916,"Acoustics"),new TCS.SubCategory(919,"Coatings"),new TCS.SubCategory(923,"Retail shelving"),new TCS.SubCategory(900,"Panelling"),new TCS.SubCategory(830,"Drapes & blinds"),new TCS.SubCategory(914,"Bathroom"),new TCS.SubCategory(893,"Hinges"),new TCS.SubCategory(886,"Interior paints"),new TCS.SubCategory(874,"Decking"),new TCS.SubCategory(865,"Display"),new TCS.SubCategory(847,"Dehumidifiers"),new TCS.SubCategory(853,"Audio"),new TCS.SubCategory(840,"Custom"),new TCS.SubCategory(833,"Concrete"),new TCS.SubCategory(822,"Dumb waiters"),new TCS.SubCategory(814,"Doors"),new TCS.SubCategory(794,"Beams & joists"),new TCS.SubCategory(781,"Bathroom suites"),new TCS.SubCategory(769,"Dishwashers"),new TCS.SubCategory(739,"Architecture"),new TCS.SubCategory(761,"Property managers"),new TCS.SubCategory(757,"Insurance"),new TCS.SubCategory(742,"Cabinet makers"),new TCS.SubCategory(733,"Bathroom"),new TCS.SubCategory(741,"Carpet fitters"),new TCS.SubCategory(760,"Real estate agents"),new TCS.SubCategory(770,"Canopy hoods"),new TCS.SubCategory(780,"Tubs"),new TCS.SubCategory(763,"Office"),new TCS.SubCategory(815,"Garage doors"),new TCS.SubCategory(823,"Electronic control"),new TCS.SubCategory(829,"Cushions & throws"),new TCS.SubCategory(834,"Laminate"),new TCS.SubCategory(841,"Dining"),new TCS.SubCategory(854,"Cameras"),new TCS.SubCategory(848,"Ducting"),new TCS.SubCategory(866,"Emergency"),new TCS.SubCategory(875,"Gates & fencing"),new TCS.SubCategory(887,"Painting tools"),new TCS.SubCategory(897,"Kitchen sinks"),new TCS.SubCategory(901,"Wall tiles"),new TCS.SubCategory(924,"Shop fittings"),new TCS.SubCategory(920,"Concrete"),new TCS.SubCategory(922,"Building equipment"),new TCS.SubCategory(931,"Landscape supplies"),new TCS.SubCategory(917,"Home theater"),new TCS.SubCategory(926,"Shower fittings"),new TCS.SubCategory(927,"Consultants"),new TCS.SubCategory(902,"Wallpaper"),new TCS.SubCategory(915,"Ornaments"),new TCS.SubCategory(831,"Upholstery"),new TCS.SubCategory(888,"Specialist paints"),new TCS.SubCategory(867,"Lamps"),new TCS.SubCategory(849,"Fans"),new TCS.SubCategory(842,"Kitchen"),new TCS.SubCategory(835,"Slate & stone"),new TCS.SubCategory(824,"Home automation"),new TCS.SubCategory(816,"Glass & glazing"),new TCS.SubCategory(809,"Closets & Storage"),new TCS.SubCategory(795,"Ceilings & partitions"),new TCS.SubCategory(776,"Laundry"),new TCS.SubCategory(783,"Shower enclosures"),new TCS.SubCategory(786,"Engineered stone"),new TCS.SubCategory(734,"Commercial"),new TCS.SubCategory(735,"Interior"),new TCS.SubCategory(743,"Drainage"),new TCS.SubCategory(771,"Microwaves"),new TCS.SubCategory(787,"Glass"),new TCS.SubCategory(765,"Safes"),new TCS.SubCategory(796,"Siding"),new TCS.SubCategory(825,"Elevators"),new TCS.SubCategory(836,"Tiles"),new TCS.SubCategory(843,"Living room"),new TCS.SubCategory(850,"Fires"),new TCS.SubCategory(855,"Projectors"),new TCS.SubCategory(868,"Light bulbs"),new TCS.SubCategory(889,"Stains"),new TCS.SubCategory(898,"Faucets"),new TCS.SubCategory(876,"Outdoor cooking"),new TCS.SubCategory(903,"Security"),new TCS.SubCategory(877,"Outdoor equipment"),new TCS.SubCategory(890,"Undercoats & primers"),new TCS.SubCategory(869,"Neon signage"),new TCS.SubCategory(856,"Recreational games"),new TCS.SubCategory(851,"Heating systems"),new TCS.SubCategory(844,"Office"),new TCS.SubCategory(826,"Office equipment"),new TCS.SubCategory(797,"Concrete"),new TCS.SubCategory(790,"Laminate"),new TCS.SubCategory(817,"Louvers & blinds"),new TCS.SubCategory(766,"Signage"),new TCS.SubCategory(782,"Whirlpools"),new TCS.SubCategory(772,"Ovens"),new TCS.SubCategory(744,"Draftsmen"),new TCS.SubCategory(736,"Kitchen"),new TCS.SubCategory(930,"Underfloor heating"),new TCS.SubCategory(737,"Landscape"),new TCS.SubCategory(745,"Electricians"),new TCS.SubCategory(773,"Refrigeration"),new TCS.SubCategory(784,"Toilets"),new TCS.SubCategory(788,"Granite & marble"),new TCS.SubCategory(767,"Tapestries"),new TCS.SubCategory(798,"Foundations & piles"),new TCS.SubCategory(827,"Security systems"),new TCS.SubCategory(819,"Window treatments"),new TCS.SubCategory(845,"Restaurant"),new TCS.SubCategory(837,"Vinyl"),new TCS.SubCategory(852,"Ventilation"),new TCS.SubCategory(857,"Screens"),new TCS.SubCategory(870,"Outdoor"),new TCS.SubCategory(891,"Varnish"),new TCS.SubCategory(878,"Outdoor furniture"),new TCS.SubCategory(879,"Paving"),new TCS.SubCategory(928,"Water heaters"),new TCS.SubCategory(918,"Vanities"),new TCS.SubCategory(871,"Recessed"),new TCS.SubCategory(858,"Televisions"),new TCS.SubCategory(838,"Wood"),new TCS.SubCategory(820,"Switchboards"),new TCS.SubCategory(799,"Gutters & spouts"),new TCS.SubCategory(818,"Windows"),new TCS.SubCategory(789,"Stainless steel"),new TCS.SubCategory(774,"Small appliances"),new TCS.SubCategory(746,"Engineers"),new TCS.SubCategory(738,"Lighting"),new TCS.SubCategory(747,"Gas fitters"),new TCS.SubCategory(775,"Vacuum cleaners"),new TCS.SubCategory(800,"Handrails"),new TCS.SubCategory(872,"Security"),new TCS.SubCategory(921,"Backsplashes"),new TCS.SubCategory(880,"Plants & lawns"),new TCS.SubCategory(881,"Pools"),new TCS.SubCategory(801,"Insulation"),new TCS.SubCategory(791,"Tile & ceramic"),new TCS.SubCategory(777,"Waste disposal"),new TCS.SubCategory(748,"Glaziers"),new TCS.SubCategory(778,"Water dispensers"),new TCS.SubCategory(792,"Timber"),new TCS.SubCategory(802,"Metal work"),new TCS.SubCategory(882,"Spas"),new TCS.SubCategory(929,"Interior fitout"),new TCS.SubCategory(884,"Water features"),new TCS.SubCategory(803,"Masonry"),new TCS.SubCategory(749,"Joiners"),new TCS.SubCategory(751,"Painters & decorators"),new TCS.SubCategory(804,"Roofing"),new TCS.SubCategory(805,"Staircases"),new TCS.SubCategory(750,"Plasterers"),new TCS.SubCategory(752,"Plumbers"),new TCS.SubCategory(912,"Lumber"),new TCS.SubCategory(753,"Security consultants"),new TCS.SubCategory(807,"Weather proofing"),new TCS.SubCategory(754,"Telecommunication"),new TCS.SubCategory(755,"Upholsterers")];

/*
Removes all items from the given drop down control.
*/
TCS.ClearList = function (list)
{
	while(list.length != 0)
		list.options[list.length - 1] = null;
}

TCS.TopicChanged = function (prefix, listId)
{
	var topic;

	// Update each topic list
	for(var i = 0; i < TCS.topicTypes.length; i++)
	{
		var ddlTopic = document.getElementById(prefix + 'ddlTopic' + TCS.topicTypes[i]);
		
		if(TCS.topicTypes[i] != listId)
		{
			// This is not the list where the user made their selection, return it to it's default
			ddlTopic.selectedIndex = 0;
		}
		else
		{
			// This is the list where the user made their selection, get the selected topic
			if(ddlTopic.value != "")
				topic = TCS.GetTopicById(ddlTopic.value);
		}
	}

	// Get the maps listing valid categories for this selection
	var maps = (topic != null) ? topic.maps : TCS.defaultMaps;
	
	// Update each category and subcategory list
	for(var i = 0; i < TCS.categoryTypes.length; i++)
	{
		// Category list
		var ddlCategory = document.getElementById(prefix + 'ddlCategory' + TCS.categoryTypes[i].id);

		// Clear the list and add the default value
		TCS.ClearList(ddlCategory);
		ddlCategory.options[0] = new Option(TCS.categoryTypes[i].name, "", false, false);
		
		// Add the valid categories for the newly selected topic
		for(var j = 0; j < maps.length; j++)
		{
			// Get the category for this map
			var category = TCS.GetCategoryById(maps[j].categoryId);
			
			if(category.type == TCS.categoryTypes[i].id)
			{
				// The category belongs to this list
				ddlCategory.options[ddlCategory.options.length] = new Option(category.name, category.id, false, false);
			}
		}
		
		// Select the default value
		ddlCategory.selectedIndex = 0;
		
		// Sub-category list
		var ddlSubCategory = document.getElementById(prefix + 'ddlSubCategory' + TCS.categoryTypes[i].id);
		
		// Clear the list and disable it
		TCS.ClearList(ddlSubCategory);
		ddlSubCategory.disabled = true;
	}
}

TCS.CategoryChanged = function (prefix, listId)
{
	// Find the current topic, if any
	var topic;
	
	for(var i = 0; i < TCS.topicTypes.length; i++)
	{
		var ddlTopic = document.getElementById(prefix + 'ddlTopic' + TCS.topicTypes[i]);
		
		if(ddlTopic.value != "")
			topic = TCS.GetTopicById(ddlTopic.value);
	}

	// Get the maps listing valid categories for that topic
	var maps = (topic != null) ? topic.maps : TCS.defaultMaps;
	
	// Update each category and subcategory list
	for(var i = 0; i < TCS.categoryTypes.length; i++)
	{
		var ddlCategory = document.getElementById(prefix + 'ddlCategory' + TCS.categoryTypes[i].id);
		var ddlSubCategory = document.getElementById(prefix + 'ddlSubCategory' + TCS.categoryTypes[i].id);

		if(TCS.categoryTypes[i].id != listId)
		{
			// This is not the list where the user made their selection, return it to it's default
			ddlCategory.selectedIndex = 0;
			
			// Clear the associated sub-category list and disable it
			TCS.ClearList(ddlSubCategory);
			ddlSubCategory.disabled = true;
		}
		else
		{
			var category = null;
			
			// This is the list where the user made their selection, get the selected category
			if(ddlCategory.value != "")
				category = TCS.GetCategoryById(ddlCategory.value);
			
			if(category == null)
			{
				// Clear the associated sub-category list and disable it
				TCS.ClearList(ddlSubCategory);
				ddlSubCategory.disabled = true;
			}
			else
			{
				var map;
				
				// Find the map listing valid the sub-categories for this selection
				for(var j = 0; j < maps.length; j++)
				{
					if(maps[j].categoryId == category.id)
					{
						map = maps[j];
						break;
					}
				}
				
				// Clear the associated sub-category list and enable it
				TCS.ClearList(ddlSubCategory);
				ddlSubCategory.disabled = false;
				
				// Add the defauls option
				ddlSubCategory.options[0] = new Option("All", "", false, false);
			
				// Add the associated sub-categories
				for(var j = 0; j < map.subCategoryIds.length; j++)
				{
					var subCategory = TCS.GetSubCategoryById(map.subCategoryIds[j]);
					
					ddlSubCategory.options[ddlSubCategory.options.length] = new Option(subCategory.name, subCategory.id, false, false);
				}
			}
		}
	}
}
