/***************************************************
 * システム名      電子入札物品コアシステム
 * サブシステム名  入札手続支援サブシステム
 * EbBA2Common.js
 * 共通関数を格納
 * @author  NEC
 * @version 1.0, 2002.06.17，新規作成<BR>
 *          1.1, 2003.05.28, V3総合障害票106対応<BR>
 *          1.2, 2003.06.09, V3-総合-145対応<BR>
 *          1.3, 2003.06.11, 入札書不正対応<BR>
 *          1.4, 2003.06.12, V3-総合-160対応<BR>
 *          1.5, 2003.06.14, V3-総合-189対応<BR>
 *          1.6, 2003.06.16, V3-結合-019対応<BR>
 *          1.7, 2003.06.17, V3-結合-026対応<BR>
 *          1.8, 2003.06.18, V3-結合-032対応<BR>
 *          1.9, 2003.08.05, 連絡票054対応<BR>
 *          3.1, 2003.08.25, 署名検証手動化対応<BR>
 *          3.1, 2003.08.25, 乱数署名のオプション化対応<BR>
 *          3.1, 2003.10.22, V3.1-総合-026対応<BR>
 *          4.0, 2004.01.06, V4-利用者登録表示内容拡張対応
 *          4.0, 2004.01.30, V4.0複数落札<BR>
 *          4.0, 2004.04.07, V4-総合-障害S097対応<BR>
 *          4.0, 2004.04.08, 案件検索機能の強化<BR>
 *          4.0, 2004.04.26, V4-無効通知書発行対応<BR>
 *          4.1, 2007.04.10, ステータスバーの表示追加対応<BR>
***************************************************/
var signIndex;   // 署名対象位置
var priceTextSet;
var popupWindow;

// 複数落札対応：金額項目桁数
var DEF_BID_NONPLURAL_LENGTH      = 16;    // 複数落札以外の金額桁数
var DEF_BID_PLURAL_LENGTH         = 20;    // 複数落札の金額桁数
var DEF_BID_PLURAL_INTEGER_LENGTH = 16;    // 複数落札の金額桁数の内　整数部の桁数
var DEF_BID_PLURAL_DECIMAL_LENGTH =  8;    // 複数落札以外の金額の内　少数部の桁数

//-------------------------------------------------------
// 次画面遷移処理
//-------------------------------------------------------
function dispatch( form, next_id )
{
  // フォームの設定
  if( prepareDispatch( form, next_id ) )
  {
    // リクエスト送信
    top.wpMain.request();
  }
}//dispatch

//-------------------------------------------------------
// 次画面遷移処理(通信中ダイアログ無し)
//-------------------------------------------------------
function dispatchWithoutDialog( form, next_id )
{
  // フォームの設定
  if( prepareDispatch( form, next_id ) )
  {
    // リクエスト送信
    top.wpMain.requestWithoutDialog();
  }
}//dispatchWithoutDialog

//-------------------------------------------------------
// 次画面遷移処理(ポップアップ)
//-------------------------------------------------------
function dispatchPopup( form, next_id )
{
  // フォームの設定
  if( prepareDispatch( form, next_id ) )
  {
    // リクエスト送信
    top.wpMain.requestPopUp();
  }
}//dispatchPopup

//-------------------------------------------------------
// 次画面遷移準備処理
//-------------------------------------------------------
function prepareDispatch( form, next_id )
{
  // フォームの設定
  if( top.wpMain.setCommandFormObj(form) )
  {
    // 次画面IDの設定
    top.wpMain.setNextID( next_id );

    // 自画面IDの設定
    var screenID=getScreenID();

    if( screenID!=null && screenID!="" )
      top.wpMain.setThisID( screenID );
    else
      top.wpMain.setThisID( next_id.substr(next_id.length-6) );

    // クライアント種別の設定
    form.clientKind.value=top.data.document.commonData.clientKind.value;

    return true;
  }
  else
  {
    return false;
  }
}//prepareDispatch

//-------------------------------------------------------
// ScreenIDを取得する
//-------------------------------------------------------
function getScreenID()
{
  return top.wpMain.document.commonData.screenID.value;
}//getScreenID

//-------------------------------------------------------
// リクエスト送信処理呼出処理
//-------------------------------------------------------
function callSubmitCall( submitCall )
{
  // ICカード変更確認結果を返す。
  begin();
  execute("Utils.isIcCardChanged(script:'IcCardCheckResult')");
  commit();

  // 共通アプレット処理コマンド蓄積開始functionを呼び出す
  begin();

  /* 共通アプレットのプロパティにomeBeforeRequestNameを登録する */
  execute("copyString(value:'" + getBeforeRequestName() + "', omeBeforeRequestName)");

  // 乱数署名コマンドを呼び出す
  execute("RandomSign.sign(script:'SignedRandomKey')");

  // 要求処理呼出し
  execute("callScript(value:'" + submitCall + "')");

  // 共通アプレット処理コマンド蓄積終了functionを呼び出す
  commit();
}//processRequest

//-------------------------------------------------------
// リクエスト送信フォーム用標準パラメータ取得処理
//-------------------------------------------------------
function getStdParams()
{
  return ""
    +"<INPUT type='hidden' name='RandomRequestKey' value='"+getSignedRandomKey()+"'>"
    +"<INPUT type='hidden' name='omeBeforeRequestName' value='" + commandFormObj.omeBeforeRequestName.value + "'>"
    +"<INPUT type='hidden' name='omeParameterID' value='" + commandFormObj.omeParameterID.value + "'>"
    +"<INPUT type='hidden' name='clientKind' value='" + commandFormObj.clientKind.value + "'>"
    +"<INPUT type='hidden' name='screenID' value='" + commandFormObj.screenID.value + "'>";
}//getStdParams

//-------------------------------------------------------
// 画面読込時処理
//-------------------------------------------------------
function onLoad()
{
  begin();
  closeSubWindow();
  if( document.commonData.runOnce.value!="1" )
  {

    top.data.document.common.randomSessionKey.value=document.common.randomSessionKey.value;

    execute("Timer.update(value:'"+getServerTime()+"')");
    execute("RandomSign.setValue(value:'"+getRandomKey()+"')");

    document.commonData.runOnce.value="1";
  }

  document.common.randomSessionKey.value=top.data.document.common.randomSessionKey.value;

  execute("callScript(value:'resetCommandFormObj')");
  commit();

  if( document.screenCoordinate )
    setCaptureEvents();
}//onLoad

//-------------------------------------------------------
// 画面読込時処理(ポップアップ用)
//-------------------------------------------------------
function onLoadPopup()
{
  // 親Windowの'common'フォームのHIDDEN項目に最新の乱数値を設定する
  opener.document.common.randomSessionKey.value =
                                           document.common.randomSessionKey.value;

  // 親WindowのonLoadを呼び出す
  with( opener)
  {
    onloadPopUpCalled();

    if( document.screenCoordinate )
      setCaptureEvents();
  }
  
}//onLoadPopup
//-----------------------------------------------------------
/**
 * 読込時処理
 *
 */
//-----------------------------------------------------------
function onloadPopUpCalled() {
  /* 共通アプレット処理コマンド蓄積開始functionを呼び出す */
  begin();

  /* preProcess()を直接呼び出さずTimerの更新以外のfunctionを呼び出す */
  closeSubWindow();
  execute("RandomSign.setValue(value:'"+getRandomKey()+"')");

  /*
   * 共通アプレットの処理が終わった後に、
   * 呼びだしてもらうfunction'resetCommandFormObj'をセットする
   */
  execute("callScript(value:'resetCommandFormObj')");

  /* 共通アプレット処理コマンド蓄積終了functionを呼び出す */
  commit();
}
//-------------------------------------------------------
// 画面読込時処理(署名検証処理付)
//-------------------------------------------------------
function onLoadVerify()
{
  document.common.randomSessionKey.value=top.data.document.common.randomSessionKey.value;

  if( document.commonData.runOnce.value!="1" )
  {
    top.data.document.common.randomSessionKey.value=document.common.randomSessionKey.value;
    document.commonData.runOnce.value="1";

    // 署名検証処理(初回)
    setVerifyResult(false);
    begin();
    preProcess();
    execute("DocSign.verify(script:'VerifyTarget',script:'VerifyResult')");
    execute("callScript(value:'resetCommandFormObj')");
    execute("callScript(value:'showVerifyResult')");
    commit();
  }
  else
  {
    // 署名検証結果表示(２度目以降)
    showVerifyResult();
  }
}//onLoadVerify

//-------------------------------------------------------
// 画面読込時処理(署名検証処理付/証明書検証なし)
//-------------------------------------------------------
function onLoadEasyVerify()
{
  document.common.randomSessionKey.value=top.data.document.common.randomSessionKey.value;

  if( document.commonData.runOnce.value!="1" )
  {
    top.data.document.common.randomSessionKey.value=document.common.randomSessionKey.value;
    document.commonData.runOnce.value="1";

    // 署名検証処理(初回)
    setVerifyResult(false);
    begin();
    preProcess();
    execute("DocSign.simpleVerify(script:'VerifyTarget',script:'VerifyResult')");
    execute("callScript(value:'resetCommandFormObj')");
    execute("callScript(value:'showVerifyResult')");
    commit();
  }
  else
  {
    // 署名検証結果表示(２度目以降)
    showVerifyResult();
  }
}//onLoadEasyVerify

//-------------------------------------------------------
// 署名検証結果表示
//-------------------------------------------------------
function showVerifyResult()
{
  if( getVerifyResult()!="true" && getVerifyResult()!=true )
  {
    alert(
      "通知書の署名検証に失敗しました\n"+
      "この文書は信用できません."
    );
  }
}//showVerifyResult

//-------------------------------------------------------
// 署名検証対象取得
//-------------------------------------------------------
function getVerifyTarget() { return document.formVerify.xmlData.value; }

//-------------------------------------------------------
// 署名検証結果取得
//-------------------------------------------------------
function getVerifyResult() { return document.formVerify.verifyResult.value; }

//-------------------------------------------------------
// 署名検証結果設定
//-------------------------------------------------------
function setVerifyResult( result ) { document.formVerify.verifyResult.value=result; }

//-------------------------------------------------------
// 検索結果表示処理
//-------------------------------------------------------
function searchNew( form, next_id )
{
  // 処理区分に0(新規検索)を設定
  form.syoriKbn.value="0";

  // 検索結果表示
  dispatch( form, next_id );
}//searchNew

//-------------------------------------------------------
// 前の検索結果表示処理
//-------------------------------------------------------
function searchPrev( form, next_id )
{
  // 処理区分に1(セッションの検索条件で検索, 表示開始位置のみ更新)を設定
  form.syoriKbn.value="1";

  // 表示件数だけ前に戻る
  form.nextListStartIndex.value=Number(form.prevNextListStartIndex.value)-Number(form.prevShowRange.value);

  if( form.nextListStartIndex.value<0 )
  {
    form.nextListStartIndex.value=0;
  }

  // 検索結果表示
  dispatch( form, next_id );
}//searchPrev

//-------------------------------------------------------
// 次の検索結果表示処理
//-------------------------------------------------------
function searchNext( form, next_id )
{
  // 処理区分に1(セッションの検索条件で検索, 表示開始位置のみ更新)を設定
  form.syoriKbn.value="1";

  // 表示件数だけ次へ移動
  form.nextListStartIndex.value=Number(form.prevNextListStartIndex.value)+Number(form.prevShowRange.value);

  // 検索結果表示
  dispatch( form, next_id );
}//searchNext

//-------------------------------------------------------
// 調達案件一覧選択画面に戻る
//-------------------------------------------------------
function returnProjectList( next_id )
{
  // 処理区分に2(セッションの検索条件で検索)を設定
  top.head.document.formRegist.syoriKbn.value='2';

  // 検索結果表示
  dispatch( top.head.document.formRegist, next_id );
}//returnProjectList

//-------------------------------------------------------
// ヘッダのURLを変更する
//-------------------------------------------------------
function changeHeader( name )
{
  var pathname=contextPath+"/ebidmlit/jsp/goods/common/"+name;

  if( top.head.location.pathname!=pathname )
  {
    top.head.location.pathname=pathname;
  }
}//changeHeader

//-------------------------------------------------------
// メニューのURLを変更する
//-------------------------------------------------------
function changeMenu( name )
{
  var pathname=contextPath+"/ebidmlit/jsp/goods/common/"+name;

  if( top.wpMenu.location.pathname!=pathname )
  {
    top.wpMenu.location.pathname=pathname;
  }
}//changeMenu

//-------------------------------------------------------
// クライアント種別を設定する
//-------------------------------------------------------
function updateClientKind()
{
  //top.data.document.commonData.clientKind.value=document.commonData.clientKind.value;
}//updateClientKind

//-------------------------------------------------------
// カレンダーコントロールを表示します
//-------------------------------------------------------
function getCalendar( obj )
{
  return showCalender( obj );
}//getCalendar

//-------------------------------------------------------
// 印刷処理を行います
//-------------------------------------------------------
function printDocument()
{
  var printData;

  // 印刷用画面の準備
  printData =
    '<HTML lang="ja"><HEAD><TITLE>CALS/EC</TITLE>' +
    '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">' +
    '<META http-equiv="Content-Style-Type" content="text/css">' +
    '</HEAD><BODY>' + document.getElementById('spanPrintData').innerHTML + '</BODY></HTML>';

  // 印刷用画面の表示
  setOpenView( printData );
}//printDocument

//-------------------------------------------------------
// 数字チェック
//-------------------------------------------------------
function checkNumber( value )
{

  if( value.length==0 )
  {
    return false;
  }
  else
  {
    if( value.charAt(0)=='0' && value.length!=1 )
      return false;

    for( var i=0 ; i<value.length ; i++ )
    {
      if( isNaN( parseInt( value.charAt(i) ) ) )
      {
        return false;
      }
    }
  }

  //0以外で先頭0で、2文字目が'.'でない数値チェック 例 030
  if( value.length!=1 && value.charAt(0)=='0' && value.charAt(1)!='.' )
    return false;

  //先頭/終了が'.'でない数値チェック 例 .530 530.
  if( value.charAt(0)=='.' || value.charAt(value.length-1)=='.' )
    return false;

  return true;
}//checkNumber

//-------------------------------------------------------
// 数字チェック（小数あり）
//-------------------------------------------------------
function checkNumberDecimal( value )
{
  if( value.length==0 )
    return false;

  if( isNaN( value ) )
    return false;

  //0以外で先頭0で、2文字目が'.'でない数値チェック 例 030
  if( value.length!=1 && value.charAt(0)=='0' && value.charAt(1)!='.' )
    return false;

  //先頭/終了が'.'でない数値チェック 例 .530 530.
  if( value.charAt(0)=='.' || value.charAt(value.length-1)=='.' )
    return false;

  return true;
}//checkNumberDecimal

//-------------------------------------------------------
// デフォルト整数部（小数点前）桁数チェック
// @value       : チェックする値
//-------------------------------------------------------
function checkIntegerBidLengthDef( value )
{
  return checkIntegerLength( value, DEF_BID_PLURAL_INTEGER_LENGTH );
}

//-------------------------------------------------------
// デフォルト小数部（小数点以降）桁数チェック
// @value       : チェックする値
//-------------------------------------------------------
function checkDecimalBidLengthDef( value )
{
  return checkDecimalLength( value, DEF_BID_PLURAL_DECIMAL_LENGTH );
}

//-------------------------------------------------------
// 整数部（小数点前）桁数チェック
// @value       : チェックする値
// @decLen      : 許容される桁数
//-------------------------------------------------------
function checkIntegerLength( value, intLen )
{
  if( value.length == 0 )
    return false;

  if( isNaN( value ) )
    return false;

  var dIndex = value.indexOf(".");
  if( dIndex < 0 )
    dIndex = value.length;

  if( dIndex > intLen )
      return false;

  return true;
}// checkDecimalLength

//-------------------------------------------------------
// 小数部（小数点以降）桁数チェック
// @value       : チェックする値
// @decLen      : 許容される桁数
//-------------------------------------------------------
function checkDecimalLength( value, decLen )
{
  if( value.length == 0 )
    return false;

  if( isNaN( value ) )
    return false;

  var dIndex = value.indexOf(".");
  if( dIndex >= 0 ){
    var chkDecValue = value.substring(dIndex+1, value.length);
    if( chkDecValue.length > decLen ){
      return false;
    }
  }

  return true;
}// checkDecimalLength

//-------------------------------------------------------
// ＩＤチェック
//-------------------------------------------------------
function checkId( value )
{

  for( var i=0 ; i<value.length ; i++ )
  {
    if( isNaN( parseInt( value.charAt(i) ) ) )
    {
      return false;
    }
  }
  return true;

}//checkId

//-------------------------------------------------------
// ＴＥＬチェック
//-------------------------------------------------------
function checkTelephone( value )
{

  for( var i=0 ; i<value.length ; i++ )
  {

    if( isNaN( parseInt( value.charAt(i) ) ) && "-" != value.charAt(i) )
    {
      return false;
    }

  }
  return true;

}//checkTelephone

//-------------------------------------------------------
// 署名済み文書送信処理
//-------------------------------------------------------
function submitSignedDocuments( form, next_id )
{
  if( prepareDispatch( form, next_id ) )
  {
    /* ICカード変更確認結果を返す。 */
    begin();
    execute("Utils.isIcCardChanged(script:'IcCardCheckResult')");
    commit();

    begin();

    // 署名開始処理
    execute("callScript(value:'beginSign')");

    // 署名処理
    for( var i=0, cnt=getSignCount() ; i<cnt ; i++ )
    {
      execute("DocSign.sign(script:'Source', script:'Destination')");
    }

    /* 共通アプレットのプロパティにomeBeforeRequestNameを登録する */
    execute("copyString(value:'" + getBeforeRequestName() + "', omeBeforeRequestName)");

    // 乱数署名
    execute("RandomSign.sign(script:'SignedRandomKey')");

    // 署名済みデータを送信
    execute("callScript(value:'submitCall')");

    commit();
  }
}//submitSignedDocuments

//-------------------------------------------------------
// 署名開始処理
//-------------------------------------------------------
function beginSign()
{
  signIndex=0;
}//beginSign

//-------------------------------------------------------------
// 予定価格表示処理
//-------------------------------------------------------------
function showPlannedPriceAndJudge()
{
  if( document.formPlannedPrice.plannedPrice.value==null || document.formPlannedPrice.plannedPrice.value=="" )
  {
    // 初回
    // 暗号化予定価格を複合して表示
    begin();

    execute(
      "PlannedPrice.decryptPrice( " +
        "script:'PlannedPriceKey', script:'EncryptedPlannedPrice', " +
        "script:'PlannedPrice')");

    commit();
  }
  else
  {
    // 予定価格表示
    showPlannedPrice();

    // 予定価格判定結果表示
    showPlannedPriceJudge();
  }
}//showPlannedPriceAndJudge

//-------------------------------------------------------------
// 予定価格表示処理
//-------------------------------------------------------------
function showPlannedPrice()
{
  // 予定価格の表示
  document.getElementById('plannedPriceMark').innerHTML=addUnit( document.formPlannedPrice.plannedPrice.value, "Jp" );

  // 基準価格の表示
  if( document.formPlannedPrice.standardPrice )
  {
    document.getElementById('standardPriceMark').innerHTML=addUnit( document.formPlannedPrice.standardPrice.value, "Jp" );
  }
}//showPlannedPrice

//-------------------------------------------------------------
// 予定価格判定結果表示処理
//-------------------------------------------------------------
function showPlannedPriceJudge()
{
  var plannedPrice;
  var standardPrice;

  // 予定価格
  plannedPrice=Number( document.formPlannedPrice.plannedPrice.value );

  // 基準価格
  if( document.formPlannedPrice.standardPrice )
  {
    standardPrice=Number( document.formPlannedPrice.standardPrice.value );
  }

  // 予定価格
  var moreThanPlannedPrice;

  if( document.formRegist.moreThanPlannedPrice )
    moreThanPlannedPrice=true; // 予定価格以上ならば○
  else
    moreThanPlannedPrice=false;// 予定価格以下ならば○

  for( var cnt=0, count=Number( document.formRegist.dataCount.value ) ; cnt < count ; cnt++ )
  {
    var o=document.formRegist["bidPrice_"+cnt];

    if( o )
    {
      var target=Number(document.formRegist["bidPrice_"+cnt].value);

      if( target != 0){
        // 予定価格の表示
        document.getElementById('judgeMark1'+cnt).innerHTML=
          ( moreThanPlannedPrice ? plannedPrice <= target : plannedPrice >= target ) ? 
          "○" : "×";

        // 基準価格の表示
        if( document.formPlannedPrice.standardPrice )
        {
          document.getElementById('judgeMark2'+cnt).innerHTML=
            ( standardPrice <= target ) ? "○" : "×";
        }
      }
    }
  }
}//showPlannedPriceJudge

//-------------------------------------------------------------
// 予定価格設定表示処理
//-------------------------------------------------------------
function setPlannedPrice( csv )
{
  var i;
  var price;
  var plannedPrice;
  var standardPrice;
  var totalx;
  var tag;

  price = csv.split(",");

  // 予定価格の設定
  document.formPlannedPrice.plannedPrice.value=price[0];

  // 基準価格の設定
  if( document.formPlannedPrice.standardPrice )
  {
    document.formPlannedPrice.standardPrice.value=price[1];
  }

  totalx=price[2];

  // 予定価格表示
  showPlannedPrice();

  // 予定価格判定結果表示
  showPlannedPriceJudge();
}//setPlannedPrice

//-------------------------------------------------------------
// 暗号化予定価格取得処理
//-------------------------------------------------------------
function getEncryptedPlannedPrice()
{
  return document.formPlannedPrice.encryptedPlannedPrice.value;
}//getEncryptedPlannedPrice

//-------------------------------------------------------------
// 予定価格共通鍵取得処理
//-------------------------------------------------------------
function getPlannedPriceKey()
{
  return document.formPlannedPrice.plannedPriceKey.value;
}//getPlannedPriceKey

//-------------------------------------------------------------
// 空文字を"&nbsp;"に置き換えます
//-------------------------------------------------------------
function convertEmptyString( s )
{
  if( s==null || s=="" )
  {
    return "&nbsp;";
  }

  return s;
}//convertEmptyString

//-------------------------------------------------------------
// 金額入力コンポーネントのイベント初期化処理
//-------------------------------------------------------------
function setPriceTextEvent( text1, text2, text3 )
{
  if( priceTextSet==null )
    priceTextSet=new Object();

  var set=new Array(3);
  priceTextSet[ text1.name ]=set;

  set[0]=text1;
  set[1]=text2;
  set[2]=text3;

  text1.onkeypress = kPress;
  text1.onkeyup    = kUp;
  text1.onChange   = kUp;

  setPriceText( text1, text1.value );
}//setPriceTextEvent

//-------------------------------------------------------------
// 金額入力コンポーネントに値を設定する
//-------------------------------------------------------------
function setPriceText( text, value )
{
  text.value=value;

  var e=new Object();
  e["target"]=text;
  kUp(e);
}//setPriceText

//-------------------------------------------------------------
// 金額入力コンポーネントの集合を取得する
//-------------------------------------------------------------
function getPriceTextSet( e )
{
  return e ?
    priceTextSet[ e.target.name ] :
    priceTextSet[ event.srcElement.name ] ;
}//getPriceTextSet

//-----------------------------------------------------------
// グローバル変数priceText上でのキー押下時処理
//-----------------------------------------------------------
function kPress( e )
{
  // キーコード取得
  var dx=getKEYCODE(e);

  // 入力された文字が数字
  if( dx >= 48 && dx <= 57 )
  {
    var set=getPriceTextSet( e );
    setUnitText( set[1], set[0].value );
    setUnitText( set[2], set[0].value );
    return true;
  }

  // 入力された文字が"backSpace" (NNの場合のみのコード)
  else if (dx == 8) {
    return true;
  }

  // 入力された文字が"."、かつ既に数字が入力されている、かつ既に"."を入力されていない
  else if ( dx == 46 )
  {
    var set=getPriceTextSet( e );

    if( set[0].value != '' && set[0].value.indexOf('.') == -1 )
      return true;
  }

  // それ以外は何もせずfalseをリターンする
  return false;
}//kPress

//-----------------------------------------------------------
// グローバル変数priceText上でのキー離時処理
//-----------------------------------------------------------
function kUp(e)
{
  var set=getPriceTextSet( e );
  setUnitText( set[1], set[0].value );
  setUnitText( set[2], set[0].value );
  return true;
}//kUp

//-----------------------------------------------------------
// 単位挿入文字列作成処理
// (EbCommand.jsの同名関数と同じ動作をしますが小数点数に対応しています)
//-----------------------------------------------------------
function addUnit(str,flag) {

  /*
   * 金額単位挿入対象文字列(str)がnullもしくは、
   * 空文字(レングス0）の場合は何もせず空文字をリターンする。
   */
  if (str == null || str.length == 0) {
    return "";
  }

  /*
   * 小数点以下の数値が入力されている場合は、小数点以下の値を
   * 切り取り、リターン時に連結して返す
   */
  var strInteger = '';
  var strDecimal = '';
  if (str.indexOf('.') != -1) {
    strInteger = str.substr(0, str.indexOf('.'));
    strDecimal = str.substr(str.indexOf('.') + 1);
    str = strInteger;
  }

  //単位を挿入する処理
  tanni = new Array('万', '億', '兆');
  var strLen = str.length;
  var returnStr = "";

  if(strLen<4) {
    if(strDecimal != '') {
      str = str + '.' + strDecimal;
    }
    return str;
  }
  else {
    str_arr = str.split('');
    str_arr = str_arr.reverse();
    bigin = 0;
    for(i=0; i<strLen; i=i+4) {
      tmp_s=str_arr[i]+str_arr[i+1]+str_arr[i+2]+str_arr[i+3];
      if(tmp_s=='0000'){
        bigin=bigin+4;
      }else{
        break;
      }
    }
    if(flag=='Jp'){
      tmp_f = 0;
      for(i=bigin; i<strLen; i++) {
        tmp_c = 0;
        if(i==4) {
          while(returnStr.indexOf('0')==0){
            returnStr = returnStr.substr(1,returnStr.length);
          }
          j=i;
          while(str.lastIndexOf('0',strLen-1-j)==strLen-1-j){
            tmp_c++;
            j++;
          }
          if(tmp_c<4){
            returnStr = str.charAt(strLen-1-i) + tanni[0] + returnStr;
            tmp_f = 0;
          }else{
            tmp_f = 1;
          }
        } else if(i==8) {
          while(returnStr.indexOf('0')==0){
            returnStr = returnStr.substr(1,returnStr.length);
          }
          j=i;
          while(str.lastIndexOf('0',strLen-1-j)==strLen-1-j){
            tmp_c++;
            j++;
          }
          if(tmp_c<4){
            returnStr = str.charAt(strLen-1-i) + tanni[1] + returnStr;
            tmp_f = 0;
          }else{
            tmp_f = 1;
          }
        } else if(i==12) {
          while(returnStr.indexOf('0')==0){
            returnStr = returnStr.substr(1,returnStr.length);
          }
          j=i;
          while(str.lastIndexOf('0',strLen-1-j)==strLen-1-j){
            tmp_c++;
            j++;
          }
          if(tmp_c<4){
            returnStr = str.charAt(strLen-1-i) + tanni[2] + returnStr;
            tmp_f = 0;
          }else{
            tmp_f = 1;
          }
        } else {
          if(tmp_f==0){
            returnStr = str.charAt(strLen-1-i) + returnStr;
          }
        }
      }
    }else if(flag=='Comma'){
      for(i=0; i<strLen; i++) {
        if(i==3) {
          returnStr = str.charAt(strLen-1-i) + ',' + returnStr;
        } else if(i==6) {
          returnStr = str.charAt(strLen-1-i) + ',' + returnStr;
        } else if(i==9) {
          returnStr = str.charAt(strLen-1-i) + ',' + returnStr;
        } else if(i==12) {
          returnStr = str.charAt(strLen-1-i) + ',' + returnStr;
        } else if(i==15) {
          returnStr = str.charAt(strLen-1-i) + ',' + returnStr;
        } else {
          returnStr = str.charAt(strLen-1-i) + returnStr;
        }
      }
    }
  } 

  //編集済み文字列をreturn
  if(strDecimal != '') {
    returnStr = returnStr + '.' + strDecimal;
  }
  return returnStr;
}//addUnit

//-------------------------------------------------------------
// ポップアップウィンドウ作成
//-------------------------------------------------------------
function createPopupWindow( width, height, init, params, action )
{
  closePopupWindow();

  popupWindow=window.open( contextPath+"/ebidmlit/html/blank.html","",
    "left=100,"+
    "top=100,"+
    "toolbar=0,"+
    "location=0,"+
    "directories=0,"+
// ***** DEL 2007.04.10 START *****
//    "status=0,"+
// ***** DEL 2007.04.10 END *****
// ***** ADD 2007.04.10 START *****
    "status=yes,"+
// ***** ADD 2007.04.10 END *****
    "menubar=0,"+
    "scrollbars=1,"+
    "resizable=0,"+
    "dependent=1,"+
    "width="+width+","+
    "height="+height );

  popupWindow.document.open();
  popupWindow.document.charset="Shift_JIS";

  if( init || params )
  {
    popupWindow.document.write(
       "<HTML>"
      +"<HEAD>"
      +   "<LINK rel='stylesheet' type='text/css' href='" + contextPath + "/ebidmlit/goods/css/default.css'>"
      +   "<SCRIPT language='JavaScript'>"
      +     "function onStart() {" + ( init ? init : "" )+ "}"
      +     "function submitCall() { document.formRequest.submit(); }"
      +   "</SCRIPT>"
      +"</HEAD>"
      +"<BODY onLoad='onStart();' onBlur='focus();'>"
      +"<FORM name='formRequest' method='post' target='_self' action='" + ( action ? action : defaultAction ) + "'>"
      +( params ? params : getStdParams() )
      +"</FORM>"
      +"</BODY>"
      +"</HTML>"
    );
  }

  popupWindow.document.close();
}//createPopupWindow

//-------------------------------------------------------------
// ポップアップウィンドウを閉じる
//-------------------------------------------------------------
function closePopupWindow( width, height, init, params, action )
{
  if( popupWindow!=null )
  {
    popupWindow.close();
    popupWindow=null;
  }
}//closePopupWindow

//-------------------------------------------------------
// 案件一覧画面遷移処理
//-------------------------------------------------------
function dispatchProjectListFromLink( form, next_id )
{
  if( prepareDispatch( form, next_id ) )
  {
    // リクエスト送信
    request();
  }
}//dispatchProjectListFromLink

//-------------------------------------------------------
// 案件一覧画面表示
//-------------------------------------------------------
function linkProjectList()
{
  dispatchProjectListFromLink( document.formMenu, "H5023HPD001" );
}//linkProjectList

//-------------------------------------------------------
// 案件登録画面表示
//-------------------------------------------------------
function linkProjectRegist()
{
  dispatch( document.formMenu, "H502HPR001" );
}//linkProjectRegist

//-------------------------------------------------------
// 案件修正画面表示
//-------------------------------------------------------
function linkProjectModify()
{
  dispatchProjectListFromLink( document.formMenu, "H5102HPR006" );
}//linkProjectModify

//-------------------------------------------------------
// 指名先画面表示
//-------------------------------------------------------
function linkNomination()
{
  dispatchProjectListFromLink( document.formMenu, "H5131HPR009" );
}//linkNomination

//-------------------------------------------------------
// 取止め選択画面表示
//-------------------------------------------------------
function linkProjectStop()
{
  dispatchProjectListFromLink( document.formMenu, "H5032HPS001" );
}//linkProjectStop

//-------------------------------------------------------
// 計算式設定画面表示
//-------------------------------------------------------
function linkEquationSetting()
{
  dispatch( document.formMenu, "H5241HAS001" );
}//linkEquationSetting

//-------------------------------------------------------
// 紙入札移行案件選択画面表示
//-------------------------------------------------------
function linkPaperChange()
{
  dispatchProjectListFromLink( document.formMenu, "H6301HPC001" );
}//linkPaperChange

//-------------------------------------------------------
// 原本性管理画面表示
//-------------------------------------------------------
function linkOriginalManagement()
{
  dispatchProjectListFromLink( document.formMenu, "H6211HGS001" );
}//linkOriginalManagement

//-------------------------------------------------------
// 紙業者登録画面表示
//-------------------------------------------------------
function linkPaperCompanyRegist()
{
  dispatch( document.formMenu, "H635HCR001" );
}//linkPaperCompanyRegist

//-------------------------------------------------------
// 業者一覧画面表示
//-------------------------------------------------------
function linkCompanyList()
{
  dispatch( document.formMenu, "H636HCR002" );
}//linkCompanyList

//------------------------------------------------------------
/**
 * 手動検証処理
 *
 */
//-----------------------------------------------------------
function verify2SignedXMLGoods() {
  var resultFlag;            //セット結果

  /* コマンド対象用formオブジェクトに、送信対象formをセットする */
  resultFlag = setCommandFormObj(document.formRegist);
  if (resultFlag == true) {

    /* requestVerify2SignGoods()を呼び出す */
    requestVerify2SignGoods();
  } else {
    return;
  }
}

//-----------------------------------------------------------
/**
 * 自動署名検証フラグ取得処理
 *
 */
//-----------------------------------------------------------
function getOnloadAutoVerifyGoods() {

  /* 対象のhidden項目から自動署名検証フラグを取得する */
  var onloadAutoVerify = document.formVerify.onloadAutoVerify.value;

  /* 自動署名検証フラグをリターンする */
  return onloadAutoVerify;
}

//-----------------------------------------------------------
/**
 * 手動検証用リクエスト
 *
 */
//-----------------------------------------------------------
function requestVerify2SignGoods() {

  /* 共通アプレット処理コマンド蓄積開始functionを呼び出す */
  begin();

  /* verifySign2Goodsを呼び出す */
  verify2SignGoods();

  /* 共通アプレット処理コマンド蓄積終了functionを呼び出す */
  commit();
}

//-----------------------------------------------------------
/**
 * 手動検証
 *
 */
//-----------------------------------------------------------
function verify2SignGoods() {
  /* 共通アプレットのプロパティに署名検証対象の帳票XMLをコピーする */
  execute("copyString(value:'" + getVerifyTarget() + "', signedData)");

  /* XML署名検証コマンドを呼び出す */
  execute("DocSign.verify2(signedData, script:'Verify2ResultGoods')");

  /*
   * 共通アプレットの処理が終わった後に、
   * 呼びだしてもらうfunction'resetCommandFormObj'をセットする
   */
  execute("callScript(value:'resetCommandFormObj')");
}

//-----------------------------------------------------------
/**
 * 読込時署名検証呼び分け処理
 *
 */
//-----------------------------------------------------------
function onLoadVerifyOption( onloadAutoVerify ) {

  //引数の自動署名検証フラグにより読込時署名検証処理を呼び分ける
  if(onloadAutoVerify == "0" ) {
    onLoad();
  }
  else if(onloadAutoVerify == "1" ) {
    onLoadEasyVerify();
  }
  else if(onloadAutoVerify == "2" ) {
    onLoadVerify();
  }
}

//-----------------------------------------------------------
/**
 * ダウンロード事前設定処理
 *
 */
//-----------------------------------------------------------
function preDownloadFile( argAttachFileSaveName,argFileNameObj )
{
  if( argFileNameObj != null && argFileNameObj.value != null ) {
    downloadFile(argAttachFileSaveName, argFileNameObj.value);
  }
  else {
    resetCommandFormObj();
  }
}


//-----------------------------------------------------------
/**
 * ダウンロード処理
 *
 */
//-----------------------------------------------------------
function downloadFile( argAttachFileSaveName,argAttachFileName )
{
  document.formAttachFileDownload.AttachedFileName.value = argAttachFileSaveName;
  document.formAttachFileDownload.action = defaultAction + "/" + argAttachFileName;
  dispatchWithoutDialog( document.formAttachFileDownload, "FWDOWN001" );
}



//-------------------------------------------------------
// 案件一覧画面表示
//-------------------------------------------------------
function acceptLinkProjectList()
{
  dispatchProjectListFromLink( document.formMenu, "J502JPD001" );
}//linkProjectList

//-------------------------------------------------------
// 登録利用者一覧画面表示
//-------------------------------------------------------
function registUserList()
{
  dispatchProjectListFromLink( document.formMenu, "J700JBC001" );
}//linkProjectList
