var xmlhttp = false;
var ajaxactive = false;
var ajaxqueue = false;

var cfg_ajaxoutput_url = "http://" + document.domain + "/siteengine/ajax/ajaxoutput.inc.php";

if (window.ActiveXObject)
{
	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
	xmlhttp = new XMLHttpRequest();
	xmlhttp.overrideMimeType('text/xml');
}

//serialises a variable to make it suitable for the ajax querystring
function ajax_serialize(targetvar, varname)
{
	ret = new String();
	
	if (isObject(targetvar))
	{
		for (x in targetvar)
		{
			tval = targetvar[x];
			if (ret.length) ret += "&";
			ret += varname + "[" + x + "] = " + ajax_serialize(tval, varname);
		}
	}
	else if (isArray(targetvar))
	{
		for (i=0; i<targetvar.length; i++)
		{
			tval = targetvar[i];
			if (ret.length) ret += "&";
			ret = varname + "[" + i + "] = " + ajax_serialize(tval, varname);
		}
	}
	else
	{
		ret = escape(targetvar)
	}
	
	alert(ret);
	
	return ret;
}

function ajax_reset()
{
	xmlhttp = xmlhttp;
	
	//alert ("resetting ajax");
	if (window.ActiveXObject)
	{
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest)
	{
		xmlhttp = new XMLHttpRequest();
		xmlhttp.overrideMimeType('text/xml');
	}
		
	ajaxactive = false;
	
	//alert(ajaxqueue);
	if (ajaxqueue)
	{
		if (ajaxqueue.length==1)
		{
			qs = ajaxqueue[0];
			ajaxqueue = false;
		}
		else
		{
			qs = ajaxqueue.shift();
		}
		//alert(qs);
		call_querystring(qs[0], qs[1], qs[2]);
	}
}
	
function call_querystring(querystring, post, statechangecallback)
{
	//alert("calling by querystring");
	
	ajaxactive = true;
	
	var url = cfg_ajaxoutput_url;
	//alert(url);
	var querystring;
	
	url = url + '?' + querystring;
	xmlhttp.open('GET', url, true);
	xmlhttp.onreadystatechange = statechangecallback;
	xmlhttp.send(null);
}

function call_method(classname, method, params, post, statechangecallback)
{
	xh = xmlhttp;

	if (xmlhttp)
	{
		var url = cfg_ajaxoutput_url;
		//alert("url = " + url);
		
		var querystring = '';
		var i=0;
		
		querystring = 'ajaxaction=call_method';					
		querystring += '&class=' + classname;
		querystring += '&method=' + method;					
		
		for (i=0; i<params.length; i++)
		{
			querystring += '&params[' + i + ']=' + escape(params[i]);
		}
			
		ajaxactive = true;
		
		if (!xmlhttp.readyState)
		{
			if (post)
			{
				//alert(querystring);
				xmlhttp.open ("POST", url, true);
				xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
				xmlhttp.onreadystatechange = statechangecallback;
				//window.open(url + "?" + querystring);
				xmlhttp.send (querystring);
			}
			else
			{
				url = url + '?' + querystring;
				xmlhttp.open('GET', url, true);
				xmlhttp.onreadystatechange = statechangecallback;
				xmlhttp.send(null);
			}
		}
		else
		{
			qitem = Array(querystring, post, statechangecallback);
			if (!ajaxqueue) ajaxqueue = Array();
			//alert(qitem);
			ajaxqueue.push(qitem)
		}

		if (st = findObj("sessiontimer")) startsessiontimer();
	}
}

function call_object_method(objecttype, method, createparams, params, post, statechangecallback)
{
	xh = xmlhttp;
				
	if (xmlhttp)
	{
		var url = cfg_ajaxoutput_url;
		//alert("url = " + url);
		var querystring = '';
		
		var i=0;
		
		querystring = 'ajaxaction=call_object_method';					
		querystring += '&objecttype=' + objecttype;
		querystring += '&method=' + method;					
		
		for (i=0; i<params.length; i++)
		{
			x = params[i];
			
			//alert(i + ", " + x);
			
			if (isArray(params[i]))
			{
				for (j=0; j<params[i].length; j++)
				{
					if (isArray(params[i][j]))
					{
						for (k=0; k<params[i][j].length; k++)
						{
							querystring += '&params[' + i + '][' + j + '][' + k + ']=' + escape(params[i][j][k]);
						}
					}
					else
					{
						querystring += '&params[' + i + '][' + j + ']=' + escape(params[i][j]);
					}
				}
			}
			else
			{
				querystring += '&params[' + i + ']=' + escape(params[i]);
			}
		}
		
		if (!isArray(createparams)) createparams = Array(createparams);

		for (i=0; i<createparams.length; i++)
		{
			querystring += '&createparams[' + i + ']=' + escape(createparams[i]);
		}
		//alert(querystring);
		//alert("ajq = " + ajaxqueue);
		
		if (!xmlhttp.readyState)
		{
			ajaxactive = true;

			if (post)
			{
				//alert(querystring);
				xmlhttp.open ("POST", url, true);
				xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
				xmlhttp.onreadystatechange = statechangecallback;
				//window.open(url + "?" + querystring);
				xmlhttp.send (querystring);
			}
			else
			{
				url = url + '?' + querystring;
				//alert(url);
				xmlhttp.open('GET', url, true);
				xmlhttp.onreadystatechange = statechangecallback;
				xmlhttp.send(null);
			}
		}
		else
		{
			qitem = Array(querystring, post, statechangecallback);
			if (!ajaxqueue) ajaxqueue = Array();
			//alert(qitem);
			ajaxqueue.push(qitem)
		}

		if (st = findObj("sessiontimer")) startsessiontimer();
	}
}

function create_object(objecttype, params, post, statechangecallback)
{			
	xh = xmlhttp;
				
	if (xmlhttp)
	{
		var url = cfg_ajaxoutput_url;
		//alert("url = " + url);
		var querystring = '';
		var i=0;
		
		querystring = 'ajaxaction=create_object';					
		querystring += '&objecttype=' + objecttype;
		
		if (isArray(params))
		{
			//alert("array of size " + params.length);
			for (i=0; i<params.length; i++)
			{
				querystring += '&params[' + i + ']=' + escape(params[i]);
			}
		}
		else
		{
			//alert("not an array")
			querystring += '&params[0]=' + escape(params);
		}
		
		ajaxactive = true;

		if (!xmlhttp.readyState)
		{
			if (post)
			{
				//alert(querystring);
				xmlhttp.open ("POST", url, true);
				xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
				xmlhttp.onreadystatechange = statechangecallback;
				//window.open(url + "?" + querystring);
				xmlhttp.send (querystring);
			}
			else
			{
				url = url + '?' + querystring;
				xmlhttp.open('GET', url, true);
				xmlhttp.onreadystatechange = statechangecallback;
				xmlhttp.send(null);
			}
		}
		else
		{
			qitem = Array(querystring, post, statechangecallback);
			if (!ajaxqueue) ajaxqueue = Array();
			//alert(qitem);
			ajaxqueue.push(qitem)
		}

		if (st = findObj("sessiontimer")) startsessiontimer();
	}
}

function save_object(objecttype, objectref, newvalues, post, statechangecallback)
{
	//xh = xmlhttp;
	
	if (xmlhttp)
	{
		var url = cfg_ajaxoutput_url;
		var querystring = '';
		var i=0;
		
		querystring = 'ajaxaction=save_object';					
		querystring += '&objecttype=' + objecttype;
		querystring += '&objectref=' + objectref;
		
		if (isArray(newvalues))
		{
			//alert("array of size " + newvalues.length);
			for (i in newvalues)
			{
				plusreplace = /\+/g;
				nv = escape(newvalues[i]);
				//alert(nv);
				nv = nv.replace(plusreplace, "%2B");
				//alert(nv);
				querystring += '&newvalues[' + i + ']=' + nv;
				//alert(escape(newvalues[i]));
				//alert(i);
			}
		}
		else
		{
			//alert("not an array")
			querystring += '&newvalues[0]=' + escape(newvalues);
		}
		
		ajaxactive = true;

		//alert(querystring);
		if (!xmlhttp.readyState)
		{
			if (post)
			{
				//alert(querystring);
				xmlhttp.open ("POST", url, true);
				xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
				xmlhttp.onreadystatechange = statechangecallback;
				//window.open(url + "?" + querystring);
				xmlhttp.send (querystring);
			}
			else
			{
				url = url + '?' + querystring;
				xmlhttp.open('GET', url, true);
				xmlhttp.onreadystatechange = statechangecallback;
				//alert(xmlhttp);
				xmlhttp.send(null);
			}
		}
		else
		{
			qitem = Array(querystring, post, statechangecallback);
			if (!ajaxqueue) ajaxqueue = Array();
			//alert(qitem);
			ajaxqueue.push(qitem)
		}

		if (st = findObj("sessiontimer")) startsessiontimer();
	}
}
/* ]]> */