$(document).ready(function(){


	// FILTER BUTTONS
	$('#games-index-filter li strong a').click(function(){
		$(this).toggleClass('selected').parent().parent().find('.options').slideToggle('fast');
		return false;
	});
	
	// PAGE CONTROLLER

	if(window.location.search.substring())
		{
		var page = getQueryVariable('page');
		var console = getQueryVariable('console');
		var type = getQueryVariable('type');
		var view = getQueryVariable('view');
		var sortDate = getQueryVariable('sortDate');
		var limit = getQueryVariable('limit');
		if(type) $('#game-index-filter-genre .options').data('selected',type);
		}
	else
		{
		// default
		var page = 1;
		var console = genre = type = '';
		var view = 'now';
		var sortDate = 'DESC';
		var limit = 25;
		}

	var data = 'view='+view+'&page='+page+'&console='+console+'&type='+type+'&limit='+limit+'&sortDate='+sortDate;
	grabJSON('grab-all-downloads','populateList',data);
	recordDataFixLinks(data);
       // getTypeJSON();
	
	$('#game-index-filter-console .options li a, #game-index-filter-genre .options li a').live('click',function(){
		var filterType = $(this).parents('.options').attr('data-type');
		newString = buildUrlSubstring(filterType,$(this).attr('data-id')).replace('page='+page,'page=1');
		location.href = '/downloads?'+newString;
		return false;
	});
	
	if(getQueryVariable('type'))
		{
		$('#game-index-filter-genre .options li a').removeClass('selected').parent().find('a[data-id="'+getQueryVariable('type')+'"]').addClass('selected');
		}
	//if(getQueryVariable('type'))
	//	{
	//	$('#game-index-filter-genre .options li a').removeClass('selected');
	//	$('#game-index-filter-genre strong a').trigger('click');
	//	}
	
});
	
// POPULATE LIST
function populateList(json)
	{
	if(json.totalResults > 0)
		{
		$.each(json.slug, function(k,slug)
			{
			$listRow = $('#games-index-list-template');
			$listRow.clone().appendTo($('#list-display')).removeClass('hidden').attr('id','')
				.find('.title a').attr('href','/game/'+json.game_slug[k]+'/download/'+json.slug[k]).text(json.title[k]).parent().next()
				.text(json.size[k]).next()
				.text(json.file_type[k]);
			});
		setPagination(json);
		$('#loading-games-index').fadeOut('fast',function(){ $('#mp-content').fadeIn('fast'); });
		}
	else
		{
		$('#loading-games-index div img').attr('src','http://www.blogsmithmedia.com/futurestiq.sandbox.joystiq.com/media/games-list-no-results.png');
		}
	}
	
// CREATE URL SUBSTRING
function buildUrlSubstring(part,newValue)
	{
	var urlPart = new Array();
	$('#settings-jar .jar').each(function(i){
		if(part == $(this).attr('name')) urlPart[i] = $(this).attr('name')+'='+newValue;
		else urlPart[i] = $(this).attr('name')+'='+$(this).val();
	});
	return urlPart.join('&');
	}
	
// SET PAGINATION
function setPagination(json)
	{
	var page = parseInt(json.page);
	var limit = parseInt(json.limit);
	var totalResults = parseInt(json.totalResults);
	if(page == 1 && totalResults <= limit) 
		{
		$('#games-index-list-start-record').text(page);
		$('#games-index-list-end-record').text(totalResults);
		$('#games-index-list-next-button').addClass('inactive').find('a').attr('onClick','return false;');
		$('#games-index-list-previous-button').addClass('inactive').find('a').attr('onClick','return false;');
		}
	else if(page == 1 && totalResults > limit)
		{
		$('#games-index-list-start-record').text(page);
		$('#games-index-list-end-record').text(limit);
		$('#games-index-list-next-button a').attr('href','/downloads?'+buildUrlSubstring('page',(page+1)));
		$('#games-index-list-previous-button').addClass('inactive').find('a').attr('onClick','return false;');
		}
	else if(page > 1 && totalResults <= (limit*page))
		{
		var startingRecord = ((page-1)*limit)+1;
		var endgingRecord = totalResults;
		$('#games-index-list-start-record').text(startingRecord);
		$('#games-index-list-end-record').text(endgingRecord);
		$('#games-index-list-next-button').addClass('inactive').find('a').attr('onClick','return false;');
		$('#games-index-list-previous-button a').attr('href','/downloads?'+buildUrlSubstring('page',(page-1)));
		}
	else if(page > 1 && totalResults > (limit*page))
		{
		var startingRecord = ((page-1)*limit)+1;
		var endgingRecord = limit*page;
		$('#games-index-list-start-record').text(startingRecord);
		$('#games-index-list-end-record').text(endgingRecord);
		$('#games-index-list-next-button a').attr('href','/downloads?'+buildUrlSubstring('page',(page+1)));
		$('#games-index-list-previous-button a').attr('href','/downloads?'+buildUrlSubstring('page',(page-1)));
		}
	$('#games-index-list-total-records').text(totalResults);
	}

// POPULATES GENRE BROWSE LIST
function populateGenreList(json)
	{
	var selectedId = ($('#game-index-filter-genre .options').data('selected')) ? $('#game-index-filter-genre .options').data('selected') : '' ;
	$.each(json.id, function(k,id){
		if(selectedId && selectedId == id) $('#game-index-filter-genre .options').append('<li><a href="#" data-id="'+id+'" class="selected">'+json.value[k]+'</a></li>');
		else $('#game-index-filter-genre .options').append('<li><a href="#" data-id="'+id+'">'+json.value[k]+'</a></li>');
		});
	var originalText = $('#game-index-filter-genre strong a').text();
	$('#game-index-filter-genre strong a').text(originalText+' ('+json.id.length+')')
	}

// POPULATES FILE TYPE BROWSE LIST
function populateTypeList(json)
	{
	var selectedId = ($('#game-index-filter-genre .options').data('selected')) ? $('#game-index-filter-genre .options').data('selected') : '' ;
	$.each(json.id, function(k,id){
		if(selectedId && selectedId == id) $('#game-index-filter-genre .options').append('<li><a href="#" data-id="'+id+'" class="selected">'+json.value[k]+'</a></li>');
		else $('#game-index-filter-genre .options').append('<li><a href="#" data-id="'+id+'">'+json.value[k]+'</a></li>');
		});
	var originalText = $('#game-index-filter-genre strong a').text();
	$('#game-index-filter-genre strong a').text(originalText+' ('+json.id.length+')')
	}

// POPULATE DATA MANAGER LIST
function getGenreJSON(){ grabJSON('genre-json','populateGenreList',''); }

// POPULATE DATA MANAGER LIST
function getTypeJSON(){ grabJSON('type-json','populateTypeList',''); }
	
// BASIC JSONP FUNCTION
function grabJSON(action,callback,theData)
	{
	$.ajax({
  		url: 'http://services.weblogsinc.com/11/joy-game-db/'+action+'?'+callback+'=?',
 		dataType: 'json',
 		cache: true,
 		data: theData
		});
	}
	
// GRAB VALUES FROM URL
function getQueryVariable(variable) { 
	var query = window.location.search.substring(1); 
	var vars = query.split("&"); 
	for (var i=0; i<vars.length; i++)
		{ 
		var pair = vars[i].split("="); 
		if (pair[0] == variable) { return pair[1]; }
		} 
	}
	
// RECORD DATA
function recordDataFixLinks(data)
	{
	// record it
	var variables = data.split('&');
	for(i in variables)
		{
		var snap = variables[i].split('=');
		if(snap[0] == 'page') var page = snap[1];
		$('#settings-jar input[name="'+snap[0]+'"]').val(snap[1]);
		}
	// link it
	variables[0] = 'view=now';
	var newData = variables.join('&').replace('page='+page,'page=1').replace('ASC','DESC');
	$('#available-now-link a').attr('href','?'+newData);
	variables[0] = 'view=soon';
	var newData = variables.join('&').replace('page='+page,'page=1').replace('DESC','ASC');
	$('#coming-soon-link a').attr('href','?'+newData);
	variables[0] = 'view=all';
	var newData = variables.join('&').replace('page='+page,'page=1').replace('DESC','ASC');
	$('#all-games-link a').attr('href','?'+newData);
	// tab it
	switch($('#settings-jar input[name="view"]').val())
		{
		case 'now': $('#available-now-link a').addClass('selected'); break;
		case 'soon': $('#coming-soon-link a').addClass('selected'); break;
		case 'all': $('#all-games-link a').addClass('selected'); break;
		}
	}
