var EnglishLang = "1";
var ChineseLang = "2";
var SimchinLang = "3";
var selectedLanguage = EnglishLang;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var charSet="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&'()*+,-./:<=>?@\^_`~ ";
var whitespace = " \t\n\r";
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."
var mInteger  = " field must be an integer. Please re-enter it now."
var mAmount = " field must be in dollar (e.g. 1234 for $1,234.50). Please re-enter it now."
var mAmount_cents = " field must be in cents (e.g. 50 for $1,234.50). Please re-enter it now."
var mLength1 = " field must be "
var mLength2 = " digit long. Please re-enter it now."
var sPPSAccountNumber   = "PPS Account Number"
var sMerchantCode       = "Merchant Code"
var sBillNumber         = "Bill Number"
var sMerchantName       = "Merchant Name"
var sBillNo             = "Bill Number"
var sInitPIN		= "PPS Access Code"
var sPIN                = "PPS Internet Password"
var sPaymentAmount      = "Payment Amount"
var iPPSAccountNumber   = "This field must be a valid PPS account number. Please re-enter it now."
var iInteger            = "This field must be an integer. Please re-enter it now."
var iInternetPassword   = "PPS Internet Password must be 8 to 28 alphanumeric characters. Please re-enter it now. "		//SS++
var iChangeInitPassword = "You cannot use your 5-digit PPS Phone Password to process transaction in this site.  Please refer 'HOW TO SET UP PPS INTERNET PASSWORD' for details."
var iChangePGPassword =   iInternetPassword + "If you have not changed your 5-digit PPS Access Code to Internet Password yet, please set up a PPS Internet Password in designated PPS Registration Terminal."	
var pEntryPrompt = "Please enter a "
var pPaymentAmount      = "Payment Amount, maximum 2 decimal places are allowed (e.g. $1234, $1234.50)"
var pPaymentAmount_cents= "Payment Amount in cents (e.g. 50 for $1,234.50)"
var pRegister           = "To register a bill number"
var pPayment            = "To pay a bill"
var pEnquire            = "To display the registered bill number"
var pEnquireLast        = "To review the last payment details for a particular bill"
var pCancel             = "To cancel a registered bill number"
var pPayForm            = "Click a bill number to display the payment form"
var pPPSAccountNumber   = "PPS Account Number"
var pMerchantCode       = "Merchant Code. Leading zero is not required."
var pBillNumber         = "Bill Number"
var pMerchantName       = "Please select a Merchant Name"
var pPIN                = "Please enter a PPS Internet Password"
var defaultEmptyOK = false

function isEmpty(s) {
	return ((s == null) || (s.length == 0))
}

function isWhitespace (s){
	var i;

    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function stripWhitespace (s) {
	return stripCharsInBag (s, whitespace)
}

function stripInitialWhitespace (s) {
	var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
		i++;
    return s.substring (i, s.length);
}

function isValidEnglishName (s) {
	var i;

    if (isEmpty(s))
		if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
		else return (isAlphabetic.arguments[1] == true);

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (!isLetter(c) && (c !=" ")) return false;
    }
    return true;
}

function isLetter (c) {
	return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isDigit (c) {
	return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c) {
	return (isLetter(c) || isDigit(c))
}

function isAlphabetic (s) {
	var i;

    if (isEmpty(s))
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (!isLetter(c))
        return false;
    }
    return true;
}

function isAlphanumeric (s) {
	var i;

    if (isEmpty(s))
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }
    return true;
}

function isInteger (s) {
	var i;

    if (isEmpty(s))
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}

function isSignedInteger (s) {
	if (isEmpty(s))
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;

        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}

function reformat (s) {
	var arg;
    var sPos = 0;
    var resultString = "";

    for (var i = 1; i < reformat.arguments.length; i++) {
       arg = reformat.arguments[i];
       if (i % 2 == 1) resultString += arg;
       else {
           resultString += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return resultString;
}

function isPositiveInteger (s) {
	var secondArg = defaultEmptyOK;

    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];

    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}

function prompt (s) {
	window.status = s
}

function promptEntry (s) {
	window.status = pEntryPrompt + s
}

function promptString (s) {
	window.status = s
}

function warnEmpty (theField, s) {
	theField.focus()
    theField.select()
    alert(mPrefix + s + mSuffix)
    return false
}

function warnInvalid (theField, s) {
	theField.focus()
    theField.select()
    alert(s)
    return false
}

function checkString (theField, s, emptyOK) {
    if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value))
       return warnEmpty (theField, s);
    else return true;
}

function checkInteger (theField, s, emptyOK) {
	if (checkInteger.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value))
       return warnEmpty (theField, s);
    if (!isInteger(theField.value, false))
       return warnInvalid (theField, s + mInteger);
    else return true;
}

function checkLength(theField, s, length) {
	if (theField.value.length != length)
	return warnInvalid (theField, s + mLength1 + length + mLength2);
    else return true;
}

function checkAcctNumber(accountNumber) {
    return ( checkLength(accountNumber, sPPSAccountNumber, 8) &&
    		 checkString(accountNumber, sPPSAccountNumber) &&
		 checkInteger(accountNumber, sPPSAccountNumber) )
}

function checkInitPIN(pin) {
    return ( checkLength(pin, sInitPIN, 5) &&
    		 checkString(pin, sInitPIN) &&
		 checkInteger(pin, sInitPIN) )
}

function checkNewPIN(pin) {
	if (isEmpty(pin.value)) 
	return warnEmpty (pin, sPIN);

	if (pin.value.length < 8) {
		return warnInvalid(pin, iInternetPassword);
	} 
	if (pin.value.length > 28) {
		return warnInvalid(pin, iInternetPassword);
	}
	if (!isAlphanumeric(pin.value)) {
		return warnInvalid(pin, iInternetPassword)
	}

	return true
}

function checkPIN(pin) {
    if (isEmpty(pin.value)) return warnEmpty (pin, sPIN);
    if (pin.value.length == 5) {
		return warnInvalid(pin, iChangeInitPassword);
    } 

	if (pin.value.length < 8) {
		return warnInvalid(pin, iInternetPassword);
	} 
	if (pin.value.length > 28) {
		return warnInvalid(pin, iInternetPassword);
	} 
	if (!isAlphanumeric(pin.value)) {
		return warnInvalid(pin, iInternetPassword)
	}
	return true;
}

function checkPGPIN(pin,language) {
	if (isEmpty(pin.value)) return warnEmpty (pin, sPIN);

	if (pin.value.length < 8) {
		return warnInvalid(pin, iInternetPassword);
	} 
	if (pin.value.length > 28) {
		return warnInvalid(pin, iInternetPassword);
	}
	if (!isAlphanumeric(pin.value)) {
		return warnInvalid(pin, iInternetPassword)
	}
	return true;
}

function setLanguage(lang) {
	selectedLanguage = lang;
	if (lang == EnglishLang) {
		mPrefix = "You did not enter a value into the "
		mSuffix = " field. This is a required field. Please enter it now."
		mInteger  = " field must be an integer. Please re-enter it now."
		mAmount = " field must be in dollar. Please re-enter it now."
		mAmount_cents = " field must be in cents. Please re-enter it now."
		mLength1 = " field must be "
		mLength2 = " digit long. Please re-enter it now."

		sPPSAccountNumber   = "PPS Account Number"
		sMerchantCode       = "Merchant Code"
		sBillNumber         = "Bill Number"
		sMerchantName       = "Merchant Name"
		sBillNo             = "Bill Number"
		sPIN                = "PPS Internet Password"
		sPaymentAmount      = "Payment Amount"
		iPPSAccountNumber   = "This field must be a valid PPS account number. Please re-enter it now."
		iInteger            = "This field must be an integer. Please re-enter it now."
		iInternetPassword   = "PPS Internet Password must be 8 to 28 alphanumeric characters. Please re-enter it now. "		//SS++
		iChangeInitPassword = "You cannot use your 5-digit PPS Phone Password to process transaction in this site.  Please refer 'HOW TO SET UP PPS INTERNET PASSWORD' for details."
		iChangePGPassword =   iInternetPassword + "If you have not changed your 5-digit PPS Access Code to Internet Password yet, please set up a PPS Internet Password in designated PPS Registration Terminal."	
		pEntryPrompt        = "Please enter a "
		pPaymentAmount      = "Payment Amount in dollar (e.g. 1234 for $1,234.50)"
		pPaymentAmount_cents= "Payment Amount in cents (e.g. 50 for $1,234.50)"
		pRegister           = "To register a bill number"
		pPayment            = "To pay a bill"
		pEnquire            = "To display the registered bill number"
		pEnquireLast        = "To review the last payment details for a particular bill"
		pCancel             = "To cancel a registered bill number"
		pPayForm            = "Click a bill number to display the payment form"
		pPPSAccountNumber   = "PPS Account Number"
		pMerchantCode       = "Merchant Code. Leading zero is not required."
		pBillNumber         = "Bill Number"
		pMerchantName       = "Please select a Merchant Name"
		pPIN                = "Please enter a PPS Internet Password"
	} else {
		if (lang == ChineseLang) {
			mPrefix = "徽⊿Τ硂"
			mSuffix = "逆恶┮斗戈叫穝块"
			mInteger  = "逆ゲ斗琌俱计叫穝块"
			mAmount = "逆ゲ斗琌じ(ㄒ: 1234  $1,234.50)叫穝块"
			mAmount_cents = "逆ゲ斗琌à(ㄒ: 50  $1,234.50)叫穝块"
			mLength1 = "逆ゲ斗琌"
			mLength2 = "叫穝块"
			sPPSAccountNumber   = "煤禣艶め腹絏。计 )"
			sMerchantCode       = "坝め絪腹"
			sBillNumber         = "姐虫腹絏"
			sMerchantName       = "坝め嘿"
			sBillNo             = "姐虫腹絏"
			sInitPIN            = "煤禣艶盞絏。き计·"
			sPIN                = "煤禣艶呼盞絏"
			sPaymentAmount      = "煤肂"
			iPPSAccountNumber   = "逆ゲ斗琌Τ煤禣艶め腹絏叫穝块"
			iInteger            = "逆ゲ斗琌俱计叫穝块"
			iInternetPassword   = "煤禣艶呼盞絏ゲ斗琌8-28ダ┪/の计叫穝块"		
			iChangeInitPassword = "徽⒋计煤禣艶筿杠盞絏ぃ硂呼秈︽ユ叫把σ ' 砞﹚煤禣艶呼盞絏 ' 琩高冈薄"
			iChangePGPassword =   "徽┮块ぇ煤禣艶呼盞絏惠璶ぼ璣ゅダ┪/の计い丁ぃΤ璝徽ゼэ煤禣艶呼穝盞絏叫﹚煤禣艶沧狠诀砞﹚煤禣艶呼盞絏硂呼秈︽ユ"
			pEntryPrompt        = "叫块"
			pPaymentAmount      = "煤肂ゲ斗琌じ(ㄒ: 1234  $1,234.50)"
			pPaymentAmount_cents= "煤肂ゲ斗琌à(ㄒ: 50  $1,234.50)"
			pRegister           = "璶祅癘姐虫腹絏"
			pPayment            = "璶煤ユ姐虫"
			pEnquire            = "璶陪ボ┮祅癘ぇ姐虫腹絏"
			pEnquireLast        = "璶滦琩姐虫ぇ程Ω煤禣冈薄"
			pCancel             = "璶┮祅癘ぇ姐虫腹絏"
			pPayForm            = "璶陪ボ煤禣叫ㄤい姐虫腹絏"
			pPPSAccountNumber   = "煤禣艶め腹絏( 计 )"
			pMerchantCode       = "坝め絪腹"
			pBillNumber         = "姐虫腹絏"
			pMerchantName       = "叫匡拒坝め嘿"
			pPIN                = "叫块煤禣艶呼盞絏"
		} else {
			mPrefix = "阁下没有在这"
			mSuffix = "栏填上所须资料，请重新输入。"
			mInteger  = "栏必须是一个整数。请重新输入。"
			mAmount = "栏必须是元(例: 1234 代表 $1,234.50)。请重新输入。"
			mAmount_cents = "栏必须是角(例: 50 代表 $1,234.50)。请重新输入。"
			mLength1 = "栏必须是"
			mLength2 = "位长。请重新输入。"
			sPPSAccountNumber   = "缴费灵户口号码［八位数字 )"
			sMerchantCode       = "商户编号"
			sBillNumber         = "账单号码"
			sMerchantName       = "商户名称"
			sBillNo             = "账单号码"
			sInitPIN            = "缴费灵密码［五位数字］"
			sPIN                = "缴费灵网上密码"
			sPaymentAmount      = "缴付金额"
			iPPSAccountNumber   = "此栏必须是一个有效的缴费灵户口号码。请重新输入。"
			iInteger            = "此栏必须是一个整数。请重新输入。"
			iInternetPassword   = "缴费灵网上密码必须是8-28位字母或/及数字，请重新输入。"		
			iChangeInitPassword = "阁下的５位数字缴费灵电话密码并不可在这网站进行交易。请参考 ' 如何设定缴费灵网上密码 ' 查询详情。"
			iChangePGPassword =   "阁下所输入之缴费灵网上密码需要八至廿八个位的英文字母或/及数字中间不能有空位，倘若阁下并未更改缴费灵网上新密码，请先到指定的缴费灵终端机设定缴费灵网上密码才可在这网站进行交易。"
			pEntryPrompt        = "请输入"
			pPaymentAmount      = "缴付金额必须是元(例: 1234 代表 $1,234.50)"
			pPaymentAmount_cents= "缴付金额必须是角(例: 50 代表 $1,234.50)"
			pRegister           = "要登记一个账单号码"
			pPayment            = "要缴交账单"
			pEnquire            = "要显示所登记之账单号码"
			pEnquireLast        = "要覆查账单之最近一次缴费详情"
			pCancel             = "要取消所登记之账单号码"
			pPayForm            = "要显示缴费表，请「按」其中一个账单号码"
			pPPSAccountNumber   = "缴费灵户口号码( 八位数字 )"
			pMerchantCode       = "商户编号"
			pBillNumber         = "账单号码"
			pMerchantName       = "请选择一个商户名称"
			pPIN                = "请输入缴费灵网上密码"
		}
	}
}

function errorMsg(obj,msg) {
	alert(msg);
	if ( obj != null )
		obj.focus();
	return false;	
}

function isSupportedChar(str) {
	for (var i=0; i<str.length; i++) {
		temp = "" + str.substring(i, i + 1);
		if (charSet.indexOf(temp) == -1)
			return false
	}
	return true;
}

function isAllDigit(str) {
	charset = "0123456789";
	var result = true;

	for (var i=0;i<str.length;i++) {
		if (charset.indexOf(str.substr(i,1))<0) {
			result = false;
			break;
		}
	}
 	return result;
}

function CheckValidSign(str) {
	str = trim(str);
	if ( str.length > 0 ) {
		if (str.indexOf('{')>=0 ||
			str.indexOf('}')>=0 ||
			str.indexOf('[')>=0 ||
			str.indexOf(']')>=0 ||
			str.indexOf('<')>=0 ||
			str.indexOf('>')>=0 ||
			str.indexOf('|')>=0 ||
			str.indexOf(';')>=0 ||
			str.indexOf('&')>=0 ||
			str.indexOf('^')>=0 ||
			str.indexOf('\"')>=0 ||
			str.indexOf('\\')>=0 ||
			str.indexOf('=')>=0 )
		return false;
	}
	return true;
}
