/******************************************
 Source: http://quirksmode.org/m/d/detect.js
 Downloaded on: June 14, 2010 
*******************************************/
var data,dataArrayJSON,index,userString,raw,detected;

dataArrayJSON = {
	"meta": {
		"version": "0.0.3",
		"authors": ["ppk"],
		"instructions": "http://quirksmode.org/m/d/JSONmobile.txt"
	},
	"strings": [
	
		/* POSITIVE IDENTIFICATION OF A MOBILE VENDOR
			Nokia doesn't occur in this list, it's way more down with the browsers.
			Discovered strings that seem to say: "Samsung phone, Nokia browser"		
		*/
		
		{"key": "Nintendo", "platform": "Nintendo", "OS":"Nintendo"},
		{"key": "Playstation", "platform": "Playstation","OS":"Playstation","vendor":"Sony"},

		{"key": "SonyEricsson", "vendor": "SonyEricsson"},

		{"key": "Alcatel", 	"vendor": "Alcatel"},
		{"key": "Amoi", 	"vendor": "Amoi"},
		{"key": "iPhone OS", 	"vendor": "Apple"},
		{"key": "ASUS", 	"vendor": "ASUS"},
		{"key": "Benq", 	"vendor": "Benq"},
		{"key": "Bird", 	"vendor": "Bird"},
		{"key": "Dopod", 	"vendor": "Dopod"},
		{"key": "Ericsson", 	"vendor": "Ericsson"},
		{"key": "Fly", 		"vendor": "Fly"},
		{"key": "MAUI", 	"vendor": "Fly"},		
		{"key": "Grundig", 	"vendor": "Grundig"},
		{"key": "Huawei", 	"vendor": "Huawei"},
		{"key": "HTC", 		"vendor": "HTC"},
		{"key": "TyTN", 	"vendor": "HTC"},
		{"key": "i-mate", 	"vendor": "i-mate"},
		{"key": "Lenovo", 	"vendor": "Lenovo"},
		{"key": "LG-", 		"vendor": "LG"},
		{"key": "LG/", 		"vendor": "LG"},
		{"key": "LGE-", 	"vendor": "LG"},
		{"key": "LGE/", 	"vendor": "LG"},
		{"key": "MOT", 		"vendor": "Motorola"},		
//		{"key": "NEC", "vendor": "NEC"}, 	// too generic
		{"key": "PalmOS", 	"vendor": "Palm"},
		{"key": "Palm", 	"vendor": "Palm"},
		{"key": "webOS", 	"vendor": "Palm"},
		{"key": "Panasonic", 	"vendor": "Panasonic"},
		{"key": "Pantech", 	"vendor": "Pantech"},
		{"key": "PG-", 		"vendor": "Pantech"},
		{"key": "Philips", 	"vendor": "Philips"},
		{"key": "Psion", 	"vendor": "Psion"},
		{"key": "CECT", 	"vendor": "Qiao Xing"},
		{"key": "Sagem", 	"vendor": "Sagem"},
		{"key": "SEC", 		"vendor": "Samsung"},
		{"key": "SCH", 		"vendor": "Samsung"},
		{"key": "SGH", 		"vendor": "Samsung"},
		{"key": "Samsung", 	"vendor": "Samsung"},
		{"key": "Sendo", 	"vendor": "Sendo"},
		{"key": "Sharp", 	"vendor": "Sharp"},
		{"key": "SIE-", 	"vendor": "Siemens"},
		{"key": "Siemens", 	"vendor": "Siemens"},
		{"key": "Sony", 	"vendor": "Sony"},
		{"key": "Toshiba", 	"vendor": "Toshiba"},
//		{"key": "XV", "vendor": "Verizon"}, // too generic
		{"key": "ZTE", 		"vendor": "ZTE"},

		{"key": "SoftBank", 	"vendor": "Softbank"},
		{"key": "Nokia", 	"vendor":"Nokia"},

		/* POSITIVE IDENTIFICATION OF OPERATOR */
	
		{"key": "DoCoMo", 	"operator": "DoCoMo"},
		{"key": "KDDI", 	"operator": "KDDI"},
		{"key": "XDA", 		"operator": "O2"},
		{"key": "Orange", 	"operator": "Orange"},
		{"key": "SPV", 		"operator": "Orange"},
		{"key": "Sprint", 	"operator": "Sprint"},
		{"key": "MDA", 		"operator": "T-Mobile"},
		{"key": "T-Mobile", 	"operator": "T-Mobile"},
		{"key": "Vodafone", 	"operator": "Vodafone"},
	
		/* POSITIVE IDENTIFICATION OF OS */
		
		{"key": "BREW", 	"OS": "Brew"},
		{"key": "EPOC", 	"OS": "Epoc"},
		{"key": "PalmOS", 	"OS": "PalmOS"},
		{"key": "webOS", 	"OS": "webOS"},
		{"key": "Series40", 	"OS": "Symbian S40"},
		{"key": "Series60", 	"OS": "Symbian S60"},
		{"key": "Series 60", 	"OS": "Symbian S60"},
		{"key": "Series80", 	"OS": "Symbian S80"},
		{"key": "UIQ", 		"OS": "Symbian UIQ"},
		{"key": "SymbOS", 	"OS": "Symbian"},
		{"key": "SymbianOS", 	"OS": "Symbian"},
		{"key": "Symbian OS", 	"OS": "Symbian UIQ"},
		{"key": "Linux", 	"OS": "Linux"},
		
	
		/* BOTS AND SUCH */

		{"key": "bot", 		"type": "bot", "isNotMobile": "true"},
		{"key": "crawl", 	"type": "bot", "isNotMobile": "true"},
		{"key": "yahoo", 	"type": "bot", "isNotMobile": "true"},
		{"key": "spider", 	"type": "bot", "isNotMobile": "true"},
		{"key": "robot", 	"type": "bot", "isNotMobile": "true"},
		{"key": "feedfetcher", 	"type": "bot", "isNotMobile": "true"},
		{"key": "appengine", 	"type": "bot", "isNotMobile": "true"},
		{"key": "WordPress", 	"type": "bot", "isNotMobile": "true"},
		{"key": "FeedParser", 	"type": "bot", "isNotMobile": "true"},
		{"key": "JoeDog", 	"type": "bot", "isNotMobile": "true"},
		{"key": "Mozzler", 	"type": "bot", "isNotMobile": "true"},
		{"key": "lnkms2bitly", 	"type": "bot", "isNotMobile": "true"},
		{"key": "HttpClient", 	"type": "bot", "isNotMobile": "true"},
		{"key": "urllib", 	"type": "bot", "isNotMobile": "true"},
		{"key": "MetaURI", 	"type": "bot", "isNotMobile": "true"},
		{"key": "facebook", 	"type": "bot", "isNotMobile": "true"},
		{"key": "libcurl", 	"type": "bot", "isNotMobile": "true"},
		{"key": "Twitturly", 	"type": "bot", "isNotMobile": "true"},
		{"key": "twitmatic", 	"type": "bot", "isNotMobile": "true"},
		{"key": "my6sense", 	"type": "bot", "isNotMobile": "true"},
		{"key": "Bitacoras", 	"type": "bot", "isNotMobile": "true"},
		{"key": "C#", 		"type": "bot", "isNotMobile": "true"},
		{"key": "investigate-tweet", 	"type": "bot", "isNotMobile": "true"},
		{"key": "twitter", 	"type": "bot", "isNotMobile": "true"},
		{"key": "http", 	"type": "bot", "isNotMobile": "true"},
		{"key": "test", 	"type": "bot", "isNotMobile": "true"},
		{"key": "coZop", 	"type": "bot", "isNotMobile": "true"},
		{"key": "Untiny", 	"type": "bot", "isNotMobile": "true"},
		{"key": "page-store", 	"type": "bot", "isNotMobile": "true"},
		{"key": "Google Wireless Transcoder", 	"type": "bot", "isNotMobile": "true"},

		/* EMULATORS */

		{"key": "Emulator", 	"type": "emulator", "isNotMobile": "true"},
		{"key": "Simulator", 	"type": "emulator", "isNotMobile": "true"},

		/* OBSCURE MODERN BROWSERS */
		
		{"key": "ozone", 	"name": "Ozone"},
		{"key": "Bolt", 	"name": "Bolt"},
		{"key": "Iris", 	"name": "Iris"},
		{"key": "Maemo Browser", "name": "MicroB"},
		{"key": "Dorothy", 	"name": "Dorothy"},
		{"key": "webOS", 	"name": "WebOS"},
		{"key": "Series80", 	"name": "Nokia S80"},

		/* OPENWAVE SOMETIMES INSTEAD OF MODERN BROWSER */

		{"key": "UP.Browser", 	"name": "Openwave"},

		/* MAINSTREAM MODERN BROWSERS */
		
		{"key": "Opera Mobi", 	"name": "Opera Mobile"},
		{"key": "Opera Mini", 	"name": "Opera Mini"},
		{"key": "NetFront", 	"name": "NetFront"},
		{"key": "Browser/NF", 	"name": "NetFront"},
		{"key": "ACS-NF", 	"name": "NetFront"},
		{"key": "NF-Browser", 	"name": "NetFront"},
		{"key": "BlackBerry", 	"name": "BlackBerry", "OS": "BlackBerry", "vendor": "RIM"},
		{"key": "IEMobile", 	"name": "IE Mobile", "version": "4"},
		{"key": "Windows Phone", "name": "IE Mobile","OS":"Windows Mobile"},
		{"key": "Android", 	"name": "Android"},

		/* OLDER BROWSERS, MOSTLY WAP */
		
		{"key": "Minimo", 	"name": "Minimo"},
		{"key": "BrowserNG", 	"name": "BrowserNG"},
		{"key": "Jataayu", 	"name": "Jataayu"},
		{"key": "ObigoInternetBrowser", "name": "Obigo"},
		{"key": "Obigo-Browser", "name": "Obigo"},
		{"key": "Obigo Browser", "name": "Obigo"},
		{"key": "Obigo", 	"name": "Obigo"},
		{"key": "Danger", 	"name": "Danger"},
		{"key": "Chameleon", 	"name": "Chameleon"},		
		{"key": "Palm Wapper", 	"name": "Palm Wapper"},		
		{"key": "EzWap", 	"name": "Ez WAP"},		
		{"key": "jBrowser", 	"name": "jBrowser"},		
		{"key": "Blazer", 	"name": "Blazer"},
		{"key": "OpenWave", 	"name": "Openwave"},
		{"key": "SEMC-Browser", "name": "SEMC"},
		{"key": "Polaris", 	"name": "Polaris"},
		{"key": "Klondike", 	"name": "Klondike"},
		{"key": "iBrowser", 	"name": "iBrowser"},
		{"key": "Mitsu", 	"name": "Mitsu"},
		{"key": "SMIT-", 	"name": "SMIT"},
		{"key": "MIB", 		"name": "MIB"},
		{"key": "WinWAP", 	"name": "WinWAP"},
		{"key": "Teleca", 	"name": "Teleca"},
		{"key": "Jasmine", 	"name": "Jasmine"},
		{"key": "UP/4", 	"name": "Unwired Planet"},
		{"key": "MIC/", 	"name": "AU Browser"},
		{"key": "AU.Browser", 	"name": "AU Browser"},
		{"key": "MMEF", 	"name": "Mobile Explorer"},
		{"key": "UCWEB", 	"name": "UCWeb"},
		{"key": "portalmmm", 	"name": "iMode browser"},
		
		{"key": "WAP", 		"name": "WAP-crap"},

		/* PROXIES (?) */

		{"key": "Novarra", 	"name": "Novarra Vision"},

		/* UBIQUITOUS STRINGS */
		
		{"key": "Series60", 	"name": "S60 WebKit"},
		{"key": "SymbianOS", 	"name": "S60 WebKit"},
//		{"key": "Symbian OS", 	"name": "S60 WebKit"},
		{"key": "iPod", 	"name": "Safari iPod", "type": "iPod","OS": "iPhone", "vendor":"Apple"},
		{"key": "iPhone OS", 	"name": "Safari", "OS": "iPhone", "vendor":"Apple"},
		
		{"key": "iPhone", 	"name": "Safari", "OS": "iPhone","vendor":"Apple"},		

		/* WINDOWS */

		{"key": "Windows CE", 	"isNotMobile": "false", "OS": "Windows Mobile"},

		/* NOT MOBILE */
	
		{"key":"libwww", "isNotMobile": "true"}, 
		{"key":"Wget", "isNotMobile": "true"}, 
		{"key":"Lynx", "isNotMobile": "true"}, 
		{"key":"PowerPC", "isNotMobile": "true"}, 
		{"key":"Mac OS X", "isNotMobile": "ifUnknown"},
		{"key":"iCab", "isNotMobile": "true"}, 
		{"key":"Linux i", "isNotMobile": "true"}, 
		{"key":"i686", "isNotMobile": "true"}, 
		{"key":"SunOS", "isNotMobile": "true"}, 
		{"key":"Linux x", "isNotMobile": "true"}, 
		{"key":"Konqueror", "isNotMobile": "true"}, 
		{"key":"Java", "isNotMobile": "ifUnknown"},
		{"key":"Win", "isNotMobile": "ifUnknown", "OS":"Windows Mobile"},

		/* VERY COMMON  */

		{"key": "Firefox", 	"name": "Firefox"},
		{"key": "Opera", 	"name": "Opera Mobile"},
		{"key": "Windows CE", 	"name": "IE Mobile"}
		
	],
	"browserVersion": {
		"Blackberry": "BlackBerry[0-9]{4}/", // supposed to be a regex: "Blackberry, then four numbers, then a slash, then the version number"
		"S60 WebKit": "Series60",
		"Mozilla": "rv:",
//		"Opera Mobile": "Version",
		"Danger": "Danger hiptop",
		"Safari": "iPhone OS"
	},
	"engine": {
		"Android": "WebKit",
		"AU Browser": "Obigo",
		"BlackBerry": "Mango",
		"Blazer": "NetFront",
		"Bolt": "WebKit",
		"BrowserNG": "WebKit",
		"Danger": "NetFront",
		"Dorothy": "WebKit",
		"Firefox": "Gecko",
		"IE Mobile": "Trident",
		"Iris": "WebKit",
		"LG": "Obigo",
		"MIB": "Openwave",
		"MicroB": "Gecko",
		"Minimo": "Gecko",
		"Mobile Explorer": "Trident",
		"NetFront": "NetFront",
		"Nokia": "Nokia",
		"Obigo": "Obigo",
		"Openwave": "Openwave",
		"Opera Mini": "Presto",
		"Opera Mobile": "Presto",
		"Ozone": "WebKit",
		"S60 WebKit": "WebKit",
		"Safari": "WebKit",
		"SE NetFront": "NetFront",
		"SE Obigo": "Obigo",
		"SEMC": "SonyEricsson",
		"Siemens": "Openwave",
		"Teleca": "Obigo",
		"Unwired Planet": "Openwave",
		"WebOS": "WebKit"
	}
}

function isMobileBrowser() {
	
	detected = getMobileBrowserDetails(navigator.userAgent);
	
	if(detected.indexOf('Not mobile') == -1){
		return true;
		//alert('true - this is a mobile browser');
	}else{
		return false;
		//alert('false - not mobile browser')
	}

}

function getMobileBrowserDetails(string) {
	//raw.innerHTML = string;
	var detectObject = detectBrowser(string);

	var returnString = detectObject.name || "An unknown browser";
	if (detectObject.browserVersion) {
		returnString += ' ' + detectObject.browserVersion;
	}
	if (detectObject.engine) {
		returnString += ' (rendering engine: ' + detectObject.engine + ')';
	}
	returnString += ' on a ' + (detectObject.vendor || "unknown") + ' device';
	if (detectObject.OS) {
		returnString += ' running ' + detectObject.OS + ' OS';
	}
	returnString += '.';

	return returnString;

}

function detectBrowser(string) {
	var dataObj = {};

	var list = dataArrayJSON.strings;
	outerloop: for (var i=0;i<list.length;i+=1) {
		if (string.toLowerCase().indexOf(list[i].key.toLowerCase()) !== -1) {
			if (!dataObj.isNotMobile && list[i].isNotMobile === 'ifUnknown') {
				for (var k in dataObj) {
				// if there's any member in dataObj, the browser has been identified 
				// positively as mobile and we do not set isNotMobile to true
					continue outerloop; 
				}
				dataObj.isNotMobile = 'true';
				dataObj.isNotMobileKey = list[i].key;
			}
			for (var j in list[i]) if (j !== 'key') {
				if (!dataObj[j]) {
					dataObj[j] = list[i][j];
					dataObj[j+'Key'] = list[i].key;
				} else {
					var prop = j+'Alt';
					if (!dataObj[prop]) {
						dataObj[prop] = ''
					}
					dataObj[prop] += list[i][j] + ',';
				}
			}
		}
	}
	
	if (dataObj.isNotMobile === 'true') {
		dataObj.oldName = dataObj.name;
		dataObj.name = 'Not mobile';
		delete dataObj.nameKey;
	}
	
	if (!dataObj.name && dataObj.platform) {
		dataObj.name = dataObj.platform;
	}

	if (!dataObj.name && dataObj.vendor) {
		dataObj.name = dataObj.engine = dataObj.vendor + ' proprietary';	
	}
	
	if (!dataObj.name && dataObj.operator) {
		dataObj.name = dataObj.engine = dataObj.operator + ' proprietary';	
	}
	

	/* VERSION DETECT */

	if (dataObj.nameKey && !dataObj.version) {
		var matchString = dataObj.nameKey;
		var softVersions = dataArrayJSON.browserVersion;
		if (softVersions[dataObj.browserName]) {
			matchString = softVersions[dataObj.browserName];
		}
		dataObj.version = parseVersion(matchString) || '';
	}

	/* RENDERING ENGINE DETECT */

	if (!dataObj.engine) {
		var engine = dataArrayJSON.engine;
		if (engine[dataObj.name]) {
			dataObj.engine = engine[dataObj.name];
		}
	}

	return dataObj;	
	
	function parseVersion(startString) {
		var position = string.indexOf(startString);
		
		if (startString === 'BlackBerry') { // ugly hack
			position += 4;
		}
		
		if (position < 0) {
			return;
		}
		
		if (!startString)
			alert(string);
		
		var toBeParsed = string.substring(position+startString.length);
		if (toBeParsed.charAt(0) === '/') {
			toBeParsed = toBeParsed.substring(1);
		}
		return parseFloat(toBeParsed);
	}	

}	



