
function AJAX(){
	var objXHR = false;
	if(window.XMLHttpRequest)//XMLHttpRequest处理了浏览器为mozilla的情况
	{
		objXHR=new XMLHttpRequest();
	}
	else if(window.ActiveXObject)//ActiveXObject处理了浏览器为IE的情况
	{
		try
		{
			objXHR=new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(e1)
		{
			try
			{
				objXHR=new ActiveXObject("MSXML2.XMLHTTP");
			}
			catch(e2)
			{
				try
				{
					objXHR=new ActiveXObject("MSXML3.XMLHTTP");
				}
				catch(e3)
				{
					//alert("创建XMLHttpRequest对象失败："+e3)
				}
			}
		}
	}
	else
	{
		//alert("未能识别的浏览器");
	}

	if (!objXHR) 
	{
		return false;
	}
	else
	{
		//alert();
	}

	if(arguments[0]) {this.url=arguments[0]}; else{this.url="";}
	if(arguments[1]) {this.callback=arguments[1]}; else {this.callback=function(obj){return};}
	if(arguments[2]) {this.content=arguments[2]}; else {this.content="";}
	if(arguments[3]) {this.method=arguments[3]}; else {this.method="POST";}
	if(arguments[4]) {this.async=arguments[4]}; else {this.async=true;}
	this.send=function() {
		var purl,pcontent,ppcallbackc,pmethod,pasync;
		
		if(arguments[0]) purl=arguments[0]; else purl=this.url;
		if(arguments[1]) pcontent=arguments[1]; else pcontent=this.content;
		if(arguments[2]) pcallback=arguments[2]; else pcallback=this.callback;
		if(arguments[3]) pmethod=arguments[3]; else pmethod=this.method;
		if(arguments[4]) pasync=arguments[4]; else pasync=this.async;
		if(!pmethod||!purl||!pasync) return false;
		objXHR.open (pmethod, purl, pasync);
		
		if(pmethod=="POST") objXHR.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		objXHR.onreadystatechange=function() {
			if(objXHR.readystate==0)
			{
				pcallback("准备初始化");
			}
			else if(objXHR.readystate==1)
			{
				pcallback("正在连接服务器(装载)...");
			}
			else if(objXHR.readystate==2)
			{
				pcallback("连接服务器(装载)完毕...");
			}
			else if(objXHR.readystate==3)
			{
				pcallback("正在读取数据(交互)...");
			}
			else if(objXHR.readystate==4)
			{
				if(objXHR.status==200)
				{
					pcallback(objXHR);
				}
				else
				{
					pcallback(null);
				}
			}
			else
			{
				pcallback("读取出错...");
			}
		}
		if(pmethod=="POST")
			objXHR.send(pcontent);
		else
			objXHR.send("");
	}
	this.get=function()
	{
		var purl,pcallback;
			
		if(arguments[0]) {purl=arguments[0];} else {purl=this.url;}
		
		if(arguments[1]) pcallback=arguments[1]; else pcallback=this.callback;
		if(!purl&&!pcallback) {return false;}
		this.send(purl,"",pcallback,"GET",true);
	}
	this.post=function()
	{
		var pform,pcallback,purl,pcontent,pmethod;
		if(arguments[0]) pform=arguments[0]; else return false;
		if(arguments[1]) pcallback=arguments[1]; else pcallback=this.callback;
		if(arguments[2])
			purl=arguments[2];
		else if(pform.action)
			purl=pform.action;
		else
			purl=this.url;
		if(arguments[3])
			pmethod=arguments[3];
		else if(pform.method)
			pmethod=pform.method.toLowerCase();
		else
			pmethod="post";
		if(!pcallback&&!purl) return false;
		
		pc=this.formToStr(pform);
		
		if(!pcontent) return false;
		if(pmethod) {
			if(pmethod=="post")
				this.send(purl,pc,pcallback,"POST",true);
			else
				if(purl.indexOf("?")>0)
					this.send(purl+"&"+pcontent,"",pcallback,"GET",true);
				else
					this.send(purl+"?"+pcontent,"",pcallback,"GET",true);
		}
		else
			this.send(purl,pcontent,pcallback,"POST",true);
	}
	// formToStr
	// from SurfChen <surfchen@gmail.com>
	// @url     http://www.surfchen.org/
	// @license http://www.gnu.org/licenses/gpl.html GPL
	// modified by xujiwei
	// @url     http://www.xujiwei.cn/
	this.formToStr=function(fc) {
		var i,query_string="",and="";
		for(i=0;i<fc.length;i++) {
			e=fc[i];
			if (e.name!="") {
				if (e.type=="select-one") {
					element_value=e.options[e.selectedIndex].value;
				}
				else if (e.type=="checkbox" || e.type=="radio") {
					if (e.checked==false) {
						continue;	
					}
					element_value=e.value;
				}
				else {
					element_value=e.value;
				}
				element_value=encodeURIComponent(element_value);
				query_string+=and+e.name+"="+element_value;
				and="&";
			}
		}
		return query_string;
	}
}

/*


类名：AJAX
版本：0.3
日期：2006-12-18
介绍：AJAXRequest是一个方便AJAX开发的通用类，可以方便地进行一些AJAX中需要的操作，从而简化开发步骤，减少重复代码编写量。

创建方法：
var ajaxobj=new AJAXRequest([url],[callback],[content],[method],[async]);
如果创建失败则返回false

属性：
url       - 请求URL，字符串，默认为空
callback  - 回调函数，即返回响应内容时调用的函数，默认为直接返回，回调函数有一个参数为XMLHttpRequest对象，即定义回调函数时要这样：function mycallback(xmlobj)
content   - 请求的内容，如果请求方法为POST需要设定此属性，默认为空字符串
method    - 请求方法，字符串，POST或者GET，默认为POST
async      - 是否异步，true为异步，false为同步，默认为true

方法
function send([url],[callback],[content],[method],[async])
发送请求，可选参数列表为空就使用对象属性

function get([url],[callback])
使用GET方法请求一个URL，可选参数默认使用对象属性

function post(form_obj,[callback],[url],[method])
发送一个表单到指定URL，form_obj为指定表单对象，可选参数为空时使用对象属性

示例：
1. get方法
function test1() {
	var ajax=new AJAXRequest;
	ajax.get(
		"test.asp",
		function(obj) {
			document.getElementById("test1").value=obj.responseText;
		}
	);
}
2. post方法
function test2() {
	var ajax=new AJAXRequest;
	ajax.post(
		document.getElementById("test2c"),
		function(obj) {
			document.getElementById("test2r").innerHTML=obj.responseText;
		}
	);
}
*/