﻿function ifAvaliable(strValue){
	var aData = new Object();
	aData['UserName'] = strValue;
	
	ajax({
		type:"POST"
		,url:"/checkUser.asp"
		,data:aData
		,onProcess:function(){id("errMsg").innerHTML = "正在检测..." ;}
		//,onComplete:function(){}
		,onSuccess:thisBack
	});
	
	function thisBack(data){
		var objXmlDoc = new XMLDocument();
		objXmlDoc.async = true;
		objXmlDoc.loadXML(data);
		var objRoot = objXmlDoc.documentElement;	
		var strMsg = objRoot.getAttribute("strMsg");
		id("errMsg").innerHTML = strMsg ;
	};
};

function ajax(opt){
	var options = {
		type : opt.type || "POST",				// HTTP 请求的类型
		url : opt.url || "",					// 请求的URL
		timeout : opt.timeout || 5000,			// 请求超时的时间
		//请求失败、成功或完成（不管成功还是失败都会调用的）时执行的函数
		onProcess:opt.onProcess || function(){},
		//onComplete:opt.onComplete || function(){},
		onError:opt.OnError || function(){},
		onTimeOut:opt.OnTimeOut || function(){},
		onSuccess:opt.onSuccess || function(){},
		data:opt.data || ""
	};
	var xml = new XMLHttpRequest();				// 创建请求对象
	if (options.type.toLowerCase()=="get"){		// 初始化异步请求
		options.url+="?"+serialize(options.data);
	}
	xml.open(options.type,options.url,true);
	var timeoutLength = options.timeout;		// 请求后等待5秒，超时则放弃
	var requestDone = false;					// 记录请求是否成功完成
	
	// 初始化一个5秒后执行的回调函数，用于取消请求。
	options.onProcess();
	
	if (options.type.toLowerCase()=="post"){
		xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		if(xml.overrideMineType) xml.setRequestHeader("Connection","close");
		xml.send(serialize(options.data));
	} else {
		xml.send();
	}
	
	setTimeout(function(){requestDone = true;},timeoutLength);
	
	
	xml.onreadystatechange = function(){
		//保持等待，直到数据完全加载，并保证请求未超时
		if (xml.readyState==4 && !requestDone){
			//检查是否请求成功
			if(httpSuccess(xml)){
				// 以服务器返回的数据作为参数调用"成功回调函数"
				options.onSuccess(httpData(xml,options.type));
			}else{
				options.onError();
			}
			//options.onComplete();//调用完成回调函数
			xml = null;
		};
		if(requestDone){
			xml.abort();
			xml = null;
			options.onError();
		};
	};
	
	function httpSuccess(r){
		try{
			return !r.status &&location.protocol=="files:"||
			(r.status>=200 && r.status<300)||
			r.status==304||
			navigator.userAgent.indexOf("Safari")>=0 && typeof r.status=="undefined";
		} catch(e){}
		return false;
	}
	
	function httpData(r,type){
		var ct = r.getResponseHeader("content-type");
		var data=!type&&ct&&ct.indexof("xml")>=0;
		data = (type=="xml"||data)?r.resposneXML:r.responseText;
		if(type=="script")
			eval.call(window,data);
		return data;
	}
	
	function serialize(a){
		var s = [];//串行化结果的集合
		if (a.constructor==Array){//若传入的参数是数组，假定他们是表单元素的数组。
			for (var i=0;i<a.length;i++)//串行化表单元素
				s.push(a[i].name+"="+encodeURIComponent(a[i].value));
		} else {
			for (var j in a)//串行化键值对
				s.push(j+"="+encodeURIComponent(a[j]));
		}
		return s.join("&");
	}
}

function XMLHttpRequest(){
	var arrSignatures = ["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
	for (var i=0;i<arrSignatures.length;i++){
		try{
			var oRequest = new ActiveXObject(arrSignatures[i]);
			return oRequest;
		} catch (oError){/*ignore*/}
	}
	throw new Error("MSXML is not installed on your system!");
}

function XMLDocument(){
	var arrSignatures = ["MSXML2.DOMDocument"];
	for (var i=0;i<arrSignatures.length;i++){
		try{
			var oRequest = new ActiveXObject(arrSignatures[i]);
			return oRequest;
		} catch (oError){/*ignore*/}
	}
	throw new Error("MSXML is not installed on your system!");
}

function id(str){
	return document.getElementById(str);	
}