/***********************************************************************************************************/
/* 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();
		this.sl_version = this.sl_version();
	}
	
	BrowserDetector.prototype.detectVersion = detectVersion;
	BrowserDetector.prototype.detectOS = detectOS;
	BrowserDetector.prototype.detectMediaPlayer = detectMediaPlayer;
	BrowserDetector.prototype.detectFlip4Mac = detectFlip4Mac;
	BrowserDetector.prototype.detectFlip4MacVersion = detectFlip4MacVersion;
	BrowserDetector.prototype.sl_version = sl_version;
	
	function detectOS(data)
	{
		if(data && data.search(/Windows\s*NT\s*5\.1/i)>0) 
		{
			return "Windows XP";
		} else if (data && data.search(/Windows\s*NT\s*6\.0/i)>0)
		{
			return "Windows Vista";
		} else if (data && data.search(/Windows\s*NT\s*5\.2/i)>0)  // or Windows XP x64 Edition?
		{
			return "Windows Server2003";
		} else if (data && data.search(/Windows\s*NT\s*5\.01?/i)>0)
		{
			return "Windows 2000";
		} 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:Yor Firefox version is " + this.version + ". Too old. 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";
	}
	
	// to detect the silverlight version installed
		function sl_version(){
            var parts = Array("ver-major", "ver-minor", "ver-build", "ver-revision");
			var version = "Silverlight not installed";
            
            //try firefox etc.
            var nav = navigator.plugins["Silverlight Plug-In"];
            if (nav) {
				version = nav.description; 
				if (version === "1.0.30226.2") {  
					version = "2.0.30226.2";
			   }
            } else {
                //try the IE one... 
                try {
                    var control = new ActiveXObject('AgControl.AgControl');
                    var vers = Array(1, 0, 0, 0);
                    loopMatch(control, vers, 0, 1);
                    loopMatch(control, vers, 1, 1);
                    loopMatch(control, vers, 2, 10000);
                    loopMatch(control, vers, 2, 1000);
                    loopMatch(control, vers, 2, 100);
                    loopMatch(control, vers, 2, 10);
                    loopMatch(control, vers, 2, 1);
                    loopMatch(control, vers, 3, 1);
					version = vers[0];
                    for (var i = 1; i < 4; i++) {
                     version += "." + vers[i];   
                    }
                } catch (e) {
                }
            }
			
			return version;
        }
        function loopMatch(control, vers, idx, inc) {
            while(IsSupported(control, vers)){
                vers[idx]+=inc;
            }
            vers[idx] -= inc;
        }
        function IsSupported(control, ver){
            return control.isVersionSupported(ver[0]+ "."+ ver[1] + "." + ver[2] + "." + ver[3]);
        }
		// end of functions to get silverlight version installed