function handle_filter_failure(transport)
{
	Element.hide('spinner');
	var text = transport.responseText;
	alert(text);	
}

function reset_selection(url)
{
	Element.show('spinner');
	new Ajax.Updater('table_contents', url, {
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onSuccess: 	function() {
			Element.hide('spinner');
			$('subscriber_type').selectedIndex = 0;
			$('check_subscriber_type').checked = false;
			$('region').selectedIndex = 0;
			$('check_region').checked = false;
			$('country').selectedIndex = 0;
			$('check_country').checked = false;
			$('language').selectedIndex = 0;
			$('check_language').checked = false;
			Element.hide('spinner');
		}
	});
}

function adjust_pager(url)
{
	new Ajax.Updater('pager-controls', url, {
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onSuccess: 	Element.hide('spinner')
	});
}

/**
 * *******************************************************************************************
 * Subscriber types
 */
function ignore_subscriber_type(url_action)
{
	Element.show('spinner');
	new Ajax.Updater('table_contents', url_action, {
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onSuccess: 	function() {
			$('subscriber_type').selectedIndex = 0;
			Element.hide('spinner');
		}
	});
}

function do_subscriber_types(url_action, url_pager)
{
	Element.show('spinner');
	var subscriber_type = $F('subscriber_type');
	if (0 == subscriber_type.length)
		return;

	new Ajax.Updater('table_contents', url_action, {
		parameters: { subscriber_type: subscriber_type },
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onComplete: function(transport) {
			adjust_pager(url_pager)
		}
	});
}

function check_subscriber_type(id, urlChecked, urlUnchecked, url_pager)
{
	var subscriber_type = $F('subscriber_type');
	if (0 == subscriber_type.length) {
		$(id).checked = false;
		return;
	}
	if (true == $(id).checked)
		return do_subscriber_types(urlChecked, url_pager);

	return do_subscriber_types(urlUnchecked, url_pager);
}

/**
 * *******************************************************************************************
 * Regions
 */
function ignore_regions(url, url_pager)
{
	Element.show('spinner');
	new Ajax.Updater('table_contents', url, {
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onSuccess: 	function() {
			$('region').selectedIndex = 0;
			Element.hide('spinner');
		}
	});
}

function do_regions(url, url_pager)
{
	var region = $F('region');
	if (0 == region.length)
		return;

	new Ajax.Updater('table_contents', url, {
		parameters: { region_id: region },
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		}
	});
}

function check_region(id, urlChecked, urlUnchecked, url_pager)
{
	var region = $F('region');
	if (0 == region.length) {
		$(id).checked = false;
		return;
	}
	if (true == $(id).checked)
		return do_regions(urlChecked, url_pager);

	return do_regions(urlUnchecked, url_pager);
}

/**
 * *******************************************************************************************
 * Countries
 */
function ignore_countries(url, url_pager)
{
	Element.show('spinner');
	new Ajax.Updater('table_contents', url, {
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onSuccess: 	function() {
			$('country').selectedIndex = 0;
			Element.hide('spinner');
		}
	});
}

function do_countries(url, url_pager)
{
	var country = $F('country');
	if (0 == country.length)
		return;

	new Ajax.Updater('table_contents', url, {
		parameters: { country_id: country },
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		}
	});
}

function check_country(id, urlChecked, urlUnchecked, url_pager)
{
	var country = $F('country');
	if (0 == country.length) {
		$(id).checked = false;
		return;
	}

	if (true == $(id).checked)
		return do_countries(urlChecked, url_pager);

	return do_countries(urlUnchecked, url_pager);
}

/**
 * *******************************************************************************************
 * Languages
 */
function ignore_languages(url, url_pager)
{
	Element.show('spinner');
	new Ajax.Updater('table_contents', url, {
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onSuccess: 	function() {
			$('language').selectedIndex = 0;
			Element.hide('spinner');
		}
	});
}

function do_languages(url, url_pager)
{
	var language = $F('language');
	if (0 == language.length)
		return;

	Element.show('spinner');
	new Ajax.Updater('table_contents', url, {
		parameters: { language_id: language },
		asynchronous: true, 
		evalScripts: false,
		onFailure: function(transport) {
			handle_filter_failure(transport)
		},
		onLoading:  Element.show('spinner'),
    	onComplete: Element.hide('spinner')
	});

	return false;
}

function check_language(id, urlChecked, urlUnchecked, url_pager)
{
	var language = $F('language');
	if (0 == language.length) {
		$(id).checked = false;
		return;
	}

	if (true == $(id).checked)
		return do_languages(urlChecked, url_pager);

	return do_languages(urlUnchecked, url_pager);
}

