
RS_UNINITIALIZED = 0;

RS_NOT_SENT = 1;

RS_SENT = 2;

RS_IN_PROCESS = 3;

RS_COMPLETE = 4;

SC_PREFIX_INFO = 1;

SC_PREFIX_SUCCESS = 2;

SC_PREFIX_REDIRECT = 3;

SC_PREFIX_INCOMPLETE = 4;

SC_PREFIX_ERROR = 5;

SC_CONTINUE = 100;
SC_SWITCHING_PROTOCOLS = 101;

SC_OK = 200;
SC_CREATED = 201;
SC_ACCEPTED = 202;
SC_NON_AUTHORITATIVE_INFORMATION = 203;
SC_NO_CONTENT = 204;
SC_RESET_CONTENT = 205;
SC_PARTIAL_CONTENT = 206;

SC_MULTIPLE_CHOICES = 300;
SC_MOVED_PERMANENTLY = 301;
SC_MOVED_TEMPORARILY = 302;
SC_FOUND = 302;
SC_SEE_OTHER = 303;
SC_NOT_MODIFIED = 304;
SC_USE_PROXY = 305;
SC_TEMPORARY_REDIRECT = 307;

SC_BAD_REQUEST = 400;
SC_UNAUTHORIZED = 401;
SC_PAYMENT_REQUIRED = 402;
SC_FORBIDDEN = 403;
SC_NOT_FOUND = 404;
SC_METHOD_NOT_ALLOWED = 405;
SC_NOT_ACCEPTABLE = 406;
SC_PROXY_AUTHENTICATION_REQUIRED = 407;
SC_REQUEST_TIMEOUT = 408;
SC_CONFLICT = 409;
SC_GONE = 410;
SC_LENGTH_REQUIRED = 411;
SC_PRECONDITION_FAILED = 412;
SC_REQUEST_ENTITY_TOO_LARGE = 413;
SC_REQUEST_URI_TOO_LONG = 414;
SC_UNSUPPORTED_MEDIA_TYPE = 415;
SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
SC_EXPECTATION_FAILED = 417;

SC_INTERNAL_SERVER_ERROR = 500;
SC_NOT_IMPLEMENTED = 501;
SC_BAD_GATEWAY = 502;
SC_SERVICE_UNAVAILABLE = 503;
SC_GATEWAY_TIMEOUT = 504;
SC_HTTP_VERSION_NOT_SUPPORTED = 505;

// createXMLHttpRequest
function createXMLHttpRequest(param) {
	var httpRequest = null;
	if (window.XMLHttpRequest) {
		httpRequest = createInMozilla();
	} else {
		if (window.ActiveXObject) {
			httpRequest = createInIE();
		}
	}
	if (httpRequest == null) {
		try {
			alert("Initialization fails!");
		}
		catch (e) {
			throw new Error("Initialization fails!");
		}
	}
	
	httpRequest.onreadystatechange = function() {
		readyStateChanged(httpRequest, param);
	};
	return httpRequest;
}

//Mozilla
function createInMozilla() {
	var mozInstance = null;
	mozInstance = new XMLHttpRequest();
	if (mozInstance.overrideMimeType) {
		mozInstance.overrideMimeType("text/xml");
	}
	return mozInstance;
}

//IE
function createInIE() {
	var name = ["Msxml3.XMLHTTP", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
	for (var i = 0; i < name.length; i++) {
		try {
			return new ActiveXObject(name[i]);
		}
		catch (e) {
		}
	}
}

// readyStateChanged
function readyStateChanged(httpRequest, param) {
	try {
		preProcessReadyStateChanged(httpRequest, param);
	}
	catch (e) {
	}
	try {
		switch (httpRequest.readyState) {
		  case RS_UNINITIALIZED:
			readyStateUninitialized(httpRequest, param);
			break;
		  case RS_NOT_SENT:
			readyStateNotSent(httpRequest, param);
			break;
		  case RS_SENT:
			readyStateSent(httpRequest, param);
			break;
		  case RS_IN_PROCESS:
			readyStateInProcess(httpRequest, param);
			break;
		  case RS_COMPLETE:
			readyStateComplete(httpRequest, param);
			break;
		}
	}
	catch (e) {
	}
	try {
		postProcessReadyStateChanged(httpRequest, param);
	}
	catch (e) {
	}
}
