var Request = new Object();
Request.msxmls = ['Msxml2.XMLHTTP','Microsoft.XMLHTTP'];
Request.async = true;

Request.createRequest = function() {
	var req;
	try {
		req = new XMLHttpRequest();
	} catch (e) {
		for(var i = 0; i < this.msxmls.length; i++ )	{
			try	{
				req = new ActiveXObject(this.msxmls[i]);
				break;
			} catch(e) {}
		}
	}
	
	return req;	
}

Request.send = function(url, method, callback, data, args, urlencoded) {
	var httpRequest = this.createRequest();
		
	httpRequest.onreadystatechange = function() {
		if (httpRequest.readyState == 4) {// only if req shows "loaded"
			if (httpRequest.status < 400) {// only if "OK"
				//alert(httpRequest.status);
				(method=="POST") ? callback(httpRequest, args) : callback(httpRequest, data);
			} else {
				switch(httpRequest.status)
				{
					case 998:
					Request.message.restrictedUser();
					break;
					
					default:
					//alert("There was a problem loading data :\n" + httpRequest.status+ "/" + httpRequest.statusText);
					break;
				}
				
			}
		}
	}
	if (method=="POST") {
		httpRequest.open("POST", url, this.async);
		if (urlencoded) httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		httpRequest.send(data);
	} else {
		httpRequest.open("GET", url, this.async);
		httpRequest.send(null);
	}
	return httpRequest;
}

Request.sendRawPOST = function(url, data, callback, args) {
	Request.send(url, "POST", callback, data, args, false);
}
Request.sendPOST = function(url, data, callback, args) {
	Request.send(url, "POST", callback, data, args, true);
}
Request.sendGET = function(url, callback, args) {
	return Request.send(url, "GET", callback, args);
}

Request.errors = {
	restrictedUser : "È¸¿ø´Ô²²¼­´Â Åë ¼­ºñ½ºÀÇ ÀÌ¿ëÀÌ Á¦ÇÑµÇÀÖ½À´Ï´Ù. \n\n¹®ÀÇ»çÇ×Àº  tongmaster@nate.com À¸·Î  ¸ÞÀÏÀ» ÁÖ½Ã¸é  \n´ã´çÀÚ°¡ È®ÀÎ ÈÄ ¿¬¶ô µå¸®°Ú½À´Ï´Ù. "
}
Request.message = {
	
	restrictedUser : function() 
	{
		alert(Request.errors.restrictedUser);
	}

}
