var serverXML
var index = -1
var curServer = 0
var queue = 0
var maxRequests = 5
var players = 0
var database = [[],[],[]]

var stop = 0

function showServerList(xml)
{
	html = document.getElementById("content")

	serverXML = xml.documentElement

	if(serverXML.getElementsByTagName("server").length == 1)
	{
		//debug
		//alertXML(serverXML)
		alert(serverXML.getElementsByTagName("ip")[0].firstChild.nodeValue + ":\n\n" + serverXML.getElementsByTagName("port")[0].firstChild.nodeValue)
	}
	else
	{
		wtf = document.getElementById("logo")
		wtf.parentNode.removeChild(wtf)

		// stupid ghetto
		document.getElementById("status").innerHTML = "request completed successfully."

		buildTable()
		queryServers()
		initGUI()
	}
}

function queryServers()
{
	if(queue == 0)
	{
		queue = maxRequests

		for(var i = 0; i < maxRequests; i++)
		{
			if(index < serverXML.getElementsByTagName("server").length - 1)
			{
				index++
				var data = []
				data.push("ip=" + serverXML.getElementsByTagName("server")[index].childNodes[0].childNodes[0].nodeValue)
				data.push("&port=" + serverXML.getElementsByTagName("server")[index].childNodes[1].childNodes[0].nodeValue)
				sendRequest("POST", "serverQuery.php", populateTable, data)

			}
		}

	}
}

var debug = 0

function populateTable(xml)
{
	if(debug)
	{
		debug++
		if(debug > (15 + 1))
			return
	}

	curServer++

	// temporary and ghetto
	document.getElementById("status").innerHTML = "server " + curServer + " of " + serverXML.getElementsByTagName("server").length + " | " + players + " players"

	queue--

	if(queue == 0)
		queryServers()

	if(xml.getElementsByTagName("error")[0])
	{
		var table = document.getElementById("dataTable")
		var row = table.insertRow(-1)

		var data = []

		// error message, errortype, errormask, ip, port

		for(var nodeNum = 0; nodeNum < xml.childNodes.length; nodeNum++)
			if(parseInt(xml.childNodes[nodeNum].childNodes.length))
			{
				for(var x = 0; x < xml.childNodes[nodeNum].childNodes.length; x++)
					if(xml.childNodes[nodeNum].childNodes[x].childNodes.length)
						data.push(xml.childNodes[nodeNum].childNodes[x].firstChild.nodeValue)
				break
			}

		if(data[1] == "error")
			database[2].push(data)
		else
			database[1].push(data)

		for(var x = 0; x < 10; x++)
		{
			with(cell = row.insertCell(-1))
			{
				if(data[1] == "error")
				{
					style.color = "#f00"

					onmouseover = function()
					{
						ddrivetip("Server " + data[3] + ":" + data[4] + " did not respond in the allotted time period.", "300", "#000")
					};
					onmouseout = hideddrivetip
				}
				else
				{
					style.color = "rgb(226, 197, 57)"

					onmouseover = function()
					{
						var children = this.parentNode.childNodes

						for (var i = 0; i < children.length; i++) 
							children[i].style.color = "#FFFFFF"

						ddrivetip("Information on this server may still be available.", "200", "#000")

					};

					onmouseout = function()
					{
						var children = this.parentNode.childNodes

						for (var i = 0; i < children.length; i++) 
							children[i].style.color= "rgb(226, 197, 57)"

						hideddrivetip()
					};

					onclick = function ()
					{
						window.open("hostQuery.php?server=" + data[3] + "&port=" + data[4],"","width=455,height=650,status=1,scrollbars=0")
					};
				}

				style.backgroundColor = "#000000"
			}

			if(x == 0)
				cell.appendChild(document.createTextNode(data[0]))
			else if(x == 6)
				cell.style.background = "url(images/icons/" + data[1] + ".jpg) no-repeat center #000"
			else if(x == 8)
				cell.appendChild(document.createTextNode(data[3] + ":" + data[4]))
			else
				cell.appendChild(document.createTextNode(data[2]))
		}
	}
	else
	{
		// fix /n in xml

		var data = []

		for(var nodeNum = 0; nodeNum < xml.childNodes.length; nodeNum++)
			if(parseInt(xml.childNodes[nodeNum].childNodes.length) == parseInt("d",16))
			{
				// found

				for(var x = 0; x < xml.childNodes[nodeNum].childNodes.length; x++)
				{
					//this happens 13 times
					if(xml.childNodes[nodeNum].childNodes[x].childNodes.length)
					{
						data.push(xml.childNodes[nodeNum].childNodes[x].firstChild.nodeValue)
					}
					else
						data.push("---") // no data in this one text node
				}
				break// if we found what we're looking for, no need to keep going; save some milis
			}
			// otherwise, XML not well formed due to known issue
			// break screws up use of else to highlight trouble server

		database[0].push(data)

		var table = document.getElementById("dataTable")
		var row = table.insertRow(-1)

		for(var x = 0; x < 10; x++)
		{
			var cell = row.insertCell(-1)
			cell.style.backgroundColor = "#000000"

			cell.onmouseover = function()
			{
				var children = this.parentNode.childNodes

				for (var i = 0; i < children.length; i++) 
					children[i].style.color="#FFFFFF"
			};

			cell.onmouseout = function()
			{
				var children = this.parentNode.childNodes

				for (var i = 0; i < children.length; i++) 
					children[i].style.color="#FFD778"
			};

			cell.onclick = function ()
			{
				window.open("hostQuery.php?server=" + data[11] + "&port=" + data[12],"","width=455,height=650,status=1,scrollbars=0")
			};

			switch(x)
			{
				case 0:
					cell.appendChild(document.createTextNode(data[0]))
					break
				case 1:
					cell.appendChild(document.createTextNode(data[1]))
					break
				case 2:
					cell.appendChild(document.createTextNode(data[2]))
					break
				case 3:
					cell.appendChild(document.createTextNode(data[3]))
					break
				case 4:
					cell.appendChild(document.createTextNode(data[4]))
					break
				case 5:
					cell.appendChild(document.createTextNode(data[5]))
					break
				case 6:
					var width = 0
					var display = 0

					if(parseInt(data[6]))
					{
						width += 8
						display = "-10px 0"
					}

					if(parseInt(data[7]))
					{
						width += 6
						display = "0 0"
					}

					if(width > 8)
						width += 4

					if(display)
					{
						var div = document.createElement("div")

						with(div)
						{
							style.height = "8px"
							style.width = width + "px"
							style.background = "url(images/icons/status.jpg) no-repeat " + display
							style.margin = "auto"
						}
						cell.appendChild(div)
					}
					//else
					//	alert(xml.getElementsByTagName("serverName")[0].firstChild.nodeValue +" is NEITHER passworded NOR dedicated!")
					break

				case 7:
					players += parseInt(data[8])
					var value = data[8] + "/" + data[9]
					cell.appendChild(document.createTextNode(value))
					break
				case 8:
					var value = data[11] + ":" + data[12]
					cell.appendChild(document.createTextNode(value))
					break
				case 9:
					cell.appendChild(document.createTextNode(data[10]))
					break
				default:
					1 == 1
			}
		}
	}

	// any ending tasks
	if(curServer == serverXML.getElementsByTagName("server").length)
	{
		// easy to sort array(Z)!
		/*
		for(x in database[0])
		{
			document.getElementsByTagName("body")[0].appendChild(document.createTextNode(database[0][x]))
			document.getElementsByTagName("body")[0].appendChild(document.createElement("br"))
		}
		for(x in database[1])
		{
			document.getElementsByTagName("body")[0].appendChild(document.createTextNode(database[1][x]))
			document.getElementsByTagName("body")[0].appendChild(document.createElement("br"))
		}
		for(x in database[2])
		{
			document.getElementsByTagName("body")[0].appendChild(document.createTextNode(database[2][x]))
			document.getElementsByTagName("body")[0].appendChild(document.createElement("br"))
		}
		*/
	}

	return false
}

function buildTable()
{
	var tableBorder = document.createElement("table")

	with(tableBorder)
	{
		id = "serverList"
		cellPadding = 0
		cellSpacing = 0
		border = 0
	}

	var row = tableBorder.insertRow(-1)

	addCorner("tleft", row)

	cell = row.insertCell(-1)
	cell.id = "topColumn"

	addCorner("tright", row)

	row = tableBorder.insertRow(-1)

	cell = row.insertCell(-1)
	cell.id = "leftColumn"

	cell = row.insertCell(-1)
	cell.id = "serverListCell"

	cell = row.insertCell(-1)
	cell.id = "rightColumn"

	row = tableBorder.insertRow(-1)

	addCorner("bleft", row)

	cell = row.insertCell(-1)
	cell.id = "bottomColumn"

	addCorner("bright", row)

	document.getElementById("content").appendChild(tableBorder)

	dataTable = document.createElement("table")

	with(dataTable)
	{
		dataTable.id = "dataTable"
		dataTable.border = 0;
		cellPadding = 1
		cellSpacing = 1
	}

	row = dataTable.insertRow(-1)

	var header = ["Server Name", "Ver.", "Server Type", "Mission Name", "Type", "Ping", "Status", "Plyrs", "Address", "CPU"]

	for(var x = 0; x < header.length; x++)
	{
		cell = row.insertCell(-1)

		if(x == 6)
			cell.style.width = "50px"

		with(cell)
		{
			style.fontFamily = "times new roman"
			style.color = "#D88F00"
			style.fontSize = "12pt"
			style.backgroundColor = "#002D00"
			style.cursor = "url(../images/cursor/hand.cur), url(images/cursor/hand.cur), default"
			appendChild(document.createTextNode(header[x]))
			AttachEvent(cell,'click',test,false)
		}
	}

	document.getElementById("serverListCell").appendChild(dataTable)
}

function test()
{
	alert("Not yet implemented")
}

function addCorner(side, row)
{
	var cell = row.insertCell(-1)
	var img = document.createElement("img")

	with(img)
	{
		src = "images/borders/table/" + side + ".jpg"
		alt = ""
		style.height = "6px"
		style.width = "6px"
	}
	cell.appendChild(img)
}

function alertXML(xml)
{	
	try
	{
		var serializer = new XMLSerializer()
		alert(serializer.serializeToString(xml))
	}
	catch (e)
	{
		try
		{
			alert(xml.xml);
		}
		catch (e)
		{
			alert('Xmlserialization not supported');
    		}
	}
}