﻿/*----------------------------------------------------------------------------------------------------
/+	VDS関連 <http://www.vdsapi.ne.jp/>
/+----------------------------------------------------------------------------------------------------*/
//	document.getElementById('inputMessage').innerHTML = readMessage;

var vdsp;
var vds;

function vdsInit() {
	try {
		vdsp = new VoiceDeliveryPlayer("vdsp");
		vds = new VoiceDelivery(vdsp,"vds");
	} catch(e) {
		alert("Cannot Create Object");
	}
}

function talkTo(targetID,readSpeaker,readRate) {
	var chkValue = chkCookie();
	if (chkValue == false) {
		dispErrorMessage('只今、音声再生回数制限を設けています。少し時間をおいてお試しください。ご協力お願いします！');
		return false;
	}

	var readElem = document.getElementById(targetID);
	var readMessage = readElem.innerHTML;

	dispErrorMessage('');
	if (readMessage=='') return false;

	var errNo = 0;
	
	vdsp.speakStop();						// 再生停止
	if (readSpeaker == 'f') {				// 音声選択
		vds.setCast("KeikoJPf");
	} else {
		vds.setCast("TakashiJPm");
	}
	if (isNaN(readRate) == false) {			// 再生速度設定(-10～10)
		vds.setRate(readRate);
	} else {
		vds.setRate(0);
	}
	vdsp.setPan(0);							// 左右バランス(-10:左～10:右)
	vdsp.setVolume(1);						// 音量(0:Mute～100)
	errNo = vds.setString(readMessage);		// 読み上げ文字列セット
	switch( errNo ) {
		case -103:
			//alert("メッセージが長すぎて読めません。");
			dispErrorMessage('メッセージが長すぎて読めません。');
			break;
		case -105:
			//alert("メッセージがありません。");
			dispErrorMessage('メッセージがありません。');
			break;
	}
	if (errNo != 0) return false;
	vds.speak();							// 読み上げ
	//vdsCountUp();							// VDSカウントアップ
	switch( vds.getServerError() ) {
		case -301:
			//alert("残念ながら1日当たりの再生回数が上限を超えました。また明日お試しください。");
			dispErrorMessage('残念ながら再生回数が上限を超えました。また来月お試しください。');
			break;
		case -501:
			//alert("ページをリロードし、もう一度再生してみてください。");
			dispErrorMessage('ページをリロードし、もう一度再生してみてください。');
			break;
	}
}

function stopTalk() {
	try {
		vdsp.speakStop();					// 再生停止
	} catch(e) {
	}
}

/* 試聴用  */
function talkToTry(inputTarget,outputTarget,speakerTarget,rateTarget) {
	var inputMessage = document.getElementById(inputTarget).value;
	document.getElementById(outputTarget).innerHTML = inputMessage;
	
	var speakerFlag = '';
	var selElem = document.getElementById(speakerTarget);
	if (selElem.selectedIndex ==0) {
		speakerFlag = 'm';
	} else {
		speakerFlag = 'f';
	}

	var rateFlag = 0;
	var rateElem = document.getElementById(rateTarget);
	switch(rateElem.selectedIndex){
		case 0:rateFlag = 10;
		case 1:rateFlag = 9;
		case 2:rateFlag = 8;
		case 3:rateFlag = 7;
		case 4:rateFlag = 6;
		case 5:rateFlag = 5;
		case 6:rateFlag = 4;
		case 7:rateFlag = 3;
		case 8:rateFlag = 2;
		case 9:rateFlag = 1;
		case 11:rateFlag = -1;
		case 12:rateFlag = -2;
		case 13:rateFlag = -3;
		case 14:rateFlag = -4;
		case 15:rateFlag = -5;
		case 16:rateFlag = -6;
		case 17:rateFlag = -7;
		case 18:rateFlag = -8;
		case 19:rateFlag = -9;
		case 20:rateFlag = -10;
		default:rateFlag = 0;
	}
	talkTo(outputTarget,speakerFlag,rateFlag);
}

/*----------------------------------------------------------------------------------------------------
/+	選択投稿内容を外部PHPより取得する関数
/+----------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------->
/+	PROTTYPE.JS使用版
	<div id="container">content</div>   
	<button onclick="execute()">サンプル実行</button>  
*/
function execute() {   
    var a = new Ajax.Request(   
        "/counter.php",   
        {   
            "method": "get",   
            "parameters": "",   
            onSuccess: function(request) {   
                // alert('読み込み成功しました');   
            },   
            onComplete: function(request) {   
                //alert('読み込みが完了しました');   
                $('container').innerHTML = request.responseText;   
            },   
            onFailure: function(request) {   
                //alert('読み込みに失敗しました');   
            },   
            onException: function (request) {   
                //alert('読み込み中にエラーが発生しました');   
            }   
        }   
    );   
}   
//<-------------------------------------------------------

//グローバル変数の定義
var httpObj;
var timerId;
var timeout_sec = 10; //タイムアウトの秒数
var waitTimerId;
// テキストの内容を表示
function getContent(target_no) {
    // テキストファイルのURLを定義
    var target_url;
    target_url = './item.php?v=' + target_no;

    // 処理を実行するための関数リファレンスを定義
	var getText = '';
    var funcRef = function(text_data) {
		getText = text_data;
    }
    // HTTP通信を開始し、完了したら上記関数を実行させる
    httpRequest(target_url, funcRef);

	return getText;
}

// 引数に与えられたURLにHTTPリクエストを行ない、指定された関数を実行
function httpRequest(target_url, funcitonReference) {
    try {
        if(window.XMLHttpRequest) {
            httpObj = new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            httpObj = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            httpObj = false;
        }
    } catch(e) {
        httpObj = false;
    }
    if(! httpObj) {
        httpObjGenerateFail();
    }
    // タイマーをセット
    timerId = setInterval('timeoutCheck()', 1000);

    httpObj.open("GET", target_url, true);
    httpObj.onreadystatechange = function() {
        if (httpObj.readyState == 4) {
            clearInterval(timerId);
            if (httpObj.status == 200) {
				resTxt = httpObj.responseText;
                funcitonReference(resTxt);
            } else {
                //alert(httpObj.status + ' : ' + httpObj.statusText);
                return false;
            }
        }
    }
    httpObj.send('');
	httpObj = Nothing;
}

// XMLHttpRequestオブジェクト生成に失敗した場合の処理
function httpObjGenerateFail() {
    alert('ご利用のブラウザーでは、当サイトをご利用頂けません。');
    return false;
}
// HTTPタイムアウト処理
function timeoutCheck() {
    timeout_sec --;
    if(timeout_sec <= 0) {
        // タイマーをストップする
        clearInterval(timerId);
        // HTTPリクエストを中断する
        httpObj.abort();
        // エラーダイアログを表示
        alert('タイムアウトです。');
        return false;
    }
}
/*----------------------------------------------------------------------------------------------------
/+	音声再生カウントアップPHP呼び出し
/+----------------------------------------------------------------------------------------------------*/
function vdsCountUp() {
    // テキストファイルのURLを定義
    var target_url;
    target_url = './counter.php';

    // 処理を実行するための関数リファレンスを定義
	var getText = '';
    var funcRef = function(text_data) {
		getText = text_data;
    }
    // HTTP通信を開始し、完了したら上記関数を実行させる
    countHttpRequest(target_url, funcRef);
	
	return getText;
}

// 引数に与えられたURLにHTTPリクエストを行ない、指定された関数を実行
function countHttpRequest(target_url,funcitonReference) {
    try {
        if(window.XMLHttpRequest) {
            httpObj = new XMLHttpRequest();
        } else if(window.ActiveXObject) {
            httpObj = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            httpObj = false;
        }
    } catch(e) {
        httpObj = false;
    }
    if(! httpObj) {
        httpObjGenerateFail();
    }
    // タイマーをセット
    timerId = setInterval('timeoutCheck()', 1000);

    httpObj.open("GET", target_url, true);
    httpObj.onreadystatechange = function() {
        if (httpObj.readyState == 4) {
            clearInterval(timerId);
            if (httpObj.status == 200) {
				resTxt = httpObj.responseText;
                funcitonReference(resTxt);
            } else {
                alert(httpObj.status + ' : ' + httpObj.statusText);
                return false;
            }
        }
    }
    httpObj.send('');
}


/*----------------------------------------------------------------------------------------------------
/+	汎用関数
/+----------------------------------------------------------------------------------------------------*/

/*------------------------------------------------------+/
/+  COOKIE関数
/+      以下のcookie関数は下記URLからダウンロードしたものです 
/+      http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
/+------------------------------------------------------*/
function chkCookie() {
	var cookieValue = Get_Cookie('yo_cnt') + '';     // Cookie読出し
	var getCount = 0;
	var retValue = true;
	
	if((cookieValue.length>0) && (isNaN(cookieValue) == false)){                // 状態設定
		getCount = eval(cookieValue);
		if (getCount>=25) {							// カウントが25以上なら不可
			retValue = false;
		} else {
			getCount += 1;
			Set_Cookie("yo_cnt",getCount,2);		// カウントUP
		}
	} else {
		Set_Cookie("yo_cnt",1,2);					// Cookieの有効期限を2時間に設定
	}
	return retValue;
}

/*------------------------------------------------------+/
/+  COOKIE関数
/+      以下のcookie関数は下記URLからダウンロードしたものです 
/+      http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
/+------------------------------------------------------*/
function Get_Cookie(name) { 
   var start = document.cookie.indexOf(name+"="); 
   var len = start+name.length+1; 
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
   if (start == -1) return null; 
   var end = document.cookie.indexOf(";",len); 
   if (end == -1) end = document.cookie.length; 
   return unescape(document.cookie.substring(len,end)); 
} 
function Set_Cookie(name,value,expires,path,domain,secure) { 
	//expires = expires * 60*60*24*1000;	// 日単位設定
	expires = expires * 60*60*1000;	// 時間単位設定
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
    var cookieString = name + "=" +escape(value) + 
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
       ( (path) ? ";path=" + path : "") + 
       ( (domain) ? ";domain=" + domain : "") + 
       ( (secure) ? ";secure" : ""); 
    document.cookie = cookieString; 
}	

/*------------------------------------------------------+/
/+  リスナー（イベントハンドラ）定義
/+      引　数：elem      - タグ(コントロール)TD
/+         　 ：eventName - イベント名
/+         　 ：func      - イベント発生時、実行関数名
/+         　 ：cap       - キャプチャする/しない
/+------------------------------------------------------*/
function addListener(elem, eventName, func, cap) {
    if(elem.addEventListener) {
        elem.addEventListener(eventName, func, cap);
    } else if(elem.attachEvent) {
        elem.attachEvent('on' + eventName, func);
    } else {
        // alert('ご利用のブラウザーはサポートされていません。');
        elem('on' + eventName)=func;
        return false;
    }
}

function setListeners(e) {
    // addListener関数呼び出し
	try {
		addListener(document.getElementById("btnStop"), "click", btnStop_Click, false);
	} catch(e) {
	}
}

function dispErrorMessage(errMsg) {
	try {
		document.getElementById('errMessage01').innerHTML = errMsg;
	} catch(e) {
		document.getElementById('errMessage02').innerHTML = errMsg;
	}
}

/*----------------------------------------------------------------------------------------------------
/+	ページロードにリスナー設定
/+----------------------------------------------------------------------------------------------------*/
addListener(window, "load", Page_Load, false);

/*
/+	以降、イベント処理
/+

/*  停止ボタン  */
function btnStop_Click(e) { stopTalk(); }						// 音声停止

/*  ページロード  */
function Page_Load() {
	vdsInit();				// VDS初期設定
    setListeners();			//各コントロールにイベント設定
}
