/* ユニキャスト設定 */
var uniCastFlg		  = false;			//タイムアウト時のユニキャスト接続の有無(true:有り false:無し)
var uniCastUrl		  = "";	//ユニキャスト接続先URL

/* 独自ロジック */

//動画の正しいフレームレート
var BB_FRAME_RATE = 3000;
//ネットワークエラーが発生したと見なす閾値（フレームレート割合）
var NET_ERR_FRAME_RATE_RATIO = 0.95;
//ネットワークエラーが発生したと見なす閾値（悪化フレーム数）
var NET_ERR_FRAME_RATE_DELTA = 30;
//チェック間隔（単位ms)
var DRAME_DROPPING_CHECK_INTERVAL = 1000;

//前回値保存用変数（ワーク）
var wmpPrevPos = 0;
var wmpPrevFrameRate = 0;

/**
 * カクカクが発生したか？
 * true:発生している、false:発生していない。
 */
function hasFrameDropping()
{
	var wmp = document.getElementById("WMPlayer");
    if((wmp.playState == 1)||(wmp.playState == 0)) return;

	var curPos = wmp.Controls.currentPosition;
	var curFrameRate = wmp.Network.frameRate;
	var prevPos = wmpPrevPos;
	var prevFrameRate = wmpPrevFrameRate;

	wmpPrevPos = curPos;
	wmpPrevFrameRate = curFrameRate;

	if (curPos <= 1) {
		//まだ再生されていないのでカクカクも発生していない
		return false;
	}

	if (prevPos == curPos) {
		//前回と再生ポジションが変わっていなければカクカク発生とみなす
		return true;
	}

	if (curFrameRate < BB_FRAME_RATE * NET_ERR_FRAME_RATE_RATIO) {
		if (prevFrameRate > (curFrameRate + NET_ERR_FRAME_RATE_DELTA)) {
			//規定のフレームレート以下で、なおかつ現時点でも大幅に悪化していっていればカクカク発生とみなす。
			return true;
		}
	}

	return false;
}

function replaceElement() {
	var element = document.getElementById("controlbutton");
	var newElement = document.createElement("div");
	newElement.innerHTML = "<div id=NetErrorMsg>自動補正中..</div><div id=StatusInfo>再生中</div>";
    newElement.id = "MsgBlock";
	var target = document.getElementById("StatusInfo");
	element.replaceChild(newElement, target);
    STICtrl.Init();
}

function fadeInsert(obj, msg){
	if(!obj.filters['DXImageTransform.Microsoft.Fade']){
	    obj.style.filter += "progid:DXImageTransform.Microsoft.Fade(Duration=0.5,Overlap=1)";
	}
	obj.filters['DXImageTransform.Microsoft.Fade'].apply();
	if(msg=='visible'){  // in test
		obj.style.visibility = 'visible';
	}else if(msg=='hidden'){
		obj.style.visibility = 'hidden';
	}else{
		obj.innerHTML = msg;
	}
	obj.filters['DXImageTransform.Microsoft.Fade'].play();
}

function onTimer()
{
	if (hasFrameDropping()) {
		if(!document.getElementById("NetErrorMsg")){
		    replaceElement();
		}
		fadeInsert(document.getElementById("NetErrorMsg"), 'visible');
		fadeInsert(document.getElementById("StatusInfo"), 'hidden');
	} else {
		if(!document.getElementById("NetErrorMsg")){
		    return;
		}
		fadeInsert(document.getElementById("NetErrorMsg"), 'hidden');
		fadeInsert(document.getElementById("StatusInfo"), 'visible');
	}
}

setInterval("onTimer();", DRAME_DROPPING_CHECK_INTERVAL);
