/****************************************************************************/

var xmlHttp ;                       // XMLHttpRequest
var MESSAGE_CODE = "MESSAGE_CODE";  // 메세지 코드
var MESSAGE_TEXT = "MESSAGE_TEXT";  // 메세지 내용
var errorPage = '/';								// Error Page

/****************************************************************************/

/**
 * desc       : callback 호출
 *              endSubmitXml( message_code, xml_doc ) function ȣĢ
 * parameter  : servlet -> servlet uri
 *              async -> 비동기 여부
 *              param -> Ǆ¶󺍅ˠ(cmd=100&test=123...)
 * return     : 
 */
function startSubmitXml( servlet, async, param)
{
    xmlHttp = null;
    
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
    
    xmlHttp.onreadystatechange = xml_endSubmit;
    xmlHttp.open("POST", servlet, async);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    xmlHttp.send(param);
}

/**
 * desc       : callback ƫ½àɄ ó¸®
 * parameter  :
 * return     : 
 */
function xml_endSubmit()
{
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            //server error ½`error.jsp·̠forwarding
            if( xmlHttp.getResponseHeader('errorjsp') == "Y")
            {
                location.href = errorPage + '?' + makeParamStr(document.forms[0]);
                return;
            }
    
            var result_arr = new Array;
            var xml_doc = xmlHttp.responseXML;
            
            var message_text = "";
            var message_code = "00000";
    
            if( xml_doc.getElementsByTagName(MESSAGE_TEXT).item(0) != null)
                message_text = xml_doc.getElementsByTagName(MESSAGE_TEXT).item(0).childNodes[0].nodeValue;
                
            if( xml_doc.getElementsByTagName(MESSAGE_CODE).item(0) != null)
                message_code = xml_doc.getElementsByTagName(MESSAGE_CODE).item(0).childNodes[0].nodeValue;
            
            try{                
                f_msg_text(message_text, message_code);
                endSubmitXml(message_code, xml_doc);
            }catch(e){
            }
        }
    }
}

/**
 * desc       : callback ƫ½àɄ
 *              endSubmitText( message_code, text_doc ) function ȣĢ
 * parameter  : servlet -> servlet uri
 *              async -> º񵿱࠿©º̍
 *              param -> Ǆ¶󺍅ˠ(cmd=100&test=123...)
 * return     : 
 */
function startSubmitText(servlet, async, param)
{
    xmlHttp = null;
    
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
    
    xmlHttp.onreadystatechange = text_endSubmit;
    xmlHttp.open("POST", servlet, async);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    xmlHttp.send(param);
}

/**
 * desc       : callback ƫ½àɄ ó¸®
 * parameter  :
 * return     : 
 */
function text_endSubmit()
{
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            //server error ½`error.jsp·̠forwarding
            if(xmlHttp.getResponseHeader('errorjsp') == "Y")
            {
                location.href = errorPage + '?' + makeParamStr(document.forms[0]);
                return;
            }
            
            var message_text = xmlHttp.getResponseHeader(MESSAGE_TEXT);
            var message_code = xmlHttp.getResponseHeader(MESSAGE_CODE);
            
            try{
                f_msg_text(message_text, message_code);
                endSubmitText(message_code, xmlHttp.responseTEXT);
            }catch(e){
            }
        }
    }
}

/**
 * desc       : callback ƫ½àɄ
 *              endSubmitArray( message_code, array ) function ȣĢ
 * parameter  : servlet -> servlet uri
 *              async -> º񵿱࠿©º̍
 *              param -> Ǆ¶󺍅ˠ(cmd=100&test=123...)
 * return     : 
 */
function startSubmitArray( servlet, async, param)
{
    xmlHttp = null;
    
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
    
    xmlHttp.onreadystatechange = array_endSubmit ;
    xmlHttp.open("POST", servlet, async);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
    xmlHttp.send(param);
}
 
/**
 * desc       : callback ƫ½àɄ ó¸®
 * parameter  :
 * return     : 
 */
function array_endSubmit()
{
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            //server error ½`error.jsp·̠forwarding
            if(xmlHttp.getResponseHeader('errorjsp') == "Y")
            {
                location.href = errorPage + '?' + makeParamStr(document.forms[0]);
                return;
            }

            var result_arr = new Array;

            var xmlData = xmlHttp.responseXML;       
            var itemNode = xmlData.getElementsByTagName("qubi").item(0).childNodes;
    
            var itemLength = itemNode.length; 
            var node_name, node_value;
            var message_text = "";
            var message_code = "00000";

            for (i=0; i<itemLength; i++) {
                node_name = itemNode[i].childNodes[0].parentNode.nodeName;
                node_value = itemNode[i].childNodes[0].nodeValue;
    
                if( node_name == MESSAGE_TEXT )
                {
                   message_text = node_value;
                   continue;
                }
                
                if( node_name == MESSAGE_CODE)
                {
                   message_code = node_value;
                   continue;
                }
                
                if( result_arr[node_name] != null)
                {
                    var inner_arr = result_arr[node_name];
                    
                    if( typeof(inner_arr ) != "string")
                    {
                        inner_arr[inner_arr.length] = node_value;
                    }else{
                        var strTmp = result_arr[node_name];
                        inner_arr = new Array(strTmp, node_value);
                    }
                    
                    result_arr[node_name] = inner_arr;
                }else{
                    result_arr[node_name] = node_value;
                }           
            }
                    
            try{
                f_msg_text(message_text, message_code );
                endSubmitArray(message_code, result_arr);
            }catch(e){
            }
        }
    }
}
    
/**
 * desc       : |¼٠formG objectµꀻ XMLHttpRequest parameter string8·̠»�* parameter  : form object
 * return     : parameter string
 */ 
function makeParamStr(form)
{
     var param = "";
     
     for(var i=0, n=form.length; i < n ; i++)
     {
        var obj = form.elements[i];
        var name = obj.name;
        
        if(obj.type == "checkbox" || obj.type == "radio")
        {
	        if(obj.checked)
                param += "&" + name + "=" + obj.value.replace(/%/g, '%25').replace(/&/g, '%26');
        }
        else if(obj.type == "text" || obj.type == "select-one" || obj.type == "select" || obj.type == "textarea" || obj.type == 'hidden' || obj.type == 'password')
        {
	        param += "&" + name + "=" + obj.value.replace(/%/g, '%25').replace(/&/g, '%26');
        }
     }
     
     param = param.replace(/\+/g, '%2B');

     return param.substring(1);
}