function createRequestObject()
{
	var browser = detectBrowser();
	if(browser == "ie")
		return new ActiveXObject("Microsoft.XMLHTTP");
	return new XMLHttpRequest();
}


var http = createRequestObject();
var http2 = createRequestObject();
var http3 = createRequestObject();
var lastRequest = "";
var lastRequestTime = "";
var lastRequestResponse = "";
requestArray = Array();



/*function sndReq(file, param1, param2, param3, param4, httpIndex, waitTime)
{
	if(!waitTime)
		waitTime = 5000;

	// Spam security
	newRequest = file + param1 + param2 + param3;
	now = new Date();
	now = now.getTime();
	if(newRequest == lastRequest && now - lastRequestTime < waitTime)
	{
		// If makes the same request more than once in a short time
		handleResponse(lastRequestResponse);
		return;
	}

	lastRequest = newRequest;
	lastRequestTime = now;
	
	// Create request object
	if(!http)
		http = createRequestObject();
	if(!http2)
		http2 = createRequestObject();

	//http.setRequestHeader("Content-Type","application/x-javascript; charset:ISO-8859-1");
	//http2.setRequestHeader("Content-Type","application/x-javascript; charset:ISO-8859-1");

	if(isLocal)
		file = "/wintown/" + file;
	else
		file = "/" + file;

	var sendString = file;
	if(file.indexOf(".php") == -1)
		sendString += ".php";

	if(param1)	sendString += '?param1='+param1;
	if(param2)	sendString += '&param2='+param2;
	if(param3)	sendString += '&param3='+param3;
	if(param4)	sendString += '&param4='+param4;

	//alert(sendString);
	
	if(httpIndex && httpIndex == 2)
	{
		http2.open('get', sendString);
		http2.onreadystatechange = handleResponse;
		http2.send(null);
	}
	else
	{
		http.open('get', sendString);
		http.onreadystatechange = handleResponse;
		http.send(null);
	}
}*/

function sndReq(file, targetElement, param1, param2, param3, param4, param5, param6, waitTime)
{
	if(!waitTime)
		waitTime = 1000;

	// Spam security
	newRequest = file + param1 + param2 + param3;
	now = new Date();
	now = now.getTime();
	if(newRequest == lastRequest && now - lastRequestTime < waitTime)
	{
		// If makes the same request more than once in a short time
		//handleResponse(param1, lastRequestResponse);
		//return;
		//alert("A");
		return;
	}

	lastRequest = newRequest;
	lastRequestTime = now;

	

	// Create request object
	if(!requestArray[param1])
		requestArray[param1] = createRequestObject();

	file = "/" + file;

	//alert("A");

	var sendString = file;

	if(targetElement)	sendString += '?targetElement='+targetElement;
	if(param1)	sendString += '&param1='+param1;
	if(param2)	sendString += '&param2='+param2;
	if(param3)	sendString += '&param3='+param3;
	if(param4)	sendString += '&param4='+param4;
	if(param5)	sendString += '&param5='+param5;
	if(param6)	sendString += '&param6='+param6;

	//alert(sendString);

	//if(param1 == "addPost")
	//	alert(sendString);
	
	
	requestArray[param1].open('get', sendString);
	requestArray[param1].onreadystatechange = function() { handleResponse(param1); };
	requestArray[param1].send(null);
	
	return true;
}

/*
Statusar:
switch(http2.readyState)
	{
		//case 0:	// UNINITIALIZED
		case 1:		// LOADING
			break;
		case 2:		// LOADED
			break
		case 3:		// INTERACTIVE
			break;
		case 4:		// COMPLETE
			break;
	}*/


function handleResponse(name, cachedResponse)
{
	if(requestArray[name].readyState != 4)
		return;
		

		
	//kind = (requestArray[name].readyState == 4) ? '' : 2;
	response = requestArray[name].responseText;
	lastRequestResponse = response;

	var update = new Array();
	if(response.length == 0)
		return;

	//alert(response);

	splitIndex = response.indexOf('|');
	if(splitIndex  == -1)
		return;// garbage(response);


	update = Array();
	update[0] = response.substring(0, splitIndex);
	update[1] = response.substring(splitIndex+1);

	if(update[1] == "")
		return;

	
	/*// Security
	splitIndex1 = update[1].indexOf('users|');
	splitIndex2 = update[1].indexOf('chatbox|');
	if(splitIndex1 > -1 || splitIndex2 > -1)
		return garbage(update[1]);*/

	
	if(update[0] == "")
	{
		responseCB(name);
	}
	else if(update[0] == "js") // Set JS-value
	{
		splitIndex = update[1].indexOf('|');
		update[2] = update[1].substring(splitIndex+1);
		update[1] = update[1].substring(0,splitIndex);
		element = getElement(update[1]);
		
		if(!element)
			alert("Error: Element '" + update[1] + "' was not found! (js)");

		element.value = update[2];
		responseCB(update[1], update[2]);
	}
	else
	{
		
		element = getElement(update[0]);
		if(!element)
			alert("Error: Element '" + update[0] + "' was not found!");

		//responseCB(name, update[0], update[1]);

		element.innerHTML = update[1];

	}
}

function responseCB(name, receiver, value, value2)
{
	//alert(value2);

	if(receiver == "toolTip")
	{
		if(value.indexOf('<div id="threadPreviewBase">') >= 0)
		{
			threadsPreset();
		}
	}
	else if(receiver == "uName" && name == "validateUname")
	{
		responseText = "Godkänt och ledigt";
		responseKind = 1;
		switch(parseInt(value))
		{
			case 4: responseText = "Otillåtet ord"; responseKind = -1; break;
			case 5: responseText = "Namnet är upptaget"; responseKind = -1; break;
		}
		
		if(responseText.length == 0)
			return;

		obj = getElement("uName");
		setResponseForInput(obj, responseKind, responseText + "!");
	}
	else if(receiver == "profileContent")
	{
		if(value.indexOf('id="newPost"') >= 0)
		{
			profilePreset();
		}
		
	}
	else if(receiver == "tabContentReal") // login welcome
	{
		threadsPreset();
		chatTabShift();
	}
	else if(receiver == "visitCard")
	{
		prepareVCScripts();
	}
	else if(receiver.substring(0, 5) == "chat_")
	{
		chatScrollDown(receiver.substring(5));
	}
}