﻿
// ========== REQUEST ====================================================================================================



var Request = new Object();

Request.send = function(url, method, callback, data, urlencoded, name) {
	var req;
	
	
	if (window.XMLHttpRequest) {
        // 非IE浏览器
        req = new XMLHttpRequest();
    } 
	else if (window.ActiveXObject) {
		
		try { 
			req = new ActiveXObject("Msxml2.XMLHTTP"); 
		} catch (e) { 
			try { 
				req = new ActiveXObject("Microsoft.XMLHTTP"); 
			} catch (e) {} 
		}

	}
	
	if (typeof name == "undefined") {
		name = "";
	} else {
		name += "\n";
	}
	var readychange = function() { 
	
		if (req.readyState == 4) {// only if req shows "loaded"
			if (req.status < 400) {// only if "OK"
				if (method=="POST") {
					callback(req);
					delete callback;
				} else {
					callback(req,data);
					delete callback;
				}
			} else if (typeof req == "undefined" || typeof req.status == "undefined") {
				//alert("don't do anything. user has navigated away");
				delete callback;
			} else if (req.status == 401) { 
			    alert("unauthorized");
				callback(req);
				delete callback;
			} else if (req.status == 404) {
				//alert("should not happen, but ignore it for now");
			} else {
			    //alert("windows error codes");
				switch(req.status) {
					
					case 12002: // server timeout
					case 12029: case 12030: case 12031: // dropped connection
					case 12152: // connection closed by server
					case 13030:
						//alert(name + "There was a network problem. Please reload the page.");
						break;
					case 500: case 503:
					   // alert(req.status)
						//alert(name + "There was an internal server error. Please try later.");
						break;
					default:
						alert("There was a problem loading data:" + "\nstatus: " + req.status+ "/" + req.statusText + "\n" + url);
				}
				delete callback;
			}
		}
	};
	function do_request() {
	
		if (method=="POST") {
			req.open("POST", url, true);
			if (urlencoded) req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			req.onreadystatechange = readychange;
			req.send(data);
		} else {
			req.open("GET", url, true);
			req.onreadystatechange = readychange;
			req.send(null);
		}
	};

    
	do_request();
	return req;
}

Request.sendRawPOST = function(url, data, callback, name) {
	Request.send(url, "POST", callback, data, false, name);
}
Request.sendPOST = function(url, data, callback, name) {
	Request.send(url, "POST", callback, data, true, name);
}
Request.sendGET = function(url, callback, args, name) {
	return Request.send(url, "GET", callback, args, name);
}





