/*
在Quake中用于Ajax操作的类，依赖jquery.js,json2.js 
*/
function QuakeAjax(app,module,action)
{
	this.app=app;
	this.module=module;
	this.action=action;
	this.callback=null;  //回调方法
	this.temp;  //临时变量，用于传递参数

	var self=this;

	this.post=function(args,p_max,p_min)
	{
		//根据传入的参数，构造要传入到PHP中的参数
		var parameters={};
		parameters['p_count']=0;
		if(args!=null && args.length>0)
		{
			for (var i=0;i<args.length;i++)
			{
				if(typeof(args[i])=='function')
				{
					this.callback=args[i];  //如果是函数，就认为是回调方法

					//如果回调方法后还有参数，认为是临时变量
					if(i<(args.length-1))
						this.temp=args[i+1];

					break;
				}
				else
				{
					parameters['p'+i]=JSON.stringify(args[i]);
					parameters['p_count']++;
				}
			}
		}

		if((p_max!=null && parameters.p_count>p_max) || (p_min!=null && parameters.p_count<p_min))
		{
			alert('Parameter count error!');
			return;
		}
		else
		{
			var url=this.app+".php?m="+this.module+"&a="+this.action;
			$.post(url,parameters,this._post);
		}
	}

	//执行结束后的回调方法
	this._post=function(data)
	{
		if(data!=null)
		{
			try
			{
				eval("data="+data);
			}
			catch(e)
			{
				alert("Error Data :\n"+data);
			}
		}

		if(self.callback!=null)
			self.callback(data,self.temp);
	}
}

QuakeAjax['post']=function(path)
{
	var paths=path.split(':');
	if(paths!=null && paths.length>2)
	{
		var ajax=new QuakeAjax(paths[0],paths[1],'ajax_'+paths[2]);

		var parameters=new Array();
		if(arguments!=null && arguments.length>1)
		{
			for(var i=1;i<arguments.length;i++)
			{
				parameters.push(arguments[i]);
			}
		}

		ajax.post(parameters);
	}
	else
	{
		alert("Action's format is bad!");
	}
}