/***********************************************************************************************************/
/* Sniffer.js                                                                                              */
/* 1. This javascript is to detect browser type, version and OS, as well as if ActiveX or Flip4Mac is      */
/*    installed.                                                                                           */
/* 2. We only detect:                                                                                      */
/*      Browsers:     Internet Explorer 6+ (windows)                                                       */
/*                    Firefox 1.5+ (windows and MAC)                                                       */
/*                    Safari (MAC only for now)                                                            */
/*      OSs:          Windows XP                                                                           */
/*                    Windows VISTA                                                                        */
/*                    MAC OSX                                                                              */
/*      ActiveX:      Firefox on Windows                                                                   */
/*      Flip4Mac:     on Mac                                                                               */
/* 3. The user agent string references:                                                                    */
/*    IE: http://msdn2.microsoft.com/en-us/library/ms537503.aspx                                           */
/*    FireFox: http://www.useragentstring.com/pages/Firefox/                                               */
/*             http://www.zytrax.com/tech/web/browser_ids.htm                                              */
/*    Safari: http://developer.apple.com/internet/safari/faq.html                                          */
/*            http://www.useragentstring.com/pages/Safari/                                                 */
/*                                                                                                         */
/* Created by Chunmiao Wang, March 28th 2008                                                               */
/* Modified by: add your name, date and comment here.                                                      */
/***********************************************************************************************************/

// define Object "BrowserDetector" which detects browser type, version and OS, ActiveX or Flip4Mac
function BrowserDetector () {
		//alert("userAgent: " + navigator.userAgent);
		//alert("Platform: " + navigator.platform);

		if(navigator.userAgent)
		{
			if(navigator.userAgent.indexOf("MSIE")>0)     // IE
			{
				this.browser = "IE";
				this.version = this.detectVersion("MSIE", navigator.userAgent);
			} else if (navigator.userAgent.indexOf("Firefox")>0) // Firefox
			{
				this.browser = "Firefox";
				this.version = this.detectVersion("Firefox", navigator.userAgent);
			} else if (navigator.userAgent.indexOf("Safari")>0) // Safari
			{
				this.browser = "Safari";
				this.version=this.detectVersion("Safari", navigator.userAgent);
			}
			this.OS = this.detectOS(navigator.userAgent);
		} else if (navigator.vendor)
		{
			if (navigator.vendor.indexOf("Safari")>0) // Safari
			{
				this.browser = "Safari";
				this.version = this.detectVersion("Safari", navigator.vendor);
			}
			this.OS = this.detectOS(navigator.vendor);
		}
		
		if(!this.browser) this.browser = "An unknown browser";
		if(!this.version) this.version = "An unknown version";
		if(!this.OS) this.OS = "An unknown OS";
		this.supportsMediaPlayerPlugin = this.detectMediaPlayer();
		this.hasFlip4Mac = this.detectFlip4Mac();
		this.Flip4MacVersion = this.detectFlip4MacVersion();
	}
	
	BrowserDetector.prototype.detectVersion = detectVersion;
	BrowserDetector.prototype.detectOS = detectOS;
	BrowserDetector.prototype.detectMediaPlayer = detectMediaPlayer;
	BrowserDetector.prototype.detectFlip4Mac = detectFlip4Mac;
	BrowserDetector.prototype.detectFlip4MacVersion = detectFlip4MacVersion;
	
	function detectOS(data)
	{
		if(data && data.search(/Windows\s*NT\s*5\.1/i)>0) 
		{
			return "WindowsXP";
		} else if (data && data.search(/Windows\s*NT\s*6\.0/i)>0)
		{
			return "WindowsVista";
		} else if (data && data.search(/Windows\s*NT\s*5\.2/i)>0)  // or Windows XP x64 Edition?
		{
			return "WindowsServer2003";
		} else if (data && data.search(/Windows\s*NT\s*5\.01?/i)>0)
		{
			return "Windows2000";
		} else if (data && data.search(/PPC\s*Mac/i)>=0)
		{
			//return "MacPPC"
			platform_start = data.substring(data.search(/PPC\s*Mac/i));   // PPC Mac
			index_end = platform_start.indexOf(";");
			return index_end>0?platform_start.substring(0, index_end):platform_start;
		} else if (data && data.search(/Intel\s*Mac/i)>=0)
		{
			// return "MacIntel";
			platform_start = data.substring(data.search(/Intel\s*Mac/i));   // Intel Mac
			index_end = platform_start.indexOf(";");
			return index_end>0?platform_start.substring(0, index_end):platform_start;
		} else if (data && data.search(/Windows/i)>=0)   // other Windows
		{
			return "Windows";
		} else if (data && data.search(/Mac/i)>=0)       // other Mac
		{
			return "Mac";
		}

		return "An unknown OS";
	}

	function detectVersion(versionSearchString, data)
	{
		if(versionSearchString && data)
		{
			//alert(versionSearchString + " " + data);
			if(versionSearchString=="MSIE" && data.indexOf(versionSearchString)>0)
			{
				version_start = data.substring(data.indexOf(versionSearchString)+versionSearchString.length);
				//alert(version_start);
				if(version_start) {
					index_end = version_start.indexOf(";");
					return index_end>0? version_start.substring(0, index_end):version_start;
				}
			} else if(versionSearchString=="Firefox" && data.indexOf(versionSearchString)>0)
			{
				version_start = data.substring(data.indexOf(versionSearchString)+versionSearchString.length);
				//alert(version_start);
				if(version_start) {
					index_slash = version_start.indexOf("/");
					if(index_slash>=0) version_start = version_start.substring(index_slash+1);
					if(version_start) {
						index_space = version_start.indexOf(" ");
						return index_space>=0? version_start.substring(0, index_space):version_start;
					}
				}
			} else if (versionSearchString=="Safari")
			{
				versionSearch = "Version";    // Safari 3 and plus
				if(data.indexOf(versionSearch)>0) {
					version_start = data.substring(data.indexOf(versionSearch)+versionSearch.length);
					//alert(version_start);
					if(version_start) {
						index_slash = version_start.indexOf("/");
						index_end = version_start.indexOf(" ");
						return index_slash>=0?(index_end>0?version_start.substring(index_slash+1, index_end):version_start.substring(index_slash+1)):version_start;
					}
				} else if (data.indexOf(versionSearchString)>0)   // Safari 2 or under
				{
					version_start = data.substring(data.indexOf(versionSearchString)+versionSearchString.length);
					//alert(version_start);
					if(version_start) {
						index_slash = version_start.indexOf("/");
						return (index_slash>=0? version_start.substring(index_slash+1):version_start) + "(Version 2 or under)";
					}
				}
			}
		}
		return "An unknown version";
	} // end of object "BrowserDetect" defination



	// begin detect installation of Flip4Mac plugin
	function detectFlip4Mac()
	{
		if(this.OS.indexOf("Mac")<0)
		{
			//alert("Detect Flip4Mac: False: Not a Macintosh");
			return false;
		}
		if(navigator.plugins && navigator.plugins.length>0) {
			for (var i = 0;i < navigator.plugins.length;i++)
			{
				if (navigator.plugins[i].name.indexOf("Flip4Mac") >= 0)
				{
					//alert("True: Flip4Mac installed")
					return true;
				}
			}
		}
		//alert("False: No Flip4Mac installed");
		return false;
	}// end detection of Flip4Mac plugin


    // begin detect supporting of Window Media Player plugin 
	function detectMediaPlayer()
	{
		if(this.OS.indexOf("Windows")<0)
		{
			//alert("Detect MediaPlayerPlugin: False: Not a Windows");
			return false;
		}
		if(this.browser.indexOf("IE")>=0)       // IE always has ActiveX support
		{
			//alert("Detect MediaPlayerPlugin: True: IE supports MediaPlayer");
			return true;
		}
		if(this.browser.indexOf("Firefox")>=0 && this.version.search(/^\s*[01]+/)>=0)   // Firefox version under 2
		{
			alert("Detect MediaPlayerPlugin: Your Firefox version is " + this.version + ". Please Upgrade to a new version.");  // Don't comment it out
			return false;
		}
		for (var i = 0;i < navigator.plugins.length;i++) 
		{
			//alert("Name:" + navigator.plugins[i].name + "; Description: " + navigator.plugins[i].description + "; filename: " + navigator.plugins[i].filename);
			if (navigator.plugins[i].name.search(/Windows\s*Media\s*Player/i) >=0)
			{
				//alert("True: Media Player plugin installed")
				return true;
			}
		}
		
		//alert("False: No Media Player plugin installed");
		return false;
	} // end of detect media Player plugin

	// begin detect the version of Flip4Mac
	function detectFlip4MacVersion()
	{
		if (!this.hasFlip4Mac)
		{
			return "Not Applicable";
		}
		if(navigator.plugins && navigator.plugins.length>0) {
			for (var i = 0;i < navigator.plugins.length;i++)
			{
				//alert("Name:" + navigator.plugins[i].name + "; Description: " + navigator.plugins[i].description + "; filename: " + navigator.plugins[i].filename);
				if (navigator.plugins[i].name.indexOf("Flip4Mac") >= 0)
				{
					if(navigator.plugins[i].name.search(/\d+[\.\d]+/)>0)
					{
						flip4mac_version = navigator.plugins[i].name.substring(navigator.plugins[i].name.search(/\d+[\.\d]+/));
						index_end = flip4mac_version.indexOf(" ");
						return index_end<0?flip4mac_version:flip4mac_version.substring(0, index_end);
					}
				}
			}
		}
		return "An Unknown Version of Flip4Mac";
	}