<!-- 
// (c) 2000-2003 Live365.com.  All rights reserved.


var gHostServer = "www.live365.com";
//gHostServer = "fc02.corp.nanocosm.com";





if (typeof(RememberItEx) != "function")
	document.write('<scr'+'ipt language="JavaScript" src="http://' + gHostServer + '/scripts/cookiemonster.js"></scr' + 'ipt>');

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

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

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

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

	

	
var gNewG2 = false;
var gWMP   = false;
var g365 = false;
var g365VIPInstalled = false;
var g365UptoDate = false;

//var g365InstVer = "0,0,0,0";			//the actual version installed, picked up in the VBScript below
var gUserVer =  "0,0,0,0";				//what the cookies say is installed 
var gValidMozillaInstall=0;				//if 0, NS's install was successful
//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";

//var bVBScriptEnabled = false; //sniff for vbscript

var bActiveXEnabled = false; // sniff for ActiveX
var bWMP7 = false;			// has WMP 7.x or better, including 9.x
var bWMP6 = false;			// has WMP 6.x or better
//var gMP3Pro = false;		//if true, user is authorized to listen in MP3Pro format

var gPLRStream = 'N';


var poc  = GetCookieEx('box_mc', "POC");
var beta = GetCookieEx('box_mc', "beta");
var gSafeToUseMP3Pro = (beta && beta.indexOf("mp3PRO") != -1 && poc && poc == 3);

//alert("MS: sniffer.js : beta cookie="+beta+", gSafeToUseMP3Pro="+gSafeToUseMP3Pro);

//special Garrett switch....you know why...
var gEnableMP3ProForPLR = false;

//gEnable...should always be false if SafeToUse is false

if (!gSafeToUseMP3Pro)
	gEnableMP3ProForPLR = false;

if (gEnableMP3ProForPLR)
 	gPLRStream = GetCookie("plr");



function IsModernNS()
{

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

//can't use NS6 due to incredible suckiness

function IsNS6()
{
	if (navigator.userAgent.indexOf("Netscape6")==-1)
		return false;
	else
		return true;
}
	
function FixCookieDate(date) 
{
	var base = new Date(0);
	var skew = base.getTime(); // dawn of (Unix) time - should be 0

	if (skew > 0)  // Except on the Mac - ahead of its time
		date.setTime(date.getTime() - skew);

	return true;
}


function GetCookie(name) 
{
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;

	while (i < clen) {
		var j = i + alen;

		if (document.cookie.substring(i, j) == arg) {
			var endstr = document.cookie.indexOf (";", j);

			if (endstr == -1)
				endstr = document.cookie.length;

			return unescape(document.cookie.substring(j, endstr));
		}

		i = document.cookie.indexOf(" ", i) + 1;

		if (i == 0) 
			break; 
	}

	return null;
}


function ParseHost(host)
{
	var tmpStr;
	var lastPeriod;
	var secondPeriod;
	
	lastPeriod = host.lastIndexOf("."); 
    tmpstr = host.slice(0,lastPeriod);
	secondPeriod = tmpstr.lastIndexOf(".");
	domainName = host.slice(secondPeriod+1,lastPeriod);
	domainName = "." + domainName + ".com";
	return (domainName);
}

function SetPersistantCookie_old(name, val)
{
	var exp = new Date(); 
	FixCookieDate(exp);
	exp.setTime(exp.getTime() + (5*365*24*60*60*1000));
	document.cookie = name + "=" + val +
			"; expires=" + exp.toGMTString() +
			"; path=/" +
			"; domain=" + ParseHost(self.location.host);
}

function HasDOM()
{
	if (IsModernNS() )
		return true;
	if (navigator.appName != "Netscape")
		return true;
	if (navigator.userAgent.indexOf("Opera") != -1)
	{
		return true;
	}
	return false;
}

function GetPageHost()
{
	return GetCookie('PH');
}

function SetPageHost(val)
{
	return RememberIt('PH', val);
}


//The argument, bSniff, seems to be only used for the Mac, and is set to false.
//Otherwise it is left blank and then defaults to true for Windows checks


//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]))
		{
//alert("MS: sniffer.js - VersionLessThan target (client version)="+target+", IS LESS  source (new version)="+source);
			return true;
		}
	}

//alert("MS: sniffer.js - VersionLessThan target (client version)="+target+", IS NOT LESS than source (new version)="+source);

	return false;
}

//Check365Version: Sees if we need to upgrade or not. 
//		true - we DON'T need or WANT to upgrade 
//	    false - we DO need to upgrade

function Check365Version()
{
	var curVersion;
	var cookie;
	var rvalue;

	g365InstVer = g365InstVer.replace(/[.]/g,",");//make sure we are comma delimited

	if (gMP3Pro)
	{
		curVersion=g365CurVIPVer;
		cookie="verpro";
	}
	else
	{
		curVersion=g365CurVer;
		cookie="ver";
	}

//alert("MS: sniffer.js-Check365Version: gMP3Pro="+gMP3Pro+", curVersion="+curVersion+", g365InstVer="+g365InstVer);

	//First see if we're switching to another player. ie, from basic to the VIP
	//If so, return a false, since we probably need to upgrade
	
	var Tararr = curVersion.split(/[.,]/g);
    var Srcarr = g365InstVer.split(/[.,]/g);

	if (Tararr[2] != Srcarr[2])
	{
		//for debugging to try and find out why some people constantly get upgrade requests.
		
		//alert("Checking player versions.\nInstalled Version is "+g365InstVer+", new version is "+curVersion);
		return false;
	}

	//"is the currently installed version less than the version that is available on the
	//the server?" (ie, a new version has been posted to the site)

	if (VersionLessThan(g365InstVer,curVersion))
	{
		//helps syncronize the cookie version string with the embedded version in the
		//object. Needed in case the user deletes the object, in which case g365InstVer above
		//would be 0, for example. 
		
		gUserVer = GetCookieEx("player_mc",cookie);

		//for backwards compat.
		
		if(gUserVer == null){
			gUserVer = GetCookie(cookie);		
		}
		
		//if cookie hasn't been created, ie, if we actually haven't installed a version yet...

		if (gUserVer == null)
			gUserVer = g365InstVer;

		if (VersionLessThan(gUserVer,curVersion))
		{
			//for debugging to try and find out why some people constantly get upgrade requests.

		    alert("Checking player versions. The new version is "+curVersion+", your installed version is "+gUserVer);
			return false;        						//new version is available 
		}
	}

	return true;
}

/*****************************************************************************
 * MozillaInstall365   : performs the actual Mozilla installation. Somewhat  *
 *      different than the NSInstallScript that calls sniffer::NSCheck365.   *
 *      Under Mozilla, that line breaks completely and NSCheck365 is never   *
 ***************************************************************************** 
 * NOTE : Mozilla's XPIinstall has NO uninstall mechanism. For this player   *
 *      you uninstall by going to the NetscapeX directory ("Netscape7"),     *
 *      go to the Plugins directory and remove the np_mplayer.dll and its    *
 *      associated .xpt file. Then restart Netscape.                         *
 *****************************************************************************/
function MozillaInstall365()
{

	var rvalue=0;

    if (navigator.userAgent.indexOf("Opera") != -1)
    {
        return false;
    }

    if (!IsModernNS() )
    {
//        alert("SniffWiz : Old Netscape EXITING..");
        return false;
    }

	//Note that CompareVersion() goes to Mozilla's own internal registry NOT the Windows system
	//registry, EVEN THOUGH you will find entries in Windows with the identical key under MozillaPlugins. Those
	//are crafted by the installer script for 3rd party software to find them.        

    comp=InstallTrigger.compareVersion('@live365.com/playzilla,version=1.0.0.7',g365CurMozillaVer);

	var version=InstallTrigger.getVersion('@live365.com/playzilla,version=1.0');
   

    if ((comp==0)&&( NSIsInstalled("365")))
    {
 //     alert("Playzilla version is up to date");
        g365InstVer=g365CurMozillaVer;

		//insure the cookies are fresh. 

		RememberItEx("player_mc","ver", g365InstVer);
		return true;
    }
    else 
	{
		//if comp<0 a new version is ready, or if comp==0 but we're down here, someone
		//uninstalled the plugin.dll and its xpt file (for testing purposes no doubt), so reinstall.

		if (comp<=0)
     	{
        	alert("A new version of Player365 for Netscape is ready and will now install.");

        	var xpipackage={"Play365 for Mozilla":"http://"+gHostServer+"/players/play365.xpi"};

        	
			rvalue=InstallTrigger.install(xpipackage,MozillaInstallFinishedCallback);

			//in theory if the user cancels, gValildMozillaInstall should be -210, but .install returns before 
			//the status callback can be fully processed, so I cannot accurately tell if the install was successful
			//or not as .installs() return code is unreliable. So toss in this alert to put in a phoney delay to let
			//the callback catch up.

			var now = new Date();
        	var exitTime = now.getTime() + 5000;			//pause for 5 seconds

			//Ugh! Busywait, now.getTime="+now.getTime()+", exitTime="+exitTime);

			//DOESN'T WORK! This ties up all threads from this object.
/*
			while(gValidMozillaInstall == 0)
			{
				now = new Date();

				if (now.getTime() > exitTime)
                 	break;	
			};
*/
			
			alert("Finalizing Netscape Installation");

			if (gValidMozillaInstall!=0)
			{
				return false;
			}
			else
			{
    			return rvalue;	
			}
		}
    	else
    	{
        	alert("Installed Player365 is newer then the download package");
    	}
	}
}

/*****************************************************************************
 * MozillaInstallFinishedCallback : called when the Mozilla install is done  *
 *****************************************************************************/
function MozillaInstallFinishedCallback(url,status)
{
	gValidMozillaInstall=0;


    if (status == 0)
    {
        g365InstVer=g365CurMozillaVer;
		RememberItEx("player_mc","ver", g365InstVer);
		gValidMozillaInstall=0;
    }
	else if (status == -210)
	{
		gValidMozillaInstall=status;
	}
    else 
    {
        alert("Player365 installation for Player365 not successful. Try again. Status="+status);
		gValidMozillaInstall=status;
    }
}

/*****************************************************************************
 * NSCheck365 : A poorly named function, this performs the actual Netscape4  *
 *		download. Called from Sniffwiz.js.                                   *
 *****************************************************************************/
function NSCheck365()
{
	if (navigator.userAgent.indexOf("Opera") != -1)
	{
		return ;
	}
   
	 if (IsModernNS() )
    {
  		return;
  	}

	if (g365UptoDate == true)
		return;

	if ( navigator.javaEnabled() ) 
    {
	   var trigger = netscape.softupdate.Trigger;
	   
		if ( trigger.UpdateEnabled() ) 
		{

	      if (navigator.platform == "Win32") 
		  { 
	         vi = new netscape.softupdate.VersionInfo(1, 0, 0, 7);
		 
			 if (NSIsInstalled("365"))
		     {
	         	if (trigger.ConditionalSoftwareUpdate(
	            		"http://"+gHostServer+"/players/play365.jar",
	             		"plugins/Live365.com/Live365Player",
	              		vi, trigger.DEFAULT_MODE) == false)
			    g365UptoDate = true;
			    return true;
			}
			else
			{
		   		if (navigator.appVersion.substring(0,3) >= "4.5")//dont' you just love netscape
		   	       trigger.StartSoftwareUpdate ("http://"+gHostServer+"/players/play365.jar");
		        else
		           trigger.StartSoftwareUpdate ("http://"+gHostServer+"/players/play365.jar", trigger.DEFAULT_MODE );
		   		return true;	
			}
	      }

	      else
		{ 
			alert("This plug-in only runs on Windows Systems.")
			return false;
		}
	   }

	   else
		{
		      alert("Enable SmartUpdate before running this script.");
		      return false;
		}
	   }

	else 
	      alert("Enable Java before running this script.");
}


function SoundCheck()
{
	var i;

//	if (navigator.appVersion.indexOf("95") != -1)
//		return 0;						// disable on Win95 for now

	if (navigator.platform != "Win32")	// disable check on Mac for now
	{
		if (!((navigator.appName == "Netscape")&&(client.isMac)))
			return 0;
	}

	
	if (navigator.appName == "Netscape") {
		if (navigator.plugins) {
			navigator.plugins.refresh();

			var s = "Netscape plug-ins include:\n";

			for (i = 0; i < navigator.plugins.length; i++)
				s += navigator.plugins[i].name + "\n";

			gNewG2 = NSIsInstalled("G2");
//			gWMP   = NSIsInstalled("WMP");
			g365 = NSIsInstalled("365");

		
			//return 3;//netscape can now use Live365
		}
	}
	else {
		bActiveXEnabled = CheckActiveX();
		gNewG2 = IsInstalled("G2");
		gWMP   = IsInstalled("WMP");
		g365   = IsInstalled("365");
		g365VIPInstalled  = IsInstalled("365VIP");
		
		//if we are an AFL station, and the standard player is installed BUT the
		//pro-player is not installed, reset g365 to false which tells the system
		//to open up the Download panel.

		if ((gMP3Pro==true) && (g365VIPInstalled==false))
		{
			g365=false;			
		}

		//HACK: IsIsntalled() sets the g365InstVer value. This code prevents a possible
		//confict in the case that this routine is ever called, VIP is installed yet,
		//is not turned on. Without this code, g365InstVer will be the VIP version, while
		//the user has the standard player selected. That might cause some upgrading issues.

		if ((gMP3Pro==false) && (g365VIPInstalled==true))
		{
			IsInstalled("365");				//ensures g365InstVer in the VBScript above is reset back to the standard player.
		}
	}

// 	alert("gNewG2 is " + gNewG2 + "\ngWMP is " + gWMP);
	if (g365 == true)
		return 3;
	if (gNewG2 == true)
		return 1;
	else if (gWMP == true && bWMP7 == true)
		return 2;
	else // NotSet
		return 4;
}

function NSIsInstalled(which)
{
	var i;
	var plugInName = "";

	if (which == "G2")
	{
		if (client.isMac)
			plugInName = "RealPlayer(tm) G2 LiveConnect-Enabled Plug-in (Mac)";
		else
			plugInName = "RealPlayer(tm) G2 LiveConnect-Enabled Plug-In";
			//"RealPlayer(tm) G2 LiveConnect-Enabled Plug-In (32-bit) ";//dont even think about tiding this 			
	}               
	else if (which == "WMP")
		plugInName = "Windows Media Player Plug-in";
		//"Microsoft® Windows Media Services"

	else if (which == "365")
	{
		plugInName = "Live365.com Plug-in Player";		
	}
	else
		return false;

	//plugins is a hash which will return a non-null if plugInName exists

	var OurPlugin = navigator.plugins[plugInName];

	if (OurPlugin)
	{
		if (which == "365")
		{
			//if this is not Opera, or NS6+, then use the old system of installing plugins
 	
			if (navigator.userAgent.indexOf("Opera") == -1 && !IsModernNS() )
			{
				var nsver = netscape.softupdate.Trigger.GetVersionInfo("plugins/Live365.com/Live365Player");
				g365InstVer = String(nsver);
			}
		}

		return true;
	}

	for (i = 0; i < navigator.plugins.length; i++) 
	{
		if (navigator.plugins[i].name.indexOf(plugInName) != -1) 
		{
			if (which == "WMP")
				return true;
				
			if (which == "365")
			{
				return true;
			}
									// RealPlayer of some sort
			if (navigator.platform == "Win32") {
				filename = navigator.plugins[i].filename.toLowerCase();
									// can't distinguish oldG2 from newG2
				
				//alert('navigator.plugins['+i+'].name is ' + navigator.plugins[i].name);

				if (navigator.plugins[i].name.indexOf('G2') != -1)
					return true;
			} 
			else {					// Mac hell
									// can't distinguish oldG2 from newG2
				if (navigator.plugins[i].filename.indexOf('RealPlayerG2 PlugIn') != -1)
					return true;
			}
		}
  	}

  	return false;
}


function TestActiveXObject(progID)
{
	if (bVBScriptEnabled)
		return VBTestObject(progID);

	return false;
}

function IsEmbedded(player)
{
	for(var poc in POCInfo)
	{
		if (player == poc)
			return POCInfo[player].bEmbedded;
	}

	return false;
}

function CanEmbed()
{
	if (navigator.userAgent.indexOf("Opera") != -1)
	{
		return false;
	}
	else if (navigator.appName == "Netscape")
	{
		return navigator.javaEnabled();
	}
	else if (client.isMac)
	{
		return false;
	}
	else
	{
		if (bVBScriptEnabled)
			return CheckActiveX();
		return false;
	}
}


function HasWMP7()
{
	return HasWMP(7);
}


function HasWMP(ver)
{
	return (bVBScriptEnabled && vbHasWMP(ver));
}


if (navigator.appName != "Netscape") {
	var s = '';

	s += '<SCR'+'IPT LANGUAGE="VBScript"> \n';

	// THIS IS NOW DONE IN vb_sniff_lite.js WHICH IS INCLUDED AT THE TOP OF THIS FILE
	//s += 'If ScriptEngineMajorVersion >= 2 Then \n';
	//s += '  bVBScriptEnabled = true \n';
	//s += 'End If \n';

	s += 'Function IsInstalled(which) \n';
	s += '	on error resume next \n';
	s += '	IsInstalled = false \n';
	s += '	If (which = "G2") Then \n';
	s += '		Set vObject = CreateObject("rmocx.RealPlayer G2 Control.1") \n';
	s += '		IsInstalled = IsObject(vObject) \n';

	s += '		if (IsInstalled = true) Then \n';
	s += '			IsInstalled = Not VersionLessThan(vObject.GetVersionInfo(), "6.0.7")\n';
	s += '		End If \n';

	s += '	ElseIf (which = "WMP") Then \n';
	s += '		bWMP6 = IsObject(CreateObject("MediaPlayer.MediaPlayer.1")) \n';
	s += '		bWMP7 = IsObject(CreateObject("WMPlayer.OCX")) \n';
	s += '		IsInstalled = (bWMP6 or bWMP7) \n';
    s += '    ElseIf (which = "365") Then \n';
    s += '          Set vObject = CreateObject("LivePlayer.Live365Player")\n';
    s += '          IsInstalled = IsObject(vObject) \n';
    s += '          if (IsInstalled = true) Then \n';
    s += '              g365InstVer = vObject.GetVersion() \n';
    s += '          End If \n';
    s += '          Set vObject = Nothing \n';
    s += '    ElseIf (which = "365VIP") Then \n';
    s += '          Set vObject = CreateObject("LivePlayer.Live365PlayerVIP")\n';
    s += '          IsInstalled = IsObject(vObject) \n';
    s += '          if (IsInstalled = true) Then \n';
    s += '              g365InstVer = vObject.GetVersion() \n';
    s += '          End If \n';
    s += '          Set vObject = Nothing \n';
    s += '    End If \n';	
	s += 'End Function \n';

	s += 'Function CheckActiveX()\n';
	s += '	On Error Resume Next\n';
	s += '	if (CheckActiveXControls())Then\n';
	s += '		CheckActiveX = CheckActiveXScripting()\n';
	s += '	else\n';
	s += '		CheckActiveX = false\n';
	s += '	end if\n';
	s += 'End Function\n';

	s += 'Function CheckActiveXControls()\n';
	s += '	On Error Resume Next\n';
	s += '	dim vObj \n';
	s += '	Set vObj = CreateObject("Shell.Explorer")\n';
	s += '	if (IsObject(vObj))Then\n';
	s += '		CheckActiveXControls = true\n';
	s += '	else\n';
	s += '		CheckActiveXControls = false\n';
	s += '	end if\n';
	s += 'End Function\n';

	s += 'Function CheckActiveXScripting()\n';
	s += '	On Error Resume Next\n';
	s += '	dim vObj \n';
	s += '	Set vObj = CreateObject("Shell.Explorer")\n';
	s += '	if (IsObject(vObj))Then\n';
	s += '		vObj.Top\n';
	s += '		CheckActiveXScripting = true\n';
	s += '	else\n';
	s += '		CheckActiveXScripting = false\n';
	s += '	end if\n';
	s += 'End Function\n';

	s += 'Function VBTestObject(progID)\n';
	s += '	On Error Resume Next\n';
	s += '	dim bFound\n';
	s += '	bFound = false\n';
	s += '	bFound = IsObject(CreateObject(progID)) \n';
	s += '	VBTestObject = bFound\n';
	s += 'End Function\n';

	s += 'Function vbHasWMP(min_ver)\n';
	s += '	On Error Resume Next\n';
	s += '	bWMP7 = IsObject(CreateObject("WMPlayer.OCX")) \n';  // WMP v7.x->v9.x
	s += '	bWMP6 = IsObject(CreateObject("MediaPlayer.MediaPlayer.1")) \n'; // WMP v6.x

	s += '	If (min_ver >= 7) Then \n';
	s += '		vbHasWMP = bWMP7 \n';
	s += '	ElseIf (min_ver = 6) Then \n';
	s += '		vbHasWMP = bWMP6 \n';
	s += '	Else \n';
	s += '		vbHasWMP = false \n';
	s += '	End If \n';
	s += 'End Function \n';

	s += '</SCR'+'IPT> \n';

	document.write(s);
}

// -->
