// detect web browsers

// Author: Robert Lipman, robert.lipman@nist.gov, http://cic.nist.gov/vrml/vbdetect.html
// Disclaimer: http://www.nist.gov/public_affairs/disclaimer.cfm

// This software was developed at the National Institute of Standards and Technology by employees of the
// Federal Government in the course of their official duties. Pursuant to Title 17 Section 105 of the United
// States Code this software is not subject to copyright protection and is in the public domain.  This software
// is an experimental system.  NIST assumes no responsibility whatsoever for its use by other parties, and makes 
// no guarantees, expressed or implied, about its quality, reliability, or any other characteristic.  We would 
// appreciate acknowledgement if the software is used.

// This software can be redistributed and/or modified freely provided that any derivative works bear some notice 
// that they are derived from it, and any modified versions bear some notice that they have been modified. 

var p1 = 0;
var p2 = 0;
var p3 = 0;
var s1 = '';
var bver = '';
var useragent = navigator.userAgent;
document.write('<FONT FACE="Arial,Helvetica">Web browser: &nbsp;<B>');

// report web browser version (order that they are checked is important, less common ones first)

if (useragent.indexOf('SeaMonkey') != -1) {
  document.write('<A HREF="http://www.seamonkey-project.org/">SeaMonkey</A>');

} else if (useragent.indexOf('Konqueror') != -1) {
  document.write('<A HREF="http://www.konqueror.org/">Konqueror</A>');

} else if (useragent.indexOf('Camino') != -1) {
  document.write('<A HREF="http://caminobrowser.org/">Camino</A>');

} else if (useragent.indexOf('RockMelt') != -1) {
  document.write('<A HREF="http://www.rockmelt.com/">RockMelt</A>');

} else if (useragent.indexOf('Lunascape') != -1) {
  document.write('<A HREF="http://www.lunascape.tv/">Lunascape</A>');

} else if (useragent.indexOf('Galeon') != -1) {
  document.write('<A HREF="http://galeon.sourceforge.net/">Galeon</A>');

} else if (useragent.indexOf('Midori') != -1 || useragent.indexOf('midori') != -1) {
  document.write('<A HREF="http://www.twotoasts.de/index.php?/pages/midori_summary.html">Midori</A>');

} else if (useragent.indexOf('iCab') != -1) {
  document.write('<A HREF="http://www.icab.de/">iCab</A>');

} else if (useragent.indexOf('K-Meleon') != -1) {
  document.write('<A HREF="http://kmeleon.sourceforge.net/">K-Meleon</A>');

} else if (useragent.indexOf('Epiphany') != -1) {
  document.write('<A HREF="http://projects.gnome.org/epiphany/">Epiphany</A>');

} else if (useragent.indexOf('Maxthon') != -1 || useragent.indexOf('MAXTHON') != -1) {
  document.write('<A HREF="http://www.maxthon.com/">Maxthon</A>');

} else if (useragent.indexOf('SlimBrowser') != -1 || useragent.indexOf('flashpeak') != -1) {
  document.write('<A HREF="http://www.slimbrowser.net/">SlimBrowser</A>');

} else if (useragent.indexOf('Avant') != -1) {
  document.write('<A HREF="http://www.avantbrowser.com/">Avant Browser</A>');

} else if (useragent.indexOf('SRWare') != -1) {
  document.write('<A HREF="http://www.srware.net/software_srware_iron.php">SRWare Iron</A>');

} else if (useragent.indexOf('Sleipnir') != -1) {
  document.write('<A HREF="http://www.fenrir-inc.com/sleipnir-family/">Sleipnir</A>');

} else if (useragent.indexOf('GreenBrowser') != -1) {
  document.write('<A HREF="http://www.morequick.com/">GreenBrowser</A>');

} else if (useragent.indexOf('OmniWeb') != -1) {
  document.write('<A HREF="http://www.omnigroup.com/products/omniweb/">OmniWeb</A>');

} else if (useragent.indexOf('America Online Browser') != -1 || useragent.indexOf('AOLBuild') != -1) {
  document.write('<A HREF="http://daol.aol.com/software/">AOL</A>');

} else if (useragent.indexOf('IceWeasel') != -1) {
  document.write('<A HREF="http://www.debianhelp.co.uk/iceweasel.htm">IceWeasel</A>');

} else if (useragent.indexOf('IceCat') != -1) {
  document.write('<A HREF="http://www.gnu.org/software/gnuzilla/">IceCat</A>');

// Opera

} else if (navigator.appName.indexOf('Opera') != -1 || useragent.indexOf('Opera') != -1) {
  p3 = useragent.indexOf('Version/1');
  if (p3 != -1) {
    bver = ' ' + useragent.substring(p3+8,p3+13);
  } else {
				p1 = useragent.indexOf('Opera/')
				if (p1 != -1) {
						s1 = useragent.substring(p1,p1+18);
						p2 = s1.indexOf(' ');
						if (p2 != -1) {
								bver = ' ' + useragent.substring(p1+6,p1+p2);
						} else {
								bver = ' ' + useragent.substring(p1+6,p1+15);
						}
				}
  }

  if (useragent.indexOf('Android') != -1) {
	  	document.write('<A HREF="https://market.android.com/details?id=com.opera.mini.android">Opera Mini</A>');
		} else if (useragent.indexOf('Mini') != -1) {
    document.write('<A HREF="http://www.opera.com/mobile/">Opera Mini' + bver + '</A>');
		} else if (useragent.indexOf('Mobi') != -1) {
    document.write('<A HREF="http://www.opera.com/mobile/">Opera Mobile' + bver + '</A>');
		} else {
    document.write('<A HREF="http://www.opera.com/">Opera' + bver + '</A>');
  }

// Internet Explorer (version based on Trident to avoid compatibility settings)

} else if (navigator.appName.indexOf('Internet Explorer') != -1) {
  p1 = navigator.appVersion.indexOf('MSIE') + 5;
  s1 = navigator.appVersion.substring(p1,p1+8);
  p2 = s1.indexOf(';');
  if (p2 > 0) {bver = s1.substring(0,p2);}
  if (useragent.indexOf('Trident/4.0') != -1) {bver = '8.0';}
  if (useragent.indexOf('Trident/5.0') != -1) {bver = '9.0';}
  if (useragent.indexOf('Trident/6.0') != -1) {bver = '10.0';}
  if (useragent.indexOf('Trident/7.0') != -1) {bver = '11.0';}
  p3 = bver.indexOf('.');
  iver = bver.substring(0,p3);

		lver = bver.length;
		sver = bver.substring(lver-2,lver);
		if (sver == '.0') {bver = bver.substring(0,lver-2);}

  if (iver > 6) {
    document.write('<A HREF="http://www.microsoft.com/windows/internet-explorer/">Internet Explorer</A>&nbsp;<A HREF="http://en.wikipedia.org/wiki/Internet_Explorer#Internet_Explorer_' + iver + '">' + bver + '</A>');
  } else {
    document.write('<A HREF="http://www.microsoft.com/windows/internet-explorer/">Internet Explorer</A>&nbsp;<A HREF="http://ie6countdown.com/">' + bver + '</A>');
  }

// Netscape (check before Firefox)

} else if (useragent.indexOf('Netscape') != -1 || (useragent.indexOf('Navigator') != -1 && useragent.indexOf('Firefox') != -1)) {
  document.write('<A HREF="http://en.wikipedia.org/wiki/Netscape_%28web_browser%29">Netscape</A>');

// Firefox

} else if (useragent.indexOf('Firefox') != -1) {
  p1 = useragent.indexOf('Firefox/');
		if (p1 != -1) {
				s1 = useragent.substring(p1,p1+18);
				p2 = s1.indexOf(' ');
				if (p2 != -1) {
						bver = useragent.substring(p1+8,p1+p2);
				} else {
						bver = useragent.substring(p1+8,p1+15);
				}
  }
  p3 = bver.indexOf('\;');
  if (p3 != -1) {bver = bver.substring(0,p3);}
  p4 = bver.indexOf('.');
  iver = bver.substring(0,p4+2);

		lver = bver.length;
		sver = bver.substring(lver-2,lver);
		if (sver == '.0') {bver = bver.substring(0,lver-2);}

  if (useragent.indexOf('Android') != -1) {
	  	document.write('<A HREF="http://www.mozilla.org/en-US/mobile/">Firefox</A>');
  } else if (useragent.indexOf('SunOS') != -1) {
	  	document.write('<A HREF="http://www.sunfreeware.com/mozilla.html">Firefox</A>');
		} else {
	  	document.write('<A HREF="http://www.mozilla.org/firefox/">Firefox</A>&nbsp;<A HREF="http://en.wikipedia.org/wiki/Mozilla_Firefox#Version_' + iver + '">' + bver + '</A>');
		}

// Google Chrome

} else if (useragent.indexOf('Chrome') != -1) {
		p1 = useragent.indexOf('Chrome/');
		if (p1 != -1) {
				s1 = useragent.substring(p1,p1+23);
				p2 = s1.indexOf(' ');
				if (p2 != -1) {
						bver = useragent.substring(p1+7,p1+p2);
				} else {
						bver = useragent.substring(p1+7,p1+15);
				}
				p2 = bver.indexOf('.');
				if (p2 != -1) {
				  s1 = bver.substring(p2+1,p2+20);
				  p3 = s1.indexOf('.');
				  if (p3 != -1) {
				    bver = bver.substring(0,p2+p3+1);
				  }
				}

				lver = bver.length;
				sver = bver.substring(lver-2,lver);
				if (sver == '.0') {bver = bver.substring(0,lver-2);}
  }

  if (useragent.indexOf('Android') != -1) {
	  	document.write('<A HREF="https://market.android.com/details?id=com.android.chrome">Chrome</A>');
		} else {
    document.write('<A HREF="http://www.google.com/chrome">Google Chrome</A>&nbsp;<A HREF="http://en.wikipedia.org/wiki/Google_chrome#Release_history">' + bver + '</A>');
		}

// Generic Android browsers (check after Google Chrome, Firefox, Opera)

} else if (useragent.indexOf('Android') != -1) {
  document.write('<A HREF="https://market.android.com/search?q=browser">Android Browser</A>');

// Safari (check after Google Chrome)

} else if (useragent.indexOf('Safari') != -1) {
		p1 = useragent.indexOf('Version');
		iver = 5;
		if (p1 != -1) {
				p2 = useragent.substring(p1,p1+20).indexOf(' ');
				bver = useragent.substring(p1+8,p1+p2);
				p3 = bver.indexOf('.');
				iver = bver.substring(0,p3);
		}

		lver = bver.length;
		sver = bver.substring(lver-2,lver);
		if (sver == '.0') {bver = bver.substring(0,lver-2);}

		if (useragent.indexOf('iPad') != -1) {
    document.write('<A HREF="http://www.apple.com/ipad/built-in-apps/safari.html">Safari ' + bver + '</A>');
		} else if (useragent.indexOf('iPhone') != -1 || useragent.indexOf('iPod') != -1 || useragent.indexOf('Mobile') != -1) {
    document.write('<A HREF="http://www.apple.com/iphone/built-in-apps/safari.html">Safari ' + bver + '</A>');
  } else {
    document.write('<A HREF="http://www.apple.com/safari/">Safari</A>&nbsp;<A HREF="http://en.wikipedia.org/wiki/Safari_(web_browser)#Safari_' + iver + '">' + bver + '</A>');
  }

// Mozilla

// } else if (useragent.indexOf('Mozilla') != -1) {
//   document.write('<A HREF="http://www.mozilla.org/">Mozilla</A>');

// else

} else {
  document.write(useragent);
}

document.write('</B>');
		

// 64-bit
if (useragent.indexOf('Win64') != -1 ) {document.write(' (64-bit)');}

// Chrome Frame
if (useragent.indexOf('chromeframe') != -1) {document.write(' (<A HREF="http://code.google.com/chrome/chromeframe/">Chrome Frame</A>)');}

document.write('</FONT>');

