var gContractLength = new Array();
var gDownloads = new Array();
var gFilterControlsDisabled = false;
var gMonthlyCost = new Array();
var gSpeed = new Array();

function toggleFilter() {
	if ( gDocReady ) {
		var jFilter = $('#filterMain');
		var jFilterLink = $('#toggleFilterLink');

		if ( jFilter.is(':visible') ) {
			jFilter.hide();
			jFilterLink.html('Show Filter');
		} else {
			jFilter.show();
			jFilterLink.html('Hide Filter');
		}
	}
	return false;
}


function filterDeals() {
	if ( !gFilterControlsDisabled ) {
		var networkList = '';
		var sort = '';
		disableFilterControls();
		$('#filterOutput')
			.html('<div class="filterLoading loading">Loading...</div>');
		$('#filterNetworks li.single_network')
			.each(function() {
					if ( $(this).hasClass('checked') ) {
						if ( 0 != networkList.length )
							networkList = networkList + ',';
						networkList = networkList + this.id.substring(20);
				}
			});
		sort = gSortColumn.substring(0,1);
		if ( gSortAscending ) {
			sort += 'a';
		} else {
			sort += 'd';
		}
		$.ajax( {
				data: {
						pct: gDealType
						, mc: gMonthlyCost[$('#monthlyCost').slider('value')].search
						, sp: gSpeed[$('#speed').slider('value')].search
						, dn: gDownloads[$('#downloads').slider('value')].search
						, cl: gContractLength[$('#contractLength').slider('value')].search
						, ne: networkList
						, s: sort
					}
				, dataType: 'html'
				, error: function() {
						$('#filterOutput')
							.html('<div style="width:100%;text-align: center;"><h2>Error!</h2></div>');
						enableFilterControls();
					}
				, success: function(data,textStatus) {
						$('#filterOutput')
							.html(data);
						setSortHeader();
						filterLocalDeals();
						enableFilterControls();
					}
				, url: gWebRoot + '/deal-table.ajax'
			});
	}
}

function filterLocalDeals() {
	$('#filterNetworks li.single_network')
		.each(function() {
				if ( $(this).hasClass('checked') ) {
					$('#allDealsTable tr.n' + this.id.substring(20)).show();
				} else {
					$('#allDealsTable tr.n' + this.id.substring(20)).hide();
				}
			});
	$('#allDealsTable tr.dealTableGroupRow')
		.each(function() {
				if ( $('#allDealsTable tr.dg' + this.id.substring(9)+ ' td:visible').length > 0 ) {
					$(this).show();
				} else {
					$(this).hide();
				}
			});
	if ( 0 == $('#allDealsTable tr.deal td:visible').length ) {
		$('#allDealsTableNoValues').show();
	} else {
		$('#allDealsTableNoValues').hide();
	}
}


function disableFilterControls() {
	gFilterControlsDisabled = true;
	$('#contractLength').slider("disable");
	$('#downloads').slider("disable");
	$('#monthlyCost').slider("disable");
	$('#speed').slider("disable");
}	

function enableFilterControls() {
	gFilterControlsDisabled = false;
	$('#contractLength').slider("enable");
	$('#downloads').slider("enable");
	$('#monthlyCost').slider("enable");
	$('#speed').slider("enable");
}

$(function() {
	gContractLength.push({text: 'Don\'t Mind', search: ''});
	gContractLength.push({text: '6 months', search: '6'});
	gContractLength.push({text: '12 months', search: '12'});
	gContractLength.push({text: '18 months', search: '18'});
	gContractLength.push({text: '24 months', search: '24'});

	$('#contractLengthOutput').html(gContractLength[0].text);
	$('#contractLengthMax').html(gContractLength[0].text);
	$('#contractLengthMin').html(gContractLength[gContractLength.length-1].text);

	gDownloads.push({text: 'Don\'t Mind', search: ''});
	gDownloads.push({text: '1GB', search: '1'});
	gDownloads.push({text: '2GB', search: '2'});
	gDownloads.push({text: '5GB', search: '5'});
	gDownloads.push({text: '10GB', search: '10'});
	gDownloads.push({text: '30GB', search: '30'});

	$('#downloadsOutput').html(gDownloads[0].text);
	$('#downloadsMax').html(gDownloads[0].text);
	$('#downloadsMin').html(gDownloads[gDownloads.length-1].text);

	gMonthlyCost.push({text: 'Don\'t Mind', search: ''});
	gMonthlyCost.push({text: 'FREE', search: '0'});
	gMonthlyCost.push({text: '&#163;15', search: '15'});
	gMonthlyCost.push({text: '&#163;20', search: '20'});
	gMonthlyCost.push({text: '&#163;25', search: '25'});
	gMonthlyCost.push({text: '&#163;30', search: '30'});
	gMonthlyCost.push({text: '&#163;35', search: '35'});
	gMonthlyCost.push({text: '&#163;40', search: '40'});
	gMonthlyCost.push({text: '&#163;45', search: '45'});
	gMonthlyCost.push({text: '&#163;50', search: '50'});
	gMonthlyCost.push({text: '&#163;60', search: '60'});
	gMonthlyCost.push({text: '&#163;75', search: '75'});

	$('#monthlyCostOutput').html(gMonthlyCost[0].text);
	$('#monthlyCostMax').html(gMonthlyCost[0].text);
	$('#monthlyCostMin').html(gMonthlyCost[gMonthlyCost.length-1].text);

	gSpeed.push({text: 'Don\'t Mind', search: ''});
	gSpeed.push({text: '1Mb', search: '1'});
	gSpeed.push({text: '3.6Mb', search: '3.6'});
	gSpeed.push({text: '7.2Mb', search: '7.2'});

	$('#speedOutput').html(gSpeed[0].text);
	$('#speedMax').html(gSpeed[0].text);
	$('#speedMin').html(gSpeed[gSpeed.length-1].text);


	$('#contractLength')
		.slider({
			min:0
			, max: gContractLength.length-1
			, stepping: 1
			, orientation: 'vertical'
			, value: 0
			, slide: function(e,ui) {
					$('#contractLengthOutput').html(gContractLength[ui.value].text);
				}
			, change: function(e,ui) {
					filterDeals();
				}
		});
	$('#contractLengthFilter')
		.hover(function() {
			$('#filterHelpGeneral').hide();
			$('#filterHelpContractLength').show();				
		}, function() {
			$('#filterHelpContractLength').hide();				
			$('#filterHelpGeneral').show();
		});

	$('#downloads')
		.slider({
			min:0
			, max: gDownloads.length-1
			, stepping: 1
			, orientation: 'vertical'
			, value: 0
			, slide: function(e,ui) {
					$('#downloadsOutput').html(gDownloads[ui.value].text);
				}
			, change: function(e,ui) {
					filterDeals();
				}
		});
	$('#downloadsFilter')
		.hover(function() {
			$('#filterHelpGeneral').hide();
			$('#filterHelpDownloads').show();				
		}, function() {
			$('#filterHelpDownloads').hide();				
			$('#filterHelpGeneral').show();
		});

	$('#monthlyCost')
		.slider({
			min:0
			, max: gMonthlyCost.length-1
			, stepping: 1
			, orientation: 'vertical'
			, value: 0
			, slide: function(e,ui) {
					$('#monthlyCostOutput').html(gMonthlyCost[ui.value].text);
				}
			, change: function(e,ui) {
					filterDeals();
				}
		});
	$('#monthlyCostFilter')
		.hover(function() {
			$('#filterHelpGeneral').hide();
			$('#filterHelpMonthlyCost').show();				
		}, function() {
			$('#filterHelpMonthlyCost').hide();				
			$('#filterHelpGeneral').show();
		});

	$('#speed')
		.slider({
			min:0
			, max: gSpeed.length-1
			, stepping: 1
			, orientation: 'vertical'
			, value: 0
			, slide: function(e,ui) {
					$('#speedOutput').html(gSpeed[ui.value].text);
				}
			, change: function(e,ui) {
					filterDeals();
				}
		});
	$('#speedFilter')
		.hover(function() {
			$('#filterHelpGeneral').hide();
			$('#filterHelpSpeed').show();				
		}, function() {
			$('#filterHelpSpeed').hide();				
			$('#filterHelpGeneral').show();
		});

	$('#filterNetworks a').click(function(event) {
			event.preventDefault();
			if ( !gFilterControlsDisabled ) {
				var checkbox = $(this).parent();
				var doFilterDeals = false;
				if ( checkbox.hasClass('checked') ) {
					checkbox
						.removeClass('checked')
						.addClass('unchecked');
					doFilterDeals = true;
				} else if ( checkbox.hasClass('unchecked') ) {
					checkbox
						.removeClass('unchecked')
						.addClass('checked');
					doFilterDeals = true;
				}
				if ( doFilterDeals )
					filterLocalDeals();
			}	
		});
	$('#filterNetworks')
		.hover(function() {
			$('#filterHelpGeneral').hide();
			$('#filterHelpNetworks').show();				
		}, function() {
			$('#filterHelpNetworks').hide();				
			$('#filterHelpGeneral').show();
		});


});

function dealColumnSorter(a,b) {
	return a.sortBy - b.sortBy;
}

function sortDealRows(rowClass, rowHeader, attrName) {
	var jGroupRows = $('#allDealsTable tr.' + rowClass);
	var jHeader = $(rowHeader);
	var sortArray = new Array();
	jGroupRows.each(function() {
			sortArray.push({sortBy: this.attributes[attrName].nodeValue, sortID: this.id});
		});			
	sortArray.sort(dealColumnSorter);
	for (i =  sortArray.length-1 ; i >= 0 ; i--)
		$('#'+sortArray[i].sortID).insertAfter(jHeader);

}

function sortDeals() {
	var attrName = gSortColumn + 'Sort';
	if ( gSortAscending ) {
		attrName += 'Asc';
	} else {
		attrName += 'Desc';
	}
	sortDealRows('dg',$('#dealGroup').get(0), attrName);
	$('#allDealsTable tr.dealTableGroupRow')
		.each(function() {
			sortDealRows('dg' + this.id.substring(9), this, attrName);
		});
}

var gSortColumn = 'monthly';
var gSortAscending = true;

function sortDealColumn(column) {
	if ( gSortColumn != column ) {
		gSortColumn = column;
		gSortAscending = ('monthly' == column);
	} else {
		gSortAscending = !gSortAscending;
	}
	setSortHeader();
	sortDeals();
	return false;
}

function setSortHeader() {
	var sortClass = 'sortAsc';
	$('#allDealsTable a.dealHeader')
		.removeClass('sortAsc')
		.removeClass('sortDesc');
	if ( !gSortAscending )
		sortClass ='sortDesc';
	$('#' + gSortColumn + 'DealHeader')
		.addClass(sortClass);
}
