﻿var xmlHttp = createXmlHttpRequestObject();
function createXmlHttpRequestObject() {
	var xmlHttp;
	try {
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
				'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',
				'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');
		for ( var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++) {
			try {
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			} catch (e) {
			}
		}
	}
	if (!xmlHttp)
		alert('Ошибка создания объекта XMLHttpRequest.');
	else
		return xmlHttp;
}
var server_address = new Array('cs1.qt.net.ua', 'cs1.qt.net.ua',
		'cs2.qt.net.ua', 'cs2.qt.net.ua', 'cs4.qt.net.ua', 'cs2.qt.net.ua');
var server_port = new Array('27015', '27016', '27015', '27016', '27015',
		'27017');
var server_name = new Array('Classic', 'Arena', 'War3ft', 'Public Clan War',
		'Dust 2 Only', 'Deathmatch');
var h;
function getinfo(n, a2s) {
	if (xmlHttp) {
		try {
			document.getElementById("servers").innerHTML = '<b>Отправка запроса</b> к серверу.';
			h = n;
			xmlHttp.open('GET', 'server.php?ip=' + server_address[n] + '&port='
					+ server_port[n] + '&a2s=' + a2s, true);
			if (a2s == 'info') {
				xmlHttp.onreadystatechange = parseinfo;
			}
			if (a2s == 'player') {
				xmlHttp.onreadystatechange = parseplayers;
			}
			xmlHttp.send(null);
		} catch (e) {
			document.getElementById("servers").innerHTML += '<center><b>Ошибка:</b> Невозможно отправить запрос.</center><br />' + e
					.toString();
		}
	}
}
function parseinfo() {
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.status == 200) {
			try {
				var xmlResponse = xmlHttp.responseXML;
				if (!xmlResponse || !xmlResponse.documentElement) {
					document.getElementById("servers").innerHTML += '<center><b>Ошибка:</b> ' + server_name[h] + ' не отвечает.</center>';
				}
				var rootNodeName = xmlResponse.documentElement.nodeName;
				if (rootNodeName == 'parsererror') {
					document.getElementById("servers").innerHTML += '<center><b>Неверная структура XML:</b></center>\n' + xmlHttp.responseText;
				}
				xmlRoot = xmlResponse.documentElement;
				var int_ip = xmlRoot.getElementsByTagName('int_ip'), int_port = xmlRoot
						.getElementsByTagName('int_port'), name = xmlRoot
						.getElementsByTagName('name'), map = xmlRoot
						.getElementsByTagName('map'), totalplayers = xmlRoot
						.getElementsByTagName('totalplayers'), maxplayers = xmlRoot
						.getElementsByTagName('maxplayers'), protocol = xmlRoot
						.getElementsByTagName('protocol'), serverlocked = xmlRoot
						.getElementsByTagName('serverlocked'), ping = xmlRoot
						.getElementsByTagName('ping');
				document.getElementById("servers").innerHTML = '<a href="javascript:getinfo(' + h + ', \'player\');" onmouseover="getinfo(' + h + ', \'player\')">Игроки</a><br /><img src=\'/images/maps/' + map.item(0).firstChild.data + '.jpg\' border=\'0\'><br />Сервер: '
						+ name.item(0).firstChild.data
						+ '<font color=\'#555555\'>('
						+ ping.item(0).firstChild.data + 'ms)</font><br />'
						+ 'IP: ' + int_ip.item(0).firstChild.data + ':'
						+ int_port.item(0).firstChild.data
						+ '<font color=\'#555555\'>('
						+ protocol.item(0).firstChild.data
						+ ' protocol)</font><br />' + 'Карта: '
						+ map.item(0).firstChild.data + '<br />Игроков: '
						+ totalplayers.item(0).firstChild.data + '/'
						+ maxplayers.item(0).firstChild.data;
			} catch (e) {
				document.getElementById("servers").innerHTML += '<center><b>Ошибка чтения ответа:</b></center> ' + e.toString();
			}
		} else {
			document.getElementById("servers").innerHTML += '<center><b>Возникли проблемы во время получения данных:</b></center> ('
					+ xmlHttp.status
					+ '): '
					+ xmlHttp.statusText
					+ ' / '
					+ xmlHttp.readyState;
		}
	}
}

function parseplayers() {
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.status == 200) {
			try {
				var xmlResponse = xmlHttp.responseXML;
				if (!xmlResponse || !xmlResponse.documentElement) {
					document.getElementById("servers").innerHTML += '<center><b>Ошибка:</b> ' + server_name[h] + ' не отвечает.</center>';
				}
				var rootNodeName = xmlResponse.documentElement.nodeName;
				if (rootNodeName == 'parsererror') {
					document.getElementById("servers").innerHTML += '<center><b>Неверная структура XML:</b></center>\n' + xmlHttp.responseText;
				}
				xmlRoot = xmlResponse.documentElement;
				var active = xmlRoot.getElementsByTagName('name');
				document.getElementById("servers").innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:getinfo(' + h + ', \'info\');" onmouseover="getinfo(' + h + ', \'info\')">Общее</a><br />';
				for ( var i = 0; i < active.item(0).firstChild.data; i++) {
					var player = xmlRoot.getElementsByTagName('name' + i);
					var kills = xmlRoot.getElementsByTagName('kills' + i);
					var time = xmlRoot.getElementsByTagName('onlinetime' + i);
					time.item(0).firstChild.data = time.item(0).firstChild.data / 60;
					time.item(0).firstChild.data = Math
							.round(time.item(0).firstChild.data);
					document.getElementById("servers").innerHTML += player
							.item(0).firstChild.data
							+ '&nbsp;&nbsp;&nbsp;'
							+ kills.item(0).firstChild.data
							+ '&nbsp;&nbsp;&nbsp;'
							+ time.item(0).firstChild.data + 'min.<br />';
				}
			} catch (e) {
				document.getElementById("servers").innerHTML += '<center><b>Ошибка чтения ответа: ' + e.toString();
			}
		} else {
			document.getElementById("servers").innerHTML += '<center><b>Возникли проблемы во время получения данных: ('
					+ xmlHttp.status
					+ '): '
					+ xmlHttp.statusText
					+ ' / '
					+ xmlHttp.readyState;
		}
	}
}