Synergy.Toolbox = function()
{
	var filterList = $('<ul class="filterList filter group">');
	var extraFilterList = $('<ul class="filterList filter group">');
	var typeList = $('<ul class="filterList group">');
	var searchbox = $('#search');

	Synergy.Options.filterContainer.after(typeList);
	Synergy.Options.filterContainer.after(filterList);
	extraFilterList.hide();

	setupFilters();
	setupMarkerTypes();
	setupExtraFilters();
	setupSearch();

	this.setDefault = function( callback )
	{
		defaultValues();
		updateDisplay(callback);
	};

	this.setLeaderBoard = function()
	{
		defaultValues();
		$('#filter_5star').attr('checked', true);
		updateDisplay();
	};

	function defaultValues()
	{
		searchbox.val('');
		$('#filter_all').attr('checked', true);
		$(':input', typeList).each(function()
		{
			if( false == this.checked ) {
				$(this).click();
			}
		});
		$(':input', extraFilterList).attr('checked', false);
	}

	/**
	 * Create the marker groups and filters
	 */
	function setupFilters()
	{
		$.each(Synergy.Options.filterTypeArray, function( counter, filter )
		{
			var li = $('<li>');
			var cleanName = filter.replace(' ', '');
			var radio = $('<input type="radio">');
			radio.attr( {
				name : 'filterList',
				id : 'filter_' + cleanName,
				value : cleanName
			});

			radio.click(function()
			{
				if( $.browser.msie ) {
					$(':input', filterList).attr('checked', false);
					this.checked = true;
				}
				updateDisplay();
			});

			li.append(radio);
			li.append('<label for="filter_' + cleanName + '">' + filter.toUpperCase() + '</label>');
			filterList.append(li);
		});
	}

	/**
	 * Create the marker groups and filters
	 */
	function setupMarkerTypes()
	{

		var baseIcon = new GIcon(G_DEFAULT_ICON);
		baseIcon.iconSize = new GSize(33, 42);
		baseIcon.shadowSize = new GSize(0, 0);

		$.each(Synergy.Options.markerTypeArray, function( counter, markerTypeName )
		{
			var imgType = '.png';
			if( $.browser.msie && $.browser.version == 6 )
			{
				imgType = '.gif';
			}
			var newIcon = new GIcon(baseIcon, '/images/icons/' + markerTypeName + imgType);

			Synergy.Options.map.addMarkerType(markerTypeName, newIcon);

			var li = $('<li>');
			var idString = 'type_' + markerTypeName.replace(' ', '');
			var checkbox = $('<input type="checkbox" checked="checked" id="' + idString + '" value="' + markerTypeName.replace(' ', '') + '">');

			checkbox.click(function()
			{
				var checkboxList = $('input:checkbox:checked', typeList);

				Synergy.Options.map.closeExtInfoWindow();

				if( checkboxList.length == 0 ) {
					Synergy.MapAnimation.cancelTimer();
				}
				else {
					Synergy.MapAnimation.startTimer();
				}

				if( checkboxList.length > 1 ) {
					Synergy.App.addCompDetailsPopup();
				}
				else {
					Synergy.App.addCompDetailsPopup(checkboxList.val());
				}

				Synergy.Options.map.toggleType(markerTypeName);

				if( getCurrentFilter() != 'all' ) {
					updateDisplay();
				}
			});

			li.append(checkbox);
			li.append('<label for="' + idString + '">' + markerTypeName.toUpperCase() + '</label>');
			typeList.append(li);
		});
	}

	function setupExtraFilters()
	{
		$.getJSON(Synergy.Options.extraFilterUrl, function( data )
		{
			if( data.length > 0 ) {
				$.each(data, function( count, likeFilter )
				{
					var li = $('<li>');
					var idString = 'extra_' + likeFilter.name.replace(' ', '');
					var checkbox = $('<input type="checkbox" id="' + idString + '" value="' + likeFilter.name + '">');

					checkbox.click(function()
					{
						updateDisplay();
					});

					li.append(checkbox);
					li.append('<label for="' + idString + '">' + likeFilter.desc + '</label>');
					extraFilterList.append(li);
				});

				addExtraFilterToDom();
			}
		});
	}

	function addExtraFilterToDom()
	{
		var toggle = $('<div style="float: right;">+</div>');
		var header = $('<h2>Like Me</h2>');

		header.click(function()
		{

			if( toggle.html() == '+' ) {
				toggle.html('-');
			}
			else {
				toggle.html('+');
			}

			extraFilterList.animate( {
				height : [ 'toggle', 'swing' ]
			}, {
				duration : 500,
				step : fixShadow,
				complete : fixShadow
			});
		});

		header.append(toggle);
		typeList.after(extraFilterList);
		typeList.after(header);
		typeList.after('<div class="line"></div>');

		fixShadow();
	}

	function setupSearch()
	{
		$('#searchGo').click(function()
		{
			updateDisplay();
			return false;
		});

		searchbox.keyup(function( e )
		{
			if( e.keyCode == 13 ) {
				updateDisplay();
			}
		});
	}

	function getCurrentFilter()
	{
		return $('input:radio[name=filterList]:checked').val();
	}

	function updateDisplay( callback )
	{
		Synergy.Options.map.closeExtInfoWindow();

		var filterData = {
			listType : 'pins',
			mode : getCurrentFilter()
		};

		if( filterData.mode != 'all' ) {
			var categories = [];
			$('input:checkbox:checked', typeList).each(function()
			{
				categories.push($(this).val());
			});
			filterData.categories = categories;
		}

		$('input:checkbox:checked', extraFilterList).each(function( count, filter )
		{
			filterData[$(filter).val()] = true;
		});

		if( searchbox.val() != '' && searchbox.val() != searchbox.attr('title')) {
			filterData.search = searchbox.val();
		}

		Synergy.App.populateData(filterData, callback);
	}

	function fixShadow()
	{
		$('#toolbar').boxShadow();
	}
};

