/************************************************************************
 *		lscomlib.js - micr共通関数
 *
 *			Copyright	1999	Shanghai LionSoft & Co., Ltd.
 ***********************************************************************/

/*----------------------------------*/
/*		関数一覧									 */
/*------------------------------------
	LS_isDate()						日付文字列の妥当性チェック
	LS_isMoney()					金額文字列の妥当性チェック
	LS_isRate()						利率文字列の妥当性チェック
	LS_isHankakuKana()			半角カナ文字を含む文字列か
	LS_isAlphanumeric()			英数字から成る文字列か
	LS_isAlphanumCode()		英数字から成るコードか
	LS_isAlphanumericAndSpace	英数字とスペースから成る文字列か
	LS_isNumeric()					数値関連文字から成る文字列か
	LS_isNumber()		数値から成る文字列か
	LS_ChgExpFormat()			表示書式の変換
	LS_GetCookie()				Cookie情報を取得
	LS_SetCookie()				Cookieの作成、更新
	LS_SplitChars()				文字列を配列に分割する
	LS_formatNumber()			数値の整形
	LS_StringLength()			    文字列数を取得

(内部関数)
	_LS_isAppointedString()		文字列構成チェック
	_LS_escapeCharacters()		ASP に対する encode() 関数の不足を補う
	_LS_formatNumber_1()		数値1桁分の整形

[使用外部関数]
	isDate()							lscomstring.js
	stripChars()					lscomstring.js
	trim()								lscomstring.js
	_getDecimalPoint()			lscomstring.js

[制限事項]
	使用時に lscomstring.js をインクルードのこと。
------------------------------------*/

/************** 定数一覧 **************/
// 表示書式定義
var	LS_EXPFMT1 = 1 ;	// 数値の","(カンマ)編集
var	LS_EXPFMT2 = 2 ;	// 日付(年月日の場合)の "/"(スラッシュ)区切り表示
var	LS_EXPFMT3 = 3 ;	// 日付(年月の場合) "/" 区切り表示
var	LS_EXPFMT4 = 4 ;	// 日付文字列を西暦4桁表示に変換

/***************** END *****************/

/***************************************************************************
［名前］
	LS_isDate - 日付文字列の妥当性チェック

［形式］
	Function LS_isDate( varValue, varFormat )

	varValue	(I) チェック対象の日付文字列
	varFormat	(I) 書式（ 'YMD' or 'YM' ）

［機能説明］
	文字列のデータタイプに応じて、入力書式のチェックを行う。

	・"0123456789/" 以外の文字が含まれている場合エラーとする。
	・年月日分割を行う
	・暦上日チェックを行う。

［使用関数］
	_LS_isAppointedString	文字列調査
	isDate						暦上日チェック
	stripChars					文字削除

［戻り値］
	True / False
***************************************************************************/
function LS_isDate(varValue, varFormat){

	// varFormat のエラーチェック
	if( varFormat != "YM" && varFormat != "YMD" ){
		return false ;
	}

	// 入力文字列空文字チェック
	if( varValue == "" ){
		return false ;
	}

	// 日付用入力可能文字列チェック
	if( _LS_isAppointedString( varValue, "0123456789/" ) == false ){
		return false ;
	}

	// スラッシュ除去
	varValue = stripChars( varValue, "/" ) ;

	// 「年月」の場合は「日」を補う
	if( varFormat == "YM" ){ varValue += "01"; }

	// 日付判定
	wCheckFlg = isDate( varValue ) == true ? 0 : 1 ;
	if( wCheckFlg != 0 ){
		return false ;
	}
	return true ;
}

/***************************************************************************
［名前］
	LS_isMoney - 金額の妥当性チェック

［形式］
	Function LS_isMoney(varValue)

	varValue	(I) チェック対象の金額文字列

［機能説明］
	文字列が金額を構成する文字列として妥当であるかをチェックする。
	・"0123456789,.-" 以外の文字が含まれている場合エラーとする。
	・"."(小数点)が複数ある場合にはエラーとする。
	・"-"(マイナス)は、文字列の1桁目のみＯＫとする。

［使用関数］
	_LS_isAppointedString	文字列調査

［戻り値］
	True / False
***************************************************************************/
function LS_isMoney(varValue){

	var	wCount_P = 0 ;	// 小数点の数
	var	wCount_M = 0 ;	// マイナスの数

	// 入力文字列空文字チェック
	if( varValue == "" ){
		return false ;
	}

	//金額を構成する文字チェック
	if( _LS_isAppointedString( varValue, "0123456789-,." ) == false ){
		return false ;
	}

	//小数点の数をチェック
	for ( i = 0 ; i < varValue.length ; i++ ){
		if( varValue.charAt(i) == "."){ wCount_P++ ; }
	}

	//マイナスのチェック
	wCount_M = varValue.lastIndexOf( "-" ) > 0 ? 1 : 0 ;

	if( wCount_P > 1 || wCount_M > 0){
		return false;
	}
	return true ;
}

/***************************************************************************
［名前］
	LS_ChgExpFormat - 表示書式変換関数

［形式］
	Function	LS_ChgExpFormat( varValue, varFormat )

	varValue	(I) 変換対象の文字列
	varFormat	(I) 表示書式の指定

［機能説明］
	指定された書式に従い、表示書式の変換を行う。

	LS_EXPFMT1：
		数値のカンマ編集を行う。0埋めは行わない。
		-9999999999.99 -->  -9,999,999,999.99

	LS_EXPFMT2：
		日付文字列（年月日）の"/"区切り表示を行う。西暦2桁の場合は2桁で、
		4桁入力の場合は4桁で返却。
		980331   --> 98/03/31
		19980331 --> 1998/03/31

	LS_EXPFMT3：
		日付文字列（年月）の"/"区切り表示を行う。
		199803 --> 1998/03

	LS_EXPFMT4：
		日付文字列（年月日）を西暦4桁表示に変換する。スラッシュは変換元文字
		列に含まれていた場合のみ付加する。
		（西暦下2桁が50以上の場合は "19"、49以下の場合は "20"を付加する）
		980331     --> 19980331
		000331     --> 20000331
		19980331   --> 19980331
		20000331   --> 20000331
		98/03/31   --> 1998/03/31
		00/03/31   --> 2000/03/31
		1998/03/31 --> 1998/03/31
		1900/03/31 --> 2000/03/31

［使用関数］
	_LS_isAppointedString		文字列調査
	stripChars						文字削除
	trim()								前後詰め
	LS_formatNumber()			数値整形

［戻り値］
	SUCCESS	：	変換後文字列
	FAILURE	：	変換前文字列 （変換元文字列の長さが0の場合＆"NaN"の場合）
***************************************************************************/
function LS_ChgExpFormat( varValue, varFormat ){

	var	szBuff       ;				// 汎用バッファ
	var	varSlashFlag ;				// スラッシュ有無のフラグ
	var	szRetValue   ;				// 戻り値設定用

	varValue += "" ;					// 文字列化
	szRetValue = varValue ;		// 戻り値初期値

	// 空文字と"NaN"のチェック
	if( varValue == "" || varValue == "NaN"){
		return szRetValue ;
	}

	// 書式指定のチェック
	if( varFormat != LS_EXPFMT1 && varFormat != LS_EXPFMT2 && varFormat != LS_EXPFMT3 && varFormat != LS_EXPFMT4 ){
		return szRetValue ;
	}

	/*======== 金額のフォーマットチェンジ ========*/
	if( varFormat == LS_EXPFMT1 ){

		// カンマ除去
		szBuff = stripChars( varValue, "," ) ;

		// 文字列整形（最大１５桁）
		szBuff = LS_formatNumber( szBuff, "ZZZ,ZZZ,ZZZ,ZZZ,ZZZ.ZZZZZZZZZZZZZZZ" ) ;

		// 前後のスペースコードを削除
		szBuff = trim( szBuff ) ;

		// 末尾がピリオドだった場合はピリオドを除去する
		if( szBuff.charAt( szBuff.length - 1 ) == "." ) {
			szBuff = szBuff.substring( 0, szBuff.length - 1 ) ;
		}

		// 戻り値設定
		szRetValue = szBuff ;
	}
	else {
		// スラッシュの有無を保持
		varSlashFlag = varValue.indexOf( "/" ) != -1 ? "/" : "" ;
		// スラッシュ除去
		szBuff = stripChars( varValue, "/" ) ;
	}
	/*======== 「年月日」スラッシュ区切り ========*/
	if( varFormat == LS_EXPFMT2 ) {
		// スラッシュ挿入
		szRetValue  =       szBuff.substring(                    0, szBuff.length - 4 ) ;
		szRetValue += "/" + szBuff.substring( szBuff.length - 4, szBuff.length - 2 ) ;
		szRetValue += "/" + szBuff.substring( szBuff.length - 2, szBuff.length     ) ;
	}

	/*======== 「年月」スラッシュ区切り ========*/
	if( varFormat == LS_EXPFMT3 ) {
		// スラッシュ挿入
		szRetValue  =       szBuff.substring(                 0, szBuff.length - 2 ) ;
		szRetValue += "/" + szBuff.substring( szBuff.length - 2, szBuff.length     ) ;
	}

	/*======== 「年月日」年４桁化・臨機スラッシュ ========*/
	if( varFormat == LS_EXPFMT4 ) {
		// 桁数が足りない場合（年２桁しか入力していない場合）
		if( szBuff.length == 6 ){
			szBuff = ( parseInt( szBuff.substring( 0, 2 ) ) > 50 ) ? "19" + szBuff : "20" + szBuff ;
		}

		// スラッシュが存在した場合はスラッシュ挿入
		szRetValue  =                szBuff.substring(                 0, szBuff.length - 4 ) ;
		szRetValue += varSlashFlag + szBuff.substring( szBuff.length - 4, szBuff.length - 2 ) ;
		szRetValue += varSlashFlag + szBuff.substring( szBuff.length - 2, szBuff.length     ) ;
	}

	return szRetValue ;
}

/****************************************************************************
[名前]
	LS_isHankakuKana

[形式]
	Function LS_isHankakuKana(strThis)

	strThis		(I) 判定する文字列

[機能説明]
	文字列に半角カナが含まれているかどうかを判定する。

[戻り値]
	true / false
****************************************************************************/
//function LS_isHankakuKana(strThis)
//	{
//	var strKana = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮｰﾟﾞ､｡"
//	var wCount = -1
//
//	for (var i = 0; i < strThis.length; i++){
//		wCount = strKana.indexOf(strThis.charAt(i))
//		if (wCount >= 0) {
//			return true
//		}
//	}
//return false
//}

function LS_isHankakuKana(strThis)
	{
	var strKana = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｯｬｭｮｰﾟﾞ､｡"
	var wCount = -1

	for (var i = 0; i < strThis.length; i++){
		wCount = strKana.indexOf(strThis.charAt(i))
		if (wCount >= 0) {
			return true
		}
	}
	return false
}

/****************************************************************************
[名前］
	LS_isRate − 利率であるかのチェック

[形式]
	Function LS_isRate(varValue)

	varValue	(I) チェック対象の文字列

［機能説明］
	不正文字のチェック。
	０〜１００の範囲内かをチェック。
	整数３桁、小数７桁以内かをチェック。

［戻り値］
	True / False

****************************************************************************/

function LS_isRate(varValue){

	var i;
	var wCount = 0;
	var varSeisu;
	var varShosu;

	//不正文字と空白のチェック
	if(_LS_isAppointedString(varValue,"0123456789.") == false || varValue == ""){
		return false;
	}

	//小数点の数をチェック
	for ( i = 0 ; i < varValue.length ; i++ ){
		if(varValue.charAt(i) == "."){
			wCount++ ;
		}
	}

	if(wCount > 1){
		return false;
	}

	//０〜１００までの範囲かチェック
	if(varValue < 0 || varValue > 100){
		return false;
	}

	varSeisu = varValue.substring(0,varValue.indexOf("."));
	varShosu = varValue.substring(varValue.indexOf(".")+1,varValue.length);

	//整数３桁＆小数７桁以内かチェック
	if(varSeisu.length > 3 || varShosu.length > 7){
		return false;
	}
	return true;
}
/****************************************************************************
［名前］
	LS_isAlphanumeric − 英数字から成る文字列か

［形式］
	Function LS_isAlphanumeric(strThis)

	strThis		(I) 判定する文字列

[機能説明]
	文字列が以下の英数字のみで構成されているかどうか、判定する。
	    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"#$%&'()=~|@[]{}*+-/.,_\<>;:`

［戻り値］
	true / false
****************************************************************************/

function LS_isAlphanumeric(strThis){

	var ch;
	
	if(strThis.length == 0){
		return false;
	} else {
		for(var i = 0; i < strThis.length; i++){
			ch = strThis.charAt(i);
			if(!isDigit(ch) && !isLetter(ch) && "!\"#$%&'()=~|@[]{}*+-/.,_\\<>;:`".indexOf(ch) < 0){
				return false;
			}
		}
	}
	return true;
}
/****************************************************************************
［名前］
	LS_isAlphanumCode − 英数字から成るコードか

［形式］
	Function LS_isAlphanumCode(strThis)

	strThis		(I) 判定する文字列

[機能説明]
	文字列が以下の英数字のみで構成されているかどうか、判定する。
	    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

［戻り値］
	true / false
****************************************************************************/

function LS_isAlphanumCode(strThis){

	var ch;
	
	if(strThis.length == 0){
		return false;
	} else {
		for(var i = 0; i < strThis.length; i++){
			ch = strThis.charAt(i);
			if(!isDigit(ch) && !isLetter(ch)){
				return false;
			}
		}
	}
	return true;
}

/****************************************************************************
［名前］
	LS_isAlphanumericAndSpace − 英数字とスペースから成る文字列か

［形式］
	Function LS_isAlphanumericAndSpace(strThis)

	strThis		(I) 判定する文字列

[機能説明]
	文字列が以下の英数字のみで構成されているかどうか、判定する。
	    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!"#$%&'()=~|@[]{}*+-/.,_\<>;:` と半角スペース

［戻り値］
	true / false
****************************************************************************/

function LS_isAlphanumericAndSpace(strThis){

	var ch;
	
	if(strThis.length == 0){
		return false;
	} else {
		for(var i = 0; i < strThis.length; i++){
			ch = strThis.charAt(i);
			if(!isDigit(ch) && !isLetter(ch) && "!\"#$%&'()=~|@[]{}*+-/.,_\\<>;:` ".indexOf(ch) < 0){
				return false;
			}
		}
	}
	return true;
}

/****************************************************************************
［名前］
	LS_isNumeric − 数値関連文字から成る文字列か

［形式］
	Function LS_isNumeric(strThis)

	strThis		(I) 判定する文字列

[機能説明]
	文字列が以下の数値関連文字のみで構成されているかどうか、判定する。
	    0123456789-.,

［戻り値］
	true / false
****************************************************************************/

function LS_isNumeric(strThis){
	var ch;
	
	if(strThis.length == 0){
		return false;
	} else {
		for(var i = 0; i < strThis.length; i++){
			ch = strThis.charAt(i);
			if(!isDigit(ch) && "-.,".indexOf(ch) < 0){
				return false;
			}
		}
	}
	return true;
}

/****************************************************************************
［名前］
	LS_isNumber − 数値から成る文字列か

［形式］
	Function LS_isNumber(strThis)

	strThis		(I) 判定する文字列

[機能説明]
	文字列が以下の数値関連文字のみで構成されているかどうか、判定する。
	    0123456789

［戻り値］
	true / false
****************************************************************************/

function LS_isNumber(strThis){
	var ch;
	
	if(strThis.length == 0){		//入力無し
		return false;
	} else {
		for(var i = 0; i < strThis.length; i++){
			ch = strThis.charAt(i);
			if(!isDigit(ch)){
				return false;
			}
		}
	}
	return true;
}

/****************************************************************************
［名前］
	LS_GetCookie − Cookie情報を取得

［形式］
	function LS_GetCookie(varName)

	varName		(I) Cookieの名前

[機能説明]
	引数で指定された名前に対応したCookieの値を返します。

［戻り値］
	Cookieの値 / null
****************************************************************************/

function LS_GetCookie(varName){
	var		szName = _LS_escapeCharacters( escape(varName) ) + "=";
	var		wLen = szName.length;
	var		myCookie = document.cookie;
	var		startPos = myCookie.indexOf(szName);
	var		endPos;


	if(document.cookie.length == 0){
		return null;
	}

	if(startPos != -1){
		startPos = startPos + wLen;
		endPos = myCookie.indexOf(";",startPos);

		if(endPos == -1){
			endPos = document.cookie.length;
		}
		return unescape(myCookie.substring(startPos,endPos));
	}
	return null;
}

/****************************************************************************
［名前］
	LS_SetCookie − Cookieの作成、更新

［形式］
	function LS_SetCookie(varName,varValue,varExpires,varPath,varDomain,varSecure)

	varName		(I) Cookieの名前（ＡＳＰ互換）
	varValue	(I) Cookieの値（内部で escape() されます）
	varExpires	(I) Cookieの有効日付(PDT規約)
	varPath		(I) Cookieの有効パス
	varSecure	(I) Cookieが保護されているかどうか（ブール型）

[機能説明]
	与えられた引数を元に、Cookieを作成、更新します。

	@ Null値の引数は無視されます。
	A varExpireについては、グリニッジ標準時への変換を行います。

****************************************************************************/

function LS_SetCookie(varName,varValue,varExpires,varPath,varDomain,varSecure){
	var varText;

	varName = _LS_escapeCharacters( escape(varName) ) ;

	varText = varName + "=" + escape( varValue ) ;
	varExpires	 != null ? varText += "; expires= " + varExpires.toGMTString() : "";
	varPath		 != null ? varText += "; path= " + varPath : "";
	varDomain	 != null ? varText += "; domain= " + varDomain : "";
	varSecure	 != null ? varText += "; " + varSecure : "";
	document.cookie = varText;
}

/***************************************************************************
［名前］
	_LS_isAppointedString - 文字列構成チェック

［形式］
	Function _LS_isAppointedString( varValue, permitCode )

	varValue	(I) チェック対象の文字列
	permitCode	(I) 許可文字列

［機能説明］
	チェック対象文字列がすべて許可文字列に記された文字で構成されているかど
	うかをチェックする。チェック対象文字列内に許可文字列に含まれていない文
	字列が存在した場合はエラーを返却する。

［戻り値］
	SUCCESS	：	True
	FAILURE	：	False

***************************************************************************/
function _LS_isAppointedString( varValue, permitCode ){
	var	varValueLen ;    // 比較する文字列
	var	permitCodeLen  ;    // 許可文字列長
	var	lpCt       = 0 ;    // ループカウンタ
	var	compareFlg = 0 ;    // フラグ

	// 各文字列長取得
	varValueLen = varValue.length ;
	permitCodeLen  = permitCode.length  ;

	// 文字列比較
	for( lpCt=0 ; lpCt<varValueLen ; lpCt++ ){
		retCode = permitCode.indexOf( varValue.substring(lpCt, lpCt+1) ) ;
		if( retCode == -1){
			return false ;
		}
	}
	return true ;
}

/****************************************************************************
［名前］
	_LS_escapeCharacters − ASP に対する encode() 関数の不足を補う

［形式］
	function _LS_escapeCharacters( varString )

	varString	(I) エンコード対象文字列

[機能説明]
	JavaScript の encode() 関数と、ASP が cookie に保存する際に行う encode
	の処理上の差を補完します。
	（LS_SetCookie() と LS_GetCookie() の内部関数）

	具体的には、以下のキャラクタをエスケープ化します
	「* + - . @ _」

［戻値］
	エンコードされた文字列

****************************************************************************/

function _LS_escapeCharacters( varString )
{
	var		varRetValue = "" ;
	var		varChrBuff  = "" ;
	var		varAddBuff  = "" ;
	var		varLpCt = 0 ;

	for( varLpCt = 0 ; varLpCt < varString.length ; varLpCt++ ){
		varChrBuff = varString.charAt( varLpCt ) ;
		varAddBuff = varChrBuff ;
		if( varChrBuff == "*" ){ varAddBuff = "%2A" ; }
		if( varChrBuff == "+" ){ varAddBuff = "%2B" ; }
		if( varChrBuff == "-" ){ varAddBuff = "%2D" ; }
		if( varChrBuff == "." ){ varAddBuff = "%2E" ; }
		if( varChrBuff == "@" ){ varAddBuff = "%40" ; }
		if( varChrBuff == "_" ){ varAddBuff = "%5F" ; }

		varRetValue += varAddBuff ;
	}

	return varRetValue ;
}

/***********************************************************************
[名前]
	LS_SplitChars - 文字列を配列に分割する

[形式]
	Function LS_SplitChars(strThis, strDelimiter)

	strThis			(I) 対象文字列
	strDelimiter	(I) デリミタ

[機能説明]
		文字列から、指定のデリミタで区切られた文字列を
		配列要素にセットする。

[戻り値]
		デリミタで分割した配列

[例]
		strBar = LS_SplitChars(strFoo, ";");	// ;で分割する
***********************************************************************/

function LS_SplitChars(strThis, strDelimiter){
	var	ch = "";
	var	aResult	= new Array();
	var	i, ia;
	var	str = "";

	ia = 0;
	for (i = 0; i < strThis.length; i++){
		ch = strThis.charAt(i);			// 1文字ずつ処理
		if (strDelimiter == ch){
			str = "";
			ia++;
		} else {
			str += ch;
			aResult[ia] = str;
		}
	}
	return aResult;
}

/***********************************************************************
[名前]
	LS_formatNumber - 数値文字列の整形

[形式]
	Function LS_formatNumber(strThisNumber, strFormat)

	strThisNumber	(I) 数値文字列
	strFormat			(I) 書式指定

[機能説明]
		数値を表す文字列であるかチェックする。
		書式指定にしたがって数値文字列を編集する。
		Z: 先行0はブランクを詰める
		9: 先行0は0を詰める
		,: カンマ区切り
		.: 小数点

[戻り値]
	SUCCESS	：	整形後の文字列
	FAILURE	：	NaN

[例]
		LS_formatNumber("1234", "Z,ZZ9")		// "1,234"
		LS_formatNumber("-1234", "ZZ,ZZ9")		// "-1,234"
		LS_formatNumber("1234", "999999999")		// "000001234"
		LS_formatNumber("-1234", "999999999")		// "-00001234"
		LS_formatNumber("1234.545", "Z,ZZ9.99")		// "1,234.55"
		LS_formatNumber("-1234.545", "ZZ,ZZ9.99")	// "-1,234.55"
***********************************************************************/
function LS_formatNumber(strThisNumber, strFormat){

	var	strNumber, nSign;			// 正規化された値と符号
	var	nDecNumber, nDecFormat;			// 小数点の位置
	var	nPosNumber, nPosFormat;			// 文字ポインタ
	var	chResult;
	var	strResult = "";
	var strFormatLen, strNumberLen;


	//不正文字のチェック（値がない場合も含む。）
	if(LS_isMoney(strThisNumber) == false){
		return "NaN";
//		return Number.NaN;
	}

	nSign = (strThisNumber.indexOf("-") < 0)? 1:-1;	// 符号の判定

	strNumber = stripChars(strThisNumber, "+-");	// 符号を除去
	strNumber = stripChars(strNumber, ",");		// カンマを除去

	if(strNumber.indexOf(".") == 0){
		strNumber = "0" + strNumber;
	}

	//@@@ 修正（追加:四捨五入のための）　99/1/5
	if(strNumber.indexOf(".") > 0){
		strNumberLen = strNumber.substring(strNumber.indexOf(".") + 1,strNumber.length);
		strFormatLen = (strFormat.indexOf(".") < 0)? "":strFormat.substring(strFormat.indexOf(".") + 1,strFormat.length);

		if(strNumberLen.length > strFormatLen.length){
//@@@修正前（微妙な誤差がでる場合あり）
//			strNumber = strNumber * Math.pow(10,strFormatLen.length + 1) + 5;
//			strNumber /= Math.pow(10,strFormatLen.length + 1);

//@@@修正後
			strNumber = Math.round(strNumber * Math.pow(10,strFormatLen.length));
			strNumber /= Math.pow(10,strFormatLen.length);

			strNumber += "";
		}
	}
	//@@@

	nDecNumber = _getDecimalPoint(strNumber);	// 小数点の位置を求める
	nDecFormat = _getDecimalPoint(strFormat);

// 整数部分の処理
	for(nPosFormat = nDecFormat - 1, nPosNumber = nDecNumber - 1; nPosFormat >= 0; nPosFormat--){
		chResult = _LS_formatNumber_1(strNumber, nPosNumber, nSign, strFormat, nPosFormat);
		strResult = chResult + strResult;			// 1桁分を処理

		if(nPosNumber == 0 && strFormat.charAt(nPosFormat) != "9" && chResult != ","){
			if(nSign < 0){
				strResult = "-" + strResult;
			}
			break;
		}

		if(chResult != ','){
			nPosNumber--;		// カンマ以外なら桁を進める
		}
	}

// 小数部分の処理
	for(nPosFormat = nDecFormat, nPosNumber = nDecNumber; nPosFormat < strFormat.length; nPosFormat++){
		chResult = _LS_formatNumber_1(strNumber, nPosNumber, nSign, strFormat, nPosFormat);
		strResult += chResult;		// 1桁分を処理

		nPosNumber++;			// 桁を進める
	}

	//@@@ 修正（追加:一番最後についてしまうピリオドをとる）　99/1/5
	if(strResult.charAt(strResult.length - 1) == "."){
		strResult = strResult.substring(0,strResult.length - 1);
	}
	//@@@

	return strResult;
}
/***********************************************************************
[名前]
	_LS_formatNumber_1 - 数値1桁分の整形

[形式]
	Function _LS_formatNumber_1(strNumber, nPosNumber, nSign, strFormat, nPosFormat)

	strNumber	(I) 数値文字列
	nPosNumber	(I) 処理する文字位置
	nSign		(I) 数値の符号
	strFormat	(I) 書式指定
	nPosFormat	(I) 処理する文字位置

[機能説明]
		数値1桁分を整形して返す。

[戻り値]
		整形後の文字
***********************************************************************/

function _LS_formatNumber_1(strNumber, nPosNumber, nSign, strFormat, nPosFormat){
	var	chNumber, chFormat;
	var	chResult;

	chFormat = strFormat.charAt(nPosFormat);
	chNumber = (nPosNumber >= 0)? strNumber.charAt(nPosNumber):"";

	if(chFormat == '9'){				// 数字あるいは0詰め
		if (chNumber.length > 0){
			chResult = chNumber;
		}else{
			chResult = (nSign < 0 && nPosFormat == 0)? '-':'0';
		}
	}else{
		if (chFormat == 'Z'){			// 数字あるいはブランク詰め
			if(chNumber.length > 0){
				chResult = chNumber;
			}else{
				chResult = (nSign < 0 && nPosNumber == -1)? '-':'';
			}
		}else{					// カンマ、ピリオド
			if (nPosNumber >= 0){
				chResult = chFormat;
			}else{
				chResult = '';
			}
		}
	}
	return chResult;
}

/***************************************************************************
［名前］
	LS_StringLength - 文字列のLｅｎｇｔｈ計算

［形式］
	Function LS_StringLength(varValue)

	varValue	(I) 計算対象文字列

［機能説明］

［使用関数］
	なし	

［戻り値］
	文字列のＬｅｎｇｔｈ
***************************************************************************/
function LS_StringLength(varValue){
	var	iResult = 0;
	var	i;

	for (i = 0; i < varValue.length; i++){
		if( varValue.charCodeAt(i) >= 128 ){		// 英数字以外の文字の場合
			iResult = iResult + 2;
		} else {
			iResult++;										// 英数字の場合
		}
	}
	return iResult;
}
