var puzzle_id = ""; // fetched during InitializeBabble()
var account_type = 0; // fetched during InitializeBabble()

function InitializeBabble () {
	var myAjax = new Ajax.Request ('/action/initialize_babble', { method: 'get', onComplete: InitializeBabblePostOp } );
}

function InitializeBabblePostOp (result) {
	//alert(result.responseText);
	var response = result.responseText;

	try {
		var data = eval("(" + result.responseText + ")");
	}
	catch (e) {
		DisplayError("Initialization error. Contact Dr_God if this persists.");
		return;
	}
	
	puzzle_id = data.puzzle_id;
	account_type = data.account_type;
	free_trial = data.free_trial;
	GetWordList();
	
	ClockSniffer();
	
	if (data.last_word) DisplayPuzzleMessage("Last word added: \"" + data.last_word + "\" at " + data.last_word_time);
}

function GetWordList () {
	var myAjax = new Ajax.Request ('/action/get_word_list', { method: 'get', parameters: 'puzzleid='+puzzle_id, onComplete: GetWordListPostOp } );
}

function GetWordListPostOp (result) {
	//$('testing').innerHTML += result.responseText + '<br>';
	var response = result.responseText;

	try {
		var data = eval("(" + result.responseText + ")");
	}
	catch (e) {
		DisplayError("Couldn't fetch word list. Please try again in a minute.");
		return;
	}
	
	$('word_list_loading').style.display = 'none';
	
	// populate the word list
	for (var i=0; i<data.words.length; i++) {
		AddToWordList(data.words[i][0],data.words[i][1],data.words[i][2]);
	}
	
	UpdateWordListTotals();
}

function AddWord (word) {
	var myAjax = new Ajax.Request ('/action/add_word', { method: 'post', parameters: 'word='+word+'&puzzleid='+puzzle_id, onComplete: AddWordPostOp } );
}

function AddWordPostOp (result) {
	//$('testing').innerHTML += result.responseText + '<br>';
	var response = result.responseText;

	try {
		var data = eval("(" + result.responseText + ")");
	}
	catch (e) {
		DisplayError("Word couldn't be added. Please try again in a minute.");
		return;
	}
	
	if (data.error) {
		if (data.error == "too_short") DisplayPuzzleMessage("Words have to be at least four letters long","error");
		else if (data.error == "dne") DisplayPuzzleMessage("\"" + data.word + "\" does not exist in the puzzle","error");
		else if (data.error == "not_valid") DisplayPuzzleMessage("\"" + data.word + "\" was not found in the dictionary","error");
		else if (data.error == "duplicate") DisplayPuzzleMessage("You've already entered \"" + data.word + "\"","error");
		else if (data.error == "not_logged_in") DisplayPuzzleMessage("Word could not be added because you aren't logged in","error");
	}
	else {
		AddToWordList(data.word,data.letters,data.points);
		DisplayPuzzleMessage("Last word added: \"" + data.word + "\" at " + data.time_entered);
		UpdateWordListTotals();
		UpdateStats(data.word,data.letters,data.tile);
		if ($('total_words_left') && parseInt($('total_words_left').innerHTML) == 0) {
			ShowBillboard('congrats');
		}
	}
}

function DisplayPuzzleMessage (message,error) {
	if (error) {
		$('sub_puzzle_message').style.backgroundColor = "#900";
		$('sub_puzzle_message').style.color = "#fff";
	}
	else {
		$('sub_puzzle_message').style.backgroundColor = "";
		$('sub_puzzle_message').style.color = "";
	}
	$('sub_puzzle_message').innerHTML = message;
}

function AddToWordList (word, letters, points) {
	var parent_div = $('word_list');
	var td_html = '';
	var row_added = false;
	
	if (parent_div.rows.length == 0) { // the word list is empty
		var row = parent_div.insertRow(0);
		row_added = true;
	}
	else {
		// step through word list until the new word is greater than the current word
		for (var x=0; x<parent_div.rows.length; x++) {
			cur_word = document.getElementsByClassName("word",parent_div.rows[x]);
			if (word.toLowerCase() < cur_word[0].innerHTML.toLowerCase()) {
				var row = parent_div.insertRow(x);
				row_added = true;
				x = parent_div.rows.length; // this will kick us out of both loops
			}
		}
	}
	
	if (!row_added) { // this means that the word is greater than the last word on the list - append the new word at the end
		var row = parent_div.insertRow(parent_div.rows.length);
	}
	
	// create "lookup" <td>
	var lookup_cell = row.insertCell(0);
	lookup_cell.className = "lookup";

	// create "word" <td>
	var word_cell = row.insertCell(1);
	word_cell.className = "word";

	// create "letters" <td>
	var letters_cell = row.insertCell(2);
	letters_cell.className = "letters";

	// create "points" <td>
	var points_cell = row.insertCell(3);
	points_cell.className = "points";

	// add the beef
	lookup_cell.innerHTML = '<a href="http://dictionary.reference.com/search?q='+word+'" target="dictionary"><img src="/images/lookup_word.gif" alt="Look Up Word" width="12" height="12" /></a>';
	word_cell.innerHTML = word;
	letters_cell.innerHTML = letters;
	points_cell.innerHTML = points;
}

function GetAverageLength () {
	var parent_div = $('word_list');
	var total_letters = 0;
	var total_words = parent_div.rows.length;
	
	if (total_words == 0) {
		return 0;
	}
	else {
		for (var i=0; i<total_words; i++) {
			cur_letters = document.getElementsByClassName("letters",parent_div.rows[i]);
			total_letters = total_letters + parseInt(cur_letters[0].innerHTML);
		}
		
		return Math.round(total_letters/total_words*100)/100;
	}
}

function GetTotalPoints () {
	var parent_div = $('word_list');
	var total_points = 0;
	var total_words = parent_div.rows.length;
	
	for (var i=0; i<total_words; i++) {
		cur_points = document.getElementsByClassName("points",parent_div.rows[i]);
		total_points = total_points + parseInt(cur_points[0].innerHTML);
	}
	
	return total_points;
}

function UpdateWordListTotals () {
	$('total_words_found').innerHTML = $('word_list').rows.length + ' words';
	$('average_length').innerHTML = GetAverageLength();
	$('total_points').innerHTML = GetTotalPoints();
	$('pts').innerHTML = "pts";
}

function UpdateStats (word,letters,tile) {
	if ($('stats_'+tile)) $('stats_'+tile).innerHTML = parseInt($('stats_'+tile).innerHTML) + 1;
	FlashText('stats_'+tile,11);
	if ($('stats_word_'+letters)) $('stats_word_'+letters).innerHTML = parseInt($('stats_word_'+letters).innerHTML) + 1;
	if ($('total_words_left')) $('total_words_left').innerHTML = parseInt($('total_words_left').innerHTML) - 1;
	if ($(tile)) if (parseInt($('stats_'+tile).innerHTML) == parseInt($('stats_total_'+tile).innerHTML)) $(tile).className = "panel_block closed";
	if ($('letters_total_'+letters)) if (parseInt($('stats_word_'+letters).innerHTML) == parseInt($('stats_word_total_'+letters).innerHTML)) $('letters_total_'+letters).className = "panel_block closed";
}

function FlashText(divid,reps) {
	if ($(divid)) {
		if (reps % 2 == 0) {
			$(divid).style.color = '#fff';
		}
		else {
			$(divid).style.color = '';
		}
		reps--;
		if (reps > 0) setTimeout('FlashText(\''+divid+'\',\''+reps+'\')',200);
	}
}

function ClockSniffer () {
	var myAjax = new Ajax.Request ('/action/get_time_left', { method: 'get', parameters: 'puzzleid='+puzzle_id, onComplete: ClockSnifferPostOp } );
}

function ClockSnifferPostOp (result) {
	var time_left = result.responseText; /* response = time left in minutes */

	if (time_left == -1) location.reload();
	else if (Math.floor(time_left) == 0) $('time_left').innerHTML = 'Less than 1 minute left';
	else if (Math.floor(time_left) == 1) $('time_left').innerHTML = '1 minute left';
	else if (Math.floor(time_left/60) == 0) $('time_left').innerHTML = (Math.floor(time_left) + 1) + ' minutes left';
	else if (Math.floor(time_left/60) == 1) $('time_left').innerHTML = '1+ hour left';
	else $('time_left').innerHTML = Math.floor(time_left/60) + '+ hours left';

	setTimeout('ClockSniffer('+puzzle_id+')',15000);
}

function ShowBillboard (type) {
	$('tile_stats').style.display = 'none';
	if (type == 'congrats') {
		$('billboard').style.background = '#000 url(../images/fireworks.gif) no-repeat';
		$('billboard').style.color = '#fff';
		$('billboard').style.display = 'block';
		$('billboard').innerHTML = '<div style="text-align: center; padding: 12px 15px"><div style="margin: 20px 0 10px 0; font-size: 18px; font-weight: bold; color: #ff0">Congratulations!</div><div style="margin-bottom: 25px">You\'ve completed today\'s puzzle!</div>[<a href="javascript:void(0);" onClick="CloseBillboard()" style="color: #fff">close</a>]</div>';
	}
	else if (type == 'sign_up') {
		$('billboard').style.background = '#000 url(../images/fireworks.gif) no-repeat';
		$('billboard').style.color = '#fff';
		$('billboard').style.display = 'block';
		$('billboard').innerHTML = '<div style="text-align: center; padding: 12px 15px"><div style="margin: 20px 0 10px 0; font-size: 18px; font-weight: bold; color: #ff0">Congratulations!</div><div style="margin-bottom: 25px">You\'ve completed today\'s puzzle!</div>[<a href="javascript:void(0);" onClick="CloseBillboard()" style="color: #fff">close</a>]</div>';
	}
}

function CloseBillboard () {
	$('billboard').style.display = 'none';
	$('tile_stats').style.display = '';
}