﻿// JScript 파일
var HTTP = {};

HTTP._factories = [
	function() { return new XMLHttpRequest(); },
	function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
	function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
];

HTTP._factory = null;

HTTP.message="";
HTTP.messages = new Array();


HTTP.showMessage = function(align, valign)
{
	if ((typeof(HTTP.message) != "string")  || (HTTP.message.length == 0))
	{
		return -1;
	}
	if (align == undefined)
	{
		align = "center";
	}
	if (valign == undefined)
	{
		valign = "middle";
	}

//	alert('Loading');

/*
	var oMessage = document.createElement("div");
	oMessage.innerHTML = HTTP.message;
	oMessage.style.position="absolute";
	oMessage.style.color="white";
	oMessage.style.backgroundColor="green";
	oMessage.style.margin="0px";
	oMessage.style.paddingLeft="10px";
	oMessage.style.paddingRight="10px";
	oMessage._align=align;
	oMessage._valign=valign;
	document.body.appendChild(oMessage);
	var index = HTTP.messages.push(oMessage)-1;
	return index;
	*/

	var msgdiv = document.getElementById("msgdiv");
	/*
	msgdiv.innerHTML = HTTP.message +"<br><center><img src='./img/loading.gif' width='54' height='9' border='9'></center><br>"; 
	msgdiv.style.color="white";
	msgdiv.style.backgroundColor="green";
	*/
	msgdiv.style.display="";
	return 1;
}

HTTP.hideMessage = function(index)
{
	if (index == -1)
	{
		return;
	}

	var msgdiv = document.getElementById("msgdiv");

	msgdiv.style.display="none";
	/*
	document.body.removeChild(HTTP.messages[index]);
	while((HTTP.messages.length>0) && (HTTP.messages[HTTP.messages.length-1] == null))
		HTTP.messages.pop();
		*/
}

HTTP.newRequest = function() {
	if(HTTP._factory != null) return HTTP._factory();

	for(var i = 0; i < HTTP._factories.length; i++)
	{
		try {
			var factory = HTTP._factories[i];
			var request = factory();
			if (request != null) {
				HTTP._factory = factory;
				return request;
			}
		}
		catch(e) {
			continue;
		}
	}
	HTTP._factory = function() {
		throw new Error("XMLHttpRequest not Supported");
	}

	HTTP._factory();
}

HTTP.post = function(url, values, callback, errorHandler) {
	var request = HTTP.newRequest();
//	var index = HTTP.showMessage();
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			if (request.status == 200) {
//				HTTP.hideMessage(index);
				callback(HTTP._getResponse(request));
			}
			else {
				if (errorHandler) errorHandler(request.status, request.statusText);
				else callback(null);
			}
		}
	}

	request.open("POST", url);
	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	request.send(HTTP.encodeFormData(values));
}

HTTP.get = function(url, values, callback, errorHandler) {
	var request = HTTP.newRequest();
	var index = HTTP.showMessage();
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			HTTP.hideMessage(index);
			if (request.status == 200) {
				callback(HTTP._getResponse(request));
			}
			else {
				if (errorHandler) errorHandler(request.status, request.statusText);
				else callback(null);
			}
		}
	}

	var query_string='';
	var pairs = [];
	for (var name in values) {
		var value = values[name].toString();
		var pair;

		pair= name+"="+value;
		pairs.push(pair);
	}

	query_string = pairs.join('&');
	
	var temp_url= url + "?" + query_string;

	request.open("GET", temp_url);
//	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	request.send(null);
}
/*
HTTP.get = function(url, values, callback, errorHandler, msgHandler) {
	var request = HTTP.newRequest();
	msgHandler('true');
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			if (request.status == 200) {
				msgHandler('false');
				callback(HTTP._getResponse(request));
			}
			else {
				if (errorHandler) errorHandler(request.status, request.statusText);
				else callback(null);
			}
		}
	}

	var query_string='';
	var pairs = [];
	for (var name in values) {
		var value = values[name].toString();
		var pair;

		pair= name+"="+value;
		pairs.push(pair);
	}

	query_string = pairs.join('&');
	
	var temp_url= url + "?" + query_string;

	request.open("GET", temp_url);
//	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	request.send(null);
}
*/

HTTP.encodeFormData = function(data) {
	var pairs = [];
	var regexp = /%20/g;

	for(var name in data) {
		var value= data[name].toString();

		var pair = encodeURIComponent(name).replace(regexp,"+") + '=' + encodeURIComponent(value).replace(regexp,"+");
		pairs.push(pair);
	}

	return pairs.join('&');
}

HTTP._getResponse = function(request) {
    var content_type = request.getResponseHeader("Content-Type").split("; ")[0];
	switch(content_type) {
		case "text/xml" :
			return request.responseXML;
		case "text/json":
		case "text/javascript":
		case "application/javascript":
		case "application/x-javascript":
			return eval(request.responseText);
		default :
			return request.responseText;
	}
}
