// Browser Info Extractor 2.1g Beta by ale5000
//
// ELENCO VARIABILI (Se le variabili hanno valore unknown vuol dire che il valore non è stato trovato)
//
// DetectOS();
// soName: Nome del sistema operativo (Valori: Windows, Irix, Linux, Unix, Macintosh, WebTV)
// soRealVer: Numero di versione del sistema operativo (Valori: 4.0, 4.1, ecc.)
// winVer: Versione di Winodws (Valori: 3, 3.1, 3.11, 95, 98, ME, CE, NT, 2000, XP, 2003, ecc.)
// winType: Tipo di Windows (Valori: 16, 9x, CE, NT)
//
// DetectBrowser(1);
// browserEngine
// browserCode: Codice per identificare il browser (Guarda la seconda lista qui sotto)
// browserVer: Versione del browser
// mozillaType: Se browserCode è "mozilla" questa variabile ti dice se è "Mozilla", "Mozilla Firebird" o "Mozilla Firefox" (Guarda la terza lista qui sotto)
//
// DetectBrowser(2); o DetectBrowser();
// browserEngine
// browserCode: Codice per identificare il browser (Guarda la seconda lista qui sotto)
// browserName: Nome del browser
// browserVer: Versione del browser
// mozillaType: Se browserCode è "mozilla" questa variabile ti dice se è "Mozilla", "Mozilla Firebird" o "Mozilla Firefox" (Guarda la terza lista qui sotto)
//
// DetectDotNetFramework();
// net: Versione di .NET Framework
// net2: Altra versione di .NET Framework (Se ne sono installate 2)
//
// DetectCompatibility();
// compatMode: Modo di compatibilità
// compat: Compatibilità

//browserEngine
/*
Gecko
Presto
*/

// Lista dei codici per identificare il browser (browserCode)
/*
CODICE		NOME BROWSER
ie			Internet Explorer
mozilla		Mozilla
geckoBased		geckoBrowser (Variabile) ToDO: Variable removed
ns			Netscape
safari		Safari
opera			Opera
googleCW		Google WebCrawler
scooterCW		Scooter WebCrawler
fastCW		FAST WebCrawler
trovatoreCW	Il Trovatore WebCrawler
other			navigator.appName (Variabile)
*/

// mozillaType
/*
original	Mozilla
fb		Mozilla Firebird
ff		Mozilla Firefox
*/

var userAgent = navigator.userAgent;
var userAgentLC = userAgent.toLowerCase();

function rimuoviPartiInutili(x)
{
	x = x.split(";",1).toString();
	x = x.split(")",1).toString();
	x = x.split("/",1).toString();
	x = x.split(" ",1).toString();
	return x;
}

function rimuoviSeparatoreVersione(text, start)
{
	if( text != "unknown" && (text.charAt(0) == " " || isNaN(text.charAt(0))) )
		return text.substr(1);
	return text;
}

function rimuoviSeparatoreIniziale(text, start)
{
	if( text.charAt(0) == " " || text.charAt(0) == ";" )
		return text.substr(1);
	return text;
}

var soName;
var winVer;
var sp;
var winType;
var soRealVer;

function DetectOS()
{
	winVer = "unknown";
	sp = "unknown";
	winType = "unknown";
	soRealVer = "unknown";

	/*Rilevamento sistema operativo*/
	var soWin = (userAgentLC.indexOf("win") != -1) ? 1 : 0;
	var soUnix = ((userAgentLC.indexOf("x11") != -1) || (userAgentLC.indexOf("unix") != -1) || (userAgentLC.indexOf("linux") != -1)) ? 1 : 0;
	var soMac = (userAgentLC.indexOf("mac") != -1) ? 1 : 0;
	var soWebTV = (userAgentLC.indexOf("webtv") != -1) ? 1 : 0;

	if(soUnix == 1) {
		if(userAgentLC.indexOf("irix") != -1) {
			soName = "Irix";
			soRealVer = parseFloat(userAgentLC.substr(userAgentLC.indexOf("irix")+5));
		}
		if(userAgentLC.indexOf("linux") != -1) {
			soName = "Linux";
			soRealVer = parseFloat(userAgentLC.substr(userAgentLC.indexOf("linux")+6));
		}
		if(!soName) soName = "Unix";
	}

	else if(soMac == 1) {
		soName = "Macintosh";
	}

	else if(soWebTV == 1) {
		soName = "WebTV";
	}

	//Rilevamento versione Windows
	else if(soWin == 1) {
		soName = "Windows";

		if(userAgentLC.indexOf("windows ce") != -1) { winVer = "CE"; winType = "CE"; }
		if(userAgentLC.indexOf("wince") != -1) { winVer = "CE"; winType = "CE"; }

		if(userAgentLC.indexOf("windows nt") != -1) {
			winType = "NT";
			soRealVer = parseFloat(userAgentLC.substr(userAgentLC.indexOf("windows nt")+11));
		} else if(userAgentLC.indexOf("win nt") != -1) {
			winType = "NT";
			soRealVer = parseFloat(userAgentLC.substr(userAgentLC.indexOf("win nt")+7));
		} else if(userAgentLC.indexOf("winnt") != -1) {
			winType = "NT";
			soRealVer = parseFloat(userAgentLC.substr(userAgentLC.indexOf("winnt")+6));
		} else if((userAgentLC.indexOf("windows 9") != -1) || (userAgentLC.indexOf("win 9") != -1) || (userAgentLC.indexOf("win9") != -1)) {
			winType = "9x";
		}

		if(userAgentLC.indexOf("nt 7.0") != -1 || userAgentLC.indexOf("nt 6.1") != -1) { winVer = "7 or 2008 R2"; winType = "NT"; soRealVer = 7.0; }	// ToDO: TEST
		// Windows Server 2008 R2 = Windows 7 Server
		else if(userAgentLC.indexOf("nt 6.0") != -1) { winVer = "Vista or 2008"; winType = "NT"; soRealVer = 6.0; } // ToDO: If it is IE and "Media Center PC" is missing then it is server
		else if(userAgentLC.indexOf("nt 5.2") != -1) { winVer = "XP x64 or 2003"; winType = "NT"; soRealVer = 5.2; } // ToDO: If 32bit then it is 2003
		else if(userAgentLC.indexOf("nt 5.1") != -1) { winVer = "XP"; winType = "NT"; soRealVer = 5.1; }
		else if(userAgentLC.indexOf("nt 5.01") != -1) { winVer = "2000"; sp = "SP1"; winType = "NT"; soRealVer = 5.01; }
		else if(userAgentLC.indexOf("nt 5.0") != -1) { winVer = "2000"; winType = "NT"; soRealVer = 5.0; }
		else if(userAgentLC.indexOf("win 9x 4.9") != -1 ||
			userAgentLC.indexOf("windows me") != -1 ||
			userAgentLC.indexOf("win me") != -1 ||
			userAgentLC.indexOf("winme") != -1) { winVer = "ME"; winType = "9x"; soRealVer = 4.9; }
		else if(userAgentLC.indexOf("windows 98") != -1 ||
			userAgentLC.indexOf("win98") != -1) { winVer = "98"; winType = "9x"; soRealVer = 4.1; }
		else if(userAgentLC.indexOf("windows 95") != -1 ||
			userAgentLC.indexOf("win95") != -1) { winVer = "95"; winType = "9x"; soRealVer = 4.0; }
		else if(userAgentLC.indexOf("windows 3") != -1) { winVer = parseFloat(userAgentLC.substr(userAgentLC.indexOf("windows 3")+8)); winType = "16"; soRealVer = winVer; }
		else if(userAgentLC.indexOf("win16") != -1) { winVer = "3.x"; winType = "16"; soRealVer = 3; }

		// ToDO: Check SV1 in user-agent string for service pack

		if(winVer == "unknown" && winType == "NT")
		{
			if(soRealVer >= 5)
				winVer = soRealVer;
			else
				winVer = "NT";
		}
		else if(winType == "9x")
		{
			var pos = userAgentLC.indexOf("9x");
			if(pos > -1)
				soRealVer = parseFloat(userAgentLC.substr(pos+3));
		}
	}

	else {
		soName = "unknown";
	}
}

var browserEngine;
var browserName;
var browserVer;
var browserCode;
var mozillaType;
var browserSP;

function DetectBrowser( detectionLevel )
{
	if(!detectionLevel) detectionLevel = 2;
	browserEngine = "unknown";
	browserName = "unknown";
	browserVer = "unknown";
	browserCode = "unknown";
	mozillaType = "unknown";
	browserSP = "unknown";

	if(userAgentLC.indexOf("presto") != -1) { browserEngine = "Presto"; }
	else if(userAgentLC.indexOf("applewebkit") != -1) { browserEngine = "WebKit"; } // It should be before KHTML and Gecko
	else if(userAgentLC.indexOf("khtml") != -1) { browserEngine = "KHTML"; } // It should be before Gecko
	else if(userAgentLC.indexOf("gecko") != -1) { browserEngine = "Gecko"; }
	else if(userAgentLC.indexOf("trident") != -1) { browserEngine = "Trident"; }

	/*Rilevamento browser*/
	// Internet Explorer
	var ie = (userAgentLC.indexOf("msie") != -1) ? 1 : 0;
	// Mozilla
	var mozilla = (userAgentLC.indexOf("gecko") != -1) ? 1 : 0;
	// Netscape
	var netscape = (userAgentLC.indexOf("netscape") != -1) ? 1 : 0;
	if(netscape == 1) { mozilla = 0; }
	// Safari
	var safari = (userAgentLC.indexOf("safari") != -1) ? 1 : 0;
	if(safari == 1) { mozilla = 0; }
	// Opera
	var opera = (window.opera || userAgentLC.indexOf("opera") != -1) ? 1 : 0;
	// Crawler
	var googleCrawler = (userAgentLC.indexOf("googlebot") != -1) ? 1 : 0;
	var scooterCrawler = (userAgentLC.indexOf("scooter") != -1) ? 1 : 0;
	var fastCrawler = (userAgentLC.indexOf("fast-webcrawler") != -1) ? 1 : 0;
	var iltrovatoreCrawler = (userAgentLC.indexOf("iltrovatore") != -1) ? 1 : 0;

	/*Rilevamento versione browser*/
	//Opera
	if(opera == 1 || browserEngine == "Presto") { // It should be before other browsers
		if(opera == 1) {
			browserCode = "opera";

			if(userAgentLC.indexOf("version") != -1)
				browserVer = userAgentLC.substr(userAgentLC.indexOf("version")+7);
			else if(opera == 1)
				browserVer = userAgentLC.substr(userAgentLC.indexOf("opera")+5);
		} else {
			browserCode = "prestoBased";
			var temp = userAgent.substr(userAgentLC.indexOf("presto")+7);
			var space_position = temp.indexOf(" ");
			temp = rimuoviSeparatoreIniziale(temp.substr(space_position+1));
			if(space_position != -1 && temp.charAt(0) != "" && temp.charAt(0) != " ") {
				browserName = rimuoviPartiInutili(temp);
				browserVer = temp.substr(browserName.length);
			} else {
				browserCode = "unknown";
				browserName = "Error";
				browserVer = "unknown";
			}
		}
	}
	else if(browserEngine == "WebKit")
	{
		var pos = userAgentLC.indexOf("version");
		if(pos != -1)
		{
			browserName = "Safari";
			browserCode = "webkitBased";
			browserVer = userAgentLC.substr(pos+7);
		}
		else
		{
			// ToDO
			// Check old safari and google chrome
		}
	}
	//Mozilla
	else if(mozilla == 1) {
		if(userAgentLC.indexOf("firefox") != -1) {
			browserCode = "mozilla";
			mozillaType = "ff";
			browserVer = userAgentLC.substr(userAgentLC.indexOf("firefox")+7);
		} else if(userAgentLC.indexOf("firebird") != -1) {
			browserCode = "mozilla";
			mozillaType = "fb";
			browserVer = userAgentLC.substr(userAgentLC.indexOf("firebird")+8);
		} else {
			browserCode = "geckoBased";
			var temp = userAgent.substr(userAgentLC.indexOf("gecko")+6);
			var space_position = temp.indexOf(" ");
			temp = rimuoviSeparatoreIniziale(temp.substr(space_position+1));
			if(space_position != -1 && temp.charAt(0) != "" && temp.charAt(0) != " ") {
				browserName = rimuoviPartiInutili(temp);
				browserVer = temp.substr(browserName.length);
			} else if(userAgentLC.indexOf("rv") != -1 && temp.charAt(0) != " ") {
					browserCode = "mozilla";
					mozillaType = "original";
					browserVer = userAgentLC.substr(userAgentLC.indexOf("rv")+2);
			} else {
				browserCode = "unknown";
				browserName = "Error";
				browserVer = "unknown";
			}
		}
	}
	//Netscape
	else if(netscape == 1) {
		browserCode = "ns";
		browserVer = userAgentLC.substr(userAgentLC.indexOf("netscape")+9);
	}
	//Internet Explorer
	else if(ie == 1) {
		browserCode = "ie";
		browserVer = userAgentLC.substr(userAgentLC.indexOf("msie")+5);
		if( rimuoviPartiInutili(browserVer) == "7.0" && userAgentLC.indexOf("trident/4.0") != -1 )
			browserVer = "8.0";
	}
	//Crawler
	else if(googleCrawler == 1) {
		browserCode = "googleCW";
		browserVer = userAgentLC.substr(userAgentLC.indexOf("googlebot")+10);
	}
	else if(scooterCrawler == 1) {
		browserCode = "scooterCW";
		browserVer = userAgentLC.substr(userAgentLC.indexOf("scooter")+8);
	}
	else if(fastCrawler == 1) {
		browserCode = "fastCW";
		browserVer = userAgentLC.substr(userAgentLC.indexOf("fast-webcrawler")+16);
	}
	else if(iltrovatoreCrawler == 1) {
		browserCode = "trovatoreCW";
		browserVer = userAgentLC.substr(userAgentLC.indexOf("iltrovatore-setaccio")+21);
	}
	else {
		browserCode = "other";
		browserVer = navigator.appVersion;
	}
	browserVer = rimuoviPartiInutili(rimuoviSeparatoreVersione(browserVer));

	var appMinorVersion = navigator.appMinorVersion;
	if(appMinorVersion != null)
	{
		appMinorVersion = appMinorVersion.replace(/;/g, "");
		appMinorVersion = appMinorVersion.replace(/ /g, "");
		if(appMinorVersion != 0 && appMinorVersion != "")
			browserSP = appMinorVersion;
	}

	if( detectionLevel >= 2 )
	{
		switch (browserCode) {
			case "ie":
				browserName = "Internet Explorer";
				break;
			case "mozilla":
				if( mozillaType == "original" )
					browserName = "Mozilla";
				else if( mozillaType == "fb" )
					browserName = "Mozilla Firebird";
				else if( mozillaType == "ff" )
					browserName = "Mozilla Firefox";
				else
					browserName = "Error";
				break;
			case "ns":
				browserName = "Netscape";
				break;
			case "opera":
				browserName = "Opera";
				break;
			case "googleCW":
				browserName = "Google WebCrawler";
				break;
			case "scooterCW":
				browserName = "Scooter WebCrawler";
				break;
			case "fastCW":
				browserName = "FAST WebCrawler";
				break;
			case "trovatoreCW":
				browserName = "Il Trovatore WebCrawler";
				break;
			case "other":
				browserName = navigator.appName;
				break;
			case "geckoBased":
			case "prestoBased":
				break;
			default:
				//browserName = "Error";
		}
	}
}

var net;
var net2;

function DetectDotNetFramework()
{
	/*Rilevamento della versione di .NET Framework*/
	if(userAgentLC.indexOf(".net clr") != -1)
	{
		net = userAgentLC.substr(userAgentLC.lastIndexOf(".net clr")+9);
		net2 = userAgentLC.substr(userAgentLC.indexOf(".net clr")+9);
		net = rimuoviPartiInutili(net);
		net2 = rimuoviPartiInutili(net2);
		if(net == net2)
			net2 = "unknown";
	} else {
		net = "unknown";
		net2 = "unknown";
	}
}

var compatMode;
var compat;

function DetectCompatibility()
{
	if(document.compatMode)
		compatMode = (document.compatMode.toLowerCase() == "css1compat") ? 1 : 0;
	else
		compatMode = "unknown";
}

var bJava = (navigator.javaEnabled()) ? true : false;
var bCookie = (navigator.cookieEnabled) ? true : false;
var bStylesheets = (document.styleSheets) ? true : false;
