var CRNDSIZE					= "24";
var strPersonalCertKey			= "3";			
var strRealNameCertKey			= "4";			

var strDelimeter				= "!#!";		
var strDataDelimeter 			= "!@!";		
var strHttpURL_G				= "http://secure.nuguya.com";
var strHttpsURL_G				= "https://secure.nuguya.com";
var strSafeBlockExptUrl			= strHttpsURL_G + "/nuguya/realname/rlnmSafeBlockExpt.do";
var strCertKeyServiceUrl		= strHttpsURL_G + "/nuguya/certkey/service.do";					
var strSendConfirmUrl			= strHttpsURL_G + "/nuguya/certkey/personalcertkey/IpinSendConfirm.do";
var strNoticeUrl				= strHttpsURL_G + "/nuguya/certkey/notice.do";

function checkUtilSelf(){
	return "Loaded";
}

function encode( data ){
	return encodeURIComponent( data );
}

function decode( data ){
	return decodeURIComponent( data );
}

function trimPKCS5Padding( data ){
	return data.replace( /[\1\2\3\4\5\6\7]/g, '\0' );
}

function makeEncryptInfo( dataValues ){
	var CRndValue = cryptoObject.getRandomKey( CRNDSIZE );
	var CDESValue = "";

	if ( dataValues.length == 0 ){
		var err = new Error();
		err.message = "makeEncryptInfo";
		err.description = getCheckMessage( "S96" );
		throw err;
	}

	var nIndex = 0;
	for( nIndex = 0; nIndex < dataValues.length - 1; nIndex++ ){
		CDESValue += dataValues[nIndex] + strDelimeter;
	}
	CDESValue += dataValues[nIndex];
	CDESValue = cryptoObject.encode64( CRndValue + strDelimeter + cryptoObject.des( CRndValue, CDESValue, 1, 1, CRndValue ) );

	return CDESValue;
}

function makeEncryptInfo2( dataValues, realkey ){
	var CRndValue = cryptoObject.getRandomKey( CRNDSIZE );
	var CDESValue = "";

	if ( dataValues.length == 0 ){
		var err = new Error();
		err.message = "makeEncryptInfo";
		err.description = getCheckMessage( "S96" );
		throw err;
	}

	var nIndex = 0;
	for( nIndex = 0; nIndex < dataValues.length - 1; nIndex++ ){
		CDESValue += dataValues[nIndex] + strDelimeter;
	}
	CDESValue += dataValues[nIndex];

	CDESValue = cryptoObject.encode64( CRndValue + strDelimeter +
		cryptoObject.des( realkey, CDESValue, 1, 1, realkey ) );

	return CDESValue;
}

function makeProcessInfo( dataObject ){
	return makeEncryptInfo( new Array( dataObject.niceId, dataObject.pingInfo, dataObject.orderNo, dataObject.trCd, dataObject.inqRsn, dataObject.returnUrl, dataObject.validTerm, encode( dataObject.niceNm ), dataObject.resIdNo, encode(dataObject.userId), dataObject.SIKey ) );
}

function makeCertKeyInfo( strNiceId, strPingInfo, strOrderNo, strInqRsn, strReturnUrl ){
	return makeEncryptInfo( new Array( strNiceId, strPingInfo, strOrderNo, strInqRsn, strReturnUrl, "##" ) );
}

function makeCertKeyInfoPA( strNiceId, strPingInfo, strOrderNo, strInqRsn, strReturnUrl, strSIKey ){
	return makeEncryptInfo( new Array( strNiceId, strPingInfo, strOrderNo, strInqRsn, strReturnUrl, strSIKey ) );
}

function makeCertKeyInfoPADup( strNiceId, strPingInfo, strOrderNo, strInqRsn, strReturnUrl, strSIKey, strUserCall, strJobInfo ){
	return makeEncryptInfo( new Array( strNiceId, strPingInfo, strOrderNo, strInqRsn, strReturnUrl, strSIKey, strUserCall ) );
}

function makeCertKeyReturnInfo( dataObject ){
	return makeEncryptInfo( new Array( dataObject.niceId, dataObject.orderNo, dataObject.trCd, dataObject.retCd, dataObject.retDtlCd, encode( dataObject.message ), dataObject.PAKey, encode( dataObject.niceNm ), dataObject.birthYear, dataObject.sex,dataObject.dupeInfo, dataObject.LIKey, dataObject.coInfo, dataObject.foreigner) );
}

function makeIpinReturnInfo( dataObject ){
	return makeEncryptInfo2( new Array( dataObject.niceId, dataObject.orderNo, dataObject.trCd, dataObject.retCd, dataObject.retDtlCd, encode( dataObject.message ), dataObject.PAKey, encode( dataObject.niceNm ), dataObject.birthYear, dataObject.sex,dataObject.LIKey, dataObject.ageGroup,dataObject.foreigner, dataObject.sendTime, dataObject.CIKey), dataObject.authKeyStr);
}

function makeSendInfo( strNm, strNo, strRsn, strForeigner ){
	return makeEncryptInfo( new Array( encode( strNm ), strNo, strRsn, strForeigner ) );
}

function makeBizSendInfo( strNo, strNm, strRsn, strInfoFlag ){
	return makeEncryptInfo( new Array( strNo, encode( strNm ), strRsn, strInfoFlag ) );
}

function makAddBizSendInfo( strNo, strNm, strRsn, strInfoFlag, addGb, bizNm  ){
	return makeEncryptInfo( new Array( strNo, encode( strNm ), strRsn, strInfoFlag, addGb, encode( bizNm ) ) );
}

function setCoInqRsn( inqRsn ){
	var optionText = "회원가입";
	var optionValue = "01";
	var textArray = optionText.split( ";" );
	var valueArray = optionValue.split( ";" );
	var nIndex = 0;

	for( nIndex = 0; nIndex < valueArray.length; nIndex++ ){
		var oOption = document.createElement( "OPTION" );
		inqRsn.options.add( oOption );
		oOption.innerText = textArray[nIndex];
		oOption.value = valueArray[nIndex];
	}
}

function setInqRsn( inqRsn ){
	var optionText = "회원가입;기존회원 확인;성인인증;비회원 확인;기타 사유";
	var optionValue = "10;20;30;40;90";
	var textArray = optionText.split( ";" );
	var valueArray = optionValue.split( ";" );
	var nIndex = 0;

	for( nIndex = 0; nIndex < valueArray.length; nIndex++ )
	{
		var oOption = document.createElement( "OPTION" );
		inqRsn.options.add( oOption );
		oOption.innerText = textArray[nIndex];
		oOption.value = valueArray[nIndex];
	}
}

function setForeigner( foreigner ){
	var optionText = "내국인;외국인";
	var optionValue = "1;2";
	var textArray = optionText.split( ";" );
	var valueArray = optionValue.split( ";" );
	var nIndex = 0;

	for( nIndex = 0; nIndex < valueArray.length; nIndex++ ){
		var oOption = document.createElement( "OPTION" );
		foreigner.options.add( oOption );
		oOption.innerText = textArray[nIndex];
		oOption.value = valueArray[nIndex];
	}
}

function getOrderNo( digits ){
	if ( digits < 20 ){
		alert( getMessage( "S11" ) );
		return;
	}
	var strOrderNo = new String( getYYYYMMDDHHMMSS() );
	strOrderNo = strOrderNo + cryptoObject.getRandomKey( digits - strOrderNo.length );
	return strOrderNo;
}

function getYYYYMMDDHHMMSSsss(){
	var today = new Date();
	var strDateTime = (today.getFullYear() * 100 + today.getMonth() + 1) * 100;
	strDateTime = ( strDateTime + today.getDate() ) * 100;
	strDateTime = ( strDateTime + today.getHours() ) * 100;
	strDateTime = ( strDateTime + today.getMinutes() ) * 100;
	strDateTime = ( strDateTime + today.getSeconds() ) * 1000;
	strDateTime = strDateTime + today.getMilliseconds();

	return strDateTime;
}

function getYYYYMMDDHHMMSS(){
	var today = new Date();
	var strDateTime = (today.getFullYear() * 100 + today.getMonth() + 1) * 100;
	strDateTime = ( strDateTime + today.getDate() ) * 100;
	strDateTime = ( strDateTime + today.getHours() ) * 100;
	strDateTime = ( strDateTime + today.getMinutes() ) * 100;
	strDateTime = strDateTime + today.getSeconds();

	return strDateTime;
}

function getYYYYMMDD(){
	var today = new Date();
	var strDate = (today.getFullYear() * 100 + today.getMonth() + 1) * 100;
	strDate = strDate + today.getDate();

	return strDate;
}

function getHHMMSSsss(){
	var today = new Date();
	var strTime = today.getHours() * 100;
	strTime = ( strTime + today.getMinutes() ) * 100;
	strTime = ( strTime + today.getSeconds() ) * 1000;
	strTime = strTime + today.getMilliseconds();

	return strTime;
}

function getHHMMSS(){
	var today = new Date();
	var strTime = today.getHours() * 100;
	strTime = ( strTime + today.getMinutes() ) * 100;
	strTime = strTime + today.getSeconds();

	return strTime;
}

function checkString( srcString ){
	var tmpChar;
	for( nIndex = 0; nIndex < srcString.length; nIndex++ )	{
		tmpChar = srcString.charAt( nIndex );
		if ( ! ( (tmpChar < '0' || tmpChar > '9') && (tmpChar < 'a' || tmpChar > 'z') && (tmpChar < 'A' || tmpChar > 'Z') ) ) { return false; }
	}
	return true;
}

function checkNumeric( srcNumeric ){
	if ( srcNumeric.Number == NaN ) return false;
	return true;
}

function checkResIdNo( srcNumeric ){
	var sum = 0;
	if ( srcNumeric.length < 13 ) return false;
	for( nIndex = 0; nIndex < 8; nIndex++ ) { sum += srcNumeric.substring( nIndex, nIndex + 1 ) * ( nIndex + 2 ); }
	for( nIndex = 8; nIndex < 12; nIndex++ ) { sum += srcNumeric.substring( nIndex, nIndex + 1 ) * ( nIndex - 6 ); }
	sum = 11 - ( sum % 11 );
	if ( sum >= 10 ) { sum -= 10; }
	if ( srcNumeric.substring( 12, 13 ) != sum || ( srcNumeric.substring( 6, 7 ) != 1 && srcNumeric.substring( 6, 7 ) != 2 ) ) { return false; }
	return true;
}

function checkBizNo( srcNumeric ){
	var checkID = new Array(1, 3, 7, 1, 3, 7, 1, 3, 5, 1);
	var i, chkSum=0, c2, remander;
	for( i = 0; i <= 7; i++ ) chkSum += checkID[i] * srcNumeric.charAt(i);
	c2 = "0" + ( checkID[8] * srcNumeric.charAt(8) );
	c2 = c2.substring( c2.length - 2, c2.length );
	chkSum += Math.floor( c2.charAt(0) ) + Math.floor( c2.charAt(1) );
	remander = (10 - (chkSum % 10)) % 10 ;
	if (Math.floor(srcNumeric.charAt(9)) == remander)
		return true;
	else
		return false;
}

function checkForeignNo( srcNumeric ){
	var ch = srcNumeric.substring( 11, 12 );
	if ( ch != 7 && ch != 8 && ch != 9 )
		return false;
	else
		return true;
}

function checkForeignNm( srcNm ){
	var chr = srcNm.split( "\\" );
	var strChar = chr[chr.length - 1];

	if ( (/[\s]/).test( strChar ) )	{
		return false;
	}
	for( nIndex = 0; nIndex < strChar.length; nIndex++ ){
		chr = strChar.substr( nIndex, 1 );
		if ( chr >= 'a' && chr <= 'z' )
			return false;
	}
	return true;
}

function getRandomKey( digits ){
	var rndKey, nIndex;
	rndKey = "";
	do{
		nIndex = Math.floor( Math.random() * cryptoObject.KeyStr.length ) + 1;
		rndKey = rndKey + cryptoObject.KeyStr.substr( nIndex, 1 );
	}
	while ( rndKey.length < digits )
	return rndKey;
}

function endProcess(){
	window.close();
	opener.focus();
}

function goReturnPage(){
	var form = document.getElementById( "resForm" );
	if(oivsObject.identifydata != ""){
		form.IDENTIFYDATA.value = oivsObject.identifydata ;
		form.RETURNURL.value = oivsObject.pareturnUrl;
	}else{
		form.SendInfo.value = oivsObject.clientData;
	}
	form.action = oivsObject.returnUrl;
	form.submit();
}

function goSafeBlockExpt(){
	var popupWindow = window.open("", "popupSafeBlockExpt", "top=100, left=200, status=1, width=417, height=352" );
	popupWindow.document.location=strSafeBlockExptUrl;
	popupWindow.focus();
	return;
}

function goSafeBlockExptSelf(){
	window.resizeTo( 425, 380 );
	document.location = strSafeBlockExptUrl;
	return;
}

function goSubmitUrl( encData, formObject, targetUrl ){
	formObject.SendInfo.value = encData;
	formObject.action = targetUrl;
	formObject.submit();
}


