/**
 * The Sonic Center
 * source/ajax/matchup.js: Player Matchup - AJAX code (client-side).
 * Version: 3.9
 * Created: 2008/01/13
 * Accessibility: Direct via <script>.
 */

// AJAX base code from http://www.w3schools.com/ajax/
function GetXmlHttpObject()
{
	var xmlHttp=null;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch (e)
		{
			xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
		}
	}
	return xmlHttp;
}

/**
 * gameChange(): Requests category information for the selected game.
 * @param game Game ID.
 */
function gameChange(game)
{
	if (game == 0)
	{
		document.getElementById('categories').style.display = 'none';
		document.getElementById('players').style.display = 'none';
		document.getElementById('stats').style.display = 'none';
		createTitle();
		return;
	}
	
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp == null)
	{
		alert ('Your browser does not support AJAX!');
		return;
	}
	
	var url = '/source/ajax/matchup.php';
	url = url + '?func=game&s=&g=' + game;
	xmlHttp.onreadystatechange = gameResponse;
	xmlHttp.open('GET', url, true);
	xmlHttp.send(null);
}

/**
 * gameResponse(): Updates category dropdown by response from gameChange().
 */
function gameResponse()
{
	if (xmlHttp.readyState == 4)
	{
		document.getElementById('category').innerHTML = "<option value='0'>----------- Category -----------</option>" + xmlHttp.responseText;
		document.getElementById('categories').style.display = 'table-row';
		document.getElementById('players').style.display = 'none';
		document.getElementById('stats').style.display = 'none';
		createTitle();
	}
}

/**
 * categoryChange(): Requests player information for the selected category and game.
 * @param category Category ID.
 */
function categoryChange(category)
{
	if (category == 0)
	{
		document.getElementById('players').style.display = 'none';
		createTitle();
		return;
	}
	
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp == null)
	{
		alert ('Your browser does not support AJAX!');
		return;
	}
	
	var game = document.getElementById('game').value;
	var url = '/source/ajax/matchup.php';
	url = url + '?func=category&g=' + game + '&c=' + category;
	xmlHttp.onreadystatechange = categoryResponse;
	xmlHttp.open('GET', url, true);
	xmlHttp.send(null);
}

/**
 * categoryResponse(): Updates player dropdowns by response from categoryChange().
 */
function categoryResponse()
{
	if (xmlHttp.readyState == 4)
	{
		document.getElementById('stats').style.display = 'none';
		if (xmlHttp.responseText.length > 0)
		{
			document.getElementById('no-submissions').style.display = 'none';
			document.getElementById('p1').innerHTML = "<option value=''>----------- Player 1 -----------</option>" + xmlHttp.responseText;
			document.getElementById('p2').innerHTML = "<option value=''>----------- Player 2 -----------</option>" + xmlHttp.responseText;
			document.getElementById('players').style.display = 'table';
		}
		else
		{
			document.getElementById('players').style.display = 'none';
			document.getElementById('no-submissions').style.display = 'block';
		}
		createTitle();
	}
}

/**
 * playerChange(): Requests stats information for the selected players, category, and game.
 */
function playerChange()
{
	var p1 = document.getElementById('p1').value;
	var p2 = document.getElementById('p2').value;
	
	if (p1 == '' || p2 == '')
	{
		createTitle();
		return;
	}
	
	xmlHttp = GetXmlHttpObject();
	if (xmlHttp == null)
	{
		alert ('Your browser does not support AJAX!');
		return;
	}
	
	var game = document.getElementById('game').value;
	var category = document.getElementById('category').value;
	var url = '/source/ajax/matchup.php';
	url = url + '?func=stats&g=' + game + '&c=' + category + '&p1=' + p1 + '&p2=' + p2;
	xmlHttp.onreadystatechange = playerResponse;
	xmlHttp.open('GET', url, true);
	xmlHttp.send(null);
}

/**
 * playerResponse(): Updates stats table by response from playerChange().
 */
function playerResponse()
{
	if (xmlHttp.readyState == 4)
	{
		if (xmlHttp.responseText.length > 0)
		{
			document.getElementById('stats').innerHTML = xmlHttp.responseText;
			document.getElementById('stats').style.display = 'inline';
		}
		else
		{
			// TODO: Show an error.
			document.getElementById('stats').style.display = 'none';
		}
		createTitle();
	}
}

/**
 * createTitle(): Create the page title based on the selected players.
 */
function createTitle()
{
	var newTitle;
	
	game = document.getElementById('game');
	category = document.getElementById('category');
	p1 = document.getElementById('p1');
	p2 = document.getElementById('p2');
	
	if (game.value == '' || category.value == '' ||
	    p1.value == '' || p2.value == '' ||
	    game.value == 0 || p1.value == 0 ||
	    p2.value == 0 || category.value == 0)
	{
		// No players selected.
		newTitle = "Player Matchup";
	}
	else
	{
		// Players selected.
		
		// Get Player 1's name.
		p1name_raw = p1.options(p1.selectedIndex).text;
		p1name_pos = p1name_raw.indexOf('-');
		p1name = p1name_raw.substring(p1name_pos + 2);
		
		// Get Player 2's name.
		p2name_raw = p2.options(p2.selectedIndex).text;
		p2name_pos = p2name_raw.indexOf('-');
		p2name = p2name_raw.substring(p2name_pos + 2);
		
		// Create the title.
		newTitle = "Player Matchup: " + p1name + " vs. " + p2name + "!";
	}
	
	// Set the title. (Currently only sets the heading.)
	// TODO: Set the main page title according to the skin settings.
	document.getElementById('heading').innerHTML = newTitle;
}

