var unableDecryptMsg = "Unable to decrypt response";
var invalidSignatureMsg = "Invalid signature on the reply. Please do Last Payment Enquiry.";
var corruptedResponseMsg = "Transaction response corrupted";
var timeOutMsg = "Transaction response has been timed out, please try again later.";

var ChineseLang = "2";
var tipExpiryTime = 120;

/***************************************************/
function japSetLanguage(lang)
{
    if (lang==ChineseLang) {
       unableDecryptMsg = "無法解碼";
       invalidSignatureMsg = "在回覆時簽署無效，請複查最近一次繳費詳情。";
       corruptedResponseMsg = "交易訊息未能確認";
       timeOutMsg = "交易進行時間己過，請再嘗試。";
    }
}


function getNL()
{
    if (navigator.appVersion.lastIndexOf('Win') != -1)
       return "\r\n"
    else
       return "\n"
}


function encodeInputLong(data)
{
    var szRC="";
    szRC += "L";
    szRC += data;
    szRC += ";";
    return szRC;
}

function encodeInputStr(data)
{
    var szRC="";
    szRC += "S";
    szRC += data;
    szRC += ";";
    return szRC;
}

function encodeInputNumeric(data)
{
    var szRC;
    szRC = "";
    szRC += "N";
    szRC += data;
    szRC += ";";
    return szRC;
}


function SetServerPK()
{
    //- UAT Secure Server HSM Public Key
    //document.applets[0].setRSAPKey( "AB58F8E8CE926E4112532732EAC94BDA90007EE86330AB9AFB22416E166E303F873A486AEAB475CDEA41AB9C2686376152AE8814D8530EDAC6655366582D5CBE9A669E276051A537A442F94031EF3E047D1A849B41086CC8111279EB2A476101961813609D76307B2129F4F688CE94B6A338148E2013CF561BA5986C6BAE0D85" , "010001" );
    //SS Production Secure Server HSM Public Key
    document.applets[0].setRSAPKey( "A7FDC3BB67BFC941A6782E18BEC36054F94B2D569976D10B416E797C2B080F0105BE98F3805175F074ACDDAC805DC4FEC04C99F5E23EF0C3363428B603F5D43C25177BF9DCA6C3BF310A1D5E2D63BFFD9BBD237317BF55A184982657A36A20999E024F25344B209214F8B9921FC1D443CCC100D8C3EE1C9A148C7CB74E4F4B69" , "010001" );
}


/* for bill payment - Obsoleted */
function DecodeMessage(form)
{
    var fStillValid;
    var szErrorMsg;
    
    fStillValid = true;
    szErrorMsg = "";
    DecodeMessageEx(form,szErrorMsg,fStillValid,form.REPLYMSG.value);
}

/* for last payment enquiry - Obsoleted */
function DecodeEMessage(form)
{
    var fStillValid;
    var szErrorMsg;
    fStillValid = true;
    szErrorMsg = "";
    var szDecData;
    szDecData = form.EDATA.value; 
    DecodeMessageEx(form,szErrorMsg,fStillValid,szDecData);
}


function DecodeMessageEx(form,szErrorMsg,fStillValid,szData)
{
    var timerID;
    var NL = getNL();
    var szReply = szData;
    var iCount = document.applets[0].getResponseParamCount(szReply);
    var i = 0;

    if (iCount <= 0) {
	fStillValid = false;
	szErrorMsg = corruptedResponseMsg
    }

    if (fStillValid) {
	if (!CheckTIP(form, String(document.applets[0].getResponseParam(szReply,0)))) {
	   fStillValid = false;
  	   szErrorMsg = timeOutMsg;
	}
    }	

    if (fStillValid) {
	var szResponseItem;
	szResponseItem = "";
	
	for (i = 1; i < iCount; i++) {
	   szResponseItem = String(document.applets[0].getResponseParam(szReply,i));
	  
	   if (i!=iCount-1) {
	      DisplayFormater(i, szResponseItem);
	   }
	   else {
	      DisplayFormater(0, szResponseItem);
	   }
	}	
    }

    if (!fStillValid) {
	ErrorFormater(szErrorMsg);
    }
}


function ValidateSignature(form, szMsg)
{
    var szSignature;
    SetServerPK();
    szMsg = String(szMsg);
    szSignature = form.SIGNATURE.value;
    
    if (document.applets[0].validateSignature( szMsg, szSignature ) )
	return true;
    else
	return false;
		
}


function CheckTIP(form, szTIP)
{
    szTIP = String(szTIP);
    if (document.applets[0].checkTIP(szTIP, tipExpiryTime) )
	return true;
    else
	return false;
}


function cformatDate(inputDate) {
	var outputDate = inputDate.substring(0, 4) + "年" + inputDate.substring(4,6)+"月" + inputDate.substring(6, 8) + "日 ";
	return outputDate;
}

function formatDate(inputDate) 
{
    var outputMonth = "";
    
    switch (inputDate.substring(4,6)) 
    {
	case "01": outputMonth = "Jan ";
          	   break;
      	case "02": outputMonth = "Feb ";
                   break;
	case "03": outputMonth = "Mar ";
                   break;
	case "04": outputMonth = "Apr ";
                   break;
	case "05": outputMonth = "May ";
                   break;
	case "06": outputMonth = "Jun ";
                   break;
	case "07": outputMonth = "Jul ";
                   break;
	case "08": outputMonth = "Aug ";
                   break;
	case "09": outputMonth = "Sep ";
                   break;
	case "10": outputMonth = "Oct ";
                   break;
	case "11": outputMonth = "Nov ";
                   break;
	case "12": outputMonth = "Dec ";
                   break;
    }	       
    var outputDate = inputDate.substring(6, 8) + " " + outputMonth + " "  + inputDate.substring(0, 4);
    return outputDate;
}


function formatDateShort(inputDate) 
{
    var outputMonth = "";
    
    switch (inputDate.substring(4,6)) 
    {
	case "01": outputMonth = "Jan ";
          	   break;
      	case "02": outputMonth = "Feb ";
                   break;
	case "03": outputMonth = "Mar ";
                   break;
	case "04": outputMonth = "Apr ";
                   break;
	case "05": outputMonth = "May ";
                   break;
	case "06": outputMonth = "Jun ";
                   break;
	case "07": outputMonth = "Jul ";
                   break;
	case "08": outputMonth = "Aug ";
                   break;
	case "09": outputMonth = "Sep ";
                   break;
	case "10": outputMonth = "Oct ";
                   break;
	case "11": outputMonth = "Nov ";
                   break;
	case "12": outputMonth = "Dec ";
                   break;
    }	       
    var outputDate = inputDate.substring(6, 8) + " " + outputMonth + inputDate.substring(0, 4);
    return outputDate;
}


function leftTrim0(szString)
{
    var k=0;
    var szTempString = szString;
   
    for (k=0;k<szString.length-1;k++) {
	if (szString.substring(k,k+1)=="0")
	   szTempString = szString.substring(k+1);
	else
	   break;
    }
    return szTempString;
}
