/*
 * PayGate OpenPayAPI version 2.0.3
 * last updated at 2008-03-09
 * copyright PayGate Inc.
 */

var debugcount = 1;
var returnpage;
var scriptid = 1;
var livescript;
var currentime;
var validationstatus;
var checkCardquota;
var strConfirmMsg;
var platform;

var saveCardNum;
var apicommonlib;
var jumin;
var r0, r1, r2, r3, r4;
var msg;
var realpan;
var pares;
var errorString = '';
var xpid;
var paymethod;
var goodcurrency;
var cardexpiremonth;
var cardexpireyear;
var cardquota;
var replycode; 
var  replymsg; 
var  cardauthcode; 
var  tid; 
var  mb_serial_no; 
var  receipttoname; 
var  receipttotel; 
var  receipttocountrycode; 
var  cardownernumber; 
var  outbankcode; 
var  outaccountno; 
var  loanSt; 
var  bankcode; 
var  bankaccount; 
var  bankexpyear; 
var  bankexpmonth; 
var  bankexpday; 
var  trnsctn_st; 
var  crd_prfx_no; 
var  mrchnt_no; 
var  mem_no; 
var  trnsctn_dt; 
var  acquire_reqst_dt; 
var  cncl_dt; 
var  sttl_dt; 
var  fromDT; 
var  resultcode; 
var  resultmsg;
var acsurl;
var acssuburl;
var sessid;
var memno;
var confirmpw;
var actionURL;
var xid;
var eci;
var cavv;
var md;
var totalprice;
var remainprice;
var pricecount;

var starttime;
var endtime;

var firstTid;
var tidCount;

var taxflag; 
var taxvatregno; 
var taxcompanyname; 
var taxrepresentative; 
var taxaddr; 
var taxbiztype; 
var taxbizitem; 
var taxdepartment; 
var taxcontactname; 
var taxcontactemail; 
var taxcontactphone; 
var internalPay;
var pgioArray = [];
var trnsctn_st, mb_serial_no, crd_prfx_no, mrchnt_no, mem_no, pay_rslt, trnsctn_dt, acquire_reqst_dt, sttl_dt, cncl_dt, pay_mthd, pay_amt, rmt_from_bnk_cd, rmt_from_accnt_no, crd_tp, crd_no, crd_expr_mm, crd_expr_yyyy, crd_instll_cnt, crd_apprvl_no, usr_id, msg_rcptr, deal_crd_cmpny;
var otherCO = "OFF"; //6809
var kindCSS;

var HTTPHeader = "Accept-Language: ko" + "\n" + 
    "Content-Type: application/x-www-form-urlencoded" + "\n" +
    "Accept-Encoding: gzip, deflate" + "\n" + 
    "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)" + "\n";

var ispguide = 'https://service.paygate.net/img/isp/installIspDwn.html';
var shinHanModule = 'https://service.paygate.net/img/INI2/INI.html'; 
var is_bufferlimit = false;

var remotewin;
var cnt = 0;
var timeout = 600;
var openwintype = null;
var INIplug; 

var AURL, strlength, strstn, strdiv;

var langlib;

var charsetpool = 'UTF-8 EUC-KR Shift-JIS EUC-JP GB2312 BIG5';
var langcodepool = 'KR US JP CN';

document.write('<div id="PGIOheader"></div>');

function detectPlatform() {
	var browser = 'UNKNOWN';
	var os = 'UNKNOWN';	

	// http://www.webreference.com/tools/browser/javascript.html

    var agt=navigator.userAgent.toLowerCase();
    var appVer = navigator.appVersion.toLowerCase();
    
    var is_gecko = ((!is_khtml)&&(navigator.product)&&(navigator.product.toLowerCase()=="gecko"))?true:false;
    var is_fx = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                 (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                 (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                 (is_gecko) && ((navigator.vendor=="Firefox")||(agt.indexOf('firefox')!=-1)));

    var is_opera = (agt.indexOf("opera") != -1);
    var iePos  = appVer.indexOf('msie');  
    var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
    var is_konq = false;
    var kqPos   = agt.indexOf('konqueror');
    if (kqPos !=-1) {                 
       is_konq  = true;
    }                                 
    var is_khtml  = (is_safari || is_konq);
    var is_ie   = ((iePos!=-1) && (!is_opera) && (!is_khtml));

    var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );

	if (is_fx) {
		browser = 'FIREFOX';
	} else if (is_ie) {
		browser = 'MSIE';
		is_bufferlimit = true;
	} else {
		browser = 'ANY';
	}
	
	if (is_win) {
		if(navigator.platform.indexOf('Win32') != -1) {
			if (screen.height == 480 && screen.width == 800) {
				os = 'LGTOZ';
			} else {
				os = 'WIN';
			}
		} else {
			os = 'ANYWIN';
		}
	} else {
		os = 'ANY';
	}
	
	platform = browser + '_' + os;
	return platform;
	
}

function parseResult(jData) {

	Result = jData.ResultSet.Result[0].ResultScreen;
		
	Result = Result.replace(new RegExp("--NEWLINE--",'g'),'\n');
	Result = Result.replace(new RegExp("--DQUOT--",'g'),'"');
	Result = Result.replace(new RegExp("--SQUOT--",'g'),'\'');
	Result = Result.replace(new RegExp("--SEMI--",'g'),';');
	Result = Result.replace(new RegExp("--OPEN--",'g'),'<');
	Result = Result.replace(new RegExp("--CLOSE--",'g'),'>');
	Result = Result.replace(new RegExp("--BOPEN--",'g'),'{');
	Result = Result.replace(new RegExp("--BCLOSE--",'g'),'}');
	Result = Result.replace(new RegExp("--COLON--",'g'),':');
	Result = Result.replace(new RegExp("--QOPEN--",'g'),'[');
	Result = Result.replace(new RegExp("--QCLOSE--",'g'),']');
	Result = Result.replace(new RegExp("--SO--",'g'),'(');
	Result = Result.replace(new RegExp("--SC--",'g'),')');
	Result = Result.replace(new RegExp("--AMP--",'g'),'&');

	return Result;
}

function initPGIOElements(pgioform) {
	if (pgioform == null) pgioform = document.PGIOForm;
	
	pgioArray.splice(0,pgioArray.length);
	
	var elem = pgioform.elements;
	var elemvar;
	for(var i = 0; i < elem.length; i++) {
		if (elem[i].name != '' || elem[i].name != 'undefined') {
			elemvar = elem[i].value;
			if (elemvar == 'undefined') elemvar = '';
			pgioArray[elem[i].name] = elemvar;
		}
	}
}

function doTransaction(form) {
	validationstatus = 1;
	currentime = new Date();
	
	initPGIOElements();
	
	if (getPGIOElement('duplication') == 'on') {
		alert('Duplication Error:' + getPGIOElement('duplication'));
		validationstatus = 0;
	}
	
	if (validationstatus > 0) {
		if (form.name != 'PGIOForm') {
			alert('Invalid PGIOForm name');
			validationstatus = 0;
		}
	}

	defineCharset();
}

function defineCharset() {

	if (getPGIOElement('charset') == '') {
		setPGIOElement('charset', 'EUC-KR');
	} else if (charsetpool.search(getPGIOElement('charset')) < 0) {
		setPGIOElement('charset', 'EUC-KR');
	}
	
	if (getPGIOElement('langcode') == '') {
		setPGIOElement('langcode', 'KR');
	} else if (langcodepool.search(getPGIOElement('langcode')) < 0) {
		setPGIOElement('langcode', 'KR');
	}
	
	continueDoTransaction();
}

function continueDoTransaction() {
	
	if (validationstatus > 0) {	
		if(!document.PGIOForm.elements['mid']){	
			alert("mid not exist");
			validationstatus = 0;
		}		
	}	

	if (validationstatus > 0) genTID();

	if (validationstatus > 0) {	
		if(document.PGIOForm.elements['kindcss']){
			
			if(document.PGIOForm.elements['kindcss'].value == "0"){
				kindCSS = "4139";
				loadLiveStyle(kindCSS,getPGIOElement('mid'));
			}else if(document.PGIOForm.elements['kindcss'].value == "1"){
				kindCSS = "4134";
				loadLiveStyle(kindCSS,getPGIOElement('mid'));			
			}else if(document.PGIOForm.elements['kindcss'].value == "2"){
				kindCSS = "4135";
				loadLiveStyle(kindCSS,getPGIOElement('mid'));			
			}else if(document.PGIOForm.elements['kindcss'].value == "3"){
				kindCSS = "4136";
				loadLiveStyle(kindCSS,getPGIOElement('mid'));			
			}else if(document.PGIOForm.elements['kindcss'].value == "4"){
				kindCSS = "4137";
				loadLiveStyle(kindCSS,getPGIOElement('mid'));			
			}else if(document.PGIOForm.elements['kindcss'].value == "5"){
				kindCSS = "4138";
				loadLiveStyle(kindCSS,getPGIOElement('mid'));
			}else if(document.PGIOForm.elements['kindcss'].value == "no"){	
				loadAPICommon(getPGIOElement('mid'));
			}else{
				kindCSS = "4139";			
				loadLiveStyle(kindCSS,getPGIOElement('mid'));
			}
			
		}else{
			kindCSS = "4139";
			loadLiveStyle(kindCSS,getPGIOElement('mid'));
		}
	}
	
	if (validationstatus > 0) {	
		_uacct = "UA-1286229-1";
		urchinTracker();
	}
}

function getPayProcessURL() {
	
	var url;
	if (getPGIOElement('charset').search('UTF-8') > -1) url = 'https://service.paygate.net/INTL/NewPayProcessS.jsp';
	else if (getPGIOElement('charset').search('EUC-KR') > -1) url = 'https://service.paygate.net/payment/payProcess.jsp';
	else if (getPGIOElement('charset').search('Shift-JIS') > -1) url = 'https://service.paygate.net/payment/JP/payProcessJP.jsp';
	else if (getPGIOElement('charset').search('EUC-JP') > -1) url = 'https://service.paygate.net/EUCJP/NewPayProcessS.jsp';
	else if (getPGIOElement('charset').search('GB2312') > -1) url = 'https://service.paygate.net/payment/CN/payProcessCN.jsp';
	else if (getPGIOElement('charset').search('BIG5') > -1) url = 'https://service.paygate.net/CNB5/NewPayProcessS.jsp';
	else url = 'https://service.paygate.net/payment/payProcess.jsp';
	
	return url;
}

function genTID() {
	var returnvalue;
	
	if (getPGIOElement('tid') == '') {
		clearPGIOElement('tid');
		
		currentime = new Date();
		
		returnvalue = getPGIOElement('mid') + '_' + currentime.getFullYear() + '-' + (currentime.getMonth()+1) + '-' + currentime.getDate() + '.' + currentime.getHours() + currentime.getMinutes() + currentime.getSeconds() + Math.floor(Math.random() * 10000).toString();
		
		setPGIOElement('tid',returnvalue);
		
	}
	
}

function doLanguage(form) {
	
	if (validationstatus > 0) {
		loadAPILanguage(getPGIOElement('langcode'), getPGIOElement('mid'), 'UTF-8');
	}
}

function doAction(form) {
	errorString = '';
	if (validationstatus > 0) {
		validationstatus = validatePGIOForm(document.PGIOForm);
	}
	
	if (validationstatus > 0) {
		setPGIOElement('duplication','on');
	
		getMemberServiceOption();
	}
	
}

function doAction2(form) {
	if (srclocno > 0) {
		loadLiveScript(srclocno,getPGIOElement('mid'), 'UTF-8');
	} 
}

var ms__StoreCnt = 0;
var ms__url;
var ms__urlstring;
var ms__method;
var ms__callbackname;
var ms__uniqueid;
var ms__request_charset;

function DOMRequest(URL, urlstring, method, callbackname, uniqueid, request_charset) {

	strlength = urlstring.length;
	strstn = 1500;
	strdiv = strlength / strstn;
	 
	if (charsetpool.search(request_charset) < 0) request_charset = 'UTF-8';
		
	if (is_bufferlimit && strlength > strstn) {
		if (uniqueid.length < 5) {
			uniqueid = getSessID();
		}
		
		ms__url = URL;
		ms__urlstring = urlstring;
		ms__method = method;
		ms__callbackname = callbackname;
		ms__uniqueid = uniqueid;
		ms__request_charset = request_charset;
		ms__StoreCnt = 0;
		storeMSIEDOM();
	} else {

		DOMRequestAction(URL, urlstring, method, callbackname, uniqueid, request_charset);
	}
}

function storeMSIEDOM() {
	var surlstring = ms__urlstring.substring(0,strstn);
	ms__urlstring = ms__urlstring.replace(surlstring,'');
	var SURL = 'https://api.paygate.net/s.php?' + 'O=' + ms__StoreCnt + '&Q=' + ms__uniqueid + '&S=' + surlstring;
	
	var domreq = document.createElement("script");
	domreq.setAttribute("language", "JavaScript");
	domreq.setAttribute("type", "text/javascript");
	domreq.setAttribute("charset",ms__request_charset);
	domreq.setAttribute("src", SURL);
	domreq.setAttribute("id", "PGIOScript" + scriptid++);
	document.getElementsByTagName('head').item(0).appendChild(domreq);
	
	// call back this.
	// continueStoreOrAction();
}

function continueStoreOrAction() {
	if (ms__urlstring.length > 0) {
		ms__StoreCnt = ms__StoreCnt + 1;
		storeMSIEDOM();
	} else {
		urlstring = "S=ON";
		DOMRequestAction(ms__url, urlstring, ms__method, ms__callbackname, ms__uniqueid, ms__request_charset);
	}
}

function DOMRequestAction(URL, urlstring, method, callbackname, uniqueid, request_charset) {

	if (charsetpool.search(request_charset) < 0) request_charset = 'UTF-8';

	var AURL = "";

	AURL = 'https://api.paygate.net/p.php?';
	
	AURL = AURL +
		'M=' + method + 
		'&C=' + callbackname + 
		'&I=' + getPGIOElement('mid') + 
		'&Q=' + uniqueid +
		'&U=' + encodeURIComponent(URL) + 
		'&' + urlstring;
		
	var domreq = document.createElement("script");
	domreq.setAttribute("language", "JavaScript");
	domreq.setAttribute("type", "text/javascript");
	domreq.setAttribute("charset", request_charset);
	domreq.setAttribute("src", AURL);
	domreq.setAttribute("id", "PGIOScript" + scriptid++);
			
	document.getElementsByTagName('head').item(0).appendChild(domreq);
}

function logAnalytics() {
	AURL = 'https://ssl.google-analytics.com/urchin.js';
	
	var domreq = document.createElement("script");
	domreq.setAttribute("type", "text/javascript");
			
	domreq.setAttribute("src", AURL);
			
	document.getElementsByTagName('head').item(0).appendChild(domreq);
	
}

function DirectDOMRequest(URL, urlstring, method, callbackname, uniqueid, request_charset) {
	if (charsetpool.search(request_charset) < 0) request_charset = 'UTF-8';

	AURL = URL +
		'?callback=' + callbackname +
		'&' + urlstring; 
	
	var domreq = document.createElement("script"); 
	domreq.setAttribute("language", "JavaScript");
	domreq.setAttribute("type", "text/javascript");
	domreq.setAttribute("charset", request_charset);
	domreq.setAttribute("src", AURL);
	domreq.setAttribute("id", "PGIOScript" + scriptid++);
	document.getElementsByTagName('head').item(0).appendChild(domreq);
}

function loadLiveScript(srcno,mid, request_charset) {
	if (charsetpool.search(request_charset) < 0) request_charset = 'UTF-8';

	var srcurl = "https://api.paygate.net/util/getsource.php?srcno=" + srcno + '&mid=' + getPGIOElement('mid') + '&tid=' + getPGIOElement('tid');
	
	if (getPGIOElement('paymethod') == 'card'
	|| getPGIOElement('paymethod') == '100'
	|| getPGIOElement('paymethod') == '101'
	|| getPGIOElement('paymethod') == '102'
	|| getPGIOElement('paymethod') == '103'
	) {
		if(getPGIOElement("cardtype") != "2Z0" &&
		getPGIOElement("cardtype") != "2Y0" &&
		getPGIOElement("cardtype") != "2J0" &&
		getPGIOElement("cardtype") != "2A0"){
			
		}
	}
		
	var livescript = document.createElement("script"); 
	livescript.setAttribute("language", "JavaScript"); 
	livescript.setAttribute("type", "text/javascript"); 
	
	livescript.setAttribute("charset", request_charset);
	
	livescript.setAttribute("src", srcurl); 
	livescript.setAttribute("id", "PGIOScript" + scriptid++); 
	
	document.getElementsByTagName('head').item(0).appendChild(livescript); 

}

function loadLiveStyle(srcno,mid) {
	
	var srcurl = "https://api.paygate.net/util/getsource.php?srcno=" + srcno + '&mid=' + getPGIOElement('mid') + '&tid=' + getPGIOElement('tid');
	
	var livescript = document.createElement("link"); 
	livescript.setAttribute("rel", "stylesheet"); 
	livescript.setAttribute("type", "text/css"); 
	livescript.setAttribute("href", srcurl); 
	livescript.setAttribute("id", "PGIOScript" + scriptid++); 
	
	document.getElementsByTagName('head').item(0).appendChild(livescript);

	loadAPICommon(getPGIOElement('mid'));

}

function verifyReceived(tid, callbacksuccess, callbackfail) {
	var mark = getPGIOElement('replycode');

	actionURL = 'https://service.paygate.net/admin/settle/verifyReceived.jsp';
	urlstring = 'tid=' + getPGIOElement('tid') +
		'&callbacksuccess=' + callbacksuccess +
		'&callbackfail=' + callbackfail;

	DirectDOMRequest(actionURL, urlstring, 'POST', '', sessid, getPGIOElement('charset'));
}

function loadAPICommon(mid) {

	var commonliburl = "https://api.paygate.net/util/getsource.php?srcno=4130&mid=" + getPGIOElement('mid') + '&tid=' + getPGIOElement('tid');
	
	var apicommonlib = document.createElement("script"); 
	apicommonlib.setAttribute("language", "JavaScript"); 
	apicommonlib.setAttribute("type", "text/javascript"); 
		
	apicommonlib.setAttribute("charset", getPGIOElement('charset'));
	apicommonlib.setAttribute("src", commonliburl); 
	apicommonlib.setAttribute("id", "PGIOScript" + scriptid++); 
	document.getElementsByTagName('head').item(0).appendChild(apicommonlib); 
}

function loadAPILanguage(apilangcode, mid, request_charset) {
	
	if (charsetpool.search(request_charset) < 0) {
		reqeust_charset = 'UTF-8';
	}
	
	var srcno;
	if (apilangcode == 'US') {
		srcno = '4131'; // US
	} else if (apilangcode == 'JP') {
		srcno = '4133'; // JP
	} else if (apilangcode == 'CN') {
		srcno = '4129'; // CN
	} else {
		srcno = '4132'; // KR
	}
	
	var langliburl = "https://api.paygate.net/util/getsource.php?srcno=" + srcno + "&mid=" + getPGIOElement('mid') + "&tid=" + getPGIOElement('tid');
	
	var langlib = document.createElement("script"); 
	langlib.setAttribute("language", "JavaScript"); 
	langlib.setAttribute("type", "text/javascript"); 
	langlib.setAttribute("charset", request_charset);
	langlib.setAttribute("src", langliburl); 
	langlib.setAttribute("id", "PGIOScript" + scriptid++); 
	document.getElementsByTagName('head').item(0).appendChild(langlib); 
	// end include
}

function getPGIOElement(varname, formname) {
	if (formname == null) formname = document.PGIOForm;
	
	if (pgioArray[varname]) {
		var pgiovalue = pgioArray[varname];
		if (pgiovalue == 'undefined') pgiovalue = '';
		return pgiovalue;
	} else if (formname.elements[varname]) {
		if(formname.elements[varname].type == "select-one"){
			return formname.elements[varname].value;
		} else {
			if (formname.elements[varname][0]) {
				return formname.elements[varname][0].value;
			} else {
				return formname.elements[varname].value;
			}
		}
	} else {
		return '';
	}
}

function setPGIOElement(varname, varvalue) {
	if (document.PGIOForm.elements[varname]) {
		if (document.PGIOForm.elements[varname][0]) {
			document.PGIOForm.elements[varname][0].value = varvalue;
		} else {
			document.PGIOForm.elements[varname].value = varvalue;
		}
	}
	pgioArray[varname] = varvalue;
}

function changePGIOElement(fromElement, toElement, toValue) {
	if (getPGIOElement(toElement) == '') {
		var tempelement = getPGIOElement(fromElement);
		setPGIOElement(toElement, tempelement);
		setPGIOElement(fromElement, toValue);				
	}
} 

function clearPGIOElement(varname) {
	if (document.PGIOForm.elements[varname]) {
		if (document.PGIOForm.elements[varname][0]) {
			document.PGIOForm.elements[varname][0].value = '';
		} else {
			document.PGIOForm.elements[varname].value = '';
		}
	}
	pgioArray[varname] = '';
}

function displayStatus(msg) {
	if (document.getElementById('PGIOscreen')) {
		document.getElementById('PGIOscreen').innerHTML = msg;
	}
}

platform = detectPlatform();
logAnalytics();

