function ResultsAndFixturesContext() {
	
	this.getAll = function() {
		if (resultsAndFixturesData.matches.length == 0) {
			return null;
		}
		
		return resultsAndFixturesData.matches;
	};
	
	this.getFixturesWithoutResults = function(take) {
		if (resultsAndFixturesData.matches.length == 0) {
			return null;
		}
		
		if (take == undefined)
		{
			return JSLINQ(resultsAndFixturesData.matches).Where(function(item) {
				return item.hasResults == "False";
			}).Select(function(item) {
				return item;
			});
		}
		
		return JSLINQ(resultsAndFixturesData.matches).Where(function(item) {
			return item.hasResults == "False";
		}).Take(take);
	};
	
	this.getFixturesWithResults = function(take) {
		if (resultsAndFixturesData.matches.length == 0) {
			return null;
		}
		
		if (take == undefined)
		{
			return JSLINQ(resultsAndFixturesData.matches).Where(function(item) {
				return item.hasResults == "True";
			}).Select(function(item) {
				return item;
			});
		}
		
		return JSLINQ(resultsAndFixturesData.matches).Where(function(item) {
			return item.hasResults == "True";
		}).TakeLast(take);
	};
}

function ResultsAndFixturesController() {
	var dataContext = new ResultsAndFixturesContext();
	
	this.resultsAndFixturesWidget = function() {
		var view = new ResultsAndFixturesAppView();
		
		view.render(dataContext.getFixturesWithoutResults(resultsAndFixturesSettings.fixtureTake),
			dataContext.getFixturesWithResults(resultsAndFixturesSettings.resultTake));
			
		view.actions();
	};
}

function ResultsAndFixturesAppView() {
	var fixturesEl = $('.res_and_fix > .fixtures_div');
	var resultsEl = $('.res_and_fix > .results_div');
		
	this.render = function(upcomingFixtures, completeFixtures) {
	
		if (upcomingFixtures != null) {
			fixturesEl.html('');
			$('#upcoming-fixtures-template').tmpl(upcomingFixtures).appendTo(fixturesEl);
		}
		
		if (completeFixtures != null) {
			resultsEl.html('');
			$('#finished-fixtures-template').tmpl(completeFixtures).appendTo(resultsEl);
		}
		
		
	};
	
	this.actions = function() {
		$('.headings h2 a').click( function() {
			
            var clicked = $('.' + $(this).attr('class') + '_div'), currVisible = $('.visible');
				
            $(".headings h2").removeClass("on");
            $(this).parent().addClass("on");
			
            $(currVisible).removeClass('visible').hide();
            $(clicked).show().addClass('visible');
			
            return false;
		});
	};
}

var resultsAndFixturesData;
var resultsAndFixturesSettings = { "languageRef": "en-gb", "fixtureTake": 10, "resultTake": 10 };

function ResultsAndFixturesInit() {
	var controller = new ResultsAndFixturesController();
	
	this.init = function() {
	
		$.ajax({
            type: "GET",
            url: "resultsandfixturesjson.aspx?languagecode=" + resultsAndFixturesSettings.languageRef,
            dataType: "application/json",
            success: function(data) {

                if (data != "") {
                    resultsAndFixturesData = eval('(' + data + ')');
                }

                controller.resultsAndFixturesWidget();
            },
            error: function() { }
        });
	};
}
