/** * This code was taken from quirksmode.org and rewritten for readability, * efficiency, and compatability with the CharityFinders JavaScript APIs. * Unfortunately, it's not reliable due to browser vendor stupidity. Only use * this code if object detection won't solve your problems, and the only * solution that might help is to _guess_ the browser name, browser version, * and/or operating system. */ //////////////////////////////////////////////////////////////////////////////// // Constants //////////////////////////////////////////////////////////////////////////////// var __CFBROWSER_INDEX_IDENTITY = 0; var __CFBROWSER_INDEX_PROPERTY = 1; var __CFBROWSER_INDEX_STRING = 2; var __CFBROWSER_INDEX_SUBSTRING = 3; var __CFBROWSER_INDEX_VERSION_SEARCH = 4; var CFBROWSER_CAMINO = "Camino"; var CFBROWSER_EXPLORER = "Explorer"; var CFBROWSER_FIREFOX = "Firefox"; var CFBROWSER_ICAB = "iCab"; var CFBROWSER_KONQUEROR = "Konqueror"; var CFBROWSER_MOZILLA = "Mozilla"; var CFBROWSER_NETSCAPE = "Netscape"; var CFBROWSER_OMNIWEB = "OmniWeb"; var CFBROWSER_OPERA = "Opera"; var CFBROWSER_SAFARI = "Safari"; var CFBROWSER_SEAMONKEY = "SeaMonkey"; var CFBROWSER_OS_FREEBSD = "FreeBSD"; var CFBROWSER_OS_IPHONE = "iPhone"; var CFBROWSER_OS_IPOD = "iPod"; var CFBROWSER_OS_LINUX = "Linux"; var CFBROWSER_OS_MAC = "Mac"; var CFBROWSER_OS_NINTENDO = "Nintendo"; var CFBROWSER_OS_SUN = "SunOS"; var CFBROWSER_OS_SYMBIAN = "Symbian"; var CFBROWSER_OS_SYNERGY = "SYNERGY"; var CFBROWSER_OS_WINDOWS = "Windows"; var CFBROWSER_UNKNOWN = undefined; var __CFBROWSER_OS_SEARCH_DATA = [ [CFBROWSER_OS_WINDOWS, undefined, navigator.platform, "Win"], [CFBROWSER_OS_WINDOWS, undefined, navigator.platform, "CE.Net"], [CFBROWSER_OS_FREEBSD, undefined, navigator.platform, "FreeBSD"], [CFBROWSER_OS_MAC, undefined, navigator.platform, "Mac"], [CFBROWSER_OS_LINUX, undefined, navigator.platform, "Linux"], [CFBROWSER_OS_SUN, undefined, navigator.platform, "SunOS"], [CFBROWSER_OS_SYMBIAN, undefined, navigator.userAgent, "Symbian"], [CFBROWSER_OS_SYNERGY, undefined, navigator.platform, "SYNERGY"], [CFBROWSER_OS_NINTENDO, undefined, navigator.platform, "Nintendo"], [CFBROWSER_OS_IPHONE, undefined, navigator.platform, "iPhone"], [CFBROWSER_OS_IPOD, undefined, navigator.platform, "iPod"] ]; var __CFBROWSER_SEARCH_DATA = [ [CFBROWSER_OMNIWEB, undefined, navigator.userAgent, "OmniWeb", "OmniWeb/"], [CFBROWSER_SAFARI, undefined, navigator.vendor, "Apple", "Safari"], [CFBROWSER_OPERA, window.opera, undefined, undefined, "Opera"], [CFBROWSER_ICAB, undefined, navigator.vendor, "iCab", "iCab"], [CFBROWSER_KONQUEROR, undefined, navigator.vendor, "KDE", "Konqueror"], [CFBROWSER_FIREFOX, undefined, navigator.userAgent, "Firefox", "Firefox"], [CFBROWSER_SEAMONKEY, undefined, navigator.userAgent, "SeaMonkey", "SeaMonkey"], [CFBROWSER_CAMINO, undefined, navigator.vendor, "Camino", "Camino"], [CFBROWSER_NETSCAPE, undefined, navigator.userAgent, "Netscape", "Netscape"], [CFBROWSER_EXPLORER, undefined, navigator.userAgent, "MSIE", "MSIE"], [CFBROWSER_MOZILLA, undefined, navigator.userAgent, "Gecko", "rv"], [CFBROWSER_NETSCAPE, undefined, navigator.userAgent, "Mozilla", "Mozilla"] ]; var __CFBROWSER_WARNING_BROWSER_INFO = "unable to detect browser name/version"; var __CFBROWSER_WARNING_OS_INFO = "unable to detect operating system"; //////////////////////////////////////////////////////////////////////////////// // Static variables //////////////////////////////////////////////////////////////////////////////// var __cfBrowserName = undefined; var __cfBrowserOS = undefined; var __cfBrowserVersion = undefined; //////////////////////////////////////////////////////////////////////////////// // Private functions //////////////////////////////////////////////////////////////////////////////// function __cfBrowserSearchData(data) { for (var i = 0; i < data.length; i++) { var info = data[i]; var s = info[__CFBROWSER_INDEX_STRING]; if ((s && (s.indexOf(info[__CFBROWSER_INDEX_SUBSTRING]) != -1)) || (info[__CFBROWSER_INDEX_PROPERTY])) { return info; } } return undefined; } function __cfBrowserSearchVersion(data, version) { var index = data.indexOf(version); return (index == -1) ? undefined : parseFloat(data.substring(index + version.length + 1)); } //////////////////////////////////////////////////////////////////////////////// // Public API //////////////////////////////////////////////////////////////////////////////// function cfBrowserGetName() { return __cfBrowserName; } function cfBrowserGetOS() { return __cfBrowserOS; } function cfBrowserGetVersion() { return __cfBrowserVersion; } //////////////////////////////////////////////////////////////////////////////// // Initialization //////////////////////////////////////////////////////////////////////////////// var browserInfo = __cfBrowserSearchData(__CFBROWSER_SEARCH_DATA); if (browserInfo) { __cfBrowserName = browserInfo[__CFBROWSER_INDEX_IDENTITY]; var s = browserInfo[__CFBROWSER_INDEX_VERSION_SEARCH]; __cfBrowserVersion = __cfBrowserSearchVersion(navigator.userAgent, s) || __cfBrowserSearchVersion(navigator.appVersion, s) || CFBROWSER_UNKNOWN; } else { cfWarningTrigger(__CFBROWSER_WARNING_BROWSER_INFO); } var osInfo = __cfBrowserSearchData(__CFBROWSER_OS_SEARCH_DATA); if (osInfo) { __cfBrowserOS = osInfo[__CFBROWSER_INDEX_IDENTITY]; } else { cfWarningTrigger(__CFBROWSER_WARNING_OS_INFO); }