// AJAXRequest Class Decleration
// Developed by scriptMan - 15.02.2007
// hakan@pure.com.tr
// You can use this class as you wish, all i want is do not remove comments..
function AJAXRequest(url)
{
	this.requestObj = null;
	this.url = url == undefined ? "":url;
	this.method = "POST";
	this.RequestCompleteEventHandler = null;
	this.RequestFailedEventHandler = null;
	
	if(window.XMLHttpRequest && !(window.ActiveXObject))
	{
		try
		{
			this.requestObj = new XMLHttpRequest();
		}
		catch(e)
		{
			alert("Request object could not generated");
		}
	}
	else if(window.ActiveXObject)
	{
		try
		{
			this.requestObj = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				this.requestObj = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
				alert("Request object could not generated");
			}
		}
	}
	//-->

	//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..
			req.open(this.method,this.url+"?"+p,true);
			if(this.method.toLowerCase() == 'post')
			{
				req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				req.setRequestHeader("Content-length",p.length);
				req.setRequestHeader("Connection", "close");
				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;
	}
}