
/* Tackle Math Ball - Written in 2004 by Paul Burney, http://paulburney.com */

// Global Configuration

/* Difficulty determines the number of digits in the problem.  For Easy, each part
of a problem has a one digit number, for Medium, there is a one digit and a two digit,
and hard has two two digit numbers. */

var difficulty = 'easy';  // options - easy|medium|hard

/* The variables below determine how "random" events are in the format
a 1 in XXX chance.  To happen every time, set to 1, for hardly ever, set to a large number */

var turnover_chance = 10;
var sack_chance = 5;
var field_goal_miss_chance = 5;

/* These values determine which team is preselected for player one and two.  By default
Player one is Pittsburgh and player two is Philedelphia */

var default_p1 = 0;
var default_p2 = 11;

// Team Information

var teams = new Array();

i = 0;
teams[i] = new Array();
teams[i]['town'] = 'Pittsburgh';
teams[i]['name'] = 'Steelers';
teams[i]['image'] = 'images/helmets/pittsburgh_steelers.jpg';
teams[i]['color'] = '#000000';
teams[i]['color2'] = '#ffff00';
teams[i]['time_limit'] = 4;
teams[i]['question_types'] = new Array('add','sub','mul','div');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Dallas';
teams[i]['name'] = 'Cowboys';
teams[i]['image'] = 'images/helmets/dallas_cowboys.jpg';
teams[i]['color'] = '#cccccc';
teams[i]['color2'] = '#3366cc';
teams[i]['time_limit'] = 5;
teams[i]['question_types'] = new Array('add','sub','mul','div');
i++;

teams[i] = new Array();
teams[i]['town'] = 'San Francisco';
teams[i]['name'] = '49ers';
teams[i]['image'] = 'images/helmets/sanfrancisco_49ers.jpg';
teams[i]['color'] = '#cc0000';
teams[i]['color2'] = '#C5B46D';
teams[i]['time_limit'] = 6;
teams[i]['question_types'] = new Array('add','sub','mul','div');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Green Bay';
teams[i]['name'] = 'Packers';
teams[i]['image'] = 'images/helmets/greenbay_packers.jpg';
teams[i]['color'] = '#F4D21B';
teams[i]['color2'] = '#009933';
teams[i]['time_limit'] = 7;
teams[i]['question_types'] = new Array('add','sub','mul');
i++;

teams[i] = new Array();
teams[i]['town'] = 'New York';
teams[i]['name'] = 'Giants';
teams[i]['image'] = 'images/helmets/newyork_giants.jpg';
teams[i]['color'] = '#3366cc';
teams[i]['color2'] = '#ffffff';
teams[i]['time_limit'] = 8;
teams[i]['question_types'] = new Array('add','sub','mul');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Denver';
teams[i]['name'] = 'Broncos';
teams[i]['image'] = 'images/helmets/denver_broncos.jpg';
teams[i]['color'] = '#063b8c';
teams[i]['color2'] = '#F06D29';
teams[i]['time_limit'] = 9;
teams[i]['question_types'] = new Array('add','sub','mul');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Tampa Bay';
teams[i]['name'] = 'Buccaneers';
teams[i]['image'] = 'images/helmets/tampabay_buccaneers.jpg';
teams[i]['color'] = '#ff0100';
teams[i]['color2'] = '#333333';
teams[i]['time_limit'] = 10;
teams[i]['question_types'] = new Array('add','sub','mul');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Washington';
teams[i]['name'] = 'Redskins';
teams[i]['image'] = 'images/helmets/washington_redskins.jpg';
teams[i]['color'] = '#993300';
teams[i]['color2'] = '#ffff00';
teams[i]['time_limit'] = 11;
teams[i]['question_types'] = new Array('add','sub','mul');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Kansas City';
teams[i]['name'] = 'Chiefs';
teams[i]['image'] = 'images/helmets/kansascity_chiefs.jpg';
teams[i]['color'] = '#ff0000';
teams[i]['color2'] = '#ffffff';
teams[i]['time_limit'] = 12;
teams[i]['question_types'] = new Array('add','sub');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Miami';
teams[i]['name'] = 'Dolphins';
teams[i]['image'] = 'images/helmets/miami_dolphins.jpg';
teams[i]['color'] = '#00cccc';
teams[i]['color2'] = '#ffffff';
teams[i]['time_limit'] = 13;
teams[i]['question_types'] = new Array('add','sub');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Chicago';
teams[i]['name'] = 'Bears';
teams[i]['image'] = 'images/helmets/chicago_bears.jpg';
teams[i]['color'] = '#FF6600';
teams[i]['color2'] = '#001D2E';
teams[i]['time_limit'] = 14;
teams[i]['question_types'] = new Array('add','sub');
i++;

teams[i] = new Array();
teams[i]['town'] = 'Philadelphia';
teams[i]['name'] = 'Eagles';
teams[i]['image'] = 'images/helmets/philadelphia_eagles.jpg';
teams[i]['color'] = '#339966';
teams[i]['color2'] = '#ffffff';
teams[i]['time_limit'] = 15;
teams[i]['question_types'] = new Array('add','sub');
i++;





// Common JavaScript/DOM Functions

function set_element_style(element_id, style_name, style_value) {
	//alert(element_id);
	document.getElementById(element_id).style[style_name] = style_value;
}

function write_to_element(element_id, content) {
	document.getElementById(element_id).innerHTML = content;
}

function get_field_value_by_name(element_name) {

	// warning... if result is an integer, you'll need to cast it as such
	var these_values = new Array();
	var element_list = document.getElementsByTagName('input');
	for (var i = 0; i < element_list.length; i++) {
		if (element_list[i].name == element_name && element_list[i].checked==1) {
			these_values[these_values.length] = element_list[i].value;
		}
	}
	return these_values.join(',');

}

function get_field_value_by_id(element_id) {
	return document.getElementById(element_id).value;
}

function random_number(min, max) {
	
	// this function returns a random number in the range from min to max
	var range = Math.abs(max - min) + 1;
	var number = Math.floor(range*Math.random());
	if (number == range) { number = number - 1; }
	return number + Math.min(max,min);
	
}

function random_element(this_array) {

	// this function returns a random element from an array
	var n = random_number(0, (this_array.length - 1));
	return this_array[n];

}

function array_search(needle, haystack) {

	if (haystack.length == 0) { return false; }
	
	for (var i = 0; i < haystack.length; i++) {
		if (needle == haystack[i]) { return true; }
	}
	
	return false;

}

function int_compare(a, b) {
	// this function is used to sort an array by numerical value
	return a - b;
}

function array_numeric_sort(this_array) {

	// this function will return a copy of an array sorted by numerical value
	var h;
	var sorted = new Array();
	
	// make a copy of the array so as not to destroy the original
	for (h = 0; h < this_array.length; h++) {
		sorted[h] = this_array[h];
	}

	sorted.sort(int_compare);
			
	return sorted;

}




// Functions Specific to Tackle Math Ball

function initialize_game() {

	game_over = 0;
	number_of_players = 1;
	game_time_limit = 0;
	turn_time_limit = 0;

	types = new Array();
	
	current_problem = '';
	current_answer = '';
	all_answers = new Array();
	play_type = 'pass';
	
	players = new Array();
	
	players[1] = new Array();
	players[2] = new Array();

	players[1]['team'] = 0;
	players[1]['score'] = 0;
	players[1]['position'] = 0;
	players[1]['down'] = 1;
	
	players[2]['team'] = 0;
	players[2]['score'] = 0;
	players[2]['position'] = 100;
	players[2]['down'] = 1;
	
	
}

function create_team_list() {
	var list = '';
	var p1_selected = '';
	var p2_selected = '';
	for (var j = 0; j < teams.length; j++) {
		if (j == default_p1) {
			p1_selected = ' checked';
		} else {
			p1_selected = '';
		}
		if (j == default_p2) {
			p2_selected = ' checked';
		} else {
			p2_selected = '';
		}
		list += '<tr style="color: ' + teams[j]['color2'] + '; font-size: 10px; font-weight: bold; background-color: ' + teams[j]['color'] + ';"><td align="center"><input type="radio" name="player_1" id="player_1_' + j + '" value="' + j + '"' + p1_selected + '><' + '/td><td align="center"><input type="radio" name="player_2" value="' + j + '"' + p2_selected + '><' + '/td><td align="center">' + (j+1) + '<' + '/td><td align="left"><label for="player_1_' + j + '"><img align="middle" src="' + teams[j]['image'] + '"> ' + teams[j]['town'] + ' ' + teams[j]['name'] + '<' + '/label><' + '/tr>';
	}
	return list;
}

function end_game() {

	var content = '';
	var winner = 0;
	var loser = 0;

	game_over = 1;
	clearTimeout(turn_timeout);
	clear_play_clock();
	document.getElementById('start_over_button').value = ' New Game? ';

	// check player numbers first, then winning status

	if (players[1]['score'] > players[2]['score']) {
		winner = 1;
		loser = 2;
	}
	
	if (players[2]['score'] > players[1]['score']) {
		winner = 2;
		loser = 1;
	}
	
	if (winner == 0) {
		
		content = '<p class="results">The game ended in a tie!<' + '/p>';
		current_player = 1;
		update_game_image('tie');
	
	} else {
	
		content = '<p class="results">The ' + teams[players[winner]['team']]['town'] + ' ' + teams[players[winner]['team']]['name'] + ' beat the ' + teams[players[loser]['team']]['town'] + ' ' + teams[players[loser]['team']]['name'] + '.<br><br>Final Score: ' + players[winner]['score'] + ' to ' + players[loser]['score'] + '<' + '/p>';
		
		current_player = winner;
		
		if (is_computer_player()) {
			current_player = loser;
			update_game_image('lose');
		} else {
			update_game_image('win');
		}
		
	}
	
	write_to_element('content_and_results', content);

}

function new_game() {
	if (game_over == 1) {
		setup_game();
	} else {
		if (confirm('A game is in progress.  Are you sure you want to start over?')) {
			game_over = 0;
			setup_game();
		}
	}
}

function load_game() {
	write_to_element('main',intro_screen);
}

function setup_game() {
	initialize_game();
	write_to_element('main', setup_screen);
}

function create_array_from_array(this_array) {

	var new_array = new Array();
	
	for (var h = 0; h < this_array.length; h++) {
		new_array[h] = this_array[h];
	}
	
	return new_array;

}

function start_game() {

	// first check to make sure the game is setup correctly
	
	number_of_players = get_field_value_by_name('number_of_players');
	game_time_limit = get_field_value_by_name('time_limit');
	var p1 = get_field_value_by_name('player_1');
	var p2 = get_field_value_by_name('player_2');
	
	if (p1 == '' || p2 == '') {
	
		alert('You must select a team for each player.  Please try again.');
		return false;

	}
	
	if (p1 == p2) {
	
		alert('You cannot play against yourself.  Please select a different opponent.');
		return false;
	
	}
	
	// start the game now
	write_to_element('main', game_screen);
	
	// set the player teams
	players[1]['team'] = p1;
	players[2]['team'] = p2;
	
	game_time_limit = game_time_limit*60;

	if (number_of_players == 2) {
	
		turn_time_limit = 10;
		types = new Array('add','sub','mul','div');
	
	} else {
	
		turn_time_limit = teams[p2]['time_limit'];
		types = create_array_from_array(teams[p2]['question_types']);
	
	}
	
	// setup scoreboard 
	var scoreboard = '<table cellpadding="3" cellspacing="0" border="1" bgcolor="#ffffff"><tr id="p1_scoreboard_row">'
	+ '<td align="right"><span id="p1_score">0<' + '/span><'
 	+ '/td><td id="p1_scoreboard_name">' + teams[p1]['town'] + '<'
 	+ '/td><'
 	+ '/tr><tr id="p2_scoreboard_row"><td align="right"><span id="p2_score">0<' + '/span><'
 	+ '/td><td id="p2_scoreboard_name">' + teams[p2]['town'] + '<'
 	+ '/td><'
 	+ '/tr><'
 	+ '/table>';
 	
 	write_to_element('scoreboard', scoreboard);
	
	// setup player one
	write_to_element('p1_endzone', teams[p1]['name']);
	set_element_style('p1_endzone','fontWeight','bold');
	set_element_style('p1_endzone','textAlign','center'); // for some reason, this doesn't work in Mac IE
	set_element_style('p1_endzone','color',teams[p1]['color2']);
	set_element_style('p1_endzone','backgroundColor',teams[p1]['color']);
	set_element_style('p1_scoreboard_row','fontWeight','bold');
	set_element_style('p1_scoreboard_row','color',teams[p1]['color2']);
	set_element_style('p1_scoreboard_row','backgroundColor',teams[p1]['color']);
	set_element_style('p1_endzone','textTransform','uppercase');
	
	// setup player two
	write_to_element('p2_endzone', teams[p2]['name']);
	set_element_style('p2_endzone','fontWeight','bold');
	set_element_style('p2_endzone','textAlign','center');
	set_element_style('p2_endzone','color',teams[p2]['color2']);
	set_element_style('p2_endzone','backgroundColor',teams[p2]['color']);
	set_element_style('p2_scoreboard_row','fontWeight','bold');
	set_element_style('p2_scoreboard_row','color',teams[p2]['color2']);
	set_element_style('p2_scoreboard_row','backgroundColor',teams[p2]['color']);
	set_element_style('p2_endzone','textTransform','uppercase');
	
	// determine who wins the toss/is first
	current_player = random_number(1,2);
	
	players[current_player]['position'] = Math.abs(players[current_player]['position'] - 20);

	highlight_field(current_player, players[current_player]['position']);

	update_game_image('coin');
	
	var content = '<p class="results">' + teams[players[current_player]['team']]['town'] + ' wins the toss!<br><br><input type="button" value="Begin" onclick="play();"><' + '/p>';
	write_to_element('content_and_results',content);

	var game_display_time = '<p>Time Left in Game<br><span class="timer">' + format_time((game_time_limit/60),0) + '<' + '/span><' + '/p>';
	write_to_element('game_timer', game_display_time);

}

function format_time(minutes, seconds) {
	
	// this function takes a minutes and seconds argument and returns something like 03:07
	if (minutes.toString().length == 1) { minutes = '0' + minutes; }
	if (seconds.toString().length == 1) { seconds = '0' + seconds; }

	display_time = minutes + ':' + seconds;
	
	return display_time;

}

function format_seconds(seconds) {

	// this function takes a seconds argument and adds a leading zero if applicable
	if (seconds.toString().length == 1) { seconds = '0' + seconds; }

	display_time = seconds;
	
	return display_time;

}



function do_game_timer() {
	var minutes = Math.floor(game_time_limit/60);
	var seconds = game_time_limit % 60;
	
	var game_display_time = '<p>Time Left in Game<br><span class="timer">' + format_time(minutes, seconds) + '<' + '/span><' + '/p>';
	write_to_element('game_timer', game_display_time);

	game_time_limit -= 1;

	if (game_time_limit < 0) {
	
		end_game();
	
	} else {
	
		game_timeout = setTimeout("do_game_timer();", 1000);
	
	}
	
} 

function clear_play_clock() {

	var turn_display_time = '';
	write_to_element('turn_timer', turn_display_time);

}

function do_turn_timer() {

	var turn_display_time = 'Play: ' + format_seconds(turn_time_limit);
	write_to_element('turn_timer', turn_display_time);

	turn_time_limit -= 1;

	if (turn_time_limit < 0) {
	
		var answer = '';
		
		if (play_type == 'pass') {
			pass(answer);
		} else {
			if (play_type == 'kick') {
				kick(answer);
			}
		}
		
	} else {
	
		turn_timeout = setTimeout("do_turn_timer();", 1000);
	
	}
	
} 


function play() {
	do_game_timer();
	play_type = 'pass';
	next_problem();
}

function switch_players() {

	if (current_player == 1) {
		current_player = 2;
		other_player = 1;
	} else {
		current_player = 1;
		other_player = 2;
	}

}

function highlight_field(player, yard) {
	var yard_element = 'p1_' + yard;
	var yard_color = teams[players[player]['team']]['color'];
	var yard_text = teams[players[player]['team']]['color2'];
	set_element_style(yard_element,'backgroundColor',yard_color);
	set_element_style(yard_element,'color',yard_text);
	
}

function unhighlight_field(yard) {

	var yard_element = 'p1_' + yard;
	set_element_style(yard_element,'color','#000000');
	if ((yard % 10) == 0) {
		set_element_style(yard_element,'backgroundColor','#ffffff');
	} else {
		set_element_style(yard_element,'backgroundColor','#009900');
	}

}

function generate_problem() {

	var a, b, c, x, y, other_answer;

	if (difficulty == 'easy') {
		a = random_number(0,10);
		b = random_number(1,9);
	}

	if (difficulty == 'medium') {
		a = random_number(0,9);
		b = random_number(1,99);
	}

	if (difficulty == 'hard') {
		a = random_number(0,99);
		b = random_number(1,99);	
	}

	problem_type = random_element(types);

	if (problem_type == 'add') {
		current_problem = a + ' + ' + b + ' = ';
		current_answer = a + b;
	}

	if (problem_type == 'sub') {
		x = Math.max(a,b);
		y = Math.min(a,b);
		current_problem = x + ' - ' + y + ' = ';
		current_answer = x - y;	
	}

	if (problem_type == 'mul') {
		current_problem = a + ' x ' + b + ' = ';
		current_answer = a*b;
	}

	if (problem_type == 'div') {
		c = a*b;
		current_problem = c + ' &divide; ' + b + ' = ';
		current_answer = a;	
	}
	
	all_answers = new Array();
	
	all_answers[all_answers.length] = current_answer;
	
	while (all_answers.length < 4) {
		
		var min = Math.ceil(current_answer/2) - 6;
		var max = Math.ceil(current_answer*2) + 6;
		
		if (min < 0) { min = 0; }
		
		other_answer = random_number(min, max);

		if (!array_search(other_answer, all_answers)) {
			all_answers[all_answers.length] = other_answer;
		}
	
	}
	
	all_answers.sort(int_compare);

}


function generate_reverse_problem() {

	var a, b, c, x, y, other_answer;

	all_answers = new Array();
	
	if (difficulty == 'easy') {
		a = random_number(2,10);
		b = random_number(2,9);
	}

	if (difficulty == 'medium') {
		a = random_number(2,9);
		b = random_number(2,99);
	}

	if (difficulty == 'hard') {
		a = random_number(2,99);
		b = random_number(2,99);	
	}

	problem_type = random_element(types);

	if (problem_type == 'add') {
		current_problem = (a + b) + ' = ';
		current_answer = ' ' + a + ' + ' + b + ' ';
		all_answers[all_answers.length] = current_answer;
		all_answers[all_answers.length] = ' ' + a + ' - ' + b + ' ';;
		all_answers[all_answers.length] = ' ' + a + ' x ' + b + ' ';;
		all_answers[all_answers.length] = ' ' + a + ' &divide; ' + b + ' ';;
	}

	if (problem_type == 'sub') {
		x = Math.max(a,b);
		y = Math.min(a,b);
		current_problem = (x - y) + ' = ';
		current_answer = ' ' + x + ' - ' + y + ' ';
		all_answers[all_answers.length] = ' ' + x + ' + ' + y + ' ';
		all_answers[all_answers.length] = current_answer;
		all_answers[all_answers.length] = ' ' + x + ' x ' + y + ' ';
		all_answers[all_answers.length] = ' ' + x + ' &divide; ' + y + ' ';
	}

	if (problem_type == 'mul') {
		current_problem = (a*b) + ' = ';
		current_answer = ' ' + a + ' x ' + b + ' ';
		all_answers[all_answers.length] = ' ' + a + ' + ' + b + ' ';
		all_answers[all_answers.length] = ' ' + a + ' - ' + b + ' ';
		all_answers[all_answers.length] = current_answer;
		all_answers[all_answers.length] = ' ' + a + ' &divide; ' + b + ' ';
	}

	if (problem_type == 'div') {
		c = a*b;
		current_problem = a + ' = ';
		current_answer = ' ' + c + ' &divide; ' + b + ' ';
		all_answers[all_answers.length] = ' ' + c + ' + ' + b + ' ';
		all_answers[all_answers.length] = ' ' + c + ' - ' + b + ' ';
		all_answers[all_answers.length] = ' ' + c + ' x ' + b + ' ';
		all_answers[all_answers.length] = current_answer;
	}
	
}


function formatted_answers(play_type) {

	var i = 0;
	var answer_string = '';
	
	for (i = 0; i < all_answers.length; i++) {
	
		answer_string += '<input type="button" value="' + all_answers[i] + '" onclick="' + play_type + '(\'' + all_answers[i] + '\')">&nbsp;';
	
	}
	
	return answer_string;

}

function generate_down_status() {

	var current_down = 0;
	var current_position = 0;
	var down_status = '';
	
	current_down = players[current_player]['down'];
	current_position = players[current_player]['position'];
	
	if (current_down == 1) {
		down_status += '1st';
	}
	
	if (current_down == 2) {
		down_status += '2nd';
	}
	
	if (current_down == 3) {
		down_status += '3rd';
	}
	
	if (current_down == 4) {
		down_status += '4th';
	}
	
	if (current_player == 2) {
		current_position = 100 - current_position;
	}
	
	if (current_position >= 90) {
		down_status += ' and Goal';
	} else {
		down_status += ' and 10';
	}
	
	return '<strong>' + down_status + '</strong>';

}

function next_problem() {
	
	if (game_over == 1) { return; }
	
	var content, play_image;

	if (is_computer_player()) {
		generate_reverse_problem();
	} else {
		generate_problem();
	}
	
	if (play_type == 'kick') {
		update_game_image('kick');
	} else {
		update_game_image('set');
	}
	
	content = '<p class="problem">' + current_problem + '<br>' + formatted_answers(play_type) + '<' + '/p>';
	write_to_element('content_and_results', content);
	
	write_to_element('down_status', generate_down_status());
	
	if (number_of_players == 2) {
		turn_time_limit = 10;
	} else {
		turn_time_limit = teams[players[2]['team']]['time_limit'];
	}
	do_turn_timer();

}


function touchdown() {

	// this function checks to see if the player made a touchdown

	if (current_player == 1) {
		if (players[1]['position'] >= 100) {
			players[1]['position'] = 100;
			return true;
		}
	} else {
		if (players[2]['position'] <= 0) {
			players[2]['position'] = 0;
			return true;
		}
	}
	
	return false;

}


function turnover() {

	var num = random_number(1, turnover_chance);
	
	if (num == 1) {
		return true;
	} else {
		return false;
	}

}

function update_position(yards) {

	// this function updates a players position		
	
	unhighlight_field(players[current_player]['position']);

	if (current_player == 1) {
		players[current_player]['position'] += yards;
	} else {
		players[current_player]['position'] -= yards;
	}

}


function reset_player_position() {

	if (current_player == 1) {
		players[current_player]['position'] = 20;
	} else {
		players[current_player]['position'] = 80;
	}
	highlight_field(current_player, players[current_player]['position']);

}

function update_scores() {
	write_to_element('p1_score', players[1]['score'] + '');
	write_to_element('p2_score', players[2]['score'] + '');
}

function update_game_image(type) {

	var play_image = '';
	
	if (type == 'set' && is_computer_player()) {
		// use snap rather than set for one player defense
		type = 'snap';
	} 
	
	if (type == 'set') {
		play_image = '<p><img src="images/set.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'run') {
		play_image = '<p><img src="images/run.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'coin') {
		play_image = '<p><img src="images/coin_toss.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'touchdown') {
		play_image = '<p><img src="images/touchdown.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'snap') {
		play_image = '<p><img src="images/snap.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'incomplete') {
		play_image = '<p><img src="images/incomplete.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'sack') {
		play_image = '<p><img src="images/sack.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'kick') {
		play_image = '<p><img src="images/kick.gif" alt="" width="225" height="225" border="0"><' + '/p>';	
	}
	
	if (type == 'kick-good') {
		play_image = '<p><img src="images/kick-good.gif" alt="" width="225" height="225" border="0"><' + '/p>';	
	}
	
	if (type == 'kick-bad') {
		play_image = '<p><img src="images/kick-bad.gif" alt="" width="225" height="225" border="0"><' + '/p>';	
	}
	
	if (type == 'interception') {
		play_image = '<p><img src="images/interception.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}

	if (type == 'lose') {
		play_image = '<p><img src="images/lose.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}

	if (type == 'win') {
		play_image = '<p><img src="images/win.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	if (type == 'tie') {
		play_image = '<p><img src="images/tie.gif" alt="" width="225" height="225" border="0"><' + '/p>';
	}
	
	write_to_element('play_image', play_image);

	set_element_style('play_image','backgroundColor',teams[players[current_player]['team']]['color']);

}


function player_is_correct(user_answer) {

	if (user_answer + '' == current_answer + '') {
		if (is_computer_player()) {
			return false;		
		} else {
			return true;
		}
	} else {
		if (is_computer_player()) {
			return true;		
		} else {
			return false;
		}
	}

}


function pass(user_answer) {

	clearTimeout(turn_timeout);
	clear_play_clock();

	var yards_gained = 0;
	var field_position = 0;
	var content = '';

	if (game_over == 1) { return; }

	if (player_is_correct(user_answer)) {
		
		yards_gained = random_number(2,5) * 5;
		
		update_position(yards_gained);
		
		if (touchdown()) {

			players[current_player]['score'] += 7;
			update_scores();

			update_game_image('touchdown');
			
			content = '<p class="results">Touchdown for ' + teams[players[current_player]['team']]['town'] + '! 7 points.<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();"><' + '/p>';

			write_to_element('content_and_results',content);

			//unhighlight_field(players[current_player]['position']); // don't unhighlight because position is 0 or 100
			
			switch_players();

			players[current_player]['down'] = 1;

			reset_player_position();

		} else {
		
			update_game_image('run');

			players[current_player]['down'] = 1;
			
			highlight_field(current_player, players[current_player]['position']);

			content = '<p class="results">Pass Complete! ' + teams[players[current_player]['team']]['town'] + ' gains ' + yards_gained + ' yards.  First Down.<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();"><' + '/p>';

			write_to_element('content_and_results',content);

		}

	} else {

		if (turnover()) {
		
			unhighlight_field(players[current_player]['position']);
			
			field_position = players[current_player]['position'];
			
			switch_players();
			
			update_game_image('interception');
			
			players[current_player]['position'] = field_position;

			players[current_player]['down'] = 1;
			
			highlight_field(current_player, players[current_player]['position']);

			content = '<p class="results">Interception! ' + teams[players[current_player]['team']]['town'] + ' snags the ball away!<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();"><' + '/p>';

			write_to_element('content_and_results',content);

		} else {
		
			if (players[current_player]['down'] == 4) {
			
				content = '<p class="results">' + teams[players[current_player]['team']]['town'] + ' couldn\'t make it happen. ';
				
				unhighlight_field(players[current_player]['position']);
				
				field_position = players[current_player]['position'];

				switch_players();
				
				players[current_player]['position'] = field_position;
				
				highlight_field(current_player, players[current_player]['position']);

				update_game_image('set');
			
				content += teams[players[current_player]['team']]['town'] + '\'s ball.<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();"><' + '/p>';
	
				write_to_element('content_and_results',content);

			} else {
			
				var chance = random_number(1, sack_chance);
				
				if (chance == 1) {
					update_game_image('sack');
					content = 'The ' + teams[players[current_player]['team']]['town'] + ' Quarterback got sacked!';
				} else {
					update_game_image('incomplete');
					content = 'The ' + teams[players[current_player]['team']]['town'] + ' pass fell short.';
				}

				if (players[current_player]['down'] == 3) {
					if (is_computer_player()) {
						content += '<br><br><input type="button" value="Punt" onclick="punt();">';
					} else {
						// give the user a choice of play types
						content += '<br><br><input type="button" value="Pass or Run" onclick="play_type=\'pass\'; next_problem();">&nbsp;&nbsp;&nbsp;<input type="button" value="Field Goal" onclick="play_type=\'kick\'; next_problem();">&nbsp;&nbsp;&nbsp;<input type="button" value="Punt" onclick="punt();">';
					}
				} else {
					content += '<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();">';
				}
			
				content = '<p class="results">' + content + '<' + '/p>';
				
				write_to_element('content_and_results',content);
							
				players[current_player]['down'] += 1;
				
			}
		
		}

	}

}


function is_computer_player() {

	if (number_of_players == 1 && current_player == 2) {
		return true;
	} else {
		return false;
	}
	
}


function fieldgoal() {

	// this function checks to see if the player made a field_goal (80% chance of success if within 50 yards.  No chance otherwise)

	var chance = 0;
	
	chance = random_number(1,field_goal_miss_chance);
	
	if (current_player == 1) {
		if (chance != 1 && players[1]['position'] >= 50) {
			return true;
		} else {
			return false;
		}
	} else {
		if (chance != 1 && players[2]['position'] <= 50) {
			return true;
		} else {
			return false;
		}
	}
	
	return false;

}


function kick(user_answer) {

	var content = '';
	
	clearTimeout(turn_timeout);
	clear_play_clock();

	if (game_over == 1) { return; }

	if (player_is_correct(user_answer)) {
	
		if (fieldgoal()) {

			players[current_player]['score'] += 3;

			update_scores();

			update_game_image('kick-good');
		
			content = '<p class="results">Field Goal for ' + teams[players[current_player]['team']]['town'] + ' is good! 3 points.<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();"><' + '/p>';

			write_to_element('content_and_results',content);

			unhighlight_field(players[current_player]['position']);

			switch_players();

			players[current_player]['down'] = 1;

			reset_player_position();
			
			return;
		
		}
	
	}

	content = '<p class="results">' + teams[players[current_player]['team']]['town'] + ' missed the kick. ';

	update_game_image('kick-bad');

	unhighlight_field(players[current_player]['position']);
	
	field_position = players[current_player]['position'];

	switch_players();
	
	players[current_player]['position'] = field_position;
	
	players[current_player]['down'] = 0;

	highlight_field(current_player, players[current_player]['position']);

	content += teams[players[current_player]['team']]['town'] + '\'s ball.<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();"><' + '/p>';

	write_to_element('content_and_results',content);
	
}


function punt_position(yards) {

	// this function updates a players position due to a punt		
	
	if (current_player == 1) {
		players[current_player]['position'] = 0 + yards;
	} else {
		players[current_player]['position'] = 100 - yards;
	}
	
}


function punt() {

	var yards = 0;
	var field_position = 0;
	var content = '';

	if (game_over == 'yes') { return; }

	update_game_image('kick');
	
	yards = random_number(1,5) * 5;
		
	content = '<p class="results">' + teams[players[current_player]['team']]['town'] + ' punts the ball way down the field. ';

	unhighlight_field(players[current_player]['position']);

	switch_players();

	content += '' + teams[players[current_player]['team']]['town'] + ' will return it.<br><br><input type="button" value="Continue" onclick="play_type=\'pass\'; next_problem();"><' + '/p>';

	write_to_element('content_and_results',content);

	punt_position(yards);

	highlight_field(current_player, players[current_player]['position']);

	players[current_player]['down'] = 1;

	
}




// Screen Variables (these are used to replace the main screen with content)

var intro_screen = '<table border="0" cellpadding="5" cellspacing="0" class="splash" width="600" height="400" align="center" bgcolor="#ffffff"><tr><td align="center"><p><a href="" onclick="setup_game(); return false;" title="Click to start the game"><img src="images/title.gif" alt="Tackle Math Ball" width="588" height="300" border="0"><'
 + '/a><'
 + '/p><p><input id="setup_button" type="button" value="Setup Game" onclick="setup_game();"><'
 + '/p><'
 + '/td><'
 + '/tr><'
 + '/table>';

var setup_screen = '<table border="0" cellpadding="0" cellspacing="0" class="setup" width="600" height="400" align="center" bgcolor="#ffffff"><tr><th valign="top" width="50" bgcolor="#ffcc00">P1<'
 + '/th><th valign="top" width="50" bgcolor="#ffcc00">P2<'
 + '/th><th valign="top" width="50" bgcolor="#ffcc00">#<'
 + '/th><th valign="top" width="450" bgcolor="#ffcc00" align="left">Team<'
 + '/th><td valign="top" align="left" rowspan="13" width="300" style="padding: 10px; background-color: #ffffff;"><h1>Game Setup<'
 + '/h1><p><strong>Time Limit:<br><label><input type="radio" id="timelimit5" name="time_limit" value="5" checked> 5 minutes<'
 + '/label><br><label><input type="radio" id="timelimit10" name="time_limit" value="10"> 10 minutes<'
 + '/label><'
 + '/strong><'
 + '/p><p><strong>Players:<br><label><input type="radio" id="oneplayer" name="number_of_players" value="1" checked> Human vs. Computer<'
 + '/label><br><label><input type="radio" id="twoplayer" name="number_of_players" value="2"> Human vs. Human<'
 + '/label><'
 + '/strong><'
 + '/p><p align="center"><input type="button" value="Start Game" onclick="start_game();"><'
 + '/p><'
 + '/td><'
 + '/tr>' + create_team_list() + '<'
 + '/table>';

var game_screen = '<table border="0" cellpadding="0" cellspacing="0" class="game" width="600" height="400" align="center" bgcolor="#ffffff"><tr><td rowspan="2" width="215">'
 + '<table summary="Football Field" border="0" width="200" cellspacing="0" cellpadding="0">'
 + '<tr><td align="center"><div id="p1_endzone">PLAYER ONE<' + '/div><'
 + '/td><'
 + '/tr><tr><td bgcolor="#000000"><img src="images/spacer.gif" width="1" height="2"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="5" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_5"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_10"><span style="font-size: 9px; font-weight: bold;">10<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_15"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_20"><span style="font-size: 9px; font-weight: bold;">20<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_25"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_30"><span style="font-size: 9px; font-weight: bold;">30<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_35"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_40"><span style="font-size: 9px; font-weight: bold;">40<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_45"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_50"><span style="font-size: 9px; font-weight: bold;">50<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_55"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_60"><span style="font-size: 9px; font-weight: bold;">40<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_65"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_70"><span style="font-size: 9px; font-weight: bold;">30<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_75"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_80"><span style="font-size: 9px; font-weight: bold;">20<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_85"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#ffffff" id="p1_90"><span style="font-size: 9px; font-weight: bold;">10<'
 + '/span><img src="images/spacer.gif" width="1" height="10"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="7" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900" id="p1_95"><img src="images/spacer.gif" width="1" height="10" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#009900"><img src="images/spacer.gif" width="1" height="5" align="left"><'
 + '/td><'
 + '/tr><tr><td bgcolor="#000000"><img src="images/spacer.gif" width="1" height="2"><'
 + '/td><'
 + '/tr><tr><td align="center"><div id="p2_endzone">PLAYER TWO<' + '/div><'
 + '/td><'
 + '/tr><'
 + '/table><'
 + '/td><td valign="top" align="center" width="225" height="225"><div id="play_image"><img src="images/spacer.gif" width="225" height="225"><' + '/div><'
 + '/td><td valign="top" align="center" width="160"><p><input type="button" id="start_over_button" value="Start Over" onclick="new_game();"><' + '/p>'
 + '<div id="game_timer"><'
 + '/div><div id="scoreboard"><' + '/div>'
 + '<p><span id="down_status"><' + '/span><' + '/p>'
 + '<p><strong><span id="turn_timer"><' + '/span><' + '/strong>'
 + '<' + '/p><'
 + '/td><'
 + '/tr><tr><td align="center" colspan="2"><div id="content_and_results"><'
 + '/div><'
 + '/td><'
 + '/tr><'
 + '/table>';

var win_string = '<table border="0" cellpadding="5" cellspacing="0" class="lose" width="600" height="400" align="center" bgcolor="#ffffff"><tr><td align="center"><p><strong><big>TEAMNAME WINS!<'
 + '/big><'
 + '/strong><br>TEAMNAME fans have reason to chear today after a spectacular win against OPPONENT TEAM. The team quarterback was heard saying: "Were going all the way this year!  Wooo-hoo!"<table border="0" cellspacing="2" cellpadding="2" id="win_image"><tr><td><img src="images/win.gif" alt="" width="320" height="240" border="0"><'
 + '/td><'
 + '/tr><'
 + '/table><p><input id="new_game_button" type="button" value="Play Again?" onclick="new_game();"><'
 + '/p><'
 + '/td><'
 + '/tr><'
 + '/table>';

var lose_string = '<table border="0" cellpadding="5" cellspacing="0" class="lose" width="600" height="400" align="center" bgcolor="#ffffff"><tr><td align="center"><p><strong><big>TEAMNAME LOSES!<'
 + '/big><'
 + '/strong><br>After a heartbreaking loss to OPPONENT TEAM, TEAMNAME manager said "They were the better team out there today but we\'ll show them next time."<table border="0" cellspacing="2" cellpadding="2" id="lose_image"><tr><td><img src="images/lose.gif" alt="" width="144" height="240" border="0"><'
 + '/td><'
 + '/tr><'
 + '/table><p><input id="new_game_button" type="button" value="Play Again?" onclick="new_game();"><'
 + '/p><'
 + '/td><'
 + '/tr><'
 + '/table>';

