﻿/*

*/

var SWRPSockets = new Array();

function SWRPCreateCallData(callData/*Hashtable  = { F1:1, F2:2} */) {
    if (!callData) return "";
    var key, value;
    var strDatas = new Array();

    for (key in callData) {
        value = callData[key] ? callData[key] : "";
        strDatas.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
    }

    return strDatas.join("&");
}

function XMLHttpRequestCall(
	 callID/*string*/
	, callUrl/*string*/
	, callData/*Hashtable  = { F1:1, F2:2} */
	, isAsync/*boolean*/
	, callback_complete/* void (*cb)(XMLHttpRequest req) */
) {
    var socketInfo = null;
    if (!(socketInfo = SWRPSockets[callID])) {
        var socket;
        if (window.XMLHttpRequest) {
            socket = new XMLHttpRequest();
        }
        else {
            socket = new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        SWRPSockets[callID] = socketInfo = {
            req: socket
			, isSending: false
        };
        if (!socket) {
            alert("요청하기위한 컴포넌트를 찾지 못하였습니다.");
            return;
        }
    }

    if (socketInfo.isSending) {
        alert("[" + callID + "] 요청이 진행중입니다.");
        return;
    }

    try {

        socketInfo.isSending = true;
        socketInfo.req.abort();

        var innerCallback = function() {
            if (socketInfo.req.readyState == 4) {
                socketInfo.isSending = false;
                if (socketInfo.req.status == 200) {
                    if (callback_complete) {
                        callback_complete(socketInfo.req);
                    }
                }
                else {
                    alert(
					     "서버장애입니다. 관리자에게 문의바랍니다.\n\n"
					    + "상태코드 : " + socketInfo.req.status + "\n"
					    + "상태내용 : " + socketInfo.req.statusText
					);
                }
            }
        };

        if (isAsync)
            socketInfo.req.onreadystatechange = innerCallback;
        else
            socketInfo.req.onreadystatechange = null;

        socketInfo.req.open("POST", callUrl, isAsync);
        socketInfo.req.setRequestHeader("content-type", "application/x-www-form-urlencoded; charset=utf-8");
        socketInfo.req.send(SWRPCreateCallData(callData));

        if (!isAsync) {
            innerCallback();
        }
    }
    catch (e) {
        socketInfo.isSending = false;
    }
    finally {
    }

}
