	function hideLoading() {
		$('wait').hide();
	}
	
	function showLoading() {
		$('wait').show();
	}

	function addOption(selectbox,text,value ) {
		var option   = document.createElement("OPTION");
		option.text  = text;
		option.value = value;
		selectbox.options.add(option);
	}

	function fetchBrandFilter() {
		new Ajax.Request('/ajax/fetch_brands.cfm',
			{
	                method:       'post', 
	                parameters:   'subcategoryID=' + $('subcategoryID').value, 
	                asynchronous: true,
	                onComplete:   updateBrandFilter
			}
		);
	}

	function fetchProducts() {
		showLoading();
		new Ajax.Request('/ajax/fetch_products.cfm',
			{
	                method:       'post', 
	                parameters:   'subcategoryID=' + $('subcategoryID').value + '&brands=' + $('brands').value, 
	                asynchronous: true,
	                onComplete:   updateProducts,
					onFailure:    function() {
						alert('Problem updating records.');
					}
			}
		);
	}

	function runFilters() {
		fetchProducts();
		fetchBrandFilter();
	}

	function updateBrandFilter(transport) {
		var optionJson = eval(transport.responseText);
		var brands     = $('brands');

		brands.selectedIndex = 0;

		for (var i = brands.options.length; i > 0; i--) {
			brands.remove(i)
		}
		optionJson.each(
			function(i) {
				addOption(brands, i, i);
			}.bind(this)
		);

		if(brands.options.length == 1) {
			brands.disable();
		} else {
			brands.enable();
		}

	} 

	function updateProducts(transport) {
		$('products').update(transport.responseText);
		hideLoading();
	}

