/* Main Timeline script */

// Variable Initialization
game_over = 1;

function initialize_game() {

	game_over = 0;
	number_of_players = 1;
	level = 'us-easy';

	current_player = 1;
	
	players = new Array();

	players[1] = new Array();
	players[2] = new Array();
	
	players[1]['name'] = '<em>Not Playing</em>';
	players[2]['name'] = '<em>Not Playing</em>';
	
	players[1]['score'] = 0;
	players[2]['score'] = 0;

	players[1]['round'] = 1;
	players[2]['round'] = 1;

	players[1]['score_element'] = 'p1_score';
	players[2]['score_element'] = 'p2_score';

	players[1]['name_element'] = 'p1_name';
	players[2]['name_element'] = 'p2_name';


}


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

}


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?')) {
			clearTimeout(turn_timeout);
			game_over = 1;
			setup_game();
		}
	}
}


function start_game() {

	level = get_field_value_by_name('level');
	number_of_players = get_field_value_by_name('players');

	write_to_element('main', game_screen);

	players[1]['name'] = prompt('Player One, what is your name?', 'Player One');
	write_to_element(players[1]['name_element'], players[1]['name']);

	if (number_of_players > 1) {
		players[2]['name'] = prompt('Player Two, what is your name?', 'Player Two');
	}
	write_to_element(players[2]['name_element'], players[2]['name']);

	/*
	Should be in a next_question function
	//document.getElementById('curtain').style.backgroundImage = 'none';
	//document.getElementById('curtain').style.zIndex = 0;
	*/
	update_scores();
	next_problem();

}

function highlight_player() {

	if (current_player == '1') {
		set_element_style(players[1]['name_element'],'backgroundColor', '#FFFC67');
		set_element_style(players[2]['name_element'],'backgroundColor', '#ffffff');
	} else {
		set_element_style(players[2]['name_element'],'backgroundColor', '#FFFC67');
		set_element_style(players[1]['name_element'],'backgroundColor', '#ffffff');
	}

}

function end_game_check() {

	if (number_of_players > 1) {
		if (players[1]['round'] > number_of_rounds && players[2]['round'] > number_of_rounds) {
			return true;
		} else {
			return false;
		}
	} else {
		if (players[1]['round'] > number_of_rounds) {
			return true;
		} else {
			return false;
		}
	}

}


function format_date(date_var) {

	// Take a YYYYMMDD string and converts to a nicer date
	
	var final_date, this_date, year, month, day;
	
	date_start = '';
	date_end = '';
	final_date = '';
	bc = '';
	
	this_date = date_var.toString();
	
	if (this_date.substr(0,1) == '-') {
		bc = ' BC';
		this_date = this_date.substr(1);
	}

	// "fix" any short dates...
	
	while (this_date.length < 8) {
		this_date = '0' + this_date;
	}
	
	year = this_date.substr(0,4);
	month = this_date.substr(4,2);
	day = this_date.substr(6,2);
	
	if (month != '00') {
		date_start = '<span style="font-size: 9px;">';
		final_date += month + '/';
		date_end = '</span>';
	}
	
	if (day != '00') {
		final_date += day + '/';
	}
	
	while (year.substr(0,1) == 0) {
		year = year.substr(1);
	}
	
	final_date += year;
	
	return date_start + final_date + date_end + bc;

}


function setup_events() {

	var current_index, i, j, this_box, this_date, this_index;
	
	answers_temp = new Array();
	correct_answers = new Array();
	selected_events = new Array();
	selected_events['labels'] = new Array();
	selected_events['event_dates'] = new Array();
	
	while (selected_events['labels'].length < 8) {
	
		current_index = random_number(0, (events[level]['labels'].length - 1));
		
		if (!array_search(events[level]['event_dates'][current_index], selected_events['event_dates'])) {
			
			selected_events['labels'][selected_events['labels'].length] =  events[level]['labels'][current_index];
			selected_events['event_dates'][selected_events['event_dates'].length] =  events[level]['event_dates'][current_index];
		
		}
	
	}
	
	for (i = 0; i < selected_events['labels'].length; i++) {
	
		// set the event boxes
		this_box = 'box' + (i + 1);
		write_to_element(this_box, selected_events['labels'][i]);
		
		this_index = 'date' + selected_events['event_dates'][i];
		answers_temp[this_index] = this_box;
	
	}
	
	selected_events['event_dates'].sort(int_compare);

	for (i = 0; i < selected_events['labels'].length; i++) {
	
		// set the date boxes
		this_date = 'date' + (i + 1);
		write_to_element(this_date, format_date(selected_events['event_dates'][i]));
		
		// set the current_answer array items
		
		this_index = 'date' + selected_events['event_dates'][i];
		correct_answers[i] = answers_temp[this_index];
			
	}
	
}

function make_events_dragable() {

	var this_box, this_box_object;

	for (i=0; i < 8; i++) {
	
		// convert relative to absolute so drag/drop works as expected
		this_box = 'box' + (i + 1);
		this_box_object = document.getElementById(this_box);
		
		// assign the current value to the box
		this_box_object.style.left = this_box_object.offsetLeft + 'px';
		
		// make the item draggable
		Drag.init(this_box_object);
		
	}

}

function next_problem() {

	if (end_game_check()) {
		end_game();
		return false;
	}
	
	players[current_player]['round']++;

	highlight_player();
	
	write_to_element('box_and_date_container', box_and_date_content);

	setup_events();
	
	make_events_dragable();
	
	document.getElementById('box_container').style.visibility = 'visible';
	document.getElementById('date_container').style.visibility = 'visible';

	turn_time = turn_time_limit;
	do_turn_timer();
	
}


function update_scores() {

	write_to_element(players[1]['score_element'], players[1]['score']);
	write_to_element(players[2]['score_element'], players[2]['score']);

}

function end_game() {

	game_over = 1;
	clearTimeout(turn_timeout);
	clear_play_clock();

	var win_screen = '';

	if (players[1]['score'] == players[2]['score']) {
		win_screen = 'The game ends in a tie.  Score for both players:<br><br> ' + players[1]['score'];
	} else {
		if (players[1]['score'] > players[2]['score']) {
			win_screen = '<strong>' + players[1]['name'] + '</strong> is the winner!<br><br><strong>Score:</strong> ' + players[1]['score'];
		} else {
			win_screen = '<strong>' + players[2]['name'] + '</strong> is the winner!<br><br><strong>Score:</strong> ' + players[2]['score'];
		}	
	}
	
	win_screen = ''
	+ '<table summary="Win Screen" border="0" width="90%" cellspacing="0" cellpadding="0" align="center">'
	+ '	<tr><td align="center">'
	+ '	<p align="center">' + win_screen + '</p>'
	+ '<p align="center"><input type="button" class="submitbutton" value="Play Again?" onclick="new_game();">'
	+ '	</p>'
	+ '	</td></tr>'
	+ '</table>'
	+ '';

	write_to_element('main',win_screen);

}


function switch_players() {

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

}

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 clear_play_clock() {

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

}

function do_turn_timer() {

	var turn_display_time = 'Time: ' + format_seconds(turn_time);
	write_to_element('turn_timer', turn_display_time);

	turn_time -= 1;

	if (turn_time < 0) {
	
		end_turn();
		
	} else {
	
		turn_timeout = setTimeout("do_turn_timer();", 1000);
	
	}
	
} 

function end_turn() {

	var status = '';
	
	clearTimeout(turn_timeout);
	//clear_play_clock();

	status = '<p align="center">';
	
	s = check_answer('end_turn');

	if (s == correct_answers.length) {
		status += 'Everything is correct! - 8 points!<br><br>';
		players[current_player]['score'] += 8;
	} else {
		status += 'You got ' + s + ' correct - ' + s + ' points!<br><br>';
		players[current_player]['score'] += s;
	}

	update_scores();
	
	if (number_of_players > 1) {
	
		status += '<input type="button" value="Next Player" onclick="next_problem();">';
		switch_players();
	
	} else {
	
		status += '<input class="submitbutton" type="button" value="Continue" onclick="next_problem();">';	
	
	}
	
	status += '</p>';
	
	write_to_element('box_and_date_container', status);


}


function check_answer(situation) {

	var i, this_box, this_value;
	
	current_status = new Array();
	
	for (i=0; i < 8; i++) {
	
		// get a reference to each element
		this_box = 'box' + (i + 1);
		this_box_object = document.getElementById(this_box);
		
		// assign the current value to the box
		this_value = this_box_object.offsetLeft;
		
		// add parameters to the current_status array
		current_status[i] = new Array();
		current_status[i]['position'] = this_value;
		current_status[i]['box'] = this_box;
		
	}
	
	current_status.sort(object_position_property_sort);		
	user_answers = break_md_array(current_status, 'box');

	s = array_similarity(correct_answers, user_answers);
	
	if (situation == 'end_turn') {
		// we don't need to display anything because the turn is over.
		return s;
	} else {
		if (s == correct_answers.length) {
			// everything is correct, end the turn
			end_turn();
		} else {
			// display to the user how many are correct
			alert('Correct: ' + s + ' of ' + (correct_answers.length));
		}
	}

}
