var xAjax = function ()
{
	this.vDebugHeight = 100;
//	this.vPostData		= [];
}

xAjax.prototype = new Common;

xAjax.prototype.AJAXcreateRequestObject = function ()
{
	if (navigator.appName == "Microsoft Internet Explorer")
		return new ActiveXObject("Microsoft.XMLHTTP");
	else
		return new XMLHttpRequest();
}


xAjax.prototype.AJAXPostData = function ()
{
	var AJAXhttp = this.AJAXcreateRequestObject();
	var p = this;
	if(!AJAXhttp) return false;
	AJAXhttp.onreadystatechange = function ()
		{
			if (AJAXhttp.readyState == 4)
			{
				if (AJAXhttp.responseXML)
				{
					p.vAJAXReceivedData = AJAXhttp.responseXML;

					try { p.AJAXprocessVars(); } catch (e) {}
					p.AJAXprocessArrays(p.vAJAXReceivedData.firstChild);
					p.AJAXprocessExec();
					p.AJAXdebug();
				}
			}
		}

	AJAXhttp.open('POST', arguments[0] , true);

	AJAXhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=ISO-8859-1");
	AJAXhttp.send(AJAXurlEncodeData(arguments[1]));
	return true;
}

xAjax.prototype.AJAXurlEncodeData = function (data)
{
	var query = [];
	if (data instanceof Object)
	{
		for (var k in data)
		{
			if (data[k] instanceof Object)
			{
				for (var j in data[k])
				{
					if (data[k][j] instanceof Object)
					{
						for (var i in data[k][j])
						query.push(encodeURIComponent(k) +"["+j+"]["+i+"]=" + encodeURIComponent(data[k][j][i]));
					}
					else
					query.push(encodeURIComponent(k) +"["+j+"]=" + encodeURIComponent(data[k][j]));
				}
			}
			else
				query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
		}

		return query.join('&');
	}
	else
	{
		return encodeURIComponent(data);
	}
}

xAjax.prototype.AJAXprocessVars = function ()
{
	if (this.vAJAXReceivedData)
	{
		var tt = x.getElementsByTagName('VarName');
		if (tt)
		{
			for (var i=0; i<tt.length; i++)
			{
				for (var j=0; j<tt.item(i).attributes.length; j++)
				{
					if (tt.item(i).attributes[j].name == 'name')
					{
						var qq = tt.item(i).getElementsByTagName('data');

						if (qq.item(0).attributes[0].name == 'type' && qq.item(0).attributes[0].value == 'int')
							eval(tt.item(i).attributes[j].value + '=' + (qq.item(0).childNodes.length?qq.item(0).childNodes[0].nodeValue:''));
						else if (qq.item(0).attributes[0].name == 'type' && qq.item(0).attributes[0].value == 'string')
							eval(tt.item(i).attributes[j].value + '=\'' + (qq.item(0).childNodes.length?qq.item(0).childNodes[0].nodeValue:'') + '\'');
					}
				}
			}
		}
	}
}

xAjax.prototype.AJAXprocessArrays = function (x)
{
	var x = arguments[0];

	for (var i=0; i<x.childNodes.length; i++)
	{
		var tt = x.childNodes[i];
		if (tt.tagName == 'VarArrayName')
		{
			var nodeName = tt.getAttribute('name');

			if (arguments[1])
			{
//				alert(arguments[1] + ' = new Array');
				eval(arguments[1] + ' = new Array');
			}
			else
			{
//				alert(nodeName + ' = new Array');
				eval(nodeName + ' = new Array');
			}

			for (var j=0; j<tt.childNodes.length; j++)
			{
				if (tt.childNodes[j].tagName == 'data')
				{
					var aType = tt.childNodes[j].getAttribute('type')
					var akey = tt.childNodes[j].getAttribute('key')

					if (aType == 'array')
					{
						this.AJAXprocessArrays(tt.childNodes[j], (arguments[1]?arguments[1]:nodeName) + '[' + (akey?'\'' + akey + '\'':k) + ']');
					}
					else
					{
						var zz = tt.childNodes[j].childNodes[0].nodeValue;
						eval((arguments[1]?arguments[1]:nodeName) + "['" + (akey?akey.replace(/\'/g, "\\'"):k) + "']" +  '= zz'  + ';');
					}
				}
			}
		}
	}
}

xAjax.prototype.AJAXprocessExec = function ()
{
	var tt = this.vAJAXReceivedData.getElementsByTagName('Exec');

	for (var i=0; i<tt.length; i++)
	{
		var zz = tt[i].childNodes[0].nodeValue;
		if (zz)
		{
			eval(zz);
		}
	}
}

xAjax.prototype.AJAXdebug = function()
{
	var tt = this.vAJAXReceivedData.getElementsByTagName('Ajax');

	if (tt.length > 0)
	{
		var el;
		el = document.getElementById('ajax_debug');
		if (!el)
		{
			var tmp = document.createElement('div');
			var div1 = document.createElement('div');
			div1.style.cursor = 'pointer';
			div1.style.position = 'absolute';
			div1.style.top = document.body.clientHeight - (this.vDebugHeight + 16);
			div1.style.height=16;
			div1.style.width='100%';
			div1.innerHTML = '&nbsp;Debug Window.&nbsp;&nbsp;Click to hide';
			div1.style.color = 'white';
			div1.style.fontWeight = 'bold';
			div1.style.backgroundColor = 'red';
			div1.onclick = function()
			{
				this.parentNode.parentNode.removeChild(this.parentNode)
			}

			tmp.appendChild(div1);
			
			var tmp2 = document.createElement('div');
			tmp2.style.height = this.vDebugHeight + 'px';
			tmp2.style.overflow = 'auto';
//			tmp2.style.border = '1px solid red';
			tmp2.style.position = 'absolute';
			tmp2.style.width='100%';
			tmp2.style.top = document.body.clientHeight - this.vDebugHeight;

			el = document.createElement('pre');
			el.id = 'ajax_debug';
			tmp2.appendChild(el);
			tmp.appendChild(tmp2);

			document.body.appendChild(tmp);
		}
		el.innerHTML = '<pre>' + el.innerHTML + tt[0].childNodes[0].nodeValue;
	}
}

