// =========================================
//   vds関連
// =========================================
var vdsPlayBtn = "/common/images/vds_read.gif";       // 読み上げボタンのファイル名
var vdsStopBtn = "/common/images/vds_stop.gif";       // 停止ボタンのファイル名
var vdsMenteBtn = "/common/images/vds_mente.gif";     // メンテナンス中のファイル名
var vdsLoaderImg = "/common/images/vds_loading.gif";  // 作成中のファイル名
var vdsplay;                                    // vds Playerオブジェクト
var vdsobj;                                     // vds オブジェクト
var vdsNowReadID = "";                          // 現在、読み上げ中のID
var vdsTmID;
var vdsObjTmCnt = 0;            // -1＝API取得終了、0＝未実行、0＞API取得終了チェック回数
var vdsInitTmCnt = 0;           // -1＝初期化終了、0＝未実行、0＞初期化終了チェック回数
var vdsInitErr = "";            // vds初期化エラー
var vdsTmMsec = 500;            // タイマの待ち時間(ms)
var vdsTmMaxCnt = 8;            // タイマの最大チェック回数


/*
   読み上げ処理
       APIを取得し読み上げを行う。
       読み上げボタンを「作成中」に変更し、音声合成を行う。
       引数：vdsId＝読み上げボタンのID
                    （読み上げ先文章のタグのIDは指定された内容に「_text」
                      または「_text」＋連番（「_text1」など）が付く。
                      連番は最大50まで）
*/
function vdsSetupRead(vdsId){
  var readObj;

  if(vdsId == vdsNowReadID){
    return;  // 同じ音声を作成中のときには無視する
  }
  if(vdsObjTmCnt == 0 && typeof(vdsTmID) == "undefined"){
    // API 取得
    if(vdsInitErr != ""){ return;}
    readObj = document.getElementById(vdsId + "_playBtn")
    readObj.src = vdsLoaderImg;
    readObj.alt = "作成中";
    vdsNowReadID = vdsId;
    var jsapi = document.createElement('script');
    jsapi.src = "http://js-api.vdsapi.ne.jp/cgi-bin/vds.cgi?key=505fc43bb9bd996fad1471e419d6a555";
    var retjsapi = document.body.appendChild(jsapi);
    if(typeof(retjsapi) == "undefined"){
      vdsInitErr = "getAPI Error";
      vdsSetButton(vdsId,0);    // 読み上げボタンをメンテナンス中に変更
      return;
    }
    // vds用Object作成＆読み上げ
    vdsTmID = setInterval("mkVdsObj(\"" + vdsId + "\")",vdsTmMsec);
  }else{
    // 読み上げ
    if(vdsInitErr == "" && vdsInitTmCnt < 0){
      vdsStop(vdsNowReadID);  // 音声作成または再生中の場合のための停止処理
      readObj = document.getElementById(vdsId + "_playBtn")
      readObj.src = vdsLoaderImg;
      readObj.alt = "作成中";
      vdsNowReadID = vdsId;
      exeTxtRead(vdsId);
    }else{
      return;
    }
  }
}

/*
   vds用オブジェクトの作成処理
       正常終了：読み上げ処理開始
       エラー  ：読み上げボタンを「メンテナンス中」に変更
*/
function mkVdsObj(vdsId){
  var vdsErr;
  if(vdsObjTmCnt < 0){ return; }
  if(vdsInitErr != ""){ return; }
  // オブジェクト作成
  vdsObjTmCnt ++;
  try{
    if(vdsObjTmCnt >= 0){
      vdsplay = new VoiceDeliveryPlayer("vdsSetFlash");
      vdsobj = new VoiceDelivery(vdsplay,"vdsobj");
      vdsObjTmCnt = -1;
      clearInterval(vdsTmID);
      vdsTmID = setInterval("exeTxtRead(\"" + vdsId + "\")",vdsTmMsec);
    }
  }catch(vdsErr){
    vdsErr += "";       // 文字列化
    if(vdsErr.substr(0,1) == "-" && vdsErr.length == 4){
      clearInterval(vdsTmID);
      vdsInitErr = "mkVdsObj Error [" + vdsErr + "]";
      if(vdsErr == "-701" || vdsErr == "-702"){
        ret = vdsSetButton(vdsID,3);    // メンテナンス中（Flash対応）
      }else{
        vdsSetButton(vdsId,0);    // 読み上げボタンをメンテナンス中に変更
      }
    }else{
      if(vdsObjTmCnt > vdsTmMaxCnt){
        clearInterval(vdsTmID);
        vdsInitErr = "mkVdsObj Error [" + vdsErr + "]";
        vdsSetButton(vdsId,0);    // 読み上げボタンをメンテナンス中に変更
      }
    }
  }
}

/*
   読み上げ処理
       読み上げ中の文章があれば停止する。
*/
function exeTxtRead(vdsId){
  var txt,vdsret;
  var readObj,readTxt,ii;

  // flash初期化チェック
  if(vdsInitTmCnt >= 0 && vdsObjTmCnt < 0){
    vdsInitTmCnt ++;
    if(vdsplay.isInitialed() == 1){
      clearInterval(vdsTmID);
      vdsInitTmCnt = -1;
    }else{
      if(vdsInitTmCnt > vdsTmMaxCnt){
        clearInterval(vdsTmID);
        vdsInitErr = "exeTxtRead Error [not isInitialed]";
        vdsSetButton(vdsId,0);    // 読み上げボタンをメンテナンス中に変更
      }
    }
  }

  if(vdsInitTmCnt < 0){
    txt = "";
    readObj = document.getElementById(vdsId + "_text");
    if(readObj){
      readTxt = readObj.innerHTML;
      readTxt = readTxt.replace(/&nbsp;/gi," ");
      readTxt = readTxt.replace(/&amp;/gi,"&");
      txt += readTxt.replace(/<img[ \t]+[^>]*alt="([^"]*)"[^>]*>/gi, '$1');
    }else{
      for(ii=1; ii <= 50; ii++){
        readObj = document.getElementById(vdsId + "_text" + ii);
        if(readObj){
          readTxt = readObj.innerHTML;
          readTxt = readTxt.replace(/&nbsp;/gi," ");
          readTxt = readTxt.replace(/&amp;/gi,"&");
//          alert(ii + ". before---->\n" + readTxt);
          readTxt = readTxt.replace(/<img[ \t]+[^>]*alt="([^"]*)"[^>]*>/gi, '$1');
          readTxt = readTxt.replace(/<img[ \t]+[^>]*alt=([^ \t]+)[^>]*>/gi, '$1');
//          alert(ii + ". after---->\n" + readTxt);
          if(readTxt.substr(readTxt.length - 1,1) != "。"){readTxt += "。"};
          txt += readTxt;
        }else{
          break;
        }
      }
    }
    vdsret = vdsobj.setRate(2);  // ちょっと早め
    if(vdsret == 0){
      vdsret = vdsobj.setCast('KeikoJPf');  // 女性音
    }
    if(vdsret == 0){
      vdsret = vdsobj.setString(txt);  // 読み上げ開始
      if(vdsret != 0){alert("読み上げエラー＝" + vdsret)}; // デバッグ用
    }
    if(vdsret == 0){
      vdsobj.setFinishCallback("vdsServerCallbak(\"" + vdsId + "\")");
      vdsobj.speak();
    }else{
      vdsSetButton(vdsId,0);
    }
  }
}

/*
   音声合成作成後の処理
       正常終了：読み上げボタンが「作成中」のときには「読み上げ」に変更
       エラー  ：読み上げボタンを「メンテナンス中」に変更
*/
function vdsServerCallbak(vdsId){
  var ret = vdsobj.getServerError();
  var vdsBtn = document.getElementById(vdsId + "_playBtn");
  if(ret == 0){
    vdsBtn.src = vdsPlayBtn;
    vdsBtn.alt = "読み上げ";
  }else{
    vdsSetButton(vdsId,0);    // 音声作成エラー
  }
  vdsNowReadID = "";
}

/*
   読み上げ停止処理
*/
function vdsStop(vdsId){
  if(vdsInitErr != ""){return;}
  if(vdsInitTmCnt >= 0){return;}
  vdsplay.speakStop();
  if(vdsNowReadID != ""){
    var vdsBtn = document.getElementById(vdsId + "_playBtn");
    vdsBtn.src = vdsPlayBtn;
    vdsBtn.alt = "読み上げ";
  }
  vdsNowReadID = "";
}


/*
   vdsのボタン設置処理
*/
function vdsBtnSet(){
  if(navigator.appName == "Microsoft Internet Explorer"){
    initBtn4IE(4,"");
  }else{
    initBtn4FF(4,"");
  }
}

// ＩＥ用読み上げボタンの初期セット処理
function initBtn4IE(setFlg,err){
  var ret;
  var ii;
  var vdsBtnList = document.getElementsByTagName("div");
  cnt = vdsBtnList.length - 1;
  // ボタンの設置とvdsobjの生成
  for(ii=0;ii<=cnt;ii++){
    ret = false;
    if(vdsBtnList[ii].name == "vdsReadBtn"){
      vdsID = vdsBtnList[ii].id;
      if(vdsID != ""){
        if(err == "-701"){
          ret = vdsSetButton(vdsID,3);    // メンテナンス中（Flash対応）
        }else{
          switch (setFlg){
            case 3:
              ret = vdsSetButton(vdsID,1);  // 読み上げボタン
              break;
            case 4:
              ret = vdsSetButton(vdsID,4);  // 読み上げボタン
              break;
            default:
              ret = vdsSetButton(vdsID,0);  // メンテナンス中
              break;
          }
        }
      }
    }
  }
}

// ＦＦなど（ＩＥ以外）用読み上げボタンの初期セット処理
//   各読み上げボタンのセット処理
function initBtn4FF(setFlg,err){
  var ret;
  var ii;
  var vdsBtnList = document.getElementsByName("vdsReadBtn");
  cnt = vdsBtnList.length - 1;
  // ボタンの設置とvdsobjの生成
  for(ii=0;ii<=cnt;ii++){
    ret = false;
    vdsID = vdsBtnList[ii].id;
    if(vdsID != ""){
      if(err == "-701"){
        ret = vdsSetButton(vdsID,3);    // メンテナンス中（Flash対応）
      }else{
        switch (setFlg){
          case 3:
            ret = vdsSetButton(vdsID,1);  // 読み上げボタン
            break;
          case 4:
            ret = vdsSetButton(vdsID,4);  // 読み上げボタン
            break;
          default:
            ret = vdsSetButton(vdsID,0);  // メンテナンス中
            break;
        }
      }
    }
  }
}


// 読み上げボタンの設置
function vdsSetButton(vdsId,flg){
  var setTag = "";
  var vdsArea = document.getElementById(vdsId);
  if(vdsArea == null){
    return false;
  }
  switch (flg){
    case 1:
      // 再生可能なボタンの設置
      setTag = '<a href="javascript:void(0)" ';
      setTag += 'onClick="vdsRead(\'' + vdsId + '\'); return false;">';
      setTag += '<img id="' + vdsId + '_playBtn" ';
      setTag += 'src="' + vdsPlayBtn + '" alt="読み上げ"></a> ';
      setTag += '<a href="javascript:void(0)" ';
      setTag += 'onClick="vdsStop(\'' + vdsId + '\'); return false;">';
      setTag += '<img id="' + vdsId + '_stopBtn" ';
      setTag += 'src="' + vdsStopBtn + '" alt="停止"></a> ';
      break;
    case 3:
      // flashplayer がないことによるエラー
      setTag = '<a href="javascript:void(0)" onClick=';
      setTag += '"alert(\'お使いのAdobe Flash Playerをバージョンアップしてください。\'); return false;">';
      setTag += '<img src="' + vdsMenteBtn + '" alt="メンテナンス中"></a>';
      break;
    case 4:
      // 再生可能なボタンの設置
      setTag = '<a href="javascript:void(0)" ';
      setTag += 'onClick="vdsSetupRead(\'' + vdsId + '\'); return false;">';
      setTag += '<img id="' + vdsId + '_playBtn" ';
      setTag += 'src="' + vdsPlayBtn + '" alt="読み上げ"></a> ';
      setTag += '<a href="javascript:void(0)" ';
      setTag += 'onClick="vdsStop(\'' + vdsId + '\'); return false;">';
      setTag += '<img id="' + vdsId + '_stopBtn" ';
      setTag += 'src="' + vdsStopBtn + '" alt="停止"></a> ';
      break;
    default:
      // メンテナンス中の設置
      setTag = '<img src="' + vdsMenteBtn + '" alt="メンテナンス中" />';
      break;
  }
  vdsArea.innerHTML = setTag;
  return true;
}

//----------------------
/*
   vdsの準備処理
       vdsの準備処理を行い、読み上げボタンを設置する
*/
function vdsSetup(){
  var flg = 0;
  var errcd;
  try{
    flg = 1;
    vdsplay = new VoiceDeliveryPlayer("vdsSetFlash");
    flg = 2;
    vdsobj = new VoiceDelivery(vdsplay,"vdsobj");
    flg = 3;
//    vdsobj.setCache(0);   // テスト用に常に音声合成
  }catch (errcd) {
    // エラー処理があれば入れる
    //alert("flg=" + flg + "\nvdsObjectError=" + errcd);
  }
  vdsObjTmCnt = -1;
  vdsInitTmCnt = -1;
  if(navigator.appName == "Microsoft Internet Explorer"){
    initBtn4IE(flg,errcd);
  }else{
    initBtn4FF(flg,errcd);
  }
}

/*
   読み上げ処理
       読み上げ中の文章があれば停止する。
       読み上げボタンを「作成中」に変更し、音声合成を行う。
       引数：vdsId＝読み上げボタンのID
                    （読み上げ先文章のタグのIDは指定された内容に「_text」
                      または「_text」＋連番（「_text1」など）が付く。
                      連番は最大20まで）
*/
function vdsRead(vdsId){
  var txt,vdsret;
  var readObj,readTxt,ii;
  if(typeof(vdsplay) != "undefined"){
    vdsStop(vdsNowReadID);  // 音声作成または再生中の場合のための停止処理
    if(vdsId == vdsNowReadID){
      return;  // 同じ音声を作成中のときには無視する
    }
    txt = "";
    readObj = document.getElementById(vdsId + "_text");
    if(readObj){
      readTxt = readObj.innerHTML;
      readTxt = readTxt.replace(/&nbsp;/gi," ");
      readTxt = readTxt.replace(/&amp;/gi,"&");
      txt += readTxt.replace(/<img[ \t]+[^>]*alt="([^"]*)"[^>]*>/gi, '$1');
    }else{
      for(ii=1; ii <= 50; ii++){
        readObj = document.getElementById(vdsId + "_text" + ii);
        if(readObj){
          readTxt = readObj.innerHTML;
          readTxt = readTxt.replace(/&nbsp;/g," ");
          readTxt = readTxt.replace(/&amp;/gi,"&");
//          alert(ii + ". before---->\n" + readTxt);
          readTxt = readTxt.replace(/<img[ \t]+[^>]*alt="([^"]*)"[^>]*>/gi, '$1');
          readTxt = readTxt.replace(/<img[ \t]+[^>]*alt=([^ \t]+)[^>]*>/gi, '$1');
//          alert(ii + ". after---->\n" + readTxt);
          if(readTxt.substr(readTxt.length - 1,1) != "。"){readTxt += "。"};
          txt += readTxt;
        }else{
          break;
        }
      }
    }
    vdsret = vdsobj.setRate(2);  // ちょっと早め
    if(vdsret == 0){
      vdsret = vdsobj.setCast('KeikoJPf');  // 女性音
    }
    if(vdsret == 0){
      vdsret = vdsobj.setString(txt);  // 読み上げ開始
      if(vdsret != 0){alert("読み上げエラー＝" + vdsret)}; // デバッグ用
    }
    if(vdsret == 0){
      readObj = document.getElementById(vdsId + "_playBtn")
      readObj.src = vdsLoaderImg;
      readObj.alt = "作成中";
      vdsNowReadID = vdsId;
      vdsobj.setFinishCallback("vdsServerCallbak(\"" + vdsId + "\")");
      vdsobj.speak();
    }else{
      vdsSetButton(vdsId,0);
    }
  }
}


