function AJAXRequest(url)
{
	this.requestObj = null;
	this.url = url == undefined ? "":url;
	this.method = "POST";
	this.RequestCompleteEventHandler = null;
	this.RequestFailedEventHandler = null;
	
	//request generation..
	var userAgent = navigator.userAgent.toLowerCase();
	if(!window.ActiveXObject)
	{
		this.requestObj = new XMLHttpRequest();
	}else if(userAgent.indexOf('msie 5') == -1)
	{
		this.requestObj = new ActiveXObject("Msxml2.XMLHTTP");
	}else
	{
		this.requestObj = new ActiveXObject("Microsoft.XMLHTTP");
	}
	//-->
	this.requestObj;
	//nested parameter class
	this.parameters = new function()
	{
		this.__hash = new Array();
		this.Add = function(paramName,value)
		{
			this.__hash[paramName] = value;
		}
		this.Get = function(paramName)
		{
			return this.__hash[paramName];
		}
		this.GetHash = function()
		{
			return this.__hash;
		}
	}
	
	this.sendRequest = function()
	{
		var p = this.mergeParams();
		var req = this.requestObj;
		
		var cEvent = this.RequestCompleteEventHandler;
		var fEvent = this.RequestFailedEventHandler;
		var Hook = this;
		if(req)
		{
			//request object readystatechange event
			req.onreadystatechange = function()
			{
				if(req.readyState == 4)
				{
					try
					{
						if(req.status == 200)
						{
							cEvent(Hook);
						}else
						{
							fEvent(Hook);
						}
					}catch(e)
					{
						alert(e.message);
						fEvent(Hook);
					}
				}
			}
			//-->
			
			//make request..
			if(p)
			{
				req.open(this.method,this.url+"?"+p,true);
			}else
			{
				req.open(this.method,this.url,true);
			}
			
			if(this.method.toLowerCase() == 'post')
			{
				req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				req.setRequestHeader('charset','utf-8');
				req.send(p);
			}else
			{
				req.send(null);
			}
			
		}
	}
	
	this.mergeParams = function()
	{
		//get hash into a parsed string..
		var paramsString = "";
		var pStringArray = new Array();
		var paramHash = this.parameters.__hash;
		
		for(var paramName in paramHash)
		{
			pStringArray.push(paramName+"="+paramHash[paramName]);
		}
		
		var paramsString = pStringArray.join("&");
		
		return paramsString;
	}
}