//###################################################################################################
//
//	util.js
//
//　　JavaScriptユーティリティ関数コレクション
//　　Version 1.0
//
//###################################################################################################


var dlgWin;

//===================================================================================================
//	関数名	：j_Com_Terminate
//
//	概要	：子ウインドウを閉じる
//	引数	：なし
//	外部変数：dlgWin	子ウインドウオブジェクト
//	戻り値	：なし
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/08/11  00.01  		佐藤　千草    	新規作成
//==================================================================================================
function j_Com_Terminate() {
	if (dlgWin != null) dlgWin.close();
}


//===================================================================================================
//	関数名	：j_com_RetDeleted
//
//	概要	：改行コード削除
//	引数	：targetstring		対象文字列
//	外部変数：なし
//	戻り値	：改行コード削除後の文字列
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/01/28  00.01  		佐藤　千草    	新規作成
//==================================================================================================
function j_com_RetDeleted(targetstring) {
  if (targetstring.indexOf(unescape('%0D%0A')) > -1) rcode = unescape('%0D%0A')
  else if (targetstring.indexOf(unescape('%0A')) > -1) rcode = unescape('%0A')
  else rcode = unescape('%0D');
  i = 0;
  p = '';
  while (targetstring.indexOf(rcode,i) != -1) {
    m = targetstring.indexOf(rcode,i);
    p += targetstring.substring(i,m);
    i = m + rcode.length;
  }
  p += targetstring.substring(i,targetstring.length);
  return p;
}


//===================================================================================================
//	関数名	：j_com_getByteIE
//
//	概要	：文字列バイト数取得（シフトＪＩＳ・ＩＥ限定）
//	引数	：str		対象文字列
//	外部変数：なし
//	戻り値	：バイト数
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/01/06  00.01  		佐藤　千草    	新規作成
//==================================================================================================
function j_com_getByteIE(str) {

    var len = str.length;
    var n = 0;
    var i;
    
    for(i = 0; i < len; i++)
        n += j_com_is_ie_zenkaku(str.charAt(i)) ? 2 : 1;
    return n;
}

//===================================================================================================
//	関数名	：j_com_is_ie_zenkaku
//
//	概要	：全角文字判別（シフトＪＩＳ・ＩＥ限定）
//	引数	：c		対象文字
//	外部変数：なし
//	戻り値	：true		全角
//			  false		半角
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/01/06  00.01  		佐藤　千草    	新規作成
//		2004/03/08  00.02  		佐藤　千草    	ASCIIコード例外文字８文字に対応
//		2004/10/19  00.03  		EUN JINHO    	半角カタカナを１バイトに対応
//==================================================================================================
function j_com_is_ie_zenkaku(c) { 
	var ec = escape(c);
	hc = "｡｢｣､･ｦｧｨｩｪｫｬｭｮｯｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ"

	//半角カナの場合はfalse
	if ( hc.indexOf(c) > 0 ) {
		return false;
	} else {
		//１文字目がu、またはASCII例外文字の場合は全角とみなす
		return (ec.charAt(1) == "u"
				//「´」
				|| ec == "%B4"
				//「¨」
				|| ec == "%A8"
				//「§」
				|| ec == "%A7"
				//「°」
				|| ec == "%B0"
				//「±」
				|| ec == "%B1"
				//「×」
				|| ec == "%D7"
				//「÷」
				|| ec == "%F7"
				//「¶」
				|| ec == "%B6");
	}

}

//===================================================================================================
//	関数名	：j_com_Trim
//
//	概要	：左右トリム（全角対応）
//	引数	：strTemp		トリム対象文字列
//	外部変数：なし
//	戻り値	：トリム処理後文字列
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/01/05  00.01  		佐藤　千草    	新規作成
//==================================================================================================

function j_com_Trim(strTemp)
{
	var strL;
	var strLR;

	//LTRIM
	strL = j_com_LTrim(strTemp);
	//RTRIM
	strLR = j_com_RTrim(strL);
	//結果
	return strLR;
}

//===================================================================================================
//	関数名	：j_com_RTrim
//
//	概要	：右トリム（全角対応）
//	引数	：strTemp		トリム対象文字列
//	外部変数：なし
//	戻り値	：トリム処理後文字列
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/01/05  00.01  		佐藤　千草    	新規作成
//==================================================================================================

function j_com_RTrim(strTemp)
{
	var nLoop = 0;
	var strReturn = strTemp;
	while (nLoop < strTemp.length)
	{
		if ((strReturn.substring(strReturn.length - 1, strReturn.length) == " ") || (strReturn.substring(strReturn.length - 1, strReturn.length) == "　"))
		{
			strReturn = strTemp.substring(0, strTemp.length - (nLoop + 1));
		}
		else
		{
			break;
		}
		nLoop++;
	}
	return strReturn;
}

//===================================================================================================
//	関数名	：j_com_LTrim
//
//	概要	：左トリム（全角対応）
//	引数	：strTemp		トリム対象文字列
//	外部変数：なし
//	戻り値	：トリム処理後文字列
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/01/05  00.01  		佐藤　千草    	新規作成
//==================================================================================================

function j_com_LTrim(strTemp)
{
	var nLoop = 0;
	var strReturn = strTemp;
	while (nLoop < strTemp.length)
	{
		if ((strReturn.substring(0, 1) == " ") || (strReturn.substring(0, 1) == "　"))
		{
			strReturn = strTemp.substring(nLoop + 1, strTemp.length);
		}
		else
		{
			break;
		}
		nLoop++;
	}
	return strReturn;
}

//===================================================================================================
//	関数名	：j_com_FormatNumber
//
//	概要	：JavaScript用FormatNumber関数
//	引数	：
//		num		：フォーマット対象数値
//		decimalNum	：小数点以下に表示する桁数
//		bolLeadingZero	：小数点の左側にゼロを表示するかどうか
//							-1 true / 0 false
//		bolParens	：負の値をかっこでくくるかどうか
//							-1 true / 0 false
//		bolCommas	：桁区切り記号を表示するかどうか
//							-1 true / 0 false
//	外部変数：なし
//	戻り値	：フォーマット済み数値
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/01/05  00.01  		佐藤　千草    	新規作成
//===================================================================================================

function j_com_FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas) { 
 if (isNaN(parseInt(num))) return "NaN";

 //フラグ変換
 bolLeadingZero = bolLeadingZero == 0 ? false : true;
 bolParens = bolParens == 0 ? false : true;
 bolCommas = bolCommas == 0 ? false : true;

 var tmpNum = num;
 var iSign = num < 0 ? -1 : 1;
  
 // 小数点以下を指定桁数にする
 tmpNum *= Math.pow(10,decimalNum);
 tmpNum = Math.round(Math.abs(tmpNum))
 tmpNum /= Math.pow(10,decimalNum);
 tmpNum *= iSign;

 var tmpNumStr = new String(tmpNum);

 // 小数点の左側にゼロを表示するか.
 if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
  if (num > 0)
   tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
  else
   tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);

 //小数点以下をゼロで穴うめ
 if (decimalNum > 0) {
	 var dotPoint = tmpNumStr.indexOf(".");
	 //整数でない場合
	 if (dotPoint >=0) {
	  //小数点以下の桁数（ゼロ埋め前）を取得
	  var sKeta = tmpNumStr.length - (tmpNumStr.indexOf(".") + 1);
	  //指定桁数以下であれば不足分をゼロで補う
	  if (sKeta < decimalNum) {
	   for (iFCnt=sKeta ; iFCnt<decimalNum ; iFCnt++)
	    tmpNumStr += "0";
	  }
	 } else {
	 //整数の場合
	  //小数点と桁数分のゼロを補う
		  tmpNumStr += ".";
		  for (iFCnt=0 ; iFCnt<decimalNum ; iFCnt++)
		   tmpNumStr += "0";
	 }
 }


 // 桁区切り記号を表示するかどうか
 if (bolCommas && (num >= 1000 || num <= -1000)) {
  var iStart = tmpNumStr.indexOf(".");
  if (iStart < 0)
   iStart = tmpNumStr.length;

  iStart -= 3;
  while (iStart >= 1) {
   tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
   iStart -= 3;
  }  
 }

 // 負の値をかっこでくくるかどうか
 if (bolParens && num < 0)
  tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

 return tmpNumStr;
}


//==================================================================================================
//	関数名	：j_com_Conf
//
//	概要	：実行確認メッセージダイアログを表示する
//	引数	：sMsg		出力メッセージ
//	外部変数：なし
//	戻り値	：true		実行
//			  false		中止
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2002/12/20  00.01  		佐藤　千草    	新規作成
//==================================================================================================

function j_com_Conf(sMsg){

	return confirm(sMsg + "を行います。よろしいですか？");

}

//==================================================================================================
//	関数名	：j_com_Coplete
//
//	概要	：正常終了メッセージダイアログを表示する
//	引数	：sMsg		出力メッセージ
//	外部変数：なし
//	戻り値	：なし
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2003/06/23  00.01  		佐藤　千草    	新規作成
//==================================================================================================

function j_com_Coplete(sMsg){

	alert(sMsg + "は正常に終了しました");

}

//===================================================================================================
//	関数名	：j_com_OpenWin
//
//	概要	：指定された幅と高さの子ウインドウを表示する
//	引数	：strURL	子ウインドウ内URL
//			  sWidth	子ウインドウ幅
//			  sHeight	子ウインドウ高さ
//	外部変数：dlgWin	子ウインドウオブジェクト
//	戻り値	：なし
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2002/12/04  00.01  		佐藤　千草    	新規作成
//		2003/06/10  00.02  		佐藤　千草    	汎用化
//==================================================================================================

function j_com_OpenWin(strURL,sWidth,sHeight){
 
  //ウインドウ幅デフォルト:300
  if (sWidth == '' || sWidth == null) {
	sWidth = '300';
  }
  //ウインドウ高さデフォルト:200
  if (sHeight == '' || sHeight == null) {
	sHeight = '200';
  }

  if (dlgWin != null) {
		dlgWin.close();
  }

	dlgWin = window.open(strURL,'_blank', 'width='+sWidth+',height='+sHeight+',top=0,left=0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no');

}

//===================================================================================================
//	関数名	：j_com_Date_Format
//
//	概要	：日付チェックを行う
//	引数	：date			オブジェクト
//	戻り値	：
//			　"" : 正常
//			　"1":日付は入力必須です
//			　"2":日付は「yyyy/mm/dd」の形式で入力してください
//			　"3":年は４桁で入力してください
//			　"4":月１桁、あるいは２桁で入力してください
//			　"5":日は１桁、あるいは２桁で入力してください
//			　"6":適切な日付を入力してください
//	備考	：
//	履歴	：
//		日付        バージョン	名前			内容
//		2002/12/04  00.01  		牧崎　福海    	新規作成
//		2003/06/10  00.02  		佐藤　千草    	汎用化
//==================================================================================================
function j_com_Date_Format(date){
	d_check =  date.value.split("/");
	if(date.value == ""){
		return "1" ;
	}
	if(d_check.length != 3){
		return "2" ;
	}
	if(d_check[0].length != 4){
		return "3" ;
	}
	if(d_check[1].length < 1 || d_check[1].length > 2){
		return "4" ;
	}
	if(d_check[2].length < 1 || d_check[2].length > 2){
		return "5" ;
	}
		newdate=new Date(d_check[0],d_check[1]-1,d_check[2]);
		if((newdate.getDate()!=d_check[2]) ||
			(d_check[1]!=newdate.getMonth()+1)){
		return "6" ;
	}

	return "";
}
//===================================================================================================
//	関数名	：j_com_OpenWinScroll
//
//	概要	：指定された幅と高さの子ウインドウを表示する
//	引数	：strURL	子ウインドウ内URL
//			  sWidth	子ウインドウ幅
//			  sHeight	子ウインドウ高さ
//	外部変数：dlgWin	子ウインドウオブジェクト
//	戻り値	：なし
//	備考	：なし
//	履歴	：
//		日付        バージョン	名前			内容
//		2004/03/03  00.01  		    	新規作成
//==================================================================================================

function j_com_OpenWinScroll(strURL,sWidth,sHeight){
 
  //ウインドウ幅デフォルト:300
  if (sWidth == '' || sWidth == null) {
	sWidth = '300';
  }
  //ウインドウ高さデフォルト:200
  if (sHeight == '' || sHeight == null) {
	sHeight = '200';
  }

  if (dlgWin != null) {
		dlgWin.close();
  }

	dlgWin = window.open(strURL,'_blank', 'width='+sWidth+',height='+sHeight+',top=0,left=0,toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=no');

}
