// data members
//var gHostServer = "http://www.live365.com/stations/armanfm?play";

var gHostServer = "http://www.live365.com/play/339780?sid=142.58.242.47-1192506083345&lid=&from=pls";




//gHostServer = "devweb01.nanocosm.com";

if (typeof(g365CurVIPVer) == "undefined" || typeof(g365CurVer) == "undefined")
	document.write('<sc'+'ript language="JavaScript" src="http://' + gHostServer + '/scripts/version.js"></scr' + 'ipt>');

if (typeof(HasWMP7) == "undefined" )
	document.write('<sc'+'ript language="JavaScript" src="http://' + gHostServer + '/scripts/vb_sniff_lite.js"></scr' + 'ipt>');

if (typeof(GetHostApp) == "undefined" )
	document.write('<sc'+'ript language="JavaScript" src="http://' + gHostServer + '/scripts/hosts.js"></scr' + 'ipt>');

// If the user is either AFL or is listening to a PLR station, give them the MP3Pro player.
var gMP3Pro = false;
if ((GetCookie("afl") > 0 || GetCookieEx('session_mc', 'plr') == 'Y') && GetCookieEx('box_mc', 'beta') == 'mp3PRO' && GetCookieEx('box_mc', 'POC') == 3)
	gMP3Pro = true;
	
var gRealOneGraphic = "/images/realonedownload-01.gif";
var gRealOneDownloadURL = "http://www.real.com/freeplayer/?rppr=live365";

var gPlayer365DownloadURL = "/listen/player365-download.html";
var gPlayer365Graphic = "/images/player365download.gif";


// we're not sniffing for WMP versions anymore -- just assume that user has latest version.
var bIsLive365Domain = (self.location.host.indexOf(gHostServer) != -1);
var g365InstVer = GetP365AvailableVersion();
	
var bHandlingError = false;	//prevent handling multiple errors at once
var bShowMoreErrors = true;
var PreviousVol = -1;
var bRedirect = false;
var BufferCallbacks = new Array();
var PlayStartCallbacks = new Array();
var PlayStopCallbacks = new Array();
var StatusImage = 0;
var DropCount = 0;
var bEverListened;
var unMuteVolume = 0;
// Prepare for DrawMeter
var gOffCells = 6;			// number of off cells currently drawn
var cCells = 12;

var cOffColor	 = 'led-off.gif';
var cOnColor	 = 'led-on.gif';
var cBufferColor = 'led-buf.gif';
var cBlankNav	 = 'topnavtxt-blank.gif';
var cContacting	 = 'contacting.gif';
var cBuffering	 = 'buffering.gif';
var cPlaying	 = 'nowplaying.gif';
var cWaiting	 = 'waiting.gif';
var cConnecting	 = 'connecting.gif';
var cMuteOn		 = 'mute-on.gif';
var cMuteOff	 = 'mute-off.gif';
var cVolUpVert	 = 'vol-up-old.gif';
var cVolDownVert = 'vol-down-old.gif';
var cVolUp		 = 'vol-up.gif';
var cVolDown	 = 'vol-down.gif';
var cVolBoxTop	 = 'volbox-top.gif';
var cVolBoxBot	 = 'volbox-bottom.gif';
var cVolBoxLeft	 = 'volbox-left.gif';
var cVolBoxRight = 'volbox-right.gif';
var cVolBoxCtr	 = 'volbox-center.gif';
var cMp3ProOn	 = 'indicator-mp3pro-on.gif';
var cMp3ProOff	 = 'indicator-mp3pro-off.gif';


// prepare images for either PLR or other.
var lMuteH;
var lMuteW;

var gProgress     =  12;
var gProgressIncr = 8;
var gMaxVol = 0;
var gMinVol = 100;
var gStreamFormat = "MP3";
var gStreamHiFi	  = "HI_FI";

var gSiteImageDir = 'http://'+ gHostServer + '/mini/images/';

if (parent.gPLRflag == "Y") {
	gSiteImageDir = 'http://'+ gHostServer + "/scp/plr/mini/images/";
	lMuteH			= "47";
	lMuteW			= "26";
} 
else {
	if (parent && parent.imageDir)
		gSiteImageDir = parent.imageDir;

	lMuteH			= "19";
	lMuteW			= "19";		
}

var gbVertical = false;
var PSMap = 0; //playstate map
var PlayState = 0;
var choosemode = "install";
var InRetry = false;
var RetryCount = 0;
var gBufferingTimer = null;
var gShowBuffering = 0;

function AddCallBack(cbArray,cb)
{
	var i = 0;
	for (var i; i<cbArray.length; i++) {
		if (cbArray[i] == cb)
			return; //already registered
	}
	cbArray[i] = cb;	
}


function RemoveCallBack(cbArray,cb)
{
	var i;
	var index =0;
	var tmpArray = new Array();

	for (i = 0; i < cbArray.length; i++)	{
		if (cbArray[i] != cb) {	
			tmpArray[index] = cbArray[i];
			index++
		}
	}
	return tmpArray;	
}


function NagForPlayer365Upgrade()
{
	var nag_count = parseInt(GetCookieEx('player_mc', 'vernonag'));
	
	if (isNaN(nag_count))
		nag_count = 0;
	
	var suffix = (gMP3Pro) ? '-VIP' : '';

	if (!(nag_count % 10) && 
		confirm("An updated version of Player365" + suffix + " is available.\n\n" +
				"Click OK to install it now or click Cancel to use your current version.")) {
		g365InstVer = GetP365AvailableVersion();
		nag_count = -1;
	}
	else {
		RememberItEx('box_mc', 'ls', 3);			// set to bypass install pages
		g365InstVer = GetP365VersionFromCookie();	// stick with existing version
	}
	
	RememberItEx('player_mc', 'vernonag', parseInt(nag_count + 1));
}


function HasEmbeddedPlayer()
{
	return (parent.player == "WMP" || parent.player == "G2" || parent.player == "365");
}


function DrawPlayer(bChooseAPlayerNag)
{
	var playertype = "365";
    
	if (!HasEmbeddedPlayer())
		return;

	if (parent.player == "365")	{
		if (gMP3Pro)
			playertype="365VIP";

		if (bChooseAPlayerNag && (!HasPlayer(playertype) || (!gMP3Pro && !GetCookieEx('player_mc', 'ver')) && bIsLive365Domain)) {
			ChooseAPlayer();
			return false;
		}

		if (NewP365VersionAvailable())
			NagForPlayer365Upgrade();
	}
	else {	// WMP, G2
		if (!HasPlayer(parent.player)) {
			alert("Whoops, the player that you have specified does not seem to be installed on your system.\n\nClick OK and we will guide you through selecting another player.");

			if (bChooseAPlayerNag) {
				choosemode = "slip";
	    		ChooseAPlayer();
			}

			return false; //this really causes problems if it's not here
		}
	}

	document.write(GetPlayerDrawCode(parent.player, false, bChooseAPlayerNag));

	return true;
}


function GetPlayerDrawCode(player, doInstall, bChooseAPlayerNag)
{
	var playerdata = '<object id="PlayerControl" height="0" width="0" align="top" border="0" ';

	if (player == "WMP") {
		if (HasWMP7() || ResniffWMP(7))
			playerdata += 'classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6" ';
		else {
			//playerdata += 'classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" ';
			alert("Warning: You are attempting to use an outdated version of Windows Media Player.\nClick OK to select a different player.");
			if (bChooseAPlayerNag)
				ChooseAPlayer();
			return '';
		}

		playerdata += 'codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" ';
		playerdata += 'standby="Loading Microsoft Windows Media Player components..." ';
		playerdata += 'type="application/x-oleobject">';

		playerdata += '<param name="AutoStart" value="true">';
		playerdata += '<param name="AutoSize" value="false">';
		playerdata += '<param name="ShowAudioControls" value="false">';
		playerdata += '<param name="ShowCaptioning" value="false">';
		playerdata += '<param name="ShowControls" value="false">';
		playerdata += '<param name="ShowDisplay" value="false">';
		playerdata += '<param name="ShowGotoBar" value="false">';
		playerdata += '<param name="ShowPositionControls" value="false">';
		playerdata += '<param name="ShowStatusBar" value="false">';
		playerdata += '<param name="ShowTracker" value="false">';
		playerdata += '<param name="TransparentAtStart" value="true">';
		playerdata += '<param name="VideoBorderWidth" value="0">';
		playerdata += '<param name="uiMode" value="invisible">';
	}
	else if (player == "365") {
		if (gMP3Pro)
			playerdata += 'codeBase="http://' + gHostServer + '/players/p365vip.cab#Version=' + g365InstVer + '" classid="CLSID:40272BF7-4FF5-4d6f-9BAD-3C1D3CB32982"> ';
		else
			playerdata += 'codeBase="http://' + gHostServer + '/players/play365.cab#Version=' + g365InstVer + '" classid="CLSID:CC05BC12-2AA2-4AC7-AC81-0E40F83B1ADF"> ';
	}
	else if (player == "G2") {
		playerdata += 'classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA">';		//Real G2 player
		playerdata += '<param name="autostart" value="false"> ';
		playerdata += '<param name="CONTROLS" value="ImageWindow"> ';
	}
	
	if (navigator.appName == "Netscape") { // Firefox/Netscape
		playerdata += '<embed name="PlayerControl" ';

		if (player == "WMP") {
			playerdata += 'type="application/x-mplayer2" ';
			playerdata += 'pluginspage="http://www.microsoft.com/windows/mediaplayer/download/default.asp" ';
			playerdata += 'align="top" ';
			playerdata += 'border="0" ';
			playerdata += 'height="2" ';
			playerdata += 'width="1">';

			PSMap = new Array(0,4,3,2,2,2,1);
		}
		else if (player == "365") {
			if (bChooseAPlayerNag) {
				alert("Warning: the Player365 ActiveX control is not supported in this browser.\nClick OK to select a different player.");
				ChooseAPlayer();
			}
		}
		else if (player == "G2") {
			playerdata += 'src="http://' + gHostServer + '/mini/dummy.rpm" type="audio/x-pn-realaudio-plugin" pluginspage="http://www.real.com" width="2" height="2">';
			PSMap = new Array(0,1,2,3,4,5);
		}

		playerdata += '</embed>';
	}

	if (self.location.href.indexOf('volume.html') == -1 && bIsLive365Domain && bChooseAPlayerNag)
		playerdata += '<div align="left"><IMG SRC="/images/usrmsg-error.gif" width=20 height=18 alt="Installation Error" align=left>Installation <b>aborted</b> or <b>failed</b>.  Would you like to <a href="javascript:window.location.replace(self.location.href)">retry</a> or <a href="javascript:chooseDiffPlayer()">choose a different player</a>?</div>';
	else
		playerdata += '&nbsp;';

	playerdata += '</object>';
		
	if (player == "365" && !doInstall) {	// Draw event handlers
		var playerCookieType = (gMP3Pro)? 'verpro' : 'ver';

		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnReady">';
		playerdata += 'RememberItEx("player_mc", "'+ playerCookieType; 
		playerdata += '", fixDelimiter(document.PlayerControl.getVersion()));';
		playerdata += '</scr'+'ipt>';			

		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnBuffer(bufferpercent)">';
		playerdata += 'PlayerOnBuffer(bufferpercent);';				
		playerdata += '</scr'+'ipt>';

		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnError(errId, errCode, msg)">';
		playerdata += 'PlayerOnError(errId, errCode, msg);';
		playerdata += '</scr'+'ipt>';
		
		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnDrop">';
		playerdata += 'PlayerOnDrop();';
		playerdata += '</scr'+'ipt>';
		
		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnStartPlaying">';
		playerdata += 'PlayerOnStartPlaying();';
		playerdata += '</scr'+'ipt>';
		
		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnStop">';
		playerdata += 'PlayerOnStop();';
		playerdata += '</scr'+'ipt>';

		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnConnectionLost">';
		playerdata += 'PlayerOnConnectionLost();';
		playerdata += '</scr'+'ipt>';
		
		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnVolumeChange()">';
		playerdata += 'PlayerOnVolumeChange();';
		playerdata += '</scr'+'ipt>';
		
		playerdata += '<scr'+'ipt LANGUAGE="JavaScript" FOR="PlayerControl" EVENT="OnStreamFormat(format)">';
		playerdata += 'PlayerOnStreamFormat(format);';
		playerdata += '</scr'+'ipt>';
	}

	return playerdata;
}


function GetVersion()
{
	if (parent.player == "MP3" || parent.player == "NotSet" || parent.player == "100" || !document.PlayerControl) {
		gVersion = "0.0.0.0";
	}
	else if (parent.player == "G2") {
		if (navigator.appName == "Netscape" && parseInt(navigator.appVersion) > 4)
			gVersion = "6.0.8";	//NS 6 Real doesn't have this call
		else {
			var ver = document.PlayerControl.GetVersionInfo();

			if (navigator.appName == "Netscape")
				gVersion = ver.substring(0, 8);
			else
				gVersion = ver;
		}

	}
	else if (parent.player == "365") {
		if (!document.PlayerControl)
			alert("Warning: There is a problem with your installation of Player 365!\n You will need to reinstall it.");
		else
			gVersion = document.PlayerControl.GetVersion();
	}
	
	return gVersion + ""; //make sure we get a JS string
}


function CheckVersion(stream)
{
	var msg = "";

	if (parent.player == "G2") {
		if (VersionLessThan(gVersion, "6.0.7")) {
			if (navigator.appName != "Netscape") 
				msg = "(below and on the subsequent warning dialog)\n";

			if (gVersion == "0.0.0.0")
				alert("Oops! You don't have RealPlayer 7 or higher installed.\n\nLive365 requires RealPlayer 7 or higher to listen.\nClick OK " + msg + "and we'll walk you through a few simple steps to install our player which will allow you to listen in no time.");
			else				
				alert("Oops! You have RealPlayer v" + gVersion + " installed.\n\nLive365 requires RealPlayer 7 or higher to listen.\nClick OK " + msg + "and we'll walk you through a few simple steps to install our player which will allow you to listen in no time.");

			return false;
		}

		if (gVersion.indexOf("6.0.7.529") != -1) {
			msg = "Oops! You have RealPlayer v6.0.7.529 installed.\n\nThis particular version has serious playback problems, and is not supported by Live365.\n\n";
			alert(msg + "Click OK and we'll walk you through a few simple steps to install our player which will allow you to listen in no time.");
			SetPOC(3);
			choosemode="slip";
			return false;
		}
	}

	return true;
}


function GetChoosePlayerPageURL()
{
	var ChoosePlayerURL = 'http://'+ gHostServer + "/mini/install/step1.live?mode=" + choosemode + "&autoinstall=0&streamlaunched=" + parent.streamID + "&url=" + encodeURIComponent(top.launchUrl);

	if (top.site)
		ChoosePlayerURL += 	"&site=" + top.site;

	return ChoosePlayerURL;
}


function ChooseAPlayer()
{
	window.onbeforeunload = null;
	top.location = 	GetChoosePlayerPageURL();
}


function UpgradePlayer()
{
	var upgradeURL = '/mini/install/step2.live?mode=upgrade&autoinstall=1&source=' + top.source + '&site=' + top.site + '&plrflag=' + top.plrFlag + '&url=' + encodeURIComponent(top.launchUrl)

	top.openWindow(330, 468, upgradeURL, 'InstallWin');
	top.close();
}


function ShowBufferingImage()
{
	PlayState = 2;
	
	if (StatusImage) {
		// if the place is there to load the buffering image, do so.  if not, forget about it!
		if (parent.gSetupFlag && parent.live365VerifyMessage)
			StatusImage.src = gSiteImageDir + cBuffering;
		else if (parent.gPLRflag != "Y" && parent.topbar.document.toparea)
			StatusImage.src = gSiteImageDir + cBuffering;
	}
}


function HideBufferingImage()
{
	if (StatusImage) {
		if (parent.gSetupFlag && parent.live365VerifyMessage)
			parent.live365VerifyMessage.document.status.src = gSiteImageDir + cPlaying;
		else if (parent.gPLRflag != "Y" && parent.topbar.document.toparea)
			parent.frames.topbar.document.toparea.src = gSiteImageDir + cBlankNav;
	}
}


function ShowWaitingImage()
{
	PlayState = 1;
	if (StatusImage) {	// if the place is there to load the buffering image, do so.  if not, forget about it!
		if (parent.gSetupFlag && parent.live365VerifyMessage)
			parent.live365VerifyMessage.document.status.src = gSiteImageDir + cWaiting;
		else if (parent.gPLRflag != "Y" && parent.topbar.document.toparea)
			parent.topbar.document.toparea.src = gSiteImageDir + cWaiting;
	}
}


function ShowConnectingImage()
{
	PlayState = 7;
	
	if (StatusImage) {
		// if the place is there to load the buffering image, do so.  if not, forget about it!
		if (parent.gSetupFlag && parent.live365VerifyMessage)
			parent.live365VerifyMessage.document.status.src = gSiteImageDir + cConnecting;
		else if (parent.gPLRflag != "Y" && parent.topbar.document.toparea)
			parent.topbar.document.toparea.src = gSiteImageDir + cConnecting;
		else if (parent.gPLRflag == "Y" && parent.Status.document.status)
			parent.Status.document.status.src = gSiteImageDir + cContacting;
	}
}


function Stop()
{
	if (document.PlayerControl)	{
		PlayState = 0;
		gShowBuffering = 0;
		
		if (gBufferingTimer != null) {
			window.clearTimeout(gBufferingTimer);
			gBufferingTimer = null;
		}
		
		if (parent.player == "WMP") {
			if (HasWMP7())
				document.PlayerControl.controls.stop();
			else
				document.PlayerControl.Stop();
		}
		else if (parent.player == "G2")
			document.PlayerControl.DoStop();
		else if (parent.player == "365") {
			if (gMP3Pro)
				try {
					document.PlayerControl.Stop(1);
				}
				catch(e) {
					document.PlayerControl.Stop();
				}
			else
				document.PlayerControl.Stop();
		}
	}
	
	UpdateMeter(0);
}

function Retry()
{
	// retry the existing stream via a clerk trip set state to retrying
	Stop();
	InRetry = true;
	RetryCount++;
	top.LaunchAltStream(top.streamUrl, null, top.player, top.plrLevel, top.playlist, top.memberName, top.site );
}


function Play(stream)
{
	bHandlingError = false;
	bEverListened = GetCookieEx('box_mc', 'LOK');
	if (bEverListened == null)
		bEverListened = false;
	var poc = parent.player;

	if (!CheckVersion(stream)) {
		if (poc == parent.player)
			ChooseAPlayer();

		return;
	}

	if (parent.player == "NotSet")
		ChooseAPlayer();
	else if (document.PlayerControl) {
		PlayState = 1;
		
		gShowBuffering = 1;
		
		if (gBufferingTimer != null) {
			window.clearTimeout(gBufferingTimer);
			gBufferingTimer = null;
		}
		
		if (parent.player == "WMP") {
			ShowBufferingImage();
			
			if (HasWMP7()) {
				if (GetCookie("platform") == 'wmp10')
					document.PlayerControl.OpenPlayer(stream);
				else 
					document.PlayerControl.URL = stream;
			}
			else
				document.PlayerControl.Open(stream);

			StartBuffering();
		}
		else if (parent.player == "365") {

			ShowConnectingImage();
			vData = GetCookieEx("player_mc", "BufSize");
			
			//vData is the number of seconds to buffer up of the 
			//streams bitrate
			
			if (vData == null)
				vData = 6;

			if (typeof(top.bitrateStream) != "undefined") {
				// PlayerVIP takes the buffer data in terms of seconds, Player365 wants actual bytes
				if (gMP3Pro)
					document.PlayerControl.SetBufferSize(parseInt(vData));
				else{
					vData = vData*parseInt(top.bitrateStream)/8*1000;
					document.PlayerControl.SetBufferSize(parseInt(vData));
				}
			}

			if (typeof(top.serverMode) == "string") {
				if (top.serverMode == "RE")
					document.PlayerControl.SetMaxRetries(10);
			}

			var iPort = GetCookieEx("player_mc","ProxyPort");
			var ProxyServer = GetCookieEx("player_mc","ProxyServer");
			var UseProxy = GetCookieEx("player_mc","UseProxy");

			if (ProxyServer == "autodetect" && UseProxy == "Y") {
				RememberItEx("player_mc", "UseProxy", "A");
				UseProxy = "A";
			}

			if (ProxyServer != "autodetect" && ProxyServer != '' && ProxyServer != null) {
				if (UseProxy == "Y") {	
					alert("UseProxy  Y "+ ProxyServer);
					document.PlayerControl.SetProxy(ProxyServer, iPort);
				}
			}

			if (UseProxy == "A" && !VersionLessThan(GetVersion(), "1.0.0.7"))	
				document.PlayerControl.SetProxy("autodetect", 0);

			bShowMoreErrors = true;
			document.PlayerControl.SetSRC(stream);
			document.PlayerControl.Play();					

			//call this only once here, otherwise depending on the loading of mini,
			//it seems like IE gets a bit confused and can get into a race condition due
			//to the rapid-fire graphics updates. The first two lines were to ensure
			//the meter was refreshed properly.

//			UpdateMeterView(100, true);
//			UpdateMeter(0);//force a complete redraw			
			UpdateMeter(GetVolume());
		}		
		else {
			ShowBufferingImage();

			//fail gracefully(?) if they don't really have this player installed
			if (typeof(document.PlayerControl.GetPlayState) == 'undefined') {
				if (confirm("Warning!  There are problems detected with the player you have chosen, and we are unable to play your chosen station.\nAre you certain you have the player you've selected installed properly?\nClick OK to re-install your current player, or choose another."))
				ChooseAPlayer();
				return;
			}

			if (document.PlayerControl.GetPlayState() == 3)
				document.PlayerControl.DoStop();

			if (navigator.appName == "Netscape") 
				document.PlayerControl.SetSource(stream);
			else
				document.PlayerControl.Source = stream;

			document.PlayerControl.DoPlay();
			StartBuffering();
		}
	}	
	else
		ChooseAPlayer();
}


function GetPlayState()
{
	var vps = -1;
	if (document.PlayerControl) {
		if (parent.player == "WMP") {
			if (HasWMP7())
				vps = document.PlayerControl.playState;
			else
				vps = (navigator.appName == "Netscape") ? document.PlayerControl.GetPlayState() : document.PlayerControl.PlayState;
		}
		else if (parent.player == "G2") 
			vps = document.PlayerControl.GetPlayState();
	}

	if (PSMap) {
		if ((vps<PSMap.length)&&(vps>=0))
			PlayState = PSMap[vps];
	}

	return PlayState;
}


function GetMute()
{
	if (document.PlayerControl) {
		if (parent.player == "G2" || navigator.appName == "Netscape" || parent.player == "365")
			return document.PlayerControl.GetMute();
		else {
			if (HasWMP7())
				return  document.PlayerControl.settings.mute ;
			else
				return document.PlayerControl.Mute;
		}
	}

	return false;
}


function SetMute(mute, bUpdateMeter)
{
	if (bUpdateMeter==null)
		bUpdateMeter=true;

	if (document.PlayerControl) {
		if (mute) {
			if (bUpdateMeter) {
				unMuteVolume = GetVolume();
				SetVolume(0, true);
				UpdateMeter(0);
			}
		}
		else {
			if (bUpdateMeter) {
				SetVolume(unMuteVolume);
				UpdateMeter(unMuteVolume);
			}
		}

		if (parent.player == "G2" || navigator.appName == "Netscape" || parent.player == "365" )
			document.PlayerControl.SetMute(mute);
		else {
			if (HasWMP7())
				document.PlayerControl.settings.mute = mute;
			else
				document.PlayerControl.Mute = mute;
		}
	}
}


function SetVolumeRanges(player)
{
	if (parent.player == "WMP" && !HasWMP7()) {
		gMinVol = -1200; //-10000
		gMaxVol = 0;
		gProgress = -1200;
		gProgressIncr = 100;
	}
	else {
		gMinVol = 0;
		gMaxVol = 100;
		gProgress = 12;
		gProgressIncr = 8;
	}
}


function SetVolume(val, bNoCookie)
{
	Math.min(gMaxVol, val);
	Math.max(gMinVol, val);

	if (document.PlayerControl) {
		if (parent.player == "G2" || navigator.appName == "Netscape" || parent.player == "365")
			document.PlayerControl.SetVolume(val);
		else {
			if (HasWMP7())
				document.PlayerControl.settings.volume = val;
			else
				document.PlayerControl.Volume = val;
		}

		if (!bNoCookie && navigator.appName != "Netscape")
			RememberItEx("player_mc","Vol",val);
	}

	return val;
}


function GetVolume()
{
	if (document.PlayerControl) {
		if (parent.player == "G2" || navigator.appName == "Netscape" || parent.player == "365")
			return document.PlayerControl.GetVolume();
		else {
			if (HasWMP7())
				return document.PlayerControl.settings.volume;
			return document.PlayerControl.Volume;
		}
	}
	else
		return ((parent.player == "WMP")&& !HasWMP7()) ? -600 : 50;
}


function GetCookieVolume()
{
	var Vol = GetCookieEx("player_mc","Vol");

	if (Vol == null)
		Vol = GetVolume();

	return Vol;
}


function Mute(imageDir)
{
	var mute;

	if (document.PlayerControl) {
		mute = GetMute();
		SetMute(!mute);
		document.images.mute.src = imageDir + (mute ? cMuteOff :  cMuteOn);

		if (top.RotateAd && !parent.gSetupFlag)
			top.RotateAd(top.displayType);
	}

	return false;
}


function VolumeAbs(val, bNoCookie)
{
	if (document.PlayerControl) {
		if (GetMute() == true)
			Mute(gSiteImageDir);
	
		val = SetVolume(val, bNoCookie);
		UpdateMeter(val);
	}

	return false;
}


function VolumeRel(val)
{
	if (GetMute() == true)
		Mute(gSiteImageDir);
	else {
		var vol = GetVolume();
		vol+=val;
		
		if (vol <= (gMinVol+Math.abs(gProgressIncr)))
			return false;

		VolumeAbs(vol);
	}

	return false;
}


function GetMeterCode(bVertical, imageDir)
{
	gSiteImageDir = imageDir;

	// constructor scripts
	//status image slot logic
	if (parent.gSetupFlag && parent.live365VerifyMessage)
		StatusImage = parent.live365VerifyMessage.document.status;

	SetVolumeRanges(parent.player);
	gbVertical = bVertical;

	var muteImage;
	var i;
	var colorTile;
	var incr;

	var v = GetVolume();
	var Width = 15;
	var SpacerWidth = 15;
	var Height = 5;
	var SpacerHeight = 2;
	var imgHeight = 5;
	var coords="0,0,15,18" ;
	var MaxHeight = 15;
	var MinHeight = 7;
	var iCell = 0;

	var click;
	var ref;

	incr = gProgressIncr;
	var VolRange = gMaxVol - gMinVol;

	gOffCells = Math.floor(Math.abs((VolRange-Math.abs(v))/incr));
	
	var volumedata = '<a name="Set Volume"></a>';

	if (!bVertical) {
		Width 			= 6;
		SpacerWidth		= 2;
		SpacerHeight	= 15;
		Height			= 20;
		coords			= "0,0,15,18";
	}
	
	if (bVertical) {
		volumedata += '<img src="' + imageDir + cVolUpVert + '" width="15" height="18" border="0" alt="Volume Up" usemap="#volup"><br>';
		volumedata += '<map name="volup"><area alt="Volume Up" href="#Set Volume" coords="' + coords + '" onclick="VolumeRel(' + incr + ')"></map>';
		volumedata += '<img src="http://' + gHostServer + '/images/dot.gif" width="15" height="2" href=""><br>';	
	}
	else {
		volumedata += '<table width="138" border="0" cellspacing="0" cellpadding="0" height="28">';
		volumedata += '<tr>';
		volumedata += '<td colspan="7"><img src="http://' + gHostServer + '/images/dot.gif" width="163" height="6" vspace="0" hspace="0" border="0"></td>';
		volumedata += '</tr>';
		volumedata += '<tr> ';
		volumedata += '<td colspan="7"><img src="' + imageDir + cVolBoxTop + '" width="163" height="5" vspace="0" hspace="0" border="0"></td>';
		volumedata += '</tr>';
		volumedata += '<tr> ';
		volumedata += '<td width="3"><img src="' + imageDir + cVolBoxLeft + '" width="3" height="20" vspace="0" hspace="0" border="0"></td>';

		click = 'onclick="return Mute(\'' + imageDir + '\');"';
		ref ='"#"';

		volumedata += '<td width="27">';
		volumedata += '<a href='+ref+' '+click+'><img name="mute"  border="0" src="' + imageDir + cMuteOff + '" width="27" height="20" vspace="0" hspace="0" alt="Mute"></a></td>';
		volumedata += '<td width="6"><img src="' + imageDir + cVolBoxCtr + '" width="6" height="20" vspace="0" hspace="0" border="0"></td>';

		click = 'onclick="return VolumeRel(' + eval(-incr)+ ');"';
		ref ='"#"';

		volumedata += '<td width="14"><a href='+ref+' '+click+' ><img src="' + imageDir + cVolDown + '" width="14" height="20" border="0" alt="Volume-Down" vspace="0" hspace="0"></a></td>';	
	    volumedata += '<td cellspacing=0 align="center">';
		volumedata += '<table width="94"  border="0" cellspacing="0" cellpadding="0">';
	}
	
	for (i = 0; i < cCells; i++) {
		if (!bVertical) {
			volumedata += '<td width='+Width+' valign="bottom" cellspacing=0>';
			iCell = cCells - i -1;
			//Height = 20 - 12 -6 + i;
		}
		else 
			iCell = i;

		var vol = (gMaxVol - (iCell*incr));
		var volpct = Math.floor((Math.abs((Math.abs(vol)-Math.abs(gMinVol))/VolRange))*100);
		click = 'onClick="return VolumeAbs(' + vol + ');"';
		ref ='"#"';

		colorTile = imageDir + ((iCell < gOffCells) ? cOffColor : cOnColor);	
		volumedata += '<a href='+ref+' '+click+'><img name="cell' + iCell + '"  src="' + colorTile + '" alt="Set Volume to '+ volpct +'%" border="0" width="'+Width+'" height="'+Height+'"></a>';
		
		if (bVertical)
			volumedata += '<br>';
		else
			volumedata += '</td>';
		
		if (bVertical)
			volumedata += '<a href='+ref+' '+click+' ><img src="http://' + gHostServer + '/images/dot.gif" alt="Set Volume to '+ volpct +'%"  border="0" width="'+SpacerWidth+'" height="'+SpacerHeight+'"></a>';
		else {
			if (i != cCells-1)
				volumedata += '<td cellspacing=0  width='+SpacerWidth+'><a href='+ref+' '+click+'><img src="http://' + gHostServer + '/images/dot.gif" alt="Set Volume to '+ volpct +'%"  border="0" width="'+SpacerWidth+'" height="'+SpacerHeight+'"></a></td>';
		}

		if (bVertical)
			volumedata += '<br>';
	}

	if (bVertical) {
		volumedata += '<img src="' + imageDir + cVolDownVert + '" alt="Volume Down" width="15" height="18" border="0" usemap="#voldown"><br>';
		volumedata += '<map name="voldown"><area alt="Volume Down" href="#Set Volume" coords="0,0,15,18" onclick="VolumeRel(' + eval(-incr)+ ')"></map>';

		if (parent.gPLRflag == "Y")
			volumedata += '<img src="http://' + gHostServer + '/images/dot.gif" width="15" height="15" href=""><br>';	
		else
			volumedata += '<img src="http://' + gHostServer + '/images/dot.gif" width="15" height="5" href=""><br>';

		muteImage = imageDir + (GetMute() ? cMuteOn : cMuteOff);
		volumedata += '<img name="mute" alt="Mute" src="' + muteImage + '" width="' + lMuteW + '" height="' + lMuteH + '" border=0 usemap="#volmute"><br>';
		volumedata += '<map name="volmute"><area href="#Set Volume" alt="Mute" coords="0,0,' + lMuteW + ',' + lMuteH + '" onclick="Mute(\''+imageDir+'\')"></map>';
		volumedata += '<br><img src="http://' + gHostServer + '/images/dot.gif" height="100" width="1"><br>';
	}
	else {
		click = 'onclick="return VolumeRel(' + eval(incr)+ ');"';
		ref ='"#"';

		volumedata += '</table>';
		volumedata += '    </td>';
		volumedata += '<td width="14"><a href='+ref+' '+click+'><img src="' + gSiteImageDir + cVolUp + '" width="14" height="20" alt="Volume-Up" border="0" vspace="0" hspace="0"></a></td>';
		volumedata += '    <td width="3"><img src="' + imageDir + cVolBoxRight + '" width="3" height="20" vspace="0" hspace="0" border="0"></td>';
		volumedata += '  </tr>';
		volumedata += '  <tr> ';
		volumedata += '    <td colspan="7"><img src="' + imageDir + cVolBoxBot + '" width="163" height="3" vspace="0" hspace="0" border="0"></td>';
		volumedata += '  </tr></table>';
	}

	return volumedata;
}


function DrawMeter(bVertical, imageDir)
{
	if (!HasEmbeddedPlayer())
		return;

	if (bVertical == null)
		bVertical = false;

	if (parent.player == "WMP")
		HasWMP7();	
		
	document.write(GetMeterCode(bVertical, imageDir));	
}

//note that this only updates CHANGED cells, it doesn't automatically refresh the entire meter
function UpdateMeterView(volume, bIsBuffering)
{
	if (!HasEmbeddedPlayer())
		return;
		
	var i;
	var newOffCells = Math.floor(Math.abs((volume - gMinVol)/(gMaxVol - gMinVol)*cCells));
	newOffCells = cCells - newOffCells;

	var nCells = newOffCells - gOffCells;
	var cOnCell;
	var doc = document;

	if (bIsBuffering == true)
		cOnCell = cBufferColor;
	else
		cOnCell = cOnColor;	

	if (0 <= newOffCells && newOffCells <= cCells) {
		if (nCells > 0) {		// convert more cells to off color
			for (i = gOffCells; i < newOffCells; i++) {
				if (doc.images["cell"+i])
					doc.images["cell"+i].src = gSiteImageDir + cOffColor;
				else
					alert("Lost cells for cell"+i);
			}
		}
		else if (nCells < 0) {	// convert more cells to on color
			for (i = newOffCells; i < gOffCells; i++) {
				if (doc.images["cell"+i])
					doc.images["cell"+i].src = gSiteImageDir + cOnCell;
				else
					alert("Lost cells for cell"+i);
			}
		}

		gOffCells = newOffCells;
	}
}


function UpdateMeter(volume)
{
	UpdateMeterView(volume, false);
}


function StartBuffering()
{
	PlayState = 2;
	gProgress = gMinVol;
	UpdateMeter(0, true);
	ShowBuffering();
	//UpdateMeter(0, true);
}


function ShowBuffering()
{
	if (!document.PlayerControl)
		return;
		
	var bStillBuffering = true;
	
	if (parent.player == "WMP") {
		if (HasWMP7()) {
			if (document.PlayerControl.playState != 3) {
				if (gProgress <= gMinVol)
					gProgressIncr = Math.abs(gProgressIncr);
				else if (gProgress >= gMaxVol)
					gProgressIncr = -(gProgressIncr);
			}
			else {
				bStillBuffering = false;
				gProgress = gMinVol;
			}
		}
		else {
			var ps = (navigator.appName == "Netscape") ? document.PlayerControl.GetPlayState() : document.PlayerControl.PlayState;

			if (3 <= ps && ps <= 7) {
				if (gProgress == -1200)
					gProgressIncr = +100;
				else if (gProgress == 0)
					gProgressIncr = -100;
			}
			else {
				bStillBuffering = false;
				gProgress = -1200;
			}
		}
	}
	else if (parent.player == "G2") {
		if (document.PlayerControl.GetPlayState() != 3) {
			if (gProgress >= 100)
				gProgressIncr = -8;
			else if (gProgress <= 0)
				gProgressIncr = +8;
		}
		else {
			bStillBuffering = false;
			gProgress = 0;
		}
	}
	else {
		alert("No WMP or RealPlayer available");
		return;
	}

	if (bStillBuffering) {
		gProgress += gProgressIncr;

		UpdateMeterView(gProgress, true);
		
		gBufferingTimer = window.setTimeout('ShowBuffering();', 150);
			
		PlayState = 2;
		for (var i = 0; i < BufferCallbacks.length; i++)
			eval('' + BufferCallbacks[i] + '(' + -1 + ');');		
	}
	else {
		if (gBufferingTimer != null) {
			window.clearTimeout(gBufferingTimer);
			gBufferingTimer = null;
		}

		UpdateMeter(0);
		UpdateMeter(GetVolume());
		HideBufferingImage();				
		PlayState = 3;
		for (var i = 0; i < PlayStartCallbacks.length; i++)
			eval(PlayStartCallbacks[i]);	
	}
}


function PlayerLookUpError(errId)
{
	window.open('http://'+ gHostServer + "/cgi-bin/help.cgi?id=" + errId);
}


// Event handlers
function HandleError(msg, url, line)
{
	if (navigator.appName == "Netscape") {
		if (msg.indexOf("GetVersionInfo") != -1) { 
			gVersion = "0.0.0.0";
			return true;
		}
	}
	else {
		if (url.indexOf("volume.html") != -1) {
			if (msg.indexOf("Object doesn't support this property or method") != -1) {
				gVersion = "0.0.0.0";
				return true;
			}
			else if (msg.indexOf("Unspecified error") != -1) {
				gVersion = "0.0.0.0";	// here when not quite installed yet?
				return true;
			}
		}
	}
	alert(msg);

	return false;
}


function PlayerOnError(errId, errCode, msg)
{
	if (!bHandlingError && bShowMoreErrors)	{
		bHandlingError = true;//'MessageBox to death' avoidance
		HideBufferingImage();

		if (errId == 110 || errId == 109 || errId == 105 || errId == 208) {
			PlayState = -1;
			bShowMoreErrors = false;
			//try to go thru clerk again
			if (!InRetry)
			{
				Retry();
				return;
			}
		}

		if (!GetCookieEx('box_mc', 'LOK') && (errId == 110 || errId == 109 || errId == 105 || errId == 208)) {
			bShowMoreErrors = false;
			document.PlayerControl.Stop();//stop retrying		
			if (confirm("Could not listen to stream (Error Code:" + errCode+")\n\n" + msg + "\n\nPress OK for more information.")) {
				KillWarning();
				var URL = 'http://'+ gHostServer + '/mini/cantplay365.html';
				if (top.site)
					URL += 	"?site=" + top.site;
				top.location = URL;

			}
		}
		else if (errId == 215) {
			var url = 'http://'+ gHostServer + "/mini/login.live?PMonly=1&error=3";

			KillWarning();				//kills the "Do you want to leave this page..." warning
  			top.location = url;
		}
		else if (errId == 104) {
			//do nothing here. A 104 error is generated as a side-effect by a server-full operation
			// which we want handled silently, so don't report it. It is a generic xa internal error
			//so we can't do anything about it anyway.
		}
		else {
			if (confirm("Error Code:" + errCode + "\n\n" +msg +  "\n\nPress OK for more information."))
				PlayerLookUpError(errCode);
		}

		bHandlingError = false;		
	}
}


function PlayerOnStop()
{
	gShowBuffering = 0;
	PlayState = 0;
	for (var i = 0; i < PlayStopCallbacks.length; i++)
		eval(PlayStopCallbacks[i]);	
}


function PlayerOnDrop()
{
	gShowBuffering = 0;
	DropCount = DropCount + 1;
	ShowConnectingImage();
}


function PlayerOnStartPlaying()
{
	gShowBuffering = 0;

	PlayState = 3;
	RetryCount = 0;
	InRetry = false;

	if (bEverListened == false) {
	 	bEverListened = true;
	   	RememberItEx('box_mc', 'LOK', 1);	
	}

	HideBufferingImage();
	
	for (var i = 0; i < PlayStartCallbacks.length;i++)
		eval(PlayStartCallbacks[i]);	
	
	PlayerOnVolumeChange();		//gets the vol from the cookie and sets it
		
	UpdateMeterView(100, true);
	UpdateMeter(0);//force a complete redraw
	UpdateMeter(GetVolume());
}


function PlayerOnBuffer(bufferpercent)
{
	if (!gShowBuffering)
		return;
		
	PlayState = 2;

	if (bufferpercent == 0)
		ShowWaitingImage();
	else
		ShowBufferingImage();

	for (var i = 0; i < BufferCallbacks.length; i++)
		eval(''+BufferCallbacks[i]+'('+bufferpercent+');');	

	UpdateMeterView(bufferpercent, true);
}


function PlayerOnStreamFormat(format)
{
	if (format == 0)
		gStreamFormat = 'MP3';
	else if (format == 1)
		gStreamFormat = 'MP3PRO';
	else if (format == 2)
		gStreamHiFi = 'HI_FI';
	else if (format == 3)
		gStreamHiFi = 'LO_FI';

	DrawPlayerIndicator()
}


function DrawPlayerIndicator()
{
	var img = "";

	if (gStreamFormat == 'MP3')
		img = cMp3ProOff;
	else
		img = cMp3ProOn;

	if (img != "" && parent.frames.Live365PlayerLogo && parent.frames.Live365PlayerLogo.mp3pro_winkie)
		parent.frames.Live365PlayerLogo.mp3pro_winkie.src = gSiteImageDir + img;
}


function PlayerOnConnectionLost()
{
	if (RetryCount > 0) // we never connected so ignore lost connection messages
		return ;

	PlayState = 0;
	
	if (!bHandlingError) {
		bHandlingError = true;

		if (confirm("Connection was lost - Retry ?")) {
			Retry();
			return ;
		}

		bHandlingError = false;
	}
}


function PlayerOnVolumeChange()
{
	if (PreviousVol == -1) {
		var vol = parseInt(GetCookieVolume());
		PreviousVol = GetVolume();
		SetVolume(vol);
		window.onUnload = OnPlayerUnload;
	}
}


function OnPlayerUnload()
{
	gShowBuffering = 0;
	PlayState = 0;
	if (navigator.appName != "Netscape") {
		if (document.PlayerControl) {
			if (PreviousVol != -1)
				SetVolume(PreviousVol, true);	
		}
	}
}


function IsModernNS()
{
	if (navigator.appName == "Netscape" && (navigator.userAgent.indexOf("Netscape6") != -1 || navigator.userAgent.indexOf("Netscape/7.0") != -1))
		return true;
	else
		return false;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// fixDelimiter -- make sure we are comma delimited -- used to munge Player365
//   version numbers between "1.0.0.6" and "1,0,0,6", which is what IE accepts.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function fixDelimiter(playerVer)
{
	return(playerVer.replace(/[.]/g,","));
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// "sniffer lite" -- functionality moved from sniffer.js
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//POC data structures -- moved here from sniffer.js
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var POCInfo = {
	MP3:
	{
		ID:"0", 
		PLAYERCODE:"MP3", 
		DESC:"MP3 Player", 
		bEmbedded:false,
		downloadURL: null,
  		bImageCode:" ",
		bDownloadURL: " ",
		bShowIfNotInstalled: true,
		bShowIfNotSelected: true
	},
	G2:
	{
		ID:"1", 
		PLAYERCODE:"G2", 
		DESC:"Real Player <span class='copyright'>(recommended media player)</span>", 
		bEmbedded:true,
		downloadURL:"http://forms.real.com/real/realone/realone.html?type=eva",
		bDownloadURL: gRealOneDownloadURL,
		bShowIfNotInstalled: true,
		bShowIfNotSelected: true,
		bImageCode: '<img src='+gRealOneGraphic+' border="0" alt="Download/Select the RealOne Player">'
	},
	WMP:
	{
		ID:"2", 
		PLAYERCODE:"WMP", 
		DESC:"Windows Media Player", 
		bEmbedded:true,
		downloadURL: null,
		bImageCode:" ",
    	bDownloadURL: " ",
		bShowIfNotInstalled: false,
		bShowIfNotSelected: false
	},
	'365':
	{
		ID:"3", 
		PLAYERCODE:"365", 
		DESC:"Player365", 
		bEmbedded:true,
		downloadURL: null,
		bDownloadURL: gPlayer365DownloadURL,
		bShowIfNotInstalled: true,
		bShowIfNotSelected: true,
		bImageCode: '<img src='+gPlayer365Graphic+' border="0" alt="Download/Select Player365-Free">'
	},
	HOST:
	{
		ID:"6", 
		PLAYERCODE:"HOST", 
		DESC:"Hosted", 
		bEmbedded:false,
		downloadURL: null,
  		bImageCode:" ",
  		bDownloadURL: " ",
		bShowIfNotInstalled: false,
		bShowIfNotSelected: false
	}
};


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// NewP365VersionAvailable -- compares cookie version with latest version from
//   version.js
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function NewP365VersionAvailable()
{
    // no need to check for newbies
    if (!GetCookieEx('player_mc', 'ver') && !GetCookieEx('player_mc', 'verpro'))
        return false;
        
	return VersionLessThan(GetP365VersionFromCookie(), GetP365AvailableVersion());
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GetPOC -- returns the value of the POC subfield, located within the 'box_mc'
//   meta-cookie.  This function was moved from sniffer.js, and supports JS function 
//   calls output from mini.cgi.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function GetPOC(bSniff)
{
	if (GetPOC.arguments.length < 1)
		bSniff = true;
	
	var HostApp = GetHostApp();

	if (HostApp != null) {
		if (HostApp.HasPlayer) {
			// SetCookieEx('user_mc', "VPH", HostApp.HID);
			return 6;
		}
	}

	var poc  = GetCookieEx('box_mc', "POC");

	if (navigator.platform != "Win32")  // disable check on non-Windows boxes for now
		return 0;

	return poc; 
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GetPOCName -- returns the name of a specified player from the POCInfo hash
//   defined above.  This function was moved from sniffer.js, and supports JS 
//   function calls output from mini.cgi.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function GetPOCName(poc)
{
	for (var v in POCInfo) {	
		if (parseInt(POCInfo[v].ID) == poc)
			return POCInfo[v].PLAYERCODE;
	}

	return "100";  // not sure why this defaults to 100...?
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GetP365VersionFromCookie -- returns the user's *as-installed* version number of
//   Player365 from either the 'ver' or 'verpro' subfield in the 'player_mc' meta cookie.
//   Automatically gets the appropriate version based on value gMP3Pro.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function GetP365VersionFromCookie()
{
	var cookieName = 'ver';
	var cookieVer; 

    if (gMP3Pro)
		cookieName = 'verpro';

	if (cookieVer = GetCookieEx('player_mc', cookieName))
		return(cookieVer);		
	else
		return('');
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GetP365AvailableVersion -- returns the latest version number of Player365, 
//   automatically switching between P365 and P365VIP based on gMP3Pro
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function GetP365AvailableVersion()
{
	return(fixDelimiter((gMP3Pro)? g365CurVIPVer : g365CurVer));
}


function HasPlayer(somePlayer)
{
	return true; // this used to live in sniffer.js and be based on VBScript sniffing.
}


//The version strings are like 1,2,3,4. If the third digit is 1 or 2, this is for
//the MP3Pro player. If 0, it is the standard player. So ignore the third number.
//"Is the target version less than the source?"
function VersionLessThan(target, source)
{
	var Tararr = target.split(/[.,]/g);
	var Srcarr = source.split(/[.,]/g);
	var imax = Math.min(Tararr.length, Srcarr.length);
	var i = 0;
	
	for (i = 0; i < imax; i++) {
		if (i == 2)
			continue;			//skip the MP3Pro identifier (the 3rd number in the 4 value Version string.)

		if (parseInt(Tararr[i]) < parseInt(Srcarr[i]))
			return true;
	}

	return false;
}















