	//---- media advance ----
	function autoAdvanceMedia(e) {
		//document.getElementById('debugDiv').innerHTML += "e:"+e+"/";
		mPlayerDivMessage.style.display = "inline";
		if (adReplacement == true)
			{
			var myTempVar = switchURLlatch();
			//document.getElementById('debugDiv').innerHTML += "latch:"+myTempVar + "/";			
			if (myTempVar == true)
				{
				//---- ad replacement ----

					if (adReplacementFlag == true)
						{
						changePlayerUrl(streamSRCbase+"&playLocalAds=true&adReplacementPlayCampaignID="+adReplacementPlayCampaignID)
						forceBannerFileID = adReplacementPlayBannerFileID;
						bannerSelect();
						}
					else
						{
						//---- live feed ----
						changePlayerUrl(streamSRCbase)
						adReplacementPlayBannerFileID = "";
						forceBannerFileID = "";
						bannerSelect();
						}
					//---- END ---->

				//---- END ----
				}
			}
		else if (fileArchive == true)
			{
			//---- on-demand ---->

				if (shuffleMediaSetting == true)
					{
					//---- shuffle ---->
					shuffleMedia();
					//---- END ---->
					}
				else 
					{
					if (currentFileArchivePlayIndex < fileArchiveList.length - 1)
						{
						if (autoAdvanceMediaSetting == true)
							{
							currentFileArchivePlayIndex -= -1;
							}
						playMedia = true;
						}
					else
						{
						//currentFileArchivePlayIndex = 0;
						playMedia = autoLoopMediaSetting;
						}
					}

				//---- play file and start position bar ---->
				if (playMedia == true)
					{
					playFile(currentFileArchivePlayIndex);
					mPlayerPositionDsp();
					}
				//---- END ---->

			//---- END ---->
			}
		else
			{
			//---- switch to live feed ---->
			changePlayerUrl(streamSRCbase);
			forceBannerFileID = "";
			nowPlayingDuration = 0;
			bannerSelect();
			//---- END ---->
			}
		}
	//---- END ----

	function mPlayerStateMonitor(state) {
		var _tempDate = new Date();
		//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "--state:" + state + "*" + mPlayerSavedState + "----";
		if (_isMac)
			{
			//---- plugin on mac has different state codes ----
			mPlayerDivMessage.style.display = (mPlayerPlaying == false && state != 2 ? "inline" : "none");
			//---- END ----
			if (state == 2)
				{
				mPlayerPlaying = true;
				}
			else if (state <= 1)
				{
				mPlayerPlaying = false;
				}
			}
		else
			{
			mPlayerDivMessage.style.display = (state < 1 || state > 3 ? "inline" : "none");
			mPlayerPlaying = (state == 3 ? true : false);
			}
			
		document.getElementById('playerDivPlaying').style.display = (mPlayerPlaying == true ? "inline" : "none");
			
		//---- show player at video preroll play start ----
		if (mPlayerMode == "video" &&
			((state == 3) || (_isMac && state == 2)))
			{
			mPlayer.uiMode = "none";
			mPlayer.style.border = "1px solid black";
			if (_isMac)
				{
				mPlayer.ShowControls = false;
				}
			miniPlayerVideoStretch(true);
			dspDiv(document.getElementById('videoPreroll'),'997','block','absolute','100%','100%');
			dspDiv(mPlayerDiv,'999','inline','absolute','320','240');
			}			
		//---- END ----
		
		//---- handle end of media event ----
		if (playerMonitorState == true &&
			(autoAdvanceMediaSetting == true ||
			 autoLoopMediaSetting == true))
			{
			//media has ended playing
			if ((state == 8) || (_isMac && state == 1 && mPlayerSavedState == 2))
				{
				//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "----Wait for stop. Line 253 ----";
				mPlayerWaitForStop = true;
				}
			if (mPlayerWaitForStop &&
				(state == 1 || (_isMac && state == 0))
				)
				{
				//document.getElementById('debugDiv').innerHTML += "stop/";
				//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "----Wait for stop. Line 261 ----";
				
				//---- hide player at video preroll end ----
				if (mPlayerMode == "video")
					{
					miniPlayerVideoStretch(false);
					mPlayer.uiMode = "invisible";
					mPlayer.style.border = "0px solid black";
					mPlayer.width = "1";
					mPlayer.height = "1";
					mPlayerDiv.style.display = "block";
					mPlayerDiv.style.position = "absolute";
					mPlayerDiv.style.left = "-5000px";
					dspDiv(document.getElementById('videoPreroll'),'997','none','static','0','0');

					mPlayerMode = "audio";
					videoPrerollStatus = "end";
					audioPrerollStatus = "start";
					//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "----Video preroll end. Line 278 ----";
					}
				//---- END ----
					
				if (blackoutInProgress == true &&
					blackoutType == "REC")
					{
					//---- if EOM in blackout mode, replay sound bed ----
					setTimeout("mPlayerTransport('play')",1000);
					//---- END ----				
					}
				else if (audioPrerollEnabled == true &&
					"start,run".indexOf(audioPrerollStatus) != -1)
					{
					//---- run audio preroll ----
					dspAudioPreroll();
					//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "----Audio preroll. Line 287 ----";
					//---- END ----
					
					//---- show stream resume counter ----
					streamResumeCounterDsp(true);
					//---- END ----
					}
				else
					{
					audioPrerollHold = false;
					nowPlayingDuration = 0;
					
					//---- hide stream resume counter ----
					streamResumeCounterDsp(false);
					//---- END ----

					//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "---- Ad replacement flag: "+adReplacementFlag+"---Line 294 ----";

					if (fileArchive == true)
						{
						//---- run on-demand play ----
						autoAdvanceMedia('4');
						//---- END ----
						}				
					else if (adReplacementFlag == true)
						{
						//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "---- adReplacementInitializeStatus: "+adReplacementInitializeStatus+"---Line 304 ----";
						if (adReplacementInitializeStatus == false)
							{
							//---- start stream monitoring for the player at the end of video or audio preroll cycle ----
							adReplacementInitialize();
							//---- END ----
							}
						else
							{
							//---- run ad replacement local ads ----
							//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "---- Local ads.---Line 314 ----";
							if (mPlayerWaitForMediaEnd == true)
								{
								//---- online spot rejoin priority ----
								mPlayerWaitForMediaEnd = false;
								statusChangeSet();
								//---- END ----
								}
							else
								{
								autoAdvanceMedia('3');
								}
							//---- END ----
							}
						}
					else
						{
						//---- start banner roll ----
						bannerAutoRoll();
						//---- END ----
						//---- start stream monitoring for the player at the end of video or audio preroll cycle ----
						adReplacementInitialize();
						//---- END ----
						//---- run regular programming ----
						changePlayerUrl(streamSRCbase);
						//---- END ----
						}
					}

				resetmPlayerSavedState = true;

				}
			}
		//---- END ----
			
		//---- reset variables and end of media cycle ----
		//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "----Update mPlayerSavedState from "+mPlayerSavedState+" to state: "+state+"---Line 340 ----";		
		mPlayerSavedState = (resetmPlayerSavedState == true ? "" : state);
		
		//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "---- resetmPlayerSavedState: "+resetmPlayerSavedState+"---Line 342 ----";		
		if (resetmPlayerSavedState == true)
			{
			mPlayerSavedState = "";
			resetmPlayerSavedState = false;
			mPlayerPlaying = false;
			mPlayerWaitForStop = false;
			//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "---- Line 349 ----";		
			}
		else
			{
			//document.getElementById('debugDiv').innerHTML += "<br>"+_tempDate.toString() + "----Update mPlayerSavedState from "+mPlayerSavedState+" to state: "+state+"---Line 353 ----";		
			//mPlayerSavedState = state;
			}
		//---- END ----
		
		}
	//---- END ----
	
	//---- check if URL switch is OK (mostly for flip4mac compatibility, to avoid duplicate stream play) ----
	function switchURLlatch() {
		var switchURL = true;
		if (_isMac &&
			mPlayerURLSwitchLatch == false)
			{
			switchURL = false;
			}
		mPlayerURLSwitchLatch = false;
		
		//---- reset latch after 5 seconds. if there is an ad replacement flag change, that function will reset the latch instantly ----
		setTimeout("mPlayerURLSwitchLatch = true",5000);
		//---- END ----
		
		return switchURL;
		}
	//---- END ----	
	
	//---- player transport control ----
	function mPlayerTransport(pAction) {
		//document.getElementById('debugDiv').innerHTML += pAction;
		if (typeof(mPlayer) != "undefined")
			{
			switch(pAction)
				{

				case "play":
					if (mPlayerPlaying != true)
						{
						mPlayerDivMessage.style.display = "inline";
						if(_isMac)
							{
							mPlayer.Stop();
							setTimeout("mPlayer.Play()",500);
							}
						else
							{
							mPlayer.controls.play();
							}
						if (fileArchive == true)
							{
							document.getElementById('mPlayerButtonPlay').src = centralSvrPrefixURL + "/file_radio/v3/skins/skin_files/"+playerSkin+"/transport_play.gif";
							if(_isMac)
								{
								document.getElementById('mPlayerButtonPlayLink').href = "javascript:mPlayerTransport('stop');";
								}
							else
								{
								document.getElementById('mPlayerButtonPlayLink').href = "javascript:mPlayerTransport('pause');";
								}
							}
						}
					break;

				case "pause":
					if (fileArchive == true)
						{
						if(_isMac)
							{
							//---- mac doesn't deal well with pause. stop instead ----
							mPlayer.Stop();
							//---- END ----
							}
						else
							{
							mPlayer.controls.pause();
							document.getElementById('mPlayerButtonPlay').src = centralSvrPrefixURL + "/file_radio/v3/skins/skin_files/"+playerSkin+"/transport_pause.gif";
							}
						document.getElementById('mPlayerButtonPlayLink').href = "javascript:mPlayerTransport('play');";
						}
					break;

				case "stop":
					mPlayerDivMessage.style.display = "none";
					if(_isMac)
						{
						mPlayer.Stop();
						}
					else
						{
						mPlayer.controls.stop();
						}
					document.getElementById('mPlayerButtonPlay').src = centralSvrPrefixURL + "/file_radio/v3/skins/skin_files/"+playerSkin+"/transport_play.gif";
					document.getElementById('mPlayerButtonPlayLink').href = "javascript:mPlayerTransport('play');";	
					break;

				case "rev":
					if (mPlayerAllowPositionControl == true)
						{
						mPlayerDivMessage.style.display = "none";
						if(_isMac)
							{
							mPlayer.FastReverse();
							}
						else
							{
							mPlayer.controls.fastReverse();
							}
						document.getElementById('mPlayerButtonPlayLink').href = "javascript:mPlayerTransport('play');";
						}
					break;

				case "fwd":
					if (mPlayerAllowPositionControl == true)
						{
						mPlayerDivMessage.style.display = "none";
						if(_isMac)
							{
							mPlayer.FastForward();
							}
						else
							{
							mPlayer.controls.fastForward();
							}
						document.getElementById('mPlayerButtonPlayLink').href = "javascript:mPlayerTransport('play');";
						}
					break;			
				}
			}
	}
	//---- END ----
	
	//---- position control, if on-demand ----
	function mPlayerPositionControl(Obj,event) {

		//---- for manual override to allow position control ----
		//mPlayerAllowPositionControl = true;
		//---- END ----

		if (mPlayerAllowPositionControl == true)
			{		
			var newPosition = 0;

			if (window.ActiveXObject)
				{
				newPosition = window.event.offsetX;
				}
			else
				{
				var left = 0;
				var elm = Obj;
				while (elm)
					{
					left = elm.offsetLeft + left;
					elm = elm.offsetParent;
					}
					newPosition = event.pageX - left;
			}

			if (!isNaN(newPosition) &&
				nowPlayingDuration > 0 &&
				_isIE == true)
				{
				newPosition -= 9;
				newPosition = (newPosition < 207 ? newPosition : 207);
				mPlayer.Controls.currentPosition = newPosition * nowPlayingDuration/207;
				//---- call mPlayerPositionDsp immediately to set display position ----
				mPlayerPositionDsp();
				//---- END ----
				}

			// in FF or Safari may need to use CurrentPosition  if currentPosition won't work
			// on mac may need to use mPlayer.CurrentPosition
			}	
	}	
	//---- END ----
	
	//---- position display ----
	var posUpdateSeq;
	var posUpdateElapsedSec = 0;
	
	function mPlayerPositionDsp() {
		if (dspPositionBar == true)
			{
			posUpdateElapsedSec = mPlayer.controls.currentPosition;
			if (nowPlayingDuration == 0)
				{
				if(!isNaN(posUpdateSeq))
					{
					clearInterval(posUpdateSeq);
					document.getElementById("mPlayerPositionBar").style.width = "0px";
					document.getElementById("mPlayerPositionDiv").style.display="none";
					}
				}
			else if (nowPlayingDuration - posUpdateElapsedSec >= 0)
				{
				if (document.getElementById("mPlayerPositionDiv").style.display=="none")
					{
					document.getElementById("mPlayerPositionDiv").style.display="inline";
					}
				document.getElementById("mPlayerPositionBar").style.width = Math.floor(posUpdateElapsedSec*207/nowPlayingDuration) + "px";
				if (isNaN(posUpdateSeq))
					{
					posUpdateSeq = setInterval("mPlayerPositionDsp()",500);
					}
				if (streamResumeCounterVisible == true)
					{
					document.getElementById("streamResumeCounter").innerHTML = parseInt(nowPlayingDuration-posUpdateElapsedSec);
					}
				}	
			}
	}
	//---- END ----	
	
	//---- volume control ----
	var t;
	function mPlayerVolumeChange(dir)
		{

		// if a song is not playing then just return
		if (mPlayerPlaying == false)
			return;

		if (document.getElementById('vol_display'))
			document.getElementById('vol_display').innerHTML = mPlayerVolume;

		if (dir == 1 || dir == 5) // left or down
			{	
			mPlayerVolume -= 10;
			mPlayerVolume = (mPlayerVolume >= 0 ? mPlayerVolume : 0);
			if (dir == 1)
				t = setTimeout('mPlayerVolumeChange('+dir+')', 100);
			}
		else if (dir == 2) // right or up
			{
			mPlayerVolume -= -10;
			mPlayerVolume = (mPlayerVolume <= 100 ? mPlayerVolume : 100);
			t = setTimeout('mPlayerVolumeChange('+dir+')', 100);
			}
		else if (dir == 3) // stop changing volume
			{
			clearTimeout(t);
			}

		mPlayer.settings.volume = mPlayerVolume;
		return mPlayerVolume;
	} 	
	//---- END ----
	
	function changePlayerUrl(url) {
		//document.getElementById('debugDiv').innerHTML += url + "<br>";
		if(!_isMac)
			{
			mPlayer.URL = url;	
			//alert(mPlayer.URL);
			//---- delay play start, as WMP tends not to start otherwise ---->
			var delayPlayStart = setTimeout("mPlayerTransport('play')",800);
			}
		else
			{
			mPlayerDiv.innerHTML = mPlayerDiv.innerHTML.replace(/src=\"(.*?)\"/g, 'src="' + url + '"').replace(/autostart=\"false\"/g, 'autostart="true"');			
			//---- definition of object is required again for event capture ----
			mPlayer = document.Player;
			checkPlayerState();
			//---- END ----
			//alert(mPlayerDiv.innerHTML);
			}
	}

	
	var mPlayerFullScreenPolling;
	
	//---- if player is in video mode, poll and see if player is full-screen. if it is, revert back to in-frame ----
	function mPlayerFullScreen() {
		if (mPlayerMode == "video")
			{
			if (mPlayer.fullScreen == true)
				{
				mPlayer.fullScreen = false;
				}
			}
		else
			{
			clearInterval(mPlayerFullScreenPolling);
			}
	}
	//---- END ----

	//---- video preroll ----
	function dspVideoPreroll() {
		//---- progress bar display ----
		nowPlayingDuration = videoPrerollDuration;
		mPlayerPositionDsp();
		//---- END ----

		mPlayerMode = "video";
		videoPrerollStatus = "run";
		mPlayerFullScreenPolling = setInterval("mPlayerFullScreen()",200);
		changePlayerUrl(streamSRCbase + "&fileType=PRV&videoPrerollFileID="+videoPrerollFileID);
	}
	//---- END ----

