/*---------------------------------------------------------------------------------------
使用Ajax无刷新提交表单
使用些模块必需加域Ajax模块

使用方法: var ajax=new Ajax(url,data,onload,onerror)
参数说明:
		url:处理页面的路径
		data:传递过去的数据 表示格式： id=1243&page=2  中文，特殊字符请用escape(String)处理
		onload;处理成功后的处理函数
		onerror:失败后的处理函数，可省略
另有两个返回字段。
ajax.responseText 处理成功后将返回从处理页面传递过来的字符串
ajax.responseXML 处理成功后将返回从处理页面传递过来的XML
		
* 作者：舒彩光
* 创作时间：2006-12-30
* 完成时间：2006-12-31
* 第一次修改时间：无
* 修改目的及内容：无
*
*  本程式在IE、firfox中测试均通过。
*		如果存在BUG，或在功能上有不完善之处请用QQ联系；QQ：327285304


----------------------------------------------------------------------------------------*/

var AjaxState=new Object();
AjaxState.UNINIT=0;
AjaxState.LOADING=1;
AjaxState.LOADED=2;
AjaxState.INTERACTIVE=3;
AjaxState.COMPLETE=4;

//创建XMLHTTP对象
function createXMLHTTP(){
	if(window.XMLHttpRequest){
		var XMLHttp=new window.XMLHttpRequest();
		//XMLHttp.overrideMimeType("text/xml");
		return XMLHttp;
	}
	else if(window.ActiveXObject){
		var XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
		return XMLHttp;
	}
}

//构造函数
//凋用方法
//new Ajax()
//new Ajax(url,date,onload)
//new Ajax(url,date,onload,onerror)
function Ajax(url,data,onload,onerror){
	//输入值
	this.url=url;
	this.data=data;
	this.onload=onload;
	this.onerror=(onerror)?onerror:this.defaultError;
	
	//输出值
	this.responseText=null;
	this.responseXML=null;
	
	//操作
	this.loadDoc()
}

Ajax.prototype.loadDoc=function(){
	var data=this.data;
	oThis=this;
	var XMLHttp
	try{
		XMLHttp=createXMLHTTP();
		this.XMLHttp=XMLHttp;
		XMLHttp.open("POST",this.url,true);
		XMLHttp.onreadystatechange=function(){oThis.readyState();}
		XMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		XMLHttp.send(data);
	}catch(e){
		this.onerror();
	}
}

Ajax.prototype.readyState=function(){
	if(this.XMLHttp.readyState==AjaxState.COMPLETE){
		if(this.XMLHttp.status==200 || this.XMLHttp.status==0){
			this.responseText=this.XMLHttp.responseText;
			this.responseXML=this.XMLHttp.responseXML;
			this.onload();
		}else{
			this.onerror();
		}
	}
}

Ajax.prototype.defaultError=function(){
	alert("程序处理错误！"+	
		"\n处理状态:"+this.XMLHttp.readyState+
		"\n服务器状态:"+this.XMLHttp.status +" ["+this.XMLHttp.statusText+"]"+
		"\n文件头信息:"+this.XMLHttp.getAllResponseHeaders()+"")
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//功能函数:类型判断
//2006年12月6日摘录于网上，
//出自谁手，未知。

//数组
function isArray(obj){ 
        return (typeof obj=='object')&&obj.constructor==Array; 
} 
//字符串
function isString(str){ 
        return (typeof str=='string')&&str.constructor==String; 
}
//数值
function isNumber(obj){ 
        return (typeof obj=='number')&&obj.constructor==Number; 
}
//日期
function isDate(obj){ 
        return (typeof obj=='object')&&obj.constructor==Date; 
}
//函数
function isFunction(obj){ 
        return (typeof obj=='function')&&obj.constructor==Function; 
}
//对象
function isObject(obj){ 
        return (typeof obj=='object')&&obj.constructor==Object; 
} 

