//Lite Ajax Engine
//wookin 2006/07/13
var Class=
{
	create:function()
	{
		return function()
		{
			this.initialize.apply(this,arguments);
		}
	}
}

Object.extend = function(destination, source)
{
	for(property in source)
	{
		destination[property]=source[property];
	}
	return destination;
}


var CAjaxRegObj=Class.create();
CAjaxRegObj.prototype=
{
	initialize:function(ReqURL,Render,UsrDat)
	{
		var I=this;
		I.m_UsrDat=UsrDat;
		I.m_Render=Render;//interface in CRenderBase
		I.m_ReqCGI=ReqURL;
		I.m_XHR=null;//XMLHttpRequest
	},
	SendRequest:function(args,bPost,bAsyn)    //bPost ÊÇ·ñpost?
	{
		var I=this;
		if(!I.m_XHR)
			I.m_XHR=I.GetXHRObj();
		if(I.m_XHR)
		{
			var Method="GET";
			if(bPost)
				Method="POST";
			var URL=I.GetURL(bPost,args);
			I.m_XHR.open(Method,URL,bAsyn);
			var tmp=I;
			I.m_XHR.onreadystatechange=function(){tmp.OnStateChange();}
			I.m_XHR.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset='utf-8'");
			//alert(URL);
			if(bPost)
				I.m_XHR.send(args);
			else
				I.m_XHR.send(null);
		}
	},
	GetXHRObj:function() 
	{
		var obj=null;
		if(window.XMLHttpRequest)
			obj=new XMLHttpRequest();
		else if(window.ActiveXObject)
		{
			obj=new ActiveXObject('Msxml2.XMLHTTP');
			if(!obj)
				obj=new ActiveXObject('Microsoft.XMLHTTP');
		}
		return obj;
	},
	GetURL:function(bPost,args)
	{
		var URL=this.m_ReqCGI+"?"+args;
		if(bPost)
			URL=this.m_ReqCGI;
		return URL; 
	},
	OnStateChange:function()
	{
		var I=this;
		if(I.m_Render)
		{
			var Status=0;
			var RState=I.m_XHR.readyState;
			if(RState==4)
				Status=I.m_XHR.status;
			I.m_Render.NotifyState(RState,Status,I.m_UsrDat);
			//alert(RState+":"+Status);
			if(RState==4 && Status==200)
			{
				//alert(RState+":"+Status);
				text=I.m_XHR.responseText;
				if(typeof(DOMParser) != "undefined")
				{
				   var dp = new DOMParser();
                   var newDOM = dp.parseFromString(text, "text/xml");
				}
				else
				{
					 var newDOM = new ActiveXObject("Msxml2.DOMDocument"); 
					 newDOM.async = false; 
					 newDOM.loadXML(text);
				}
				I.m_Render.OnXMLDataResponse(newDOM,I.m_UsrDat);
				//I.m_Render.OnXMLDataResponse(I.m_XHR.responseXML,I.m_UsrDat);
			}
			else
			{
				I.m_Render.NoDataResponse();
			}
		}
	}
}

var CAjaxEngine=Class.create();
CAjaxEngine.prototype=
{
	initialize: function()
	{
		this.m_ReqList=new Array();
	},
	RegisterRequest:function(ReqName,ReqURL,Render,UsrDat)
	{
		var obj=this.m_ReqList[ReqName];
		if(obj)
			return false;
		obj=new CAjaxRegObj(ReqURL,Render,UsrDat);
		this.m_ReqList[ReqName]=obj;
		return true;
	},
	SendRequest:function(ReqName,args,bPost,bAsyn)
	{
		var obj=this.m_ReqList[ReqName];
		if(!obj)
			return false;
		obj.SendRequest(args,bPost,bAsyn);
		return true;
	}
}
//global AjaxEngine object
var AjaxEngine=new CAjaxEngine();

var CRenderBase=Class.create();
CRenderBase.prototype=
{
	initialize:function()
	{},
	NoDataResponse:function()
	{},
	OnXMLDataResponse:function(ResponseXML,UsrDat)
	{},
	NotifyState:function(ReadyState,StatusCode,UsrDat)
	{}
}


