// 定义一个calbal的类,opetype为null是操作的是XML文件,否则引用的是PHP文件
// 其中参数operate 为成功返回时要执行的函数
var fName = "/ajax.asp";
function callphp(subject,url,act,options)
{
	this.subject = subject;
	this.url = url;
	this.act = act;

  this.options = options;
  this.ajaxHelper = new ContentLoader(this,url,"POST",options.requestParameters || []);  
  this.initByAspx();	
}

callphp.prototype = 
{
		// 初始化
	initByAspx:function()
	{
		this.ajaxHelper.sendRequest();
	},

	// 对返回结果进行处理
	ajaxUpdate:function(request)
	{

		if(request.responseText == "false")
		{
			this.subject.isvalid = false;
		}
		else
		{
			this.subject.isvalid = true;
		}	
		if(this.act=="add")
			this.subject.Update("Add"); // 执行每一个观察者对象的Update方法		
		else
			this.observers.GetAt(i).Update("Sub"); // 执行每一个观察者对象的Update方法	
		
	}
}



READ_STATE_COMPLETE = 4;        // 完成

ContentLoader = function(component,url,method,requestParams)
{
	this.url = url;
	this.component = component;       // 存放另一个对象的实例
	this.method = method;             // 请求方式
	this.requestParams = requestParams;    // 请求时的参数集
}

ContentLoader.prototype=
{
	// 获取XMLHttpRequest 对象
	getXMLHttpRequestObj:function() 
	{
		var reqObj;
		if(window.XMLHttpRequest)
		{
			reqObj = new XMLHttpRequest();
			if(reqObj.overrideMimeType)
			{
				reqObj.overrideMimeType("text/xml");
			}			
		}
		else if(window.ActiveXObject)
		{		
			try
			{
				reqObj = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e)
			{
				reqObj = new ActiveXObject("Microsoft.XMLHTTP");
			}			
		}
		return reqObj;		
	},
	
	// 发送请求.并设置数据返回时的回调函数
	sendRequest:function()
	{
		var requestParams = [];
		for(var i=0; i<arguments.length;i++)
		{
			requestParams.push(arguments[i]);
		}
		var request = this.getXMLHttpRequestObj();   // 获取XMLHttpRequest对象

		request.open(this.method,this.url,true);
		request.setRequestHeader("context-type", "text/html;charset=gb2312");
		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 		
		var loader = this;
		request.onreadystatechange = function()    // 回调函数
		{
			loader.onReadyState(request);
		}

		request.send(this.queryString(requestParams));     // 调用queryString函数.对参数进行格式化
	},		
	
    // xmlHttpRequest 的回调函数
	onReadyState:function(request)
	{
		var ready = request.readyState;
		if(ready==READ_STATE_COMPLETE)
		{			  
			var httpStatus = request.status;
			if(httpStatus==200 || httpStatus==0)
			{
				this.component.ajaxUpdate(request);     
			}
			else
			{
				//  this.component.ajaxError(request);   错误处理函数
			}
		}
		else
		{
			 //	this.component.showts();  显示加载时的状态
		}
	},
	
	// 对发送参数进行格式化
	queryString:function(args)
	{
		var requestParams = []
		if(this.requestParams!=undefined)
		{
		    for(var i=0 ;i<this.requestParams.length;i++)
		    {
			    requestParams.push(this.requestParams[i]);
		    }
		    for(var j=0 ;j<args.length;j++)
		    {
			    requestParams.push(args[j]);
		    }
    		
		    var queryString = "";
		    if(requestParams && requestParams.length>0)
		    {
			    for(var i=0 ;i<requestParams.length;i++)
			    {
				    queryString += requestParams[i] +"&";
			    }
			    queryString = queryString.substring(0,queryString.length-1);			
		    }
		    return queryString;
		}
	}

}