var stcplayer = null;

var vodmode      = false;
var swchk        = false;
var playerId     = "stcplayer";
var playerWidth  = 720;
var playerHeight = 480;
var playlist	 = new uxnPlaylist();
var hosoTimerId  = null;
var reloadTimerId = null;
var evidTimerId   = null;
var swTimerId     = null;
var posTimerId    = null;
var posCur        = 0;

/**** プレーヤー初期化 ****/
function initStcPlayer( id, width, height )
{
	var pane = document.getElementById( playerId );
	if( pane ) {
		if( id ) {
			playerId = id;
		}
		if( width ) {
			playerWidth = width;
		}
		if( height ) {
			playerHeight = height;
		}
		swfobject.embedSWF(
			"http://labs.stickam.jp/api/flash/v1/",
			playerId,
			playerWidth, playerHeight, "9.0.0", null, {},
			{ bgcolor: "#000000", allowScriptAccess: "always" },
			{ name: playerId }
		);
		swfobject.addDomLoadEvent(
			function() {
				var p = document.getElementById( playerId );

				p.oninit = function() {
					p.addCallback( "media.play",   onMediaPlay );
//					p.addCallback( "media.stop",   onMediaStop );

					stcplayer = p;
					setHoso();
				}
			}
		);
	}
}

/**** VODプレーヤー初期化 ****/
function initVodPlayer( id, width, height )
{
	var pane = document.getElementById( playerId );
	if( pane ) {
		if( id ) {
			playerId = id;
		}
		if( width ) {
			playerWidth = width;
		}
		if( height ) {
			playerHeight = height;
		}
		swfobject.embedSWF(
			"http://labs.stickam.jp/api/flash/v1/",
			playerId,
			playerWidth, playerHeight, "9.0.0", null, {},
			{ bgcolor: "#000000", allowScriptAccess: "always" },
			{ name: playerId }
		);
		swfobject.addDomLoadEvent(
			function() {
				var p = document.getElementById( playerId );

				p.oninit = function() {
					p.addCallback( "media.play",   onMediaPlay );
//					p.addCallback( "media.stop",   onMediaStop );

					stcplayer = p;
					setVod();
				}
			}
		);
	}
}

/**** VOD ****/
function setVod()
{
	vodmode = true;

	if( reloadTimerId != null ) {
		clearInterval( reloadTimerId );
		reloadTimerId = null;
	}
	playlist.getPlaylist( "/y150/data/vod.xml" );

	reloadTimerId = setInterval(
		function() {
			playlist.getPlaylist( "/y150/data/vod.xml" );
		}, 300000
	);
}

/**** Hoso ****/
function setHoso()
{
	vodmode = false;
	
	if( reloadTimerId != null ) {
		clearInterval( reloadTimerId );
		reloadTimerId = null;
	}

	playlist.getPlaylist( "/y150/data/" + playlist.getPlaylistFilename(), checkNowPlayEvent );
	reloadTimerId = setInterval(
		function() {
			playlist.getPlaylist( "/y150/data/" + playlist.getPlaylistFilename(), checkNowPlayEvent );
		}, 300000
	);
}

/**** playVod ****/
function playVod( progId )
{
	if( !vodmode ) {
		setVod();
	}
	if( hosoTimerId != null ) {
		clearTimeout( hosoTimerId );
		hosoTimerId = null;
	}
	if( (playlist != null) && (playlist.playlistData != null) ) {
		var ev = playlist.getEventById( progId );

		if( (ev != null) && (ev.seg.length > 0) ) {
			stcplayer.segment = ev.seg[0];
			stcplayer.mediaPlay( ev.seg[0].psrc );
		}
	}
}

/********* PosterUrl 取得 ********/
function getProgPosterUrl( progId ) {
	if( (playlist != null) && (playlist.playlistData != null)) {
		for( var i=0; i<playlist.playlistData.length; i++ ) {
			var ev = playlist.playlistData[i];

			if( ev.programId == progId ) {
				return ev.poster;
			}
		}
	}
	return "";
}

/*-------- プレイリスト --------*/
function checkNowPlayEvent()
{
	var bPlay = false;

	hosoTimerId = null;

	if( playlist != null ) {
		var nowTime = playlist.getNowTime();

//debug("**** " + nowTime + " checkNowPlayEvent ***");		
		if( playlist.playlistData != null ) {
			var ev  = playlist.getNowEvent( nowTime );

			if( ev != null ) {
//debug( "  event id:" + ev.eventId );
				// 再生開始
				if( ev.live == true ) {
					var seg = playlist.getNowSeg( nowTime );

					// 時間再生モード
					if( seg != null ) {
						if( !(stcplayer.segment) || (stcplayer.segment.segmentId != seg.segmentId) ) {
//debug( nowTime + " Live start!:" + seg.segmentId );
							stcplayer.segment = seg;
							stcplayer.mediaPlay( seg.psrc );
							swchk = false;
						}
					}
					hosoTimerId = setTimeout( checkNowPlayEvent, 1000 );
				} else {
					if( ((ev.seg.length > 0) && !(stcplayer.segment)) || ((stcplayer.segment) && (stcplayer.segment.live == true)) ) {
//debug(nowTime + " play event " + ev.seg[0].segmentName + " " + ev.seg[0].duration + " " + ev.seg[0].psrc );
debug( "mediaPlay : " + ev.seg[0].psrc );
                        stcplayer.segment = ev.seg[0];
					    stcplayer.mediaPlay( ev.seg[0].psrc );
					    swchk = true;
					}
				}
				bPlay = true;

				showProgInfo(ev);
			} else {
				// 1秒毎に次のイベント監視
				stcplayer.mediaStop();
				hosoTimerId = setTimeout( checkNowPlayEvent, 1000 );
			}
		}
	}
	if( !bPlay ) {
		var evkyushi = new Object();

		if( swTimerId != null ) {
		    clearInterval( swTimerId );
		    swTimerId = null;
		}
		evkyushi.eventName = "放送休止";
		evkyushi.content   = "";
		showProgInfo( evkyushi );
		stcplayer.mediaPlay( "/y150/img/bs_stop_pc.jpg" );
	}
}

// 再生イベント
function onMediaPlay( event )
{
//debug( "play !:[" + event.status + "] (" + event.error.message + ") " + event.target.segment.psrc + ")" );
debug( "onMediaPlay" );
	if( posTimerId != null ) {
		clearInterval( posTimerId );
		posTimerId = null;
	}

	if( event.status == "ok" ) {
		// 再生通知タイマー
		evidTimerId = setTimeout(
			function() {
				recEvid( event.target.segment );
			}, 5000
		);
debug( "vodmode:" + vodmode + "　swchk:" + swchk );
		// 再生監視タイマー
		if( !vodmode && swchk ) {
		    if( swTimerId != null ) {
		        clearInterval( swTimerId );
		        swTimerId = null;
		    }
		    if( (event.target.segment) && (event.target.segment.live != true) ) {
		        swTimerId = setInterval(
		            function() {
		                var nowTime = playlist.getNowTime();
		                var nowev   = playlist.getNowEvent( nowTime );
		                var playev  = event.target.segment.parentEvent;
    		            
		                if( nowev != null ) {
		                    if( nowev.eventId != playev.eventId ) {
		                        if( isSwitch() ) {
		                            clearInterval( swTimerId );
		                            swTimerId = null;
debug( nowTime + "=> " + playev.eventId + "→" + nowev.eventId );
                                    stcplayer.segment = nowev.seg[0];
					                stcplayer.mediaPlay( nowev.seg[0].psrc );
					                showProgInfo( nowev );
					                swchk = true;
					                
					                if( nowev.live == true ) {
                    					hosoTimerId = setTimeout( checkNowPlayEvent, 1000 );
					                }
					            }
		                    }
		                }
		            }, 10000
		        );
            }
		}
	    if( (event.target.segment) && (event.target.segment.live != true) ) {
			// 再生中タイマー
			posTimerId = setInterval(
				function() {
					var p = stcplayer.mediaGetPosition();
					var d = stcplayer.mediaGetDuration();

					if( (d - 1000) <= p) {
						if( posCur == p ) {
							if( posTimerId != null ) {
								clearInterval( posTimerId );
								posTimerId = null;
							}
							event.status = "ok";
							onMediaStop( event );
						}
					}
					posCur = p;
				}, 500
			);
        }
	} else {
		// リトライ
		setTimeout(
			function() {
				if( event.target.segment != null ) {
					event.target.mediaPlay( event.target.segment.psrc );
				}
//debug( "retry:" + event.target.segment.psrc );
			}, 500
		);
	}
}

// 停止イベント
function onMediaStop( event )
{
debug( "onMediaStop" );
	if( event.status == "ok" ) {
		clearTimeout( evidTimerId );

		// 次の再生
		if( (event.target.segment) && (event.target.segment.live != "true") ) {
		    var seg = null;
		    if( event.target.segment.segNext != null ) {
		        // 次素材再生
		        seg = event.target.segment.segNext;
//debug( "■■次セグメント" );
		    } else if( !vodmode ) {
		        // 次番組
		        var nowTime = playlist.getNowTime();
		        var nowev   = playlist.getNowEvent( nowTime );
		        var playev  = event.target.segment.parentEvent;
		        
		        if( nowev != null ) {
		            if( nowev.eventId == playev.eventId ) {
//debug( "□□番組の先頭を再生" );
		                seg = playev.seg[0];
		            } else {
//debug( "□□次番組を再生" );
		                seg = nowev.seg[0];
		                swchk = true;
		            }
		        }
		    }
		    if( seg != null ) {
debug( "next mediaPlay : " + seg.psrc );
		        event.target.segment = seg;
		        event.target.mediaPlay( seg.psrc );
		        showProgInfo( seg.parentEvent );
		    } else {
		        // 黒
		        event.target.segment = null;
		        event.target.mediaPlay( "/y150/img/black.png" );

				if( !vodmode ) {
					hosoTimerId = setTimeout( checkNowPlayEvent, 1000 );
				}
		    }
		}
	} else {
		// 黒
		event.target.segment = seg;
		event.target.mediaPlay( "/y150/img/black.png" );

		if( !vodmode ) {
			hosoTimerId = setTimeout( checkNowPlayEvent, 1000 );
		}
	}
}

// 次のセグメント取得
function getNextSegment( seg )
{
	var ev = seg.parentEvent;
	
	// 番組内
	if( seg.segNext != null ) {
		return seg.segNext;
	}
	
	// 番組またぎ
	if( vodmode == false ) {
		if( ev.eventNext != null ) {
			if( ev.eventNext.seg.length > 0 ) {
				return ev.eventNext.seg[0];
			}
		}
	}
	return null;
}

// エビデンスのサーバ送信
function recEvid( seg )
{
    if( seg ) {
	    var url       = "/y150/script/recEvid.php" +  "?key=_UNIZON00_" +
											    "&uid="  +
											    "&md="   + ((vodmode==true) ? "2" : "1") +
											    "&ai="   + "0" +
											    "&ei="   + seg.parentEvent.eventId + 
										   	    "&pi="   + seg.parentEvent.programId + 
										   	    "&si="   + seg.segmentId;
	    var http      = new JKL.ParseXML.Text( url );
    	
	    http.async(function() {} );
	    http.parse();
	    zWriteLog( "recEvid " + url );
    }
}

function showProgInfo(ev)
{
    var progTime = document.getElementById("progTime");
    var progName = document.getElementById("progName");
    var descript = document.getElementById("descript");

    if (progTime) {
		if( ev.startTime && ev.endTime ) {
	        progTime.innerHTML = fmtHm(ev.startTime) + "～" + fmtHm(ev.endTime );
		}
    }
    if (progName) {
        progName.innerHTML = ev.eventName;
    }
    if (descript) {
        descript.innerHTML = ev.content;
    }
}

function fmtHm(hms)
{
    var hh = "00" + Math.floor(hms / 10000);
    var mm = "00" + Math.floor(hms / 100) % 100;

    return hh.substr(hh.length - 2) + ":" + mm.substr(mm.length - 2);
}

function debug( text )
{
	var debug = document.getElementById( "debug" );
	if( debug ) {
		debug.innerHTML +=  text + "<br>";
	}
}

function isSwitch()
{
	var mode = document.getElementsByName( "switch_mode" );
	var sw   = 0;
	var conf = 0;

    if( !mode || !mode.length ) {
        conf = 1;
    } else {
        for( var i=0; i<mode.length; i++ ) {
            if( mode[i].checked == true ) {
                switch( i ) {
                    case 0: conf = 1;   break;
                    case 1: sw = 1;     break;
                    case 2: sw = 0;     break;
                }
                break;
            }
        }
    }
    if( conf == 1 ) {
        if( window.confirm( "次の番組の時間になりました。\n\n切り替えますか？" ) ) {
            sw = 1;
        } else {
		    if( swTimerId != null ) {
		        clearInterval( swTimerId );
		        swTimerId = null;
		    }
		    swchk = false;
        }
    }
	return (sw == 1);
}
