/*
06/25/11, downloaded from www.wrox.com, User Agent Detection

the operating system and browser can be had by using ASP Server Variables

1) HTTP_USER_AGENT
2) Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET4.0C; .NET4.0E)

ReleasesWindows NT releases Version Marketing name Editions Release date RTM build 
NT 3.1 Windows NT 3.1 Workstation (named just Windows NT), Advanced Server 27 July 1993 528 
NT 3.5 Windows NT 3.5 Workstation, Server 21 September 1994 807 
NT 3.51 Windows NT 3.51 Workstation, Server 30 May 1995 1057 
NT 4.0 Windows NT 4.0 Workstation, Server, Server Enterprise Edition, Terminal Server, Embedded 29 July 1996 1381

NT 5.0 Windows 2000 Professional, Server, Advanced Server, Datacenter Server, Advanced/Datacenter Server Limited Edition 17 February 2000 2195 

NT 5.1 Windows XP Home, Professional, 64-bit Edition (Itanium), Media Center (original, 2003, 2004 & 2005), Tablet PC (original and 2005), Starter, Embedded, Home N, Professional N 25 October 2001 2600 

NT 5.1 Windows Fundamentals for Legacy PCs N/A 8 July 2006 2600 

NT 5.2 Windows XP 64-bit Edition Version 2003 (Itanium)[15] 28 March 2003 3790 

NT 5.2 Windows Server 2003 Standard, Enterprise, Datacenter, Web, Storage, Small Business Server, Compute Cluster 24 April 2003 3790 

NT 5.2 Windows XP Professional x64 Edition 25 April 2005 3790 

NT 5.2 Windows Server 2003 R2 Standard, Enterprise, Datacenter, Web, Storage, Small Business Server, Compute Cluster 6 December 2005 3790 

NT 5.2 Windows Home Server N/A 16 July 2007 3790 

NT 6.0 Windows Vista Starter, Home Basic, Home Premium, Business, Enterprise, Ultimate, Home Basic N, Business N Business: 30 November 2006

Consumer: 30 January 2007 6000
6001(SP1)
6002(SP2) 

NT 6.0 Windows Server 2008 Foundation, Standard, Enterprise, Datacenter, Web Server, HPC Server, Itanium-Based Systems[16] 27 February 2008 6001
6002(SP2) 

NT 6.1[17] Windows 7 Starter, Home Basic, Home Premium, Professional, Enterprise, Ultimate[18] 22 October 2009[19] 7600
7601(SP1) 

NT 6.1[17] Windows Server 2008 R2 Foundation, Standard, Enterprise, Datacenter, Web Server, HPC Server, Itanium-Based Systems 22 October 2009[20] 7600
7601(SP1) 

NT 6.2 Windows 8 N/A TBC 

NT 6.2 Windows Server Next N/A TBC 

*/
var client = function(){

    //rendering engines
    var engine = {            
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0,
        opera: 0,

        //complete version
        ver: null  
    };
    
    //browsers
    var browser = {
        
        //browsers
        ie: 0,
        firefox: 0,
        safari: 0,
        konq: 0,
        opera: 0,
        chrome: 0,
        safari: 0,

        //specific version
        ver: null
    };

    
    //platform/device/OS and 32/64bit info if Windows
    var system = {
        win: false,
        mac: false,
        x11: false,
        
        //mobile devices
        ipad: false,
        iphone: false,
        ipod: false,
        nokiaN: false,
        winMobile: false,
        macMobile: false,
        
        //game systems
        wii: false,
        ps: false,
        
        WinBit: false	
        //32,64bit 
    };

    //detect rendering engines/browsers
    var ua = navigator.userAgent;    
    if (window.opera){
        engine.ver = browser.ver = window.opera.version();
        engine.opera = browser.opera = parseFloat(engine.ver);
    } else if (/AppleWebKit\/(\S+)/.test(ua)){
        engine.ver = RegExp["$1"];
        engine.webkit = parseFloat(engine.ver);
        
        //figure out if it's Chrome or Safari
        if (/Chrome\/(\S+)/.test(ua)){
            browser.ver = RegExp["$1"];
            browser.chrome = parseFloat(browser.ver);
        } else if (/Version\/(\S+)/.test(ua)){
            browser.ver = RegExp["$1"];
            browser.safari = parseFloat(browser.ver);
        } else {
            //approximate version
            var safariVersion = 1;
            if (engine.webkit < 100){
                safariVersion = 1;
            } else if (engine.webkit < 312){
                safariVersion = 1.2;
            } else if (engine.webkit < 412){
                safariVersion = 1.3;
            } else {
                safariVersion = 2;
            }   
            
            browser.safari = browser.ver = safariVersion;        
        }
    } else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)){
        engine.ver = browser.ver = RegExp["$1"];
        engine.khtml = browser.konq = parseFloat(engine.ver);
    } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){    
        engine.ver = RegExp["$1"];
        engine.gecko = parseFloat(engine.ver);
        
        //determine if it's Firefox
        if (/Firefox\/(\S+)/.test(ua)){
            browser.ver = RegExp["$1"];
            browser.firefox = parseFloat(browser.ver);
        }
    } else if (/MSIE ([^;]+)/.test(ua)){    
        engine.ver = browser.ver = RegExp["$1"];
        engine.ie = browser.ie = parseFloat(engine.ver);
    }
    
    /*
    alert( "engine.ver: " + engine.ver + 
						"\nbrowser.ver: " + browser.ver +
						"\nengine.ie: " + engine.ie +
						"\nbrowser.ie: " + browser.ie ); 
    */
    
    //detect browsers
    browser.ie = engine.ie;
    browser.opera = engine.opera;
    

    //detect platform
    var p = navigator.platform;
    system.win = p.indexOf("Win") == 0;
    system.mac = p.indexOf("Mac") == 0;
    system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);

    //detect windows operating systems
    if (system.win){
    
        if (/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
            if (RegExp["$1"] == "NT"){
                switch(RegExp["$2"]){
                    case "5.0":
                        system.win = "Win2000";
                        break;
                    case "5.1":
                        system.win = "WinXP";
                        break;
                    case "6.0":
                        system.win = "WinVista";
                        break;
                    case "6.1":
                        system.win = "Win7";
                        break;
                    default:
                        system.win = "WinNT";
                        break;                
                }                            
            } else if (RegExp["$1"] == "9x"){
                system.win = "WinME";
            } else {
                system.win = "Win" + RegExp["$1"];
            }
        }
        
      if( ua.toLowerCase().indexOf("wow64") > -1 )
				system.WinBit="-64";
			else
				system.WinBit="-32";
    }
    
    //mobile devices
    system.ipad = ua.indexOf("iPad") > -1;
    system.iphone = ua.indexOf("iPhone") > -1;
    system.ipod = ua.indexOf("iPod") > -1;
    system.nokiaN = ua.indexOf("NokiaN") > -1;
    system.winMobile = (system.win == "CE");
    system.macMobile = (system.iphone || system.ipod);
    
    //gaming systems
    system.wii = ua.indexOf("Wii") > -1;
    system.ps = /playstation/i.test(ua);
    
    //return it
    return {
        engine:     engine,
        browser:    browser,
        system:     system        
    };

}();
