function doKeywordSearch(url, random)
{
	$('#provider-navigation ul.search-links li span').empty();
	$('#provider-navigation ul.search-links li span').empty();
	$('#provider-navigation ul.search-links li').addClass('disabled');
	$('#provider-navigation ul.search-links li').removeClass('active');

	var total = 0;
	var token = null;
	var first = null;

	$.ajax(
	{
		url: 'ajax/search/getToken/',
		async: false,
		type: 'POST',
		data: 
		{
			keywords: $('#field-keywords').val(), 
			random: random
		},
		cache: false,
		success: function(response, status)
		{
			var response = eval(response);

			if(response.message.status == 'failed')
			{
				alert(response.message.string);

				token = null;

				return false;
			}

			if(typeof(response.data.token) == 'undefined' || false == response.data.token)
			{
				alert('No token found.');

				token = null;

				return false;
			}

			token = response.data.token;

			if(random)
			{
				$('#field-keywords').val(response.data.keywords);
			}

			return true;
		}
	});

	if(token != null)
	{
		$('#wrapper-results').empty();
		$('span#search-status-total').empty();
		$('span#search-status-current').empty().append('Patiently waiting ...');

		$.each(providers, function(index, provider)
		{
			var current = $('#provider-navigation li.' + provider.key);

			if(first == null)
			{
				first = Number(index);
			}

			$('strong', current).addClass('loading')

			current.removeClass('disabled');

			$('span#search-status-current').empty().append('Searching ' + provider.title + ' for "' + $('#field-keywords').val() + '" ...');

			$.ajax(
			{
				url: 'ajax/search/' + provider.key + '/',
				data:
				{
					token: token
				},
				async: false,
				type: 'POST',
				cache: false,
				success: function(response, status)
				{
					var response = eval(response);

					if(response.data.total.integer)
					{
						$('span', current).empty().append(response.data.total.formatted + ' results');
					}
					else
					{
						$('span', current).empty().append('nothing found :(');
					}

					$('strong', current).removeClass('loading');

					total = Number(total) + Number(response.data.total.integer);

					$('span#search-status-total').empty().append(number_format(total) + ' found!');

					$('#wrapper-results').append(response.data.output);
				}
			});
		});
	}

	toggleProviderTab(first);

	$('#provider-navigation ul.search-links li strong').bind('click', function(event)
	{
		var css_class = $(this).attr('class');

		$.each(providers, function(index, provider)
		{
			if(provider.key == css_class)
			{
				return toggleProviderTab(index);
			}
		});
	});

	return true;
}

function toggleProviderTab(index)
{
	$('#wrapper-results div').hide();
	$('#' + providers[index].key + '-results').show();
	$('#provider-navigation ul.search-links li').removeClass('active');
	$('#provider-navigation li.' + providers[index].key).addClass('active');
	$('span#search-status-current').empty().append('Browsing ' + providers[index].title + '\'s results ...');

	return true;
}

$(document).ready(function()
{
	$('#field-keywords').focus();

	$('#field-keywords').live('keypress', function(event)
	{
		if(event.keyCode == 13)
		{
			return doKeywordSearch('ajax/search/', false);
		}
	});

	$('#button-search').click(function(event)
	{
		return doKeywordSearch('ajax/search/', false);
	});

	$('#button-random').click(function(event)
	{
		return doKeywordSearch('ajax/search/', true);
	});
});