function GetBrowserVersion()
{
	if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
	{ 
		var ffversion=new Number(RegExp.$1); // capture x.x portion and store as a number
		if (ffversion >= 3)
			return ("You're using Firefox 3.x or above");
		else if (ffversion>=2)
			return ("You're using Firefox 2.x");
		else if (ffversion>=1)
			return ("You're using Firefox 1.x");
	}
	else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) //test for MSIE x.x;
	{ 
		var ieversion=new Number(RegExp.$1); // capture x.x portion and store as a number
		if (ieversion>=8)
			return ("You're using Internet Explorer 8 or above");
		else if (ieversion>=7)
			return ("You're using Internet Explorer 7.x");
		else if (ieversion>=6)
			return ("You're using Internet Explorer 6.x");
		else if (ieversion>=5)
			 return ("You're using Internet Explorer 5.x");
	}

	// Note: userAgent in Opera9.24 WinXP returns: Opera/9.24 (Windows NT 5.1; U; en)
	//         userAgent in Opera 8.5 (identified as IE) returns: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 8.50 [en]
	//         userAgent in Opera 8.5 (identified as Opera) returns: Opera/8.50 (Windows NT 5.1; U) [en]
	else if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);
	{ 
		var oprversion=new Number(RegExp.$1); // capture x.x portion and store as a number
		if (oprversion>=10)
			return ("You're using Opera 10.x or above");
		else if (oprversion>=9)
			return ("You're using Opera 9.x");
		else if (oprversion>=8)
			return ("You're using Opera 8.x");
		else if (oprversion>=7)
			return ("You're using Opera 7.x");
		else
			return ("Unrecognised version of Opera");
	}

	return ("Unrecognised browser");
}

function GetNavigatorInfo()
{
	with (document)
	{
		var str = "<b>AppCodeName:</b> "+navigator.appCodeName+"<br />";
		str += "<b>AppName:</b> "+navigator.appName+"<br />";
		str += "<b>AppVersion:</b> "+navigator.appVersion+"<br />";
		str += "<b>UserAgent:</b> "+navigator.userAgent+"<br />";
		str += "<b>Platform:</b> "+navigator.platform+"<br />";
	}

	str += "<b>Browser version:</b> "+ GetBrowserVersion(); +"<br />";

	return str;
}

function AudioDiagnostic()
{
    // Audio support
    this.audioTypeNone = 0;
    this.audioTypeLiveAudio = 1;
    this.audioTypeQuickTime = 2;
    this.audioTypeWMP = 3; // Default windows media player in IE
    this.audioTypeWMPPlugin = 4; // Windows media player plugin for Mozilla browsers (firefox)
    this.audioTypeOther = 5;
    this.audioTypeWHATWG = 6;

    this.audioPluginName = "";

    // Mimetypes to use based on detected audio support.
    // Could also try audio/mpeg mimeType.
    this.audioMimeType = ["", "audio/wav", "audio/wav", "application/x-mplayer2", "application/x-mplayer2", "audio/wav"];

    // Check browser support for audio playback
    this.EnumerateAudioSupport = function()
    {
        var agt = navigator.userAgent.toLowerCase();
        //alert(agt);

        // Are we running on windows?
        if(agt.indexOf("windows") != -1)
        {
            this.audioPlatform = "Windows";

            if(agt.indexOf("msie") != -1) 
            {
                return this.audioTypeWMP;
            }
            else if(navigator.mimeTypes)
            {
/* ### Npdsplay.dll is NOT scriptable, so it is no good to use - unless we are using IE, then it works fine ###

                 // Attempt to use Windows Media Player Plug-in Dynamic Link Library (Npdsplay dll)
		 if(navigator.mimeTypes["audio/x-ms-wma"] && navigator.mimeTypes["audio/x-ms-wma"].enabledPlugin)
                 {
                      this.audioPluginName = navigator.mimeTypes["audio/x-ms-wma"].enabledPlugin.name.toLowerCase();
  	 	      return this.audioTypeWMP;
                 } else 
  #############################################################################################################

*/
                // Is Windows Media Player plugin for Mozilla(firefox) available? - it provides the application/x-ms-wmp mimetype
		if(navigator.mimeTypes["application/x-ms-wmp"] && navigator.mimeTypes["application/x-ms-wmp"].enabledPlugin)
                {
                     // Prefer this plugin due to lower latency
                     this.audioPluginName = navigator.mimeTypes["application/x-ms-wmp"].enabledPlugin.name.toLowerCase();
                     return this.audioTypeWMPPlugin;     
                }
                // Opera support draft spec of WHATWG Web Applications specification which includes an Audio object
                else if(agt.indexOf("opera") != -1)
                {
			this.audioPluginName = "WHATWG";
			return this.audioTypeWHATWG;
                }
                else if(navigator.mimeTypes["audio/wav"] && navigator.mimeTypes["audio/wav"].enabledPlugin) 
                {
                     this.audioPluginName = navigator.mimeTypes["audio/wav"].enabledPlugin.name.toLowerCase();

                     // We are probably using QuickTime, LiveAudio or Totem.
                     if(this.audioPluginName.indexOf("quicktime") != -1)
                         return this.audioTypeQuickTime;

                     if(this.audioPluginName.indexOf("liveaudio") != -1)
                         return this.audioTypeLiveAudio;

                     return this.audioTypeOther;
                 }
            }
                      
        }
        else // (Mac/Safari & Linux/FFox) not IE
        {
            this.audioPlatform = "Windows";

                // Could also try audio/mpeg mimeType.
                if(navigator.mimeTypes["audio/wav"] && navigator.mimeTypes["audio/wav"].enabledPlugin)
		{
                     this.audioPluginName = navigator.mimeTypes["audio/wav"].enabledPlugin.name.toLowerCase();

                     return this.audioTypeOther; 
		}
        }

        return this.audioTypeNone;
    }

    this.getMimeType = function(audioSupport)
    {
        return this.audioMimeType[audioSupport];
    }

    this.loadAudioSample = function(soundId, fileName, elemName, loop)
    {
	this.audioSupport = this.EnumerateAudioSupport();

	var loopStr = (loop) ? "1" : "0";

        // Installing quicktime breaks wav playback in internet explorer because it overrides the MIME type.
	// I can make it work again by using the object tag so I can specify the plugin to use by classid
	// i.e not the QuickTime one!
	var str = "";

        if(this.audioSupport == this.audioTypeWHATWG)
	{
		var a = new Audio(fileName + '.wav');
		a.play();
		return;
	}

        if(this.audioSupport == this.audioTypeWMP)
	{

		// If QuickTime is installed, Opera picks QuitTime for audio/wav. If we use video/x-ms-wmv or audio/x-ms-wma
		// Opera picks the Microsoft Windows Media Player Plugin and plays correctly.

		//var mimeType = "video/x-ms-wmv";
		var mimeType = "audio/x-ms-wma";
		str = '<object id="'+soundId+'" height="45" width="320" name="'+soundId+'" data="'+fileName+'.wav" type="'+mimeType+'">';
		str += '<param name="src" value="'+fileName+'.wav"/>';
		str += '<param name="autoStart" value="0"/>';
		str += '<param name="Loop" value="'+loopStr+'"/>';
		str += '</object>';

//	        str = '<object id="'+soundId+'" height="45" name="'+soundId+'" classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95">';
//		str += '<param name="AutoStart" value="0"/>';
//		str += '<param name="FileName" value="'+fileName+'.wav"/>';
//		str += '<param name="Loop" value="'+loopStr+'"/>';
//		str += '</object>';
	}
	else
	{
		str = '<embed id="'+soundId+'" name="'+soundId+'" src="'+fileName+'.wav" autostart="0" loop="'+loopStr+'" height="45" width="320" type="'+this.getMimeType(this.audioSupport)+'" onload="onAudioLoad();"></embed>';
	}

	var elem = document.getElementById(elemName);
	if(elem)
	{
		elem.innerHTML = str;
	}
    }

}

function GenerateAudioReport(elemName)
{
	var navInfo = GetNavigatorInfo();

	var audioDiagnostic = new AudioDiagnostic();

	// Check for audio support
	var audioSupport = audioDiagnostic.EnumerateAudioSupport();
	var mimeType = audioDiagnostic.audioMimeType[audioSupport];
	var pluginName = audioDiagnostic.audioPluginName;
	switch(audioSupport)
	{
	    case audioDiagnostic.audioTypeNone:
		var str = "<b>No audio support was detected. You need to install an audio plugin that supports one of the following MIME types</b><br/>";
		str += "<b>audio/wav</b><br/>";
		str += "<b>application/x-mplayer2</b><br/>";
		str += "<b>application/x-ms-wmp</b><br/>";
		break;
	    case audioDiagnostic.audioTypeLiveAudio:
		var str = "<b>The LiveAudio plugin was detected and is providing your audio playback.</b><br/>";
		break;
	    case audioDiagnostic.audioTypeQuickTime:
		var str = "<b>The Apple QuickTime plugin was dected and is providing your audio playback.</b><br/>";
		str += "The QuickTime plugin suffers from very poor audio latency. This will cause audio to lag behind the Chuckie Egg game events. I would strongly recommend installing the <a href=\"http://port25.technet.com/pages/windows-media-player-firefox-plugin-download.aspx\">Windows Media Player Firefox Plugin</a> which doesn't suffer from latency issues.<br/>";
		break;
	    case audioDiagnostic.audioTypeWMP: // Default windows media player in IE
		var str = "<b>Built-in Windows Media Player Plug-in Dynamic Link Library (Npdsplay dll) is providing your audio playback.</b><br/>";
		break;
	    case audioDiagnostic.audioTypeWMPPlugin: // Windows media player plugin for Mozilla browsers (firefox)
		var str = "<b>The Windows Media Player audio plugin for Firefox (and Mozilla based browsers) is providing your audio playback.</b><br/>";
		break;
	    case audioDiagnostic.audioTypeOther:
		var str = "<b>The " + pluginName + " plugin is providing your audio playback.</b><br/>";
		break;
            case audioDiagnostic.audioTypeWHATWG:
		var str = "<b>The " + pluginName + " plugin is providing your audio playback.</b><br/>";
                break;
	    default:
		var str = "";
		break;
	};

	str += "<br/>If you still cannot hear any audio playback in Chuckie Egg, ensure your PC has a sound device and the volume is not muted or low.<br/>";

	var elem = document.getElementById(elemName);
	if(elem)
	{
		elem.innerHTML = str + "<br/><h3>Browser details</h3><br/>" + navInfo + "<br/><br/>";
	}
}

function DisplayMimeTypes(elemName)
{
	var agt = navigator.userAgent.toLowerCase();
	if(agt.indexOf("windows") != -1 && agt.indexOf("msie") != -1)
	{
		str = "";
	}
	else
	{
		var str = "<TABLE BORDER='1' CELLSPACING='0' CELLPADDING='3'>";
		for (var i = 0; i < navigator.mimeTypes.length ; i++) 
		{
  			str += "<TR VALIGN='top'><TD>" + i + "</TD>";
			str += "<TD>" + navigator.mimeTypes[i].type + "</TD>";
			str += "<TD>" + navigator.mimeTypes[i].description + "</TD>";
			str += "<TD>";	
			if (navigator.mimeTypes[i].suffixes != "")
				str += navigator.mimeTypes[i].suffixes;
			else
				str += navigator.mimeTypes[i].suffixes + " * ";
			str += "</TD><TD>";
		
			if (navigator.mimeTypes[i].enabledPlugin)
				str += navigator.mimeTypes[i].enabledPlugin.name;
			else
				str += "None";
			str += "</TD><TR>";
		}
		str += "</TABLE>";
		str = "<h3>Your browser's MIME type support</h3><p>" + str + "</p>";
	}

	var elem = document.getElementById(elemName);
	if(elem)
	{
		elem.innerHTML = str;
	}
}


function TestAudio(elemName, fileName)
{
	var audioDiagnostic = new AudioDiagnostic();
	audioDiagnostic.loadAudioSample('testsound', fileName, elemName, true);
}


