var globalTime;
var sleepXml;
var enableSearch = false;

function toggleElement(eid)
{
	if (document.getElementById(eid).getAttribute('class') != 'hide' && document.getElementById(eid).getAttribute('className') != 'hide')
	{
		document.getElementById(eid).setAttribute('class', 'hide');
		document.getElementById(eid).setAttribute('className', 'hide');
		document.getElementById(eid + 'Status').src = 'images/expand_small.gif';
	}
	else
	{
		document.getElementById(eid).setAttribute('class', 'show');
		document.getElementById(eid).setAttribute('className', 'show');
		document.getElementById(eid + 'Status').src = 'images/collapse_small.gif';
	}
}

// Returns a new XMLHttpRequest object, or false if this browser doesn't support it
function newXMLHttpRequest()
{
	var xmlreq = false;
	if (window.XMLHttpRequest)
	{
		// Create XMLHttpRequest object in non-Microsoft browsers
		xmlreq = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		// Create XMLHttpRequest via MS ActiveX
		try
		{
			// Try to create XMLHttpRequest in later versions
			// of Internet Explorer
			xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e1)
		{
			try
			{
				// Try version supported by older versions
				// of Internet Explorer
				xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e2)
			{
				doError(e2);
			}
		}
	}
	return xmlreq;
}
 
/* Returns a function that waits for the specified XMLHttpRequest
 * to complete, then passes its XML response
 * to the given handler function.
 * req - The XMLHttpRequest whose state is changing
 * responseXmlHandler - Function to pass the XML response to */
 
function getReadyStateHandler(req, responseXmlHandler) {
	// Return an anonymous function that listens to the 
	// XMLHttpRequest instance
	return function () {
		// If the request's status is "complete"
		if (req.readyState == 4)
		{
			//alert('readyState = 4');
			// Check that a successful server response was received
			if (req.status == 200)
			{	
				//alert('Returned text = ' + req.responseText);
				//todo: catch 404 error.
				// Pass the XML payload of the response to the 
				// handler function
				document.getElementById('loading').setAttribute('class', 'hide');
				eval(responseXmlHandler(req));
			}
		}
		else
		{
			document.getElementById('loading').setAttribute('class', 'show');
		}
	}
}

function ajaxFunc(url, callBackFunction, async, sleepTime)
{
	NewURL = url + "&rnid=" + Math.floor(Math.random()*10000);  //prevent browser caching by always sending a unique url.
	//alert(NewURL);
	if (sleepTime > 0)
	{
		sleeper(sleepTime, url, callBackFunction, true);
	}
	else
	{
		var req = newXMLHttpRequest();    // Obtain an XMLHttpRequest instance
		var handlerFunction = getReadyStateHandler(req, callBackFunction);    // Set the handler function to receive callback notifications from the request object
		req.onreadystatechange = handlerFunction;
		req.open('GET', NewURL, async);  // Third parameter specifies request is asynchronous.
		req.send(null);
	}
}

function populateSubWindow(req)
{
	var ele = document.getElementById('subWindow');
	var ele2 = document.getElementById('subWindowContents');
	var ele3 = document.getElementById('subWindowTitle');
	ele.setAttribute("class", "show");
	ele.setAttribute("className", "show");
	
	var splitResponse = req.responseText.split("::*::");
	if (splitResponse.length > 0)
	{
		ele3.innerHTML = splitResponse[0];
		ele2.innerHTML = splitResponse[1];
	}
	else
	{
		ele2.innerHTML = req.responseText;
	}	
}

function populateLoginDiv(req)
{
	var ele = document.getElementById('loginSpace');
	
	ele.innerHTML = req.responseText;
}

function populateItemInfo(req)
{
	var ele = document.getElementById('itemInfo');
	
	ele.innerHTML = req.responseText;
}

function populateMonsterInfo(req)
{
	var ele = document.getElementById('monsterInfo');
	
	ele.innerHTML = "";
	ele.innerHTML = req.responseText;
	//ele.setAttribute('class', 'show');
	ele.className = 'show';
	ele.scrollTop = 0;
}

function hideWindow(ele)
{
	//ele.setAttribute('class', 'hide');
	ele.className = 'hide';
}

function getItemList(req)
{
	var ele = document.getElementById('lItemsDynamic');
	ele.innerHTML = req.responseText;
}

function sleeper(ms, url, callBackFunction, async)
{
	if (sleepXml != undefined) sleepXml.abort();
	//alert('In sleeper()');
	var xmlHttp = newXMLHttpRequest();
	var curTime;
	
	curTime = globalTime = new Date();

	xmlHttp.onreadystatechange = function()
	{
		if (xmlHttp.readyState == 4 && xmlHttp.responseText != '')
		{
			if (curTime.getTime() == globalTime.getTime())
			{
				//alert('ajaxFunc(' + url + ', ' + callBackFunction + ', ' + async + ', 0)');
				ajaxFunc(url, callBackFunction, async, 0);
			}
		}
	}
	
	sleepXml = xmlHttp;
	xmlHttp.open("GET", 'ajax/msleeper.php?s=' + ms, true);
	xmlHttp.send(null);
}

function updateItem(url, ele, cssclass)
{
	var xmlHttp = newXMLHttpRequest();
	
	xmlHttp.onreadystatechange = function()
	{
		if (xmlHttp.readyState == 4)
		{
			if (xmlHttp.responseText)
			{
				//document.getElementById(ele).setAttribute('class', cssclass);
				document.getElementById(ele).className = cssclass;
			}
		}
	}
	
	xmlHttp.open("GET", url, true);
	xmlHttp.send(null);
}