function $(ElId){ return document.getElementById(ElId); }


// onload:
//window.onload = InitWmpRadio;
window.onload = CheckSystemStatus;

window.onunload = UnloadWmpRadio;

// global vars: ---------------------------------------

var StationListItemImageSize = {x:100,y:56}
var StationDetailsImageSize = {x:144,y:81}
var FreeStationItems; // holds a collection of stations where subscription=free
var RadioPlayerObj; // global reference to wmp object
var SessionStartTimeMs = 0; // holds application start time

var BufferingDisplayInterval; // holds reference to interval
var UpdateBufferingIntervalRunning = false;

var PositionDisplayInterval; // holds reference to interval
var UpdatePositionIntervalRunning = false;

var TrackSkips = 0; // number of skips user makes per playlist

// ----------------------------------------------------

function UnloadWmpRadio(){
	// if there is a song playing or paused, send reporting call
	RadioReporting.Send(true);
}

function CheckSystemStatus(){
	var s = new ClientSystemStatus();
	if(s.OsOk && s.BrowserOk && s.ActivexOk && s.WmpOk && s.FirefoxActivexResponsive){
		InitWmpRadio();
	}else{
		// problem(s): generate error messages
		SystemRequirementFailureInit(s);
	}
}


function SystemRequirementFailureInit(StatusObj){
	var MsgLiElArray = new Array();
	if(!StatusObj.OsOk){
		MsgLiElArray.push(ReturnElementLi(CopyStrings.SystemRequirementFailure.Os));
		SystemRequirementFailureDisplay(MsgLiElArray);
		return;
	}
	if(!StatusObj.BrowserOk){
		MsgLiElArray.push(ReturnElementLi(CopyStrings.SystemRequirementFailure.Browser));
		SystemRequirementFailureDisplay(MsgLiElArray);
		return;
	}
	if(!StatusObj.WmpOk){
		MsgLiElArray.push(ReturnElementLi(CopyStrings.SystemRequirementFailure.Wmp));
	}
	if(!StatusObj.ActivexOk){
		MsgLiElArray.push(ReturnElementLi(CopyStrings.SystemRequirementFailure.Activex));
	}
	if(!StatusObj.FirefoxActivexResponsive){
		MsgLiElArray.push(ReturnElementLi(CopyStrings.SystemRequirementFailure.FirefoxActivex));
	}
	SystemRequirementFailureDisplay(MsgLiElArray);
}

function SystemRequirementFailureDisplay(ElementArray){
	// hide station browser:
	$("StationBrowserContainer").style.display="none";
	// hide radio container:
	$("RadioContainer").style.display="none";

	// show system requirement failure heading:
	$("SystemRequirementMessagesHeading").innerHTML = CopyStrings.SystemRequirementFailure.Heading;

	// show message display:
	$("SystemRequirementMessagesContainer").style.display = "block";
	// add li elements to ul:
	for(u=0; u < ElementArray.length; u++){
		$("SystemRequirementMessagesList").appendChild(ElementArray[u]);
	}
}

function ReturnElementLi(TxtStr){
	var NewLi = document.createElement("li");
	NewLi.innerHTML = TxtStr;
	return NewLi;
}

function PopulateUiWithCopyStrings(){
	// set button image alt attributes:
	$("BtnPause").setAttribute("alt",CopyStrings.Button.Pause);
	$("BtnPlay").setAttribute("alt",CopyStrings.Button.Play);
	$("BtnNext").setAttribute("alt",CopyStrings.Button.Next);
	
	// player status:
	$("RadioUiConnectingDisplay").innerHTML = CopyStrings.PlayerStatus.Connecting + "...";
	$("RadioUiBufferingDisplay_txt").innerHTML = CopyStrings.PlayerStatus.Buffering;
	$("RadioUiPositionDisplay_txt").innerHTML = CopyStrings.PlayerStatus.Playing;
	
	$("StationDisplayListeningTo").innerHTML = CopyStrings.ListeningTo;
	
	$("StationDetailsListenBtn").innerHTML = CopyStrings.StationBrowser.Listen;
	$("StationDetailsBackBtn").innerHTML = CopyStrings.StationBrowser.Back;
	$("StationDetailsGenresTitle").innerHTML = CopyStrings.StationBrowser.Genres;
	$("StationDetailsArtistsTitle").innerHTML = CopyStrings.StationBrowser.Artists;
}

function InitWmpRadio(){
	// set SessionStartTimeMs:
	var TimeNow = new Date();
	SessionStartTimeMs = parseInt(TimeNow.getTime());

	WriteToLog("InitWmpRadio()");

	PopulateUiWithCopyStrings();

	RadioPlayerObj = TargetWmpObj();
	// station dropdown change event handler:
	$("StationDropdownSelect").onchange = StationSelectChangeHandler;
	
	// button event handlers
	$("BtnPlay").onclick = RadioUiPlay;
	$("BtnPause").onclick = RadioUiPause;
	$("BtnNext").onclick = RadioUiNext;
	$("StationDetailsBackBtn").onclick = StationDetailsBackBtnHandler;
	$("StationDetailsListenBtn").onclick = StationItemClickToListen;
	MakeRolloverImg($("BtnPlay"));
	MakeRolloverImg($("BtnPause"));
	MakeRolloverImg($("BtnNext"));
	// get list of stations:
	//var StationsRequest = YAHOO.util.Connect.asyncRequest('GET', StationsListUrl, StationsRequestCallback);	
	WriteToLog("Station list requested from: " + StationsListUrl);
	loadStationXML(StationsListUrl);	
}

function TargetWmpObj(){
	var WmpTmpObj = $("WmpRadioPlayer");
//	var BlankAsxUrl = "http://www.mtvx-d.mtvi.com/global/apps/broadband/radio/xml/load.asx";
//	try{
//		var TmpX = WmpTmpObj.newPlaylist("",BlankAsxUrl);
//	}
//	catch(e){
//		alert("couldn't create playlist: " + e);
//	}
//	alert("will try again...");
//	try{
//		var TmpX = WmpTmpObj.newPlaylist("",BlankAsxUrl);
//	}
//	catch(e){
//		alert("couldn't create playlist, again: " + e);
//	}


	//if(!WmpTmpObj.newPlaylist("","")){
	//	// do something to kickstart WMP obj...
	//	alert("could not create playlist");
	//}
	return WmpTmpObj;
}

function MakeRolloverImg(ImgObj){
	ImgObj.Enabled = true;
	ImgObj.SrcOut = ImgObj.src;
	ImgObj.SrcOver = ImgObj.getAttribute("src_over");
	try{
		ImgObj.SrcDisabled = ImgObj.getAttribute("src_disabled");
	}	catch(e){}
	ImgObj.onmouseover = function(){
		if(this.Enabled){ this.src = this.SrcOver; }
	}
	ImgObj.onmouseout = function(){
		if(this.Enabled){ this.src = this.SrcOut; }
	}
	ImgObj.DisableOrEnableImg = DisableOrEnableImg;
	// preload image
	PreloadImg(ImgObj.SrcOver);
}

function DisableOrEnableImg(Enable){
	this.Enabled = Enable;
	if(this.Enabled){
		this.src = this.SrcOut;
	}else{
		this.src = this.SrcDisabled;
	}
}

var StationsRequestCallback = {
	success: StationsRequestSuccessHandler,
	failure: StationsRequestFailureHandler
}

function StationsRequestFailureHandler(r){
	WriteToLog("StationsRequestFailureHandler(): status: " + r.status + " statusText: " + r.statusText);
}

function StationsRequestSuccessHandler(r){
	var StationsXml = InitXmlObj(r.responseText);
	//alert(r.responseText)
	//alert(StationsXml.hasChildNodes());
	parseStationXML(StationsXml);
}

function stateChange(){
	// if xmlhttp shows "loaded"
	if (xmlhttp.readyState==4){
	  // if "OK"
	  if (xmlhttp.status==200){
		parseStationXML(xmlhttp.responseXML);
	  } else{
	    //alert("Problem retrieving XML data");
	  }
	}
}

function loadStationXML(xmlLink) {
	if (window.ActiveXObject) {
		var parser=new ActiveXObject("microsoft.xmldom");
		parser.async="false";
		parser.load(xmlLink);
		var xmlData = parser;
		parseStationXML(xmlData);
	} else {
		xmlhttp=new XMLHttpRequest();
		xmlhttp.onreadystatechange=stateChange;
  		xmlhttp.open("GET",xmlLink,true);
		xmlhttp.send(null);
	}
}


function parseStationXML(StationsXml) {
	var StationItems = StationsXml.getElementsByTagName("item");
	FreeStationItems = new Array();
	WriteToLog("stations found: " + StationItems.length);
	for(i=0; i < StationItems.length; i++){
		// if free, add to collection:
		var Subscription = StationItems[i].getElementsByTagName("usageType")[0].childNodes[0].nodeValue;
		if(Subscription == "Free" || Subscription == "Subscription"){
			// add to array
			FreeStationItems.push(new StationObject(StationItems[i]));
		}
	}
	WriteToLog("'free' stations found: " + FreeStationItems.length);
	// populate station dropdown with stations:
	for(i=0; i < FreeStationItems.length; i++){
		if(stationId==""){
		$("StationDropdownSelect").appendChild(ReturnOption(FreeStationItems[i].Title,FreeStationItems[i].Id,false));
		} else {
			if (stationId == FreeStationItems[i].Id){
				$("StationDropdownSelect").appendChild(ReturnOption(FreeStationItems[i].Title,FreeStationItems[i].Id,true));
			} else {
				$("StationDropdownSelect").appendChild(ReturnOption(FreeStationItems[i].Title,FreeStationItems[i].Id,false));
			}
		}	
	}
	// populate station-browser with stations:
	for(i=0; i < FreeStationItems.length; i++){
		$("StationListOutput").appendChild(ReturnStationListItemElement(FreeStationItems[i]));
	}
	// if page was reached without 'stationId' param, load player
	// with first free station

	if(stationId==""){ // no 'stationId' param passed to page
		// put first station name into ui:
		$("StationDisplay").innerHTML = FreeStationItems[0].Title;
		// play first station:
		LoadNewPlaylistIntoWmp(StationDetailsUrl + FreeStationItems[0].Id);
	}else{
		LoadNewPlaylistIntoWmp(StationUrl);
		$("StationDisplay").innerHTML = ReturnStationNameWithId(stationId);
	}
}

function StationSelectChangeHandler(){
	// update station name display:
	$("StationDisplay").innerHTML = ReturnStationNameWithId(this.value);
	// build full url:
	sUrl = StationDetailsUrl + this.value;
	// load player
	LoadNewPlaylistIntoWmp(sUrl);
}

function StationGoBtnHandler(){
	// build full url:
	sUrl = StationDetailsUrl + sId;
	// load player
	LoadNewPlaylistIntoWmp(sUrl);
}


function ReturnStationNameWithId(Id){
	var sName = "";
	for(i=0; i < FreeStationItems.length; i++){
		if(FreeStationItems[i].Id == Id){
			sName = FreeStationItems[i].Title;
		}
	}
	return sName;
}



function LoadNewPlaylistIntoWmp(sUrl){
	// reporting:
	RadioReporting.Send(true);
	var root_playlist = RadioPlayerObj.newPlaylist("","");
	RadioPlayerObj.currentPlaylist = root_playlist;  
	root_playlist.appendItem(RadioPlayerObj.newMedia(sUrl));
	WriteToLog("playlist loaded into player from: " + sUrl);
	// reset number of skips:
	TrackSkips = 0;
	// reset next button
	$("BtnNext").DisableOrEnableImg(true);
	// play:
	RadioPlayerObj.controls.play();
}

function RadioUiPlay(){
	RadioPlayerObj.controls.play();
	WriteToLog("'play' button clicked: RadioUiPlay()");
}

function RadioUiPause(){
	RadioPlayerObj.controls.pause();
	WriteToLog("'pause' button clicked: RadioUiPause()");
	// hide buffering and song progress display:
	//$("RadioUiBufferingDisplay").style.display = "none"; // buffering
	//$("RadioUiPositionDisplay").style.display = "none"; // track progress
	//$("RadioUiConnectingDisplay").style.display = "none"; // conecting
}

function RadioUiNext(){
	WriteToLog("'next' button clicked: RadioUiNext()");
	//RadioPlayerObj.controls.next();
	NOWPLAYING.playNextUp();
}

function StationObject(XmlItem){
	this.Id = XmlItem.getAttribute("id");
	this.Title = XmlItem.getElementsByTagName("title")[0].childNodes[0].nodeValue;
	if (XmlItem.getElementsByTagName("desc")[0].childNodes[0] && XmlItem.getElementsByTagName("desc")[0].childNodes[0].nodeValue != null) {
		this.Description = XmlItem.getElementsByTagName("desc")[0].childNodes[0].nodeValue;
	} else {
		this.Description = '';
		}
	if (XmlItem.getElementsByTagName("img")[0] && XmlItem.getElementsByTagName("img")[0].getAttribute("src") != "null") {
		this.ImgSrc = XmlItem.getElementsByTagName("img")[0].getAttribute("src");
		} else {
		this.ImgSrc = '/global/apps/broadband/radio/img/spacer.gif';
		}
	this.Genres = new Array();
	this.Artists = new Array();
	// populate genres:
	var GenresCollection = XmlItem.getElementsByTagName("genres")[0].getElementsByTagName("genre");
	for(j=0; j < GenresCollection.length; j++){
		if (GenresCollection[j].childNodes[0].nodeValue){
			this.Genres.push(GenresCollection[j].childNodes[0].nodeValue);
		}
	}
	// populate artists:
	var ArtistsCollection = XmlItem.getElementsByTagName("includedArtists")[0].getElementsByTagName("artist");
	for(j=0; j < ArtistsCollection.length; j++){
		if (ArtistsCollection[j].childNodes[0]){
			this.Artists.push(ArtistsCollection[j].childNodes[0].nodeValue);
		}
	}
}



function ReturnStationListItemElement(StationObj){
	// outside container:
	var StationElement = document.createElement("div");
	StationElement.className = "StationElementContainer";
	// image:
	var StationImg = document.createElement("img");
	StationImg.width = StationListItemImageSize.x;
	StationImg.height = StationListItemImageSize.y;
	// store station obj as property:
	StationImg.StationObj = StationObj;
	StationImg.onload = function(){
		FitImageToSize(this,StationListItemImageSize.x,StationListItemImageSize.y);
	}
	// click handler:
	StationImg.onclick = StationItemClickForDetails;
	StationImg.src = StationObj.ImgSrc;
	StationElement.appendChild(StationImg); // add to container
	
	
	// station name:
	var StationName = document.createElement("div");
	StationName.innerHTML = StationObj.Title;
	StationName.className = "StationListName";
	// store station obj as property:
	StationName.StationObj = StationObj;
	// click handler:
	StationName.onclick = StationItemClickForDetails;
	StationElement.appendChild(StationName); // add to container
	
	// genres:
	var GenreListElement = document.createElement("div");
	GenreListElement.className = "StationListGenre";
	for(var p=0; p < StationObj.Genres.length; p++){
		GenreListElement.innerHTML += StationObj.Genres[p];
		if(p < (StationObj.Genres.length + 1)){
			GenreListElement.innerHTML += "<br/>";
		}
	}
	StationElement.appendChild(GenreListElement); // add to container
	
	// details button:
	var StationDetailsBtn = document.createElement("div");
	StationDetailsBtn.innerHTML = CopyStrings.StationBrowser.Details;
	StationDetailsBtn.className = "StationDetailsBtn";
	// store station obj as property:
	StationDetailsBtn.StationObj = StationObj;
	// click handler:
	StationDetailsBtn.onclick = StationItemClickForDetails;
	StationElement.appendChild(StationDetailsBtn); // add to container
	
	// listen button:
	var StationListenBtn = document.createElement("div");
	StationListenBtn.innerHTML = CopyStrings.StationBrowser.Listen;
	StationListenBtn.className = "StationListenBtn";
	// store station obj as property:
	StationListenBtn.StationObj = StationObj;
	// click handler:
	StationListenBtn.onclick = StationItemClickToListen;
	StationElement.appendChild(StationListenBtn); // add to container

	return StationElement;
}



function StationItemClickForDetails(){
	$("StationListOutput").style.display = "none"; // hide station list
	$("StationDetailsOutput").style.display = "block"; // show details
	
	// populate UI with data:
	
	// image:
	$("StationDetailsImg").onload = function(){
		FitImageToSize(this,StationDetailsImageSize.x,StationDetailsImageSize.y);
	}
	$("StationDetailsImg").src = this.StationObj.ImgSrc;
	
	// title:
	$("StationDetailsTitle").innerHTML = this.StationObj.Title;
	
	// listen button: store station obj as property:
	$("StationDetailsListenBtn").StationObj = this.StationObj;
	
	// description:
	$("StationDetailsDescription").innerHTML = this.StationObj.Description;

	// genres:
	var GenresHtmlStr = "";
	for(k=0; k < this.StationObj.Genres.length; k++){
		GenresHtmlStr += this.StationObj.Genres[k];
		if(k < (this.StationObj.Genres.length - 1)){ GenresHtmlStr += ", "; }
	}
	$("StationDetailsGenresList").innerHTML = GenresHtmlStr;

	// artists:
	var ArtistsHtmlStr = "";
	for(j=0; j < this.StationObj.Artists.length; j++){
		ArtistsHtmlStr += this.StationObj.Artists[j];
		if(j < (this.StationObj.Artists.length - 1)){ ArtistsHtmlStr += ", "; }
	}
	$("StationDetailsArtistsList").innerHTML = ArtistsHtmlStr;
	
}

function StationItemClickToListen(){
	LoadNewPlaylistIntoWmp(StationDetailsUrl + this.StationObj.Id);
	
	$("StationDropdownSelect").
	$("StationDisplay").innerHTML = this.StationObj.Title;
}


function StationDetailsBackBtnHandler(){
	$("StationDetailsOutput").style.display = "none"; // hide details
	$("StationListOutput").style.display = "block"; // show station list
}


function InitXmlObj(XmlDataStr){
	//XmlDataStr = CleanUpXmlDataStr(XmlDataStr);
	var XmlObj = null;
	if(document.implementation && document.implementation.createDocument){
		var MyParser = new DOMParser();
		XmlObj = MyParser.parseFromString(XmlDataStr, "text/xml");
	}else if (window.ActiveXObject){
		XmlObj = new ActiveXObject("Microsoft.XMLDOM");
		//XmlObj = new ActiveXObject("MSXML2.DOMDocument");		
		XmlObj.async="false";
		XmlObj.loadXML(XmlDataStr);
 	}
	return XmlObj;
}


function CleanUpXmlDataStr(XmlDataStr){
	XmlDataStr = replaceCharacters(XmlDataStr,"\r\n"," "); // remove line-breaks IE
	XmlDataStr = replaceCharacters(XmlDataStr,"\n"," "); // remove line-breaks Mozilla
	while(XmlDataStr.indexOf("  ")!= -1){// remove excess spaces....
		XmlDataStr = replaceCharacters(XmlDataStr,"  "," ");
	}
	XmlDataStr = replaceCharacters(XmlDataStr,"> <","><"); // remove spaces between tags
	return XmlDataStr;
}


function ReturnOption(oLabel,oValue,selected){
	var NewOpt = document.createElement("option");
	NewOpt.value = oValue;
	if (selected) {
	NewOpt.selected = true;	
	}
	NewOpt.innerHTML = oLabel;
	return NewOpt;
}





function replaceCharacters(conversionString,inChar,outChar){
  var convertedString = conversionString.split(inChar);
  convertedString = convertedString.join(outChar);
  return convertedString;
}


// Begin wmp event handlers -------------------------------------

function WmpEventPlayStateChange(NewState){
	// determine new playstate:
	var NewPlayStateText = "";
	switch(NewState){
		case 0: NewPlayStateText = "Undefined"; break;
		case 1: NewPlayStateText = "Stopped"; break;
		case 2: NewPlayStateText = "Paused"; break;
		case 3: NewPlayStateText = "Playing"; break;
		case 4: NewPlayStateText = "ScanForward"; break;
		case 5: NewPlayStateText = "ScanReverse"; break;
		case 6: NewPlayStateText = "Buffering"; break;
		case 7: NewPlayStateText = "Waiting"; break;
		case 8: NewPlayStateText = "MediaEnded"; break;
		case 9: NewPlayStateText = "Transitioning"; break;
		case 10: NewPlayStateText = "Ready"; break;
		case 11: NewPlayStateText = "Reconnecting"; break;
		default: NewPlayStateText = "";
	}	
	// log event and new state
	WriteToLog("RadioPlayerObj.playStateChange: " + NewPlayStateText);
	
	// send reporting call if song ended, or if stopped:
	if(NewPlayStateText == "MediaEnded"){ RadioReporting.Send(false); }
	if(NewPlayStateText == "Stopped"){ RadioReporting.Send(true); }
	
	if(NewPlayStateText == "Playing"){
		// set interval to update UI progress indication
		if(!UpdatePositionIntervalRunning){ // only if interval isn't already set
			PositionDisplayInterval = window.setInterval("UpdatePositionUiDisplay()", 1000);
			WriteToLog("PositionDisplayInterval Started");
			UpdatePositionIntervalRunning = true;
		}
		// make sure buffering display is hidden:
		$("RadioUiBufferingDisplay").style.display = "none";
		// make sure 'connecting...' is hidden
		$("RadioUiConnectingDisplay").style.display = "none";
		// make sure song progress display is visible:
		$("RadioUiPositionDisplay").style.display = "block";
		// change status text from paused to playing:
		$("RadioUiPositionDisplay_txt").innerHTML = CopyStrings.PlayerStatus.Playing;
		// update now playing info
		$("RadioUiNowPlayingDisplay").innerHTML = NOWPLAYING.display();
		// update reporting obj track info
		RadioReporting.UpdateTrack();
	}else if(NewPlayStateText == "Paused"){
		// make sure buffering display is hidden:
		$("RadioUiBufferingDisplay").style.display = "none";
		// make sure 'connecting...' is hidden
		$("RadioUiConnectingDisplay").style.display = "none";
		// make sure song progress display is visible:
		$("RadioUiPositionDisplay").style.display = "block";
		// change status text from playing to paused:
		$("RadioUiPositionDisplay_txt").innerHTML = CopyStrings.PlayerStatus.Paused;
	}else{
		if(UpdatePositionIntervalRunning){ // only if interval is already set
			window.clearInterval(PositionDisplayInterval);
			WriteToLog("PositionDisplayInterval Ended");
			UpdatePositionIntervalRunning = false;
			$("PositionValue").innerHTML = ""; // clear any remaining html
		}
		// clear now playing info
		$("RadioUiNowPlayingDisplay").innerHTML = "";
		if(NewPlayStateText == "Transitioning"){
			// hide song progress and buffering, show 'Connecting...'
			$("RadioUiBufferingDisplay").style.display = "none";
			$("RadioUiPositionDisplay").style.display = "none";
			$("RadioUiConnectingDisplay").style.display = "block";
		}
	}
	if (NOWPLAYING.hasCoAd()){
		NOWPLAYING.displayCoAd('load');
		if (NewPlayStateText == "Playing") {
			var startURL = NOWPLAYING.getStartUrl();
			if (document.getElementById("adCallImage")){
			document.getElementById("adCallImage").innerHTML = "<img src='" + startURL + "' width=1 height=1 />";
			}
		} else if (NewPlayStateText == "MediaEnded"){
			var endURL = NOWPLAYING.getEndUrl();
			if (document.getElementById("adCallImage")){
			document.getElementById("adCallImage").innerHTML = "<img src='" + endURL + "' width=1 height=1 />";
			}
		}
	} 
}

function UpdatePositionUiDisplay(){
	// update ui display
	$("PositionValue").innerHTML = RadioPlayerObj.controls.currentPositionString + " / " + RadioPlayerObj.currentMedia.durationString;
	// update reporting obj with new position:
	RadioReporting.duration = parseInt(RadioPlayerObj.controls.currentPosition);
}


function WmpEventBuffering(Start){
	WriteToLog("RadioPlayerObj.buffering: start = " + Start);
	if(Start == true){ // Buffering started: Start the timer that updates UI display
		if(!UpdateBufferingIntervalRunning){ // only if interval isn't already set
			BufferingDisplayInterval = window.setInterval("UpdateBufferingUiDisplay()", 1000);
			WriteToLog("BufferingDisplayInterval Started");
			UpdateBufferingIntervalRunning = true;
			// hide 'connecting...' display:
			$("RadioUiConnectingDisplay").style.display = "none";
			// hide song progress display:
			$("RadioUiPositionDisplay").style.display = "none";
			// unhide buffering display:
			$("RadioUiBufferingDisplay").style.display = "block";
		}
	}else{ // Buffering complete: Stop the timer that updates UI display
		if(UpdateBufferingIntervalRunning){ // only if interval is already set
			window.clearInterval(BufferingDisplayInterval);
			WriteToLog("BufferingDisplayInterval Ended");
			UpdateBufferingIntervalRunning = false;
		}
		$("BufferingValue").innerHTML = ""; // clear any remaining buffering progress value
		// hide buffering display:
		$("RadioUiBufferingDisplay").style.display = "none";
		// unhide song progress display
		$("RadioUiPositionDisplay").style.display = "block";
	}
}

// end wmp event handlers -------------------------------------

function UpdateBufferingUiDisplay(){
	$("BufferingValue").innerHTML = RadioPlayerObj.network.bufferingProgress;
}



// Begin Debugging functions -------------------------------

function WriteToLog(HtmStr){
	if(DebugParam){ // only do if debug=true
		// time stamp
		var TimeNow = new Date();
		var SessionTimeMs = parseInt(TimeNow.getTime()) - SessionStartTimeMs;
		HtmStr = "Log ["+SessionTimeMs+"ms] : " + HtmStr + "<br />";
		try {
			$("LoggingOutput").innerHTML = HtmStr + $("LoggingOutput").innerHTML;
		}
		catch(e){}
	}
}


// End Debugging functions -------------------------------

