// 禁則文字列
// 複数の禁則文字列を設定する場合はパイプ | で区切ること。
var keepOutString = ",";
var flgKeepOutString = 0;

/**
 * 引数で与えられた文字列が指定した制限バイト数以内であるか否かを計算します。
 *
 * @author 上海SPO ANDREW
 * @param aString チェックする文字列
 * @param aByte 制限バイト数
 * @return true:制限バイト数以内 false:制限バイト数を超えている場合
 */
function checkByte(aString, aByte){
	if (countByte(aString) <= aByte) {
		return(true);
	} else return(false);
}

/**
 * 引数で与えられた文字列のバイト数を計算します。
 * 
 * @author 上海SPO ANDREW
 * @param aString チェックする文字列
 * @return 文字列のバイト数
 */
function countByte(aString){
	var count = 0;

	for (var i = 0; i < aString.length; ++i) {
		var sub = aString.substring(i, i + 1);

		if (isZenkaku(sub)) count += 2;
		else count += 1;
	}

	return count;
}

/**
 * 引数で与えられた文字列に全角文字が存在するか否かをチェックします。
 *
 * @author 上海SPO ANDREW
 * @param aString チェックする文字列
 * @return true: false:
 */
function isZenkaku(aString) {
	for (var i = 0; i < aString.length; ++i) {
		var c = aString.charCodeAt(i);

		if (c < 256 || (c >= 0xff61 && c <= 0xff9f)) return false;
	}

	return true;
}

/**
 * あるオブジェクトの文字列は、指定したバイトでの長さに変更すること
 *
 * @author 上海SPO ANDREW
 * @param aId
 * @param aByte
 * @param aMsg
 */
var hasDisplayedMsg = false;
function checkInput(aId, aByte, aMsg){
	var elem = document.getElementById(aId);
	var str = elem.value;
	var countByte = 0;
	var countText = 0;

	for(var i = 0; i < str.length; i++) {
		var sub = str.substring(i, i + 1);

		if (isZenkaku(sub)) countByte += 2;
		else countByte += 1;

		if (countByte > aByte) {
			aMsg = aMsg.replace(":arg0", aByte / 2);
			aMsg = aMsg.replace(":arg1", aByte);
			if( !hasDisplayedMsg)
			{
				hasDisplayedMsg = true;
				alert(aMsg);
			}
			hasDisplayedMsg = false;

			elem.value = str.substring(0, countText);
			event.keyCode = 0;
			
			return;
		} else countText++;
	}
}

/**
 * HTMLエンコーディング処理を行います。
 *
 * @author 上海SPO ANDREW
 * @param aString エンコードする文字列
 */
function encodeHTML(aString) {
	aString = aString.replaceAll("&", "&amp;");
    aString = aString.replaceAll("\"","&quot;");
    aString = aString.replaceAll("<", "&lt;");
    aString = aString.replaceAll(">", "&gt;");
    aString = aString.replaceAll(" ", "&nbsp;");       

	return(aString);
}

/**
 * 引数で与えられた文字列の前後の空白を削除した文字列を取得します。
 *
 * @author 上海SPO ANDREW
 * @param aString チェックする文字列
 */
function trim(aString) {
	if (aString == null || aString.length == 0) return "";

	while (aString.substring(0, 1) == " " || 
				 aString.substring(0, 1) == "　" || 
				 aString.substring(0, 1) == "\u3000") {
		aString = aString.substring(1, aString.length);
	}

	while (aString.substring(aString.length - 1, aString.length) == " " || 
				 aString.substring(aString.length - 1, aString.length) == "　" ||
				 aString.substring(aString.length - 1, aString.length) == "\u3000") {
		aString = aString.substring(0, aString.length - 1);
	}
	
	return aString;
}

/**
 * 引数で与えられた文字列の右側の空白を削除します。
 *
 * @author 上海SPO HAGA
 * @param aString チェックする文字列
 */
function RTrim(aString) {
	var nLoop = 0;
	var strReturn = aString;

	while (nLoop < aString.length) {
		if (strReturn.substring(strReturn.length - 1, strReturn.length) == " " || 
				strReturn.substring(strReturn.length - 1, strReturn.length) == "　" ||
				strReturn.substring(strReturn.length - 1, strReturn.length) == "\u3000")
			strReturn = aString.substring(0, aString.length - (nLoop + 1));
		else break;

		nLoop++;
	}

	return strReturn;
}

/**
 * 引数で与えられた文字列の左側の空白を削除します。
 *
 * @author 上海SPO HAGA
 * @param aString チェックする文字列
 */
function LTrim(aString) {
	var nLoop = 0;
	var strReturn = aString;

	while (nLoop < aString.length) {
		if (strReturn.substring(0, 1) == " " ||
				strReturn.substring(0, 1) == "　" ||
				strReturn.substring(0, 1) == "\u3000")
			strReturn = aString.substring(nLoop + 1, aString.length);
		else break;

		nLoop++;
	}

	return strReturn;
}

/**
 * 禁則文字列の入力チェック処理を行います。
 *
 * @author 上海SPO 
 * @param aId オブジェクト識別ID
 */
function CheckKeepOutString(aId) {
	var elem = document.getElementById(aId);
	NG.checkBadLanguage(callback, elem.value);
	
	if(flgKeepOutString == 1) {
    	var mainForm = eval("document.MainForm." + aId);

		mainForm.focus();
		mainForm.select();
	    return false;
	} else {
	    return true;
	}

//	var regs = new RegExp(keepOutString);

//	if (regs.test(elem.value)) {
//		var message = keepOutString.replace("|", " ");
//		alert(keepOutString + "は使用禁止文字列です");

//		var mainForm = eval("document.MainForm." + aId);

//		mainForm.focus();
//		mainForm.select();

//		return false;
//	} else return true;
}

/**
 * 禁止文字チェック結果を判定します。
 * 
 * @param data 禁止文字チェック結果
 */
 function callback(data) {
     if(data == true) {
         flgKeepOutString = 1;
     }else{
     	 flgKeepOutString = 0;
     }
 }
