/**
 * 타 시스템으로 변경시 변경할 내용 (HPE 기준)
 * jsp 경로 및 jsp파일명 : /common/oib/jsp/callOibSignCreateService.jsp => /common/hpe/jsp/callHpeSignCreateService.jsp
 * 전문코드명 : R_OIB => R_RIB,  S_OIB => S_RIB 
 * 인증서 호출 함수:  SFCertProcessNoCallback() 함수는 OIB 만 사용, 그 외 시스템은 주석처리
**/
//                  콤포넌트명               현재사용안함   valid check 여부 (false이면 무시)
//refreshAccessTime(1000);// 세션타임아웃방지(잠시추가)
var _plugAllName = {
                    "anchor"          : [ { conform:true,  valid:false } ]
                  , "autocomplete"    : [ { conform:true,  valid:true } ]
                  , "calendar"        : [ { conform:true,  valid:true } ]
                  , "chart"           : [ { conform:false, valid:false } ]
                  , "checkbox"        : [ { conform:true,  valid:true } ]
                  , "editor"          : [ { conform:true,  valid:true } ]
                  , "floatinglayer"   : [ { conform:false, valid:false } ]
                  , "grid"            : [ { conform:false, valid:false } ]
                  , "group"           : [ { conform:true,  valid:true } ]
                  , "iframe"          : [ { conform:false, valid:false } ]
                  , "image"           : [ { conform:true,  valid:false } ]
                  , "input"           : [ { conform:true,  valid:true } ]
                  , "inputcalendar"   : [ { conform:true,  valid:true } ]
                  , "menu"            : [ { conform:false, valid:false } ]
                  , "multiselect"     : [ { conform:false, valid:false } ]
                  , "multiupload"     : [ { conform:false, valid:false } ]
                  , "output"          : [ { conform:true,  valid:false } ]
                  , "pagelist"        : [ { conform:true,  valid:false } ]
                  , "radio"           : [ { conform:true,  valid:true } ]
                  , "repeat"          : [ { conform:true,  valid:true } ]
                  , "roundrectangle"  : [ { conform:false, valid:false } ]
                  , "secret"          : [ { conform:true,  valid:true } ]
                  , "selectbox"       : [ { conform:true,  valid:true } ]
                  , "slidehide"       : [ { conform:false, valid:false } ]
                  , "switch"          : [ { conform:false, valid:false } ]
                  , "tabcontainer"    : [ { conform:false, valid:false } ]
                  , "textarea"        : [ { conform:true,  valid:true } ]
                  , "textbox"         : [ { conform:true,  valid:false } ]
                  , "treeview"        : [ { conform:false, valid:false } ]
                  , "trigger"         : [ { conform:true,  valid:false } ]
                  , "upload"          : [ { conform:false, valid:false } ]
                  , "wframe"          : [ { conform:false, valid:false } ]
                  , "windowcontainer" : [ { conform:false, valid:false } ]
                  , "xhtml"           : [ { conform:false, valid:false } ]
                  , "xsl"             : [ { conform:false, valid:false } ]
};

//운영반영시 경로수정
var IMAGE_URL = "http://img.shinhan.com/nexhpe";

function callInitechXMLService() {
//  alert("callInitechXMLService");
    var cipher = "SEED-CBC";
    //var quiet = false, argumentStr, ret, syncMode = "" ,display = "", xsl = "", friendly = "", callBack = "", exceptionCallback = "", warningDisplayType = "", cursorFix = "false", lock = "true", debug = "false", processMsg = "", usecert = "false", usesign = "false";
    var syncMode = "asynchronous", callBack = "", debug = "false", exceptionCallback = "";
    var keepTransactionSession = "false", processMsg = "", responsemessage = "", requestmessage = "";
    var showjstarerror = "", mediatype = "application/xml", usesign = "";
    //2007. 6. 13 Login timer clear
    clearLoginTimeOut();
    try {
        var sFeatures = arguments[0];
        var servletURI  = arguments[1];
        var doc  = arguments[2];
        var result  = arguments[3];
        var arrayOfFeatures = sFeatures.split(";");
        for (var i=0; i < arrayOfFeatures.length; i++) {
            var tmpArray = arrayOfFeatures[i].split(":");
            if ( tmpArray.length == 2 ) {
                tmpArray0 = tmpArray[0].trim().toLowerCase();
                tmpArray1 = tmpArray[1].trim();
                if ( tmpArray0 == "sync" )   {
                    syncMode = tmpArray1.toLowerCase();
                    if (syncMode == "true") syncMode = "synchronous";
                } else if ( tmpArray0 == "callback" )   {
                    callBack = tmpArray1;
                } else if ( tmpArray0 == "debug" )  {
                    debug = tmpArray1.toLowerCase();
                } else if ( tmpArray0 == "exceptioncallback" )  {
                    exceptionCallback = tmpArray1;
                } else if ( tmpArray0 == "keeptransactionsession" ) {
                    keepTransactionSession = tmpArray1;
                } else if ( tmpArray0 == "processmsg" ) {
                    processMsg = tmpArray1;
                } else if ( tmpArray0 == "responsemessage" )    {
                    responseMessage = tmpArray1;
                } else if ( tmpArray0 == "requestmessage" )    {
                    requestMessage = tmpArray1;
                } else if ( tmpArray0 == "showjstarerror" ) {
                    showJStarError = tmpArray1;
                } else if ( tmpArray0 == "mediatype" ) {
                    mediatype = tmpArray1;
                } else if ( tmpArray0 == "usesign" ) {
                    usesign = tmpArray1;
                }
            }
        }

        //수정 start
        var _signDoc;
        var _signData;
        var _signTitle;
        if( usesign == 'true' || usesign == 'view' || usesign == 'nreg' ){
            _signDoc   = AppendSignData(doc);
            _signData  = WebSquare.xml.getString( _signDoc, "_signData");
            _signTitle = WebSquare.xml.getString( _signDoc, "_signTitle");

            if( _signData == "" ){
                alertError("죄송합니다.\n전자서명문이 전달되지 않았습니다.\n처음부터 다시 거래하여 주시기 바랍니다.");
                return false;
            }

//          _signData = "&__signData__=" + encodeURIComponent(_signData)
//                    + "&__signTitle__=" + encodeURIComponent(_signTitle);
            _signData = "&__signData__=" + _signData + "&__signTitle__=" + _signTitle;


			var postURI = "";
			if (servletURI.indexOf("?") > 0) {
				postURI = servletURI.substring(servletURI.indexOf("?"));
				servletURI = servletURI.substring(0, servletURI.indexOf("?"));
			}
            if ( usesign == 'true' ){
                servletURI  = servletURI.substring(0, servletURI.lastIndexOf("/")+1)  + "sign"
                            + servletURI.substring(servletURI.lastIndexOf("/"))+postURI;
            }
            else if ( usesign == 'nreg' ) {
                servletURI  = servletURI.substring(0, servletURI.lastIndexOf("/")+1)  + "signNreg"
                            + servletURI.substring(servletURI.lastIndexOf("/"))+postURI;
            }
            else{
                servletURI  = servletURI.substring(0, servletURI.lastIndexOf("/")+1)  + "signView"
                            + servletURI.substring(servletURI.lastIndexOf("/"))+postURI;
            }

            printStackTrace('최종 URL: ' + servletURI);

            //Initech 인증서명을 호출한다.   2011.10.07 OIB만 사용 그외 시스템은 사용 안함.
//          var result = SFCertProcessNoCallback('sign', servletURI, _signData);
//          if (result == "") {
//              printStackTrace("전자서명 result가 빈값!! "+servletURI);
//              printStackTrace("_signData\n "+_signData);
//              //alertError("죄송합니다.\n전자서명문이 전달되지 않았습니다.\n처음부터 다시 거래하여 주시기 바랍니다.");
//              return false;
//          }

            //전자서명 검증 여부 추가
            WebSquare.xml.setAttribute(doc, "useSign", "true");
        }
        // 수정 end
        try{
            var s_code = WebSquare.xml.getAttribute( doc, "serviceCode");
            var s_task = WebSquare.xml.getAttribute( doc, "task" );
            var s_action = WebSquare.xml.getAttribute( doc, "action" );

            if( s_code == "" ){
                s_code = WebSquare.xml.getString(doc, "COM_SVC_CODE");
            }
        } catch(cookieee){
            printStackTrace("service code Cookie Write error: " + cookieee);
        }

        if( servletURI.indexOf( location.protocol ) == -1 ) {   // not starts with http
            if( servletURI.charAt(0) == '/' ) {
                servletURI = location.protocol + "//" + location.host + servletURI;
            }
        }

        var args = "";
        if (typeof result != 'undefined' && result != "") {
            args = result+"&";
        }
        var xmlString = WebSquare.xml.serialize(doc);
        if( usesign == 'true' || usesign == 'view' || usesign == 'nreg' ){
            args = args + "plainXML=" + encodeURIComponent(xmlString) + _signData;
        } else{
            args = args + "plainXML=" + encodeURIComponent(xmlString);
        }
        
        WebSquare.net.ajax({
            action      : servletURI,
            mode        : syncMode,
            mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
            method      : "post",
            requestData : args,
            type        : "text",
            processMsg  : processMsg,
            success     : function(e) {
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
							if (typeof result != 'undefined' && result != "") {
								statusObj.initech = result;
							} else {
								statusObj.initech = "";
							}
                            statusObj.callBack = callBack;
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = sFeatures;
                            statusObj.servletURI = servletURI;
                            _callBackInitechXML(e, statusObj);
                          },
            error       : function(e) {
                            //alert("error exception = "+e.responseBody);
                            if (e.responseStatusCode == "") {
                            }
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
                            statusObj.initech = "";
                            statusObj.callBack = callBack;
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = sFeatures;
                            statusObj.servletURI = servletURI;
                            _callBackInitechXMLError(e, statusObj);
                          }
        });

        return true;
    } catch( e ) {
        printStackTrace( e );
        return false;
    }
}

function _callBackInitechXML(e, statusObj)   {
    // Login Timer set, 거래후 5분동안 거래가 없을경우 자동 로그아웃 처리
    setLoginTimeOut();

    try {
        var retStr = e.responseText;
        printStackTrace("e.responseText[" + retStr + "]");
        //수정 start
        if (e.responseStatusCode == 0){
            try{
                printStackTrace("login cancel");
            } catch( e ) {
                printStackTrace( e );
            }
            return false;                       //사용자에 의해 요청이 취소되었을 경우
		} else if (retStr.indexOf("<h2>HTTP Status ") > 0) {
			var pi = retStr.indexOf("<h2>HTTP Status ");
			var httpCode = retStr.substring(pi+16, pi+19);
			if (httpCode >= 800 ){
				if ( httpCode == 800 || httpCode == 851 || httpCode >= 900 ){
					retStr = getSFilterMessage(httpCode);  //SHTTP 오류 메시지를 얻음
					printStackTrace("retStr = "+retStr);
				} else{
					retStr = "<WARNING><errorCode value='0031'/></WARNING>";
				}
			}
		}

        var result = WebSquare.xml.parse( retStr );
        if (retStr == "") {
            printStackTrace("복호화 에러이거나 암호화 안된 응답임.");
            result = WebSquare.xml.parse(e.responseText);
            // 암호화 안된 채 내려온 메시지의 경우 WARNING이 아니면 무시한다.
            if ( result == null || typeof result.documentElement == 'undefined' || result.documentElement == null || result.documentElement.nodeName != 'WARNING'  )  {
                printStackTrace("메시지가 아니거나 암호화 안된 메시지의 root노드가 'WARINING'이 아니므로 무시.");
                result = null;
			}
		}
		if (result.documentElement.nodeName == 'JSTAR_ERROR' && statusObj.showJStarError == "false") {
			if ( typeof statusObj.exceptionCallback != "undefined" && statusObj.exceptionCallback != "" ) {
				try {
					eval( statusObj.exceptionCallback + "( result, statusObj.argument, statusObj.sFeatures );" );
				} catch( e ) {
					e.detail = statusObj.exceptionCallback + "( result ) 에서 에러가 발생하였습니다!!!! result:" + WebSquare.xml.serialize(result);
					printStackTrace( e );
				}
				return;
			}
		}
		if (getStringXML(result, "errorCode") != "0031" && result.documentElement.nodeName == 'WARNING') {
			
			var errorUrl = errorUrl = "/common/hpe/message/warningMsg.xml";
			var url = top.document.location.href;
			if (opener) {
				url = opener.top.document.location.href;
			} else if (parent) {
				url = parent.top.document.location.href;
			}
			var sFeatures = "width:530; height:350;";
			if (url.indexOf(".shinhan.com/en/") > 0 || url.indexOf(".shinhan.com/jpn/") > 0 || url.indexOf(".shinhan.com/cn/") > 0) {
				sFeatures = sFeatures + "title:An error ocurred.";
			} else {
				sFeatures = sFeatures + "title:처리 중 오류가 발생 하였습니다.";
			}
		    viewWarningMsg(errorUrl, sFeatures, result);
	        return;
        }
        //수정 end

        //전자금융서비스 거래또는 Task실행에대한 웹로그 분서을 위하여 추가
        //2008.8.14 Attack
        saveWebLog( result, statusObj);
        if ( typeof statusObj.callBack != "undefined" && statusObj.callBack != "" ) {
            try {
                eval( statusObj.callBack + "( result, statusObj.argument, statusObj.sFeatures );" );
            } catch( e ) {
                e.detail = statusObj.callBack + "( result ) 에서 에러가 발생하였습니다!!!! result:" + WebSquare.xml.serialize(result);
                printStackTrace( e );
            }
        }
        return;
    } catch ( e ) {
        printStackTrace( e );
    }
}

function _callBackInitechXMLError(e, statusObj) {
	var retStr = e.responseBody;
	if (retStr.indexOf("<h2>HTTP Status ") > 0 || retStr.indexOf("<h2>S-HTTP Status ") > 0) {
		var pi = retStr.indexOf("HTTP Status ");
		var httpCode = retStr.substring(pi+12, pi+15);
		if (httpCode >= 800 ){
			if ( httpCode == 800 || httpCode == 851 || httpCode >= 900 ){
				retStr = getSFilterMessage(httpCode);  //SHTTP 오류 메시지를 얻음
				printStackTrace("retStr = "+retStr);
			} else{
				retStr = "<WARNING><errorCode value='0031'/></WARNING>";
			}
		}
	}
	
	var result = WebSquare.xml.parse( retStr );
	if (retStr == "") {
		printStackTrace("복호화 에러이거나 암호화 안된 응답임.");
		result = WebSquare.xml.parse(e.responseText);
		// 암호화 안된 채 내려온 메시지의 경우 WARNING이 아니면 무시한다.
		if ( result == null || typeof result.documentElement == 'undefined' || result.documentElement == null || result.documentElement.nodeName != 'WARNING'  )  {
			printStackTrace("메시지가 아니거나 암호화 안된 메시지의 root노드가 'WARINING'이 아니므로 무시.");
			result = null;
		}
	}
	if (result.documentElement.nodeName == 'JSTAR_ERROR' && statusObj.showJStarError == "false") {
		if ( typeof statusObj.exceptionCallback != "undefined" && statusObj.exceptionCallback != "" ) {
			try {
				eval( statusObj.exceptionCallback + "( result, statusObj.argument, statusObj.sFeatures, statusObj.initech );" );
			} catch( e ) {
				e.detail = statusObj.exceptionCallback + "( result ) 에서 에러가 발생하였습니다!!!! result:" + WebSquare.xml.serialize(result);
				printStackTrace( e );
			}
			return;
		}
	}
	if (getStringXML(result, "errorCode") != "0031" && result.documentElement.nodeName == 'WARNING') {
		var errorUrl = errorUrl = "/common/hpe/message/warningMsg.xml";
		var url = top.document.location.href;
		if (opener) {
			url = opener.top.document.location.href;
		} else if (parent) {
			url = parent.top.document.location.href;
		}
		var sFeatures = "width:530; height:350;";
		if (url.indexOf(".shinhan.com/en/") > 0 || url.indexOf(".shinhan.com/jpn/") > 0 || url.indexOf(".shinhan.com/cn/") > 0) {
			sFeatures = sFeatures + "title:An error ocurred.";
		} else {
			sFeatures = sFeatures + "title:처리 중 오류가 발생 하였습니다.";
		}

		viewWarningMsg(errorUrl, sFeatures, result);

		try {
			if ( typeof statusObj.exceptionCallback != "undefined" && statusObj.exceptionCallback != "" ) {
				try {
					eval( statusObj.exceptionCallback + "(result, statusObj.argument, statusObj.sFeatures );" );
				} catch( e ) {
					e.detail = statusObj.exceptionCallback + "호출!!!";
					printStackTrace( e );
				}
			}
			return;
		} catch ( e ) {
			printStackTrace( e );
		}
	}
}

//전자서명 함수
function AppendSignData(xmlDoc) {
    var rootName = xmlDoc.documentElement.nodeName;
    var xmlStr = WebSquare.xml.serialize(xmlDoc);
    var resultDoc = WebSquare.xml.parse("<SIGN/>");
    var _signData = "";
    var _signTitle = "";

    // 2010.11.30 서버의 전자서명 생성을 위한 signCode 값 호출
    var signCode = WebSquare.xml.getAttribute(xmlDoc, "signCode");
    printStackTrace("AppendSignData.signCode : ["+signCode+"]");
    // 2010.11.30 서버의 SIGN_DATA를 로드하기위한 signCode 체크
    if ( signCode != "" ){  // signCode가 있으면 서버의 SIGN_DATA로 전자서명한다.
        printStackTrace("AppendSignData에서 서버의 SIGN_DATA를 요청합니다. signCode : ["+signCode+"]");
        try {
            var signDoc = getServerSignDocument(signCode, xmlStr);  // 서버의 전자서명 Document 가져오기
            _signTitle = WebSquare.xml.getString( signDoc, "signTitle");
            _signData = WebSquare.xml.getCDataNodeValue(WebSquare.xml.findNode(signDoc, "signData"));
            printStackTrace("AppendSignData.SIGN_TITLE ["+_signTitle+"]");
            printStackTrace("AppendSignData.SIGN_DATA ["+_signData+"]");
        } catch ( eee ) {
            _signTitle = "";
            _signData = "";
            printStackTrace("AppendSignData에서 getServerSignDocument 처리 중 에러가 발생했습니다. " +  e);
        }
    } else {
        printStackTrace("AppendSignData에서 로컬의 SIGN_DATA를 사용합니다.");
        var vecXML = WebSquare.xml.findNode( xmlDoc, "vector");
        if (vecXML == null) {
            _signTitle = WebSquare.xml.getString(xmlDoc, "__signTitle__");
            _signData  = WebSquare.xml.getString(xmlDoc, "__signData__");
        } else {
            var vec = WebSquare.collection.toVector(xmlDoc);
            for (var i=0;i<vec.size();i++) {
                var eleDoc = vec.elementAt(i);
                _signTitle += WebSquare.xml.getString(eleDoc, "__signTitle__");
                _signData  += WebSquare.xml.getString(eleDoc, "__signData__");
            }
        }
        printStackTrace("AppendSignData(_signTitle): " + _signTitle + " => _signData: " + _signData);
    }

    WebSquare.xml.setString( resultDoc, "_signData",  _signData  );
    WebSquare.xml.setString( resultDoc, "_signTitle", _signTitle );
    return resultDoc;
}

//2010.11.30 서버에서 전자서명 데이터를 생성하기위한 요청 Function
function getServerSignDocument(signCode , xmlStr) {
    var resultDoc;
    WebSquare.net.ajax({
        action      : "/common/hpe/jsp/callHpeSignCreateService.jsp",
        mode        : "synchronous",
        mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
        method      : "post",
        requestData : "signCode=" + signCode + "&xmlStr=" + encodeURIComponent(xmlStr),
        type        : "text",
        success     : function(e) {
                          resultDoc = WebSquare.xml.parse(e.responseText);
                      },
        error       : function(e) {
                          resultDoc = WebSquare.xml.parse("<SIGN result='9'/>");
                      }
    });
    var oXmlHttp = __createXMLHTTPObject();

    return resultDoc;
}

//웹로그 모듈 호출
function saveWebLog(result, statusObj)
{
	try {
	    var svc_code = WebSquare.xml.getString(statusObj.argument, "serviceCode");
	    var task	 = WebSquare.xml.getString(statusObj.argument, "task");
	    var action   = WebSquare.xml.getString(statusObj.argument, "action");
	    var req_url  = statusObj.servletURI;

	    var resultDoc = WebSquare.xml.parse(result);
	    var resultState = "OK";

		if (resultDoc.documentElement.nodeName == 'JSTAR_ERROR')  {
			resultState = "JERROR";
		} else if (resultDoc.documentElement.nodeName == 'WARNING')  {
			resultState = "WARNING";
		}

		if (req_url.indexOf("s-http") == 0) {
			req_url = req_url.substring(2);
		}

		// 처리결과 set
		if (req_url.indexOf("?") > 0) {
			req_url = req_url + "&resultState=" + resultState;
		} else {
			req_url = req_url + "?resultState=" + resultState;
		}

		// 서비스코드 set
		if (req_url.indexOf("serviceCode") < 0 && svc_code != "") {
			req_url = req_url + "&serviceCode=" + svc_code;
		}

		//task, action set
		if (task == "undefined" || task == null || task == "") {
		    task = "";
		}
		if (action == "undefined" || action == null || action == "") {
		    action = "";
		}
		req_url = req_url + "&task=" + task + "&action=" + action;

		// 처리시간 SET
		req_url = req_url + "&beforeEJBCall="     + WebSquare.xml.getAttribute( result, "beforeEJBCall" );
		req_url = req_url + "&afterEJBCall="      + WebSquare.xml.getAttribute( result, "afterEJBCall"  );
		req_url = req_url + "&beforeServletCall=" + WebSquare.xml.getAttribute( result, "beforeServletCall" );
		req_url = req_url + "&afterServletCall="  + WebSquare.xml.getAttribute( result, "afterServletCall"  );
		printStackTrace("n_logging request URL[" + req_url + "]");
		n_click_logging( req_url, document.location.href );  // image서버에 있음(wlcollector.js)
	} catch (ee) {
		printStackTrace("saveWebLog Exception");
		printStackTrace( ee );
	}
}

function doXML() {
    try {
        var userCallback = "", userLanguage = "ko", keepTransactionSession = "false", useCert = "false";
        var processMsg = "", debug = "false", echoMode = "false", errorMsg = "", responseMessage = "";
        var showJStarError = "true", useSign = "false", errorURL = "", requestMessage="";
        var killName = "", formName = "", showProcessMsg = "true";
        // 2010.11.30 전자서명문 체크를 위한 signCode 추가
        var signCode = "";

        var serviceCode = arguments[0];
        if( typeof serviceCode == "undefined" ) {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }
        var sFeatures = arguments[1];
        var doc = arguments[2];
        if( typeof sFeatures != "undefined" ) {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if ( tmpArray.length == 2 ) {
                    var tmpArray0 = tmpArray[0].trim().toLowerCase();
                    var tmpArray1 = tmpArray[1].trim();
                    if ( tmpArray0 == "callback" )  {
                        userCallback = tmpArray1;
                    } else if ( tmpArray0 == "form" )   {
                        formName = tmpArray1;
                    } else if ( tmpArray0 == "language" )   {
                        userLanguage = tmpArray1;
                    } else if ( tmpArray0 == "keeptransactionsession" ) {
                        keepTransactionSession = tmpArray1;
                    } else if ( tmpArray0 == "usecert" )    {
                        useCert = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "processmsg" ) {
                        processMsg = tmpArray1;
                    } else if ( tmpArray0 == "debug" )  {
                        debug = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "echo" )   {
                        echoMode = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "error" )  {
                        errorMsg = tmpArray1;
                    } else if ( tmpArray0 == "responsemessage" )    {
                        responseMessage = tmpArray1;
                    } else if ( tmpArray0 == "requestmessage" )    {
                        requestMessage = tmpArray1;
                    } else if ( tmpArray0 == "showjstarerror" ) {
                        showJStarError = tmpArray1;
                    } else if ( tmpArray0 == "usesign" )    {
                        useSign = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "errorurl" )   {
                        errorURL = tmpArray1;
                    } else if ( tmpArray0 == "signcode" )   {
                        signCode = tmpArray1;
                    } else if ( tmpArray0 == "killname" )   {
                        killName = tmpArray1;
                    } else if (tmpArray0 == "showprocessmsg") {
                    	if (tmpArray1 == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        // responseMessage가 설정되지 않았으면 기본값을 사용한다.
        if ( responseMessage == "" ) {
            responseMessage = "R_RIB" + serviceCode;
        }

        //한전 전기요금 납부로 인한 수정. 구세군이체를 위해 D2001 추가(2008.11.28)
        if( serviceCode == 'D2041' || serviceCode == 'D2001' ){
            if ( requestMessage == "" ) {
                requestMessage = "S_RIB" + serviceCode;
            }
        } else{
            if ( requestMessage == "" ) {
            	requestMessage = "S_RIB" + serviceCode;
            }
        }

        var servletURL = "/common/hpe/jsp/callHpeCommonService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        var formObj = "";
        if (typeof doc == "undefined" && typeof formName == "string" && formName != "" ) {
            formObj = eval( formName );
            if (typeof formObj == "undefined") {
                doc = WebSquare.ModelUtil.findInstanceNode(formName);
            } else {
                var newStr = new Array("<FORMMSG>");
                if( !plugin2XML(formObj, newStr, killName) ) {
                    return;
                }
                newStr.push("</FORMMSG>");
                doc = WebSquare.xml.parse(newStr.join(""));
            }
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        if (processMsg == "" && showProcessMsg != "false") {
            processMsg = "처리중입니다.";
        }
        
        if( echoMode == "true" ) {
            WebSquare.xml.setAttribute( doc, "mode", "ECHO" );
            WebSquare.xml.setAttribute( doc, "error", errorMsg );
        }
        if( userLanguage != "ko" )  {
            WebSquare.xml.setAttribute( doc, "language", userLanguage);   // 언어
        }
        if( keepTransactionSession == "true" ) {
            WebSquare.xml.setAttribute( doc, "keepTransactionSession", keepTransactionSession);   // Transaction Session유지 여부
        }
        if ( errorURL != "" ) {
            WebSquare.xml.setAttribute( doc, "redirectURL", errorURL );
        }
        // 2010.11.30 전자서명문 체크를 위한 signCode 추가
        if ( signCode != "" ) {
            WebSquare.xml.setAttribute( doc, "signCode", signCode );
        }

        WebSquare.xml.setAttribute( doc, "serviceCode", serviceCode); // 서비스 코드
        WebSquare.xml.setAttribute( doc, "requestMessage", requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute( doc, "responseMessage", responseMessage); // 요청 전문명 세팅;

        var serviceFeatures = "callback:__doXMLCallback__; sync:false; lock:false; cursorFix: true; debug:"+debug + "; useCert:" + useCert + "; useSign:" + useSign + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback + "; showjstarerror:" + showJStarError;
        printStackTrace( "[doXML] callInitechXMLServices 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent( doc ) + "]" );

        if ( !callInitechXMLService( serviceFeatures, servletURL, doc )) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
            // 로그아웃 후 첫페이지로.
            //doLogoutWithoutCert();
        }
    } catch( e ) {
		alertError("[doXML] 호출 중 에러가 발생했습니다.", e);
        printStackTrace( e );
        return;
    }
}

function doXML2() {
    try {
        var userCallback = "", userLanguage = "ko", keepTransactionSession = "false", useCert = "false";
        var processMsg = "", debug = "false", echoMode = "false", errorMsg = "", responseMessage = "";
        var showJStarError = "true", useSign = "false", errorURL = "", requestMessage="";
        var killName = "", formName = "", showProcessMsg = "true";
        // 2010.11.30 전자서명문 체크를 위한 signCode 추가
        var signCode = "";

        var serviceCode = arguments[0];
        if( typeof serviceCode == "undefined" ) {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }
        var sFeatures = arguments[1];
        var doc = arguments[2];
        if( typeof sFeatures != "undefined" ) {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if ( tmpArray.length == 2 ) {
                    var tmpArray0 = tmpArray[0].trim().toLowerCase();
                    var tmpArray1 = tmpArray[1].trim();
                    if ( tmpArray0 == "callback" )  {
                        userCallback = tmpArray1;
                    } else if ( tmpArray0 == "form" )   {
                        formName = tmpArray1;
                    } else if ( tmpArray0 == "language" )   {
                        userLanguage = tmpArray1;
                    } else if ( tmpArray0 == "keeptransactionsession" ) {
                        keepTransactionSession = tmpArray1;
                    } else if ( tmpArray0 == "usecert" )    {
                        useCert = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "processmsg" ) {
                        processMsg = tmpArray1;
                    } else if ( tmpArray0 == "debug" )  {
                        debug = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "echo" )   {
                        echoMode = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "error" )  {
                        errorMsg = tmpArray1;
                    } else if ( tmpArray0 == "responsemessage" )    {
                        responseMessage = tmpArray1;
                    } else if ( tmpArray0 == "requestmessage" )    {
                        requestMessage = tmpArray1;
                    } else if ( tmpArray0 == "showjstarerror" ) {
                        showJStarError = tmpArray1;
                    } else if ( tmpArray0 == "usesign" )    {
                        useSign = tmpArray1.toLowerCase();
                    } else if ( tmpArray0 == "errorurl" )   {
                        errorURL = tmpArray1;
                    } else if ( tmpArray0 == "signcode" )   {
                        signCode = tmpArray1;
                    } else if ( tmpArray0 == "killname" )   {
                        killName = tmpArray1;
                    } else if (tmpArray0 == "showprocessmsg") {
                    	if (tmpArray1 == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        // responseMessage가 설정되지 않았으면 기본값을 사용한다.
        if ( responseMessage == "" ) {
            responseMessage = "R_RIB" + serviceCode;
        }

        //한전 전기요금 납부로 인한 수정. 구세군이체를 위해 D2001 추가(2008.11.28)
        if( serviceCode == 'D2041' || serviceCode == 'D2001' ){
            if ( requestMessage == "" ) {
                requestMessage = "S_RIB" + serviceCode;
            }
        } else{
            if ( requestMessage == "" ) {
            	requestMessage = "S_RIB" + serviceCode;
            }
        }

        var servletURL = "/common/hpe/jsp/callHpeCommonService2.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        var formObj = "";
        if (typeof doc == "undefined" && typeof formName == "string" && formName != "" ) {
            formObj = eval( formName );
            if (typeof formObj == "undefined") {
                doc = WebSquare.ModelUtil.findInstanceNode(formName);
            } else {
                var newStr = new Array("<FORMMSG>");
                if( !plugin2XML(formObj, newStr, killName) ) {
                    return;
                }
                newStr.push("</FORMMSG>");
                doc = WebSquare.xml.parse(newStr.join(""));
            }
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        if (processMsg == "" && showProcessMsg != "false") {
            processMsg = "처리중입니다.";
        }
        
        if( echoMode == "true" ) {
            WebSquare.xml.setAttribute( doc, "mode", "ECHO" );
            WebSquare.xml.setAttribute( doc, "error", errorMsg );
        }
        if( userLanguage != "ko" )  {
            WebSquare.xml.setAttribute( doc, "language", userLanguage);   // 언어
        }
        if( keepTransactionSession == "true" ) {
            WebSquare.xml.setAttribute( doc, "keepTransactionSession", keepTransactionSession);   // Transaction Session유지 여부
        }
        if ( errorURL != "" ) {
            WebSquare.xml.setAttribute( doc, "redirectURL", errorURL );
        }
        // 2010.11.30 전자서명문 체크를 위한 signCode 추가
        if ( signCode != "" ) {
            WebSquare.xml.setAttribute( doc, "signCode", signCode );
        }

        WebSquare.xml.setAttribute( doc, "serviceCode", serviceCode); // 서비스 코드
        WebSquare.xml.setAttribute( doc, "requestMessage", requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute( doc, "responseMessage", responseMessage); // 요청 전문명 세팅;

        var serviceFeatures = "callback:doXMLCallback; sync:false; lock:false; cursorFix: true; debug:"+debug + "; useCert:" + useCert + "; useSign:" + useSign + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback + "; showjstarerror:" + showJStarError;
        printStackTrace( "[doXML] callInitechXMLServices 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent( doc ) + "]" );

        if ( !callInitechXMLService( serviceFeatures, servletURL, doc )) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
            // 로그아웃 후 첫페이지로.
            //doLogoutWithoutCert();
        }
    } catch( e ) {
		alertError("[doXML2] 호출 중 에러가 발생했습니다.", e);
        printStackTrace( e );
        return;
    }
}

function __doXMLCallback__( result, argument, sFeatures ) {
    try {
        var srcTree = null, userCallback = "", showJStarError = "true";
        if( typeof sFeatures != "undefined" ) {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if ( tmpArray.length == 2 ) {
                    var tmpArray0 = tmpArray[0].trim().toLowerCase();
                    var tmpArray1 = tmpArray[1].trim();
                    if ( tmpArray0 == "usercallback" )  {
                        userCallback = tmpArray1;
                    } else if ( tmpArray0 == "showjstarerror" ) {
                        showJStarError = tmpArray1;
                    }
                }
            }
        }

        // jStar 에러 체크 여부 처리.
        if (showJStarError != "false") {
            if (!checkJStarError(result)) {
                return;
            }
        }
        if ( typeof userCallback != "undefined" && userCallback != "" ) {
            try {
                eval( userCallback + "( result, argument );" );
            } catch( e ) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result ;
                printStackTrace( e );
            }
        }
    } catch( e ) {
		alertError("[doXMLCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace( e );
        return;
    }
}

function doSession()
{
    try {
        var syncMode = "asynchronous", userCallback = "", debug = "false", exceptionCallback = "";
        var keepTransactionSession = "false", processMsg = "", responseMessage = "", requestMessage = "";
        var showJStarError = "true", mediaType = "application/xml", useSign = "", userLanguage = "ko", errorUrl = "";
        var echoMode = "";

        var docXml = null;
        var serviceFeatures = "";
        var servletURL = "/common/hpe/jsp/callHpeSessionService.jsp?documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        var sSessionStr = arguments[0];
        var sSessionListStr = arguments[1];
        var sFeatures = arguments[2];

        if (typeof sFeatures == "undefined") {
            alertError("인자가 부족합니다.");
            return;
        }
        if (sSessionStr == "" && sSessionListStr == "") {
            alertError("첫번째와 두번째 항목이 동시에 비어 있을 수 없습니다.");
            return;
        }
        if (sFeatures == "") {
            alertError("세번째 항목이 비어 있을 수 없습니다.");
            return;
        }

        var xmlStr = "<SESSION>";
        var arrayOfSession = sSessionStr.trim().split(";");
        var arrayOfSessionList = sSessionListStr.trim().split(";");

        xmlStr = array2XML(arrayOfSession, "getSession", xmlStr);
        if (xmlStr == -1) {
            alertError("첫 번째 항목에 잘못된 문자가 포함되어 있습니다.");
            return;
        } else if (xmlStr == -2) {
            alertError("첫 번째 항목의 형식이 잘못되었습니다.");
            return;
        }

        xmlStr = array2XML(arrayOfSessionList, "getSessionList", xmlStr);
        if (xmlStr == -1) {
            alertError("두 번째 항목에 잘못된 문자가 포함되어 있습니다.");
            return;
        } else if (xmlStr == -2) {
            alertError("두 번째 항목의 형식이 잘못되었습니다.");
            return;
        }

        xmlStr += "</SESSION>";

        docXml = WebSquare.xml.parse(xmlStr);
        if (sFeatures != "undefined" && sFeatures != null && sFeatures != "") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");

                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback") {
                        userCallback = objVal;
                    } else if (objNm == "debug")  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "exceptioncallback") {
                        exceptionCallback = objVal;
                    } else if (objNm == "keeptransactionsession") {
                        keepTransactionSession = objVal;
                    } else if (objNm == "processmsg") {
                        processMsg = objVal;
                    } else if (objNm == "responsemessage") {
                        responseMessage = objVal;
                    } else if (objNm == "requestmessage") {
                        requestMessage = objVal;
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    } else if (objNm == "mediatype") {
                        mediaType = objVal;
                    } else if (objNm == "usesign") {
                        useSign = objVal;
                    } else if (objNm == "language") {
                        userLanguage = objVal;
                    } else if (objNm == "errorurl") {
                        errorUrl = objVal;
                    } else if (objNm == "echo") {
                        echoMode = objVal.toLowerCase();
                    }
                }
            }
            serviceFeatures = "sync:" + syncMode + "; callback:__doSessionCallback__;";

            if (debug == "")  debug = "false";
            if (userLanguage == "")  userLanguage = "ko";
            if (userCallback != "") {
                serviceFeatures += "userCallback:" + userCallback + ";";
            }
            serviceFeatures += "debug:" + debug + "; exceptionCallback:" + exceptionCallback + ";";
            serviceFeatures += "keepTransactionSession:" + keepTransactionSession + ";procesMmsg:" + processMsg + ";";
            serviceFeatures += "responseMessage:" + responseMessage + ";requestMessage:" + requestMessage + ";";
            serviceFeatures += "showJstarError:" + showJStarError + ";mediaType:" + mediaType + ";useSign:" + useSign + ";";
            serviceFeatures += "language:" + userLanguage + ";";
            serviceFeatures += "echo:" + echoMode + ";";

            WebSquare.xml.setAttribute(docXml, "language", userLanguage);

            if (errorUrl != "") {
                WebSquare.xml.setAttribute(docXml, "redirectURL", errorUrl);
            }

            if (!callInitechXMLService(serviceFeatures, servletURL, docXml)) {
                printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
            }
        }
    } catch (e) {
		alertError("[doSession] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doSessionCallback__(result, argument, sFeatures)
{
    try {
        var srcTree = null;
        var serviceFeatures = "";
        var syncMode = "asynchronous", userCallback = "", debug = "false", exceptionCallback = "";
        var keepTransactionSession = "false", processMsg = "", responseMessage = "", requestMessage = "";
        var showJStarError = "true", mediaType = "application/xml", useSign = "", userLanguage = "ko", errorUrl = "";
        var echoMode = "";

        if (sFeatures != "undefined" && sFeatures != null && sFeatures != "") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");

                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback") {
                        userCallback = objVal;
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
/*
                    } else if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "debug")  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "exceptioncallback") {
                        exceptionCallback = objVal;
                    } else if (objNm == "keeptransactionsession") {
                        keepTransactionSession = objVal;
                    } else if (objNm == "processmsg") {
                        processMsg = objVal;
                    } else if (objNm == "responsemessage") {
                        responseMessage = objVal;
                    } else if (objNm == "requestmessage") {
                        requestMessage = objVal;
                    } else if (objNm == "mediatype") {
                        mediaType = objVal;
                    } else if (objNm == "usesign") {
                        useSign = objVal;
                    } else if (objNm == "language") {
                        userLanguage = objVal;
                    } else if (objNm == "errorurl") {
                        errorUrl = objVal;
                    } else if (objNm == "echo") {
                        echoMode = objVal.toLowerCase();
*/
                    }
                }
            }
        }

        // jStar 에러 체크 여부 처리.
        if (showJStarError != "false") {
            if (!checkJStarError(result)) {
                return;
            }
        }

        if (typeof userCallback != "undefined" && userCallback != "") {
            try {
                eval(userCallback + "(result, argument);");
            } catch (e) {
                alertError("doSessionCallback 호출 중 에러가 발생했습니다.", e);
                printStackTrace(e);
            }
        }
    } catch (e) {
		alertError("[doSessionCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
    }
}

function doSimple()
{
    try {
        var syncMode = "asynchronous", userCallback = "", formName = "", userLanguage = "ko", processMsg = "", debug = "false";
        var useSign = "", exceptionCallback = "", showProcessMsg = "true";
        var echoMode = "false", errorMsg = "", showJStarError = "true", errorURL = "", killName = "";
        var serviceCode = arguments[0];

        if (typeof serviceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }
        var sFeatures = arguments[1];

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true" || syncMode == "synchronous")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback" ) {
                        userCallback = objVal;
                    } else if (objNm == "form")   {
                        formName = objVal;
                    } else if (objNm == "language") {
                        userLanguage = objVal;
                    } else if (objNm == "processmsg") {
                        processMsg = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "echo") {
                        echoMode = objVal.toLowerCase();
                    } else if (objNm == "error") {
                        errorMsg = objVal;
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    } else if (objNm == "errorurl") {
                        errorURL = objVal;
                    } else if (objNm == "killname") {
                        killName = objVal;
                    } else if (objNm == "usesign") {
                        useSign = objVal;
                    } else if (objNm == "exceptioncallback") {
                        exceptionCallback = objVal;
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    }
                }
            }
        }

        var responseMessage = "R_RIB" + serviceCode;
        var requestMessage  = "S_RIB" + serviceCode;
        var servletURL = "/common/hpe/jsp/callHpeSimpleService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        var doc = arguments[2];

        if (typeof doc == "undefined" && typeof formName == "string" && formName != "") {
            doc = makeForm2Doc(formName, killName, serviceCode);
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        if (echoMode == "true") {
            WebSquare.xml.setAttribute(doc, "mode",  "ECHO");
            WebSquare.xml.setAttribute(doc, "error", errorMsg);
        }

        if (userLanguage != "ko") {
            WebSquare.xml.setAttribute(doc, "language", userLanguage);
        }

        if (errorURL != "") {
            WebSquare.xml.setAttribute(doc, "redirectURL", errorURL);
        }

        WebSquare.xml.setAttribute(doc, "serviceCode",     serviceCode);      // 서비스 코드
        WebSquare.xml.setAttribute(doc, "requestMessage",  requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage);  // 요청 전문명 세팅;

        var serviceFeatures  = "callback:__doSimpleCallback__; sync:false; debug:" + debug + "; processMsg:" + processMsg +"; form:" + formName + ";";
            serviceFeatures += "echo: " + echoMode + "; language:" + userLanguage + "; error:" + errorMsg + "; errorurl:" + errorURL + ";";
            serviceFeatures += "userCallback:" + userCallback + "; showjstarerror:" + showJStarError + "; useSign: " + useSign + ";";

        var args = WebSquare.xml.serialize(doc);
        if (useSign == 'true' || useSign == 'view' || useSign == 'nreg') {
            args = "plainXML=" + encodeURIComponent(args) + _signData;
        } else{
            args = "plainXML=" + encodeURIComponent(args);
        }
        
        if(processMsg == "" && showProcessMsg != "false"){
        	processMsg = "처리중입니다";
        }
        
        WebSquare.net.ajax({
            action      : servletURL,
            mode        : syncMode,
            mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
            method      : "post",
            requestData : args,
            type        : "text",
            processMsg  : processMsg,
            success     : function(e) {
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
                            statusObj.callBack = "__doSimpleCallback__";
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = serviceFeatures;
                            statusObj.servletURI = servletURL;
                            _callBackInitechXML(e, statusObj);
                          },
            error       : function(e) {
                            if (e.responseStatusCode == "") {
                            }
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
                            statusObj.callBack = "__doSimpleCallback__";
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = serviceFeatures;
                            statusObj.servletURI = errorURL;
                            _callBackInitechXMLError(e, statusObj);
                          }
        });
    } catch (e) {
		alertError("[doSimple] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doSimpleCallback__(result, argument, sFeatures)
{
    try {
        var srcTree = null, xsltTree = null, htmlStr = null, obj = null;
        var userCallback = "", debug = "false", showJStarError = "true";

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");

            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");

                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback") {
                        userCallback = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    }
                }
            }
        }

        // jStar 에러 체크 여부 처리.
        if (showJStarError != "false") {
            if (!checkJStarError(result)) {
                return;
            }
        }

        if (typeof userCallback != "undefined" && userCallback != "") {
            try {
                eval(userCallback + "(result, argument);");
            } catch (e) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result;
                printStackTrace(e);
            }
        }
    } catch (e) {
		alertError("[doSimpleCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

// 세션에 값이 없으면 전문처리 하고 가져오기
function doSessionXML()
{
    try {
        var syncMode = "asynchronous", userCallback = "", debug = "false", exceptionCallback = "";
        var keepTransactionSession = "false", processMsg = "", responseMessage = "", requestMessage = "";
        var showJStarError = "true", mediaType = "application/xml", useSign = "", userLanguage = "ko";
        var echoMode = "", errorMsg = "", errorUrl = "", useCert = "false", showProcessMsg = "true";

        var sSessionStr = arguments[0];
        var sSessionListStr = arguments[1];
        var sFeatures = arguments[2];
        var serviceCode = arguments[3];

        if (typeof serviceCode == "undefined") {
            alertError("인자가 부족합니다.");
            return;
        }
        if (sSessionStr == "" && sSessionListStr == "") {
            alertError("첫번째와 두번째 항목이 동시에 비어 있을 수 없습니다.");
            return;
        }
        if (sFeatures == "") {
            alertError("세번째 항목이 비어 있을 수 없습니다.");
            return;
        }
        if (serviceCode == "") {
            alertError("네번째 항목이 비어 있을 수 없습니다.");
            return;
        }

        var xmlStr = "<SESSION>";
        var arrayOfSession = sSessionStr.trim().split(";");
        var arrayOfSessionList = sSessionListStr.trim().split(";");

        xmlStr = array2XML(arrayOfSession, "getSession", xmlStr);
        if (xmlStr == -1) {
            alertError("첫 번째 항목에 잘못된 문자가 포함되어 있습니다.");
            return;
        } else if (xmlStr == -2) {
            alertError("첫 번째 항목의 형식이 잘못되었습니다.");
            return;
        }

        xmlStr = array2XML(arrayOfSessionList, "getSessionList", xmlStr);
        if (xmlStr == -1) {
            alertError("두 번째 항목에 잘못된 문자가 포함되어 있습니다.");
            return;
        } else if (xmlStr == -2) {
            alertError("두 번째 항목의 형식이 잘못되었습니다.");
            return;
        }
        xmlStr += "</SESSION>";

        printStackTrace("doSession xmlStr["+xmlStr+"]");

        var doc = WebSquare.xml.parse(xmlStr);

        var arrayOfFeatures = sFeatures.split(";");
        for (var i=0; i<arrayOfFeatures.length; i++) {
            var tmpArray = arrayOfFeatures[i].split(":");
            if (tmpArray.length == 2) {
                var objNm  = tmpArray[0].trim().toLowerCase();
                var objVal = tmpArray[1].trim();

                if (objNm == "sync") {
                    syncMode = objVal.toLowerCase();
                    if (syncMode == "true")  syncMode = "synchronous";
                    else  syncMode = "asynchronous";
                } else if (objNm == "callback") {
                    userCallback = objVal;
                } else if (objNm == "debug")  {
                    debug = objVal.toLowerCase();
                } else if (objNm == "exceptioncallback") {
                    exceptionCallback = objVal;
                } else if (objNm == "keeptransactionsession") {
                    keepTransactionSession = objVal;
                } else if (objNm == "processmsg") {
                    processMsg = objVal;
                } else if (objNm == "responsemessage") {
                    responseMessage = objVal;
                } else if (objNm == "requestmessage") {
                    requestMessage = objVal;
                } else if (objNm == "showjstarerror") {
                    showJStarError = objVal;
                } else if (objNm == "mediatype") {
                    mediaType = objVal;
                } else if (objNm == "usesign") {
                    useSign = objVal;
                } else if (objNm == "language") {
                    userLanguage = objVal;
                } else if (objNm == "error") {
                    errorMsg = objVal;
                } else if (objNm == "errorurl") {
                    errorUrl = objVal;
                } else if (objNm == "echo") {
                    echoMode = objVal.toLowerCase();
                } else if (objNm == "showprocessmsg") {
                	if (objVal == "false") showProcessMsg = "false";
                }
            }
        }

        if (responseMessage == "" ) {
            responseMessage = "R_RIB" + serviceCode;
        }

        var requestMessage = "S_RIB" + serviceCode;

        if (processMsg == "" && showProcessMsg != "false") {
            processMsg = "처리중입니다.";
        }

        if (echoMode == "true") {
            WebSquare.xml.setAttribute(doc, "mode", "ECHO");
            WebSquare.xml.setAttribute(doc, "error", errorMsg);
        }

        if (userLanguage != "ko") {
            WebSquare.xml.setAttribute(doc, "language", userLanguage);   // 언어
        }
        if (keepTransactionSession == "true") {
            WebSquare.xml.setAttribute(doc, "keepTransactionSession", keepTransactionSession);   // Transaction Session유지 여부
        }
        if (errorUrl != "") {
            WebSquare.xml.setAttribute(doc, "redirectURL", errorUrl);
        }

        WebSquare.xml.setAttribute(doc, "serviceCode",     serviceCode);      // 서비스 코드
        WebSquare.xml.setAttribute(doc, "requestMessage",  requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage);  // 요청 전문명 세팅;

        var serviceFeatures = "callback:__doSessionXMLCallback__; sync:false;";

        if (userCallback != "") {
            serviceFeatures += " userCallback:" + userCallback + ";";
        }

        if (debug == "")  debug = "false";
        if (useCert == "")  useCert = "false";

        serviceFeatures += " debug:" + debug + "; useCert:" + useCert + "; processMsg:" + processMsg + "; showjstarerror:" + showJStarError + "; useSign:" + useSign;

        var servletURL = "/common/hpe/jsp/callHpeSessionXMLService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doSessionXML] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doSessionXMLCallback__(result, argument, sFeatures)
{
    try {
        var userCallback = "", userTarget = "", debug = "false", showJStarError = "true";
        var strSelected = "", strTextSelected = "", allOption = "", allOptionText = "", chooseOption = "", chooseOptionText = "", append = "", sorted = "", textSorted = "";
        var blankText = "";

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback") {
                        userCallback = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    }
                }
            }
        }

        // jStar 에러 체크 여부 처리.
        if (showJStarError != "false") {
            if (!checkJStarError(result)) {
                return;
            }
        }

        if (typeof userCallback != "undefined" && userCallback != "") {
            try {
                eval(userCallback + "(result, argument);");
            } catch (e) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result;
                printStackTrace(e);
            }
        }
    } catch (e) {
		alertError("[doSessionXMLCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

// 인증서 없이 암호화 하여 전문처리
function doCert()
{
    try {
        var userCallback = "", formName = "", userLanguage = "ko", showProcessMsg = "true";
        var keepTransactionSession = "false", useCert = "true", processMsg = "", debug = "false", echoMode = "false";
        var responseMessage = "", showJStarError = "true", killName = "", errorUrl = "", errorMsg = "";
        var serviceCode = arguments[0];

        if (typeof serviceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }

        var sFeatures = arguments[1];
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();
                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback") {
                        userCallback = objVal;
                    } else if (objNm == "form") {
                        formName = objVal;
                    } else if (objNm == "killname") {
                        killName = objVal;
                    } else if (objNm == "debug")  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "exceptioncallback") {
                        exceptionCallback = objVal;
                    } else if (objNm == "keeptransactionsession") {
                        keepTransactionSession = objVal;
                    } else if (objNm == "processmsg") {
                        processMsg = objVal;
                    } else if (objNm == "responsemessage") {
                        responseMessage = objVal;
                    } else if (objNm == "requestmessage") {
                        requestMessage = objVal;
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    } else if (objNm == "mediatype") {
                        mediaType = objVal;
                    } else if (objNm == "usesign") {
                        useSign = objVal;
                    } else if (objNm == "language") {
                        userLanguage = objVal;
                    } else if (objNm == "error") {
                        errorMsg = objVal;
                    } else if (objNm == "errorurl") {
                        errorUrl = objVal;
                    } else if (objNm == "echo") {
                        echoMode = objVal.toLowerCase();
                    } else if (objNm == "usecert") {
                        useCert = objVal.toLowerCase();
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        if (responseMessage == "") {
            responseMessage = "R_RIB" + serviceCode;
        }
        var requestMessage = "S_RIB" + serviceCode;

        if (processMsg == "" && showProcessMsg != "false") {
			processMsg = "처리중입니다.";
		}
        
        var doc = arguments[2];
        if (typeof doc == "undefined" && typeof formName == "string" && formName != "") {
            doc = makeForm2Doc(formName, killName, serviceCode);
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        var servletURL = "/common/hpe/jsp/callHpeCertService.jsp";

        if (useCert == "true") {
            if (doc.documentElement.nodeName == 'CERTINFO_REQUEST') {
                servletURL = "/common/hpe/jsp/callHpeCertServiceReq.jsp";
            } else if (doc.documentElement.nodeName == 'VID_VERIFY') {
                servletURL = "/common/hpe/jsp/callHpeCertServiceVid.jsp";
            }
        } else if (useCert == "init") {  // 인증서 정보를 clear 하고자 할 경우 사용
            servletURL = "/common/hpe/jsp/callHpeCertServiceInitReq.jsp";
            useCert = "true";
        }
        servletURL = servletURL + "?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        if (echoMode == "true") {
            WebSquare.xml.setAttribute(doc, "mode", "ECHO");
            WebSquare.xml.setAttribute(doc, "error", errorMsg);
        }

        if (userLanguage != "ko") {
            WebSquare.xml.setAttribute(doc, "language", userLanguage);   // 언어
        }
        if (keepTransactionSession == "true") {
            WebSquare.xml.setAttribute(doc, "keepTransactionSession", keepTransactionSession);   // Transaction Session유지 여부
        }

        if (errorUrl != "") {
            WebSquare.xml.setAttribute(doc, "redirectURL", errorUrl);
        }

        WebSquare.xml.setAttribute(doc, "serviceCode",     serviceCode);      // 서비스 코드
        WebSquare.xml.setAttribute(doc, "requestMessage",  requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage);  // 요청 전문명 세팅;

        var serviceFeatures  = "callback:__doCertCallback__; sync:false; debug:" + debug + "; useCert:" + useCert + "; processMsg:" + processMsg + ";";
            serviceFeatures += "form:" + formName + "; userCallback:" + userCallback + "; showjstarerror:" + showJStarError + ";";

        printStackTrace( "[doCert] callInitechXMLServices 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent( doc ) + "]" );

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doCert] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doCertCallback__(result, argument, sFeatures)
{
    try {
        var srcTree = null;
        var userCallback = "", debug = "false", showJStarError = "true";

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");

                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback") {
                        userCallback = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    }
                }
            }
        }

        // jStar 에러 체크 여부 처리.
        if (showJStarError != "false") {
            if (!checkJStarError(result)) {
                return;
            }
        }

        if (typeof userCallback != "undefined" && userCallback != "") {
            try {
                eval(userCallback + "(result, argument);");
            } catch (e) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result;
                printStackTrace(e);
            }
        }
    } catch (e) {
		alertError("[doCertCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function doSign()
{
    try {
        var userCallback = "", formName = "", killName = "", userLanguage = "ko";
        var keepTransactionSession = "false", useCert = "false", processMsg = "", debug = "false", echoMode = "false", errorMsg = "";
        var responseMessage = "", showJStarError = "true", errorURL = "", useSign="false";
        var serviceCode = arguments[0];

        if (typeof serviceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }

        var sFeatures = arguments[1];
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "callback") {
                        userCallback = objVal;
                    } else if (objNm == "form") {
                        formName = objVal;
                    } else if (objNm == "killname") {
                        killName = objVal;
                    } else if (objNm == "language") {
                        userLanguage = objVal;
                    } else if (objNm == "keeptransactionsession") {
                        keepTransactionSession = objVal;
                    } else if (objNm == "usecert") {
                        useCert = objVal.toLowerCase();
                    } else if (objNm == "processmsg") {
                        processMsg = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "echo") {
                        echoMode = objVal.toLowerCase();
                    } else if (objNm == "error") {
                        errorMsg = objVal;
                    } else if (objNm == "responsemessage") {
                        responseMessage = objVal;
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    } else if (objNm == "errorurl") {
                        errorURL = objVal;
                    } else if (objNm == "usesign") {
                        useSign = objVal;
                    }
                }
            }
        }
        // responseMessage가 설정되지 않았으면 기본값을 사용한다.
        if (responseMessage == "") {
            responseMessage = "R_RIB" + serviceCode;
        }
        var requestMessage = "S_RIB" + serviceCode;

        var doc = arguments[2];
        if (typeof doc == "undefined" && typeof formName == "string" && formName != "") {
            doc = makeForm2Doc(formName, killName, serviceCode);
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        var servletURL = "/common/hpe/jsp/callHpeSignService.jsp";

        if (useCert == "true") {
            if (doc.documentElement.nodeName == 'CERTINFO_REQUEST') {
                servletURL = "/common/hpe/jsp/callHpeCertServiceReq.jsp";
            } else if (doc.documentElement.nodeName == 'VID_VERIFY') {
                servletURL = "/common/hpe/jsp/callHpeCertServiceVid.jsp";
            }
        } else if (useCert == "init") {  // 인증서 정보를 clear 하고자 할 경우 사용
            servletURL = "/common/hpe/jsp/callHpeCertServiceInitReq.jsp";
            useCert = "true";
        }
        
        servletURL = servletURL + "?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        if (echoMode == "true") {
            WebSquare.xml.setAttribute(doc, "mode", "ECHO");
            WebSquare.xml.setAttribute(doc, "error", errorMsg);
        }

        if (userLanguage != "ko") {
            WebSquare.xml.setAttribute(doc, "language", userLanguage);   // 언어
        }
        if (keepTransactionSession == "true") {
            WebSquare.xml.setAttribute(doc, "keepTransactionSession", keepTransactionSession);   // Transaction Session유지 여부
        }

        if (errorURL != "") {
            WebSquare.xml.setAttribute(doc, "redirectURL", errorURL);
        }

        WebSquare.xml.setAttribute(doc, "serviceCode",     serviceCode);      // 서비스 코드
        WebSquare.xml.setAttribute(doc, "requestMessage",  requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage);  // 요청 전문명 세팅;

        var serviceFeatures = "callback:__doCertCallback__; sync:false; lock:false; cursorFix: true; debug:"+debug + "; useCert:" + useCert + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback + ";showjstarerror:" + showJStarError +"; usesign:"+useSign;

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doSign] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

var doMultiXMLCallbackDoc;
function doMultiXML()
{
    try {
        var formName = "", errorURL = "", killName = "";
        var callbackServiceCode = arguments[0];

        if (typeof callbackServiceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }
        var sFeatures = arguments[1];
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "form") {
                        formName = objVal;
                    } else if (objNm == "errorurl") {
                        errorURL = objVal;
                    } else if (objNm == "killname") {
                        killName = objVal;
                    }
                }
            }
        }

        var callbackDoc = arguments[2];
        doMultiXMLCallbackDoc = callbackDoc;
        var serviceCode = 서비스코드.getValue();
        if (typeof serviceCode == 'undefined' || serviceCode == null || serviceCode.trim() == '' ) {
            alert("입출금 조회를 하시어 처리결과를 반드시 확인하신후에\n\n계속해서 서비스를 이용하시려면\n처음 부터 다시 거래하여 주시기 바랍니다.");
            return;
        }

        var doc;
        if (typeof doc == "undefined" && typeof formName == "string" && formName != "") {
            doc = makeForm2Doc(formName, killName, serviceCode);
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }


        if (!isAlphanumeric(이체비밀번호.getValue())) {
            alert("'이체비밀번호'는 숫자와 영문자만 입력해야 합니다." );
            이체비밀번호.setValue("");
            이체비밀번호.focus();
            return;
        }
        if (이체비밀번호.getValue().length < 6 || 이체비밀번호.getValue().length > 8) {
            alert( "'이체비밀번호'는 6~8자리로 입력해야 합니다." );
            이체비밀번호.setValue("");
            이체비밀번호.focus();
            return;
        }

        if (serviceCode == 'C2098') {  // 보안 카드
            if (보안카드암호11.getValue() == '') {
                alert("'보안카드암호'를 입력해 주십시오.");
                보안카드암호11.focus();
                return;
            }
            if (!isDigit(보안카드암호11.getValue())) {
                alert("'보안카드암호'는 숫자만 입력해야 합니다.");
                보안카드암호11.setValue("");
                보안카드암호11.focus();
                return;
            }

            if (보안카드암호12.getValue() == '') {
                alert("'보안카드암호'를 입력해 주십시오.");
                보안카드암호12.focus();
                return;
            }
            if (!isDigit( 보안카드암호12.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호12.getValue();
                보안카드암호12.focus();
                return;
            }

            if (보안카드암호21.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호21.focus();
                return;
            }
            if (!isDigit(보안카드암호21.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호21.setValue("");
                보안카드암호21.focus();
                return;
            }

            if (보안카드암호22.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호22.focus();
                return;
            }
            if (!isDigit( 보안카드암호22.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호22.setValue("");
                보안카드암호22.focus();
                return;
            }

            try {
                보안카드암호11.setValue(get_e2e_value(보안카드암호11.getValue(), "보안카드암호11"));
                보안카드암호12.setValue(get_e2e_value(보안카드암호12.getValue(), "보안카드암호12"));
                보안카드암호21.setValue(get_e2e_value(보안카드암호21.getValue(), "보안카드암호21"));
                보안카드암호22.setValue(get_e2e_value(보안카드암호22.getValue(), "보안카드암호22"));
                이체비밀번호.setValue  (get_e2e_value(이체비밀번호.getValue(),  "이체비밀번호"));
            } catch (ee) {
                printStackTrace(" 보안카드암호 필드 e2e처리 중 오류발생. 암호화 안함: " + ee);
                alert("키보드 암호화 과정중 오류가 발생되었습니다.\n 죄송하지만 로그아웃 후 다시 로그인 하여 사용하기 바랍니다.");
                return;
            }

            WebSquare.xml.setString(doc, "보안카드암호1", 보안카드암호11.getValue() + 보안카드암호12.getValue());
            WebSquare.xml.setString(doc, "보안카드암호2", 보안카드암호21.getValue() + 보안카드암호22.getValue());
            WebSquare.xml.setString(doc, "이체비밀번호",  이체비밀번호.getValue());
            보안카드암호11.setValue("");
            보안카드암호12.setValue("");
            보안카드암호21.setValue("");
            보안카드암호22.setValue("");
            이체비밀번호.setValue("");
        } else {    // OTP
            if (OTP카드암호.getValue().length != 6) {
                alert( "'OTP카드 비밀번호'는 숫자 6자리를 입력해 주십시오." );
                OTP카드암호.focus();
                return;
            }
            if (!isDigit(OTP카드암호.getValue())) {
                alert( "'OTP카드 비밀번호'는 숫자만 입력해야 합니다." );
                OTP카드암호.setValue("");
                OTP카드암호.focus();
                return;
            }

            try {
                OTP카드암호.setValue (get_e2e_value(OTP카드암호.getValue(),  "OTP카드암호" ));
                이체비밀번호.setValue(get_e2e_value(이체비밀번호.getValue(), "이체비밀번호"));
            } catch (ee) {
                printStackTrace(" OTP카드 필드 e2e처리 중 오류발생. 암호화 안함: " + ee);
                alert("키보드 암호화 과정중 오류가 발생되었습니다.\n 죄송하지만 로그아웃 후 다시 로그인 하여 사용하기 바랍니다.");
            }
            WebSquare.xml.setString(doc, "OTP카드암호",  OTP카드암호.getValue());
            WebSquare.xml.setString(doc, "이체비밀번호", 이체비밀번호.getValue());
            OTP카드암호.setValue("");
            이체비밀번호.setValue("");
        }

        var responseMessage = "R_RIB" + serviceCode;
        var requestMessage  = "S_RIB" + serviceCode;
        var servletURL = "/common/hpe/jsp/callHpeCommonService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        WebSquare.xml.setAttribute(doc, "serviceCode",         serviceCode);          // 서비스 코드
        WebSquare.xml.setAttribute(doc, "callbackServiceCode", callbackServiceCode);  // 서비스 코드
        WebSquare.xml.setAttribute(doc, "callbackFeatures",    sFeatures);            //
        WebSquare.xml.setAttribute(doc, "requestMessage",      requestMessage);       // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage",     responseMessage);      // 전문명 세팅;

        var serviceFeatures = "callback:__doMultiXMLCallback__; sync:false; useCert:true; useSign:false";
        
        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doMultiXML] 호출 중 에러가 발생했습니다.", e);
        printStackTrace( e );
        return;
    }
}

function __doMultiXMLCallback__(result, argument)
{
    try {
        var resultDoc   = WebSquare.xml.parse(result);
        var argumentDoc = WebSquare.xml.parse(argument);

        if (!checkJStarError(resultDoc)) {
            return;
        }

        var sFeatures   = WebSquare.xml.getAttribute(argumentDoc, "callbackFeatures");
        var serviceCode = WebSquare.xml.getAttribute(argumentDoc, "callbackServiceCode");

        try {
            if (typeof doMultiXMLCallbackDoc == 'undefined' || doMultiXMLCallbackDoc == null) {
                printStackTrace("doMultiXML - Doc 없음");
                eval("doXML( serviceCode, sFeatures );");
            } else {
                printStackTrace("doMultiXML - Doc 있음");
                eval("doXML( serviceCode, sFeatures, doMultiXMLCallbackDoc );");
            }
        } catch (e) {
            e.detail = "doXML(  serviceCode, sFeatures ); 에서 에러가 발생하였습니다. result:" + result ;
            printStackTrace( e );
        }
    } catch (e) {
		alertError("[doMultiXMLCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }

}

var doMultiXMLVectorCallbackDoc;
function doMultiXMLVector() {
    try {
        var formName = "";
        var killName = "";
        var errorURL = "";
        var callbackServiceCode = arguments[0];

        if (typeof callbackServiceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }

        var callbackDoc = arguments[2];
        if (typeof callbackDoc == "undefined") {
            alertError("document가 입력되지 않았습니다.");
            return;
        } else {
            doMultiXMLVectorCallbackDoc = callbackDoc;
        }

        var sFeatures = arguments[1];
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "form")  {
                        formName = objVal;
                    } else if (objNm == "killname")   {
                        killName = objVal;
                    } else if (objNm == "errorurl")   {
                        errorURL = objVal;
                    }
                }
            }
        }

        var doc;
        if (typeof doc == "undefined" && typeof formName == "string" && formName != "") {
            doc = makeForm2Doc(formName, killName, serviceCode);
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        var serviceCode = 서비스코드.getValue();
        if (typeof serviceCode == 'undefined' || serviceCode == null || serviceCode.trim() == '') {
            alert("입출금 조회를 하시어 처리결과를 반드시 확인하신후에\n\n계속해서 서비스를 이용하시려면\n처음 부터 다시 거래하여 주시기 바랍니다.");
            if (errorURL != null &&  errorURL != "") {
                document.location = errorURL;
            } else {
                document.location.reload();
            }
            return;
        }

        if (!isAlphanumeric(이체비밀번호.getValue())) {
            alert("'이체비밀번호'는 숫자와 영문자만 입력해야 합니다." );
            이체비밀번호.setValue("");
            이체비밀번호.focus();
            return;
        }
        if (이체비밀번호.getValue().length < 6 || 이체비밀번호.getValue().length > 8) {
            alert( "'이체비밀번호'는 6~8자리로 입력해야 합니다." );
            이체비밀번호.setValue("");
            이체비밀번호.focus();
            return;
        }

        if (serviceCode == 'C2098') {  // 보안 카드
            if (보안카드암호11.getValue() == '') {
                alert("'보안카드암호'를 입력해 주십시오.");
                보안카드암호11.focus();
                return;
            }
            if (!isDigit(보안카드암호11.getValue())) {
                alert("'보안카드암호'는 숫자만 입력해야 합니다.");
                보안카드암호11.setValue("");
                보안카드암호11.focus();
                return;
            }

            if (보안카드암호12.getValue() == '') {
                alert("'보안카드암호'를 입력해 주십시오.");
                보안카드암호12.focus();
                return;
            }
            if (!isDigit( 보안카드암호12.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호12.getValue();
                보안카드암호12.focus();
                return;
            }

            if (보안카드암호21.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호21.focus();
                return;
            }
            if (!isDigit(보안카드암호21.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호21.setValue("");
                보안카드암호21.focus();
                return;
            }

            if (보안카드암호22.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호22.focus();
                return;
            }
            if (!isDigit( 보안카드암호22.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호22.setValue("");
                보안카드암호22.focus();
                return;
            }

            try {
                보안카드암호11.setValue(get_e2e_value(보안카드암호11.getValue(), "보안카드암호11"));
                보안카드암호12.setValue(get_e2e_value(보안카드암호12.getValue(), "보안카드암호12"));
                보안카드암호21.setValue(get_e2e_value(보안카드암호21.getValue(), "보안카드암호21"));
                보안카드암호22.setValue(get_e2e_value(보안카드암호22.getValue(), "보안카드암호22"));
                이체비밀번호.setValue  (get_e2e_value(이체비밀번호.getValue(),  "이체비밀번호"   ));
            } catch (ee) {
                printStackTrace(" 보안카드암호 필드 e2e처리 중 오류발생. 암호화 안함.: " + ee);
                alert("키보드 암호화 과정중 오류가 발생되었습니다.\n 죄송하지만 로그아웃 후 다시 로그인 하여 사용하기 바랍니다.");
                return;
            }

            WebSquare.xml.setString(doc, "보안카드암호1", 보안카드암호11.getValue() + 보안카드암호12.getValue());
            WebSquare.xml.setString(doc, "보안카드암호2", 보안카드암호21.getValue() + 보안카드암호22.getValue());
            WebSquare.xml.setString(doc, "이체비밀번호",  이체비밀번호.getValue());
            보안카드암호11.setValue("");
            보안카드암호12.setValue("");
            보안카드암호21.setValue("");
            보안카드암호22.setValue("");
            이체비밀번호.setValue("");
        } else {    // OTP
            if (OTP카드암호.getValue().length != 6) {
                alert( "'OTP카드 비밀번호'는 숫자 6자리를 입력해 주십시오." );
                OTP카드암호.focus();
                return;
            }
            if (!isDigit(OTP카드암호.getValue())) {
                alert( "'OTP카드 비밀번호'는 숫자만 입력해야 합니다." );
                OTP카드암호.setValue("");
                OTP카드암호.focus();
                return;
            }

            try {
                OTP카드암호.setValue (get_e2e_value(OTP카드암호.getValue(),   "OTP카드암호"));
                이체비밀번호.setValue(get_e2e_value(이체비밀번호.getValue(),  "이체비밀번호"));
            } catch (ee) {
                printStackTrace(" OTP카드 필드 e2e처리 중 오류발생. 암호화 안함.: " + ee);
                alert("키보드 암호화 과정중 오류가 발생되었습니다.\n 죄송하지만 로그아웃 후 다시 로그인 하여 사용하기 바랍니다.");
            }

            WebSquare.xml.setString(doc, "OTP카드암호",  OTP카드암호.getValue());
            WebSquare.xml.setString(doc, "이체비밀번호", 이체비밀번호.getValue());
            OTP카드암호.setValue("");
            이체비밀번호.setValue("");
        }


        var responseMessage = "R_RIB" + serviceCode;
        var requestMessage = "S_RIB" + serviceCode;
        var servletURL = "/common/hpe/jsp/callHpeCommonService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        WebSquare.xml.setAttribute(doc, "serviceCode", serviceCode); // 서비스 코드
        WebSquare.xml.setAttribute(doc, "callbackServiceCode", callbackServiceCode); //
        WebSquare.xml.setAttribute(doc, "callbackFeatures", sFeatures);
        WebSquare.xml.setAttribute(doc, "requestMessage", requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage); // 요청 전문명 세팅;

        var serviceFeatures = "callback:__doMultiXMLVectorCallback__; sync:false; lock:false; cursorFix: true; useCert:true; useSign:false;";

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doMultiXMLVector] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doMultiXMLVectorCallback__(result, argument)
{
    try {
        var resultDoc   = WebSquare.xml.parse(result);
        var argumentDoc = WebSquare.xml.parse(argument);

        if (!checkJStarError(resultDoc)) {
            return;
        }

        var sFeatures   = WebSquare.xml.getAttribute(argumentDoc, "callbackFeatures");
        var serviceCode = WebSquare.xml.getAttribute(argumentDoc, "callbackServiceCode");

        try {
            eval("doVectorXML(serviceCode, sFeatures, doMultiXMLVectorCallbackDoc);");
        } catch (e) {
            e.detail = "doMultiXMLVectorCallback(serviceCode, sFeatures); 에서 에러가 발생하였습니다. result:" + result;
            printStackTrace(e);
        }
    } catch (e) {
		alertError("[doMultiXMLVectorCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

// Vector형태의 doc을 받아서 다중 전문 요청을 처리한다.
function doVectorXML() {
    try {
        var syncMode = "", killName = "", showProcessMsg = "true";
        var userCallback = "", formName = "", userLanguage = "ko";
        var keepTransactionSession = "false", useCert = "true", processMsg = "", debug = "false", echoMode = "false", errorMsg = "";
        var responseMessage = "", showJStarError = "true", useSign = "false", errorURL = "", delayTime = "";
        var signCode = "";

        var serviceCode = arguments[0];
        if (typeof serviceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }

        var sFeatures = arguments[1];
        var doc = arguments[2];
        if (typeof doc == "undefined") {
            alertError("document가 입력되지 않았습니다.");
            return;
        }

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback")  {
                        userCallback = objVal;
                    } else if (objNm == "form" )   {
                        formName = objVal;
                    } else if (objNm == "killname") {
                        killName = objVal;
                    } else if (objNm == "language")   {
                        userLanguage = objVal;
                    } else if (objNm == "keeptransactionsession" ) {
                        keepTransactionSession = objVal;
                    } else if (objNm == "usecert")    {
                        useCert = objVal.toLowerCase();
                    } else if (objNm == "processmsg" ) {
                        processMsg = objVal;
                    } else if (objNm == "debug" )  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "echo" )   {
                        echoMode = objVal.toLowerCase();
                    } else if (objNm == "error" )  {
                        errorMsg = objVal;
                    } else if (objNm == "responsemessage" )    {
                        responseMessage = objVal;
                    } else if (objNm == "showjstarerror" ) {
                        showJStarError = objVal;
                    } else if (objNm == "usesign" )    {
                        useSign = objVal;
                    } else if (objNm == "errorurl" )   {
                        errorURL = objVal;
                    } else if (objNm == "delaytime" )   {
                        delayTime = objVal;
                    } else if (objNm == "signcode" )   {
                        signCode = objVal;
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        // responseMessage가 설정되지 않았으면 기본값을 사용한다.
        if (responseMessage == "" ) {
            responseMessage = "R_RIB" + serviceCode;
        }

        var requestMessage = "S_RIB" + serviceCode;
        var servletURL = "/common/hpe/jsp/callHpeMultiService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        if (processMsg == "" && showProcessMsg != "false") {
            processMsg = "처리중입니다.";
        }

        // Vector처리.
        var tempVec = WebSquare.collection.toVector(doc);
        for (i=0; i<tempVec.size(); i++) {
            var tempDoc = tempVec.remove(i);
            var tempServiceCode = WebSquare.xml.getAttribute(tempDoc, "serviceCode");
            var tempRequestMessage = WebSquare.xml.getAttribute(tempDoc, "requestMessage");
            var tempResponseMessage = WebSquare.xml.getAttribute(tempDoc, "responseMessage");

            if (tempServiceCode == null || tempServiceCode == '') {
                WebSquare.xml.setAttribute(tempDoc, "serviceCode", serviceCode); // 서비스 코드
            }
            if (tempRequestMessage == null || tempRequestMessage == '') {
                WebSquare.xml.setAttribute(tempDoc, "requestMessage", requestMessage);   // 요청 전문명 세팅;
            }
            if (tempResponseMessage == null || tempResponseMessage == '') {
                WebSquare.xml.setAttribute(tempDoc, "responseMessage", responseMessage); // 요청 전문명 세팅;
            }
            if (delayTime != "") {
                WebSquare.xml.setAttribute(tempDoc, "DELAYTIME", delayTime);
            }
            tempVec.insertElementAt(tempDoc, i);
        }

        doc = tempVec.toDocument();

        if (echoMode == "true") {
            WebSquare.xml.setAttribute(doc, "mode", "ECHO");
            WebSquare.xml.setAttribute(doc, "error", errorMsg);
        }

        if (userLanguage != "ko")  {
            WebSquare.xml.setAttribute(doc, "language", userLanguage);   // 언어
        }
        if (keepTransactionSession == "true") {
            WebSquare.xml.setAttribute(doc, "keepTransactionSession", keepTransactionSession);   // Transaction Session유지 여부
        }
        if (errorURL != "") {
            WebSquare.xml.setAttribute(doc, "redirectURL", errorURL );
        }
        // 2010.11.30 전자서명문 체크를 위한 signCode 추가
        if (signCode != "") {
            WebSquare.xml.setAttribute( doc, "signCode", signCode );
        }

        WebSquare.xml.setAttribute(doc, "serviceCode", serviceCode); // 서비스 코드
        WebSquare.xml.setAttribute(doc, "requestMessage", requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage); // 요청 전문명 세팅;


        var serviceFeatures = "callback:__doVectorXMLCallback__; sync:false; lock:false; cursorFix: true; debug:"+debug + "; useCert:" + useCert + "; useSign:" + useSign +"; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback + ";showjstarerror:" + showJStarError;
        printStackTrace("[doVectorXML] callInitechXMLServices 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent(doc) + "]" );

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
            // 로그아웃 후 첫페이지로.
            // 2006.12.27일 제거
            // doLogoutWithoutCert();
        }
    } catch (e) {
		alertError("[doVectorXML] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doVectorXMLCallback__( result, argument, sFeatures ) {
    try {
        var srcTree = null, xsltTree = null, htmlStr = null, obj = null;
        var userCallback = "", debug = "false", showJStarError = "true";

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback" )  {
                        userCallback = objVal;
                    } else if (objNm == "debug" )  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "showjstarerror" ) {
                        showJStarError = objVal;
                    }
                }
            }
        }

        if (typeof userCallback != "undefined" && userCallback != "") {
            try {
                eval(userCallback + "( result, argument );");
            } catch (e) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result;
                printStackTrace(e);
            }
        }
    } catch (e) {
		alertError("[doVectorXMLCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function doTask()
{
    try {
        var userCallback = "", formName = "", userXsl = "", processMsg = "", debug = "false";
        var errorMsg = "", errorURL = "", syncMode = "false", showProcessMsg = "true";
        var sFeatures = arguments[0];
        var doc = arguments[1];
        if (typeof doc == 'undefined' || typeof doc == 'string') { // primitive String( Not XML String ) ) {
            alertError("doc는 필수 항목 입니다.");
            return;
        }

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback" )  {
                        userCallback = objVal;
                    } else if (objNm == "form" )   {
                        formName = objVal;
                    } else if (objNm == "processmsg" ) {
                        processMsg = objVal;
                    } else if (objNm == "debug" )  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "error" )  {
                        errorMsg = objVal;
                    } else if (objNm == "errorurl" )   {
                        errorURL = objVal;
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        
        if (processMsg == "" && showProcessMsg != "false") {
        	processMsg = "처리중입니다";
        }
        
        var task = WebSquare.xml.getAttribute(doc, "task");
        var action = WebSquare.xml.getAttribute(doc, "action");
        var servletURL = "/common/hpe/jsp/callHpeTaskService.jsp?task="+task+"&action="+action+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;
        var serviceFeatures = "callback:__doTaskCallback__; sync:"+syncMode+"; lock:false; cursorFix: true; debug:"+debug + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback;
        printStackTrace( "[doTask] callInitechXMLService 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent( doc ) + "]" );

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doTask] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function doTask2()
{
    try {
        var userCallback = "", formName = "", processMsg = "", debug = "false";
        var errorMsg = "", errorURL = "", syncMode = "false", showProcessMsg = "true";
        var sFeatures = arguments[0];
        var doc = arguments[1];
        if (typeof doc == 'undefined' || typeof doc == 'string') { // primitive String( Not XML String ) ) {
            alertError("doc는 필수 항목 입니다.");
            return;
        }

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback" )  {
                        userCallback = objVal;
                    } else if (objNm == "form" )   {
                        formName = objVal;
                    } else if (objNm == "processmsg" ) {
                        processMsg = objVal;
                    } else if (objNm == "debug" )  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "error" )  {
                        errorMsg = objVal;
                    } else if (objNm == "errorurl" )   {
                        errorURL = objVal;
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        
        if (processMsg == "" && showProcessMsg != "false") {
        	processMsg = "처리중입니다";
        }
        
        var task = WebSquare.xml.getAttribute(doc, "task");
        var action = WebSquare.xml.getAttribute(doc, "action");
        var servletURL = "/common/hpe/jsp/callHpeTaskService2.jsp?task="+task+"&action="+action+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;
        var serviceFeatures = "callback:__doTaskCallback__; sync:"+syncMode+"; lock:false; cursorFix: true; debug:"+debug + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback;
        printStackTrace( "[doTask] callInitechXMLService 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent( doc ) + "]" );

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
            // 로그아웃 후 첫페이지로.
            //doLogoutWithoutCert();
        }
    } catch (e) {
		alertError("[doTask2] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doTaskCallback__(result, argument, sFeatures)
{
    try {
        var syncMode = "", userCallback = "", debug = "false";
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2 ) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "usercallback")  {
                        userCallback = objVal;
                    } else if (objNm == "debug")  {
                        debug = objVal.toLowerCase();
                    }
                }
            }
        }

        if ( typeof userCallback != "undefined" && userCallback != "" ) {
            try {
                eval( userCallback + "( result, argument );" );
            } catch( e ) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result ;
                printStackTrace( e );
            }
        }
    } catch (e) {
		alertError("[doTaskCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }

    return  result;
}

function doSimpleTask()
{
    try {
        var userCallback = "", formName = "", processMsg = "", debug = "false", errorMsg = "", errorURL = "", syncMode = "false";
        var exceptionCallback = "", showProcessMsg = "true";
        var sFeatures = arguments[0];
        var doc = arguments[1];
        if (typeof doc == 'undefined' || typeof doc == 'string') { // primitive String( Not XML String ) ) {
            alertError("doc는 필수 항목 입니다.");
            return;
        }

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback") {
                        userCallback = objVal;
                    } else if (objNm == "form") {
                        formName = objVal;
                    } else if (objNm == "processmsg") {
                        processMsg = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "error") {
                        errorMsg = objVal;
                    } else if (objNm == "errorurl") {
                        errorURL = objVal;
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    } 
                }
            }
        }
        
        var	servletURL = arguments[2];
        var task = WebSquare.xml.getAttribute(doc, "task");
        var action = WebSquare.xml.getAttribute(doc, "action");
        if(typeof servletURL == "undefined" || servletURL == ""){
        	servletURL = "/common/hpe/jsp/callHpeServletService.jsp";
        }
        servletURL = servletURL + "?task="+task+"&action="+action+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        
        if (errorURL != "") {
            WebSquare.xml.setAttribute(doc, "redirectURL", errorURL);
        }

        var args = "plainXML=" + encodeURIComponent(WebSquare.xml.serialize(doc));
        
        if (processMsg == "" && showProcessMsg != "false") {
        	processMsg = "처리중입니다";
        }

        var serviceFeatures = "callback:__doSimpleTaskCallback__; sync:"+syncMode+"; lock:false; cursorFix: true; debug:"+debug + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback;
       
        WebSquare.net.ajax({
            action      : servletURL,
            mode        : syncMode,
            mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
            method      : "post",
            requestData : args,
            type        : "text",
            processMsg  : processMsg,
            success     : function(e) {
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
                            statusObj.callBack = "__doSimpleTaskCallback__";
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = serviceFeatures;
                            statusObj.servletURI = servletURL;
                            _callBackInitechXML(e, statusObj);
                          },
            error       : function(e) {
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
                            statusObj.callBack = "__doSimpleTaskCallback__";
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = serviceFeatures;
                            statusObj.servletURI = errorURL;
                            _callBackInitechXMLError(e, statusObj);
                          }
        });
    } catch (e) {
		alertError("[doSimpleTask] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doSimpleTaskCallback__(result, argument, sFeatures)
{
    try {
        var userCallback = "", debug = "false";
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback" )  {
                        userCallback = objVal;
                    } else if (objNm == "debug" )  {
                        debug = objVal.toLowerCase();
                    }
                }
            }
        }
        if ( typeof userCallback != "undefined" && userCallback != "" ) {
            try {
                eval( userCallback + "( result, argument );" );
            } catch( e ) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result;
                printStackTrace(e);
            }
        }
    } catch (e) {
		alertError("[doSimpleTaskCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }

    return  result;
}

function doSessionTask()
{
    try {
        var userCallback = "", formName = "", processMsg = "", debug = "false";
        var errorMsg = "", errorURL = "", syncMode = "false", showProcessMsg = "true";
        var sFeatures = arguments[0];
        var doc = arguments[1];
        if (typeof doc == 'undefined' || typeof doc == 'string') { // primitive String( Not XML String ) ) {
            alertError("doc는 필수 항목 입니다.");
            return;
        }

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "callback" )  {
                        userCallback = objVal;
                    } else if (objNm == "form" )   {
                        formName = objVal;
                    } else if (objNm == "processmsg" ) {
                        processMsg = objVal;
                    } else if (objNm == "debug" )  {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "error" )  {
                        errorMsg = objVal;
                    } else if (objNm == "errorurl" )   {
                        errorURL = objVal;
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        
        if (processMsg == "" && showProcessMsg != "false") {
        	processMsg = "처리중입니다";
        }
        
        var task = WebSquare.xml.getAttribute(doc, "task");
        var action = WebSquare.xml.getAttribute(doc, "action");
        var servletURL = "/common/hpe/jsp/callHpeTaskServiceSession.jsp?task="+task+"&action="+action+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;
        var serviceFeatures = "callback:__doSessionTaskCallback__; sync:"+syncMode+"; lock:false; cursorFix: true; debug:"+debug + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback;

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doSessionTask] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function __doSessionTaskCallback__(result, argument, sFeatures)
{
    try {
        var syncMode = "", userCallback = "", debug = "false";
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2 ) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "sync") {
                        syncMode = objVal.toLowerCase();
                        if (syncMode == "true")  syncMode = "synchronous";
                        else  syncMode = "asynchronous";
                    } else if (objNm == "usercallback")  {
                        userCallback = objVal;
                    } else if (objNm == "debug")  {
                        debug = objVal.toLowerCase();
                    }
                }
            }
        }

        if ( typeof userCallback != "undefined" && userCallback != "" ) {
            try {
                eval( userCallback + "( result, argument );" );
            } catch( e ) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result ;
                printStackTrace( e );
            }
        }
    } catch (e) {
		alertError("[doSessionTaskCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

// ID/PW 로그인
var doGuestMultiXMLCallbackDoc;
function doGuestMultiXML()
{
    try {
        var formName = "", killName = "";
        var errorURL = "";
        var callbackServiceCode = arguments[0];

        if (typeof callbackServiceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }

        var sFeatures = arguments[1];
        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i<arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "form") {
                        formName = objVal;
                    } else if (objNm == "killname") {
                        killName = objVal;
                    } else if (objNm == "errorurl") {
                        errorURL = objVal;
                    }
                }
            }
        }

        var serviceCode = 서비스코드.getValue();
        if (typeof serviceCode == 'undefined' || serviceCode == null || serviceCode.trim() == '') {
            alert("입출금 조회를 하시어 처리결과를 반드시 확인하신후에\n\n계속해서 서비스를 이용하시려면\n처음 부터 다시 거래하여 주시기 바랍니다.");
            return;
        }

        var callbackDoc = arguments[2];
        doGuestMultiXMLCallbackDoc = callbackDoc;

        var doc;
        if (typeof doc == "undefined" && typeof formName == "string" && formName != "") {
            doc = makeForm2Doc(formName, killName, serviceCode);
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        if (!isAlphanumeric(이체비밀번호.getValue())) {
            alert("'이체비밀번호'는 숫자와 영문자만 입력해야 합니다." );
            이체비밀번호.setValue("");
            이체비밀번호.focus();
            return;
        }
        if (이체비밀번호.getValue().length < 6 || 이체비밀번호.getValue().length > 8) {
            alert( "'이체비밀번호'는 6~8자리로 입력해야 합니다." );
            이체비밀번호.setValue("");
            이체비밀번호.focus();
            return;
        }

        if (serviceCode == 'C2098') {  // 보안 카드
            if (보안카드암호11.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호11.focus();
                return;
            }
            if (!isDigit( 보안카드암호11.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다.");
                보안카드암호11.setValue("");
                보안카드암호11.focus();
                return;
            }

            if (보안카드암호12.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호12.focus();
                return;
            }
            if (!isDigit( 보안카드암호12.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호12.setValue("");
                보안카드암호12.focus();
                return;
            }

            if (보안카드암호21.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호21.focus();
                return;
            }
            if (!isDigit( 보안카드암호21.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호21.setValue("");
                보안카드암호21.focus();
                return;
            }

            if (보안카드암호22.getValue() == '') {
                alert( "'보안카드암호'를 입력해 주십시오." );
                보안카드암호22.focus();
                return;
            }
            if (!isDigit( 보안카드암호22.getValue())) {
                alert( "'보안카드암호'는 숫자만 입력해야 합니다." );
                보안카드암호22.setValue("");
                보안카드암호22.focus();
                return;
            }
            try {
                보안카드암호11.setValue(get_e2e_value(보안카드암호11.getValue(), "보안카드암호11"));
                보안카드암호12.setValue(get_e2e_value(보안카드암호12.getValue(), "보안카드암호12"));
                보안카드암호21.setValue(get_e2e_value(보안카드암호21.getValue(), "보안카드암호21"));
                보안카드암호22.setValue(get_e2e_value(보안카드암호22.getValue(), "보안카드암호22"));
                이체비밀번호.setValue  (get_e2e_value(이체비밀번호.getValue(),  "이체비밀번호"));
            } catch (ee) {
                printStackTrace(" 보안카드암호 필드 e2e처리 중 오류발생. 암호화 안함: " + ee);
                alert("키보드 암호화 과정중 오류가 발생되었습니다.\n 죄송하지만 로그아웃 후 다시 로그인 하여 사용하기 바랍니다.");
                return;
            }

            WebSquare.xml.setString(doc, "보안카드암호1", 보안카드암호11.getValue() + 보안카드암호12.getValue());
            WebSquare.xml.setString(doc, "보안카드암호2", 보안카드암호21.getValue() + 보안카드암호22.getValue());
            WebSquare.xml.setString(doc, "이체비밀번호",  이체비밀번호.getValue() );
            보안카드암호11.setValue("");
            보안카드암호12.setValue("");
            보안카드암호21.setValue("");
            보안카드암호22.setValue("");
            이체비밀번호.setValue("");
        } else {    // OTP
            if (OTP카드암호.getValue().length != 6) {
                alert( "'OTP카드 비밀번호'는 숫자 6자리를 입력해 주십시오." );
                OTP카드암호.focus();
                return;
            }
            if (!isDigit(OTP카드암호.getValue())) {
                alert( "'OTP카드 비밀번호'는 숫자만 입력해야 합니다." );
                OTP카드암호.setValue("");
                OTP카드암호.focus();
                return;
            }

            try {
                OTP카드암호.setValue (get_e2e_value(OTP카드암호.getValue(),  "OTP카드암호" ));
                이체비밀번호.setValue(get_e2e_value(이체비밀번호.getValue(), "이체비밀번호"));
            } catch (ee) {
                printStackTrace(" OTP카드 필드 e2e처리 중 오류발생. 암호화 안함: " + ee);
                alert("키보드 암호화 과정중 오류가 발생되었습니다.\n 죄송하지만 로그아웃 후 다시 로그인 하여 사용하기 바랍니다.");
            }

            WebSquare.xml.setString(doc, "OTP카드암호",  OTP카드암호.getValue());
            WebSquare.xml.setString(doc, "이체비밀번호", 이체비밀번호.getValue());
            OTP카드암호.setValue("");
            이체비밀번호.setValue("");
        }

        var responseMessage = "R_RIB" + serviceCode;
        var requestMessage  = "S_RIB" + serviceCode;
        var servletURL = "/common/hpe/jsp/callHpeGuestCommonService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        WebSquare.xml.setAttribute(doc, "serviceCode", serviceCode);                  // 서비스 코드
        WebSquare.xml.setAttribute(doc, "callbackServiceCode", callbackServiceCode);
        WebSquare.xml.setAttribute(doc, "callbackFeatures", sFeatures);
        WebSquare.xml.setAttribute(doc, "requestMessage",  requestMessage);  // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage); // 요청 전문명 세팅;

        var serviceFeatures = "callback:__doGuestMultiXMLCallback__; sync:false; useCert:true; useSign:false";
        printStackTrace( "[doGuestMultiXML] callInitechXMLServices 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent( doc ) + "]" );

        if ( !callInitechXMLService( serviceFeatures, servletURL, doc )) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doGuestMultiXML] 호출 중 에러가 발생했습니다.", e);
        printStackTrace( e );
        return;
    }
}

function __doGuestMultiXMLCallback__(result, argument)
{
    try {
        var resultDoc   = WebSquare.xml.parse(result);
        var argumentDoc = WebSquare.xml.parse(argument);

        if (!checkJStarError(resultDoc)) {
            return;
        }

        var sFeatures   = WebSquare.xml.getAttribute(argumentDoc, "callbackFeatures");
        var serviceCode = WebSquare.xml.getAttribute(argumentDoc, "callbackServiceCode");

        try {
            if (typeof doGuestMultiXMLCallbackDoc == 'undefined' || doGuestMultiXMLCallbackDoc == null) {
                printStackTrace("doGuestMultiXML - Doc 없음");
                eval( "doGuestXML( serviceCode, sFeatures );" );
            } else {
                printStackTrace("doGuestMultiXML - Doc 있음");
                eval( "doGuestXML( serviceCode, sFeatures, doGuestMultiXMLCallbackDoc );" );
            }
        } catch (e) {
            e.detail = "doGuestXML(  serviceCode, sFeatures ); 에서 에러가 발생하였습니다. result:" + result;
            printStackTrace(e);
        }
    } catch (e) {
		alertError("[doGuestMultiXMLCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function doGuestXML()
{
    try {
        var userCallback = "", formName = "", killName = "", userLanguage = "ko", keepTransactionSession = "false", useCert = "true";
        var processMsg = "", debug = "false", echoMode = "false", errorMsg = "", responseMessage = "", requestMessage = "";
        var showJStarError = "true", useSign = "false", errorURL = "", showProcessMsg = "true";
        var serviceCode = arguments[0];

        if (typeof serviceCode == "undefined") {
            alertError("Service Code는 필수 항목 입니다.");
            return;
        }
        var sFeatures = arguments[1];
        var doc = arguments[2];

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "callback") {
                        userCallback = objVal;
                    } else if (objNm == "form")   {
                        formName = objVal;
					} else if (objNm == "killname")   {
						killName = objVal;
                    } else if (objNm == "language") {
                        userLanguage = objVal;
                    } else if (objNm == "keeptransactionsession") {
                        keepTransactionSession = objVal;
                    } else if (objNm == "usecert") {
                        useCert = objVal.toLowerCase();
                    } else if (objNm == "processmsg") {
                        processMsg = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "echo") {
                        echoMode = objVal.toLowerCase();
                    } else if (objNm == "error") {
                        errorMsg = objVal;
                    } else if (objNm == "responsemessage") {
                        responseMessage = objVal;
                    } else if (objNm == "requestmessage") {
                        requestMessage = objVal;
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    } else if (objNm == "usesign") {
                        useSign = objVal.toLowerCase();
                    } else if (objNm == "errorurl") {
                        errorURL = objVal;
                    } else if (objNm == "showprocessmsg") {
                    	if (objVal == "false") showProcessMsg = "false";
                    }
                }
            }
        }
        // responseMessage가 설정되지 않았으면 기본값을 사용한다.
        if (responseMessage == "") {
            responseMessage = "R_RIB" + serviceCode;
        }

        // 한전 전기요금 납부로 인한 수정. 구세군이체를 위해 D2001 추가(2008.11.28)
        if (serviceCode == 'D2041' || serviceCode == 'D2001') {
            if (requestMessage == "") {
                requestMessage = "S_RIB" + serviceCode;
            }
        } else {
            requestMessage = "S_RIB" + serviceCode;
        }

        var servletURL = "/common/hpe/jsp/callHpeGuestCommonService.jsp?serviceCode="+serviceCode+"&documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        if (typeof doc == "undefined" && typeof formName == "string" && formName != "") {
            doc = makeForm2Doc(formName, killName, serviceCode);
        }
        if (typeof doc == "undefined" || doc == null) {
            doc = WebSquare.ModelUtil.findInstanceNode("request/"+serviceCode);
            if (doc == null) {
                doc = WebSquare.xml.parse("<NOFORM/>");
            }
        }

        if (processMsg == "" && showProcessMsg != "false") {
            processMsg = "처리중입니다.";
        }

        if (echoMode == "true") {
            WebSquare.xml.setAttribute(doc, "mode", "ECHO");
            WebSquare.xml.setAttribute(doc, "error", errorMsg);
        }

        if (userLanguage != "ko") {
            WebSquare.xml.setAttribute(doc, "language", userLanguage);   // 언어
        }
        if (keepTransactionSession == "true") {
            WebSquare.xml.setAttribute(doc, "keepTransactionSession", keepTransactionSession);   // Transaction Session유지 여부
        }
        if (errorURL != "") {
            WebSquare.xml.setAttribute(doc, "redirectURL", errorURL);
        }

        WebSquare.xml.setAttribute(doc, "serviceCode",     serviceCode);      // 서비스 코드
        WebSquare.xml.setAttribute(doc, "requestMessage",  requestMessage);   // 요청 전문명 세팅;
        WebSquare.xml.setAttribute(doc, "responseMessage", responseMessage);  // 요청 전문명 세팅;

        var serviceFeatures = "callback:__doGuestXMLCallback__; sync:false; debug:"+debug + "; useCert:" + useCert + "; useSign:" + useSign + "; processMsg:" + processMsg +"; form:" + formName + "; userCallback:" + userCallback + "; showjstarerror:" + showJStarError;
        printStackTrace("[doGuestXML] callInitechXMLServices 호출 전 Features[" + serviceFeatures + "] servletURL[" + servletURL + "] document[" + WebSquare.xml.indent( doc ) + "]");

        if (!callInitechXMLService( serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doGuestXML] 호출 중 에러가 발생했습니다.", e);
        printStackTrace( e );
        return;
    }
}

function __doGuestXMLCallback__(result, argument, sFeatures)
{
    try {
        var userCallback = "", debug = "false", showJStarError = "true";

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback") {
                        userCallback = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    } else if (objNm == "showjstarerror") {
                        showJStarError = objVal;
                    }
                }
            }
        }

        // jStar 에러 체크 여부 처리.
        if (showJStarError != "false") {
            if (!checkJStarError(result)) {
                return;
            }
        }

        if (typeof userCallback != "undefined" && userCallback != "") {
            try {
                eval(userCallback + "( result, argument );");
            } catch (e) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result;
                printStackTrace( e );
            }
        }
    } catch (e) {
		alertError("[doGuestXMLCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace( e );
        return;
    }
}

function doCode()
{
    try {
        var formName = "", userLanguage = "ko", useCert = "true", debug = "false";
        var userCallback = "";
        var strSelected = "", strTextSelected = "", allOption = "", allOptionText = "", chooseOption = "", chooseOptionText = "", append = "", sorted = "", textSorted = "";
        var blankText = "";
        var listType = "hashtable";
        var sCodeKeyStr = arguments[0];
        var sFeatures = arguments[1];

        if (typeof sFeatures == "undefined") {
            alertError("인자가 부족합니다.");
            return;
        }
        if (sCodeKeyStr == "") {
            alertError("첫 번째 항목이 비어 있을 수 없습니다.");
            return;
        }
        if (sFeatures == "") {
            alertError("두 번째 항목이 비어 있을 수 없습니다.");
            return;
        }

        var doc = WebSquare.xml.parse("<CODE/>");
        var arrayOfCodeKey = sCodeKeyStr.trim().split(";");

        for (var i=0; i<arrayOfCodeKey.length; i++) {
            var value = arrayOfCodeKey[i].trim();
            if (value != "") {
                if (value != XMLEncoder(value)) {
                    alertError("첫 번째 항목에 잘못된 문자가 포함되어 있습니다.");
                    return;
                }
            }
        }
        WebSquare.xml.setString(doc, "codeKey", sCodeKeyStr);

        var arrayOfFeatures = sFeatures.split(";");
        for (var i=0; i<arrayOfFeatures.length; i++) {
            var tmpArray = arrayOfFeatures[i].split(":");
            if (tmpArray.length == 2) {
                var objNm  = tmpArray[0].trim().toLowerCase();
                var objVal = tmpArray[1].trim();

                if (objNm == "callback") {
                    userCallback = objVal;
                } else if (objNm == "form") {
                    formName = objVal;
                } else if (objNm == "language") {
                    userLanguage = objVal;
                } else if (objNm == "usecert") {
                    useCert = objVal.toLowerCase();
                } else if (objNm == "debug") {
                    debug = objVal.toLowerCase();
                } else if (objNm == "selected") {
                    strSelected = objVal;
                } else if (objNm == "textselected") {
                    strTextSelected = objVal;
                } else if (objNm == "alloption") {
                    allOption = tobjVal;
                } else if (objNm == "alloptiontext") {
                    allOptionText = objVal.toLowerCase();
                } else if (objNm == "chooseoption") {
                    chooseOption = objVal;
                } else if (objNm == "chooseoptiontext") {
                    chooseOptionText = objVal;
                } else if (objNm == "append") {
                    append = objVal.toLowerCase();
                } else if (objNm == "sorted") {
                    sorted = objVal.toLowerCase();
                } else if (objNm == "textsorted") {
                    textSorted = objVal.toLowerCase();
                } else if (objNm == "type") {
                    listType = objVal.toLowerCase();
                } else if (objNm == "blanktext") {
                    blankText = objVal.toLowerCase();
                }
            }
        }

        if (debug == "")  debug = "false";
        if (userLanguage == "")  userLanguage = "ko";
        if (listType == "")  listType = "hashtable";
        if (useCert == "")  useCert = "true";

        var serviceFeatures = "callback:__doCodeCallback__; sync:false;debug:" + debug + "; form:" + formName + "; useCert:" + useCert + "; userCallback:" + userCallback + ";";

        var servletURL = "/common/hpe/jsp/callHpeCodeService.jsp?documentUrl="+ __Document_Url__+"&idx=" + (new Date()).getTime() + Math.random() * 10000;

        WebSquare.xml.setAttribute(doc, "language", userLanguage);   // 언어
        WebSquare.xml.setAttribute(doc, "type", listType);           // 반환 타입.

        if (!callInitechXMLService(serviceFeatures, servletURL, doc)) {
            printStackTrace("callInitechXMLService 호출 하기 전에 에러가 발생했습니다.");
        }
    } catch (e) {
		alertError("[doCode] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }

}

function __doCodeCallback__(result, argument, sFeatures)
{
    try {
        var userCallback = "", debug = "false";
        var strSelected = "", strTextSelected = "", allOption = "", allOptionText = "", chooseOption = "", chooseOptionText = "", append = "", sorted = "", textSorted = "";
        var blankText = "";

        if (typeof sFeatures != "undefined") {
            var arrayOfFeatures = sFeatures.split(";");
            for (var i=0; i < arrayOfFeatures.length; i++) {
                var tmpArray = arrayOfFeatures[i].split(":");
                if (tmpArray.length == 2) {
                    var objNm  = tmpArray[0].trim().toLowerCase();
                    var objVal = tmpArray[1].trim();

                    if (objNm == "usercallback") {
                        userCallback = objVal;
                    } else if (objNm == "userform") {
                        userForm = objVal;
                    } else if (objNm == "debug") {
                        debug = objVal.toLowerCase();
                    }
                }
            }
        }

        if (typeof userCallback != "undefined" && userCallback != "") {
            try {
                eval(userCallback + "(result, argument);");
            } catch (e) {
                e.detail = userCallback + "( result ) 에서 에러가 발생하였습니다. result:" + result;
                printStackTrace(e);
            }
        }
    } catch (e) {
		alertError("[doCodeCallback] 호출 중 에러가 발생했습니다.", e);
        printStackTrace(e);
        return;
    }
}

function alertError(errMsg, e) {
    var msg = "처리 중 오류가 발생했습니다. 브라우저를 새로 고침 하신 뒤 다시 거래해 주시기 바랍니다.\n";
    msg += "오류가 지속되는 경우 다음 상세 메시지를 참고하시어 고객 상담 센터로 문의해 주시기 바랍니다.\n";
    msg += "\n";

    if (typeof e != "undefined") {
        errMsg += "\n" + getStackTrace(e);
    }

    msg += "상세 메시지 : " + errMsg;
    msg += "\n";
    msg += "URL            : " + location;
    alert(msg);
}

function getStackTrace( e ) {
    var str = "";
    for ( var idx in e ) {
        var tmp = idx + "              ";
        tmp = tmp.substring(0, 15);
        if (idx == "number" ) {
            str += tmp + ":" + ( e[idx] & 0xFFFF ) + "\n";  // Prints Error Code
        } else {
            str += tmp + ":" + e[idx] + "\n";
        }
    }
    return str;
}

function printStackTrace(e)
{
    if (typeof e == 'object') {
        WebSquare.logger.printLog(e.detail);
    } else {
        WebSquare.logger.printLog(e);
    }
}

// 에러전문 여부를 판단한다. 에러인 경우 에러 메시지를 표시한다.
function checkJStarError(xmlTmpDoc, callback, showMessageType) {
	var xmlDoc;

	if (typeof xmlTmpDoc == "string") {
		xmlDoc = WebSquare.xml.parse(xmlTmpDoc);
	} else {
	    xmlDoc = xmlTmpDoc;
	}

	if (xmlDoc.documentElement.nodeName == 'JSTAR_ERROR')  {
		if ( typeof showMessageType == 'undefined' || showMessageType == 1 ) {
			var baseMsg = WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG1") + '<br>';
	    	if(WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG2") != ""){
	    		baseMsg += WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG2") + '<br>';
	    	}
	    	if(WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG3") != ""){
	    		baseMsg += WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG3") + '<br>';
	    	}
	    	if(WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG4") != ""){
	    		baseMsg += WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG4") + '<br>';
	    	}
	    	if(WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG5") != ""){
	    		baseMsg += WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG5") + '<br>';
	    	}
	    	if(WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG6") != ""){
	    		baseMsg += WebSquare.xml.getString(xmlDoc, "ERR_DEFAULT_MSG6") + '<br>';
	    	}
	    	if(WebSquare.xml.getString(xmlDoc, "ERR_USER_MSG1") != ""){
	    		baseMsg += WebSquare.xml.getString(xmlDoc, "ERR_USER_MSG1") + '<br>';
	    	}
	    	if(WebSquare.xml.getString(xmlDoc, "ERR_USER_MSG2") != ""){
	    		baseMsg += WebSquare.xml.getString(xmlDoc, "ERR_USER_MSG2");
	    	}
	        var detailMsg = WebSquare.xml.getString(xmlDoc, "ERR_ADDITIONAL_MSG");
	        var redirectURL = WebSquare.xml.getAttribute(xmlDoc, "redirectURL");
	        
	        var width  = document.body.clientWidth;
	        var height = document.body.clientHeight;
	
			var errorUrl = errorUrl = "/common/hpe/message/warningMsg.xml";
			var url = top.document.location.href;
			if (opener) {
				url = opener.top.document.location.href;
			} else if (parent) {
				url = parent.top.document.location.href;
			}
			var sFeatures = "width:530; height:350;";
			if (url.indexOf(".shinhan.com/en/") > 0 || url.indexOf(".shinhan.com/jpn/") > 0 || url.indexOf(".shinhan.com/cn/") > 0) {
				sFeatures = sFeatures + "title:An error ocurred.";
			} else {
				sFeatures = sFeatures + "title:처리 중 오류가 발생 하였습니다.";
			}
	        
	        var doc = WebSquare.xml.parse("<WARNING/>");
	        WebSquare.xml.setString(doc, "msg", baseMsg);
	        WebSquare.xml.setString(doc, "detail", detailMsg);
	        WebSquare.xml.setString(doc, "redirectURL", redirectURL);
	        openFloatPopup(errorUrl, sFeatures, doc);
		}
		return false;
	} else {
		return  true;
	}
}

function viewWarningMsg(errorUrl, features, xmlTmpDoc) {
    var url = errorUrl;
    var sFeatures = features;
    var xmlDoc;
    var title = "처리 중 오류가 발생하였습니다.";
    
    printStackTrace("WarningMsg");
    
    if (typeof sFeatures == "undefined" || sFeatures == null || sFeatures == "") {
    	//sFeatures = "width:530; height:260; title:" + title;
    	//sFeatures = "width:530; height:380; title:" + title;
    	//sFeatures = "width:530; height:290; title:" + title;
    	sFeatures = "width:530; height:350; title:" + title;
    }
    if (typeof url == "undefined" || url == null || url == "") {
        alert('에러페이지가 없습니다.');
        return;
    }

	if (typeof xmlTmpDoc == "undefined" || xmlTmpDoc == null) {
        alert('document가 없습니다.');
        return;
	} else if (typeof xmlTmpDoc == "string") {
		xmlDoc = WebSquare.xml.parse(xmlTmpDoc);
	} else {
	    xmlDoc = xmlTmpDoc;
	}
	
    openFloatPopup(url, sFeatures, xmlDoc);
}

function plugin2XML(formObj, newStr, killName) {
    try {
        if( typeof formObj == 'undefined' || formObj == null ) {
            alertError("이름이 [" + formName + "]인 form객제가 존재하지 않습니다.");
            return;
        }
        makePluginXML(newStr, formObj, killName);
    } catch( e2 ) {
        printStackTrace( e2 );
    }
    return newStr;
}

function makePluginXML(str, divObj, killName) {
    var validationSeparator = ":";
    try {
        var childObj = divObj.getChildren();
		var ret = true;

        for (var i=0; i < childObj.length; i++) {
            var obj = childObj[i];
            var pluginName = obj.getPluginName().toLowerCase();

			if (pluginName === "tabcontainer" || pluginName === "switch" || pluginName === "repeat" ||
			    pluginName === "group") {
                ret = makePluginXML(str, obj, killName);
                if (!ret)  break;
			} else if (pluginName === "grid" || pluginName === "textbox" || pluginName == "output" ||
				       pluginName == "body" || pluginName === "wframe") {  // Skip: grid, textbox, output
			    ;
            } else {
                var idAttr              = obj.id;
                var idAttr2             = obj.id;
                var valueAttr           = "";

				if (killName != "undefined" && killName != null && killName.trim().length > 0) {
                    var idAttrArray = idAttr.split(killName);
                    if (idAttrArray.length > 1) idAttr  = idAttrArray[1];
                }

                var makeXML = obj.getUserData("makeXML");
                var validation = obj.getUserData("validation");

                if (typeof validation != 'undefined') {
                    var arrayOfFeatures = validation.split( validationSeparator );
                    var functionStr = "VALIDATION_";
                    for (var j=0; j < arrayOfFeatures.length; j++) {
                        if( j == 0 ) {
                            functionStr = functionStr + arrayOfFeatures[j] + "('" + idAttr + "'";
                        } else {
                            functionStr = functionStr + ",'" + arrayOfFeatures[j] + "'";
                        }
                    }
                    functionStr = functionStr + ")";
                    ret = true;

                    try {
                        ret = eval( functionStr );
                    } catch( e1 ) {
                        alertError("입력값 검증 프로세스에서 '" + functionStr + "' 를 실행하는데 에러가 발생했습니다.");
                        printStackTrace("입력값 검증 프로세스에서 '" + functionStr + "' 를 실행하는데 에러가 발생했습니다.");
                        printStackTrace( e1 );
                    }
                    if( !ret ) {
                        return false;
                    }
                }
                if (typeof makeXML === 'undefined' || makeXML !== "false") {
                    valueAttr = obj.getValue();
                    str.push("<"+idAttr+" value='"+WebSquare.xml.encode(valueAttr)+"'/>");
                }
            }
        }
    } catch( e2 ) {
        printStackTrace( e2 );
    }
    return  ret;
}

function getConfirm(key, name)
{
    var i;
    var objName = _plugAllName[key];

    if (objName == "undefined") {
        return  false;
    }

    for (i=0; i<objName.length; i++) {
        var objVal = objName[i];
        if (objVal == "undefined")  return  false;
        return  objVal[name];
    }

    return  false;
}

function validateForm(formName)
{
    try {
        var formObj = null;
        var validationSeparator = ":";
        var ret = true;

        if (typeof formName == 'object') {
            formObj = formName;
        } else if (typeof formName == 'string') {
            formObj = eval(formName);
        } else {
            alertError('group이나 div 명을 입력해야 합니다.');
            return  false;
        }
        if (typeof formObj == 'undefined' || formObj == null) {
            alertError("이름이 [" + formName + "]인 객제가 존재하지 않습니다.");
            return  false;
        }

        var childObj = formObj.getChildren();
        for (var i=0; i<childObj.length; i++) {
            var obj = childObj[i];
            var pluginName = obj.getPluginName().toLowerCase();

            if (pluginName == "repeat" || pluginName == "group") {
                ret = validateForm(obj);
		        if (!ret)  break;
            } else if (getConfirm(pluginName, "valid")) {  // valid check 콤포넌트
                var idAttr = obj.id;

                var validation = obj.getUserData("validation");

                if (typeof validation != 'undefined') {
                    var arrayOfFeatures = validation.split(validationSeparator);
                    var functionStr = "VALIDATION_";

                    for (var j=0; j<arrayOfFeatures.length; j++) {
                        if (j == 0) {
                            functionStr += arrayOfFeatures[j] + "('" + idAttr + "'";
                        } else {
                            functionStr += ",'" + arrayOfFeatures[j] + "'";
                        }
                    }
                    functionStr += ")";
                    ret = true;
                    try {
                        ret = eval(functionStr);
                    } catch (e1) {
                        alertError("입력값 검증 프로세스에서 '" + functionStr + "' 를 실행하는데 에러가 발생했습니다.");
                        printStackTrace("입력값 검증 프로세스에서 '" + functionStr + "' 를 실행하는데 에러가 발생했습니다.");
                        printStackTrace(e1);
                    }
                    if (!ret) {
                        return false;
                    }
                }
            }
        }
    } catch (e2) {
        printStackTrace(e2);
    }

    return  ret;
}

function VALIDATION_DEFAULT(id, displayName)
{
    var e = eval(id);
    var value = e.getValue();

    if (typeof displayName == 'undefined' || displayName == null || displayName == '') {
        displayName = e.id;
    }

    var str = '';
    var type = e.getPluginName().toLowerCase();

    if ((type == 'input' || type == "inputcalendar" || type == "secret" || type == "textarea") && (value == null || value == "")) {
        if (_isFinalConsonant( displayName )) {
            str = "'" + displayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    } else if ((type == "multiselect" || type == "autofinder" || type == "selectbox" ||
                type == "radio" || type == "checkbox") && (value == null || value == "")) {
        if (_isFinalConsonant( displayName )) {
            str = "'" + displayName + "'을 선택하십시오.";
        } else {
            str = "'" + displayName + "'를 선택하십시오.";
        }
        alert( str );
        e.focus();
        return false;
    }
    return true;
}

// 숫자 입력 Check
function VALIDATION_HANCHECK( id, displayName ) {
    var e = eval(id);
    var str = "";
    var value = e.getValue();
    if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
        displayName = e.name;
    }
    if( value == "" ) return true;

    if( value.length != getByteHanLen(value) ) {
        str = "'" + displayName + "' 에는 한글없이 입력하셔야 합니다.";
        alert( str );
        e.focus();
        return false;
    }

    return true;
}

function getByteHanLen(str){
    return(str.length+(escape(str)+"%u").match(/%u/g).length-1);
}

// 숫자 입력 Check
function VALIDATION_DIGIT( id, displayName, min, max ) {
    var e = eval(id);
    var str = "";
    if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
        displayName = e.id;
    }

    var value = e.getValue();
    if( !isDigit( value ) ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'은 숫자만 입력해야 합니다.";
        } else {
            str = "'" + displayName + "'는 숫자만 입력해야 합니다.";
        }
        alert( str );
        e.focus();
        return false;
    } else if( value == null || value == '' ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    }
    if( typeof min != 'undefined' && min != '' ) {
        if( typeof max != 'undefined' && max != '' ) {
            if( min == max  ) {
                if( value.length != min ) {
                    if( _isFinalConsonant( displayName ) ) {
                        str = "'" + displayName + "'은 " + min + "자리를 입력해 주십시오.";
                    } else {
                        str = "'" + displayName + "'는 " + min + "자리를 입력해 주십시오.";
                    }
                    alert( str );
                    e.focus();
                    return false;
                }
            }
            else{
                if( value.length < min || value.length > max ) {
                    if( _isFinalConsonant( displayName ) ) {
                        str = "'" + displayName + "'은 " + min + "에서 " + max +"자리를 입력해 주십시오.";
                    } else {
                        str = "'" + displayName + "'는 " + min + "에서 " + max +"자리를 입력해 주십시오.";
                    }
                    alert( str );
                    e.focus();
                    return false;
                }
            }
        } else {
            if( value.length < min ) {
                if( _isFinalConsonant( displayName ) ) {
                    str = "'" + displayName + "'은 " + min + "자리 이상 입력해 주십시오.";
                } else {
                    str = "'" + displayName + "'는 " + min + "자리 이상 입력해 주십시오.";
                }
                alert( str );
                e.focus();
                return false;
            }
        }
    }
    return true;
}

// 금액만 포함되어있는지 Check
function VALIDATION_MONEY( id, displayName ) {
    var e = eval(id);
    var str = "";
    var value = e.getValue();
    if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
        displayName = e.id;
    }
    if( !isMoney( value ) ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'은 숫자만 입력해야 합니다.";
        } else {
            str = "'" + displayName + "'는 숫자만 입력해야 합니다.";
        }
        alert( str );
        e.focus();
        return false;
    } else if( value == null || value == '' ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    }
    return true;
}

// 외환만 포함되어있는지 Check
function VALIDATION_FOREIGN_MONEY( id, displayName ) {
    var e = eval(id);
    var str = "";
    var value = e.getValue();
    if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
        displayName = e.id;
    }
    if( !isForeignMoney( value ) ) {
        if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
            displayName = e.name;
        }
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'은 숫자만 입력해야 합니다.";
        } else {
            str = "'" + displayName + "'는 숫자만 입력해야 합니다.";
        }
        alert( str );
        e.focus();
        return false;
    } else if( value == null || value == '' ) {
        if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
            displayName = e.name;
        }
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    }
    return true;
}

// 입금 계좌 Check
function VALIDATION_ACCOUNT_IN( id, displayName ) {
    var e = eval(id);
    var str = "";
    var value = e.getValue().replaceAll("-", "");
    if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
        displayName = e.id;
    }
    if( !isAlphanumeric( value ) ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'은 숫자와 영문자만 입력해야 합니다.";
        } else {
            str = "'" + displayName + "'는 숫자와 영문자만 입력해야 합니다.";
        }
        alert( str );
        e.focus();
        return false;
    } else if( value.length < 6  || value.length > 14 ) {
    if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'을 정확하게 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 정확하게 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    } else if( value == null || value == '' ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    }
    return true;
}

// 출금 계좌 Check
function VALIDATION_ACCOUNT_OUT( id, displayName ) {
    var e = eval(id);
    var str = "";
    var value = e.getValue();
    if( typeof displayName == 'undefined' || displayName == null || displayName == '' ) {
        displayName = e.id;
    }
    if( !isDigit( value ) ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'은 숫자만 입력해야 합니다.";
        } else {
            str = "'" + displayName + "'는 숫자만 입력해야 합니다.";
        }
        alert( str );
        e.focus();
        return false;
    } else if( value.length != 11  && value.length != 12 ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'을 정확하게 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 정확하게 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    } else if( value == null || value == '' ) {
        if( _isFinalConsonant( displayName ) ) {
            str = "'" + displayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + displayName + "'를 입력해 주십시오.";
        }
        alert( str );
        e.focus();
        return false;
    }
    return true;
}

// 날짜  Check
function VALIDATION_DATEDIFF( id, startDisplayName, end,endDisplayName, max ) {
    var startObj = eval(id);
    var endObj = eval(end);
    var re = /[/]/g;
	var day1 = startObj.getValue().replaceAll(".", "");
	var day2 = endObj.getValue().replaceAll(".", "");
    var str = "";

	day1 = day1.replaceAll("-", "");
	day2 = day2.replaceAll("-", "");
    if( typeof startDisplayName == 'undefined' || startDisplayName == null || startDisplayName == '' ) {
        startDisplayName = startObj.id;
    }
    if( typeof endDisplayName == 'undefined' || endDisplayName == null || endDisplayName == '' ) {
        endDisplayName = endObj.id;
    }

    if( day1.length != 8 ) {
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'은 yyyyMMdd형식이어야 합니다." + day1 ;
        } else {
            str = "'" + startDisplayName + "'는 yyyyMMdd형식이어야 합니다." + day1 ;
        }
        alert( str );
        startObj.focus();
        return false;
    }
    if( isNaN( day1 ) ) {
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'은 숫자형식이어야 합니다." + day1 ;
        } else {
            str = "'" + startDisplayName + "'는 숫자형식이어야 합니다." + day1 ;
        }
        alert( str );
        startObj.focus();
        return false;
    }
    if( day2.length != 8 ) {
        if( _isFinalConsonant( endDisplayName ) ) {
            str = "'" + endDisplayName + "'은 yyyyMMdd형식이어야 합니다." + day2 ;
        } else {
            str = "'" + endDisplayName + "'는 yyyyMMdd형식이어야 합니다." + day2 ;
        }
        alert( str );
        endObj.focus();
        return false;
    }
    if( isNaN( day2 ) ) {
        if( _isFinalConsonant( endDisplayName ) ) {
            str = "'" + endDisplayName + "'은 숫자형식이어야 합니다." + day2 ;
        } else {
            str = "'" + endDisplayName + "'는 숫자형식이어야 합니다." + day2 ;
        }
        alert( str );
        endObj.focus();
        return false;
    }

    var y1 = parseInt( day1.substring( 0, 4 ), 10);
    var m1 = parseInt( day1.substring( 4, 6 ), 10);
    var d1 = parseInt( day1.substring( 6, 8 ), 10);

    var y2 = parseInt( day2.substring( 0, 4 ), 10);
    var m2 = parseInt( day2.substring( 4, 6 ), 10);
    var d2 = parseInt( day2.substring( 6, 8 ), 10);

    if( y1 > 2100 || y1 < 1900 ) {
        alert( "연도는 1901부터 2099사이 값이어야 합니다." + y1 );
        startObj.focus();
        return false;
    }
    if( m1 > 12 || m1 < 1 ) {
        alert( "월은 1부터 12사이 값이어야 합니다." + m1 );
        startObj.focus();
        return false;
    }

    // 날짜 확인
    var total_days;

    if(m1 == 1) total_days = 31;
    else if(m1 == 2) {
        if(((y1 % 4 == 0) && (y1 % 100 != 0)) || (y1 % 400 == 0))
             total_days = 29;
        else total_days = 28;
    }
    else if(m1 == 3) total_days = 31;
    else if(m1 == 4) total_days = 30;
    else if(m1 == 5) total_days = 31;
    else if(m1 == 6) total_days = 30;
    else if(m1 == 7) total_days = 31;
    else if(m1 == 8) total_days = 31;
    else if(m1 == 9) total_days = 30;
    else if(m1 == 10) total_days = 31;
    else if(m1 == 11) total_days = 30;
    else if(m1 == 12) total_days = 31;

    if( d1 > total_days || d1 < 1 ) {
        alert( m1 + "월의 일자는 1부터 " + total_days + "사이 값이어야 합니다.\n입력값 " + d1  + "일");
        startObj.focus();
        return false;
    }

    if( y2 > 2100 || y2 < 1900 ) {
        alert( "연도는 1901부터 2099사이 값이어야 합니다." + y2 );
        endObj.focus();
        return false;
    }
    if( m2 > 12 || m2 < 1 ) {
        alert( "월은 1부터 12사이 값이어야 합니다." + m2 );
        endObj.focus();
        return false;
    }

    // 날짜 확인

    if(m2 == 1) total_days = 31;
    else if(m2 == 2) {
        if(((y2 % 4 == 0) && (y2 % 100 != 0)) || (y2 % 400 == 0))
             total_days = 29;
        else total_days = 28;
    }
    else if(m2 == 3) total_days = 31;
    else if(m2 == 4) total_days = 30;
    else if(m2 == 5) total_days = 31;
    else if(m2 == 6) total_days = 30;
    else if(m2 == 7) total_days = 31;
    else if(m2 == 8) total_days = 31;
    else if(m2 == 9) total_days = 30;
    else if(m2 == 10) total_days = 31;
    else if(m2 == 11) total_days = 30;
    else if(m2 == 12) total_days = 31;

    if( d2 > total_days || d2 < 1 ) {
        alert( m2 + "월의 일자는 1부터 " + total_days + "사이 값이어야 합니다.\n입력값 " + d2  + "일");
        endObj.focus();
        return false;
    }
    if( d2 > 31 || d2 < 1 ) {
        alert( "일은 1부터 31사이 값이어야 합니다." + d2 );
        endObj.focus();
        return false;
    }

    var diff = WebSquare.date.dateDiff(day1, day2);

    if( isNaN( diff ) ) {
        str = "숫자형식을 입력해 주십시오.";
        alert( str );
        startObj.focus();
        return false;
    } else if( diff >= max ) {
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'와 ";
        } else {
            str = "'" + startDisplayName + "'과 ";
        }
        if( _isFinalConsonant( endDisplayName ) ) {
            str += "'" + endDisplayName + "'은 '"+ max +"'일 이내로 입력해 주십시오.";
        } else {
            str += "'" + endDisplayName + "'는 '"+ max +"'일 이내로 입력해 주십시오.";
        }
        alert( str );
        startObj.focus();
        return false;
    } else if( diff < 0 ) {
        str = "'" + endDisplayName + "'이 '" + startDisplayName + "'보다 빠를 수 없습니다.";
        alert( str );
        startObj.focus();
        return false;
    } else if( day1 == null || day1 == '' ) {
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + startDisplayName + "'를 입력해 주십시오.";
        }
        alert( str );
        startObj.focus();
        return false;
    } else if( day2 == null || day2 == '' ) {
        if( _isFinalConsonant( endDisplayName ) ) {
            str = "'" + endDisplayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + endDisplayName + "'를 입력해 주십시오.";
        }
        alert( str );
        endObj.focus();
        return false;
    }
    return true;
}

// 날짜  Check
function VALIDATION_DATE( id, startDisplayName ) {
    var startObj = eval(id);
    var re = /[/]/g;
	var day1 = startObj.getValue().replaceAll(".", "");
    var str = "";

	day1 = day1.replaceAll("-", "");
    if( typeof startDisplayName == 'undefined' || startDisplayName == null || startDisplayName == '' ) {
        startDisplayName = startObj.id;
    }

    if( day1.length != 8 ) {
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'은 yyyyMMdd형식이어야 합니다." + day1 ;
        } else {
            str = "'" + startDisplayName + "'는 yyyyMMdd형식이어야 합니다." + day1 ;
        }
        alert( str );
        startObj.focus();
        return false;
    }
    if( isNaN( day1 ) ) {
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'은 숫자형식이어야 합니다." + day1 ;
        } else {
            str = "'" + startDisplayName + "'는 숫자형식이어야 합니다." + day1 ;
        }
        alert( str );
        startObj.focus();
        return false;
    }
    var y1 = parseInt( day1.substring( 0, 4 ), 10);
    var m1 = parseInt( day1.substring( 4, 6 ), 10);
    var d1 = parseInt( day1.substring( 6, 8 ), 10);

    if( y1 > 2100 || y1 < 1900 ) {
        alert( "연도는 1901부터 2099사이 값이어야 합니다." + y1 );
        startObj.focus();
        return false;
    }
    if( m1 > 12 || m1 < 1 ) {
        alert( "월은 1부터 12사이 값이어야 합니다." + m1 );
        startObj.focus();
        return false;
    }

    // 날짜 확인
    var total_days;

    if(m1 == 1) total_days = 31;
    else if(m1 == 2) {
        if(((y1 % 4 == 0) && (y1 % 100 != 0)) || (y1 % 400 == 0))
             total_days = 29;
        else total_days = 28;
    }
    else if(m1 == 3) total_days = 31;
    else if(m1 == 4) total_days = 30;
    else if(m1 == 5) total_days = 31;
    else if(m1 == 6) total_days = 30;
    else if(m1 == 7) total_days = 31;
    else if(m1 == 8) total_days = 31;
    else if(m1 == 9) total_days = 30;
    else if(m1 == 10) total_days = 31;
    else if(m1 == 11) total_days = 30;
    else if(m1 == 12) total_days = 31;

    if( d1 > total_days || d1 < 1 ) {
        alert( m1 + "월의 일자는 1부터 " + total_days + "사이 값이어야 합니다.\n입력값 " + d1  + "일");
        startObj.focus();
        return false;
    }

    if( day1 == null || day1 == '' ) {
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'을 입력해 주십시오.";
        } else {
            str = "'" + startDisplayName + "'를 입력해 주십시오.";
        }
        alert( str );
        startObj.focus();
        return false;
    }
    return true;
}

// 전화번호 Check
function VALIDATION_TELEPHONE( id, startDisplayName ) {
    var e = eval(id);
    var str = "";

    if( typeof startDisplayName == 'undefined' || startDisplayName == null || startDisplayName == '' ) {
        startDisplayName = e.id;
    }

    if( ! isTelNumber( e.getValue() ) ){
        if( _isFinalConsonant( startDisplayName ) ) {
            str += "'" + startDisplayName + "'은 숫자와 - 만 입력 가능합니다.";
        } else {
            str += "'" + startDisplayName + "'는 숫자와 - 만 입력 가능합니다." ;
        }
        alert( str );
        e.focus();
        return false;
    }
    return true;
}
// 시간 Check
function VALIDATION_TIME( id, startDisplayName ) {
    var e = eval(id);
    var str = "";

    if( typeof startDisplayName == 'undefined' || startDisplayName == null || startDisplayName == '' ) {
        startDisplayName = e.id;
    }
    var value = e.getValue();

    if( ! isDigit( value ) ){
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'은 숫자만 입력 가능합니다.";
        } else {
            str = "'" + startDisplayName + "'는 숫자만 입력 가능합니다." ;
        }
        alert( str );
        e.focus();
        return false;
    }
    if( value.length != 4 ){
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'은 4자리를 입력하셔야 합니다.";
        } else {
            str = "'" + startDisplayName + "'는 4자리를 입력하셔야 합니다.";
        }
        alert( str );
        e.focus();
        return false;
    }
    var hh = parseInt( e.value, 10 ) / 100;
    var mm = parseInt( e.value, 10 ) % 100;

    if( hh < 0 || hh > 23  || mm < 0 || mm > 59 ){
        if( _isFinalConsonant( startDisplayName ) ) {
            str = "'" + startDisplayName + "'는  0000에서 2359까지 입력 하실 수 있습니다.";
        } else {
            str = "'" + startDisplayName + "'는  0000에서 2359까지 입력 하실 수 있습니다.";
        }
        alert( str );
        e.focus();
        return false;
    }

    return true;
}
//숫자가 포함되어있는지 Check
function isDigit( str ){
    for(var i=0; i < str.length; i++) {
        var ch= str.charAt(i);
        if( ch < "0" || ch > "9" ) {
             return false;
        }
    }
    return true;
}

// 숫자, 쉼표(,), 마침표(.)가 포함되어있는지 Check
function isForeignMoney( str ){
    for(var i=0; i < str.length; i++) {
        var ch= str.charAt(i);
        if( ( ch < "0" || ch > "9" ) && ch != ',' && ch != '.') {
             return false;
        }
    }
    return true;
}

// 숫자 및 쉼표(,)가 포함되어있는지 Check
function isMoney( str ){
    for(var i=0; i < str.length; i++) {
        var ch= str.charAt(i);
        if( ( ch < "0" || ch > "9" ) && ch != ',' ) {
             return false;
        }
    }
    return true;
}

// 알파벳만 포함되어 있는지 Check
function isAlphabet( str ){
    for(var i=0; i < str.length; i++) {
        var ch= str.charAt(i);
        if( ( ch < "a" || ch > "z" ) && ( ch < "A" || ch > "Z" ) ) {
            return false;
        }
    }
    return true;
}

// 알파벳과 숫자만 포함되어 있는지 Check
function isAlphanumeric( str ){
    for(var i=0; i < str.length; i++) {
        var ch= str.charAt(i);
        if( ( ch < "0" || ch > "9" ) && ( ch < "a" || ch > "z" ) && ( ch < "A" || ch > "Z" ) ) {
             return false;
        }
    }
    return true;
}
//  전화번호 Check 숫자 , '-', '(', ')', ' '만 가능 포함되어 있는지 Check
function isTelNumber( str ){
    for(var i=0; i < str.length; i++) {
        var ch= str.charAt(i);
        if( ( ch < "0" || ch > "9" ) && ( ch !='-') && ( ch != '(') && ( ch != ')' ) && ( ch != ' ' ) ) {
             return false;
        }
    }
    return true;
}

function array2XML(arrList, sName, xmlStr)
{
    for (var i=0; i<arrList.length; i++) {
        var value = arrList[i].trim();
        if (value != "") {
            if (value != XMLEncoder(value)) {
                return  -1;
            }
            var key = "";
            var tmpArray = value.split(":");
            if (tmpArray.length == 1) {
                key = value;
            } else if (tmpArray.length == 2)  {
                key = tmpArray[1].trim();
            } else {
                return  -2;
            }
            xmlStr += "<"+key+" " + sName + "='"+value+"'/>";
        }
    }

    return  xmlStr;
}

// form -> document
function makeForm2Doc(formName, killName, serviceCode)
{
    var xmlDoc;
    var formObj = "";

    formObj = eval(formName);
    if (typeof formObj == "undefined") {
        xmlDoc = WebSquare.ModelUtil.findInstanceNode(formName);
    } else {
        var newStr = new Array("<FORMMSG>");
        if (!plugin2XML(formObj, newStr, killName)) {
            return  null;
        }
        newStr.push("</FORMMSG>");
        xmlDoc = WebSquare.xml.parse(newStr.join(""));
    }

    return  xmlDoc;
}

/**
 * 종성이 존재하면 true 그 이외 (영문, 한글, 초성+중성)은 false
 */
function _isFinalConsonant(str) {
    var code = str.charCodeAt(str.length - 1);
    if (code < 44032 || code > 55197) {
        return false;
    }
    if ( (code - 16)%28 == 0 ) {
        return false;
    }
    return true;
}

function getCalDisFormat(pObj){
    try {
        var pObjValue   = "";
        var gbnChar     = "";
        var pObjFormat  = pObj.getDisplayFormat().toLowerCase();

        var re = /[a-z]/g;
        var charChange = pObjFormat.replace( re, "^^");
        var gbnCharArr = charChange.split("^^");

        for(var i=0; i<gbnCharArr.length; i++){
            if(gbnCharArr[i].length > 0){
                gbnChar = gbnCharArr[i];
                break;
            }
        }

        pObjValue = pObj.getValue();

        if(trim(pObjValue).length == 0){
            return pObj.getValue();
        }

        var displayFormat = pObjFormat.split(gbnChar).join("");
        var year    = pObjValue.substring(0,4);;
        var month   = pObjValue.substring(4,6);
        var day     = pObjValue.substring(6,8);

        var result  = "";

        if(displayFormat == "yyyymmdd"){

            return year + gbnChar + month + gbnChar + day;

        }else if(displayFormat == "yyyyddmm"){

            return year + gbnChar + day + gbnChar + month;

        }else if(displayFormat == "mmddyyyy"){

            return month + gbnChar + day + gbnChar + year;

        }else if(displayFormat == "mmyyyydd"){

            return month + gbnChar + year + gbnChar + day;

        }else if(displayFormat == "ddmmyyyy"){

            return day + gbnChar + month + gbnChar + year;

        }else if(displayFormat == "ddyyyymm"){

            return day + gbnChar + year + gbnChar + month;

        }

    } catch(e) {
        printStackTrace(e);
    }

}

function isShinhanPopup() {
    try {
        if( typeof window.opener == 'undefined' ) {
            return false;
        } else if( window.opener.closed ) {
            return false;
        } else {
            return true;
        }
    } catch( e ) {
        return false;
    }
}

//지정날짜 전 후 영업일을 가져온다. 0이면 최종영업일 즉, 현재일이 영업일이면 현재일을, 아니면 바로 이전 영업일을 반환한다.
function getOPDate( days ) {
	var args = "days=" + days;
	var servletUrl = "/common/hpe/jsp/getOPDate.jsp?idx=" + (new Date()).getTime() + Math.random() * 10000;
    var dateTime = "";
    WebSquare.net.ajax({
        action      : servletUrl,
        mode        : "synchronous",
        mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
        method      : "post",
        requestData : args,
        type        : "text",
        processMsg  : "",
        success     : function(e) {
                      	var retStr = e.responseText;
                        var result = WebSquare.xml.parse( retStr );
                        //수정 start
                        dateTime =  WebSquare.xml.getString(result, "date");
                      },
        error       : function(e) {
                    	dateTime = "";
                      }
    });

     return dateTime;
}

// 최종 영업일을 가져온다.
function getCurOPDate( days ) {
    return getOPDate(0);
}

// 입력일이 영업일인지 판단한다. 'yyyyMMdd'형식. 
function isOPDate( day ) {
	var args = "day=" + day;
	var servletUrl = "/common/hpe/jsp/isOPDate.jsp?idx=" + (new Date()).getTime() + Math.random() * 10000;
    var isOp = "";
    WebSquare.net.ajax({
        action      : servletUrl,
        mode        : "synchronous",
        mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
        method      : "post",
        requestData : args,
        type        : "text",
        processMsg  : "",
        success     : function(e) {
                        var retStr = e.responseText;
                        printStackTrace("e.responseText[" + retStr + "]");
                        result = WebSquare.xml.parse( retStr );
                        isOp =  WebSquare.xml.getString(result, "isOPDate");

                      },
        error       : function(e) {
                        alert("exception = "+e.responseBody);

                      }
    });

    if( isOp == "true" ){
        return true;
    }
    else{
        return false;
    }
}

// 입력일을 기준으로 가장 가까운 영업일을 구한다. getPreOPDate('yyyyMMdd') 형식.
function getPreOPDate( sDate ) {
    while( ! isOPDate( sDate) ){
        sDate = WebSquare.date.dateAdd(sDate, -1 );
    }
    return sDate;
}

function goPage(pageUrl, key, doc)
{
    try {
        if (typeof pageUrl == 'undefined' || pageUrl == null || pageUrl == "") {
            alertError("URL을 입력해 주시기 바랍니다.");
            printStackTrace("URL을 입력해 주시기 바랍니다.");
            return;
        }

        if (pageUrl.toLowerCase().lastIndexOf(".jsp") == -1) {  // xml이면 key는 반드시 존재
            if (typeof key == 'undefined' || key == null || key == "") {
                alertError("key가 공백입니다.");
                printStackTrace("key가 공백입니다.");
                return;
            }
            setSavedDoc(key, doc);
            WebSquare.net.openUrl(location.host + "/websquare/websquare.jsp?w2xPath=" + pageUrl);
        } else {
            if (typeof key != 'undefined' && key != null && key != "") {
                setSavedDoc(key, doc);
            }
            WebSquare.net.openUrl(location.host + pageUrl);
        }
    } catch (e) {
        printStackTrace(e);
        return;
    }
}

function goPageLogout(pageUrl, key, doc)
{
    try {
        if (typeof pageUrl == 'undefined' || pageUrl == null || pageUrl == "") {
            alertError("URL을 입력해 주시기 바랍니다.");
            printStackTrace("URL을 입력해 주시기 바랍니다.");
            return;
        }

        if (pageUrl.toLowerCase().lastIndexOf(".jsp") == -1) {  // xml이면 key는 반드시 존재
            if (typeof key == 'undefined' || key == null || key == "") {
                alertError("key가 공백입니다.");
                printStackTrace("key가 공백입니다.");
                return;
            }
            setSavedDoc(key, doc);
            WebSquare.net.openUrl(location.host + "/websquare/websquare.jsp?w2xPath=" + pageUrl);
        } else {
            if (typeof key != 'undefined' && key != null && key != "") {
                setSavedDoc(key, doc);
            }
            WebSquare.net.openUrl(location.host + pageUrl);
        }
    } catch (e) {
        printStackTrace(e);
        return;
    }
}

/**
 * 팝업을 호출합니다.
 * 팝업창을 호출한 화면으로 값을 반환시 사용자 이벤트를 구현합니다.
 *
 * 예)
 * userEvent() {                            //호출된 화면(popup) 이벤트
 *     rValue = "someElement";
 *     parentObj.afterModelPop(rValue);
 *     WebSquare.core.closePopupWindow();   //popup close
 * }
 *
 * function afterModelPop(value) {          //팝업창 호출한 화면
 *     var exampleDoc = value;
 *     exampleDoc.exampleElement = value.exampleElement;
 *     ..
 * }
 * @param url        : 화면경로
 * @param popupName  : popup 프레임의 표시줄에 노출되는 제목
 * @param id         : 팝업 윈도우 구분값
 * @param width      : 창 넓이
 * @param height     : 창 높이
 * @param top        : 화면상단을 기준으로 창이 생성되는 위치 (생략시 화면 중간, useIframe이 true인 경우 브라우져를 기준 false인 경우 모니터를 기준으로 한다.)
 * @param left       : 화면왼쪽을 기준으로 창이 생성되는 위치 (생략시 화면 중간, useIframe이 true인 경우 브라우져를 기준 false인 경우 모니터를 기준으로 한다.)
 * @param resizable  : 창크기 변경여부
 * @param scrollbar  : 스크롤바 유무
 * @param xml        : popup에 넘길 xmlDocument의 string popup창에서 WebSquare.uiplugin.popup.getPopupParam() api를 사용하여 가져올수 있습니다.
 * @param modal      : modal을 이용해서 뒤 쪽 배경을 동작하지 않도록 만들기 위한 인자 입니다. false이면 뒤쪽의 컴퍼넌트가 사용 가능합니다.
 * @param srcData    : popup 객체의 type 이 window 일 때 Parent 에서 넘길 xpath
 * @param destData   : popup 객체의 type 이 window 일 때 popup 에 설정할 xpath
 * @example openModalPopup({url : "/common/example.xml", popupName : "팝업제목", id : "popid", width : "400", height : "400"});
 */
function openModalPopup(popObj, xml, /*optional*/scrollbar, top, left, resizable, modal, srcData, destData) {
	
	var contextRoot = "/";
	var xmlDoc = null;
	
	if (typeof popObj.url == 'undefined' || popObj.url == null || popObj.url == "") {
		alert("Missing url");
		return;
	}
	if (typeof xml == 'undefined' || xml == null || xml == "") {
		alert("Missing xml");
		return;
	} else {
		if (typeof xml == 'object') {
		    xmlDoc = xml;
		} else {
			xmlDoc = WebSquare.xml.parse(xml);
		}
	}
    var url = popObj.url;
    var title = popObj.popupName || "";
    var id = popObj.id || "";
    var width= popObj.width || 400;
    var height = popObj.height || 400;
    var left = left || -1;
    var top = top || -1;
    var resizable = (resizable !=null && resizable == true) ? true : false;
    var scrollbar = (scrollbar !=null && scrollbar == true) ? true : false;
	var isModal   = (modal != null && modal == true) ? true : false;
	
	if( navigator.userAgent.indexOf("Microsoft") > -1 ) {
		if( navigator.userAgent.indexOf("MSIE 6") > -1) {
			width = parseInt(width) + 6;
			height = parseInt(height) + 24;
		} else if( navigator.userAgent.indexOf("MSIE 7") > -1) {
			width = parseInt(width);
			height = parseInt(height) + 6;
		} else if( navigator.userAgent.indexOf("MSIE 8") > -1) {
			width = parseInt(width);
			height = parseInt(height) + 6;
		}
	} else {
		width = parseInt(width) + 8;
		height = parseInt(height) + 32;
		
		var currB = getBrowser();
		if (currB == "Chrome") {
			width -= 8;	
			height -= 20;
		} else if (currB == "Firefox") {
		    width -= 8;
		    height -= 32;
		} else if (currB == "Opera") {
		    width -= 8;
		    height -= 28;
		} else if (currB == "Safari") {
		    width -= 8;
		    height -= 93;
		}		
	}

    var browserLeft = ( self.screenLeft || window.screenX);
    var browserTop = ( self.screenTop || window.screenY);
    if (left > 0 ){
        left = left + ( self.screenLeft || window.screenX);
    }else{
        left = Math.floor((screen.width/2)-(width/2));
    }
    if (top > 0 ){
        top = top + ( self.screenTop || window.screenY );
    }else{
        top = Math.floor((screen.height/2)-(height/2));
    }

    var popobj = WebSquare.uiplugin.popup.openPopup(contextRoot + url, {
        id              : id,
        popupUrl        : "popup.jsp",
        type            : "browser",    //window, browser 중 하나  browser type의 경우 useIFrame 속성과 상관없이 window.open으로 열립니다.
        width           : width,
        height          : height,
        top             : top,          //top과 left는 useIframe이 true인 경우 브라우져를 기준 false인 경우 모니터를 기준으로 한다.
        left            : left,
        popupName       : title,        //popup 프레임의 표시줄에 나타납니다.
		modal			: isModal,	    //modal을 이용해서 뒤 쪽 배경을 동작하지 않도록 만들기 위한 인자 입니다. false이면 뒤쪽의 컴퍼넌트가 사용 가능합니다.
        useIFrame       : false,        //true : IFrame 을 사용하는 WebSquare popup, false: window.open 을 사용하는 popup
        style           : "",           //popup의 스타일을 지정합니다. 값이 있으면 left top width height는 적용되지 않습니다.
        // popup option window.open을 사용하는 경우(useIfrmae false인 경우) popup에 넘어가는 parameter
        resizable       : resizable,
        status          : false,
        menubar         : false,
        scrollbars      : true,
        title           : title,
        xml             : xmlDoc,       //popup에 넘길 xmlDocument의 string popup창에서 WebSquare.uiplugin.popup.getPopupParam() api를 사용하여 가져올수 있습니다.
        srcData         : "",           //popup 객체의 type 이 window 일 때 Parent 에서 넘길 xpath
        destData        : ""            //popup 객체의 type 이 window 일 때 popup 에 설정할 xpath
    });
    //*/
}



//우편번호 검색
function getZipList(DONG_NM) {

    //우편번호 타스크 호출
    var xmlDoc = WebSquare.xml.parse("<COM_POST_TBL/>");
    var result;
    //타스크 명과 액션명, 조회조건을 넣는다.
    setValueXML(xmlDoc, "COM_POST_TBL", "task", "sfg.hpe.task.common.ZipTask");
    setValueXML(xmlDoc, "COM_POST_TBL", "action", "getZipList");
    setValueXML(xmlDoc, "COM_POST_TBL/DONG_NM",  "value", DONG_NM);

    /*ajax 셋팅
      1. XML을 넘길때는 xmlDos형태로 보내면 자동으로 스트링으로 컨버전 해준다.
      2. mode는 synchronous, asynchronous 두종류가 있는데 바로 처리할 거면 synchronous를 지정한다.
      3. mediatype이 xml 일때는 application/xml; charset=UTF-8
                    text 일때는 application/x-www-form-urlencoded; charset=UTF-8 을 넣는다.
                    (text타입은  주소뒤에 A=1&B=2 같은 값을 지정하고 보낼때 사용한다.)
      4. 매소드는 POST방식
      5. requestData는 타입에 따라 변형없이 그대로 보낸다.
      6. type text, xml 등이 있다.
    */

    //var resultDoc = WebSquare.xml.parse("<RESULT/>");;
    var keepTransactionSession = "false", processMsg = "";
    
    var args = "plainXML=" + encodeURIComponent(WebSquare.xml.serialize(xmlDoc));
    WebSquare.net.ajax({
        action      : "/common/hpe/jsp/callHpeServletService.jsp",
        mode        : "synchronous",
        mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
        method      : "post",
        requestData : args,
        type        : "text",
        processMsg  : "",
        success     : function(e) {
                        result = e.responseText;

                      },
        error       : function(e) {
                        alert("exception = "+e.responseBody);
                      }
     });

     return result;
}
//특수문자 체크
function checkSpecialChar(str, objName) {
    for (var i=0; i < str .length; i++) {
        ch_char = str .charAt(i);
        ch = ch_char.charCodeAt();
        if( (ch >= 33 && ch <= 47) || (ch >= 58 && ch <= 64) || (ch >= 91 && ch <= 96) || (ch >= 123 && ch <= 126) ) {
            alert(objName + "에 특수문자를 사용할 수 없습니다");
            return false;
        }
    }

    return true;

}

/*
 * 에러 코드를 입력받고 에러 창을 띄워준다.
 *
 *
 * */
function goErrmsg(errCode){
    //우편번호 타스크 호출
    var xmlDoc = WebSquare.xml.parse("<EMPT/>");
    var result;
    //타스크 명과 액션명, 조회조건을 넣는다.
    setValueXML(xmlDoc, "EMPT", "task", "sfg.hpe.task.common.DBTask");
    setValueXML(xmlDoc, "EMPT", "action", "getErrorMessage");
    setValueXML(xmlDoc, "EMPT/ERROR_CODE",  "value", errCode);
    setValueXML(xmlDoc, "EMPT/CHAN_TYPE",  "value", "A0");
    setValueXML(xmlDoc, "EMPT/LAN_G",  "value", "1");

    var result = doTask(xmlDoc);

    return result;
}
/**
 * 단건 업로드를 진행한다.
 **/
function fileUpload(uploadObj, task, action) {
	if (uploadObj.getActionUrl() == "") {
		alert("분류 Sub Directory는 필수입니다.");
		return;
	}
	if (typeof task == "undefined") task = "";
	if (typeof action == "undefined") action = "";
	var action = "/common/hpe/jsp/uploadobject.jsp?"+uploadObj.getActionUrl()+"&CALLBACK="+uploadObj.getID()+".callback&TASK="+task+"&ACTION="+action;;
	uploadObj.changeFormAction(action);
	uploadObj.submit();
}

/**
 * 파일다운로드 및 바로열기 함수
 * 
 * @param filePath   : 파일경로
 * @param fileName   : 파일명
 * @param wasGb      : 서버구분 0:이미지서버, 1:was서버 
 * @example 바로열기 fileDownloadOpen("/download/test", "test.pdf");
 *          다운로드 fileDownloadOpen("/download/test", "test.xsl");
 **/
function fileDownloadOpen(filePath, fileName, wasGb) {
	var url = "";	
	var isOpen = "false";
	
	if (fileName.lastIndexOf(".pdf") >= 0) {
		isOpen = "true";
	} else if (fileName.lastIndexOf(".jpg") >= 0) {
		isOpen = "true";
	} else if (fileName.lastIndexOf(".gif") >= 0) {
		isOpen = "true";
	}
	
	if (fileName.lastIndexOf(".exe") >= 0 || fileName.lastIndexOf(".com") >= 0) {
		alert("실행파일은 다운로드 할수 없습니다.");
		return;
	}
	
	if(null == wasGb || wasGb == ""){
		wasGb = "0";
	}
	
	if(isOpen == "true"){
		url = IMAGE_URL + filePath + "/" + fileName;
   		window.open(url); 
	}else{
		filePath = filePath+"/"+fileName;		
		url = "/common/hpe/jsp/downloadFile.jsp?filePath="+encodeURIComponent(filePath)+"&fileName="+encodeURIComponent(fileName)+"&wasGb="+wasGb;
		WebSquare.net.download( url,"","post");		
	}
    
}

function VectorPageList(str, vec) {
    this.initStr = str;
    this.isInit = true;
    this.data = vec;

    this.currPage = 1;
    this.lastPage = 0;
    this.totalRows = vec.size();
    this.pageSize = 10;
    this.pageCount = 5;
    this.xsl = null;
    this.caching = "true";
    this.getXmlHash = new WebSquare.collection.Hashtable();

    this.goMove = _vectorPageListGoMove;
    this.getCurrentPage = _vectorPageListGetCurrentPage;
    this.drawContent = _vectorPageListDrawContent;

    try {
        var arrayOfFeatures = this.initStr.split(";");
        for (var i=0; i < arrayOfFeatures.length; i++) {
            var tmpArray = arrayOfFeatures[i].split(":");
            if (tmpArray.length == 2) {
                tmpArray0 = tmpArray[0].trim().toLowerCase();
                tmpArray1 = tmpArray[1].trim();
                if (tmpArray0 == "pagesize") {
                    this.pageSize = parseInt(tmpArray1, 10);
                } else if (tmpArray0 == "pagecount") {
                    this.pageCount = parseInt(tmpArray1, 10);
                } else if (tmpArray0 == "objectname") {
                    this.objectName = tmpArray1;
                } else if (tmpArray0 == "display") {
                    this.display = tmpArray1;
                } else if (tmpArray0 == "displaypage") {
                    this.displayPage = tmpArray1;
                } else if (tmpArray0 == "caching") {
                    this.caching = tmpArray1;
                }
            }
        }
        if (this.objectName == null) {
            alert("속성 중 objectName은 필수 항목입니다.");
            return;
        }
        if (this.displayPage == null) {
            alert("속성 중 displayPage은  필수 항목입니다.");
            return;
        }
    } catch(e) {}

    this.lastPage = parseInt(this.totalRows / this.pageSize);
    if (this.totalRows % this.pageSize > 0) this.lastPage += 1;

    eval(this.displayPage).setCount(this.lastPage);
    this.drawContent();
    this.goMove(this.currPage);
}

function _vectorPageListDrawContent() {
    if (this.totalRows == 0) {
        alert("해당 데이터가 존재하지 않습니다.");
        try {
            eval(this.display).removeAll();
        } catch (e) {}
    } else {
        var startIdx = (this.currPage -1) * this.pageSize;
        var endIdx = this.currPage * this.pageSize - 1;
        if (endIdx > this.totalRows -1) endIdx = this.totalRows - 1;

        var vec = new WebSquare.collection.Vector();
        for (var i = startIdx; i <= endIdx; i++) {
            vec.addElement(this.data.elementAt(i));
        }
        var result = vec.toDocument();
        if (this.caching != "false") {
            this.getXmlHash.put(this.currPage, result);
        }
    }
}
function _vectorPageListGoMove(page) {
    this.currPage = page;

    if (this.currPage <= 0) {
        alert("조회의 처음입니다.");
        return;
    } else if (this.currPage > this.lastPage) {
        alert("더 이상 자료가 존재하지 않습니다.");
        return;
    } else if (this.getXmlHash.containsKey(this.currPage)) {
        var cacheObj = this.getXmlHash.get(this.currPage);
        var doc = cacheObj.toDocument();

        try {
        	if (this.display != null && eval(this.display).getPluginName() == "grid") eval(this.display).setXML(doc, false);
        } catch (e) { }
        return doc;
    } else {
        this.drawContent();
        this.goMove(this.currPage);
    }

    eval(this.displayPage).setSelectedIndex(this.currPage);
}
function _vectorPageListGetCurrentPage() {
    return this.currPage;
}

function PageList( str ) {
    this.initStr = str;
    this.isInit =  true;
    this.currPage = 1;
    this.lastPage = 1;
    this.totalRows = 0;

    this.pageSize   = 10;  //한페이지 보여줄 Row 개수
    this.pageCount  = 5;   //보여줄 페이지 개수
    this.display = null;
    this.caching = "true";
    this.displayPage = null;
    this.objectName = null;


    this.sFeatures = null;
    this.method = null;
    this.gXmlDoc = null;
    this.gXmlHash = null;

    this.callXMLService = _pageListCallXMLService;
    this.savePage = _pageListSavePage;
    this.goMove = _pageListGoMove;
    this.getCurrentPage = _pageListGetCurrentPage;
}
function _pageListCallXMLService( sFeatures, method, argXML ) {
    this.isInit =  true;
    this.currPage = 1;
    this.lastPage = 1;

    this.gXmlDoc = null;
    this.gXmlHash = new WebSquare.collection.Hashtable();

    try {
        var arrayOfFeatures = this.initStr.split(";");
        for (var i=0; i < arrayOfFeatures.length; i++) {
            var tmpArray = arrayOfFeatures[i].split(":");
            if (tmpArray.length == 2) {
                tmpArray0 = tmpArray[0].trim().toLowerCase();
                tmpArray1 = tmpArray[1].trim();
                if (tmpArray0 == "pagesize") {
                    this.pageSize = parseInt(tmpArray1, 10);
                } else if (tmpArray0 == "pagecount") {
                    this.pageCount = parseInt(tmpArray1, 10);
                } else if (tmpArray0 == "objectname") {
                    this.objectName = tmpArray1;
                } else if (tmpArray0 == "display") {
                    this.display = tmpArray1;
                } else if (tmpArray0 == "displaypage") {
                    this.displayPage = tmpArray1;
                } else if (tmpArray0 == "caching") {
                    this.caching = tmpArray1;
                } else if (tmpArray0 == "currpage") {
                    this.currPage = tmpArray1;
                }
            }
        }
        if (this.objectName == null) {
            alert("속성 중 objectName은 필수 항목입니다.");
            return;
        }
        if (this.displayPage == null) {
            alert("속성 중 displayPage은  필수 항목입니다.");
            return;
        }
    } catch(e) {}
    if (typeof argXML == "string") {
        this.gXmlDoc = WebSquare.xml.parse(argXML);
    } else if (typeof argXML == "object") {
        this.gXmlDoc = argXML;
    }
    this.sFeatures = sFeatures;
    this.method = method;
    WebSquare.xml.setAttribute(this.gXmlDoc, "page",     this.currPage);
    WebSquare.xml.setAttribute(this.gXmlDoc, "pageSize", this.pageSize);

    eval(method+"(\""+this.sFeatures+"\", this.gXmlDoc);");
}

function _pageListSavePage(result) {
    if (typeof result == "string") result = WebSquare.xml.parse(result);

    if( this.isInit ) {
        this.isInit = false;
        //전체 Rows를 구하여 마지막 페이지를 계산해 준다.
        this.totalRows = parseInt(WebSquare.xml.getAttribute(result, "totalRows"));
        if(typeof this.totalRows == "undefined") {
            alert("페이징을 사용하기 위해서는 totalRows값이 필요합니다.");
            this.totalRows = 0;
        }
        if (this.totalRows == 0) {
        	this.lastPage = 1;
        } else {
	        this.lastPage = parseInt(this.totalRows / this.pageSize) ;
	        if( this.totalRows %  this.pageSize  > 0 ) this.lastPage += 1;
        }
        eval(this.displayPage).setCount(this.lastPage);
    }
    if( this.caching != "false" ) { // caching을 사용하지 않는 경우
        this.gXmlHash.put(this.currPage, result);
    }
    this.goMove(this.currPage);
}

function _pageListGoMove( page ) {
    this.currPage = page;

    if ( this.currPage <= 0){
        alert("조회의 처음입니다.");
        return;
    } else if ( this.gXmlDoc == null ) {
        return;
    } else if ( this.currPage > this.lastPage ){
        alert("더 이상 자료가 존재하지 않습니다 ." );
        return;
    } else if ( this.gXmlHash.containsKey(this.currPage) ) {
        var cacheObj = this.gXmlHash.get(this.currPage);
        var doc = cacheObj.toDocument();
		try {
        	if (this.display != null && eval(this.display).getPluginName() == "grid") eval(this.display).setXML(doc, false);
        } catch (e) { }

        eval(this.displayPage).setSelectedIndex(this.currPage);
        return doc;
    }

    WebSquare.xml.setAttribute(this.gXmlDoc, "page",     this.currPage);
    WebSquare.xml.setAttribute(this.gXmlDoc, "pageSize", this.pageSize);
    eval(this.method+"(\""+this.sFeatures+"\", this.gXmlDoc);");
}

function _pageListGetCurrentPage() {
    return this.currPage;
}

/**
 * 파일을 업로드하여 임시폴더에 등록한다.
 * callback에서 반드스 doImageTask를 호출해야 한다.
 */
function imageUpload(uploadObj) {
	var action = "/common/hpe/jsp/imageUploadObject.jsp?CALLBACK="+uploadObj.getID()+".callback";
	uploadObj.changeFormAction(action);
	uploadObj.submit();
}
/**
 * 업로드된 이미지를 DB에 저장한다.
 */
function doImageTask() {
	try {
		var userCallback = "", processMsg = "", debug = "false", errorMsg = "", errorURL = "", syncMode = "asynchronous";
		var sFeatures = arguments[0];
		var doc = arguments[1];
		if(typeof doc == 'undefined') {
			alertError("doc는 필수 항목 입니다.");
			return;
		}

		if( typeof sFeatures != "undefined" ) {
			var arrayOfFeatures = sFeatures.split(";");
	        for (var i=0; i < arrayOfFeatures.length; i++) {
	            var tmpArray = arrayOfFeatures[i].split(":");
	            if ( tmpArray.length == 2 ) {
	                tmpArray0 = tmpArray[0].trim().toLowerCase();
	                tmpArray1 = tmpArray[1].trim();
	                if ( tmpArray0 == "sync" )   {
	                    syncMode = tmpArray1.toLowerCase();
	                    if (syncMode == "true") syncMode = "synchronous";
	                } else if ( tmpArray0 == "callback" )   {
	                    userCallback = tmpArray1;
	                } else if ( tmpArray0 == "processmsg" ) {
	                    processMsg = tmpArray1;
	                } else if ( tmpArray0 == "debug" )  {
	                    debug = tmpArray1.toLowerCase();
	                } else if ( tmpArray0 == "error" )  {
	                    errorMsg = tmpArray1;
	                } else if ( tmpArray0 == "errorurl" ) {
	                    errorURL = tmpArray1;
	                }
	            }
	        }
	    }

        var task = WebSquare.xml.getAttribute(doc, "task");
        var action = WebSquare.xml.getAttribute(doc, "action");
		var servletURL = "/common/hpe/jsp/imageInsertObject.jsp?task="+task+"&action="+action+"&idx=" + (new Date()).getTime() + Math.random() * 10000;
		var serviceFeatures = "callback:__doTaskCallback__; sync:"+syncMode+"; lock:false; cursorFix: true; debug:"+debug + "; processMsg:" + processMsg +"; form:; userCallback:" + userCallback;

		if ( !callInitechXMLService( serviceFeatures, servletURL, doc )) {
			log("callInitechXMLService호출 하기 전에 에러가 발생했습니다.");
			// 로그아웃 후 첫페이지로.
			//doLogoutWithoutCert();
		}
	} catch( e ) {
		alertError("[doImageTask] 호출 중 에러가 발생했습니다.", e);
		printStackTrace( e );
		return;
	}
}
/**
 * DB에 등록된 이미지를 호출한다.
 */
function doImageView(imgObj, doc) {
	var url = "/common/hpe/jsp/imagePreview.jsp?param="+encodeURI(serializeXML(doc));
	imgObj.setSrc(url);
}

/*******************************************************로그아웃관련******************************************************/
/**
 * 세션타임아웃방지를 위해 정해진 주기로 세션갱신 서블릿을 호출한다.
 **/
function refreshAccessTime()
{
    var count = arguments[0];
    var timeout = ( 10 * 60 * 1000 ) - 5000; // 10분에서 -5 초
    var debug = "false", exceptionCallback = "", serviceFeatures = "";
    var url = "/common/hpe/jsp/callHpeRefreshSession.jsp";
    var doc;
    var args = "";

    if (count == 0) return;
    if( arguments.length == 2 ){
//      callServletXMLService("callback:refreshAccessTimeCallback;sync:false;cursor:false;", "/common/hpe/jsp/callHpeRefreshSession.jsp", WebSquare.xml.parse("<request/>"));
        doc = WebSquare.xml.parse("<request/>");

        WebSquare.net.ajax({
            action      : url,
            mode        : "asynchronous",
            mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
            method      : "post",
            requestData : args,
            type        : "text",
            processMsg  : "",
            success     : function(e) {
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
                            statusObj.callBack = "refreshAccessTimeCallback";
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = serviceFeatures;
                            statusObj.servletURI = url;
                            _callBackInitechXML(e, statusObj);
                          },
            error       : function(e) {
                            alert("exception = "+e.responseStatusCode);
                            if (e.responseStatusCode == "") {
                            }
                            var statusObj = new Object();
                            statusObj.argument = WebSquare.xml.serialize(doc);
                            statusObj.callBack = "refreshAccessTimeCallback";
                            statusObj.debug = debug;
                            statusObj.exceptionCallback = exceptionCallback;
                            statusObj.sFeatures = serviceFeatures;
                            statusObj.servletURI = url;
                            _callBackInitechXMLError(e, statusObj);
                          }
        });
        count = count-1;
    }
    window.setTimeout( "refreshAccessTime("+count+", 1)", timeout);
}

function refreshAccessTimeCallback(result)
{
    if (WebSquare.xml.getString(result, "result") == "success") {
        setLoginTimeOut();
        printStackTrace("세션타임아웃 갱신 성공!");
    } else {
        printStackTrace("세션타임아웃 갱신 실패!");
    }
}


/*
 * 로그아웃 실행시 호출을 한다.
 */
function doLogout()  {
    try{
        var sTemp = getSavedDoc( "login_user_name" );   //
    } catch(ee){ }

    var url = "/common/hpe/jsp/callHpeLogoutService.jsp";
    var args = "";
    // callInitechXMLService("callback:doLogoutCallback; processMsg:로그아웃중 입니다.; sync:false; debug:false; usecert:false; ", "/common/Oib/jsp/callHpeLogoutService.jsp", xmlDoc );
     WebSquare.net.ajax({
         action      : url,
         mode        : "synchronous",
         mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
         method      : "post",
         requestData : args,
         type        : "text",
         processMsg  : "",
         success     : function(e) {

                         doLogoutCallback(e);
                       },
         error       : function(e) {
                         doLogoutCallback(e);
                       }
     });

    printStackTrace("LOGOUT CALL END!");
}

/*
 * 로그아웃 서비스 CallBack
 *
 */
function doLogoutCallback(e) {

    result = e.responseText;

    var resultDoc = WebSquare.xml.parse(result);

    	if(WebSquare.xml.getAttribute(resultDoc, "result") == 1) {
					var topUrl = "" + top.location ;
			        if( topUrl.indexOf("nateon") > 0 ){
						  location.href = "/nateon/common/hpe/logout/logout.xml";
			        }
			        else{
			        	goPageLogout("/common/hpe/logout/logout.xml","logout",resultDoc);
					}
				}
				else{ //오류가 발생해도 일단 logOut처리
						goPageLogout("/common/hpe/logout/logout.xml","logout",resultDoc);
				}
}

/* 로그아웃 실행 - 인증서 오류시 실행된다. 암호화 없이 JSP실행.
 *
 */
function doLogoutWithoutCert() {
    try{
        var sTemp = getSavedDoc( "login_user_name" );   //
    } catch(ee){ }

    var url = "/common/hpe/jsp/callHpeLogoutService2.jsp";
    var args = "";
    //callServletXMLService( "callback:doLogoutCallback; processMsg:로그아웃중 입니다.; sync:false; debug:false; ", "/common/Oib/jsp/callRibLogoutService2.jsp", xmlDoc );
     WebSquare.net.ajax({
         action      : url,
         mode        : "synchronous",
         mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
         method      : "post",
         requestData : args,
         type        : "text",
         processMsg  : "",
         success     : function(e) {

                         doLogoutCallback(e);
                       },
         error       : function(e) {
                         doLogoutCallback(e);
                       }
     });
}


/*
	자동 로그아웃
	PopUp 창이 아니면서 로그인이 되어있는 경우에만 9분후에 로그아웃경고 화면으로 분기 시킨다.
*/

// Login TimeOut SET
function setLoginTimeOut()  {
	if( ! isShinhanPopup() ){
		try{
			 if(isLogin()){
				if( g_timeid != null ){
					clearTimeout( g_timeid );
				}
				g_timeid = setTimeout("showAutoLogout();" ,  540000);  //9분후 로그아웃 경고창으로 이동 540000
				//g_timeid = setTimeout("showAutoLogout();" ,  20000);  //9분후 로그아웃 경고창으로 이동 540000
			 }
		} catch(e){
			printStackTrace( e );
		}
	}
}

/************로그아웃 관련 변수 및 함수*************/
var g_timeid = null;
setLoginTimeOut();
/****************************************************/


// Timer 초기화 Logic
function clearLoginTimeOut()  {
	try{
		if( g_timeid != null ){
			clearTimeout( g_timeid );
		}
		g_timeid = null;
	}
	catch(e){
		log("clearLoginTimeOut exception ");
		printStackTrace( e );
	}
}

//9분 경과로 로그아웃 또는 세션연장 화면 출력
function showAutoLogout() {
	log("Login showAutoLogout start ");

	var xmlDoc = WebSquare.xml.parse("<EMPT/>");
	var url = "/common/hpe/logout/autoLogout.xml";

    var width  = 600;
    var height = 219; 

   var sFeatures = "width:"+width+"px;height:"+height+"px";
    //로그인이 되었을때만 페이지 이동
 
	  log("Login showAutoLogout openFloatPopup start ");
    //로그아웃 경고 페이지로 이동
    openFloatPopup(url, sFeatures, xmlDoc);
    g_timeid = setTimeout("doAutoLogout();" , 60000);
}

//권한경고 창에서 확인버튼 클릭시 로그아웃 실행
function doAuthLogout()  {
    try{
        var sTemp = getSavedDoc( "login_user_name" );   //
        printStackTrace("doLogout login_user_name["+ WebSquare.xml.serialize(sTemp) + "]");
    } catch(ee){ }

    var url = "/common/hpe/jsp/callHpeLogoutService.jsp?idx=" + (new Date()).getTime() + Math.random() * 10000;
    var args = "";
    // callInitechXMLService("callback:doLogoutCallback; processMsg:로그아웃중 입니다.; sync:false; debug:false; usecert:false; ", "/common/Oib/jsp/callHpeLogoutService.jsp", xmlDoc );
     WebSquare.net.ajax({
         action      : url,
         mode        : "synchronous",
         mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
         method      : "post",
         requestData : args,
         type        : "text",
         processMsg  : "",
         success     : function(e) {

    	               return true;
                       },
         error       : function(e) {
                       return false;
                       }
     });
}

// 10분 경과로 인한 자동 접속 종료 화면으로 분기
function doAutoLogout()  {
	clearLoginTimeOut();
	var url = "/common/hpe/jsp/callHpeLogoutService.jsp?idx=" + (new Date()).getTime() + Math.random() * 10000;
	var args = "";

     WebSquare.net.ajax({
         action      : url,
         mode        : "synchronous",
         mediatype   : "application/x-www-form-urlencoded; charset=UTF-8",
         method      : "post",
         requestData : args,
         type        : "text",
         processMsg  : "",
         success     : function(e) {
                         doAutoLogoutCallback(e);
                       },
         error       : function(e) {
                    	   doAutoLogoutCallback(e);
                       }
     });	
}

	
// 10분 경과로 인한 자동 접속 종료 화면으로 분기
function doAutoLogoutCallback(e)  {
	try{
	  var xmlDoc = getDocument("<EMPT/>");
				
		var topUrl = "" + top.location ;
        if( topUrl.indexOf("nateon") > 0 ){
        	goPageLogout("/nateon/common/hpe/logout/timeLogout.xml","timelogout",xmlDoc);
        } else{		
        	goPageLogout("/common/hpe/logout/timeLogout.xml","timelogout",xmlDoc);
		}
	} catch(e){						
		goPageLogout("/common/hpe/logout/timeLogout.xml","timelogout",xmlDoc);
	}
}
var timerchecker=null;
//왼쪽메뉴창에 카운트를 보여준다.
function showCountdown(ExpireTime,flage ){
	 var day, hour, min, sec, mod
	 var CountText;
	 var RemainTime;

	 RemainTime = ExpireTime -1 ;
	//alert(RemainTime);
	 //var objID = document.getElementById("LNB_WTE");
	
	 CountText = "";
	
	 // 지나간 자료는 나타내지 않음
	 if (RemainTime >=0) 
	 
	 {
	  //남은 일수
	  day = Math.floor(ExpireTime / (3600*24));
	  mod = ExpireTime % (24 * 3600);
	  //남은 시간 
	  hour = Math.floor(mod/3600);
	  mod = mod % 3600;
	  //남은 분
	  min = Math.floor(mod/60);
	  //남은 초
	  sec = mod % 60;
	
	  CountText = (day > 0)?day +"일 " : "";
	  CountText = (hour > 0)?CountText + hour +"시간 " : (CountText.length>0)?CountText + "시간" : CountText;
	  CountText = (min > 0)?CountText + min +"분 " : (CountText.length > 0)?CountText + min + "분" :CountText;
	  CountText = CountText + sec +"초";
	 }
	
	 if ((sec <=0 && CountText == "0초")||(CountText == ""))
	 {//이제 그만
	  CountText = "종료";
	 }

	 //화면에 값 뿌리기
	 LNB_WTE.setLabel(CountText);
	 
	 if (CountText != "종료")
	 {
	 	if(flage == 2){
	 		// 매 1초마다 재귀호출
	   		clearTimeout(timerchecker);
	   		showCountdown(600, 1);
	 		}else if(flage == 1){
	 		 // 매 1초마다 재귀호출
	   	 timerchecker =setTimeout("showCountdown("+RemainTime+", 1)",1000);
	 		}
	 }
}

function setRefreashTime(){
	var chkLabel = typeof LNB_WTE;

   //해당 아이디가 없으면 카운트 함수는 실행하지 않는다.
   if(chkLabel != "undefined"){
	  showCountdown(595, 2);  
   }	
    clearLoginTimeOut();
	refreshAccessTime(1,1);
}	

/***************************************************로그아웃 관련*******************************************************/


/**
 * 로그인되어 있는지 체크한다.
 */
function isLogin() {
	var isLoginCheck = false;

	if (typeof __CUSTOMER_NAME != "undefined" && __CUSTOMER_NAME != "") {
		isLoginCheck = true;
	}
	return isLoginCheck;
}
 

/**
* 전화번호 - 를 붙여 반환한다.
*/
function phone_format(num){
  return num.replace(/(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/,"$1-$2-$3");
}


/**
 * 입력창 자동이동
**/ 
function cursorMove(arg, nextname, len){
	var cLength = arg.getValue();
	if (cLength.length == len) { 
		nextname.focus() ; 
		return; 
	} 
}

var shttp_status_map = new WebSquare.collection.Hashtable();

//암호화 오류 정의
//shttp_status_map.put("800", "로그인 오류 입니다.\n등록되지 않은 인증서 입니다.\n확인 버튼을 클릭하시어 사용등록 후에 이용하기 바랍니다.\n");
shttp_status_map.put("800", "로그인 오류 입니다.\n등록되지 않은 인증서 입니다.\n사용등록 후에 이용하기 바랍니다.\n");
shttp_status_map.put("851", "암호화 오류 입니다.\n고객님께서 입력하신 비밀번호 확인중 오류가 발생하였습니다.\n현재 로그인한 브라우저를 종료하시고, 새로 브라우져를 실행하여 이용하여 주시기 바랍니다.\n");
shttp_status_map.put("900", "암호화 오류 입니다.\n암호화 세션이 초기화 되었습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("901", "암호화 오류 입니다.\n암호화된 Master Secret 이 도착하지 않았습니다\n 네트워크 환경을 확인하세요\n");
shttp_status_map.put("902", "암호화 오류 입니다.\n암호화된 Master Secret 을 복호화 하는 도중 오류가 발생했습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("903", "암호화 오류 입니다.\n보안 시퀀스가 존재하지 않아 페이지를 표시할 수 없습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("904", "암호화 오류 입니다.\n보안 시퀀스가 일치하지 않아 페이지를 표시할 수 없습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("905", "암호화 오류 입니다.\n서버에서 메시지 복호화 도중 오류가 발생했습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("906", "암호화 오류 입니다.\n요청하고자 하는 데이터의 길이가 한계치를 넘어섰습니다\n 파일 업로드를 시도 중이라면 용량이 작은 파일을 업로드 하세요\n");
shttp_status_map.put("907", "암호화 오류 입니다.\n메시지 복호화를 위한 Cipher-Parity 헤더가 도착하지 않았습니다\n 네트워크 환경을 확인하세요\n");
shttp_status_map.put("908", "암호화 오류 입니다.\n잘못된 파라메터 입력입니다\n 네트워크 환경을 확인하세요\n");
shttp_status_map.put("909", "암호화 오류 입니다.\n서버에 등록되지 않은 호스트 주소 입니다\n 올바른 도메인을 사용하세요\n");
shttp_status_map.put("910", "암호화 오류 입니다.\n보안 세션과 WAS 세션의 동기화 확인에 실패했습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("911", "암호화 오류 입니다.\n인증서 목록에 존재하지 않는 호스트 입니다\n 올바른 도메인을 사용하세요\n");

//공인인증 오류 정의
shttp_status_map.put("921", "공인인증 오류 입니다.\n인증서 정책이 존재하지 않는 페이지 입니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("922", "공인인증 오류 입니다.\n인증서 제출이 필요한 페이지 입니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("923", "공인인증 오류 입니다.\n올바른 형식의 인증서가 아닙니다\n X\n509 표준 인증서만 사용 가능합니다\n");
shttp_status_map.put("924", "공인인증 오류 입니다.\n개인키 소유여부 확인을 위한 서명 데이터가 들어오지 않았습니다\n 네트워크 환경을 확인하세요\n");
shttp_status_map.put("925", "공인인증 오류 입니다.\n개인키 소유여부 확인(서명 검증)에 실패했습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("926", "공인인증 오류 입니다.\n인증서 본인 확인에 필요한 VID Random 값이 들어오지 않았습니다\n 네트워크 환경을 확인하세요\n");
shttp_status_map.put("927", "공인인증 오류 입니다.\n인증서 본인 확인 기능을 제공하지 않는 인증서 입니다\n 인증서를 재발급 받아 사용하십시오\n");
shttp_status_map.put("928", "공인인증 오류 입니다.\n인증서 본인 확인에 실패했습니다\n 본인 주민번호(또는 사업자번호)와 일치하는 인증서만 사용 가능합니다\n");
shttp_status_map.put("929", "공인인증 오류 입니다.\n낮은 버전의 인증서는 허용하지 않습니다\n 인증서를 재발급 받아 사용하십시오\n");
shttp_status_map.put("930", "공인인증 오류 입니다.\n인증서가 아직 유효하지 않습니다\n 잠시 후 이용하시기 바랍니다\n");
shttp_status_map.put("931", "공인인증 오류 입니다.\n인증서가 만료되어 더 이상 사용할 수 없습니다\n 인증서를 재발급 받아 사용하십시오\n");
shttp_status_map.put("932", "공인인증 오류 입니다.\n신뢰된 인증기관(CA) 에서 발급한 인증서가 아닙니다\n 관리자에게 문의하세요\n");
shttp_status_map.put("933", "공인인증 오류 입니다.\n인증서 서명 검증에 실패했습니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("934", "공인인증 오류 입니다.\n인증서 경로 검증에 실패했습니다\n 인증서를 재발급 받아 사용하십시오\n");
shttp_status_map.put("935", "공인인증 오류 입니다.\n인증서 상호 연동 정책(OID) 에 부합하지 않는 인증서입니다\n");
shttp_status_map.put("936", "공인인증 오류 입니다.\n인증서 상호 연동 정책(OID) 검증에 실패했습니다\n");
shttp_status_map.put("937", "공인인증 오류 입니다.\n본 페이지 사용에 적합한 용도(KeyUsage)의 인증서가 아닙니다\n");
shttp_status_map.put("938", "공인인증 오류 입니다.\n인증서가 폐기되어 더 이상 사용할 수 없습니다\n 인증서를 재발급 받아 사용하십시오\n");
shttp_status_map.put("939", "공인인증 오류 입니다.\n인증서가 효력정지 되어 현재는 사용할 수 없습니다\n 효력 회복 후 사용 가능합니다\n");
shttp_status_map.put("940", "공인인증 오류 입니다.\n인증서 상태(폐기 여부) 확인에 실패했습니다\n 관리자에게 문의하세요\n");
shttp_status_map.put("949", "공인인증 오류 입니다.\n인증서 검증 과정 중에 내부 서버 오류가 발생했습니다\n 관리자에게 문의하세요\n");

//전자서명 오류 정의
shttp_status_map.put("951", "전자서명 오류 입니다.\n전자서명 데이터 제출이 필요한 페이지 입니다\n 현재 브라우저를 닫고, 새로 접속하시기 바랍니다\n");
shttp_status_map.put("952", "전자서명 오류 입니다.\n클라이언트에서 보낸 전자서명 검증에 실패했습니다\n 확인 버튼을 클릭하시어 보안프로그램을 수동설치 하시고 이용하시기 바랍니다.\n|http://img.shinhan.com/shttp/install/7209/down/INIS70.exe");
shttp_status_map.put("953", "전자서명 오류 입니다.\n서버 측 전자서명에 실패했습니다\n 관리자에게 문의하세요\n");
shttp_status_map.put("954", "전자서명 오류 입니다.\n전자서명 값을 저장하는 도중 오류가 발생했습니다\n 관리자에게 문의하세요\n");

function getSFilterMessage(status) {
	var str = shttp_status_map.get(status);
	if (str == null || str == "") return null;
	var arr = str.split("|");

    var retStr = "<WARNING><errorCode value='"+"오류 코드 : "+ status+"'/><msg value='"+arr[0]+"'/>";
	if( arr.length > 1 ){
        retStr = retStr + "<redirectURL value='"+arr[1]+"'/></WARNING>";
    } else {
    	retStr = retStr + "</WARNING>";
    }
    return retStr;
}

/*
function LocationGlobalUrl(){
	var enUrlCk = false;
	var sUrl = location.href;
	if( sUrl.indexOf("/en/") >= 0 || sUrl.indexOf("/jpn/") >= 0 || sUrl.indexOf("/cn/") >= 0){
		enUrlCk = true;
	}
	return enUrlCk;
}
*/
var __Document_Url__ = "";
function setDocumentUrl() {
	var temp = document.location.href;
	var p = temp.indexOf("w2xPath");
	if (p >= 0) __Document_Url__ = temp.substring(p+8);
	if (__Document_Url__ != "") {
		__Document_Url__ = __Document_Url__.substring(0, __Document_Url__.indexOf(".xml")+4);
	}
}
setDocumentUrl();
